Package com.dci.intellij.dbn.common.options.ui

Source Code of com.dci.intellij.dbn.common.options.ui.ConfigurationEditorForm

package com.dci.intellij.dbn.common.options.ui;

import com.dci.intellij.dbn.common.options.Configuration;
import com.dci.intellij.dbn.common.ui.DBNFormImpl;
import com.dci.intellij.dbn.common.ui.list.CheckBoxList;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.ui.DocumentAdapter;

import javax.swing.AbstractButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public abstract class ConfigurationEditorForm<E extends Configuration> extends DBNFormImpl {
    private ItemListener itemListener;
    private ActionListener actionListener;
    private DocumentListener documentListener;
    private TableModelListener tableModelListener;
    private E configuration;

    protected ConfigurationEditorForm(E configuration) {
        this.configuration = configuration;
    }

    public final E getConfiguration() {
        return configuration;
    }

    public abstract void applyChanges() throws ConfigurationException;
    public abstract void resetChanges();

    protected DocumentListener createDocumentListener() {
        return new DocumentAdapter() {
            protected void textChanged(DocumentEvent e) {
                getConfiguration().setModified(true);
            }
        };
    }

    protected ActionListener createActionListener() {
        return new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                getConfiguration().setModified(true);
            }
        };
    }

    protected ItemListener createItemListener() {
        return new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                getConfiguration().setModified(true);
            }
        };
    }

    protected TableModelListener createTableModelListener() {
        return new TableModelListener() {
            public void tableChanged(TableModelEvent e) {
                getConfiguration().setModified(true);
            }
        };
    }

    protected void registerComponents(JComponent ... components) {
        for (JComponent component : components){
            registerComponent(component);
        }
    }

    protected void registerComponent(JComponent component) {
        if (component instanceof AbstractButton) {
            AbstractButton abstractButton = (AbstractButton) component;
            if (actionListener == null) actionListener = createActionListener();
            abstractButton.addActionListener(actionListener);
        }
        else if (component instanceof CheckBoxList) {
            CheckBoxList checkBoxList = (CheckBoxList) component;
            if (actionListener == null) actionListener = createActionListener();
            checkBoxList.addActionListener(actionListener);
        } else if (component instanceof JTextField) {
            JTextField textField = (JTextField) component;
            if (documentListener == null) documentListener = createDocumentListener();
            textField.getDocument().addDocumentListener(documentListener);
        } else if (component instanceof JComboBox) {
            JComboBox comboBox = (JComboBox) component;
            if (itemListener == null) itemListener = createItemListener();
            comboBox.addItemListener(itemListener);
        } else if (component instanceof JTable) {
            JTable table = (JTable) component;
            if (tableModelListener == null) tableModelListener = createTableModelListener();
            table.getModel().addTableModelListener(tableModelListener);
        } else {
            for (Component childComponent : component.getComponents()) {
                if (childComponent instanceof JComponent) {
                    registerComponent((JComponent) childComponent);
                }
            }
        }
    }

    public void focus() {}

    public void dispose() {
        super.dispose();
        configuration = null;
    }
}
TOP

Related Classes of com.dci.intellij.dbn.common.options.ui.ConfigurationEditorForm

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.