class DependantColorPanel extends javax.swing.JPanel implements ItemListener {

    private DependantColorPropertyEditor propertyEditor;
    // Variables declaration - do not modify                     
    private javax.swing.ButtonGroup buttonGroup1;
    private javax.swing.JButton colorButton;
    private javax.swing.JRadioButton customRadio;
    private javax.swing.JRadioButton darkerButton;
    private org.jdesktop.swingx.JXHeader jXHeader1;
    private javax.swing.JRadioButton parentRadio;
    // End of variables declaration                   

    /**
     * Creates new form DependantColorPanel
     */
    public DependantColorPanel() {
        initComponents();
        colorButton.addPropertyChangeListener(JColorButton.EVENT_COLOR, new PropertyChangeListener() {

            @Override
            public void propertyChange(PropertyChangeEvent evt) {
                Color newColor = (Color) evt.getNewValue();
                propertyEditor.setValue(new DependantColor(newColor));
            }
        });

        parentRadio.addItemListener(this);
        customRadio.addItemListener(this);
        darkerButton.addItemListener(this);
    }

    @Override
    public void itemStateChanged(ItemEvent e) {
        if(e.getStateChange() == ItemEvent.SELECTED) {
            colorButton.setEnabled(customRadio.isSelected());
            DependantColor.Mode selectedMode = null;
            if (parentRadio.isSelected()) {
                selectedMode = DependantColor.Mode.PARENT;
            } else if (customRadio.isSelected()) {
                selectedMode = DependantColor.Mode.CUSTOM;
            } else if (darkerButton.isSelected()) {
                selectedMode = DependantColor.Mode.DARKER;
            }
            propertyEditor.setValue(new DependantColor(selectedMode));
        }
    }

    public void setup(DependantColorPropertyEditor propertyEditor) {
        this.propertyEditor = propertyEditor;
        DependantColor dependantColor = (DependantColor) propertyEditor.getValue();
        switch (dependantColor.getMode()) {
            case CUSTOM:
                customRadio.setSelected(true);
                ((JColorButton) colorButton).setColor(dependantColor.getCustomColor());
                break;
            case PARENT:
                parentRadio.setSelected(true);
                break;
            case DARKER:
                darkerButton.setSelected(true);
                break;
            default:
                break;
        }
    }

    /**
     * This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {<FILL_FUNCTION_BODY>}// </editor-fold>                        
}


        buttonGroup1 = new javax.swing.ButtonGroup();
        colorButton = new JColorButton(Color.BLACK);
        customRadio = new javax.swing.JRadioButton();
        parentRadio = new javax.swing.JRadioButton();
        jXHeader1 = new org.jdesktop.swingx.JXHeader();
        darkerButton = new javax.swing.JRadioButton();

        buttonGroup1.add(customRadio);
        customRadio.setText(org.openide.util.NbBundle.getMessage(DependantColorPanel.class, "DependantColorPanel.customRadio.text")); // NOI18N

        buttonGroup1.add(parentRadio);
        parentRadio.setText(org.openide.util.NbBundle.getMessage(DependantColorPanel.class, "DependantColorPanel.parentRadio.text")); // NOI18N

        jXHeader1.setDescription(org.openide.util.NbBundle.getMessage(DependantColorPanel.class, "DependantColorPanel.jXHeader1.description")); // NOI18N
        jXHeader1.setTitle(org.openide.util.NbBundle.getMessage(DependantColorPanel.class, "DependantColorPanel.jXHeader1.title")); // NOI18N

        buttonGroup1.add(darkerButton);
        darkerButton.setText(org.openide.util.NbBundle.getMessage(DependantColorPanel.class, "DependantColorPanel.darkerButton.text")); // NOI18N

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jXHeader1, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(customRadio)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(colorButton))
                    .addComponent(parentRadio)
                    .addComponent(darkerButton))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jXHeader1, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(parentRadio)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(darkerButton)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(customRadio)
                    .addComponent(colorButton))
                .addContainerGap(22, Short.MAX_VALUE))
        );
    
<methods>public void <init>() ,public void <init>(java.awt.LayoutManager) ,public void <init>(boolean) ,public void <init>(java.awt.LayoutManager, boolean) ,public javax.accessibility.AccessibleContext getAccessibleContext() ,public javax.swing.plaf.PanelUI getUI() ,public java.lang.String getUIClassID() ,public void setUI(javax.swing.plaf.PanelUI) ,public void updateUI() <variables>private static final java.lang.String uiClassID