Author: tchemit Date: 2008-01-18 01:56:04 +0000 (Fri, 18 Jan 2008) New Revision: 185 Added: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/JConfigUI.jaxx Log: l'ui de modification de config Added: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/JConfigUI.jaxx =================================================================== --- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/JConfigUI.jaxx (rev 0) +++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/JConfigUI.jaxx 2008-01-18 01:56:04 UTC (rev 185) @@ -0,0 +1,149 @@ +<JDialog title='{_("simexplorer.config.title")}' modal='true' defaultCloseOperation='DISPOSE_ON_CLOSE'> + <script> + import static org.codelutin.i18n.I18n._; + import org.codelutin.option.ui.ConfigTableModel; + import org.codelutin.option.ui.ConfigTableRenderer; + import org.codelutin.option.ui.ConfigTableEditor; + import org.codelutin.option.Config; + + private static JConfigUI instance; + + public static JConfigUI getInstance() { + if (instance == null) { + instance = new JConfigUI(); + } + return instance; + } + + public static void reloadUI() { + instance=null; + } + + public static void showUI(Config config) { + showUI(config,null); + } + + public static void showTechnicalUI(Config config) { + showUI(config, ConfigTableModel.TypeModel.tech); + } + + public static void showUI(Config config,ConfigTableModel.TypeModel type) { + getInstance().setConfig(config,type); + getInstance().setVisible(true); + } + + protected Config config; + protected ConfigTableModel model; + + private AbstractAction OK_ACTION; + private AbstractAction RESET_ACTION; + private AbstractAction CANCEL_ACTION; + private TableModelListener TABLE_MODEL_LISTENER; + + @Override + public void dispose() { + config=null; + if (model!=null) { + model.removeTableModelListener(TABLE_MODEL_LISTENER); + model = null; + } + super.dispose(); + } + + protected Config getConfig() { + return config; + } + + protected ConfigTableModel getModel() { + return model; + } + + protected boolean isEmpty() { + return model==null || config==null || config.getUniverse().isEmpty(); + } + + protected boolean isOkEnabled() { + return !isEmpty() && model.isValid(); + } + + protected boolean isResetEnabled() { + return !isEmpty() && model.isModified(); + } + + protected void setConfig(Config config, ConfigTableModel.TypeModel type) { + this.config = config; + model = new ConfigTableModel(config,type); + model.addTableModelListener(TABLE_MODEL_LISTENER); + main.setModel(model); + main.setDefaultRenderer(Object.class, new ConfigTableRenderer(model)); + main.getColumn(main.getColumnName(1)).setCellEditor(new ConfigTableEditor(getModel())); + boolean action = type != ConfigTableModel.TypeModel.tech; + butons.setVisible(action); + butons2.setVisible(!action); + model.fireTableDataChanged(); + pack(); + } + + OK_ACTION= new AbstractAction("OK") { + private static final long serialVersionUID = -5259317388353753566L; + public void actionPerformed(ActionEvent e) { + if (!isEmpty() && getModel().isModified()) { + getModel().transfertModified(getConfig()); + getConfig().saveSafely(); + } + dispose(); + } + }; + RESET_ACTION= new AbstractAction("Reset") { + private static final long serialVersionUID = 3780134639606303504L; + public void actionPerformed(ActionEvent e) { + getModel().reset(); + } + }; + CANCEL_ACTION = new AbstractAction("Cancel") { + private static final long serialVersionUID = -3391009906183633110L; + public void actionPerformed(ActionEvent e) { + dispose(); + } + }; + TABLE_MODEL_LISTENER = new TableModelListener() { + public void tableChanged(TableModelEvent e) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + processDataBinding("ok.enabled"); + processDataBinding("reset.enabled"); + } + }); + } + }; + JRootPane rootPane = getRootPane(); + rootPane.setDefaultButton(ok); + rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "cancel"); + rootPane.getActionMap().put("cancel", CANCEL_ACTION); + </script> + <Table weightx="1"> + <row> + <cell weighty="1" weightx='1' fill='both'> + <JScrollPane id='scroll' verticalScrollBarPolicy='20' horizontalScrollBarPolicy='31' > + <JTable id="main" rowSelectionAllowed="false" autoResizeMode='auto_resize_last_column'/> + </JScrollPane> + </cell> + </row> + <row fill='horizontal'> + <cell> + <JPanel id='butons' visible='false' layout='{new GridLayout(0, 3, 2, 2)}'> + <JButton id='ok' text='{_("simexplorer.common.ok")}' enabled='{isOkEnabled()}' action='{OK_ACTION}'/> + <JButton id='reset' text='{_("simexplorer.common.reset")}' enabled='{isResetEnabled()}' action='{RESET_ACTION}'/> + <JButton id='cancel' text='{_("simexplorer.common.cancel")}' action='{CANCEL_ACTION}'/> + </JPanel> + </cell> + </row> + <row fill='horizontal'> + <cell> + <JPanel id='butons2' visible='false' layout='{new GridLayout(0, 1, 2, 2)}'> + <JButton text='{_("simexplorer.common.ok")}' onActionPerformed='dispose();'/> + </JPanel> + </cell> + </row> + </Table> +</JDialog>