All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jdplus.toolkit.desktop.plugin.ui.properties.l2fprod.ParametersPropertyEditor Maven / Gradle / Ivy

package jdplus.toolkit.desktop.plugin.ui.properties.l2fprod;

import com.l2fprod.common.beans.editor.AbstractPropertyEditor;
import jdplus.toolkit.base.api.data.Parameter;
import jdplus.toolkit.base.api.data.ParameterType;
import jdplus.toolkit.desktop.plugin.util.NbComponents;

import java.awt.BorderLayout;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Demortier Jeremy
 */
public class ParametersPropertyEditor extends AbstractPropertyEditor {

    private Parameter[] parameters_;

    public enum Type {
        Undefined, Initial, Fixed
    }

    private static ParameterType convert(String val) {
        Type t = Type.valueOf(val);
        if (null == t) {
            return ParameterType.Undefined;
        } else {
            return switch (t) {
                case Initial -> ParameterType.Initial;
                case Fixed -> ParameterType.Fixed;
                default -> ParameterType.Undefined;
            };
        }
    }

    private static Type convert(ParameterType t) {
        if (null == t) {
            return Type.Undefined;
        } else {
            switch (t) {
                case Initial:
                    return Type.Initial;
                case Fixed:
                    return Type.Fixed;
                default:
                    return Type.Undefined;
            }
        }
    }

    public ParametersPropertyEditor() {
        editor = new ParametersEditor();
    }

    void fireChanged(Parameter[] parameters) {
        Parameter[] old = parameters_;
        parameters_ = parameters;
        firePropertyChange(old, parameters);
    }

    @Override
    public Object getValue() {
        return parameters_;
    }

    @Override
    public void setValue(Object value) {

        if (null != value && value instanceof Parameter[]) {
            parameters_ = (Parameter[]) value;
            ((ParametersEditor) editor).setParameters(parameters_);
        }
    }

    class ParametersEditor extends JPanel {

        private Parameter[] nparameters_;

        public ParametersEditor() {
            final JButton button = new JButton("...");
            button.addActionListener(event -> {
                JPanel pane = new JPanel(new BorderLayout());
                final JTable table = new JTable(
                        new DefaultTableModel() {

                    @Override
                    public int getColumnCount() {
                        return 2;
                    }

                    @Override
                    public String getColumnName(int column) {
                        switch (column) {
                            case 0:
                                return "Value";
                            case 1:
                                return "Fixed";
                            default:
                                return "";
                        }
                    }

                    @Override
                    public Class getColumnClass(int columnIndex) {
                        if (columnIndex == 0) {
                            return Double.class;
                        } else {
                            return Type.class;
                        }
                    }

                    @Override
                    public boolean isCellEditable(int row, int column) {
                        return true;
                    }

                    @Override
                    public int getRowCount() {
                        return nparameters_.length;
                    }

                    @Override
                    public Object getValueAt(int row, int column) {
                        Parameter param = nparameters_[row];

                        return switch (column) {
                            case 0 -> param.getValue();
                            case 1 -> convert(param.getType());
                            default -> null;
                        }; //== ParameterType.Fixed;
                    }

                    @Override
                    public void setValueAt(Object aValue, int row, int column) {
                        Parameter param = nparameters_[row];

                        switch (column) {
                            case 0 -> {
                                double val = Double.parseDouble(aValue.toString());
                                nparameters_[row] = Parameter.of(val, param.getType());
                            }
                            case 1 -> nparameters_[row] = Parameter.of(param.getValue(), convert(aValue.toString()));
                        }

                        fireTableCellUpdated(row, column);
                    }
                });

                //table.getColumnModel().getColumn(0).setCellEditor(new CustomNumberEditor());
                JComboBox cb = new JComboBox(Type.values());
                table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(cb));
                table.setFillsViewportHeight(true);
                pane.add(NbComponents.newJScrollPane(table), BorderLayout.CENTER);
                Window ancestor = SwingUtilities.getWindowAncestor(button);
                final JDialog dlg = new JDialog(ancestor, Dialog.ModalityType.TOOLKIT_MODAL);
                dlg.setContentPane(pane);
                dlg.addWindowListener(new WindowAdapter() {

                    @Override
                    public void windowClosing(WindowEvent e) {
                        if (table.getCellEditor() != null) {
                            table.getCellEditor().stopCellEditing();
                        }
                        fireChanged(nparameters_);
                    }
                });
                dlg.setMinimumSize(new Dimension(300, 300));
                dlg.setLocationRelativeTo(ancestor);
                dlg.setModal(true);
                SwingUtilities.invokeLater(() -> dlg.setVisible(true));
            });

            setLayout(new BorderLayout());
            add(button, BorderLayout.CENTER);
        }

        public void setParameters(final Parameter[] param) {
            nparameters_ = param.clone();
        }

        public Parameter[] getParameters() {
            return nparameters_;
        }
    }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy