r675 - in trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing: content/cruise content/home content/operation content/operation/catches content/operation/catches/benthos content/operation/catches/species content/program content/protocol util
Author: tchemit Date: 2013-03-24 15:58:00 +0100 (Sun, 24 Mar 2013) New Revision: 675 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/675 Log: fixes #2171: [TRAIT] champ heure minute comportement ?\195?\160 corriger refs #2186: [CAMPAGNE] Navire - remplacer la double liste par une simple liste (am?\195?\169lioration layout) Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.css 2013-03-24 13:33:40 UTC (rev 674) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.css 2013-03-24 14:58:00 UTC (rev 675) @@ -39,8 +39,17 @@ showPopupButton: {handler.getConfig().isShowNumberEditorButton()}; bean: {model}; showReset: true; + _selectOnFocus: {true}; } +JXDatePicker { + _selectOnFocus: {true}; +} + +JTextField { + _selectOnFocus: {true}; +} + #editCruiseTopPanel { _help: {"tutti.editCruise.help"}; } @@ -181,17 +190,13 @@ buttonGroup: "filterVesselType"; } -#vesselLabel { - text: "tutti.editCruise.field.vessel"; - labelFor: {vesselComboBox}; - toolTipText: "tutti.editCruise.field.vessel.tip"; - _help: {"tutti.editCruise.field.vessel.help"}; -} - #vesselComboBox { + border: {BorderFactory.createTitledBorder(_("tutti.editCruise.field.vessel"))}; property: vessel; selectedItem: {model.getVessel()}; + toolTipText: "tutti.editCruise.field.vessel.tip"; _validatorLabel : {_("tutti.editCruise.field.vessel")}; + _help: {"tutti.editCruise.field.vessel.help"}; } #gearList { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.jaxx 2013-03-24 13:33:40 UTC (rev 674) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.jaxx 2013-03-24 14:58:00 UTC (rev 675) @@ -191,13 +191,17 @@ </cell> </row> <row weighty='0.3'> - <cell> + <!--cell> <JLabel id='vesselLabel'/> + </cell--> + <cell weightx='0.3' columns="3"> + <JPanel layout='{new BorderLayout()}'> + <BeanFilterableComboBox id='vesselComboBox' constructorParams='this' + genericType='Vessel' + constraints='BorderLayout.NORTH'/> + </JPanel> + </cell> - <cell weightx='0.3' columns="2"> - <BeanFilterableComboBox id='vesselComboBox' constructorParams='this' - genericType='Vessel'/> - </cell> <cell columns="3"> <BeanDoubleList id='gearList' genericType='Gear'/> </cell> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java 2013-03-24 13:33:40 UTC (rev 674) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java 2013-03-24 14:58:00 UTC (rev 675) @@ -223,6 +223,7 @@ getValidator().setBean(model); ui.applyDataBinding(SelectCruiseUI.BINDING_EDIT_PROGRAM_BUTTON_ENABLED); + ui.applyDataBinding(SelectCruiseUI.BINDING_NEW_CRUISE_BUTTON_ENABLED); ui.applyDataBinding(SelectCruiseUI.BINDING_EDIT_CRUISE_BUTTON_ENABLED); ui.applyDataBinding(SelectCruiseUI.BINDING_EDIT_CATCHES_BUTTON_ENABLED); ui.applyDataBinding(SelectCruiseUI.BINDING_VALIDATE_CATCHES_BUTTON_ENABLED); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-03-24 13:33:40 UTC (rev 674) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-03-24 14:58:00 UTC (rev 675) @@ -48,15 +48,22 @@ showPopupButton: {handler.getConfig().isShowNumberEditorButton()}; bean: {model}; showReset: true; + _selectOnFocus: {true}; } SimpleTimeEditor { bean: {model}; + _selectOnFocus: {true}; } +JXDatePicker { + _selectOnFocus: {true}; +} + #editFishingOperationTopPanel { _help: {"tutti.editFishingOperation.help"}; } + #traitGeneralTabPaneToolBar { floatable: false; opaque: false; @@ -83,6 +90,7 @@ #stationNumberField { text: {model.getStationNumber()}; _validatorLabel : {_("tutti.editFishingOperation.field.stationNumber")}; + _selectOnFocus: {true}; } #fishingOperationNumberLabel { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx 2013-03-24 13:33:40 UTC (rev 674) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx 2013-03-24 14:58:00 UTC (rev 675) @@ -24,9 +24,7 @@ <JPanel id='editFishingOperationTopPanel' layout='{new BorderLayout()}' decorator='help' implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<EditFishingOperationUIModel, EditFishingOperationUIHandler>'> - <import> - fr.ifremer.tutti.persistence.entities.data.FishingOperation fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation fr.ifremer.tutti.persistence.entities.referential.Gear fr.ifremer.tutti.persistence.entities.referential.Person @@ -36,29 +34,19 @@ fr.ifremer.tutti.ui.swing.content.operation.fishing.GearUseFeatureTabUI fr.ifremer.tutti.ui.swing.TuttiHelpBroker - fr.ifremer.tutti.ui.swing.util.TuttiUIUtil fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachment fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType fr.ifremer.tutti.ui.swing.util.editor.SimpleTimeEditor jaxx.runtime.swing.editor.bean.BeanFilterableComboBox - jaxx.runtime.swing.editor.bean.BeanListHeader jaxx.runtime.swing.editor.bean.BeanDoubleList jaxx.runtime.swing.editor.NumberEditor - jaxx.runtime.swing.editor.TimeEditor jaxx.runtime.swing.CardLayout2Ext org.jdesktop.swingx.JXDatePicker - org.jdesktop.swingx.JXTable org.jdesktop.swingx.JXTitledPanel - java.awt.Dimension - - javax.swing.DefaultListModel - javax.swing.ListSelectionModel - static org.nuiton.i18n.I18n._ - static jaxx.runtime.SwingUtil.getStringValue </import> <script><![CDATA[ Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css 2013-03-24 13:33:40 UTC (rev 674) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css 2013-03-24 14:58:00 UTC (rev 675) @@ -29,6 +29,7 @@ showReset: true; useFloat: true; numberPattern: {DECIMAL3_PATTERN}; + _selectOnFocus: {true}; } TuttiComputedOrNotDataEditor { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css 2013-03-24 13:33:40 UTC (rev 674) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css 2013-03-24 14:58:00 UTC (rev 675) @@ -29,6 +29,7 @@ showReset: true; useFloat: true; numberPattern: {DECIMAL3_PATTERN}; + _selectOnFocus: {true}; } TuttiComputedOrNotDataEditor { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2013-03-24 13:33:40 UTC (rev 674) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2013-03-24 14:58:00 UTC (rev 675) @@ -29,6 +29,7 @@ showReset: true; useFloat: true; numberPattern: {DECIMAL3_PATTERN}; + _selectOnFocus: {true}; } TuttiComputedOrNotDataEditor { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUI.css 2013-03-24 13:33:40 UTC (rev 674) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUI.css 2013-03-24 14:58:00 UTC (rev 675) @@ -28,6 +28,10 @@ bean: {model}; } +JTextField { + _selectOnFocus: {true}; +} + #editProgramTopPanel { _help: {"tutti.editProgram.help"}; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css 2013-03-24 13:33:40 UTC (rev 674) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css 2013-03-24 14:58:00 UTC (rev 675) @@ -33,6 +33,10 @@ bean: {model}; } +JTextField { + _selectOnFocus: {true}; +} + #editProtocolTopPanel { _help: {"tutti.editProtocol.help"}; } @@ -50,7 +54,7 @@ #nameField { text: {model.getName()}; - _validatorLabel : {_("tutti.editProtocol.field.protocol.name")}; + _validatorLabel: {_("tutti.editProtocol.field.protocol.name")}; } #commentPane { @@ -61,7 +65,7 @@ #commentField { text: {getStringValue(model.getComment())}; - _validatorLabel : {_("tutti.editProtocol.field.comment")}; + _validatorLabel: {_("tutti.editProtocol.field.comment")}; } #saveWarningContainer { @@ -73,7 +77,48 @@ actionIcon: warning; border: {new javax.swing.border.EmptyBorder(5, 10, 5, 10)}; } - + +#speciesComboBox { + enabled: {!speciesComboBox.isEmpty()}; + toolTipText: "tutti.editProtocol.field.species.tip"; + _help: {"tutti.editProtocol.field.species.help"}; +} + +#tablePopup { + label: "tutti.editProtocol.title.batchActions"; +} + +#speciesTable { + selectionMode: {ListSelectionModel.SINGLE_SELECTION}; + selectionBackground: {null}; + selectionForeground: {Color.BLACK}; + sortable: false; + _help: {"tutti.editProtocol.field.species.help"}; +} + +#caracteristicPane { + tabPlacement: {JTabbedPane.LEFT}; + _help: {"tutti.editProtocol.pane.caracteristic.help"}; +} + +#gearUseFeatureList { + property: gearUseFeaturePmfm; + beanType: {Caracteristic.class}; + _help: {"tutti.editProtocol.field.gearUseFeature.help"}; +} + +#vesselUseFeatureList { + property: vesselUseFeaturePmfm; + beanType: {Caracteristic.class}; + _help: {"tutti.editProtocol.field.vesselUseFeature.help"}; +} + +#lengthClassesList { + property: lengthClassesPmfm; + beanType: {Caracteristic.class}; + _help: {"tutti.editProtocol.field.lengthClasses.help"}; +} + #saveButton { actionIcon: save; text: "tutti.editProtocol.action.saveProtocol"; @@ -93,12 +138,6 @@ _help: {"tutti.editProtocol.action.closeEditProtocol.help"}; } -#speciesComboBox { - enabled: {!speciesComboBox.isEmpty()}; - toolTipText: "tutti.editProtocol.field.species.tip"; - _help: {"tutti.editProtocol.field.species.help"}; -} - #selectOtherSpeciesButton { text: "tutti.editProtocol.action.selectOtherSpecies"; toolTipText: "tutti.editProtocol.action.selectOtherSpecies.tip"; @@ -116,10 +155,6 @@ _help: {"tutti.editProtocol.action.addSpeciesProtocol.help"}; } -#tablePopup { - label: "tutti.editProtocol.title.batchActions"; -} - #removeSpeciesProtocolButton { actionIcon: batch-delete; text: "tutti.editProtocol.action.removeSpeciesProtocol"; @@ -130,19 +165,6 @@ _help: {"tutti.editProtocol.action.removeSpeciesProtocol.help"}; } -#speciesTable { - selectionMode: {ListSelectionModel.SINGLE_SELECTION}; - selectionBackground: {null}; - selectionForeground: {Color.BLACK}; - sortable: false; - _help: {"tutti.editProtocol.field.species.help"}; -} - -#caracteristicPane { - tabPlacement: {JTabbedPane.LEFT}; - _help: {"tutti.editProtocol.pane.caracteristic.help"}; -} - #importSpeciesButton { actionIcon: import; text: "tutti.editProtocol.action.importProtocolSpecies"; @@ -188,21 +210,3 @@ _help: {"tutti.editProtocol.action.exportProtocolAllCaracteristic.help"}; } -#gearUseFeatureList { - property: gearUseFeaturePmfm; - beanType: {Caracteristic.class}; - _help: {"tutti.editProtocol.field.gearUseFeature.help"}; -} - -#vesselUseFeatureList { - property: vesselUseFeaturePmfm; - beanType: {Caracteristic.class}; - _help: {"tutti.editProtocol.field.vesselUseFeature.help"}; -} - -#lengthClassesList { - property: lengthClassesPmfm; - beanType: {Caracteristic.class}; - _help: {"tutti.editProtocol.field.lengthClasses.help"}; -} - Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-03-24 13:33:40 UTC (rev 674) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-03-24 14:58:00 UTC (rev 675) @@ -35,7 +35,6 @@ import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; import fr.ifremer.tutti.ui.swing.content.MainUI; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; -import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import fr.ifremer.tutti.ui.swing.util.action.TuttiActionHelper; import fr.ifremer.tutti.ui.swing.util.action.TuttiActionUI; import fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachment; @@ -64,10 +63,12 @@ import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JRootPane; +import javax.swing.JSpinner; import javax.swing.JTextField; import javax.swing.KeyStroke; import javax.swing.ListCellRenderer; import javax.swing.ListSelectionModel; +import javax.swing.SwingUtilities; import javax.swing.event.ListSelectionEvent; import javax.swing.text.JTextComponent; import java.awt.Component; @@ -352,8 +353,9 @@ } return result; } + //------------------------------------------------------------------------// - //-- Internal methods --// + //-- Init methods --// //------------------------------------------------------------------------// protected void initUI(TuttiUI ui) { @@ -361,175 +363,74 @@ for (Map.Entry<String, Object> entry : ui.get$objectMap().entrySet()) { Object component = entry.getValue(); if (component instanceof NumberEditor) { + initNumberEditor((NumberEditor) component); + } else if (component instanceof JXDatePicker) { - } else if (component instanceof JXDatePicker) { initDatePicker((JXDatePicker) component); + } else if (component instanceof SimpleTimeEditor) { - } else if (component instanceof SimpleTimeEditor) { initTimeEditor((SimpleTimeEditor) component); + } else if (component instanceof ButtonAttachment) { - } else if (component instanceof ButtonAttachment) { initButtonAttachment((ButtonAttachment) component); - } else if (component instanceof JLabel) { - JLabel jLabel = (JLabel) component; - Boolean strongStyle = (Boolean) jLabel.getClientProperty("strongStyle"); - Boolean italicStyle = (Boolean) jLabel.getClientProperty("italicStyle"); - boolean addHtml = strongStyle != null && strongStyle || italicStyle != null && italicStyle; - if (addHtml) { - String text = jLabel.getText(); - if (strongStyle != null && strongStyle) { - text = "<strong>" + text + "</strong>"; - } - if (italicStyle != null && italicStyle) { - text = "<em>" + text + "</em>"; - } - jLabel.setText("<html>" + text + "</html>"); - } + initLabel((JLabel) component); } else if (component instanceof JTextField) { - JTextField jTextField = (JTextField) component; - Boolean computed = (Boolean) jTextField.getClientProperty("computed"); - if (computed != null && computed) { - Font font = jTextField.getFont().deriveFont(Font.ITALIC); - jTextField.setFont(font); - jTextField.setEditable(!computed); - jTextField.setEnabled(!computed); - jTextField.setDisabledTextColor(getConfig().getColorComputedWeights()); - } + initTextField((JTextField) component); } else if (component instanceof AbstractButton) { - AbstractButton abstractButton = (AbstractButton) component; - Class<AbstractTuttiAction> actionName = (Class<AbstractTuttiAction>) abstractButton.getClientProperty("tuttiAction"); - if (actionName != null) { - initAction(abstractButton, actionName); - } + + initButton((AbstractButton) component); } } } - protected void initButtonAttachment(ButtonAttachment component) { + protected void initTextField(JTextField jTextField) { + Boolean computed = (Boolean) jTextField.getClientProperty("computed"); + if (computed != null && computed) { + Font font = jTextField.getFont().deriveFont(Font.ITALIC); + jTextField.setFont(font); + jTextField.setEditable(!computed); + jTextField.setEnabled(!computed); + jTextField.setDisabledTextColor(getConfig().getColorComputedWeights()); + } + if (isAutoSelectOnFocus(jTextField)) { + addAutoSelectOnFocus(jTextField); + } + } - component.init(); + protected void initLabel(JLabel jLabel) { + Boolean strongStyle = (Boolean) jLabel.getClientProperty("strongStyle"); + Boolean italicStyle = (Boolean) jLabel.getClientProperty("italicStyle"); + boolean addHtml = strongStyle != null && strongStyle || italicStyle != null && italicStyle; + if (addHtml) { + String text = jLabel.getText(); + if (strongStyle != null && strongStyle) { + text = "<strong>" + text + "</strong>"; + } + if (italicStyle != null && italicStyle) { + text = "<em>" + text + "</em>"; + } + jLabel.setText("<html>" + text + "</html>"); + } } - protected <A extends AbstractTuttiAction> void initAction(AbstractButton abstractButton, - Class<A> actionName) { + protected void initButtonAttachment(ButtonAttachment component) { - Action action = TuttiActionHelper.createUIAction(this, abstractButton, actionName); - abstractButton.setAction(action); + component.init(); } -// public <A extends AbstractTuttiAction> TuttiUIAction<A> createUIAction(AbstractButton abstractButton, -// Class<A> actionName) { -// try { -// -// // create logic action -// A logicAction = createLogicAction(actionName); -// -// // create ui action -// TuttiUIAction<A> result = new TuttiUIAction<A>(abstractButton, -// logicAction); -// return result; -// } catch (Exception e) { -// throw new TuttiTechnicalException( -// "Could not instanciate action " + actionName, e); -// } -// -// } + protected void initButton(AbstractButton abstractButton) { -// public <A extends AbstractTuttiAction> A createLogicAction(Class<A> actionName) { -// try { -// -// AbstractTuttiUIHandler handler = this; -// -// if (AbstractMainUITuttiAction.class.isAssignableFrom(actionName) && -// getContext().getMainUI() != null) { -// handler = getContext().getMainUI().getHandler(); -// } -// -// // create action -// A result = ConstructorUtils.invokeConstructor(actionName, handler); -// return result; -// } catch (Exception e) { -// throw new RuntimeException( -// "Could not instanciate action " + actionName, e); -// } -// } - -// public <A extends AbstractTuttiAction> A getLogicAction(AbstractButton b) { -// Action action = b.getAction(); -// Preconditions.checkNotNull(action); -// Preconditions.checkState(action instanceof TuttiUIAction); -// return ((TuttiUIAction<A>) action).getLogicAction(); -// } - -// protected void doAction(AbstractButton button, ActionEvent event) { -// button.getAction().actionPerformed(event); -// } - - protected boolean quitScreen(boolean modelIsValid, - boolean modelIsModify, - String askGiveUpMessage, - String askSaveMessage, - Action saveAction) { - boolean result; - - if (!modelIsValid) { - - // model is not valid - // ask user to qui or not - result = askCancelEditBeforeLeaving(askGiveUpMessage); - - } else if (modelIsModify) { - - // something is modify ask user what to do - int answer = askSaveBeforeLeaving(askSaveMessage); - switch (answer) { - case JOptionPane.YES_OPTION: - - // ok save - saveAction.actionPerformed(null); - result = true; - break; - case JOptionPane.NO_OPTION: - - // do not save but can still quit the screen (so nothing to do) - result = true; - break; - default: - // do not save and stay here (so nothing to do) - result = false; - - } - } else { - - // model is valid and not modify, can safely quit screen - result = true; + Class actionName = (Class) abstractButton.getClientProperty("tuttiAction"); + if (actionName != null) { + Action action = TuttiActionHelper.createUIAction(this, abstractButton, actionName); + abstractButton.setAction(action); } - return result; } - protected void registerValidators(SwingValidator... validators) { - MainUI main = context.getMainUI(); - Preconditions.checkNotNull( - main, "No mainUI registred in application context"); - MainUIHandler handler = main.getHandler(); - handler.clearValidators(); - for (SwingValidator validator : validators) { - handler.registerValidator(validator); - } - } - - public void clearValidators() { - MainUI main = context.getMainUI(); - Preconditions.checkNotNull( - main, "No mainUI registred in application context"); - MainUIHandler handler = main.getHandler(); - handler.clearValidators(); - } - /** * Prépare un component de choix d'entités pour un type d'entité donné et * pour un service de persistance donné. @@ -626,6 +527,11 @@ editor.setModel(null); editor.setModel(model); } + + if (isAutoSelectOnFocus(editor)) { + + addAutoSelectOnFocus(editor.getTextField()); + } } protected void initTimeEditor(SimpleTimeEditor editor) { @@ -634,6 +540,11 @@ " for property " + editor.getModel().getProperty()); } editor.init(); + + if (isAutoSelectOnFocus(editor)) { + addAutoSelectOnFocus(((JSpinner.DefaultEditor) editor.getHour().getEditor()).getTextField()); + addAutoSelectOnFocus(((JSpinner.DefaultEditor) editor.getMinute().getEditor()).getTextField()); + } } protected void initDatePicker(final JXDatePicker picker) { @@ -656,10 +567,100 @@ } } } + }); + if (isAutoSelectOnFocus(picker)) { + addAutoSelectOnFocus(picker.getEditor()); + } + } + + protected boolean isAutoSelectOnFocus(JComponent comp) { + Object selectOnFocus = comp.getClientProperty("selectOnFocus"); + return selectOnFocus != null && Boolean.valueOf(selectOnFocus.toString()); + } + + protected void addAutoSelectOnFocus(JTextField jTextField) { + jTextField.addFocusListener(new FocusAdapter() { + @Override + public void focusGained(final FocusEvent e) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + JTextField source = (JTextField) e.getSource(); + source.selectAll(); + } + }); + + } }); } + //------------------------------------------------------------------------// + //-- Internal methods --// + //------------------------------------------------------------------------// + + + protected boolean quitScreen(boolean modelIsValid, + boolean modelIsModify, + String askGiveUpMessage, + String askSaveMessage, + Action saveAction) { + boolean result; + + if (!modelIsValid) { + + // model is not valid + // ask user to qui or not + result = askCancelEditBeforeLeaving(askGiveUpMessage); + + } else if (modelIsModify) { + + // something is modify ask user what to do + int answer = askSaveBeforeLeaving(askSaveMessage); + switch (answer) { + case JOptionPane.YES_OPTION: + + // ok save + saveAction.actionPerformed(null); + result = true; + break; + case JOptionPane.NO_OPTION: + + // do not save but can still quit the screen (so nothing to do) + result = true; + break; + default: + // do not save and stay here (so nothing to do) + result = false; + + } + } else { + + // model is valid and not modify, can safely quit screen + result = true; + } + return result; + } + + protected void registerValidators(SwingValidator... validators) { + MainUI main = context.getMainUI(); + Preconditions.checkNotNull( + main, "No mainUI registred in application context"); + MainUIHandler handler = main.getHandler(); + handler.clearValidators(); + for (SwingValidator validator : validators) { + handler.registerValidator(validator); + } + } + + public void clearValidators() { + MainUI main = context.getMainUI(); + Preconditions.checkNotNull( + main, "No mainUI registred in application context"); + MainUIHandler handler = main.getHandler(); + handler.clearValidators(); + } + public <O> Decorator<O> getDecorator(Class<O> type, String name) { DecoratorService decoratorService = context.getDecoratorService();
participants (1)
-
tchemit@users.forge.codelutin.com