//# 0 errors, 522 messages
//#
/*
    //#CategoryPanel.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2
    //#CategoryPanel.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2__static_init
    //#CategoryPanel.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1
    //#CategoryPanel.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1__static_init
    //#CategoryPanel.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel
    //#CategoryPanel.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel__static_init
 * 
 * Copyright (c) 2006-2008 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.dialogs.prefs;

import com.dmdirc.addons.ui_swing.UIUtilities;
import com.dmdirc.addons.ui_swing.components.text.TextLabel;
import com.dmdirc.addons.ui_swing.components.TitlePanel;
import com.dmdirc.addons.ui_swing.components.ToolTipPanel;
import com.dmdirc.config.prefs.PreferencesCategory;

import java.awt.Window;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingWorker;

import net.miginfocom.layout.PlatformDefaults;
import net.miginfocom.swing.MigLayout;

/**
 * Panel representing a preferences category.
 */
public class CategoryPanel extends JPanel {
    //#CategoryPanel.java:49: method: Map com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.access$000(CategoryPanel)
    //#input(Map access$000(CategoryPanel)): x0
    //#input(Map access$000(CategoryPanel)): x0.panels
    //#output(Map access$000(CategoryPanel)): return_value
    //#pre[1] (Map access$000(CategoryPanel)): x0 != null
    //#pre[2] (Map access$000(CategoryPanel)): init'ed(x0.panels)
    //#post(Map access$000(CategoryPanel)): return_value == x0.panels
    //#post(Map access$000(CategoryPanel)): init'ed(return_value)
    //#CategoryPanel.java:49: end of method: Map com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.access$000(CategoryPanel)
    //#CategoryPanel.java:49: method: JScrollPane com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.access$100(CategoryPanel)
    //#input(JScrollPane access$100(CategoryPanel)): x0
    //#input(JScrollPane access$100(CategoryPanel)): x0.scrollPane
    //#output(JScrollPane access$100(CategoryPanel)): return_value
    //#pre[1] (JScrollPane access$100(CategoryPanel)): x0 != null
    //#pre[2] (JScrollPane access$100(CategoryPanel)): init'ed(x0.scrollPane)
    //#post(JScrollPane access$100(CategoryPanel)): return_value == x0.scrollPane
    //#post(JScrollPane access$100(CategoryPanel)): init'ed(return_value)
    //#CategoryPanel.java:49: end of method: JScrollPane com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.access$100(CategoryPanel)
    //#CategoryPanel.java:49: method: TitlePanel com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.access$200(CategoryPanel)
    //#input(TitlePanel access$200(CategoryPanel)): x0
    //#input(TitlePanel access$200(CategoryPanel)): x0.title
    //#output(TitlePanel access$200(CategoryPanel)): return_value
    //#pre[1] (TitlePanel access$200(CategoryPanel)): x0 != null
    //#pre[2] (TitlePanel access$200(CategoryPanel)): init'ed(x0.title)
    //#post(TitlePanel access$200(CategoryPanel)): return_value == x0.title
    //#post(TitlePanel access$200(CategoryPanel)): init'ed(return_value)
    //#CategoryPanel.java:49: end of method: TitlePanel com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.access$200(CategoryPanel)
    //#CategoryPanel.java:49: method: JPanel com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.access$300(CategoryPanel)
    //#input(JPanel access$300(CategoryPanel)): x0
    //#input(JPanel access$300(CategoryPanel)): x0.loading
    //#output(JPanel access$300(CategoryPanel)): return_value
    //#pre[1] (JPanel access$300(CategoryPanel)): x0 != null
    //#pre[2] (JPanel access$300(CategoryPanel)): init'ed(x0.loading)
    //#post(JPanel access$300(CategoryPanel)): return_value == x0.loading
    //#post(JPanel access$300(CategoryPanel)): init'ed(return_value)
    //#CategoryPanel.java:49: end of method: JPanel com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.access$300(CategoryPanel)

    /**
     * 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 = -3268284364607758509L;
    /** Panel gap. */
    private final int padding = (int) PlatformDefaults.getUnitValueX("related").
    //#CategoryPanel.java:58: Warning: method not available - call not analyzed
    //#    call on UnitValue net.miginfocom.layout.PlatformDefaults:getUnitValueX(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)
    //#    unanalyzed callee: UnitValue net.miginfocom.layout.PlatformDefaults:getUnitValueX(String)
    //#CategoryPanel.java:58: Warning: method not available - call not analyzed
    //#    call on float net.miginfocom.layout.UnitValue:getValue()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)
    //#    unanalyzed callee: float net.miginfocom.layout.UnitValue:getValue()
            getValue();
    /** Panel left padding. */
    private final int leftPadding = (int) PlatformDefaults.getPanelInsets(1).
    //#CategoryPanel.java:61: Warning: method not available - call not analyzed
    //#    call on UnitValue net.miginfocom.layout.PlatformDefaults:getPanelInsets(int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)
    //#    unanalyzed callee: UnitValue net.miginfocom.layout.PlatformDefaults:getPanelInsets(int)
    //#CategoryPanel.java:61: Warning: method not available - call not analyzed
    //#    call on float net.miginfocom.layout.UnitValue:getValue()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)
    //#    unanalyzed callee: float net.miginfocom.layout.UnitValue:getValue()
            getValue();
    /** Panel right padding. */
    private final int rightPadding = (int) PlatformDefaults.getPanelInsets(3).
    //#CategoryPanel.java:64: Warning: method not available - call not analyzed
    //#    call on UnitValue net.miginfocom.layout.PlatformDefaults:getPanelInsets(int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)
    //#    unanalyzed callee: UnitValue net.miginfocom.layout.PlatformDefaults:getPanelInsets(int)
    //#CategoryPanel.java:64: Warning: method not available - call not analyzed
    //#    call on float net.miginfocom.layout.UnitValue:getValue()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)
    //#    unanalyzed callee: float net.miginfocom.layout.UnitValue:getValue()
            getValue();
    /** Active preferences category. */
    private PreferencesCategory category;
    /** Parent window. */
    private Window parent;
    /** Title label. */
    private TitlePanel title;
    /** Tooltip display area. */
    private ToolTipPanel tooltip;
    /** Contents Panel. */
    private JScrollPane scrollPane;
    /** Loading panel. */
    private JPanel loading;
    /** Loading panel. */
    private JPanel nullCategory;
    /** Loading panel. */
    private JPanel waitingCategory;
    /** Category panel map. */
    private Map<PreferencesCategory, JPanel> panels;
    /** Category loading swing worker. */
    private SwingWorker worker;
    /** Waiting. */
    private boolean waiting;

    /**
     * Instantiates a new category panel.
     *
     * @param parent Parent window
     */
    public CategoryPanel(final Window parent) {
        this(parent, null);
    //#CategoryPanel.java:95: method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): "; "._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): "body { font-family: "._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): "font-size: "._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): "pt; }"._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryPanel]
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): __Descendant_Table[others]
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): __Dispatch_Table.setCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[com/dmdirc/addons/ui_swing/components/text/TextLabel]
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.getDocument()Ljavax/swing/text/StyledDocument;
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): parent
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.__Tag
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new JPanel(CategoryPanel#3) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new JPanel(CategoryPanel#6) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new JPanel(CategoryPanel#9) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new JPanel(PrefsCategoryLoader#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new JScrollPane(CategoryPanel#12) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new PrefsCategoryLoader(setCategory#2) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new PrefsCategoryLoader(setCategory#2).__Tag
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new PrefsCategoryLoader(setCategory#2).category
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new PrefsCategoryLoader(setCategory#2).categoryPanel
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new PrefsCategoryLoader(setCategory#2).errorCategory
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new PrefsCategoryLoader(setCategory#2).leftPadding
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new PrefsCategoryLoader(setCategory#2).padding
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new PrefsCategoryLoader(setCategory#2).rightPadding
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new TitlePanel(CategoryPanel#13) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new ToolTipPanel(CategoryPanel#14) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.__Tag
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.category
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.leftPadding
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.loading
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.nullCategory
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.padding
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.panels
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.parent
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.rightPadding
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.scrollPane
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.title
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.tooltip
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.waitingCategory
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.worker
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new JPanel(CategoryPanel#3)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new JPanel(CategoryPanel#6)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new JPanel(CategoryPanel#9)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new JPanel(PrefsCategoryLoader#1)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new JScrollPane(CategoryPanel#12)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new PrefsCategoryLoader(setCategory#2)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new TitlePanel(CategoryPanel#13)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new ToolTipPanel(CategoryPanel#14)
    //#pre[1] (void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.__Tag == com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryPanel
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): (int) (net.miginfocom.layout.UnitValue:getValue(...)@58) in {-2_147_483_648..4_294_967_295}
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): (int) (net.miginfocom.layout.UnitValue:getValue(...)@61) in {-2_147_483_648..4_294_967_295}
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): (int) (net.miginfocom.layout.UnitValue:getValue(...)@64) in {-2_147_483_648..4_294_967_295}
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): java.util.Collections:synchronizedMap(...)@109 != null
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.__Tag == com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryPanel
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.category == null
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): init'ed(this.leftPadding)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.loading == &new JPanel(CategoryPanel#3)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.nullCategory == &new JPanel(CategoryPanel#6)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): init'ed(this.padding)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.panels != null
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.parent == parent
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): init'ed(this.parent)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): init'ed(this.rightPadding)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.scrollPane == &new JScrollPane(CategoryPanel#12)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.title == &new TitlePanel(CategoryPanel#13)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.tooltip == &new ToolTipPanel(CategoryPanel#14)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): this.waitingCategory == &new JPanel(CategoryPanel#9)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): init'ed(this.worker)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new JPanel(CategoryPanel#3) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new JPanel(CategoryPanel#6) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new JPanel(CategoryPanel#9) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new JScrollPane(CategoryPanel#12) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new TitlePanel(CategoryPanel#13) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new ToolTipPanel(CategoryPanel#14) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new JPanel(PrefsCategoryLoader#1) num objects <= 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): new PrefsCategoryLoader(setCategory#2) num objects == new JPanel(PrefsCategoryLoader#1) num objects
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): init'ed(new PrefsCategoryLoader(setCategory#2).__Tag)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): init'ed(new PrefsCategoryLoader(setCategory#2).category)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): init'ed(new PrefsCategoryLoader(setCategory#2).categoryPanel)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): init'ed(new PrefsCategoryLoader(setCategory#2).errorCategory)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): init'ed(new PrefsCategoryLoader(setCategory#2).leftPadding)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): init'ed(new PrefsCategoryLoader(setCategory#2).padding)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): init'ed(new PrefsCategoryLoader(setCategory#2).rightPadding)
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:javax.swing.SwingWorker
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:net.miginfocom.layout.PlatformDefaults:getUnitValueX
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:net.miginfocom.layout.UnitValue:getValue
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:net.miginfocom.layout.PlatformDefaults:getPanelInsets
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:javax.swing.JPanel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:javax.swing.JTextPane:getDocument
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:javax.swing.JTextPane:setText
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:javax.swing.text.StyledDocument:setParagraphAttributes
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:javax.swing.text.DefaultStyledDocument
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:javax.swing.JTextPane
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:javax.swing.text.html.HTMLEditorKit
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditorKit
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:javax.swing.plaf.basic.BasicTextPaneUI
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setUI
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:javax.swing.UIManager:getFont
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:javax.swing.text.html.HTMLDocument:getStyleSheet
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:java.awt.Font:getFamily
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:java.awt.Font:getSize
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:javax.swing.text.html.StyleSheet:addRule
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setOpaque
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditable
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setHighlighter
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:java.awt.Insets
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setMargin
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:javax.swing.text.SimpleAttributeSet
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:javax.swing.text.StyleConstants:setAlignment
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:javax.swing.JPanel:add
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:javax.swing.SwingWorker:execute
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:java.util.HashMap
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:java.util.Collections:synchronizedMap
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:javax.swing.JScrollPane
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:javax.swing.JScrollPane:setHorizontalScrollBarPolicy
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:javax.swing.BorderFactory:createEtchedBorder
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TitlePanel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.ToolTipPanel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel:add
    }
    //#CategoryPanel.java:96: end of method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window)

    /**
     * Instantiates a new category panel.
     *
     * @param parent Parent window
     * @param category Initial category
     */
    public CategoryPanel(final Window parent,
            final PreferencesCategory category) {
        super(new MigLayout("fillx, wrap, ins 0"));
    //#CategoryPanel.java:106: method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)
    //#CategoryPanel.java:106: Warning: method not available - call not analyzed
    //#    call on void net.miginfocom.swing.MigLayout(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)
    //#    unanalyzed callee: void net.miginfocom.swing.MigLayout(String)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): "; "._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): "body { font-family: "._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): "font-size: "._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): "pt; }"._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryPanel]
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): __Descendant_Table[others]
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): __Dispatch_Table.setCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): category
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[com/dmdirc/addons/ui_swing/components/text/TextLabel]
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.getDocument()Ljavax/swing/text/StyledDocument;
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): parent
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.__Tag
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new JPanel(CategoryPanel#3) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new JPanel(CategoryPanel#6) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new JPanel(CategoryPanel#9) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new JPanel(PrefsCategoryLoader#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new JScrollPane(CategoryPanel#12) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new PrefsCategoryLoader(setCategory#2) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new PrefsCategoryLoader(setCategory#2).__Tag
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new PrefsCategoryLoader(setCategory#2).category
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new PrefsCategoryLoader(setCategory#2).categoryPanel
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new PrefsCategoryLoader(setCategory#2).errorCategory
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new PrefsCategoryLoader(setCategory#2).leftPadding
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new PrefsCategoryLoader(setCategory#2).padding
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new PrefsCategoryLoader(setCategory#2).rightPadding
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new TitlePanel(CategoryPanel#13) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new ToolTipPanel(CategoryPanel#14) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.__Tag
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.category
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.leftPadding
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.loading
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.nullCategory
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.padding
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.panels
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.parent
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.rightPadding
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.scrollPane
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.title
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.tooltip
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.waitingCategory
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.worker
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new JPanel(CategoryPanel#3)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new JPanel(CategoryPanel#6)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new JPanel(CategoryPanel#9)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new JPanel(PrefsCategoryLoader#1)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new JScrollPane(CategoryPanel#12)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new PrefsCategoryLoader(setCategory#2)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new TitlePanel(CategoryPanel#13)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new ToolTipPanel(CategoryPanel#14)
    //#pre[2] (void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.__Tag == com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryPanel
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): (int) (net.miginfocom.layout.UnitValue:getValue(...)@58) in {-2_147_483_648..4_294_967_295}
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): (int) (net.miginfocom.layout.UnitValue:getValue(...)@61) in {-2_147_483_648..4_294_967_295}
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): (int) (net.miginfocom.layout.UnitValue:getValue(...)@64) in {-2_147_483_648..4_294_967_295}
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): java.util.Collections:synchronizedMap(...)@109 != null
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): net.miginfocom.layout.PlatformDefaults:getPanelInsets(...)@61 != null
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): net.miginfocom.layout.PlatformDefaults:getPanelInsets(...)@64 != null
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): net.miginfocom.layout.PlatformDefaults:getUnitValueX(...)@58 != null
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.__Tag == com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryPanel
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.category == category
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): init'ed(this.category)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): init'ed(this.leftPadding)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.loading == &new JPanel(CategoryPanel#3)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.nullCategory == &new JPanel(CategoryPanel#6)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): init'ed(this.padding)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.panels != null
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.parent == parent
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): init'ed(this.parent)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): init'ed(this.rightPadding)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.scrollPane == &new JScrollPane(CategoryPanel#12)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.title == &new TitlePanel(CategoryPanel#13)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.tooltip == &new ToolTipPanel(CategoryPanel#14)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): this.waitingCategory == &new JPanel(CategoryPanel#9)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): init'ed(this.worker)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new JPanel(CategoryPanel#3) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new JPanel(CategoryPanel#6) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new JPanel(CategoryPanel#9) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new JScrollPane(CategoryPanel#12) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new TitlePanel(CategoryPanel#13) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new ToolTipPanel(CategoryPanel#14) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new JPanel(PrefsCategoryLoader#1) num objects <= 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): new PrefsCategoryLoader(setCategory#2) num objects == new JPanel(PrefsCategoryLoader#1) num objects
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): init'ed(new PrefsCategoryLoader(setCategory#2).__Tag)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): init'ed(new PrefsCategoryLoader(setCategory#2).category)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): init'ed(new PrefsCategoryLoader(setCategory#2).categoryPanel)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): init'ed(new PrefsCategoryLoader(setCategory#2).errorCategory)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): init'ed(new PrefsCategoryLoader(setCategory#2).leftPadding)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): init'ed(new PrefsCategoryLoader(setCategory#2).padding)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): init'ed(new PrefsCategoryLoader(setCategory#2).rightPadding)
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:javax.swing.SwingWorker
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:net.miginfocom.layout.PlatformDefaults:getUnitValueX
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:net.miginfocom.layout.UnitValue:getValue
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:net.miginfocom.layout.PlatformDefaults:getPanelInsets
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:javax.swing.JPanel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:javax.swing.JTextPane:getDocument
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:javax.swing.JTextPane:setText
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:javax.swing.text.StyledDocument:setParagraphAttributes
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:javax.swing.text.DefaultStyledDocument
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:javax.swing.JTextPane
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:javax.swing.text.html.HTMLEditorKit
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditorKit
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:javax.swing.plaf.basic.BasicTextPaneUI
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setUI
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:javax.swing.UIManager:getFont
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:javax.swing.text.html.HTMLDocument:getStyleSheet
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:java.awt.Font:getFamily
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:java.awt.Font:getSize
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:javax.swing.text.html.StyleSheet:addRule
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setOpaque
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditable
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setHighlighter
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:java.awt.Insets
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setMargin
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:javax.swing.text.SimpleAttributeSet
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:javax.swing.text.StyleConstants:setAlignment
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:javax.swing.JPanel:add
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)): Effects-of-calling:javax.swing.SwingWorker:execute
        this.parent = parent;

        panels = Collections.synchronizedMap(
                new HashMap<PreferencesCategory, JPanel>());

        loading = new JPanel(new MigLayout("fillx"));
    //#CategoryPanel.java:112: Warning: method not available - call not analyzed
    //#    call on void net.miginfocom.swing.MigLayout(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)
    //#    unanalyzed callee: void net.miginfocom.swing.MigLayout(String)
        loading.add(new TextLabel("Loading..."));

        nullCategory = new JPanel(new MigLayout("fillx"));
    //#CategoryPanel.java:115: Warning: method not available - call not analyzed
    //#    call on void net.miginfocom.swing.MigLayout(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)
    //#    unanalyzed callee: void net.miginfocom.swing.MigLayout(String)
        nullCategory.add(new TextLabel("Please select a category."));

        waitingCategory = new JPanel(new MigLayout("fillx"));
    //#CategoryPanel.java:118: Warning: method not available - call not analyzed
    //#    call on void net.miginfocom.swing.MigLayout(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)
    //#    unanalyzed callee: void net.miginfocom.swing.MigLayout(String)
        waitingCategory.add(new TextLabel("Please wait, loading..."));

        scrollPane = new JScrollPane(loading);
        scrollPane.setHorizontalScrollBarPolicy(
                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

        title = new TitlePanel(BorderFactory.createEtchedBorder(),
    //#CategoryPanel.java:125: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.TitlePanel(Border, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.TitlePanel(Border, String)
                "Preferences");
        tooltip = new ToolTipPanel("Hover over a setting to see a " +
    //#CategoryPanel.java:127: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.ToolTipPanel(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.ToolTipPanel(String)
                "description, if available.");

        add(title, "pushx, growx, h 45!");
    //#CategoryPanel.java:130: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel:add(Component, Object)
        add(scrollPane, "grow, push, h 425!");
    //#CategoryPanel.java:131: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel:add(Component, Object)
        add(tooltip, "pushx, growx, h 65!");
    //#CategoryPanel.java:132: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel:add(Component, Object)

        panels.put(null, loading);
        setCategory(category);
    }
    //#CategoryPanel.java:136: end of method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel(Window, PreferencesCategory)

    /**
     * Returns this categrory panel's parent window.
     *
     * @return Parent window
     */
    protected Window getParentWindow() {
        return parent;
    //#CategoryPanel.java:144: method: Window com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.getParentWindow()
    //#input(Window getParentWindow()): this
    //#input(Window getParentWindow()): this.parent
    //#output(Window getParentWindow()): return_value
    //#pre[2] (Window getParentWindow()): init'ed(this.parent)
    //#post(Window getParentWindow()): return_value == this.parent
    //#post(Window getParentWindow()): init'ed(return_value)
    //#CategoryPanel.java:144: end of method: Window com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.getParentWindow()
    }

    /**
     * Returns the tooltip panel for this category panel.
     *
     * @return Tooltip panel
     */
    protected ToolTipPanel getToolTipPanel() {
        return tooltip;
    //#CategoryPanel.java:153: method: ToolTipPanel com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.getToolTipPanel()
    //#input(ToolTipPanel getToolTipPanel()): this
    //#input(ToolTipPanel getToolTipPanel()): this.tooltip
    //#output(ToolTipPanel getToolTipPanel()): return_value
    //#pre[2] (ToolTipPanel getToolTipPanel()): init'ed(this.tooltip)
    //#post(ToolTipPanel getToolTipPanel()): return_value == this.tooltip
    //#post(ToolTipPanel getToolTipPanel()): init'ed(return_value)
    //#CategoryPanel.java:153: end of method: ToolTipPanel com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.getToolTipPanel()
    }

    /**
     * Informs the category panel a category has been loaded.
     *
     * @param loader Category loader
     * @param category Loaded category
     */
    protected void categoryLoaded(final PrefsCategoryLoader loader,
            final PreferencesCategory category) {
        panels.put(category, loader.getPanel());
    //#CategoryPanel.java:164: method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.categoryLoaded(PrefsCategoryLoader, PreferencesCategory)
    //#input(void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): category
    //#input(void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): com/dmdirc/addons/ui_swing/dialogs/prefs/PrefsCategoryLoader.__Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/prefs/PrefsCategoryLoader]
    //#input(void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): com/dmdirc/addons/ui_swing/dialogs/prefs/PrefsCategoryLoader.__Descendant_Table[others]
    //#input(void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): com/dmdirc/addons/ui_swing/dialogs/prefs/PrefsCategoryLoader.__Dispatch_Table.getPanel()Ljavax/swing/JPanel;
    //#input(void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): com/dmdirc/addons/ui_swing/dialogs/prefs/PrefsCategoryLoader.com.dmdirc.logger.ErrorLevel.MEDIUM
    //#input(void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): loader
    //#input(void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): loader.__Tag
    //#input(void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): loader.errorCategory
    //#input(void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): this
    //#input(void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): this.category
    //#input(void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): this.panels
    //#pre[2] (void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): loader != null
    //#pre[3] (void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): loader.__Tag == com/dmdirc/addons/ui_swing/dialogs/prefs/PrefsCategoryLoader
    //#pre[6] (void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): init'ed(this.category)
    //#pre[7] (void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): this.panels != null
    //#pre[4] (void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): (soft) init'ed(loader.errorCategory)
    //#unanalyzed(void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait
    //#unanalyzed(void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): Effects-of-calling:javax.swing.SwingWorker:get
    //#unanalyzed(void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void categoryLoaded(PrefsCategoryLoader, PreferencesCategory)): Effects-of-calling:com.dmdirc.logger.Logger:appError
        categoryLoaded(category);
    }
    //#CategoryPanel.java:166: end of method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.categoryLoaded(PrefsCategoryLoader, PreferencesCategory)

    private void categoryLoaded(final PreferencesCategory category) {
        if (this.category == category) {
    //#CategoryPanel.java:169: method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.categoryLoaded(PreferencesCategory)
    //#input(void categoryLoaded(PreferencesCategory)): category
    //#input(void categoryLoaded(PreferencesCategory)): this
    //#input(void categoryLoaded(PreferencesCategory)): this.category
    //#pre[4] (void categoryLoaded(PreferencesCategory)): init'ed(this.category)
    //#test_vector(void categoryLoaded(PreferencesCategory)): category == this.category: {0}, {1}
            UIUtilities.invokeAndWait(new Runnable() {
    //#CategoryPanel.java:170: method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1(CategoryPanel, PreferencesCategory)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1(CategoryPanel, PreferencesCategory)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1(CategoryPanel, PreferencesCategory)): Param_2
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1(CategoryPanel, PreferencesCategory)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1(CategoryPanel, PreferencesCategory)): this.this$0
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1(CategoryPanel, PreferencesCategory)): this.val$category
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1(CategoryPanel, PreferencesCategory)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1(CategoryPanel, PreferencesCategory)): init'ed(this.this$0)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1(CategoryPanel, PreferencesCategory)): this.val$category == Param_2
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1(CategoryPanel, PreferencesCategory)): init'ed(this.val$category)
    //#CategoryPanel.java:170: end of method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1(CategoryPanel, PreferencesCategory)
    //#CategoryPanel.java:170: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait(Runnable)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel
    //#    method: void categoryLoaded(PreferencesCategory)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait(Runnable)

                /** {@inheritDoc} */
                @Override
                public void run() {
                    scrollPane.setViewportView(panels.get(category));
    //#CategoryPanel.java:175: method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1.run()
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.this$0.panels
    //#input(void run()): this.this$0.scrollPane
    //#input(void run()): this.this$0.title
    //#input(void run()): this.val$category
    //#pre[2] (void run()): this.this$0 != null
    //#pre[3] (void run()): this.panels != null
    //#pre[4] (void run()): this.scrollPane != null
    //#pre[5] (void run()): this.title != null
    //#test_vector(void run()): this.val$category: Inverse{null}, Addr_Set{null}
                    if (category == null) {
                        title.setText("Preferences");
    //#CategoryPanel.java:177: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.TitlePanel:setText(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.TitlePanel:setText(String)
                    } else {
                        title.setText(category.getPath());
    //#CategoryPanel.java:179: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.prefs.PreferencesCategory:getPath()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1
    //#    method: void run()
    //#    unanalyzed callee: String com.dmdirc.config.prefs.PreferencesCategory:getPath()
    //#CategoryPanel.java:179: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.TitlePanel:setText(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.TitlePanel:setText(String)
                    }
                }
    //#CategoryPanel.java:181: end of method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1.run()
            });
        }        
    }
    //#CategoryPanel.java:184: end of method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.categoryLoaded(PreferencesCategory)

    /**
     * Sets the new active category for this panel and relays out.
     *
     * @param category New Category
     */
    public void setCategory(final PreferencesCategory category) {
        this.category = category;
    //#CategoryPanel.java:192: method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.setCategory(PreferencesCategory)
    //#input(void setCategory(PreferencesCategory)): "; "._tainted
    //#input(void setCategory(PreferencesCategory)): "body { font-family: "._tainted
    //#input(void setCategory(PreferencesCategory)): "font-size: "._tainted
    //#input(void setCategory(PreferencesCategory)): "pt; }"._tainted
    //#input(void setCategory(PreferencesCategory)): category
    //#input(void setCategory(PreferencesCategory)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[com/dmdirc/addons/ui_swing/components/text/TextLabel]
    //#input(void setCategory(PreferencesCategory)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[others]
    //#input(void setCategory(PreferencesCategory)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.getDocument()Ljavax/swing/text/StyledDocument;
    //#input(void setCategory(PreferencesCategory)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(void setCategory(PreferencesCategory)): this
    //#input(void setCategory(PreferencesCategory)): this.panels
    //#output(void setCategory(PreferencesCategory)): new JPanel(PrefsCategoryLoader#1) num objects
    //#output(void setCategory(PreferencesCategory)): new PrefsCategoryLoader(setCategory#2) num objects
    //#output(void setCategory(PreferencesCategory)): new PrefsCategoryLoader(setCategory#2).__Tag
    //#output(void setCategory(PreferencesCategory)): new PrefsCategoryLoader(setCategory#2).category
    //#output(void setCategory(PreferencesCategory)): new PrefsCategoryLoader(setCategory#2).categoryPanel
    //#output(void setCategory(PreferencesCategory)): new PrefsCategoryLoader(setCategory#2).errorCategory
    //#output(void setCategory(PreferencesCategory)): new PrefsCategoryLoader(setCategory#2).leftPadding
    //#output(void setCategory(PreferencesCategory)): new PrefsCategoryLoader(setCategory#2).padding
    //#output(void setCategory(PreferencesCategory)): new PrefsCategoryLoader(setCategory#2).rightPadding
    //#output(void setCategory(PreferencesCategory)): this.category
    //#output(void setCategory(PreferencesCategory)): this.worker
    //#new obj(void setCategory(PreferencesCategory)): new JPanel(PrefsCategoryLoader#1)
    //#new obj(void setCategory(PreferencesCategory)): new PrefsCategoryLoader(setCategory#2)
    //#pre[4] (void setCategory(PreferencesCategory)): this.panels != null
    //#post(void setCategory(PreferencesCategory)): this.category == category
    //#post(void setCategory(PreferencesCategory)): init'ed(this.category)
    //#post(void setCategory(PreferencesCategory)): this.worker == One-of{&new PrefsCategoryLoader(setCategory#2), old this.worker}
    //#post(void setCategory(PreferencesCategory)): new JPanel(PrefsCategoryLoader#1) num objects <= 1
    //#post(void setCategory(PreferencesCategory)): new PrefsCategoryLoader(setCategory#2) num objects <= 1
    //#post(void setCategory(PreferencesCategory)): init'ed(new PrefsCategoryLoader(setCategory#2).__Tag)
    //#post(void setCategory(PreferencesCategory)): init'ed(new PrefsCategoryLoader(setCategory#2).category)
    //#post(void setCategory(PreferencesCategory)): init'ed(new PrefsCategoryLoader(setCategory#2).categoryPanel)
    //#post(void setCategory(PreferencesCategory)): init'ed(new PrefsCategoryLoader(setCategory#2).errorCategory)
    //#post(void setCategory(PreferencesCategory)): init'ed(new PrefsCategoryLoader(setCategory#2).leftPadding)
    //#post(void setCategory(PreferencesCategory)): init'ed(new PrefsCategoryLoader(setCategory#2).padding)
    //#post(void setCategory(PreferencesCategory)): init'ed(new PrefsCategoryLoader(setCategory#2).rightPadding)
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:javax.swing.SwingWorker
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:net.miginfocom.layout.PlatformDefaults:getUnitValueX
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:net.miginfocom.layout.UnitValue:getValue
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:net.miginfocom.layout.PlatformDefaults:getPanelInsets
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:javax.swing.JPanel
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:javax.swing.JTextPane:getDocument
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:javax.swing.JTextPane:setText
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:javax.swing.text.StyledDocument:setParagraphAttributes
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:javax.swing.text.DefaultStyledDocument
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:javax.swing.JTextPane
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:javax.swing.text.html.HTMLEditorKit
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditorKit
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:javax.swing.plaf.basic.BasicTextPaneUI
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setUI
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:javax.swing.UIManager:getFont
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:javax.swing.text.html.HTMLDocument:getStyleSheet
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:java.awt.Font:getFamily
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:java.awt.Font:getSize
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:javax.swing.text.html.StyleSheet:addRule
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setOpaque
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditable
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setHighlighter
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:java.awt.Insets
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setMargin
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:javax.swing.text.SimpleAttributeSet
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:javax.swing.text.StyleConstants:setAlignment
    //#unanalyzed(void setCategory(PreferencesCategory)): Effects-of-calling:javax.swing.JPanel:add
    //#test_vector(void setCategory(PreferencesCategory)): java.util.Map:containsKey(...)@194: {1}, {0}

        if (!panels.containsKey(category)) {
            UIUtilities.invokeAndWait(new Runnable() {
    //#CategoryPanel.java:195: method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2(CategoryPanel)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2(CategoryPanel)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2(CategoryPanel)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2(CategoryPanel)): this.this$0
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2(CategoryPanel)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2(CategoryPanel)): init'ed(this.this$0)
    //#CategoryPanel.java:195: end of method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2(CategoryPanel)
    //#CategoryPanel.java:195: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait(Runnable)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel
    //#    method: void setCategory(PreferencesCategory)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait(Runnable)

                @Override
                public void run() {
                    scrollPane.setViewportView(loading);
    //#CategoryPanel.java:199: method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2.run()
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.this$0.loading
    //#input(void run()): this.this$0.scrollPane
    //#pre[2] (void run()): this.this$0 != null
    //#pre[3] (void run()): init'ed(this.loading)
    //#pre[4] (void run()): this.scrollPane != null
                }
    //#CategoryPanel.java:200: end of method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2.run()
            });

            worker = new PrefsCategoryLoader(this, category);
            worker.execute();
        } else {
            categoryLoaded(category);
        }
    }
    //#CategoryPanel.java:208: end of method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.setCategory(PreferencesCategory)

    /** 
     * Sets this panel to a waiting to load state.
     * 
     * @param b
     */
    public void setWaiting(boolean b) {
        waiting = b;
    //#CategoryPanel.java:216: method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.setWaiting(bool)
    //#input(void setWaiting(bool)): b
    //#input(void setWaiting(bool)): this
    //#input(void setWaiting(bool)): this.scrollPane
    //#input(void setWaiting(bool)): this.waitingCategory
    //#output(void setWaiting(bool)): this.waiting
    //#pre[3] (void setWaiting(bool)): this.scrollPane != null
    //#pre[4] (void setWaiting(bool)): init'ed(this.waitingCategory)
    //#post(void setWaiting(bool)): this.waiting == b
    //#post(void setWaiting(bool)): init'ed(this.waiting)
        scrollPane.setViewportView(waitingCategory);
    }
    //#CategoryPanel.java:218: end of method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.setWaiting(bool)
}
    //#output(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryPanel$2]
    //#output(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryPanel$2] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2__static_init): __Dispatch_Table.run()V == &run
    //#CategoryPanel.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2__static_init
    //#CategoryPanel.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$2
    //#output(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryPanel$1]
    //#output(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryPanel$1] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1__static_init): __Dispatch_Table.run()V == &run
    //#CategoryPanel.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1__static_init
    //#CategoryPanel.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel$1
    //#output(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryPanel]
    //#output(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel__static_init): __Dispatch_Table.categoryLoaded(Lcom/dmdirc/addons/ui_swing/dialogs/prefs/PrefsCategoryLoader;Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel__static_init): __Dispatch_Table.categoryLoaded(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel__static_init): __Dispatch_Table.getParentWindow()Ljava/awt/Window;
    //#output(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel__static_init): __Dispatch_Table.getToolTipPanel()Lcom/dmdirc/addons/ui_swing/components/ToolTipPanel;
    //#output(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel__static_init): __Dispatch_Table.setCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel__static_init): __Dispatch_Table.setWaiting(Z)V
    //#post(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryPanel] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel__static_init): __Dispatch_Table.categoryLoaded(Lcom/dmdirc/addons/ui_swing/dialogs/prefs/PrefsCategoryLoader;Lcom/dmdirc/config/prefs/PreferencesCategory;)V == &categoryLoaded
    //#post(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel__static_init): __Dispatch_Table.categoryLoaded(Lcom/dmdirc/config/prefs/PreferencesCategory;)V == &categoryLoaded
    //#post(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel__static_init): __Dispatch_Table.getParentWindow()Ljava/awt/Window; == &getParentWindow
    //#post(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel__static_init): __Dispatch_Table.getToolTipPanel()Lcom/dmdirc/addons/ui_swing/components/ToolTipPanel; == &getToolTipPanel
    //#post(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel__static_init): __Dispatch_Table.setCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V == &setCategory
    //#post(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel__static_init): __Dispatch_Table.setWaiting(Z)V == &setWaiting
    //#CategoryPanel.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel__static_init
    //#CategoryPanel.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryPanel
