//# 0 errors, 928 messages
//#
/*
    //#DMDircDesktopPane.java:1:1: class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7
    //#DMDircDesktopPane.java:1:1: method: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7__static_init
    //#DMDircDesktopPane.java:1:1: class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6
    //#DMDircDesktopPane.java:1:1: method: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6__static_init
    //#DMDircDesktopPane.java:1:1: class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5
    //#DMDircDesktopPane.java:1:1: method: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5__static_init
    //#DMDircDesktopPane.java:1:1: class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4
    //#DMDircDesktopPane.java:1:1: method: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4__static_init
    //#DMDircDesktopPane.java:1:1: class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3
    //#DMDircDesktopPane.java:1:1: method: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3__static_init
    //#DMDircDesktopPane.java:1:1: class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2
    //#DMDircDesktopPane.java:1:1: method: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2__static_init
    //#DMDircDesktopPane.java:1:1: class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1
    //#DMDircDesktopPane.java:1:1: method: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1__static_init
    //#DMDircDesktopPane.java:1:1: class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane
 * 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.desktopPane;

import com.dmdirc.FrameContainer;
import com.dmdirc.addons.ui_swing.MainFrame;
import com.dmdirc.interfaces.SelectionListener;
import com.dmdirc.logger.ErrorLevel;
import com.dmdirc.logger.Logger;
import com.dmdirc.ui.WindowManager;
import com.dmdirc.ui.interfaces.FrameManager;
import com.dmdirc.ui.interfaces.Window;
import com.dmdirc.addons.ui_swing.UIUtilities;
import com.dmdirc.addons.ui_swing.components.TreeScroller;
import com.dmdirc.addons.ui_swing.components.frames.InputTextFrame;
import com.dmdirc.addons.ui_swing.components.frames.TextFrame;
import com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel;
import com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode;
import com.dmdirc.util.ReturnableThread;

import java.awt.Color;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
import java.util.concurrent.atomic.AtomicBoolean;

import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JDesktopPane;
import javax.swing.JInternalFrame;
import javax.swing.plaf.DesktopPaneUI;
import javax.swing.tree.DefaultTreeSelectionModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;

/**
 * DMDirc Extentions to JDesktopPane.
 */
public class DMDircDesktopPane extends JDesktopPane implements FrameManager,
    //#DMDircDesktopPane.java:63: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$000(DMDircDesktopPane, Component, Object, int)
    //#DMDircDesktopPane.java:63: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:addImpl(Component, Object, int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane
    //#    method: void access$000(DMDircDesktopPane, Component, Object, int)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:addImpl(Component, Object, int)
    //#input(void access$000(DMDircDesktopPane, Component, Object, int)): x0
    //#input(void access$000(DMDircDesktopPane, Component, Object, int)): x1
    //#input(void access$000(DMDircDesktopPane, Component, Object, int)): x2
    //#input(void access$000(DMDircDesktopPane, Component, Object, int)): x3
    //#pre[1] (void access$000(DMDircDesktopPane, Component, Object, int)): x0 != null
    //#DMDircDesktopPane.java:63: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$000(DMDircDesktopPane, Component, Object, int)
    //#DMDircDesktopPane.java:63: method: int com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$100(DMDircDesktopPane)
    //#input(int access$100(DMDircDesktopPane)): x0
    //#input(int access$100(DMDircDesktopPane)): x0.xOffset
    //#output(int access$100(DMDircDesktopPane)): return_value
    //#pre[1] (int access$100(DMDircDesktopPane)): x0 != null
    //#pre[2] (int access$100(DMDircDesktopPane)): init'ed(x0.xOffset)
    //#post(int access$100(DMDircDesktopPane)): return_value == x0.xOffset
    //#post(int access$100(DMDircDesktopPane)): init'ed(return_value)
    //#DMDircDesktopPane.java:63: end of method: int com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$100(DMDircDesktopPane)
    //#DMDircDesktopPane.java:63: method: int com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$102(DMDircDesktopPane, int)
    //#input(int access$102(DMDircDesktopPane, int)): x0
    //#input(int access$102(DMDircDesktopPane, int)): x1
    //#output(int access$102(DMDircDesktopPane, int)): return_value
    //#output(int access$102(DMDircDesktopPane, int)): x0.xOffset
    //#pre[1] (int access$102(DMDircDesktopPane, int)): x0 != null
    //#post(int access$102(DMDircDesktopPane, int)): return_value == x1
    //#post(int access$102(DMDircDesktopPane, int)): init'ed(return_value)
    //#post(int access$102(DMDircDesktopPane, int)): x0.xOffset == return_value
    //#DMDircDesktopPane.java:63: end of method: int com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$102(DMDircDesktopPane, int)
    //#DMDircDesktopPane.java:63: method: int com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$200(DMDircDesktopPane)
    //#input(int access$200(DMDircDesktopPane)): x0
    //#input(int access$200(DMDircDesktopPane)): x0.yOffset
    //#output(int access$200(DMDircDesktopPane)): return_value
    //#pre[1] (int access$200(DMDircDesktopPane)): x0 != null
    //#pre[2] (int access$200(DMDircDesktopPane)): init'ed(x0.yOffset)
    //#post(int access$200(DMDircDesktopPane)): return_value == x0.yOffset
    //#post(int access$200(DMDircDesktopPane)): init'ed(return_value)
    //#DMDircDesktopPane.java:63: end of method: int com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$200(DMDircDesktopPane)
    //#DMDircDesktopPane.java:63: method: int com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$202(DMDircDesktopPane, int)
    //#input(int access$202(DMDircDesktopPane, int)): x0
    //#input(int access$202(DMDircDesktopPane, int)): x1
    //#output(int access$202(DMDircDesktopPane, int)): return_value
    //#output(int access$202(DMDircDesktopPane, int)): x0.yOffset
    //#pre[1] (int access$202(DMDircDesktopPane, int)): x0 != null
    //#post(int access$202(DMDircDesktopPane, int)): return_value == x1
    //#post(int access$202(DMDircDesktopPane, int)): init'ed(return_value)
    //#post(int access$202(DMDircDesktopPane, int)): x0.yOffset == return_value
    //#DMDircDesktopPane.java:63: end of method: int com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$202(DMDircDesktopPane, int)
    //#DMDircDesktopPane.java:63: method: int com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$112(DMDircDesktopPane, int)
    //#input(int access$112(DMDircDesktopPane, int)): x0
    //#input(int access$112(DMDircDesktopPane, int)): x0.xOffset
    //#input(int access$112(DMDircDesktopPane, int)): x1
    //#output(int access$112(DMDircDesktopPane, int)): return_value
    //#output(int access$112(DMDircDesktopPane, int)): x0.xOffset
    //#pre[1] (int access$112(DMDircDesktopPane, int)): init'ed(x0.xOffset)
    //#pre[2] (int access$112(DMDircDesktopPane, int)): x0 != null
    //#pre[4] (int access$112(DMDircDesktopPane, int)): x1 + x0.xOffset in {-2_147_483_648..4_294_967_295}
    //#post(int access$112(DMDircDesktopPane, int)): return_value == x1 + old x0.xOffset
    //#post(int access$112(DMDircDesktopPane, int)): init'ed(return_value)
    //#post(int access$112(DMDircDesktopPane, int)): x0.xOffset == return_value
    //#DMDircDesktopPane.java:63: end of method: int com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$112(DMDircDesktopPane, int)
    //#DMDircDesktopPane.java:63: method: int com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$212(DMDircDesktopPane, int)
    //#input(int access$212(DMDircDesktopPane, int)): x0
    //#input(int access$212(DMDircDesktopPane, int)): x0.yOffset
    //#input(int access$212(DMDircDesktopPane, int)): x1
    //#output(int access$212(DMDircDesktopPane, int)): return_value
    //#output(int access$212(DMDircDesktopPane, int)): x0.yOffset
    //#pre[1] (int access$212(DMDircDesktopPane, int)): init'ed(x0.yOffset)
    //#pre[2] (int access$212(DMDircDesktopPane, int)): x0 != null
    //#pre[4] (int access$212(DMDircDesktopPane, int)): x1 + x0.yOffset in {-2_147_483_648..4_294_967_295}
    //#post(int access$212(DMDircDesktopPane, int)): return_value == x1 + old x0.yOffset
    //#post(int access$212(DMDircDesktopPane, int)): init'ed(return_value)
    //#post(int access$212(DMDircDesktopPane, int)): x0.yOffset == return_value
    //#DMDircDesktopPane.java:63: end of method: int com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$212(DMDircDesktopPane, int)
    //#DMDircDesktopPane.java:63: method: Window com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$300(DMDircDesktopPane)
    //#input(Window access$300(DMDircDesktopPane)): x0
    //#input(Window access$300(DMDircDesktopPane)): x0.selectedWindow
    //#output(Window access$300(DMDircDesktopPane)): return_value
    //#pre[1] (Window access$300(DMDircDesktopPane)): x0 != null
    //#pre[2] (Window access$300(DMDircDesktopPane)): init'ed(x0.selectedWindow)
    //#post(Window access$300(DMDircDesktopPane)): return_value == x0.selectedWindow
    //#post(Window access$300(DMDircDesktopPane)): init'ed(return_value)
    //#DMDircDesktopPane.java:63: end of method: Window com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$300(DMDircDesktopPane)
    //#DMDircDesktopPane.java:63: method: Map com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$400(DMDircDesktopPane)
    //#input(Map access$400(DMDircDesktopPane)): x0
    //#input(Map access$400(DMDircDesktopPane)): x0.nodes
    //#output(Map access$400(DMDircDesktopPane)): return_value
    //#pre[1] (Map access$400(DMDircDesktopPane)): x0 != null
    //#post(Map access$400(DMDircDesktopPane)): return_value == x0.nodes
    //#post(Map access$400(DMDircDesktopPane)): init'ed(return_value)
    //#DMDircDesktopPane.java:63: end of method: Map com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$400(DMDircDesktopPane)
    //#DMDircDesktopPane.java:63: method: TreeViewModel com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$500(DMDircDesktopPane)
    //#input(TreeViewModel access$500(DMDircDesktopPane)): x0
    //#input(TreeViewModel access$500(DMDircDesktopPane)): x0.model
    //#output(TreeViewModel access$500(DMDircDesktopPane)): return_value
    //#pre[1] (TreeViewModel access$500(DMDircDesktopPane)): x0 != null
    //#post(TreeViewModel access$500(DMDircDesktopPane)): return_value == x0.model
    //#post(TreeViewModel access$500(DMDircDesktopPane)): init'ed(return_value)
    //#DMDircDesktopPane.java:63: end of method: TreeViewModel com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$500(DMDircDesktopPane)
    //#DMDircDesktopPane.java:63: method: MainFrame com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$600(DMDircDesktopPane)
    //#input(MainFrame access$600(DMDircDesktopPane)): x0
    //#input(MainFrame access$600(DMDircDesktopPane)): x0.mainFrame
    //#output(MainFrame access$600(DMDircDesktopPane)): return_value
    //#pre[1] (MainFrame access$600(DMDircDesktopPane)): x0 != null
    //#pre[2] (MainFrame access$600(DMDircDesktopPane)): init'ed(x0.mainFrame)
    //#post(MainFrame access$600(DMDircDesktopPane)): return_value == x0.mainFrame
    //#post(MainFrame access$600(DMDircDesktopPane)): init'ed(return_value)
    //#DMDircDesktopPane.java:63: end of method: MainFrame com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$600(DMDircDesktopPane)
    //#DMDircDesktopPane.java:63: method: Window com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$302(DMDircDesktopPane, Window)
    //#input(Window access$302(DMDircDesktopPane, Window)): x0
    //#input(Window access$302(DMDircDesktopPane, Window)): x1
    //#output(Window access$302(DMDircDesktopPane, Window)): return_value
    //#output(Window access$302(DMDircDesktopPane, Window)): x0.selectedWindow
    //#pre[1] (Window access$302(DMDircDesktopPane, Window)): x0 != null
    //#post(Window access$302(DMDircDesktopPane, Window)): return_value == x1
    //#post(Window access$302(DMDircDesktopPane, Window)): init'ed(return_value)
    //#post(Window access$302(DMDircDesktopPane, Window)): x0.selectedWindow == return_value
    //#DMDircDesktopPane.java:63: end of method: Window com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$302(DMDircDesktopPane, Window)
    //#DMDircDesktopPane.java:63: method: TreeSelectionModel com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$700(DMDircDesktopPane)
    //#input(TreeSelectionModel access$700(DMDircDesktopPane)): x0
    //#input(TreeSelectionModel access$700(DMDircDesktopPane)): x0.selectionModel
    //#output(TreeSelectionModel access$700(DMDircDesktopPane)): return_value
    //#pre[1] (TreeSelectionModel access$700(DMDircDesktopPane)): x0 != null
    //#post(TreeSelectionModel access$700(DMDircDesktopPane)): return_value == x0.selectionModel
    //#post(TreeSelectionModel access$700(DMDircDesktopPane)): init'ed(return_value)
    //#DMDircDesktopPane.java:63: end of method: TreeSelectionModel com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.access$700(DMDircDesktopPane)
        SelectionListener, PropertyChangeListener {

    /** Logger to use. */
    private static final java.util.logging.Logger LOGGER =
    //#DMDircDesktopPane.java:67: method: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): LOGGER
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane]
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.add(Ljavax/swing/JComponent;I)V
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.addWindow(Lcom/dmdirc/FrameContainer;)V
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.addWindow(Lcom/dmdirc/FrameContainer;Lcom/dmdirc/FrameContainer;)V
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.addWindow(Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;Lcom/dmdirc/FrameContainer;)V
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.canPositionHorizontally()Z
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.canPositionVertically()Z
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.delWindow(Lcom/dmdirc/FrameContainer;)V
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.delWindow(Lcom/dmdirc/FrameContainer;Lcom/dmdirc/FrameContainer;)V
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.getSelectedWindow()Lcom/dmdirc/ui/interfaces/Window;
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.handleMaximiseEvent(ZLjava/lang/String;)V
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.handleTitleEvent(Lcom/dmdirc/ui/interfaces/Window;Ljava/lang/String;)V
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.propertyChange(Ljava/beans/PropertyChangeEvent;)V
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.scrollDown()V
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.scrollUp()V
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.selectionChanged(Lcom/dmdirc/ui/interfaces/Window;)V
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.setParent(Ljavax/swing/JComponent;)V
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.setUI(Ljavax/swing/plaf/DesktopPaneUI;)V
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): init'ed(LOGGER)
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.add(Ljavax/swing/JComponent;I)V == &add
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.addWindow(Lcom/dmdirc/FrameContainer;)V == &addWindow
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.addWindow(Lcom/dmdirc/FrameContainer;Lcom/dmdirc/FrameContainer;)V == &addWindow
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.addWindow(Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;Lcom/dmdirc/FrameContainer;)V == &addWindow
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.canPositionHorizontally()Z == &canPositionHorizontally
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.canPositionVertically()Z == &canPositionVertically
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.delWindow(Lcom/dmdirc/FrameContainer;)V == &delWindow
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.delWindow(Lcom/dmdirc/FrameContainer;Lcom/dmdirc/FrameContainer;)V == &delWindow
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.getSelectedWindow()Lcom/dmdirc/ui/interfaces/Window; == &getSelectedWindow
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.handleMaximiseEvent(ZLjava/lang/String;)V == &handleMaximiseEvent
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.handleTitleEvent(Lcom/dmdirc/ui/interfaces/Window;Ljava/lang/String;)V == &handleTitleEvent
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.propertyChange(Ljava/beans/PropertyChangeEvent;)V == &propertyChange
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.scrollDown()V == &scrollDown
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.scrollUp()V == &scrollUp
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.selectionChanged(Lcom/dmdirc/ui/interfaces/Window;)V == &selectionChanged
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.setParent(Ljavax/swing/JComponent;)V == &setParent
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init): __Dispatch_Table.setUI(Ljavax/swing/plaf/DesktopPaneUI;)V == &setUI
    //#DMDircDesktopPane.java:67: end of method: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane__static_init
            java.util.logging.Logger.getLogger(DMDircDesktopPane.class.getName());
    /**
     * A version number for this class. It should be changed whenever the class
     * structure is changed (or anything else that would prevent serialized
     * objects being unserialized with the new class).
     */
    private static final long serialVersionUID = 1;
    /** The current number of pixels to displace new frames in the X
     * direction. */
    private int xOffset;
    /** The current number of pixels to displace new frames in the Y
     * direction. */
    private int yOffset;
    /** The number of pixels each new internal frame is offset by. */
    private static final int FRAME_OPENING_OFFSET = 30;
    /** Node storage, used for adding and deleting nodes correctly. */
    private final Map<FrameContainer, TreeViewNode> nodes;
    /** Data model. */
    private final TreeViewModel model;
    /** Selected model. */
    private final TreeSelectionModel selectionModel;
    /** Tree Scroller. */
    private final TreeScroller treeScroller;
    /** Selected window. */
    private Window selectedWindow;
    /** Maximised state. */
    private boolean maximised;
    /** Changing maximisation. */
    private AtomicBoolean changing = new AtomicBoolean(false);
    /** Main Frame. */
    private MainFrame mainFrame;

    /**
     * Initialises the DMDirc desktop pane.
     * 
     * @param mainFrame Main frame
     */
    public DMDircDesktopPane(final MainFrame mainFrame) {
        super();
    //#DMDircDesktopPane.java:106: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): __Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane]
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): __Descendant_Table[others]
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): __Dispatch_Table.setUI(Ljavax/swing/plaf/DesktopPaneUI;)V
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): com/dmdirc/addons/ui_swing/components/desktopPane/ProxyDesktopPaneUI.__Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/ProxyDesktopPaneUI]
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): com/dmdirc/addons/ui_swing/components/desktopPane/ProxyDesktopPaneUI.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): mainFrame
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.__Tag
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): new AtomicBoolean(DMDircDesktopPane#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): new DMDircDesktopPane$1(DMDircDesktopPane#8) num objects
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.treeScroller.__Tag
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.treeScroller.model
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.treeScroller.rootNode
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.treeScroller.rootVisible
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.treeScroller.selectionModel
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.treeScroller.this$0
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): new DefaultTreeSelectionModel(DMDircDesktopPane#7) num objects
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): new HashMap(DMDircDesktopPane#4) num objects
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): new TreeViewModel(DMDircDesktopPane#5) num objects
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.__Tag
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.changing
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.mainFrame
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.model
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.nodes
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.selectionModel
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.treeScroller
    //#new obj(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): new AtomicBoolean(DMDircDesktopPane#1)
    //#new obj(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): new DMDircDesktopPane$1(DMDircDesktopPane#8)
    //#new obj(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): new DefaultTreeSelectionModel(DMDircDesktopPane#7)
    //#new obj(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): new HashMap(DMDircDesktopPane#4)
    //#new obj(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): new TreeViewModel(DMDircDesktopPane#5)
    //#pre[2] (void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.__Tag == com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.__Tag == com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.changing == &new AtomicBoolean(DMDircDesktopPane#1)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.mainFrame == mainFrame
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): init'ed(this.mainFrame)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.model == &new TreeViewModel(DMDircDesktopPane#5)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.treeScroller.model == &new TreeViewModel(DMDircDesktopPane#5)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.nodes == &new HashMap(DMDircDesktopPane#4)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.selectionModel == &new DefaultTreeSelectionModel(DMDircDesktopPane#7)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.treeScroller.selectionModel == &new DefaultTreeSelectionModel(DMDircDesktopPane#7)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.treeScroller == &new DMDircDesktopPane$1(DMDircDesktopPane#8)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): new AtomicBoolean(DMDircDesktopPane#1) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): new DMDircDesktopPane$1(DMDircDesktopPane#8) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): new DefaultTreeSelectionModel(DMDircDesktopPane#7) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): new HashMap(DMDircDesktopPane#4) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): new TreeViewModel(DMDircDesktopPane#5) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.treeScroller.__Tag == com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$1
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): init'ed(this.treeScroller.rootNode)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.treeScroller.rootVisible == 0
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.treeScroller.this$0 == this
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): this.treeScroller.this$0 != null
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): Effects-of-calling:javax.swing.JDesktopPane:setUI
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): Effects-of-calling:javax.swing.InputMap
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): Effects-of-calling:javax.swing.ActionMap
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): Effects-of-calling:javax.swing.KeyStroke:getKeyStroke
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): Effects-of-calling:javax.swing.InputMap:put
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): Effects-of-calling:javax.swing.AbstractAction
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): Effects-of-calling:javax.swing.ActionMap:put
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): Effects-of-calling:javax.swing.plaf.DesktopPaneUI
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)): Effects-of-calling:javax.swing.tree.DefaultTreeModel:getRoot

        this.mainFrame = mainFrame;
        setBackground(new Color(238, 238, 238));
    //#DMDircDesktopPane.java:109: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:setBackground(Color)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane
    //#    method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:setBackground(Color)
        setBorder(BorderFactory.createEtchedBorder());
    //#DMDircDesktopPane.java:110: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:setBorder(Border)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane
    //#    method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:setBorder(Border)
        setUI(new ProxyDesktopPaneUI(getUI(), this));
    //#DMDircDesktopPane.java:111: Warning: method not available - call not analyzed
    //#    call on DesktopPaneUI com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:getUI()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane
    //#    method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)
    //#    unanalyzed callee: DesktopPaneUI com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:getUI()

        nodes = new HashMap<FrameContainer, TreeViewNode>();
        model = new TreeViewModel(new TreeViewNode(null, null));
    //#DMDircDesktopPane.java:114: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode(NodeLabel, FrameContainer)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane
    //#    method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode(NodeLabel, FrameContainer)
    //#DMDircDesktopPane.java:114: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane
    //#    method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode)
        selectionModel = new DefaultTreeSelectionModel();
        treeScroller = new TreeScroller(model, selectionModel, false) {
    //#DMDircDesktopPane.java:116: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): this
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): x0
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): x1
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): x2
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): this.model
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): this.rootNode
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): this.rootVisible
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): this.selectionModel
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): this.this$0
    //#pre[3] (void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): x0 != null
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): this.model == x0
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): this.model != null
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): init'ed(this.rootNode)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): this.rootVisible == x2
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): init'ed(this.rootVisible)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): this.selectionModel == x1
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): init'ed(this.selectionModel)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): init'ed(this.this$0)
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)): Effects-of-calling:javax.swing.tree.DefaultTreeModel:getRoot
    //#DMDircDesktopPane.java:116: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1(DMDircDesktopPane, DefaultTreeModel, TreeSelectionModel, bool)

            /** {@inheritDoc} */
            @Override
            protected void setPath(final TreePath path) {
                super.setPath(path);
    //#DMDircDesktopPane.java:121: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1.setPath(TreePath)
    //#input(void setPath(TreePath)): path
    //#input(void setPath(TreePath)): this
    //#input(void setPath(TreePath)): this.selectionModel
    //#pre[1] (void setPath(TreePath)): path != null
    //#pre[3] (void setPath(TreePath)): this.selectionModel != null
    //#presumption(void setPath(TreePath)): com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getFrameContainer(...)@122 != null
    //#presumption(void setPath(TreePath)): javax.swing.tree.TreePath:getLastPathComponent(...)@122 != null
    //#unanalyzed(void setPath(TreePath)): Effects-of-calling:javax.swing.tree.TreeSelectionModel:setSelectionPath
                ((TreeViewNode) path.getLastPathComponent()).getFrameContainer().
    //#DMDircDesktopPane.java:122: Warning: method not available - call not analyzed
    //#    call on FrameContainer com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getFrameContainer()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1
    //#    method: void setPath(TreePath)
    //#    unanalyzed callee: FrameContainer com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getFrameContainer()
    //#DMDircDesktopPane.java:122: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.FrameContainer:activateFrame()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1
    //#    method: void setPath(TreePath)
    //#    unanalyzed callee: void com.dmdirc.FrameContainer:activateFrame()
                        activateFrame();
            }
    //#DMDircDesktopPane.java:124: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1.setPath(TreePath)
        };

        WindowManager.addFrameManager(this);
    //#DMDircDesktopPane.java:127: 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.desktopPane.DMDircDesktopPane
    //#    method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)
    //#    unanalyzed callee: void com.dmdirc.ui.WindowManager:addFrameManager(FrameManager)
    }
    //#DMDircDesktopPane.java:128: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane(MainFrame)

    /** {@inheritDoc} */
    @Override
    public void setUI(final DesktopPaneUI ui) {
        if (ui instanceof ProxyDesktopPaneUI) {
    //#DMDircDesktopPane.java:133: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.setUI(DesktopPaneUI)
    //#input(void setUI(DesktopPaneUI)): com/dmdirc/addons/ui_swing/components/desktopPane/ProxyDesktopPaneUI.__Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/ProxyDesktopPaneUI]
    //#input(void setUI(DesktopPaneUI)): com/dmdirc/addons/ui_swing/components/desktopPane/ProxyDesktopPaneUI.__Descendant_Table[others]
    //#input(void setUI(DesktopPaneUI)): this
    //#input(void setUI(DesktopPaneUI)): ui
    //#input(void setUI(DesktopPaneUI)): ui.__Tag
    //#unanalyzed(void setUI(DesktopPaneUI)): Effects-of-calling:javax.swing.InputMap
    //#unanalyzed(void setUI(DesktopPaneUI)): Effects-of-calling:javax.swing.ActionMap
    //#unanalyzed(void setUI(DesktopPaneUI)): Effects-of-calling:javax.swing.KeyStroke:getKeyStroke
    //#unanalyzed(void setUI(DesktopPaneUI)): Effects-of-calling:javax.swing.InputMap:put
    //#unanalyzed(void setUI(DesktopPaneUI)): Effects-of-calling:javax.swing.AbstractAction
    //#unanalyzed(void setUI(DesktopPaneUI)): Effects-of-calling:javax.swing.ActionMap:put
    //#unanalyzed(void setUI(DesktopPaneUI)): Effects-of-calling:javax.swing.plaf.DesktopPaneUI
            super.setUI(ui);
        } else {
            super.setUI(new ProxyDesktopPaneUI(ui, this));
        }
    }
    //#DMDircDesktopPane.java:138: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.setUI(DesktopPaneUI)

    /**
     * Add a specified component at the specified index.
     * 
     * @param comp Component to add
     * @param index Index for insertion
     */
    public void add(final JComponent comp, final int index) {
        UIUtilities.invokeLater(new Runnable() {
    //#DMDircDesktopPane.java:147: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2(DMDircDesktopPane, JComponent, int)
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2(DMDircDesktopPane, JComponent, int)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2(DMDircDesktopPane, JComponent, int)): Param_2
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2(DMDircDesktopPane, JComponent, int)): Param_3
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2(DMDircDesktopPane, JComponent, int)): this
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2(DMDircDesktopPane, JComponent, int)): this.this$0
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2(DMDircDesktopPane, JComponent, int)): this.val$comp
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2(DMDircDesktopPane, JComponent, int)): this.val$index
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2(DMDircDesktopPane, JComponent, int)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2(DMDircDesktopPane, JComponent, int)): init'ed(this.this$0)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2(DMDircDesktopPane, JComponent, int)): this.val$comp == Param_2
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2(DMDircDesktopPane, JComponent, int)): init'ed(this.val$comp)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2(DMDircDesktopPane, JComponent, int)): this.val$index == Param_3
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2(DMDircDesktopPane, JComponent, int)): init'ed(this.val$index)
    //#DMDircDesktopPane.java:147: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2(DMDircDesktopPane, JComponent, int)
    //#DMDircDesktopPane.java:147: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.add(JComponent, int)
    //#input(void add(JComponent, int)): comp
    //#input(void add(JComponent, int)): index
    //#input(void add(JComponent, int)): this
    //#unanalyzed(void add(JComponent, int)): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void add(JComponent, int)): Effects-of-calling:java.lang.Runnable:run
    //#unanalyzed(void add(JComponent, int)): Effects-of-calling:javax.swing.SwingUtilities:invokeLater

            /** {@inheritDoc} */
            @Override
            public void run() {
                addImpl(comp, null, index);
    //#DMDircDesktopPane.java:152: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2.run()
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.this$0.xOffset
    //#input(void run()): this.this$0.yOffset
    //#input(void run()): this.val$comp
    //#input(void run()): this.val$index
    //#output(void run()): this.this$0.xOffset
    //#output(void run()): this.this$0.yOffset
    //#pre[4] (void run()): this.this$0 != null
    //#pre[5] (void run()): this.val$comp != null
    //#pre[1] (void run()): (soft) this.xOffset <= 4_294_967_265
    //#pre[2] (void run()): (soft) this.yOffset <= 4_294_967_265
    //#post(void run()): this.xOffset == One-of{old this.xOffset, 0} + 30
    //#post(void run()): this.this$0.xOffset >= -2_147_483_618
    //#post(void run()): this.yOffset == One-of{old this.yOffset, 0} + 30
    //#post(void run()): this.this$0.yOffset >= -2_147_483_618
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:addImpl

                // Make sure it'll fit with our offsets
                if (comp.getWidth() + xOffset > getWidth()) {
    //#DMDircDesktopPane.java:155: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:getWidth()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2
    //#    method: void run()
    //#    unanalyzed callee: int com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:getWidth()
                    xOffset = 0;
                }
                if (comp.getHeight() + yOffset > getHeight()) {
    //#DMDircDesktopPane.java:158: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:getHeight()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2
    //#    method: void run()
    //#    unanalyzed callee: int com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:getHeight()
                    yOffset = 0;
                }

                // Position the frame
                comp.setLocation(xOffset, yOffset);

                // Increase the offsets
                xOffset += FRAME_OPENING_OFFSET;
                yOffset += FRAME_OPENING_OFFSET;
            }
    //#DMDircDesktopPane.java:168: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2.run()
        });
    }
    //#DMDircDesktopPane.java:170: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.add(JComponent, int)

    /**
     * Returns the select window.
     * 
     * @return Selected window, or null.
     */
    public Window getSelectedWindow() {
        return UIUtilities.invokeAndWait(new ReturnableThread<Window>() {
    //#DMDircDesktopPane.java:178: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3(DMDircDesktopPane)
    //#DMDircDesktopPane.java:178: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.util.ReturnableThread()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3
    //#    method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3(DMDircDesktopPane)
    //#    unanalyzed callee: void com.dmdirc.util.ReturnableThread()
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3(DMDircDesktopPane)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3(DMDircDesktopPane)): this
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3(DMDircDesktopPane)): this.this$0
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3(DMDircDesktopPane)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3(DMDircDesktopPane)): init'ed(this.this$0)
    //#DMDircDesktopPane.java:178: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3(DMDircDesktopPane)
    //#DMDircDesktopPane.java:178: method: Window com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.getSelectedWindow()
    //#input(Window getSelectedWindow()): com/dmdirc/addons/ui_swing/UIUtilities.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(Window getSelectedWindow()): this
    //#output(Window getSelectedWindow()): return_value
    //#post(Window getSelectedWindow()): init'ed(return_value)
    //#unanalyzed(Window getSelectedWindow()): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(Window getSelectedWindow()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(Window getSelectedWindow()): Effects-of-calling:javax.swing.SwingUtilities:invokeAndWait
    //#unanalyzed(Window getSelectedWindow()): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(Window getSelectedWindow()): Effects-of-calling:com.dmdirc.util.ReturnableThread
    //#unanalyzed(Window getSelectedWindow()): Effects-of-calling:com.dmdirc.util.ReturnableThread:run
    //#unanalyzed(Window getSelectedWindow()): Effects-of-calling:com.dmdirc.util.ReturnableThread:getObject
    //#DMDircDesktopPane.java:178: end of method: Window com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.getSelectedWindow()

            /** {@inheritDoc} */
            @Override
            public void run() {
                setObject(selectedWindow);
    //#DMDircDesktopPane.java:183: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3.run()
    //#DMDircDesktopPane.java:183: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3:setObject(Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3:setObject(Object)
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.this$0.selectedWindow
    //#pre[2] (void run()): this.this$0 != null
    //#pre[3] (void run()): init'ed(this.selectedWindow)
            }
    //#DMDircDesktopPane.java:184: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3.run()
        });
    }

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

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

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

    /** {@inheritDoc} */
    @Override
    public void addWindow(final FrameContainer window) {
        addWindow(model.getRootNode(), window);
    //#DMDircDesktopPane.java:209: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.addWindow(FrameContainer)
    //#DMDircDesktopPane.java:209: Warning: method not available - call not analyzed
    //#    call on TreeViewNode com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel:getRootNode()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane
    //#    method: void addWindow(FrameContainer)
    //#    unanalyzed callee: TreeViewNode com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel:getRootNode()
    //#input(void addWindow(FrameContainer)): __Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane]
    //#input(void addWindow(FrameContainer)): __Descendant_Table[others]
    //#input(void addWindow(FrameContainer)): __Dispatch_Table.addWindow(Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;Lcom/dmdirc/FrameContainer;)V
    //#input(void addWindow(FrameContainer)): com/dmdirc/addons/ui_swing/UIUtilities.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void addWindow(FrameContainer)): this
    //#input(void addWindow(FrameContainer)): this.__Tag
    //#input(void addWindow(FrameContainer)): this.model
    //#input(void addWindow(FrameContainer)): window
    //#pre[2] (void addWindow(FrameContainer)): this.__Tag == com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane
    //#pre[3] (void addWindow(FrameContainer)): this.model != 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:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addWindow(FrameContainer)): Effects-of-calling:javax.swing.SwingUtilities:invokeAndWait
    //#unanalyzed(void addWindow(FrameContainer)): Effects-of-calling:com.dmdirc.logger.Logger:appError
    }
    //#DMDircDesktopPane.java:210: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.addWindow(FrameContainer)

    @Override
    public void addWindow(final FrameContainer parent,
            final FrameContainer window) {
        UIUtilities.invokeAndWait(new Runnable() {
    //#DMDircDesktopPane.java:215: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4(DMDircDesktopPane, FrameContainer, FrameContainer)
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4(DMDircDesktopPane, FrameContainer, FrameContainer)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4(DMDircDesktopPane, FrameContainer, FrameContainer)): Param_2
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4(DMDircDesktopPane, FrameContainer, FrameContainer)): Param_3
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4(DMDircDesktopPane, FrameContainer, FrameContainer)): this
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4(DMDircDesktopPane, FrameContainer, FrameContainer)): this.this$0
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4(DMDircDesktopPane, FrameContainer, FrameContainer)): this.val$parent
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4(DMDircDesktopPane, FrameContainer, FrameContainer)): this.val$window
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4(DMDircDesktopPane, FrameContainer, FrameContainer)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4(DMDircDesktopPane, FrameContainer, FrameContainer)): init'ed(this.this$0)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4(DMDircDesktopPane, FrameContainer, FrameContainer)): this.val$parent == Param_2
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4(DMDircDesktopPane, FrameContainer, FrameContainer)): init'ed(this.val$parent)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4(DMDircDesktopPane, FrameContainer, FrameContainer)): this.val$window == Param_3
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4(DMDircDesktopPane, FrameContainer, FrameContainer)): init'ed(this.val$window)
    //#DMDircDesktopPane.java:215: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4(DMDircDesktopPane, FrameContainer, FrameContainer)
    //#DMDircDesktopPane.java:215: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.addWindow(FrameContainer, FrameContainer)
    //#input(void addWindow(FrameContainer, FrameContainer)): com/dmdirc/addons/ui_swing/UIUtilities.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void addWindow(FrameContainer, FrameContainer)): parent
    //#input(void addWindow(FrameContainer, FrameContainer)): this
    //#input(void addWindow(FrameContainer, FrameContainer)): window
    //#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:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addWindow(FrameContainer, FrameContainer)): Effects-of-calling:javax.swing.SwingUtilities:invokeAndWait
    //#unanalyzed(void addWindow(FrameContainer, FrameContainer)): Effects-of-calling:com.dmdirc.logger.Logger:appError

            /** {@inheritDoc} */
            @Override
            public void run() {
                synchronized (nodes) {
    //#DMDircDesktopPane.java:220: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4.run()
    //#input(void run()): com/dmdirc/addons/ui_swing/UIUtilities.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void run()): com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane.__Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane]
    //#input(void run()): com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane.__Dispatch_Table.addWindow(Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;Lcom/dmdirc/FrameContainer;)V
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.this$0.__Tag
    //#input(void run()): this.this$0.nodes
    //#input(void run()): this.this$0.nodes.__Lock
    //#input(void run()): this.val$parent
    //#input(void run()): this.val$window
    //#pre[2] (void run()): this.this$0 != null
    //#pre[3] (void run()): this.__Tag == com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane
    //#pre[4] (void run()): this.nodes != null
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Runnable:run
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.SwingUtilities:invokeAndWait
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.logger.Logger:appError
                    addWindow(nodes.get(parent), window);
                }
            }
    //#DMDircDesktopPane.java:223: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4.run()
        });
    }
    //#DMDircDesktopPane.java:225: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.addWindow(FrameContainer, FrameContainer)

    /** {@inheritDoc} */
    @Override
    public void delWindow(final FrameContainer parent,
            final FrameContainer window) {
        delWindow(window);
    //#DMDircDesktopPane.java:231: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.delWindow(FrameContainer, FrameContainer)
    //#input(void delWindow(FrameContainer, FrameContainer)): __Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane]
    //#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)): com/dmdirc/addons/ui_swing/UIUtilities.com.dmdirc.logger.ErrorLevel.HIGH
    //#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/desktopPane/DMDircDesktopPane
    //#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:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void delWindow(FrameContainer, FrameContainer)): Effects-of-calling:javax.swing.SwingUtilities:invokeAndWait
    //#unanalyzed(void delWindow(FrameContainer, FrameContainer)): Effects-of-calling:com.dmdirc.logger.Logger:appError
    }
    //#DMDircDesktopPane.java:232: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.delWindow(FrameContainer, FrameContainer)

    /** {@inheritDoc} */
    @Override
    public void delWindow(final FrameContainer window) {
        UIUtilities.invokeAndWait(new Runnable() {
    //#DMDircDesktopPane.java:237: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5(DMDircDesktopPane, FrameContainer)
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5(DMDircDesktopPane, FrameContainer)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5(DMDircDesktopPane, FrameContainer)): Param_2
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5(DMDircDesktopPane, FrameContainer)): this
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5(DMDircDesktopPane, FrameContainer)): this.this$0
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5(DMDircDesktopPane, FrameContainer)): this.val$window
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5(DMDircDesktopPane, FrameContainer)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5(DMDircDesktopPane, FrameContainer)): init'ed(this.this$0)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5(DMDircDesktopPane, FrameContainer)): this.val$window == Param_2
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5(DMDircDesktopPane, FrameContainer)): init'ed(this.val$window)
    //#DMDircDesktopPane.java:237: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5(DMDircDesktopPane, FrameContainer)
    //#DMDircDesktopPane.java:237: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.delWindow(FrameContainer)
    //#input(void delWindow(FrameContainer)): com/dmdirc/addons/ui_swing/UIUtilities.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void delWindow(FrameContainer)): this
    //#input(void delWindow(FrameContainer)): window
    //#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:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void delWindow(FrameContainer)): Effects-of-calling:javax.swing.SwingUtilities:invokeAndWait
    //#unanalyzed(void delWindow(FrameContainer)): Effects-of-calling:com.dmdirc.logger.Logger:appError

            /** {@inheritDoc} */
            @Override
            public void run() {
                if (nodes == null || nodes.get(window) == null) {
    //#DMDircDesktopPane.java:242: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5.run()
    //#input(void run()): " - "._tainted
    //#input(void run()): "DMDirc "._tainted
    //#input(void run()): "DMDirc"._tainted
    //#input(void run()): "delServer triggered for root node"._tainted
    //#input(void run()): com.dmdirc.logger.ErrorLevel.MEDIUM
    //#input(void run()): com/dmdirc/addons/ui_swing/UIUtilities.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.this$0.mainFrame
    //#input(void run()): this.this$0.mainFrame.showVersion
    //#input(void run()): this.this$0.model
    //#input(void run()): this.this$0.nodes
    //#input(void run()): this.val$window
    //#pre[2] (void run()): (soft) this.this$0 != null
    //#pre[3] (void run()): (soft) this.mainFrame != null
    //#pre[4] (void run()): (soft) init'ed(this.mainFrame.showVersion)
    //#pre[5] (void run()): (soft) this.model != null
    //#pre[7] (void run()): (soft) this.val$window != null
    //#presumption(void run()): com.dmdirc.FrameContainer:getFrame(...)@256 != null
    //#presumption(void run()): com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:getAllFrames(...)@258 != null
    //#presumption(void run()): init'ed(com.dmdirc.logger.ErrorLevel.MEDIUM)
    //#presumption(void run()): java.util.Map:get(...)@245 != 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.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.ReturnableThread
    //#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.ui.interfaces.Window:isMaximum
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JFrame:setTitle
    //#test_vector(void run()): this.nodes: Addr_Set{null}, Inverse{null}
    //#test_vector(void run()): com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:getAllFrames(...).length@258: {1..+Inf}, {0}
    //#test_vector(void run()): com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getLevel(...)@246: {-2_147_483_648..-1, 1..4_294_967_295}, {0}
    //#test_vector(void run()): java.util.Map:get(...)@242: Inverse{null}, Addr_Set{null}
                    return;
                }
                final TreeViewNode node = nodes.get(window);
                if (node.getLevel() == 0) {
    //#DMDircDesktopPane.java:246: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getLevel()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5
    //#    method: void run()
    //#    unanalyzed callee: int com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getLevel()
                    Logger.appError(ErrorLevel.MEDIUM,
    //#DMDircDesktopPane.java:247: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:toString()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5
    //#    method: void run()
    //#    unanalyzed callee: String com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:toString()
    //#DMDircDesktopPane.java:247: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.logger.Logger:appError(ErrorLevel, String, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.logger.Logger:appError(ErrorLevel, String, Throwable)
                            "delServer triggered for root node" +
                            node.toString(),
                            new IllegalArgumentException());
                } else {
                    model.removeNodeFromParent(nodes.get(window));
    //#DMDircDesktopPane.java:252: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel:removeNodeFromParent(MutableTreeNode)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel:removeNodeFromParent(MutableTreeNode)
                }
                nodes.remove(window);
                window.removeSelectionListener(DMDircDesktopPane.this);
    //#DMDircDesktopPane.java:255: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.FrameContainer:removeSelectionListener(SelectionListener)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.FrameContainer:removeSelectionListener(SelectionListener)
                ((TextFrame) window.getFrame()).removePropertyChangeListener(
    //#DMDircDesktopPane.java:256: Warning: method not available - call not analyzed
    //#    call on Window com.dmdirc.FrameContainer:getFrame()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5
    //#    method: void run()
    //#    unanalyzed callee: Window com.dmdirc.FrameContainer:getFrame()
    //#DMDircDesktopPane.java:256: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.frames.TextFrame:removePropertyChangeListener(PropertyChangeListener)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.frames.TextFrame:removePropertyChangeListener(PropertyChangeListener)
                        DMDircDesktopPane.this);
                if (getAllFrames().length == 0) {
    //#DMDircDesktopPane.java:258: Warning: method not available - call not analyzed
    //#    call on JInternalFrame[] com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:getAllFrames()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5
    //#    method: void run()
    //#    unanalyzed callee: JInternalFrame[] com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:getAllFrames()
                    mainFrame.setTitle(null);
                }
            }
    //#DMDircDesktopPane.java:261: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5.run()
        });
    }
    //#DMDircDesktopPane.java:263: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.delWindow(FrameContainer)

    /**
     * Adds a window to the frame container.
     *
     * @param parent Parent node
     * @param window Window to add
     */
    public void addWindow(final TreeViewNode parent,
            final FrameContainer window) {
        UIUtilities.invokeAndWait(new Runnable() {
    //#DMDircDesktopPane.java:273: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6(DMDircDesktopPane, FrameContainer, TreeViewNode)
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6(DMDircDesktopPane, FrameContainer, TreeViewNode)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6(DMDircDesktopPane, FrameContainer, TreeViewNode)): Param_2
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6(DMDircDesktopPane, FrameContainer, TreeViewNode)): Param_3
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6(DMDircDesktopPane, FrameContainer, TreeViewNode)): this
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6(DMDircDesktopPane, FrameContainer, TreeViewNode)): this.this$0
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6(DMDircDesktopPane, FrameContainer, TreeViewNode)): this.val$parent
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6(DMDircDesktopPane, FrameContainer, TreeViewNode)): this.val$window
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6(DMDircDesktopPane, FrameContainer, TreeViewNode)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6(DMDircDesktopPane, FrameContainer, TreeViewNode)): init'ed(this.this$0)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6(DMDircDesktopPane, FrameContainer, TreeViewNode)): this.val$parent == Param_3
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6(DMDircDesktopPane, FrameContainer, TreeViewNode)): init'ed(this.val$parent)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6(DMDircDesktopPane, FrameContainer, TreeViewNode)): this.val$window == Param_2
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6(DMDircDesktopPane, FrameContainer, TreeViewNode)): init'ed(this.val$window)
    //#DMDircDesktopPane.java:273: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6(DMDircDesktopPane, FrameContainer, TreeViewNode)
    //#DMDircDesktopPane.java:273: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.addWindow(TreeViewNode, FrameContainer)
    //#input(void addWindow(TreeViewNode, FrameContainer)): com/dmdirc/addons/ui_swing/UIUtilities.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void addWindow(TreeViewNode, FrameContainer)): parent
    //#input(void addWindow(TreeViewNode, FrameContainer)): this
    //#input(void addWindow(TreeViewNode, FrameContainer)): window
    //#unanalyzed(void addWindow(TreeViewNode, FrameContainer)): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void addWindow(TreeViewNode, FrameContainer)): Effects-of-calling:java.lang.Runnable:run
    //#unanalyzed(void addWindow(TreeViewNode, FrameContainer)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addWindow(TreeViewNode, FrameContainer)): Effects-of-calling:javax.swing.SwingUtilities:invokeAndWait
    //#unanalyzed(void addWindow(TreeViewNode, FrameContainer)): Effects-of-calling:com.dmdirc.logger.Logger:appError

            /** {@inheritDoc} */
            @Override
            public void run() {
                final TreeViewNode node = new TreeViewNode(null, window);
    //#DMDircDesktopPane.java:278: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6.run()
    //#DMDircDesktopPane.java:278: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode(NodeLabel, FrameContainer)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode(NodeLabel, FrameContainer)
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.this$0.model
    //#input(void run()): this.this$0.nodes
    //#input(void run()): this.this$0.nodes.__Lock
    //#input(void run()): this.val$parent
    //#input(void run()): this.val$window
    //#pre[2] (void run()): this.this$0 != null
    //#pre[3] (void run()): this.model != null
    //#pre[4] (void run()): this.nodes != null
    //#pre[6] (void run()): this.val$window != null
    //#presumption(void run()): com.dmdirc.FrameContainer:getFrame(...)@285 != null
                synchronized (nodes) {
                    nodes.put(window, node);
                }
                node.setUserObject(window);
    //#DMDircDesktopPane.java:282: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:setUserObject(Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:setUserObject(Object)
                model.insertNodeInto(node, parent);
    //#DMDircDesktopPane.java:283: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel:insertNodeInto(TreeViewNode, TreeViewNode)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel:insertNodeInto(TreeViewNode, TreeViewNode)
                window.addSelectionListener(DMDircDesktopPane.this);
    //#DMDircDesktopPane.java:284: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.FrameContainer:addSelectionListener(SelectionListener)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.FrameContainer:addSelectionListener(SelectionListener)
                ((TextFrame) window.getFrame()).addPropertyChangeListener(
    //#DMDircDesktopPane.java:285: Warning: method not available - call not analyzed
    //#    call on Window com.dmdirc.FrameContainer:getFrame()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6
    //#    method: void run()
    //#    unanalyzed callee: Window com.dmdirc.FrameContainer:getFrame()
    //#DMDircDesktopPane.java:285: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.frames.TextFrame:addPropertyChangeListener(PropertyChangeListener)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.frames.TextFrame:addPropertyChangeListener(PropertyChangeListener)
                        DMDircDesktopPane.this);
            }
    //#DMDircDesktopPane.java:287: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6.run()
        });
    }
    //#DMDircDesktopPane.java:289: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.addWindow(TreeViewNode, FrameContainer)

    /** Scrolls up. */
    public void scrollUp() {
        treeScroller.changeFocus(true);
    //#DMDircDesktopPane.java:293: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.scrollUp()
    //#DMDircDesktopPane.java:293: Warning: suspicious precondition
    //#    The precondition for this.treeScroller.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane
    //#    method: void scrollUp()
    //#    suspicious precondition index: [3]
    //#    Attribs:  Soft
    //#input(void scrollUp()): com/dmdirc/addons/ui_swing/components/TreeScroller.__Descendant_Table[com/dmdirc/addons/ui_swing/components/TreeScroller]
    //#input(void scrollUp()): com/dmdirc/addons/ui_swing/components/TreeScroller.__Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$1]
    //#input(void scrollUp()): com/dmdirc/addons/ui_swing/components/TreeScroller.__Descendant_Table[others]
    //#input(void scrollUp()): com/dmdirc/addons/ui_swing/components/TreeScroller.__Dispatch_Table.changeFocus(Z)V
    //#input(void scrollUp()): com/dmdirc/addons/ui_swing/components/TreeScroller.__Dispatch_Table.setPath(Ljavax/swing/tree/TreePath;)V
    //#input(void scrollUp()): com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$1.__Dispatch_Table.changeFocus(Z)V
    //#input(void scrollUp()): com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$1.__Dispatch_Table.setPath(Ljavax/swing/tree/TreePath;)V
    //#input(void scrollUp()): this
    //#input(void scrollUp()): this.treeScroller
    //#input(void scrollUp()): this.treeScroller.__Tag
    //#input(void scrollUp()): this.treeScroller.model
    //#input(void scrollUp()): this.treeScroller.rootNode
    //#input(void scrollUp()): this.treeScroller.rootVisible
    //#input(void scrollUp()): this.treeScroller.selectionModel
    //#pre[2] (void scrollUp()): this.treeScroller != null
    //#pre[3] (void scrollUp()): (soft) this.treeScroller.__Tag in {com/dmdirc/addons/ui_swing/components/TreeScroller, com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$1}
    //#pre[4] (void scrollUp()): (soft) this.treeScroller.model != null
    //#pre[7] (void scrollUp()): (soft) this.treeScroller.selectionModel != null
    //#unanalyzed(void scrollUp()): Effects-of-calling:javax.swing.tree.DefaultTreeModel:getRoot
    //#unanalyzed(void scrollUp()): Effects-of-calling:javax.swing.tree.TreeSelectionModel:setSelectionPath
    //#unanalyzed(void scrollUp()): Effects-of-calling:javax.swing.tree.DefaultMutableTreeNode:getPreviousNode
    //#unanalyzed(void scrollUp()): Effects-of-calling:javax.swing.tree.DefaultMutableTreeNode:getLastLeaf
    //#unanalyzed(void scrollUp()): Effects-of-calling:javax.swing.tree.DefaultMutableTreeNode:getNextNode
    //#unanalyzed(void scrollUp()): Effects-of-calling:javax.swing.tree.DefaultMutableTreeNode:getFirstChild
    //#unanalyzed(void scrollUp()): Effects-of-calling:javax.swing.tree.DefaultMutableTreeNode:getChildCount
    //#unanalyzed(void scrollUp()): Effects-of-calling:javax.swing.tree.TreeSelectionModel:isSelectionEmpty
    //#unanalyzed(void scrollUp()): Effects-of-calling:javax.swing.tree.DefaultMutableTreeNode:getChildAt
    //#unanalyzed(void scrollUp()): Effects-of-calling:javax.swing.tree.TreeSelectionModel:getSelectionPath
    //#unanalyzed(void scrollUp()): Effects-of-calling:javax.swing.tree.TreePath:getLastPathComponent
    //#unanalyzed(void scrollUp()): Effects-of-calling:javax.swing.tree.DefaultTreeModel:getPathToRoot
    //#unanalyzed(void scrollUp()): Effects-of-calling:javax.swing.tree.TreePath
    //#unanalyzed(void scrollUp()): Effects-of-calling:setPath
    //#unanalyzed(void scrollUp()): Effects-of-calling:com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getFrameContainer
    //#unanalyzed(void scrollUp()): Effects-of-calling:com.dmdirc.FrameContainer:activateFrame
    }
    //#DMDircDesktopPane.java:294: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.scrollUp()

    /** Scrolls down. */
    public void scrollDown() {
        treeScroller.changeFocus(false);
    //#DMDircDesktopPane.java:298: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.scrollDown()
    //#DMDircDesktopPane.java:298: Warning: suspicious precondition
    //#    The precondition for this.treeScroller.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane
    //#    method: void scrollDown()
    //#    suspicious precondition index: [3]
    //#    Attribs:  Soft
    //#input(void scrollDown()): com/dmdirc/addons/ui_swing/components/TreeScroller.__Descendant_Table[com/dmdirc/addons/ui_swing/components/TreeScroller]
    //#input(void scrollDown()): com/dmdirc/addons/ui_swing/components/TreeScroller.__Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$1]
    //#input(void scrollDown()): com/dmdirc/addons/ui_swing/components/TreeScroller.__Descendant_Table[others]
    //#input(void scrollDown()): com/dmdirc/addons/ui_swing/components/TreeScroller.__Dispatch_Table.changeFocus(Z)V
    //#input(void scrollDown()): com/dmdirc/addons/ui_swing/components/TreeScroller.__Dispatch_Table.setPath(Ljavax/swing/tree/TreePath;)V
    //#input(void scrollDown()): com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$1.__Dispatch_Table.changeFocus(Z)V
    //#input(void scrollDown()): com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$1.__Dispatch_Table.setPath(Ljavax/swing/tree/TreePath;)V
    //#input(void scrollDown()): this
    //#input(void scrollDown()): this.treeScroller
    //#input(void scrollDown()): this.treeScroller.__Tag
    //#input(void scrollDown()): this.treeScroller.model
    //#input(void scrollDown()): this.treeScroller.rootNode
    //#input(void scrollDown()): this.treeScroller.rootVisible
    //#input(void scrollDown()): this.treeScroller.selectionModel
    //#pre[2] (void scrollDown()): this.treeScroller != null
    //#pre[3] (void scrollDown()): (soft) this.treeScroller.__Tag in {com/dmdirc/addons/ui_swing/components/TreeScroller, com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$1}
    //#pre[4] (void scrollDown()): (soft) this.treeScroller.model != null
    //#pre[7] (void scrollDown()): (soft) this.treeScroller.selectionModel != null
    //#unanalyzed(void scrollDown()): Effects-of-calling:javax.swing.tree.DefaultTreeModel:getRoot
    //#unanalyzed(void scrollDown()): Effects-of-calling:javax.swing.tree.TreeSelectionModel:setSelectionPath
    //#unanalyzed(void scrollDown()): Effects-of-calling:javax.swing.tree.DefaultMutableTreeNode:getPreviousNode
    //#unanalyzed(void scrollDown()): Effects-of-calling:javax.swing.tree.DefaultMutableTreeNode:getLastLeaf
    //#unanalyzed(void scrollDown()): Effects-of-calling:javax.swing.tree.DefaultMutableTreeNode:getNextNode
    //#unanalyzed(void scrollDown()): Effects-of-calling:javax.swing.tree.DefaultMutableTreeNode:getFirstChild
    //#unanalyzed(void scrollDown()): Effects-of-calling:javax.swing.tree.DefaultMutableTreeNode:getChildCount
    //#unanalyzed(void scrollDown()): Effects-of-calling:javax.swing.tree.TreeSelectionModel:isSelectionEmpty
    //#unanalyzed(void scrollDown()): Effects-of-calling:javax.swing.tree.DefaultMutableTreeNode:getChildAt
    //#unanalyzed(void scrollDown()): Effects-of-calling:javax.swing.tree.TreeSelectionModel:getSelectionPath
    //#unanalyzed(void scrollDown()): Effects-of-calling:javax.swing.tree.TreePath:getLastPathComponent
    //#unanalyzed(void scrollDown()): Effects-of-calling:javax.swing.tree.DefaultTreeModel:getPathToRoot
    //#unanalyzed(void scrollDown()): Effects-of-calling:javax.swing.tree.TreePath
    //#unanalyzed(void scrollDown()): Effects-of-calling:setPath
    //#unanalyzed(void scrollDown()): Effects-of-calling:com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getFrameContainer
    //#unanalyzed(void scrollDown()): Effects-of-calling:com.dmdirc.FrameContainer:activateFrame
    }
    //#DMDircDesktopPane.java:299: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.scrollDown()

    /** {@inheritDoc} */
    @Override
    public void selectionChanged(final Window window) {
        UIUtilities.invokeLater(new Runnable() {
    //#DMDircDesktopPane.java:304: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7(DMDircDesktopPane, Window)
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7(DMDircDesktopPane, Window)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7(DMDircDesktopPane, Window)): Param_2
    //#input(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7(DMDircDesktopPane, Window)): this
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7(DMDircDesktopPane, Window)): this.this$0
    //#output(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7(DMDircDesktopPane, Window)): this.val$window
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7(DMDircDesktopPane, Window)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7(DMDircDesktopPane, Window)): init'ed(this.this$0)
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7(DMDircDesktopPane, Window)): this.val$window == Param_2
    //#post(void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7(DMDircDesktopPane, Window)): init'ed(this.val$window)
    //#DMDircDesktopPane.java:304: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7(DMDircDesktopPane, Window)
    //#DMDircDesktopPane.java:304: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.selectionChanged(Window)
    //#input(void selectionChanged(Window)): this
    //#input(void selectionChanged(Window)): window
    //#unanalyzed(void selectionChanged(Window)): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void selectionChanged(Window)): Effects-of-calling:java.lang.Runnable:run
    //#unanalyzed(void selectionChanged(Window)): Effects-of-calling:javax.swing.SwingUtilities:invokeLater

            /** {@inheritDoc} */
            @Override
            public void run() {
                selectedWindow = window;
    //#DMDircDesktopPane.java:309: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7.run()
    //#input(void run()): " - "._tainted
    //#input(void run()): "DMDirc "._tainted
    //#input(void run()): "DMDirc"._tainted
    //#input(void run()): com/dmdirc/addons/ui_swing/UIUtilities.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void run()): com/dmdirc/addons/ui_swing/components/SwingInputField.__Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputField]
    //#input(void run()): com/dmdirc/addons/ui_swing/components/SwingInputField.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/addons/ui_swing/components/SwingInputField.__Dispatch_Table.requestFocusInWindow()Z
    //#input(void run()): com/dmdirc/addons/ui_swing/components/frames/ChannelFrame.__Dispatch_Table.requestInputFieldFocus()V
    //#input(void run()): com/dmdirc/addons/ui_swing/components/frames/CustomInputFrame.__Dispatch_Table.requestInputFieldFocus()V
    //#input(void run()): com/dmdirc/addons/ui_swing/components/frames/InputTextFrame.__Descendant_Table[com/dmdirc/addons/ui_swing/components/frames/ChannelFrame]
    //#input(void run()): com/dmdirc/addons/ui_swing/components/frames/InputTextFrame.__Descendant_Table[com/dmdirc/addons/ui_swing/components/frames/CustomInputFrame]
    //#input(void run()): com/dmdirc/addons/ui_swing/components/frames/InputTextFrame.__Descendant_Table[com/dmdirc/addons/ui_swing/components/frames/InputTextFrame]
    //#input(void run()): com/dmdirc/addons/ui_swing/components/frames/InputTextFrame.__Descendant_Table[com/dmdirc/addons/ui_swing/components/frames/QueryFrame]
    //#input(void run()): com/dmdirc/addons/ui_swing/components/frames/InputTextFrame.__Descendant_Table[com/dmdirc/addons/ui_swing/components/frames/ServerFrame]
    //#input(void run()): com/dmdirc/addons/ui_swing/components/frames/InputTextFrame.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/addons/ui_swing/components/frames/InputTextFrame.__Dispatch_Table.requestInputFieldFocus()V
    //#input(void run()): com/dmdirc/addons/ui_swing/components/frames/QueryFrame.__Dispatch_Table.requestInputFieldFocus()V
    //#input(void run()): com/dmdirc/addons/ui_swing/components/frames/ServerFrame.__Dispatch_Table.requestInputFieldFocus()V
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.this$0.mainFrame
    //#input(void run()): this.this$0.mainFrame.showVersion
    //#input(void run()): this.this$0.model
    //#input(void run()): this.this$0.nodes
    //#input(void run()): this.this$0.selectionModel
    //#input(void run()): this.val$window
    //#input(void run()): this.val$window.__Tag
    //#input(void run()): this.val$window.inputField
    //#input(void run()): this.val$window.inputField.__Tag
    //#output(void run()): this.this$0.selectedWindow
    //#pre[2] (void run()): this.this$0 != null
    //#pre[3] (void run()): this.mainFrame != null
    //#pre[4] (void run()): init'ed(this.mainFrame.showVersion)
    //#pre[5] (void run()): this.model != null
    //#pre[6] (void run()): this.nodes != null
    //#pre[8] (void run()): this.val$window != null
    //#pre[7] (void run()): (soft) this.selectionModel != null
    //#pre[10] (void run()): (soft) init'ed(this.val$window.inputField)
    //#pre[11] (void run()): (soft) this.val$window.inputField.__Tag == com/dmdirc/addons/ui_swing/components/SwingInputField
    //#post(void run()): this.selectedWindow == this.val$window
    //#post(void run()): this.this$0.selectedWindow != null
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.ReturnableThread
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#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:java.lang.Boolean:booleanValue
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:isMaximum
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JFrame:setTitle
    //#test_vector(void run()): this.val$window.__Tag: {0..506_367, 506_369..508_671, 508_673..509_183, 509_185..509_695, 509_697..510_207, 510_209..+Inf}, {506_368, 508_672, 509_184, 509_696, 510_208}
    //#test_vector(void run()): com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel:getPathToRoot(...)@310: Addr_Set{null}, Inverse{null}
    //#test_vector(void run()): path.length@310: {0}, {1..+Inf}
                final TreeNode[] path =
    //#DMDircDesktopPane.java:310: Warning: method not available - call not analyzed
    //#    call on FrameContainer com.dmdirc.ui.interfaces.Window:getContainer()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7
    //#    method: void run()
    //#    unanalyzed callee: FrameContainer com.dmdirc.ui.interfaces.Window:getContainer()
    //#DMDircDesktopPane.java:310: Warning: method not available - call not analyzed
    //#    call on TreeNode[] com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel:getPathToRoot(TreeNode)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7
    //#    method: void run()
    //#    unanalyzed callee: TreeNode[] com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel:getPathToRoot(TreeNode)
                        model.getPathToRoot(nodes.get(window.getContainer()));
                if (path != null && path.length > 0) {
                    selectionModel.setSelectionPath(new TreePath(path));
                }
                if (window instanceof InputTextFrame) {
                    ((InputTextFrame) window).requestInputFieldFocus();
                }
                mainFrame.setTitle(window.getTitle());
    //#DMDircDesktopPane.java:318: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.ui.interfaces.Window:getTitle()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7
    //#    method: void run()
    //#    unanalyzed callee: String com.dmdirc.ui.interfaces.Window:getTitle()
            }
    //#DMDircDesktopPane.java:319: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7.run()
        });
    }
    //#DMDircDesktopPane.java:321: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.selectionChanged(Window)

    /** {@inheritDoc} */
    @Override
    public void propertyChange(final PropertyChangeEvent evt) {
        if ("title".equals(evt.getPropertyName())) {
    //#DMDircDesktopPane.java:326: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.propertyChange(PropertyChangeEvent)
    //#input(void propertyChange(PropertyChangeEvent)): " - "._tainted
    //#input(void propertyChange(PropertyChangeEvent)): "DMDirc "._tainted
    //#input(void propertyChange(PropertyChangeEvent)): "DMDirc"._tainted
    //#input(void propertyChange(PropertyChangeEvent)): com/dmdirc/addons/ui_swing/UIUtilities.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void propertyChange(PropertyChangeEvent)): evt
    //#input(void propertyChange(PropertyChangeEvent)): this
    //#input(void propertyChange(PropertyChangeEvent)): this.changing
    //#input(void propertyChange(PropertyChangeEvent)): this.mainFrame
    //#input(void propertyChange(PropertyChangeEvent)): this.mainFrame.showVersion
    //#input(void propertyChange(PropertyChangeEvent)): this.maximised
    //#input(void propertyChange(PropertyChangeEvent)): this.selectedWindow
    //#output(void propertyChange(PropertyChangeEvent)): this.maximised
    //#pre[1] (void propertyChange(PropertyChangeEvent)): evt != null
    //#pre[2] (void propertyChange(PropertyChangeEvent)): (soft) init'ed(this.maximised)
    //#pre[4] (void propertyChange(PropertyChangeEvent)): (soft) this.changing != null
    //#pre[5] (void propertyChange(PropertyChangeEvent)): (soft) this.mainFrame != null
    //#pre[6] (void propertyChange(PropertyChangeEvent)): (soft) init'ed(this.mainFrame.showVersion)
    //#pre[7] (void propertyChange(PropertyChangeEvent)): (soft) init'ed(this.selectedWindow)
    //#presumption(void propertyChange(PropertyChangeEvent)): java.beans.PropertyChangeEvent:getNewValue(...)@330 != null
    //#presumption(void propertyChange(PropertyChangeEvent)): java.beans.PropertyChangeEvent:getSource(...)@327 != null
    //#presumption(void propertyChange(PropertyChangeEvent)): java.beans.PropertyChangeEvent:getSource(...)@330 != null
    //#post(void propertyChange(PropertyChangeEvent)): init'ed(this.maximised)
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:setTitle
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:java.util.concurrent.atomic.AtomicBoolean:get
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:java.util.concurrent.atomic.AtomicBoolean:set
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:javax.swing.UIManager:getLookAndFeel
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:java.lang.Class:getName
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:java.util.Stack
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:getAllFrames
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:java.util.Arrays:asList
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:java.util.Stack:addAll
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:java.util.Stack:empty
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:java.util.Stack:pop
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:javax.swing.JInternalFrame:isMaximum
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:maximise
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:restore
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:activateFrame
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:javax.swing.SwingUtilities:invokeAndWait
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:com.dmdirc.util.ReturnableThread:run
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:com.dmdirc.util.ReturnableThread:getObject
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:com.dmdirc.util.ReturnableThread
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:isMaximum
    //#unanalyzed(void propertyChange(PropertyChangeEvent)): Effects-of-calling:javax.swing.JFrame:setTitle
    //#test_vector(void propertyChange(PropertyChangeEvent)): java.lang.String:equals(...)@326: {0}, {1}
    //#test_vector(void propertyChange(PropertyChangeEvent)): java.lang.String:equals(...)@329: {0}, {1}
            handleTitleEvent((Window) evt.getSource(), 
    //#DMDircDesktopPane.java:327: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.ui.interfaces.Window:getTitle()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane
    //#    method: void propertyChange(PropertyChangeEvent)
    //#    unanalyzed callee: String com.dmdirc.ui.interfaces.Window:getTitle()
                    ((Window) evt.getSource()).getTitle());
        } else if ("maximum".equals(evt.getPropertyName())) {
            handleMaximiseEvent((Boolean) evt.getNewValue(),
    //#DMDircDesktopPane.java:330: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.ui.interfaces.Window:getTitle()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane
    //#    method: void propertyChange(PropertyChangeEvent)
    //#    unanalyzed callee: String com.dmdirc.ui.interfaces.Window:getTitle()
                    ((Window) evt.getSource()).getTitle());
        }
    }
    //#DMDircDesktopPane.java:333: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.propertyChange(PropertyChangeEvent)

    private void handleTitleEvent(final Window window, final String title) {
        if (maximised && (window == selectedWindow)) {
    //#DMDircDesktopPane.java:336: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.handleTitleEvent(Window, String)
    //#input(void handleTitleEvent(Window, String)): " - "._tainted
    //#input(void handleTitleEvent(Window, String)): "DMDirc "._tainted
    //#input(void handleTitleEvent(Window, String)): "DMDirc"._tainted
    //#input(void handleTitleEvent(Window, String)): com/dmdirc/addons/ui_swing/UIUtilities.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void handleTitleEvent(Window, String)): this
    //#input(void handleTitleEvent(Window, String)): this.mainFrame
    //#input(void handleTitleEvent(Window, String)): this.mainFrame.showVersion
    //#input(void handleTitleEvent(Window, String)): this.maximised
    //#input(void handleTitleEvent(Window, String)): this.selectedWindow
    //#input(void handleTitleEvent(Window, String)): title
    //#input(void handleTitleEvent(Window, String)): title._tainted
    //#input(void handleTitleEvent(Window, String)): window
    //#pre[10] (void handleTitleEvent(Window, String)): init'ed(this.maximised)
    //#pre[8] (void handleTitleEvent(Window, String)): (soft) this.mainFrame != null
    //#pre[9] (void handleTitleEvent(Window, String)): (soft) init'ed(this.mainFrame.showVersion)
    //#pre[11] (void handleTitleEvent(Window, String)): (soft) init'ed(this.selectedWindow)
    //#unanalyzed(void handleTitleEvent(Window, String)): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void handleTitleEvent(Window, String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void handleTitleEvent(Window, String)): Effects-of-calling:javax.swing.SwingUtilities:invokeAndWait
    //#unanalyzed(void handleTitleEvent(Window, String)): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(void handleTitleEvent(Window, String)): Effects-of-calling:com.dmdirc.util.ReturnableThread:run
    //#unanalyzed(void handleTitleEvent(Window, String)): Effects-of-calling:com.dmdirc.util.ReturnableThread:getObject
    //#unanalyzed(void handleTitleEvent(Window, String)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void handleTitleEvent(Window, String)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void handleTitleEvent(Window, String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void handleTitleEvent(Window, String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void handleTitleEvent(Window, String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void handleTitleEvent(Window, String)): Effects-of-calling:com.dmdirc.util.ReturnableThread
    //#unanalyzed(void handleTitleEvent(Window, String)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:isMaximum
    //#unanalyzed(void handleTitleEvent(Window, String)): Effects-of-calling:javax.swing.JFrame:setTitle
    //#test_vector(void handleTitleEvent(Window, String)): this.maximised: {0}, {1}
    //#test_vector(void handleTitleEvent(Window, String)): window == this.selectedWindow: {0}, {1}
            mainFrame.setTitle(title);
        } else if (!maximised) {
            mainFrame.setTitle(null);
        }
    }
    //#DMDircDesktopPane.java:341: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.handleTitleEvent(Window, String)
    
    private void handleMaximiseEvent(final boolean isMaximised,
            final String title) {
        if (changing.get()) {
    //#DMDircDesktopPane.java:345: method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.handleMaximiseEvent(bool, String)
    //#input(void handleMaximiseEvent(bool, String)): " - "._tainted
    //#input(void handleMaximiseEvent(bool, String)): "DMDirc "._tainted
    //#input(void handleMaximiseEvent(bool, String)): "DMDirc"._tainted
    //#input(void handleMaximiseEvent(bool, String)): com/dmdirc/addons/ui_swing/UIUtilities.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void handleMaximiseEvent(bool, String)): isMaximised
    //#input(void handleMaximiseEvent(bool, String)): this
    //#input(void handleMaximiseEvent(bool, String)): this.changing
    //#input(void handleMaximiseEvent(bool, String)): this.mainFrame
    //#input(void handleMaximiseEvent(bool, String)): this.mainFrame.showVersion
    //#input(void handleMaximiseEvent(bool, String)): this.selectedWindow
    //#input(void handleMaximiseEvent(bool, String)): title
    //#input(void handleMaximiseEvent(bool, String)): title._tainted
    //#output(void handleMaximiseEvent(bool, String)): this.maximised
    //#pre[4] (void handleMaximiseEvent(bool, String)): this.changing != null
    //#pre[5] (void handleMaximiseEvent(bool, String)): (soft) this.mainFrame != null
    //#pre[6] (void handleMaximiseEvent(bool, String)): (soft) init'ed(this.mainFrame.showVersion)
    //#pre[7] (void handleMaximiseEvent(bool, String)): (soft) init'ed(this.selectedWindow)
    //#presumption(void handleMaximiseEvent(bool, String)): java.util.Stack:pop(...)@355 != null
    //#post(void handleMaximiseEvent(bool, String)): possibly_updated(this.maximised)
    //#unanalyzed(void handleMaximiseEvent(bool, String)): Effects-of-calling:javax.swing.UIManager:getLookAndFeel
    //#unanalyzed(void handleMaximiseEvent(bool, String)): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(void handleMaximiseEvent(bool, String)): Effects-of-calling:java.lang.Class:getName
    //#unanalyzed(void handleMaximiseEvent(bool, String)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void handleMaximiseEvent(bool, String)): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void handleMaximiseEvent(bool, String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void handleMaximiseEvent(bool, String)): Effects-of-calling:javax.swing.SwingUtilities:invokeAndWait
    //#unanalyzed(void handleMaximiseEvent(bool, String)): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(void handleMaximiseEvent(bool, String)): Effects-of-calling:com.dmdirc.util.ReturnableThread:run
    //#unanalyzed(void handleMaximiseEvent(bool, String)): Effects-of-calling:com.dmdirc.util.ReturnableThread:getObject
    //#unanalyzed(void handleMaximiseEvent(bool, String)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void handleMaximiseEvent(bool, String)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void handleMaximiseEvent(bool, String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void handleMaximiseEvent(bool, String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void handleMaximiseEvent(bool, String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void handleMaximiseEvent(bool, String)): Effects-of-calling:com.dmdirc.util.ReturnableThread
    //#unanalyzed(void handleMaximiseEvent(bool, String)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:isMaximum
    //#unanalyzed(void handleMaximiseEvent(bool, String)): Effects-of-calling:javax.swing.JFrame:setTitle
    //#test_vector(void handleMaximiseEvent(bool, String)): isMaximised: {0}, {1}
    //#test_vector(void handleMaximiseEvent(bool, String)): this.selectedWindow: Addr_Set{null}, Inverse{null}
    //#test_vector(void handleMaximiseEvent(bool, String)): java.util.Stack:empty(...)@354: {1}, {0}
    //#test_vector(void handleMaximiseEvent(bool, String)): java.util.concurrent.atomic.AtomicBoolean:get(...)@345: {0}, {1}
    //#test_vector(void handleMaximiseEvent(bool, String)): javax.swing.JInternalFrame:isMaximum(...)@357: {1}, {0}
    //#test_vector(void handleMaximiseEvent(bool, String)): javax.swing.JInternalFrame:isMaximum(...)@361: {0}, {1}
            return;
        }
        changing.set(true);
        maximised = isMaximised;
        if (!UIUtilities.isWindowsUI()) {
            Stack<JInternalFrame> stack = new Stack<JInternalFrame>();
            stack.addAll(Arrays.asList(getAllFrames()));
    //#DMDircDesktopPane.java:352: Warning: method not available - call not analyzed
    //#    call on JInternalFrame[] com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:getAllFrames()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane
    //#    method: void handleMaximiseEvent(bool, String)
    //#    unanalyzed callee: JInternalFrame[] com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane:getAllFrames()

            while (!stack.empty()) {
                JInternalFrame frame = stack.pop();
                if (isMaximised) {
                    if (!frame.isMaximum()) {
                        ((Window) frame).maximise();
    //#DMDircDesktopPane.java:358: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.Window:maximise()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane
    //#    method: void handleMaximiseEvent(bool, String)
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.Window:maximise()
                    }
                } else {
                    if (frame.isMaximum()) {
                        ((Window) frame).restore();
    //#DMDircDesktopPane.java:362: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.Window:restore()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane
    //#    method: void handleMaximiseEvent(bool, String)
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.Window:restore()
                    }
                }
            }
            if (selectedWindow != null) {
                selectedWindow.activateFrame();
    //#DMDircDesktopPane.java:367: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.Window:activateFrame()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane
    //#    method: void handleMaximiseEvent(bool, String)
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.Window:activateFrame()
            }
        }
        if (!isMaximised) {
            mainFrame.setTitle(title);
        } else {
            mainFrame.setTitle(null);
        }
        changing.set(false);
    }
    //#DMDircDesktopPane.java:376: end of method: void com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane.handleMaximiseEvent(bool, String)
}
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$7]
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$7] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7__static_init): __Dispatch_Table.run()V == &run
    //#DMDircDesktopPane.java:: end of method: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7__static_init
    //#DMDircDesktopPane.java:: end of class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$7
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$6]
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$6] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6__static_init): __Dispatch_Table.run()V == &run
    //#DMDircDesktopPane.java:: end of method: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6__static_init
    //#DMDircDesktopPane.java:: end of class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$6
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$5]
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$5] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5__static_init): __Dispatch_Table.run()V == &run
    //#DMDircDesktopPane.java:: end of method: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5__static_init
    //#DMDircDesktopPane.java:: end of class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$5
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$4]
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$4] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4__static_init): __Dispatch_Table.run()V == &run
    //#DMDircDesktopPane.java:: end of method: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4__static_init
    //#DMDircDesktopPane.java:: end of class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$4
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$3]
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$3] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3__static_init): __Dispatch_Table.run()V == &run
    //#DMDircDesktopPane.java:: end of method: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3__static_init
    //#DMDircDesktopPane.java:: end of class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$3
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$2]
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$2] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2__static_init): __Dispatch_Table.run()V == &run
    //#DMDircDesktopPane.java:: end of method: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2__static_init
    //#DMDircDesktopPane.java:: end of class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$2
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$1]
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1__static_init): __Dispatch_Table.changeFocus(Z)V
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1__static_init): __Dispatch_Table.changeFocusDown(Ljavax/swing/tree/DefaultMutableTreeNode;)Ljavax/swing/tree/DefaultMutableTreeNode;
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1__static_init): __Dispatch_Table.changeFocusUp(Ljavax/swing/tree/DefaultMutableTreeNode;)Ljavax/swing/tree/DefaultMutableTreeNode;
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1__static_init): __Dispatch_Table.mouseWheelMoved(Ljava/awt/event/MouseWheelEvent;)V
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1__static_init): __Dispatch_Table.setPath(Ljavax/swing/tree/TreePath;)V
    //#output(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1__static_init): com/dmdirc/addons/ui_swing/components/TreeScroller.__Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$1]
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$1] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1__static_init): com/dmdirc/addons/ui_swing/components/TreeScroller.__Descendant_Table[com/dmdirc/addons/ui_swing/components/desktopPane/DMDircDesktopPane$1] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1__static_init): __Dispatch_Table.changeFocus(Z)V == &com/dmdirc/addons/ui_swing/components/TreeScroller.changeFocus
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1__static_init): __Dispatch_Table.changeFocusDown(Ljavax/swing/tree/DefaultMutableTreeNode;)Ljavax/swing/tree/DefaultMutableTreeNode; == &com/dmdirc/addons/ui_swing/components/TreeScroller.changeFocusDown
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1__static_init): __Dispatch_Table.changeFocusUp(Ljavax/swing/tree/DefaultMutableTreeNode;)Ljavax/swing/tree/DefaultMutableTreeNode; == &com/dmdirc/addons/ui_swing/components/TreeScroller.changeFocusUp
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1__static_init): __Dispatch_Table.mouseWheelMoved(Ljava/awt/event/MouseWheelEvent;)V == &com/dmdirc/addons/ui_swing/components/TreeScroller.mouseWheelMoved
    //#post(com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1__static_init): __Dispatch_Table.setPath(Ljavax/swing/tree/TreePath;)V == &setPath
    //#DMDircDesktopPane.java:: end of method: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1.com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1__static_init
    //#DMDircDesktopPane.java:: end of class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane$1
    //#DMDircDesktopPane.java:: end of class: com.dmdirc.addons.ui_swing.components.desktopPane.DMDircDesktopPane
