repast.simphony.visualization.gui.styleBuilder.EditedValueLayerStyleDialog.java Source code

Java tutorial

Introduction

Here is the source code for repast.simphony.visualization.gui.styleBuilder.EditedValueLayerStyleDialog.java

Source

package repast.simphony.visualization.gui.styleBuilder;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JColorChooser;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.border.TitledBorder;

import repast.simphony.ui.plugin.editor.SquareIcon;
import repast.simphony.visualization.editedStyle.DefaultEditedValueLayerStyleData2D;
import repast.simphony.visualization.editedStyle.DefaultEditedValueLayerStyleData3D;
import repast.simphony.visualization.editedStyle.EditedStyleUtils;
import repast.simphony.visualization.editedStyle.EditedValueLayerStyleData;
import repast.simphony.visualization.engine.CartesianDisplayDescriptor;
import repast.simphony.visualization.engine.DisplayType;

import com.jgoodies.forms.factories.Borders;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.FormSpecs;
import com.jgoodies.forms.layout.RowSpec;
import com.jgoodies.forms.layout.Sizes;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.XStream11XmlFriendlyReplacer;
import com.thoughtworks.xstream.io.xml.XppDriver;

/**
 * @author Eric Tatara
 */
public class EditedValueLayerStyleDialog extends JDialog {
    private boolean save = false;
    private EditedValueLayerStyleData userStyleData;

    private String valueLayerName;
    private String userStyleName;
    private String displayType;

    public EditedValueLayerStyleDialog(Frame owner) {
        super(owner);
    }

    public EditedValueLayerStyleDialog(Dialog owner) {
        super(owner);
    }

    public void init(String valueLayerName, String userStyleName, CartesianDisplayDescriptor descriptor) {
        this.valueLayerName = valueLayerName;
        this.userStyleName = userStyleName;
        this.displayType = descriptor.getDisplayType();

        userStyleData = EditedStyleUtils.getValueLayerStyle(descriptor.getValueLayerEditedStyleName());

        // TODO Projections: init from viz registry data entries
        // Set objects based on display type 2D/3D
        if (userStyleData == null) {
            if (displayType.equals(DisplayType.TWO_D))
                userStyleData = new DefaultEditedValueLayerStyleData2D();
            else if (displayType.equals(DisplayType.THREE_D))
                userStyleData = new DefaultEditedValueLayerStyleData3D();
        }

        initComponents();
        initMyComponents(displayType);
    }

    private void initMyComponents(String displayType) {

        // set initial data from userStyleData
        float[] c = userStyleData.getColor();
        RedTextField.setText(Float.toString(c[0]));
        GreenTextField.setText(Float.toString(c[1]));
        BlueTextField.setText(Float.toString(c[2]));

        iconColorbutton.setIcon(new SquareIcon(15, 15, new Color(c[0], c[1], c[2])));

        boolean[] cval = userStyleData.getColorValue();
        RedCheckBox.setSelected(cval[0]);
        GreenCheckBox.setSelected(cval[1]);
        BlueCheckBox.setSelected(cval[2]);

        c = userStyleData.getColorMin();
        RedMinTextField.setText(Float.toString(c[0]));
        GreenMinTextField.setText(Float.toString(c[1]));
        BlueMinTextField.setText(Float.toString(c[2]));

        c = userStyleData.getColorMax();
        RedMaxTextField.setText(Float.toString(c[0]));
        GreenMaxTextField.setText(Float.toString(c[1]));
        BlueMaxTextField.setText(Float.toString(c[2]));

        c = userStyleData.getColorScale();
        RedScaleTextField.setText(Float.toString(c[0]));
        GreenScaleTextField.setText(Float.toString(c[1]));
        BlueScaleTextField.setText(Float.toString(c[2]));

        CellTextField.setText(Float.toString(userStyleData.getCellSize()));

        // TODO Projections: init from viz registry data entries
        if (displayType.equals(DisplayType.TWO_D)) {
            this.setTitle("2D Value Layer Editor");

            HeightTextField.setEnabled(false);
            HeightCheckBox.setEnabled(false);
            HeightMinTextField.setEnabled(false);
            HeightMaxTextField.setEnabled(false);
            HeightScaleTextField.setEnabled(false);
        } else {
            this.setTitle("3D Shape Editor");

            HeightTextField.setText(Float.toString(userStyleData.getY()));
            HeightCheckBox.setSelected(userStyleData.isYValue());
            HeightMinTextField.setText(Float.toString(userStyleData.getYMin()));
            HeightMaxTextField.setText(Float.toString(userStyleData.getYMax()));
            HeightScaleTextField.setText(Float.toString(userStyleData.getYScale()));
        }
    }

    public void writeStyleData() {
        XStream xstream = new XStream(new XppDriver(new XStream11XmlFriendlyReplacer())) {
            protected boolean useXStream11XmlFriendlyMapper() {
                return true;
            }
        };

        File file = null;
        try {
            File dir = new File(EditedStyleUtils.getStyleDirName());

            if (!dir.exists())
                dir.mkdir();

            if (userStyleName != null)
                file = new File(dir, userStyleName);

            else {
                int cnt = 0;
                userStyleName = valueLayerName + ".style_" + cnt + ".xml";
                file = new File(dir, userStyleName);
                while (file.exists()) {
                    userStyleName = valueLayerName + ".style_" + cnt + ".xml";
                    file = new File(dir, userStyleName);
                    cnt++;
                }
            }

            FileWriter fw = new FileWriter(file);

            xstream.toXML(userStyleData, fw);
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public boolean doSave() {
        return save;
    }

    private void cancelButtonActionPerformed(ActionEvent e) {
        dispose();
    }

    private void okButtonActionPerformed(ActionEvent e) {

        // Apply the values from text fields here instead of using action listeners,
        //  because the listener won't fire unless the user hits return in each
        //  text field.

        float[] c = userStyleData.getColor();
        c[0] = Float.valueOf(RedTextField.getText());
        c[1] = Float.valueOf(GreenTextField.getText());
        c[2] = Float.valueOf(BlueTextField.getText());

        float[] minc = userStyleData.getColorMin();
        minc[0] = Float.valueOf(RedMinTextField.getText());
        minc[1] = Float.valueOf(GreenMinTextField.getText());
        minc[2] = Float.valueOf(BlueMinTextField.getText());

        float[] maxc = userStyleData.getColorMax();
        maxc[0] = Float.valueOf(RedMaxTextField.getText());
        maxc[1] = Float.valueOf(GreenMaxTextField.getText());
        maxc[2] = Float.valueOf(BlueMaxTextField.getText());

        float[] scalec = userStyleData.getColorScale();
        scalec[0] = Float.valueOf(RedScaleTextField.getText());
        scalec[1] = Float.valueOf(GreenScaleTextField.getText());
        scalec[2] = Float.valueOf(BlueScaleTextField.getText());

        // Check if the constant color values are valid (0 - 1)
        if (validateColorRange(c)) {
            save = true;

            userStyleData.setColor(c);
            userStyleData.setColorMin(minc);
            userStyleData.setColorMax(maxc);
            userStyleData.setColorScale(scalec);

            userStyleData.setCellSize(Float.valueOf(CellTextField.getText()));

            // TODO Projections: init from viz registry data entries
            if (displayType.equals(DisplayType.THREE_D)) {
                userStyleData.setY(Float.valueOf(HeightTextField.getText()));
                userStyleData.setYMin(Float.valueOf(HeightMinTextField.getText()));
                userStyleData.setYMax(Float.valueOf(HeightMaxTextField.getText()));
                userStyleData.setYScale(Float.valueOf(HeightScaleTextField.getText()));
            }

            writeStyleData();
            dispose();
        }
    }

    private void iconColorbuttonActionPerformed(ActionEvent e) {
        float iconColor[] = userStyleData.getColor();
        Color iconPaint = new Color(iconColor[0], iconColor[1], iconColor[2]);

        Color color = JColorChooser.showDialog(EditedValueLayerStyleDialog.this, "Choose an Icon Color", iconPaint);
        if (color != null) {
            float col[] = color.getRGBColorComponents(null);
            userStyleData.setColor(col);

            iconColorbutton.setIcon(new SquareIcon(15, 15, color));

            RedTextField.setText(Float.toString(col[0]));
            GreenTextField.setText(Float.toString(col[1]));
            BlueTextField.setText(Float.toString(col[2]));
        }
    }

    private boolean validateColorRange(float[] c) {

        for (int i = 0; i < c.length; i++) {
            if (c[i] < 0 || c[i] > 1) {
                JOptionPane.showMessageDialog(null, "The valid range for color values is 0 - 1",
                        "Color value out of bounds", JOptionPane.WARNING_MESSAGE);

                return false;
            }
        }
        return true;
    }

    private void RedCheckBoxActionPerformed(ActionEvent e) {
        AbstractButton abstractButton = (AbstractButton) e.getSource();
        boolean selected = abstractButton.getModel().isSelected();

        boolean[] cval = userStyleData.getColorValue();
        cval[0] = selected;
        userStyleData.setColorValue(cval);
    }

    private void GreenCheckBoxActionPerformed(ActionEvent e) {
        AbstractButton abstractButton = (AbstractButton) e.getSource();
        boolean selected = abstractButton.getModel().isSelected();

        boolean[] cval = userStyleData.getColorValue();
        cval[1] = selected;
        userStyleData.setColorValue(cval);
    }

    private void BlueCheckBoxActionPerformed(ActionEvent e) {
        AbstractButton abstractButton = (AbstractButton) e.getSource();
        boolean selected = abstractButton.getModel().isSelected();

        boolean[] cval = userStyleData.getColorValue();
        cval[2] = selected;
        userStyleData.setColorValue(cval);
    }

    private void HeightCheckBoxActionPerformed(ActionEvent e) {
        AbstractButton abstractButton = (AbstractButton) e.getSource();
        boolean selected = abstractButton.getModel().isSelected();

        userStyleData.setYValue(selected);
    }

    public String getUserStyleName() {
        return userStyleName;
    }

    private void initComponents() {
        // JFormDesigner - Component initialization - DO NOT MODIFY  //GEN-BEGIN:initComponents
        // Generated using JFormDesigner non-commercial license
        dialogPane = new JPanel();
        buttonBar = new JPanel();
        okButton = new JButton();
        cancelButton = new JButton();
        panel1 = new JPanel();
        panel6 = new JPanel();
        label1 = new JLabel();
        iconColorbutton = new JButton();
        label15 = new JLabel();
        label2 = new JLabel();
        label16 = new JLabel();
        label17 = new JLabel();
        label18 = new JLabel();
        label12 = new JLabel();
        RedTextField = new JTextField();
        RedCheckBox = new JCheckBox();
        RedMinTextField = new JTextField();
        RedMaxTextField = new JTextField();
        RedScaleTextField = new JTextField();
        label13 = new JLabel();
        GreenTextField = new JTextField();
        GreenCheckBox = new JCheckBox();
        GreenMinTextField = new JTextField();
        GreenMaxTextField = new JTextField();
        GreenScaleTextField = new JTextField();
        label14 = new JLabel();
        BlueTextField = new JTextField();
        BlueCheckBox = new JCheckBox();
        BlueMinTextField = new JTextField();
        BlueMaxTextField = new JTextField();
        BlueScaleTextField = new JTextField();
        separator1 = new JSeparator();
        label3 = new JLabel();
        HeightTextField = new JTextField();
        HeightCheckBox = new JCheckBox();
        HeightMinTextField = new JTextField();
        HeightMaxTextField = new JTextField();
        HeightScaleTextField = new JTextField();
        separator2 = new JSeparator();
        label4 = new JLabel();
        CellTextField = new JTextField();
        CellConstraints cc = new CellConstraints();

        //======== this ========
        setModal(true);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        Container contentPane = getContentPane();
        contentPane.setLayout(new BorderLayout());

        //======== dialogPane ========
        {
            dialogPane.setBorder(Borders.DIALOG);
            dialogPane.setLayout(new BorderLayout());

            //======== buttonBar ========
            {
                buttonBar.setBorder(Borders.BUTTON_BAR_PAD);
                buttonBar.setLayout(new FormLayout(
                        new ColumnSpec[] { FormSpecs.GLUE_COLSPEC, FormSpecs.BUTTON_COLSPEC,
                                FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.BUTTON_COLSPEC },
                        RowSpec.decodeSpecs("pref")));

                //---- okButton ----
                okButton.setText("OK");
                okButton.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        okButtonActionPerformed(e);
                    }
                });
                buttonBar.add(okButton, cc.xy(2, 1));

                //---- cancelButton ----
                cancelButton.setText("Cancel");
                cancelButton.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        cancelButtonActionPerformed(e);
                    }
                });
                buttonBar.add(cancelButton, cc.xy(4, 1));
            }
            dialogPane.add(buttonBar, BorderLayout.SOUTH);

            //======== panel1 ========
            {
                panel1.setLayout(new FormLayout(
                        new ColumnSpec[] { ColumnSpec.decode("left:max(default;166dlu):grow"),
                                FormSpecs.LABEL_COMPONENT_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC,
                                FormSpecs.LABEL_COMPONENT_GAP_COLSPEC, new ColumnSpec(Sizes.dluX(133)),
                                FormSpecs.LABEL_COMPONENT_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC },
                        RowSpec.decodeSpecs("default")));

                //======== panel6 ========
                {
                    panel6.setBorder(new TitledBorder("Value Layer Properties"));
                    panel6.setLayout(new FormLayout(
                            new ColumnSpec[] { FormSpecs.DEFAULT_COLSPEC, FormSpecs.LABEL_COMPONENT_GAP_COLSPEC,
                                    FormSpecs.DEFAULT_COLSPEC, FormSpecs.LABEL_COMPONENT_GAP_COLSPEC,
                                    FormSpecs.DEFAULT_COLSPEC, FormSpecs.LABEL_COMPONENT_GAP_COLSPEC,
                                    FormSpecs.DEFAULT_COLSPEC, FormSpecs.LABEL_COMPONENT_GAP_COLSPEC,
                                    FormSpecs.DEFAULT_COLSPEC, FormSpecs.LABEL_COMPONENT_GAP_COLSPEC,
                                    FormSpecs.DEFAULT_COLSPEC, FormSpecs.LABEL_COMPONENT_GAP_COLSPEC,
                                    FormSpecs.DEFAULT_COLSPEC, FormSpecs.LABEL_COMPONENT_GAP_COLSPEC,
                                    FormSpecs.DEFAULT_COLSPEC, FormSpecs.LABEL_COMPONENT_GAP_COLSPEC,
                                    FormSpecs.DEFAULT_COLSPEC, FormSpecs.LABEL_COMPONENT_GAP_COLSPEC,
                                    FormSpecs.DEFAULT_COLSPEC },
                            new RowSpec[] { FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LINE_GAP_ROWSPEC,
                                    FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LINE_GAP_ROWSPEC,
                                    FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LINE_GAP_ROWSPEC,
                                    FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LINE_GAP_ROWSPEC,
                                    FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LINE_GAP_ROWSPEC,
                                    FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LINE_GAP_ROWSPEC,
                                    FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LINE_GAP_ROWSPEC,
                                    FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LINE_GAP_ROWSPEC,
                                    FormSpecs.DEFAULT_ROWSPEC }));

                    //---- label1 ----
                    label1.setText("Base Color");
                    panel6.add(label1, cc.xy(1, 1));

                    //---- iconColorbutton ----
                    iconColorbutton.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            iconColorbuttonActionPerformed(e);
                        }
                    });
                    panel6.add(iconColorbutton, cc.xy(3, 1));

                    //---- label15 ----
                    label15.setText("Value");
                    panel6.add(label15, cc.xy(3, 3));

                    //---- label2 ----
                    label2.setText("Use Value Layer Data");
                    panel6.add(label2, cc.xy(7, 3));

                    //---- label16 ----
                    label16.setText("Minimum");
                    panel6.add(label16, cc.xy(11, 3));

                    //---- label17 ----
                    label17.setText("Maximum");
                    panel6.add(label17, cc.xy(15, 3));

                    //---- label18 ----
                    label18.setText("Scaling");
                    panel6.add(label18, cc.xy(19, 3));

                    //---- label12 ----
                    label12.setText("Red");
                    panel6.add(label12, cc.xy(1, 5));
                    panel6.add(RedTextField, cc.xy(3, 5));

                    //---- RedCheckBox ----
                    RedCheckBox.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            RedCheckBoxActionPerformed(e);
                        }
                    });
                    panel6.add(RedCheckBox, cc.xy(7, 5));
                    panel6.add(RedMinTextField, cc.xy(11, 5));
                    panel6.add(RedMaxTextField, cc.xy(15, 5));
                    panel6.add(RedScaleTextField, cc.xy(19, 5));

                    //---- label13 ----
                    label13.setText("Green");
                    panel6.add(label13, cc.xy(1, 7));
                    panel6.add(GreenTextField, cc.xy(3, 7));

                    //---- GreenCheckBox ----
                    GreenCheckBox.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            GreenCheckBoxActionPerformed(e);
                        }
                    });
                    panel6.add(GreenCheckBox, cc.xy(7, 7));
                    panel6.add(GreenMinTextField, cc.xy(11, 7));
                    panel6.add(GreenMaxTextField, cc.xy(15, 7));
                    panel6.add(GreenScaleTextField, cc.xy(19, 7));

                    //---- label14 ----
                    label14.setText("Blue");
                    panel6.add(label14, cc.xy(1, 9));
                    panel6.add(BlueTextField, cc.xy(3, 9));

                    //---- BlueCheckBox ----
                    BlueCheckBox.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            BlueCheckBoxActionPerformed(e);
                        }
                    });
                    panel6.add(BlueCheckBox, cc.xy(7, 9));
                    panel6.add(BlueMinTextField, cc.xy(11, 9));
                    panel6.add(BlueMaxTextField, cc.xy(15, 9));
                    panel6.add(BlueScaleTextField, cc.xy(19, 9));
                    panel6.add(separator1, cc.xywh(1, 11, 19, 1));

                    //---- label3 ----
                    label3.setText("Height");
                    panel6.add(label3, cc.xy(1, 13));
                    panel6.add(HeightTextField, cc.xy(3, 13));

                    //---- HeightCheckBox ----
                    HeightCheckBox.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            HeightCheckBoxActionPerformed(e);
                        }
                    });
                    panel6.add(HeightCheckBox, cc.xy(7, 13));
                    panel6.add(HeightMinTextField, cc.xy(11, 13));
                    panel6.add(HeightMaxTextField, cc.xy(15, 13));
                    panel6.add(HeightScaleTextField, cc.xy(19, 13));
                    panel6.add(separator2, cc.xywh(1, 15, 19, 1));

                    //---- label4 ----
                    label4.setText("Cell size");
                    panel6.add(label4, cc.xy(1, 17));
                    panel6.add(CellTextField, cc.xy(3, 17));
                }
                panel1.add(panel6, cc.xywh(1, 1, 5, 1));
            }
            dialogPane.add(panel1, BorderLayout.CENTER);
        }
        contentPane.add(dialogPane, BorderLayout.CENTER);
        setSize(540, 335);
        setLocationRelativeTo(getOwner());
        // JFormDesigner - End of component initialization  //GEN-END:initComponents
    }

    //   JFormDesigner - Variables declaration - DO NOT MODIFY  //GEN-BEGIN:variables
    // Generated using JFormDesigner non-commercial license
    private JPanel dialogPane;
    private JPanel buttonBar;
    private JButton okButton;
    private JButton cancelButton;
    private JPanel panel1;
    private JPanel panel6;
    private JLabel label1;
    private JButton iconColorbutton;
    private JLabel label15;
    private JLabel label2;
    private JLabel label16;
    private JLabel label17;
    private JLabel label18;
    private JLabel label12;
    private JTextField RedTextField;
    private JCheckBox RedCheckBox;
    private JTextField RedMinTextField;
    private JTextField RedMaxTextField;
    private JTextField RedScaleTextField;
    private JLabel label13;
    private JTextField GreenTextField;
    private JCheckBox GreenCheckBox;
    private JTextField GreenMinTextField;
    private JTextField GreenMaxTextField;
    private JTextField GreenScaleTextField;
    private JLabel label14;
    private JTextField BlueTextField;
    private JCheckBox BlueCheckBox;
    private JTextField BlueMinTextField;
    private JTextField BlueMaxTextField;
    private JTextField BlueScaleTextField;
    private JSeparator separator1;
    private JLabel label3;
    private JTextField HeightTextField;
    private JCheckBox HeightCheckBox;
    private JTextField HeightMinTextField;
    private JTextField HeightMaxTextField;
    private JTextField HeightScaleTextField;
    private JSeparator separator2;
    private JLabel label4;
    private JTextField CellTextField;
    //   JFormDesigner - End of variables declaration  //GEN-END:variables

}