/* * Created on Nov 18, 2005 by mschilli */ package alma.acs.commandcenter.gui; import java.awt.BorderLayout; import java.awt.Dimension; import java.util.Hashtable; import java.util.Map; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.border.Border; import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder; import alma.acs.commandcenter.util.MapTableModel; /** * Allows to edit the variables. */ class EditVariablesPanel extends JPanel { // ================================================== // Not-so-generic Part: puts gui and logic together protected Table t1; protected Table t2; protected CommandCenterGui controller; public EditVariablesPanel(CommandCenterGui controller) { super(new BorderLayout()); t1 = new Table(); t2 = new Table(); JPanel p1 = new JPanel(); p1.setLayout(new BoxLayout(p1, BoxLayout.Y_AXIS)); JScrollPane s1 = new JScrollPane(t1); JScrollPane s2 = new JScrollPane(t2); Border indent = new EmptyBorder(5,5,5,5); s1.setBorder(new CompoundBorder(indent, s1.getBorder())); s2.setBorder(new CompoundBorder(indent, s2.getBorder())); p1.add(Box.createVerticalStrut(10)); p1.add(new JLabel("Presumptively used in current project")); p1.add(Box.createVerticalStrut(5)); p1.add(s1); p1.add(new JLabel("Previously used / Predefined")); p1.add(Box.createVerticalStrut(5)); p1.add(s2); p1.add(Box.createVerticalStrut(10)); this.add(p1, BorderLayout.CENTER); String tooltip = "To edit an entry, double-click its 'Value'"; t1.setToolTipText(tooltip); t2.setToolTipText(tooltip); Dimension size = new Dimension(450, 120); t1.setPreferredScrollableViewportSize(size); t2.setPreferredScrollableViewportSize(size); } protected Map<String,Object> writeTo; protected Map<String,Object> inProject; protected Map<String,Object> inSession; public void preShow(Map<String,Object> writeTo, Map<String,Object> inProject, Map<String,Object> inSession) { this.writeTo = writeTo; this.inProject = inProject; this.inSession = inSession; t1.readModel(inProject); t2.readModel(inSession); } public void afterOk() { t1.writeModel(writeTo); t2.writeModel(writeTo); } // ================================================== // Generic Table Part (might factor out to a generic class) protected class Table extends JTable { protected Table() { super(new MapTableModel("Name", "Value")); setShowVerticalLines(false); } protected MapTableModel model() { return (MapTableModel)getModel(); } public void readModel (Map<String,Object> m) { model().setData(m); } public void writeModel(Map<String,Object> m) { MapTableModel tableM = model(); int nRows = tableM.getRowCount(); for (int row=0; row < nRows ; row++) { String key = tableM.getValueAt(row, 0).toString(); Object value = tableM.getValueAt(row, 1); if (m instanceof Hashtable<?,?> && value == null) { // skip } else { m.put(key, value); } } } } }