//# 0 errors, 313 messages
//#
/*
    //#MDIBar.java:1:1: class: com.dmdirc.addons.ui_swing.components.MDIBar$1
    //#MDIBar.java:1:1: method: com.dmdirc.addons.ui_swing.components.MDIBar$1.com.dmdirc.addons.ui_swing.components.MDIBar$1__static_init
    //#MDIBar.java:1:1: class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#MDIBar.java:1:1: method: com.dmdirc.addons.ui_swing.components.MDIBar.com.dmdirc.addons.ui_swing.components.MDIBar__static_init
 * 
 * Copyright (c) 2006-2009 Chris Smith, Shane Mc Cormack, Gregory Holmes
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package com.dmdirc.addons.ui_swing.components;

import com.dmdirc.addons.ui_swing.components.frames.TextFrame;
import com.dmdirc.FrameContainer;
import com.dmdirc.config.ConfigManager;
import com.dmdirc.config.IdentityManager;
import com.dmdirc.interfaces.ConfigChangeListener;
import com.dmdirc.ui.IconManager;
import com.dmdirc.ui.WindowManager;
import com.dmdirc.ui.interfaces.FrameManager;
import com.dmdirc.ui.interfaces.Window;
import com.dmdirc.addons.ui_swing.MainFrame;
import com.dmdirc.addons.ui_swing.UIUtilities;

import com.dmdirc.interfaces.SelectionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.JComponent;
import javax.swing.JInternalFrame;
import javax.swing.JPanel;

import net.miginfocom.swing.MigLayout;

/**
 * Provides an MDI style bar for restore/minimise/close.
 */
public class MDIBar extends JPanel implements FrameManager, SelectionListener,
    //#MDIBar.java:53: method: MainFrame com.dmdirc.addons.ui_swing.components.MDIBar.access$000(MDIBar)
    //#input(MainFrame access$000(MDIBar)): x0
    //#input(MainFrame access$000(MDIBar)): x0.mainFrame
    //#output(MainFrame access$000(MDIBar)): return_value
    //#pre[1] (MainFrame access$000(MDIBar)): x0 != null
    //#pre[2] (MainFrame access$000(MDIBar)): init'ed(x0.mainFrame)
    //#post(MainFrame access$000(MDIBar)): return_value == x0.mainFrame
    //#post(MainFrame access$000(MDIBar)): init'ed(return_value)
    //#MDIBar.java:53: end of method: MainFrame com.dmdirc.addons.ui_swing.components.MDIBar.access$000(MDIBar)
    //#MDIBar.java:53: method: String com.dmdirc.addons.ui_swing.components.MDIBar.access$100(MDIBar)
    //#input(String access$100(MDIBar)): x0
    //#input(String access$100(MDIBar)): x0.visibility
    //#output(String access$100(MDIBar)): return_value
    //#pre[1] (String access$100(MDIBar)): x0 != null
    //#pre[2] (String access$100(MDIBar)): init'ed(x0.visibility)
    //#post(String access$100(MDIBar)): return_value == x0.visibility
    //#post(String access$100(MDIBar)): init'ed(return_value)
    //#MDIBar.java:53: end of method: String com.dmdirc.addons.ui_swing.components.MDIBar.access$100(MDIBar)
        PropertyChangeListener, ActionListener, ConfigChangeListener {

    private static final long serialVersionUID = -8028057596226636245L;
    private static final int ICON_SIZE = 12;
    private NoFocusButton closeButton;
    private NoFocusButton minimiseButton;
    private NoFocusButton restoreButton;
    private MainFrame mainFrame;
    private ConfigManager config;
    private String visibility;
    /** Active frame. */
    private Window activeFrame;

    /**
     * Instantiates a new MDI bar.
     *
     * @param mainFrame Main frame instance
     */
    public MDIBar(final MainFrame mainFrame) {
    //#MDIBar.java:72: method: void com.dmdirc.addons.ui_swing.components.MDIBar.com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#input(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): mainFrame
    //#input(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): this
    //#output(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): new NoFocusButton(MDIBar#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): this.closeButton.__Tag
    //#output(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): new NoFocusButton(MDIBar#2) num objects
    //#output(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): this.minimiseButton.__Tag
    //#output(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): new NoFocusButton(MDIBar#3) num objects
    //#output(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): this.restoreButton.__Tag
    //#output(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): this.closeButton
    //#output(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): this.config
    //#output(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): this.mainFrame
    //#output(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): this.minimiseButton
    //#output(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): this.restoreButton
    //#output(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): this.visibility
    //#new obj(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): new NoFocusButton(MDIBar#1)
    //#new obj(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): new NoFocusButton(MDIBar#2)
    //#new obj(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): new NoFocusButton(MDIBar#3)
    //#presumption(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@74 != null
    //#presumption(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): com.dmdirc.ui.IconManager:getIconManager(...)@77 != null
    //#presumption(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): com.dmdirc.ui.IconManager:getIconManager(...)@79 != null
    //#presumption(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): com.dmdirc.ui.IconManager:getIconManager(...)@81 != null
    //#post(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): this.closeButton == &new NoFocusButton(MDIBar#1)
    //#post(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): this.config != null
    //#post(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): this.mainFrame == mainFrame
    //#post(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): init'ed(this.mainFrame)
    //#post(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): this.minimiseButton == &new NoFocusButton(MDIBar#2)
    //#post(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): this.restoreButton == &new NoFocusButton(MDIBar#3)
    //#post(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): init'ed(this.visibility)
    //#post(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): new NoFocusButton(MDIBar#1) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): new NoFocusButton(MDIBar#2) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): new NoFocusButton(MDIBar#3) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): this.closeButton.__Tag == com/dmdirc/addons/ui_swing/components/NoFocusButton
    //#post(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): this.minimiseButton.__Tag == com/dmdirc/addons/ui_swing/components/NoFocusButton
    //#post(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): this.restoreButton.__Tag == com/dmdirc/addons/ui_swing/components/NoFocusButton
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): Effects-of-calling:java.lang.Runnable:run
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): Effects-of-calling:javax.swing.SwingUtilities:invokeLater
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): Effects-of-calling:javax.swing.JButton
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): Effects-of-calling:javax.swing.BorderFactory:createEtchedBorder
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.NoFocusButton:setBorder
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.NoFocusButton:setContentAreaFilled
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.NoFocusButton:setFocusPainted
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): Effects-of-calling:java.awt.Insets
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.NoFocusButton:setMargin
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.NoFocusButton:setFocusable
        this.mainFrame = mainFrame;
        this.config = IdentityManager.getGlobalConfig();
    //#MDIBar.java:74: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
        visibility = config.getOption("ui", "mdiBarVisibility");
    //#MDIBar.java:75: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)

        closeButton = new NoFocusButton(IconManager.getIconManager().
    //#MDIBar.java:77: Warning: method not available - call not analyzed
    //#    call on IconManager com.dmdirc.ui.IconManager:getIconManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: IconManager com.dmdirc.ui.IconManager:getIconManager()
    //#MDIBar.java:77: Warning: method not available - call not analyzed
    //#    call on Icon com.dmdirc.ui.IconManager:getScaledIcon(String, int, int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: Icon com.dmdirc.ui.IconManager:getScaledIcon(String, int, int)
                getScaledIcon("close-12", ICON_SIZE, ICON_SIZE));
        minimiseButton = new NoFocusButton(IconManager.getIconManager().
    //#MDIBar.java:79: Warning: method not available - call not analyzed
    //#    call on IconManager com.dmdirc.ui.IconManager:getIconManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: IconManager com.dmdirc.ui.IconManager:getIconManager()
    //#MDIBar.java:79: Warning: method not available - call not analyzed
    //#    call on Icon com.dmdirc.ui.IconManager:getScaledIcon(String, int, int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: Icon com.dmdirc.ui.IconManager:getScaledIcon(String, int, int)
                getScaledIcon("minimise-12", ICON_SIZE, ICON_SIZE));
        restoreButton = new NoFocusButton(IconManager.getIconManager().
    //#MDIBar.java:81: Warning: method not available - call not analyzed
    //#    call on IconManager com.dmdirc.ui.IconManager:getIconManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: IconManager com.dmdirc.ui.IconManager:getIconManager()
    //#MDIBar.java:81: Warning: method not available - call not analyzed
    //#    call on Icon com.dmdirc.ui.IconManager:getScaledIcon(String, int, int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: Icon com.dmdirc.ui.IconManager:getScaledIcon(String, int, int)
                getScaledIcon("maximise-12", ICON_SIZE, ICON_SIZE));

        setOpaque(false);
    //#MDIBar.java:84: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.MDIBar:setOpaque(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.MDIBar:setOpaque(bool)
        setLayout(new MigLayout("hmax 17, ins 1 0 0 0, fill"));
    //#MDIBar.java:85: Warning: method not available - call not analyzed
    //#    call on void net.miginfocom.swing.MigLayout(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: void net.miginfocom.swing.MigLayout(String)
    //#MDIBar.java:85: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.MDIBar:setLayout(LayoutManager)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.MDIBar:setLayout(LayoutManager)
        add(minimiseButton, "w 17!, h 17!, right");
    //#MDIBar.java:86: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.MDIBar:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.MDIBar:add(Component, Object)
        add(restoreButton, "w 17!, h 17!, right");
    //#MDIBar.java:87: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.MDIBar:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.MDIBar:add(Component, Object)
        add(closeButton, "w 17!, h 17!, right");
    //#MDIBar.java:88: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.MDIBar:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.MDIBar:add(Component, Object)


        WindowManager.addFrameManager(this);
    //#MDIBar.java:91: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.WindowManager:addFrameManager(FrameManager)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: void com.dmdirc.ui.WindowManager:addFrameManager(FrameManager)
        WindowManager.addSelectionListener(this);
    //#MDIBar.java:92: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.WindowManager:addSelectionListener(SelectionListener)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: void com.dmdirc.ui.WindowManager:addSelectionListener(SelectionListener)
        closeButton.addActionListener(this);
    //#MDIBar.java:93: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.NoFocusButton:addActionListener(ActionListener)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.NoFocusButton:addActionListener(ActionListener)
        minimiseButton.addActionListener(this);
    //#MDIBar.java:94: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.NoFocusButton:addActionListener(ActionListener)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.NoFocusButton:addActionListener(ActionListener)
        restoreButton.addActionListener(this);
    //#MDIBar.java:95: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.NoFocusButton:addActionListener(ActionListener)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.NoFocusButton:addActionListener(ActionListener)
        config.addChangeListener("ui", "mdiBarVisibility", this);
    //#MDIBar.java:96: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.ConfigManager:addChangeListener(String, String, ConfigChangeListener)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)
    //#    unanalyzed callee: void com.dmdirc.config.ConfigManager:addChangeListener(String, String, ConfigChangeListener)

        check();
    }
    //#MDIBar.java:99: end of method: void com.dmdirc.addons.ui_swing.components.MDIBar.com.dmdirc.addons.ui_swing.components.MDIBar(MainFrame)

    /** {@inheritDoc} */
    @Override
    public void setEnabled(final boolean enabled) {
        closeButton.setEnabled(enabled);
    //#MDIBar.java:104: method: void com.dmdirc.addons.ui_swing.components.MDIBar.setEnabled(bool)
    //#MDIBar.java:104: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.NoFocusButton:setEnabled(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void setEnabled(bool)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.NoFocusButton:setEnabled(bool)
    //#input(void setEnabled(bool)): enabled
    //#input(void setEnabled(bool)): this
    //#input(void setEnabled(bool)): this.closeButton
    //#input(void setEnabled(bool)): this.minimiseButton
    //#input(void setEnabled(bool)): this.restoreButton
    //#pre[3] (void setEnabled(bool)): this.closeButton != null
    //#pre[4] (void setEnabled(bool)): this.minimiseButton != null
    //#pre[5] (void setEnabled(bool)): this.restoreButton != null
        minimiseButton.setEnabled(enabled);
    //#MDIBar.java:105: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.NoFocusButton:setEnabled(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void setEnabled(bool)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.NoFocusButton:setEnabled(bool)
        restoreButton.setEnabled(enabled);
    //#MDIBar.java:106: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.NoFocusButton:setEnabled(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void setEnabled(bool)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.NoFocusButton:setEnabled(bool)
    }
    //#MDIBar.java:107: end of method: void com.dmdirc.addons.ui_swing.components.MDIBar.setEnabled(bool)

    private void check() {
        UIUtilities.invokeLater(new Runnable() {
    //#MDIBar.java:110: method: void com.dmdirc.addons.ui_swing.components.MDIBar$1.com.dmdirc.addons.ui_swing.components.MDIBar$1(MDIBar)
    //#input(void com.dmdirc.addons.ui_swing.components.MDIBar$1(MDIBar)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.components.MDIBar$1(MDIBar)): this
    //#output(void com.dmdirc.addons.ui_swing.components.MDIBar$1(MDIBar)): this.this$0
    //#post(void com.dmdirc.addons.ui_swing.components.MDIBar$1(MDIBar)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.components.MDIBar$1(MDIBar)): init'ed(this.this$0)
    //#MDIBar.java:110: end of method: void com.dmdirc.addons.ui_swing.components.MDIBar$1.com.dmdirc.addons.ui_swing.components.MDIBar$1(MDIBar)
    //#MDIBar.java:110: method: void com.dmdirc.addons.ui_swing.components.MDIBar.check()
    //#input(void check()): this
    //#unanalyzed(void check()): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void check()): Effects-of-calling:java.lang.Runnable:run
    //#unanalyzed(void check()): Effects-of-calling:javax.swing.SwingUtilities:invokeLater

            @Override
            public void run() {
                boolean show = true;
    //#MDIBar.java:114: method: void com.dmdirc.addons.ui_swing.components.MDIBar$1.run()
    //#input(void run()): com/dmdirc/addons/ui_swing/UIUtilities.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void run()): com/dmdirc/addons/ui_swing/components/MDIBar.__Descendant_Table[com/dmdirc/addons/ui_swing/components/MDIBar]
    //#input(void run()): com/dmdirc/addons/ui_swing/components/MDIBar.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/addons/ui_swing/components/MDIBar.__Dispatch_Table.setEnabled(Z)V
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.this$0.__Tag
    //#input(void run()): this.this$0.closeButton
    //#input(void run()): this.this$0.mainFrame
    //#input(void run()): this.this$0.mainFrame.desktopPane
    //#input(void run()): this.this$0.minimiseButton
    //#input(void run()): this.this$0.restoreButton
    //#input(void run()): this.this$0.visibility
    //#pre[5] (void run()): init'ed(this.mainFrame)
    //#pre[2] (void run()): (soft) this.this$0 != null
    //#pre[3] (void run()): (soft) this.__Tag == com/dmdirc/addons/ui_swing/components/MDIBar
    //#pre[4] (void run()): (soft) this.closeButton != null
    //#pre[6] (void run()): (soft) this.mainFrame.desktopPane != null
    //#pre[7] (void run()): (soft) this.minimiseButton != null
    //#pre[8] (void run()): (soft) this.restoreButton != null
    //#pre[9] (void run()): (soft) init'ed(this.visibility)
    //#presumption(void run()): javax.swing.JDesktopPane:getAllFrames(...)@119 != null
    //#presumption(void run()): javax.swing.JDesktopPane:getAllFrames(...)@126 != null
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.SwingUtilities:invokeAndWait
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.ReturnableThread:run
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.ReturnableThread:getObject
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.ReturnableThread
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Boolean:booleanValue
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.NoFocusButton:setEnabled
    //#test_vector(void run()): this.mainFrame: Inverse{null}, Addr_Set{null}
    //#test_vector(void run()): java.lang.String:equalsIgnoreCase(...)@118: {0}, {1}
    //#test_vector(void run()): java.lang.String:equalsIgnoreCase(...)@120: {0}, {1}
    //#test_vector(void run()): java.lang.String:equalsIgnoreCase(...)@122: {0}, {1}
                if (mainFrame == null) {
                    show = false;
    //#MDIBar.java:116: Warning: unused assignment
    //#    Unused assignment into show
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar$1
    //#    method: void run()
    //#    Attribs:  Uncertain
                    return;
                } else if ("alwaysShow".equalsIgnoreCase(visibility)) {
                    show = mainFrame.getDesktopPane().getAllFrames().length > 0;
                } else if ("neverShow".equalsIgnoreCase(visibility)) {
                    show = false;
                } else if ("showWhenMaximised".equalsIgnoreCase(visibility)) {
                    show = mainFrame.getMaximised();
                }
                setVisible(show);
    //#MDIBar.java:125: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.MDIBar:setVisible(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar$1
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.MDIBar:setVisible(bool)
                setEnabled(mainFrame.getDesktopPane().getAllFrames().length > 0);
            }
    //#MDIBar.java:127: end of method: void com.dmdirc.addons.ui_swing.components.MDIBar$1.run()
        });
    }
    //#MDIBar.java:129: end of method: void com.dmdirc.addons.ui_swing.components.MDIBar.check()

    /** {@inheritDoc} */
    @Override
    public void setParent(final JComponent parent) {
        //Ignore
    }
    //#MDIBar.java:135: method: void com.dmdirc.addons.ui_swing.components.MDIBar.setParent(JComponent)
    //#MDIBar.java:135: end of method: void com.dmdirc.addons.ui_swing.components.MDIBar.setParent(JComponent)

    /** {@inheritDoc} */
    @Override
    public boolean canPositionVertically() {
        return true;
    //#MDIBar.java:140: method: bool com.dmdirc.addons.ui_swing.components.MDIBar.canPositionVertically()
    //#output(bool canPositionVertically()): return_value
    //#post(bool canPositionVertically()): return_value == 1
    //#MDIBar.java:140: end of method: bool com.dmdirc.addons.ui_swing.components.MDIBar.canPositionVertically()
    }

    /** {@inheritDoc} */
    @Override
    public boolean canPositionHorizontally() {
        return true;
    //#MDIBar.java:146: method: bool com.dmdirc.addons.ui_swing.components.MDIBar.canPositionHorizontally()
    //#output(bool canPositionHorizontally()): return_value
    //#post(bool canPositionHorizontally()): return_value == 1
    //#MDIBar.java:146: end of method: bool com.dmdirc.addons.ui_swing.components.MDIBar.canPositionHorizontally()
    }

    /** {@inheritDoc} */
    @Override
    public void addWindow(final FrameContainer window) {
        if (window.getFrame() instanceof JInternalFrame) {
    //#MDIBar.java:152: method: void com.dmdirc.addons.ui_swing.components.MDIBar.addWindow(FrameContainer)
    //#MDIBar.java:152: Warning: method not available - call not analyzed
    //#    call on Window com.dmdirc.FrameContainer:getFrame()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void addWindow(FrameContainer)
    //#    unanalyzed callee: Window com.dmdirc.FrameContainer:getFrame()
    //#input(void addWindow(FrameContainer)): this
    //#input(void addWindow(FrameContainer)): window
    //#pre[2] (void addWindow(FrameContainer)): window != null
    //#presumption(void addWindow(FrameContainer)): com.dmdirc.FrameContainer:getFrame(...)@153 != null
    //#unanalyzed(void addWindow(FrameContainer)): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void addWindow(FrameContainer)): Effects-of-calling:java.lang.Runnable:run
    //#unanalyzed(void addWindow(FrameContainer)): Effects-of-calling:javax.swing.SwingUtilities:invokeLater
            ((JInternalFrame) window.getFrame()).addPropertyChangeListener(
    //#MDIBar.java:153: Warning: method not available - call not analyzed
    //#    call on Window com.dmdirc.FrameContainer:getFrame()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void addWindow(FrameContainer)
    //#    unanalyzed callee: Window com.dmdirc.FrameContainer:getFrame()
                    "maximum", this);
        }
        check();
    }
    //#MDIBar.java:157: end of method: void com.dmdirc.addons.ui_swing.components.MDIBar.addWindow(FrameContainer)

    /** {@inheritDoc} */
    @Override
    public void delWindow(final FrameContainer window) {
        if (window.getFrame() instanceof JInternalFrame) {
    //#MDIBar.java:162: method: void com.dmdirc.addons.ui_swing.components.MDIBar.delWindow(FrameContainer)
    //#MDIBar.java:162: Warning: method not available - call not analyzed
    //#    call on Window com.dmdirc.FrameContainer:getFrame()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void delWindow(FrameContainer)
    //#    unanalyzed callee: Window com.dmdirc.FrameContainer:getFrame()
    //#input(void delWindow(FrameContainer)): this
    //#input(void delWindow(FrameContainer)): window
    //#pre[2] (void delWindow(FrameContainer)): window != null
    //#presumption(void delWindow(FrameContainer)): com.dmdirc.FrameContainer:getFrame(...)@163 != null
    //#unanalyzed(void delWindow(FrameContainer)): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void delWindow(FrameContainer)): Effects-of-calling:java.lang.Runnable:run
    //#unanalyzed(void delWindow(FrameContainer)): Effects-of-calling:javax.swing.SwingUtilities:invokeLater
            ((JInternalFrame) window.getFrame()).removePropertyChangeListener(
    //#MDIBar.java:163: Warning: method not available - call not analyzed
    //#    call on Window com.dmdirc.FrameContainer:getFrame()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void delWindow(FrameContainer)
    //#    unanalyzed callee: Window com.dmdirc.FrameContainer:getFrame()
                    this);
        }
        check();
    }
    //#MDIBar.java:167: end of method: void com.dmdirc.addons.ui_swing.components.MDIBar.delWindow(FrameContainer)

    /** {@inheritDoc} */
    @Override
    public void addWindow(final FrameContainer parent,
                          final FrameContainer window) {
        addWindow(window);
    //#MDIBar.java:173: method: void com.dmdirc.addons.ui_swing.components.MDIBar.addWindow(FrameContainer, FrameContainer)
    //#input(void addWindow(FrameContainer, FrameContainer)): __Descendant_Table[com/dmdirc/addons/ui_swing/components/MDIBar]
    //#input(void addWindow(FrameContainer, FrameContainer)): __Descendant_Table[others]
    //#input(void addWindow(FrameContainer, FrameContainer)): __Dispatch_Table.addWindow(Lcom/dmdirc/FrameContainer;)V
    //#input(void addWindow(FrameContainer, FrameContainer)): this
    //#input(void addWindow(FrameContainer, FrameContainer)): this.__Tag
    //#input(void addWindow(FrameContainer, FrameContainer)): window
    //#pre[2] (void addWindow(FrameContainer, FrameContainer)): this.__Tag == com/dmdirc/addons/ui_swing/components/MDIBar
    //#pre[3] (void addWindow(FrameContainer, FrameContainer)): window != null
    //#unanalyzed(void addWindow(FrameContainer, FrameContainer)): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void addWindow(FrameContainer, FrameContainer)): Effects-of-calling:java.lang.Runnable:run
    //#unanalyzed(void addWindow(FrameContainer, FrameContainer)): Effects-of-calling:javax.swing.SwingUtilities:invokeLater
    //#unanalyzed(void addWindow(FrameContainer, FrameContainer)): Effects-of-calling:com.dmdirc.FrameContainer:getFrame
    //#unanalyzed(void addWindow(FrameContainer, FrameContainer)): Effects-of-calling:javax.swing.JInternalFrame:instanceof
    //#unanalyzed(void addWindow(FrameContainer, FrameContainer)): Effects-of-calling:javax.swing.JInternalFrame:addPropertyChangeListener
    }
    //#MDIBar.java:174: end of method: void com.dmdirc.addons.ui_swing.components.MDIBar.addWindow(FrameContainer, FrameContainer)

    /** {@inheritDoc} */
    @Override
    public void delWindow(final FrameContainer parent,
                          final FrameContainer window) {
        delWindow(window);
    //#MDIBar.java:180: method: void com.dmdirc.addons.ui_swing.components.MDIBar.delWindow(FrameContainer, FrameContainer)
    //#input(void delWindow(FrameContainer, FrameContainer)): __Descendant_Table[com/dmdirc/addons/ui_swing/components/MDIBar]
    //#input(void delWindow(FrameContainer, FrameContainer)): __Descendant_Table[others]
    //#input(void delWindow(FrameContainer, FrameContainer)): __Dispatch_Table.delWindow(Lcom/dmdirc/FrameContainer;)V
    //#input(void delWindow(FrameContainer, FrameContainer)): this
    //#input(void delWindow(FrameContainer, FrameContainer)): this.__Tag
    //#input(void delWindow(FrameContainer, FrameContainer)): window
    //#pre[2] (void delWindow(FrameContainer, FrameContainer)): this.__Tag == com/dmdirc/addons/ui_swing/components/MDIBar
    //#pre[3] (void delWindow(FrameContainer, FrameContainer)): window != null
    //#unanalyzed(void delWindow(FrameContainer, FrameContainer)): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void delWindow(FrameContainer, FrameContainer)): Effects-of-calling:java.lang.Runnable:run
    //#unanalyzed(void delWindow(FrameContainer, FrameContainer)): Effects-of-calling:javax.swing.SwingUtilities:invokeLater
    //#unanalyzed(void delWindow(FrameContainer, FrameContainer)): Effects-of-calling:com.dmdirc.FrameContainer:getFrame
    //#unanalyzed(void delWindow(FrameContainer, FrameContainer)): Effects-of-calling:javax.swing.JInternalFrame:instanceof
    //#unanalyzed(void delWindow(FrameContainer, FrameContainer)): Effects-of-calling:javax.swing.JInternalFrame:removePropertyChangeListener
    }
    //#MDIBar.java:181: end of method: void com.dmdirc.addons.ui_swing.components.MDIBar.delWindow(FrameContainer, FrameContainer)

    /** {@inheritDoc} */
    @Override
    public void propertyChange(final PropertyChangeEvent evt) {
        if ((Boolean) evt.getNewValue()) {
    //#MDIBar.java:186: method: void com.dmdirc.addons.ui_swing.components.MDIBar.propertyChange(PropertyChangeEvent)
    //#input(void propertyChange(PropertyChangeEvent)): evt
    //#input(void propertyChange(PropertyChangeEvent)): this
    //#input(void propertyChange(PropertyChangeEvent)): this.restoreButton
    //#pre[1] (void propertyChange(PropertyChangeEvent)): evt != null
    //#pre[3] (void propertyChange(PropertyChangeEvent)): this.restoreButton != null
    //#presumption(void propertyChange(PropertyChangeEvent)): com.dmdirc.ui.IconManager:getIconManager(...)@187 != null
    //#presumption(void propertyChange(PropertyChangeEvent)): com.dmdirc.ui.IconManager:getIconManager(...)@190 != null
    //#presumption(void propertyChange(PropertyChangeEvent)): java.beans.PropertyChangeEvent:getNewValue(...)@186 != null
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:java.lang.Runnable:run
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:javax.swing.SwingUtilities:invokeLater
    //#test_vector(void propertyChange(PropertyChangeEvent)): java.lang.Boolean:booleanValue(...)@186: {0}, {1}
            restoreButton.setIcon(IconManager.getIconManager().getScaledIcon(
    //#MDIBar.java:187: Warning: method not available - call not analyzed
    //#    call on IconManager com.dmdirc.ui.IconManager:getIconManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void propertyChange(PropertyChangeEvent)
    //#    unanalyzed callee: IconManager com.dmdirc.ui.IconManager:getIconManager()
    //#MDIBar.java:187: Warning: method not available - call not analyzed
    //#    call on Icon com.dmdirc.ui.IconManager:getScaledIcon(String, int, int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void propertyChange(PropertyChangeEvent)
    //#    unanalyzed callee: Icon com.dmdirc.ui.IconManager:getScaledIcon(String, int, int)
    //#MDIBar.java:187: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.NoFocusButton:setIcon(Icon)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void propertyChange(PropertyChangeEvent)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.NoFocusButton:setIcon(Icon)
                    "restore-12", ICON_SIZE, ICON_SIZE));
        } else {
            restoreButton.setIcon(IconManager.getIconManager().getScaledIcon(
    //#MDIBar.java:190: Warning: method not available - call not analyzed
    //#    call on IconManager com.dmdirc.ui.IconManager:getIconManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void propertyChange(PropertyChangeEvent)
    //#    unanalyzed callee: IconManager com.dmdirc.ui.IconManager:getIconManager()
    //#MDIBar.java:190: Warning: method not available - call not analyzed
    //#    call on Icon com.dmdirc.ui.IconManager:getScaledIcon(String, int, int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void propertyChange(PropertyChangeEvent)
    //#    unanalyzed callee: Icon com.dmdirc.ui.IconManager:getScaledIcon(String, int, int)
    //#MDIBar.java:190: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.NoFocusButton:setIcon(Icon)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void propertyChange(PropertyChangeEvent)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.NoFocusButton:setIcon(Icon)
                    "maximise-12", ICON_SIZE, ICON_SIZE));
        }
        check();
    }
    //#MDIBar.java:194: end of method: void com.dmdirc.addons.ui_swing.components.MDIBar.propertyChange(PropertyChangeEvent)

    /**
     * {@inheritDoc}
     *
     * @param e Action event
     */
    @Override
    public void actionPerformed(final ActionEvent e) {
        if (activeFrame == null) {
    //#MDIBar.java:203: method: void com.dmdirc.addons.ui_swing.components.MDIBar.actionPerformed(ActionEvent)
    //#input(void actionPerformed(ActionEvent)): e
    //#input(void actionPerformed(ActionEvent)): this
    //#input(void actionPerformed(ActionEvent)): this.activeFrame
    //#input(void actionPerformed(ActionEvent)): this.closeButton
    //#input(void actionPerformed(ActionEvent)): this.minimiseButton
    //#input(void actionPerformed(ActionEvent)): this.restoreButton
    //#pre[3] (void actionPerformed(ActionEvent)): init'ed(this.activeFrame)
    //#pre[1] (void actionPerformed(ActionEvent)): (soft) e != null
    //#pre[4] (void actionPerformed(ActionEvent)): (soft) this.closeButton != null
    //#pre[5] (void actionPerformed(ActionEvent)): (soft) this.minimiseButton != null
    //#pre[6] (void actionPerformed(ActionEvent)): (soft) this.restoreButton != null
    //#test_vector(void actionPerformed(ActionEvent)): this.activeFrame: Inverse{null}, Addr_Set{null}
    //#test_vector(void actionPerformed(ActionEvent)): java.lang.Object:equals(...)@206: {0}, {1}
    //#test_vector(void actionPerformed(ActionEvent)): java.lang.Object:equals(...)@208: {0}, {1}
    //#test_vector(void actionPerformed(ActionEvent)): java.lang.Object:equals(...)@210: {0}, {1}
            return;
        }
        if (closeButton.equals(e.getSource())) {
            activeFrame.close();
    //#MDIBar.java:207: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.Window:close()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.Window:close()
        } else if (minimiseButton.equals(e.getSource())) {
            ((TextFrame) activeFrame).minimise();
    //#MDIBar.java:209: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.frames.TextFrame:minimise()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.frames.TextFrame:minimise()
        } else if (restoreButton.equals(e.getSource())) {
            activeFrame.toggleMaximise();
    //#MDIBar.java:211: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.Window:toggleMaximise()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.Window:toggleMaximise()
        }
    }
    //#MDIBar.java:213: end of method: void com.dmdirc.addons.ui_swing.components.MDIBar.actionPerformed(ActionEvent)

    /** {@inheritDoc} */
    @Override
    public void configChanged(final String domain, final String key) {
        visibility = config.getOption("ui", "mdiBarVisibility");
    //#MDIBar.java:218: method: void com.dmdirc.addons.ui_swing.components.MDIBar.configChanged(String, String)
    //#MDIBar.java:218: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.MDIBar
    //#    method: void configChanged(String, String)
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#input(void configChanged(String, String)): this
    //#input(void configChanged(String, String)): this.config
    //#output(void configChanged(String, String)): this.visibility
    //#pre[2] (void configChanged(String, String)): this.config != null
    //#post(void configChanged(String, String)): init'ed(this.visibility)
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:java.lang.Runnable:run
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:javax.swing.SwingUtilities:invokeLater
        check();
    }
    //#MDIBar.java:220: end of method: void com.dmdirc.addons.ui_swing.components.MDIBar.configChanged(String, String)

    @Override
    public void selectionChanged(Window window) {
        activeFrame = window;
    //#MDIBar.java:224: method: void com.dmdirc.addons.ui_swing.components.MDIBar.selectionChanged(Window)
    //#input(void selectionChanged(Window)): this
    //#input(void selectionChanged(Window)): window
    //#output(void selectionChanged(Window)): this.activeFrame
    //#post(void selectionChanged(Window)): this.activeFrame == window
    //#post(void selectionChanged(Window)): init'ed(this.activeFrame)
    }
    //#MDIBar.java:225: end of method: void com.dmdirc.addons.ui_swing.components.MDIBar.selectionChanged(Window)
}
    //#output(com.dmdirc.addons.ui_swing.components.MDIBar$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/MDIBar$1]
    //#output(com.dmdirc.addons.ui_swing.components.MDIBar$1__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.ui_swing.components.MDIBar$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/MDIBar$1] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.MDIBar$1__static_init): __Dispatch_Table.run()V == &run
    //#MDIBar.java:: end of method: com.dmdirc.addons.ui_swing.components.MDIBar$1.com.dmdirc.addons.ui_swing.components.MDIBar$1__static_init
    //#MDIBar.java:: end of class: com.dmdirc.addons.ui_swing.components.MDIBar$1
    //#output(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/MDIBar]
    //#output(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V
    //#output(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.addWindow(Lcom/dmdirc/FrameContainer;)V
    //#output(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.addWindow(Lcom/dmdirc/FrameContainer;Lcom/dmdirc/FrameContainer;)V
    //#output(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.canPositionHorizontally()Z
    //#output(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.canPositionVertically()Z
    //#output(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.check()V
    //#output(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.configChanged(Ljava/lang/String;Ljava/lang/String;)V
    //#output(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.delWindow(Lcom/dmdirc/FrameContainer;)V
    //#output(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.delWindow(Lcom/dmdirc/FrameContainer;Lcom/dmdirc/FrameContainer;)V
    //#output(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.propertyChange(Ljava/beans/PropertyChangeEvent;)V
    //#output(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.selectionChanged(Lcom/dmdirc/ui/interfaces/Window;)V
    //#output(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.setEnabled(Z)V
    //#output(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.setParent(Ljavax/swing/JComponent;)V
    //#post(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/MDIBar] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V == &actionPerformed
    //#post(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.addWindow(Lcom/dmdirc/FrameContainer;)V == &addWindow
    //#post(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.addWindow(Lcom/dmdirc/FrameContainer;Lcom/dmdirc/FrameContainer;)V == &addWindow
    //#post(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.canPositionHorizontally()Z == &canPositionHorizontally
    //#post(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.canPositionVertically()Z == &canPositionVertically
    //#post(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.check()V == &check
    //#post(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.configChanged(Ljava/lang/String;Ljava/lang/String;)V == &configChanged
    //#post(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.delWindow(Lcom/dmdirc/FrameContainer;)V == &delWindow
    //#post(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.delWindow(Lcom/dmdirc/FrameContainer;Lcom/dmdirc/FrameContainer;)V == &delWindow
    //#post(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.propertyChange(Ljava/beans/PropertyChangeEvent;)V == &propertyChange
    //#post(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.selectionChanged(Lcom/dmdirc/ui/interfaces/Window;)V == &selectionChanged
    //#post(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.setEnabled(Z)V == &setEnabled
    //#post(com.dmdirc.addons.ui_swing.components.MDIBar__static_init): __Dispatch_Table.setParent(Ljavax/swing/JComponent;)V == &setParent
    //#MDIBar.java:: end of method: com.dmdirc.addons.ui_swing.components.MDIBar.com.dmdirc.addons.ui_swing.components.MDIBar__static_init
    //#MDIBar.java:: end of class: com.dmdirc.addons.ui_swing.components.MDIBar
