]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/actions/style/MetricsEditor.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / actions / style / MetricsEditor.java
diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/actions/style/MetricsEditor.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/actions/style/MetricsEditor.java
new file mode 100644 (file)
index 0000000..57aeac3
--- /dev/null
@@ -0,0 +1,354 @@
+package org.simantics.modeling.ui.actions.style;\r
+\r
+import java.awt.BorderLayout;\r
+import java.awt.FlowLayout;\r
+import java.awt.GridLayout;\r
+import java.awt.event.ActionEvent;\r
+import java.awt.event.ActionListener;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import javax.swing.JButton;\r
+import javax.swing.JLabel;\r
+import javax.swing.JPanel;\r
+import javax.swing.JScrollPane;\r
+import javax.swing.JTable;\r
+import javax.swing.JTextField;\r
+import javax.swing.ListSelectionModel;\r
+import javax.swing.event.ListSelectionEvent;\r
+import javax.swing.event.ListSelectionListener;\r
+import javax.swing.event.TableModelEvent;\r
+import javax.swing.event.TableModelListener;\r
+import javax.swing.table.TableModel;\r
+\r
+import org.simantics.utils.strings.format.MetricsFormat;\r
+import org.simantics.utils.strings.format.MetricsFormatList;\r
+import org.simantics.utils.strings.format.MetricsFormatListListener;\r
+\r
+public class MetricsEditor extends JPanel {\r
+\r
+    private static final long serialVersionUID = 3781280603509654789L;\r
+    private JTextField valueTestField;\r
+    private JTextField valuePresentationField;\r
+    private JTextField formatNameField;\r
+    private JTextField formatPatternField;\r
+    //         private JTextField formatScaleField;\r
+\r
+    private MetricsFormat format;\r
+    private MetricsFormatList formatList;\r
+    private double formatValue;\r
+\r
+    private JTable formatTable;\r
+    private MetricsTableModel tableModel;\r
+\r
+    public MetricsEditor() {\r
+        super();\r
+        setLayout(new BorderLayout());\r
+\r
+        JPanel panel = new JPanel();\r
+        panel.setLayout(new BorderLayout());\r
+\r
+        valueTestField = new JTextField();\r
+        valuePresentationField = new JTextField();\r
+        formatNameField = new JTextField();\r
+        formatPatternField = new JTextField();\r
+        //                     formatScaleField = new JTextField();\r
+\r
+        JPanel labelPanel = new JPanel(new GridLayout(0,1));\r
+        JPanel fieldPanel = new JPanel(new GridLayout(0,1));\r
+        panel.add(labelPanel,BorderLayout.WEST);\r
+        panel.add(fieldPanel,BorderLayout.CENTER);\r
+\r
+\r
+        labelPanel.add(new JLabel("Value test:"));\r
+        fieldPanel.add(valueTestField);\r
+        labelPanel.add(new JLabel("Value presentation:"));\r
+        fieldPanel.add(valuePresentationField);\r
+        labelPanel.add(new JLabel("Format name:"));\r
+        fieldPanel.add(formatNameField);\r
+        labelPanel.add(new JLabel("Format pattern:"));\r
+        fieldPanel.add(formatPatternField);\r
+\r
+        add(panel,BorderLayout.NORTH);\r
+        //                     add(new JLabel("Format scale:"));\r
+        //                     add(formatScaleField);\r
+\r
+        JPanel listPanel = new JPanel();\r
+        add(listPanel,BorderLayout.CENTER);\r
+        JTable table = createFormatTable();\r
+        JScrollPane scrollPane = new JScrollPane(table);\r
+        table.setFillsViewportHeight(true);\r
+\r
+        listPanel.add(scrollPane);\r
+\r
+        JPanel controlPanel = new JPanel();\r
+        add(controlPanel,BorderLayout.SOUTH);\r
+        controlPanel.setLayout(new FlowLayout(FlowLayout.LEFT));\r
+\r
+        JButton addTemplateButton = new JButton("Add Format Template");\r
+        addTemplateButton.setToolTipText("Add current format to templates");\r
+        controlPanel.add(addTemplateButton);\r
+        addTemplateButton.addActionListener(new ActionListener() {\r
+\r
+            @Override\r
+            public void actionPerformed(ActionEvent arg0) {\r
+                addTemplate();\r
+            }\r
+        });\r
+\r
+        JButton removeTemplateButton = new JButton("Remove Template");\r
+        removeTemplateButton.setToolTipText("Remove selected template");\r
+        controlPanel.add(removeTemplateButton);\r
+        removeTemplateButton.addActionListener(new ActionListener() {\r
+\r
+            @Override\r
+            public void actionPerformed(ActionEvent arg0) {\r
+                removeTemplate();\r
+            }\r
+        });\r
+\r
+        JButton updateTemplateButton = new JButton("Update Template");\r
+        updateTemplateButton.setToolTipText("Update selected template using current format");\r
+        controlPanel.add(updateTemplateButton);\r
+        updateTemplateButton.addActionListener(new ActionListener() {\r
+\r
+            @Override\r
+            public void actionPerformed(ActionEvent arg0) {\r
+                updateTemplate();\r
+            }\r
+        });\r
+\r
+        JButton newFormatButton = new JButton("New Format");\r
+        newFormatButton.setToolTipText("Create a new Format");\r
+        controlPanel.add(newFormatButton);\r
+        newFormatButton.addActionListener(new ActionListener() {\r
+\r
+            @Override\r
+            public void actionPerformed(ActionEvent arg0) {\r
+                newFormat();\r
+            }\r
+        });\r
+\r
+\r
+        valuePresentationField.setEditable(false);\r
+\r
+        ActionListener l = new ActionListener() {\r
+\r
+            @Override\r
+            public void actionPerformed(ActionEvent e) {\r
+                updateValues();\r
+\r
+            }\r
+        };\r
+\r
+        valueTestField.addActionListener(l);\r
+        formatPatternField.addActionListener(l);\r
+\r
+        valueTestField.setText("123456.789");\r
+        formatPatternField.setText("%s");\r
+\r
+        updateValues();\r
+    }\r
+\r
+    private void addTemplate() {\r
+        MetricsFormat format = createMetricsFormatFromFields();\r
+\r
+        try {\r
+            formatList.addFormat(format);\r
+        } catch (Exception e) {\r
+            // TODO : show error\r
+        }\r
+    }\r
+\r
+    private void updateTemplate() {\r
+        int index = formatTable.getSelectedRow();\r
+        if (index == -1)\r
+            return; // TODO : show error, or even better, disable the button\r
+        MetricsFormat format = createMetricsFormatFromFields();\r
+        try {\r
+            formatList.replaceFormatWith(formatList.getFormats()[index], format);\r
+        } catch (Exception e) {\r
+            // TODO : show error\r
+        }\r
+    }\r
+\r
+    private void removeTemplate() {\r
+        int index = formatTable.getSelectedRow();\r
+        if (index == -1)\r
+            return; // TODO : show error, or even better, disable the button\r
+        try {\r
+            formatList.removeFormat(formatList.getFormats()[index]);\r
+        } catch (Exception e) {\r
+            // TODO : show error\r
+        }\r
+    }\r
+\r
+    public MetricsFormat getFormat() {\r
+        return format;\r
+    }\r
+\r
+    private void newFormat() {\r
+        format = null;\r
+        formatNameField.setText("New format");\r
+        formatPatternField.setText("%s");\r
+        updateValues();\r
+    }\r
+\r
+    private JTable createFormatTable() {\r
+        formatList = MetricsFormatList.getList();\r
+        tableModel = new MetricsTableModel(formatList);\r
+\r
+        formatTable = new JTable(tableModel);\r
+        formatTable.doLayout();\r
+\r
+        formatTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
+\r
+        formatTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {\r
+\r
+            @Override\r
+            public void valueChanged(ListSelectionEvent e) {\r
+                if (e.getValueIsAdjusting())\r
+                    return;\r
+                int index = formatTable.getSelectionModel().getMinSelectionIndex();\r
+                if (index == -1)\r
+                    return;\r
+                setMetricsFormat(formatList.getFormats()[index]);\r
+\r
+            }\r
+        });\r
+        return formatTable;\r
+    }\r
+\r
+    private void updateValues() {\r
+        String value = valueTestField.getText();\r
+        if (value == null || value.length() == 0)\r
+            return;\r
+        Double d = null;\r
+        try {\r
+            d = Double.parseDouble(value);\r
+        } catch (NumberFormatException e) {\r
+            valuePresentationField.setText("Value test is not a number");\r
+            return;\r
+        }\r
+        formatValue = d;\r
+\r
+        MetricsFormat format = null;\r
+        try {\r
+            format = createMetricsFormatFromFields();\r
+        } catch (Exception e) {\r
+            valuePresentationField.setText("Format pattern is not correct " + e.getMessage());\r
+        }\r
+        if (format == null)\r
+            return; // TODO : show error\r
+        setMetricsFormat(format);\r
+        tableModel.setFormatValue(formatValue);\r
+    }\r
+\r
+    private MetricsFormat createMetricsFormatFromFields() {\r
+        if (formatPatternField.getText().length() == 0)\r
+            return null;\r
+        return new MetricsFormat(formatPatternField.getText(),1.0,formatNameField.getText());\r
+    }\r
+\r
+    public void setMetricsFormat(MetricsFormat format) {\r
+        this.format = format;\r
+        try {\r
+            valuePresentationField.setText(format.formatValue(formatValue));\r
+        } catch (Exception e) {\r
+            valuePresentationField.setText("Format error: "  + e.getMessage());\r
+        }\r
+        formatNameField.setText(format.getName());\r
+        formatPatternField.setText(format.getPattern());\r
+    }\r
+\r
+    public void dispose() {\r
+        tableModel.dispose();\r
+    }\r
+\r
+    private class MetricsTableModel implements TableModel, MetricsFormatListListener {\r
+\r
+        private String[] columnNames = {"Name","Format","Value"};\r
+        private MetricsFormatList formatList;\r
+        private double formatValue = 0;\r
+\r
+        public MetricsTableModel(MetricsFormatList formatList) {\r
+            this.formatList = formatList;\r
+            this.formatList.addListener(this);\r
+        }\r
+\r
+        public void setFormatValue(double value) {\r
+            this.formatValue = value;\r
+            fireChanged();\r
+        }\r
+\r
+        @Override\r
+        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {\r
+            // do nothing\r
+        }\r
+\r
+        @Override\r
+        public boolean isCellEditable(int rowIndex, int columnIndex) {\r
+            return false;\r
+        }\r
+\r
+        @Override\r
+        public Object getValueAt(int rowIndex, int columnIndex) {\r
+            MetricsFormat format = formatList.getFormats()[rowIndex];\r
+            if (columnIndex == 0) {\r
+                return format.getName();\r
+            } else if (columnIndex == 1) {\r
+                return format.getPattern();\r
+            } else if (columnIndex == 2) {\r
+                return format.formatValue(formatValue);\r
+            }\r
+            throw new IndexOutOfBoundsException("There is no column " + columnIndex);\r
+        }\r
+\r
+        @Override\r
+        public int getRowCount() {\r
+            return formatList.getFormats().length;\r
+        }\r
+\r
+        @Override\r
+        public String getColumnName(int columnIndex) {\r
+            return columnNames[columnIndex];\r
+        }\r
+\r
+        @Override\r
+        public int getColumnCount() {\r
+            return columnNames.length;\r
+        }\r
+\r
+        @Override\r
+        public Class<?> getColumnClass(int columnIndex) {\r
+            return String.class;\r
+        }\r
+\r
+        private List<TableModelListener> listeners = new ArrayList<TableModelListener>();\r
+\r
+        @Override\r
+        public void addTableModelListener(TableModelListener l) {\r
+            listeners.add(l);\r
+        }\r
+\r
+        @Override\r
+        public void removeTableModelListener(TableModelListener l) {\r
+            listeners.remove(l);\r
+        }\r
+\r
+        @Override\r
+        public void onListChanged(MetricsFormatList sender) {\r
+            fireChanged();\r
+        }\r
+\r
+        private void fireChanged() {\r
+            for (TableModelListener l : listeners) {\r
+                l.tableChanged(new TableModelEvent(this));\r
+            }\r
+        }\r
+\r
+        public void dispose() {\r
+            formatList.removeListener(this);\r
+        }\r
+    }\r
+}\r