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