This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit 3262af72f6acef9e14a9fae5facf50c82abbd0d9 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Apr 4 09:37:22 2015 +0200 réusinage des listes d'actions --- .../fr/ifremer/tutti/ui/swing/TuttiUIContext.java | 15 +++ .../tutti/ui/swing/content/home/SelectCruiseUI.css | 9 +- .../ui/swing/content/home/SelectCruiseUI.jaxx | 17 +--- .../swing/content/home/SelectCruiseUIHandler.java | 106 +------------------- .../content/home/actions/DeleteProtocolAction.java | 11 ++- .../content/home/actions/ExportProtocolAction.java | 5 +- .../referential/ManageTemporaryReferentialUI.css | 12 +-- .../referential/ManageTemporaryReferentialUI.jaxx | 23 ++--- .../ManageTemporaryReferentialUIHandler.java | 110 --------------------- .../actions/ExportExistingTemporaryGearAction.java | 6 +- .../ExportExistingTemporaryPersonAction.java | 6 +- .../ExportExistingTemporarySpeciesAction.java | 4 +- .../ExportExistingTemporaryVesselAction.java | 4 +- .../actions/ImportTemporaryGearAction.java | 2 +- .../actions/ImportTemporaryPersonAction.java | 2 +- .../actions/ImportTemporarySpeciesAction.java | 2 +- .../actions/ImportTemporaryVesselAction.java | 2 +- .../actions/OpenReplaceTemporaryGearUIAction.java | 8 +- .../OpenReplaceTemporaryPersonUIAction.java | 8 +- .../OpenReplaceTemporarySpeciesUIAction.java | 8 +- .../OpenReplaceTemporaryVesselUIAction.java | 8 +- .../ui/swing/util/AbstractTuttiUIHandler.java | 94 ++++++++++++++++++ .../util/actions/ShowComboBoxPopupActions.java | 25 +++++ 23 files changed, 205 insertions(+), 282 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java index 89ed791..32f4836 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java @@ -105,6 +105,7 @@ import java.util.Locale; import java.util.Map; import java.util.Properties; import java.util.Set; +import java.util.Timer; import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; @@ -602,6 +603,11 @@ public class TuttiUIContext extends AbstractBean implements Closeable, UIMessage validationContext = null; IOUtils.closeQuietly(dataContext); + if (timer != null) { + timer.purge(); + timer.cancel(); + } + setScreen(null); IOUtils.closeQuietly(serviceContext); @@ -1220,4 +1226,13 @@ public class TuttiUIContext extends AbstractBean implements Closeable, UIMessage } + private Timer timer; + + public Timer getTimer() { + if (timer == null) { + timer = new Timer("ShowActions::"); + } + return timer; + } + } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.css index 7a1ed57..ec38029 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.css @@ -89,9 +89,8 @@ BeanFilterableComboBox { } #editCruiseComboBox { - model: {SwingUtil.newComboModel(editCruiseButton, sendCruiseReportButton, exportCruiseForSumatraButton, speciesToConfirmReportForCruiseButton)}; enabled: {model.isProgramFound() && model.isCruiseFound()}; - renderer: {new ActionListCellRenderer()}; + _comboboxActions: {Arrays.asList(editCruiseButton, sendCruiseReportButton, exportCruiseForSumatraButton, speciesToConfirmReportForCruiseButton)}; } #editCruiseButton { @@ -152,14 +151,12 @@ BeanFilterableComboBox { } #newProtocolComboBox { - model: {SwingUtil.newComboModel(newProtocolButton, importProtocolButton)}; - renderer: {new ActionListCellRenderer()}; + _comboboxActions: {Arrays.asList(newProtocolButton, importProtocolButton)}; } #editProtocolComboBox { - model: {SwingUtil.newComboModel(editProtocolButton, cloneProtocolButton, exportProtocolButton, deleteProtocolButton)}; enabled: {model.isProtocolFound()}; - renderer: {new ActionListCellRenderer()}; + _comboboxActions: {Arrays.asList(editProtocolButton, cloneProtocolButton, exportProtocolButton, deleteProtocolButton)}; } #newProtocolButton { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jaxx index 095a7c3..d621ad6 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jaxx @@ -31,10 +31,10 @@ fr.ifremer.tutti.ui.swing.TuttiUIContext fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.util.TuttiUIUtil - org.nuiton.jaxx.application.swing.util.ActionListCellRenderer jaxx.runtime.swing.editor.bean.BeanFilterableComboBox + java.util.Arrays static org.nuiton.i18n.I18n.t </import> @@ -104,10 +104,7 @@ </cell> <cell> <JPanel layout='{new GridLayout(1,0)}'> - <JComboBox id='editCruiseComboBox' - onMouseEntered='handler.showActions(editCruiseComboBox, 300)' - onMouseClicked='handler.startComboFirstAction(event)' - onActionPerformed='handler.startEditCruiseAction(event)'/> + <JComboBox id='editCruiseComboBox'/> <JButton id='newCruiseButton'/> </JPanel> </cell> @@ -121,14 +118,8 @@ </cell> <cell> <JPanel layout='{new GridLayout(1,0)}'> - <JComboBox id='editProtocolComboBox' - onMouseEntered='handler.showActions(editProtocolComboBox, 300)' - onMouseClicked='handler.startComboFirstAction(event)' - onActionPerformed='handler.startExistingProtocolAction(event)'/> - <JComboBox id='newProtocolComboBox' - onMouseEntered='handler.showActions(newProtocolComboBox, 300)' - onMouseClicked='handler.startComboFirstAction(event)' - onActionPerformed='handler.startNewProtocolAction(event)'/> + <JComboBox id='editProtocolComboBox'/> + <JComboBox id='newProtocolComboBox'/> </JPanel> </cell> </row> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java index a306968..0ea449d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUIHandler.java @@ -28,24 +28,16 @@ import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.swing.AbstractButton; -import javax.swing.JButton; -import javax.swing.JComboBox; import javax.swing.JComponent; -import java.awt.event.ActionEvent; -import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; -import java.util.Timer; -import java.util.TimerTask; /** * Main ui content to select cruise. @@ -59,8 +51,6 @@ public class SelectCruiseUIHandler extends AbstractTuttiUIHandler<SelectCruiseUI private static final Log log = LogFactory.getLog(SelectCruiseUIHandler.class); - private Timer timer; - @Override public SwingValidator<SelectCruiseUIModel> getValidator() { return ui.getValidator(); @@ -135,25 +125,13 @@ public class SelectCruiseUIHandler extends AbstractTuttiUIHandler<SelectCruiseUI initUI(ui); - timer = new Timer("ShowActions::"); - SelectCruiseUIModel model = getModel(); - initBeanFilterableComboBox(ui.getProgramCombobox(), - model.getPrograms(), - model.getProgram()); - - initBeanFilterableComboBox(ui.getCruiseCombobox(), - model.getCruises(), - model.getCruise()); + initBeanFilterableComboBox(ui.getProgramCombobox(), model.getPrograms(), model.getProgram()); - initBeanFilterableComboBox(ui.getProtocolCombobox(), - model.getProtocols(), - model.getProtocol()); + initBeanFilterableComboBox(ui.getCruiseCombobox(), model.getCruises(), model.getCruise()); - initActionComboBox(ui.getEditCruiseComboBox()); - initActionComboBox(ui.getEditProtocolComboBox()); - initActionComboBox(ui.getNewProtocolComboBox()); + initBeanFilterableComboBox(ui.getProtocolCombobox(), model.getProtocols(), model.getProtocol()); model.addPropertyChangeListener(SelectCruiseUIModel.PROPERTY_PROTOCOLS, new PropertyChangeListener() { @Override @@ -237,31 +215,6 @@ public class SelectCruiseUIHandler extends AbstractTuttiUIHandler<SelectCruiseUI return getUI().getEditCatchesButton(); } - public void showActions(JComboBox comboBox, long delay) { - - if (comboBox.isEnabled()) { - - timer.schedule(new ShowComboBoxPopupActions(comboBox), delay); - - } - - } - - protected boolean resetEditProtocolAction; - - protected boolean resetNewProtocolAction; - - protected boolean resetEditCruiseAction; - - public void resetEditProtolAction() { - resetEditProtocolAction = true; - try { - ui.getEditProtocolComboBox().setSelectedIndex(0); - } finally { - resetEditProtocolAction = false; - } - } - @Override public void onCloseUI() { if (log.isDebugEnabled()) { @@ -272,59 +225,6 @@ public class SelectCruiseUIHandler extends AbstractTuttiUIHandler<SelectCruiseUI getModel().removePropertyChangeListener(listener); } clearValidators(); - timer.purge(); - timer.cancel(); - } - - public void startEditCruiseAction(ActionEvent event) { - startEditAction(!resetEditCruiseAction, event); } - public void startExistingProtocolAction(ActionEvent event) { - startEditAction(!resetEditProtocolAction, event); - } - - public void startNewProtocolAction(ActionEvent event) { - startEditAction(!resetNewProtocolAction, event); - } - - public void startComboFirstAction(MouseEvent event) { - JComboBox combo = (JComboBox) event.getSource(); - if (combo.isEnabled()) { - AbstractButton action = (AbstractButton) combo.getItemAt(0); - getContext().getActionEngine().runAction(action); - } - } - - protected void startEditAction(boolean canEdit, ActionEvent event) { - if (canEdit) { - JComboBox existingCombo = (JComboBox) event.getSource(); - JButton selectedAction = (JButton) existingCombo.getSelectedItem(); - // hide popup before performing the action, otherwise, if the action - // opens a popup, the user must click a first time to hide the combobox - // popup to then interact with the popup opened by the action - // (see http://forge.codelutin.com/issues/2032) - existingCombo.setSelectedIndex(0); - existingCombo.hidePopup(); - getContext().getActionEngine().runAction(selectedAction); - } - } - - protected void initActionComboBox(JComboBox combo) { - combo.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE); - combo.addMouseListener(TuttiUIUtil.GRAB_FOCUS_ON_ENTER_LISTENER); - } - - private static class ShowComboBoxPopupActions extends TimerTask { - private final JComboBox comboBox; - - public ShowComboBoxPopupActions(JComboBox comboBox) { - this.comboBox = comboBox; - } - - @Override - public void run() { - comboBox.showPopup(); - } - } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/actions/DeleteProtocolAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/actions/DeleteProtocolAction.java index c6d1ed9..c545cc3 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/actions/DeleteProtocolAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/actions/DeleteProtocolAction.java @@ -25,10 +25,10 @@ package fr.ifremer.tutti.ui.swing.content.home.actions; import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import fr.ifremer.tutti.ui.swing.content.home.SelectCruiseUI; import fr.ifremer.tutti.ui.swing.content.home.SelectCruiseUIHandler; import fr.ifremer.tutti.ui.swing.content.home.SelectCruiseUIModel; +import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -93,6 +93,13 @@ public class DeleteProtocolAction extends LongActionSupport<SelectCruiseUIModel, // set new list getModel().setProtocols(protocols); - getHandler().resetEditProtolAction(); + } + + @Override + public void postSuccessAction() { + + getHandler().resetComboBoxAction(getUI().getEditProtocolComboBox()); + super.postSuccessAction(); + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/actions/ExportProtocolAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/actions/ExportProtocolAction.java index 0ee390e..54d1341 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/actions/ExportProtocolAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/actions/ExportProtocolAction.java @@ -97,13 +97,16 @@ public class ExportProtocolAction extends LongActionSupport<SelectCruiseUIModel, getContext().getTuttiProtocolImportExportService(); service.exportProtocol(protocol, file); - getHandler().resetEditProtolAction(); } @Override public void postSuccessAction() { + + getHandler().resetComboBoxAction(getUI().getEditProtocolComboBox()); + super.postSuccessAction(); TuttiProtocol protocol = getModel().getProtocol(); sendMessage(t("tutti.exportProtocol.action.success", protocol.getName(), file.getName())); + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUI.css index c122a1b..327477b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUI.css @@ -36,8 +36,7 @@ } #speciesActionComboBox { - model: {SwingUtil.newComboModel(exportSpeciesExampleButton, exportExistingSpeciesButton, importSpeciesButton, replaceSpeciesButton)}; - renderer: {new ActionListCellRenderer()}; + _comboboxActions: {Arrays.asList(exportSpeciesExampleButton, exportExistingSpeciesButton, importSpeciesButton, replaceSpeciesButton)}; } #exportSpeciesExampleButton { @@ -81,8 +80,7 @@ } #vesselActionComboBox { - model: {SwingUtil.newComboModel(exportVesselExampleButton, exportExistingVesselButton, importVesselButton, replaceVesselButton)}; - renderer: {new ActionListCellRenderer()}; + _comboboxActions: {Arrays.asList(exportVesselExampleButton, exportExistingVesselButton, importVesselButton, replaceVesselButton)}; } #exportVesselExampleButton { @@ -126,8 +124,7 @@ } #gearActionComboBox { - model: {SwingUtil.newComboModel(exportGearExampleButton, exportExistingGearButton, importGearButton, replaceGearButton)}; - renderer: {new ActionListCellRenderer()}; + _comboboxActions: {Arrays.asList(exportGearExampleButton, exportExistingGearButton, importGearButton, replaceGearButton)}; } #exportGearExampleButton { @@ -171,8 +168,7 @@ } #personActionComboBox { - model: {SwingUtil.newComboModel(exportPersonExampleButton, exportExistingPersonButton, importPersonButton, replacePersonButton)}; - renderer: {new ActionListCellRenderer()}; + _comboboxActions: {Arrays.asList(exportPersonExampleButton, exportExistingPersonButton, importPersonButton, replacePersonButton)}; } #exportExistingPersonButton { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUI.jaxx index 7428d89..ed8530c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUI.jaxx @@ -29,7 +29,8 @@ fr.ifremer.tutti.ui.swing.TuttiUIContext fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.util.TuttiUIUtil - org.nuiton.jaxx.application.swing.util.ActionListCellRenderer + + java.util.Arrays static org.nuiton.i18n.I18n.t </import> @@ -70,10 +71,7 @@ <JLabel id='speciesLabel'/> </cell> <cell> - <JComboBox id='speciesActionComboBox' - onMouseEntered='speciesActionComboBox.showPopup()' - onMouseClicked='handler.startExportSpeciesAction(event)' - onActionPerformed='handler.startExportSpeciesAction(event)'/> + <JComboBox id='speciesActionComboBox'/> </cell> </row> @@ -88,10 +86,7 @@ <JLabel id='vesselLabel'/> </cell> <cell> - <JComboBox id='vesselActionComboBox' - onMouseEntered='vesselActionComboBox.showPopup()' - onMouseClicked='handler.startExportVesselsAction(event)' - onActionPerformed='handler.startExportVesselsAction(event)'/> + <JComboBox id='vesselActionComboBox'/> </cell> </row> @@ -106,10 +101,7 @@ <JLabel id='gearLabel'/> </cell> <cell> - <JComboBox id='gearActionComboBox' - onMouseEntered='gearActionComboBox.showPopup()' - onMouseClicked='handler.startExportGearsAction(event)' - onActionPerformed='handler.startExportGearsAction(event)'/> + <JComboBox id='gearActionComboBox'/> </cell> </row> @@ -124,10 +116,7 @@ <JLabel id='personLabel'/> </cell> <cell> - <JComboBox id='personActionComboBox' - onMouseEntered='personActionComboBox.showPopup()' - onMouseClicked='handler.startExportPersonsAction(event)' - onActionPerformed='handler.startExportPersonsAction(event)'/> + <JComboBox id='personActionComboBox'/> </cell> </row> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUIHandler.java index 2c3638b..8884d60 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/ManageTemporaryReferentialUIHandler.java @@ -27,17 +27,11 @@ import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.swing.AbstractButton; -import javax.swing.JButton; -import javax.swing.JComboBox; import javax.swing.JComponent; -import java.awt.event.ActionEvent; -import java.awt.event.MouseEvent; import java.util.List; /** @@ -80,10 +74,6 @@ public class ManageTemporaryReferentialUIHandler extends AbstractTuttiUIHandler< initUI(ui); - initActionComboBox(ui.getSpeciesActionComboBox()); - initActionComboBox(ui.getVesselActionComboBox()); - initActionComboBox(ui.getGearActionComboBox()); - initActionComboBox(ui.getPersonActionComboBox()); } @Override @@ -103,104 +93,4 @@ public class ManageTemporaryReferentialUIHandler extends AbstractTuttiUIHandler< return null; } - - protected boolean resetExportSpeciesAction; - - protected boolean resetExportVesselsAction; - - protected boolean resetExportGearsAction; - - protected boolean resetExportPersonsAction; - - public void resetExportSpeciesAction() { - resetExportSpeciesAction = true; - try { - ui.getSpeciesActionComboBox().setSelectedIndex(0); - } finally { - resetExportSpeciesAction = false; - } - } - - public void resetExportVesselsAction() { - resetExportVesselsAction = true; - try { - ui.getVesselActionComboBox().setSelectedIndex(0); - } finally { - resetExportVesselsAction = false; - } - } - - public void resetExportGearsAction() { - resetExportGearsAction = true; - try { - ui.getGearActionComboBox().setSelectedIndex(0); - } finally { - resetExportGearsAction = false; - } - } - - public void resetExportPersonAction() { - resetExportPersonsAction = true; - try { - ui.getPersonActionComboBox().setSelectedIndex(0); - } finally { - resetExportPersonsAction = false; - } - } - - public void startExportSpeciesAction(MouseEvent event) { - startComboFirstAction(event); - } - - public void startExportSpeciesAction(ActionEvent event) { - startEditAction(!resetExportSpeciesAction, event); - } - - public void startExportVesselsAction(MouseEvent event) { - startComboFirstAction(event); - } - - public void startExportVesselsAction(ActionEvent event) { - startEditAction(!resetExportVesselsAction, event); - } - - public void startExportGearsAction(MouseEvent event) { - startComboFirstAction(event); - } - - public void startExportGearsAction(ActionEvent event) { - startEditAction(!resetExportGearsAction, event); - } - - public void startExportPersonsAction(MouseEvent event) { - startComboFirstAction(event); - } - - public void startExportPersonsAction(ActionEvent event) { - startEditAction(!resetExportPersonsAction, event); - } - - protected void startComboFirstAction(MouseEvent event) { - JComboBox combo = (JComboBox) event.getSource(); - getContext().getActionEngine().runAction((AbstractButton) combo.getItemAt(0)); - } - - protected void startEditAction(boolean canEdit, ActionEvent event) { - if (canEdit) { - JComboBox existingCombo = (JComboBox) event.getSource(); - JButton selectedAction = (JButton) existingCombo.getSelectedItem(); - // hide popup before performing the action, otherwise, if the action - // opens a popup, the user must click a first time to hide the combobox - // popup to then interact with the popup opened by the action - // (see http://forge.codelutin.com/issues/2032) - existingCombo.setSelectedIndex(0); - existingCombo.hidePopup(); - getContext().getActionEngine().runAction(selectedAction); - } - } - - protected void initActionComboBox(JComboBox combo) { - combo.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE); - combo.addMouseListener(TuttiUIUtil.GRAB_FOCUS_ON_ENTER_LISTENER); - } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ExportExistingTemporaryGearAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ExportExistingTemporaryGearAction.java index 8859419..c5d032c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ExportExistingTemporaryGearAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ExportExistingTemporaryGearAction.java @@ -24,10 +24,10 @@ package fr.ifremer.tutti.ui.swing.content.referential.actions; import com.google.common.base.Preconditions; import fr.ifremer.tutti.service.referential.ReferentialTemporaryGearService; -import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIModel; +import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -90,12 +90,14 @@ public class ExportExistingTemporaryGearAction extends LongActionSupport<ManageT ReferentialTemporaryGearService service = getContext().getReferentialTemporaryGearService(); service.exportExistingTemporaryGear(file); - getHandler().resetExportGearsAction(); } @Override public void postSuccessAction() { + + getHandler().resetComboBoxAction(getUI().getGearActionComboBox()); super.postSuccessAction(); sendMessage(t("tutti.manageTemporaryReferential.action.chooseExistingReferentialGearFile.export.success", file)); + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ExportExistingTemporaryPersonAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ExportExistingTemporaryPersonAction.java index 1f4a30f..c0713c4 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ExportExistingTemporaryPersonAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ExportExistingTemporaryPersonAction.java @@ -24,10 +24,10 @@ package fr.ifremer.tutti.ui.swing.content.referential.actions; import com.google.common.base.Preconditions; import fr.ifremer.tutti.service.referential.ReferentialTemporaryPersonService; -import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUI; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIHandler; import fr.ifremer.tutti.ui.swing.content.referential.ManageTemporaryReferentialUIModel; +import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -91,12 +91,14 @@ public class ExportExistingTemporaryPersonAction extends LongActionSupport<Manag ReferentialTemporaryPersonService service = getContext().getReferentialTemporaryPersonService(); service.exportExistingTemporaryPerson(file); - getHandler().resetExportPersonAction(); } @Override public void postSuccessAction() { + + getHandler().resetComboBoxAction(getUI().getPersonActionComboBox()); super.postSuccessAction(); sendMessage(t("tutti.manageTemporaryReferential.action.chooseExistingReferentialPersonFile.export.success", file)); + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ExportExistingTemporarySpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ExportExistingTemporarySpeciesAction.java index b776dfb..c20a352 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ExportExistingTemporarySpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ExportExistingTemporarySpeciesAction.java @@ -90,12 +90,14 @@ public class ExportExistingTemporarySpeciesAction extends LongActionSupport<Mana ReferentialTemporarySpeciesService service = getContext().getReferentialTemporarySpeciesService(); service.exportExistingTemporarySpecies(file); - getHandler().resetExportSpeciesAction(); } @Override public void postSuccessAction() { + + getHandler().resetComboBoxAction(getUI().getSpeciesActionComboBox()); super.postSuccessAction(); sendMessage(t("tutti.manageTemporaryReferential.action.chooseExistingReferentialSpeciesFile.export.success", file)); + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ExportExistingTemporaryVesselAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ExportExistingTemporaryVesselAction.java index 7499e3f..a343ac7 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ExportExistingTemporaryVesselAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ExportExistingTemporaryVesselAction.java @@ -90,12 +90,14 @@ public class ExportExistingTemporaryVesselAction extends LongActionSupport<Manag ReferentialTemporaryVesselService service = getContext().getReferentialTemporaryVesselService(); service.exportExistingTemporaryVessel(file); - getHandler().resetExportVesselsAction(); } @Override public void postSuccessAction() { + + getHandler().resetComboBoxAction(getUI().getVesselActionComboBox()); super.postSuccessAction(); sendMessage(t("tutti.manageTemporaryReferential.action.chooseExistingReferentialVesselFile.export.success", file)); + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ImportTemporaryGearAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ImportTemporaryGearAction.java index 2d74181..1a180cf 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ImportTemporaryGearAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ImportTemporaryGearAction.java @@ -76,7 +76,7 @@ public class ImportTemporaryGearAction extends ImportTemporaryActionSupport<Gear reloadCruise(); reloadFishingOperation(); - getHandler().resetExportGearsAction(); + getHandler().resetComboBoxAction(getUI().getGearActionComboBox()); String title = t("tutti.manageTemporaryReferential.action.chooseReferentialGearFile.import.dialog.title"); String message = t("tutti.manageTemporaryReferential.action.chooseReferentialGearFile.import.dialog.message", diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ImportTemporaryPersonAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ImportTemporaryPersonAction.java index 992f7b5..c134149 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ImportTemporaryPersonAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ImportTemporaryPersonAction.java @@ -74,7 +74,7 @@ public class ImportTemporaryPersonAction extends ImportTemporaryActionSupport<Pe reloadCruise(); reloadFishingOperation(); - getHandler().resetExportPersonAction(); + getHandler().resetComboBoxAction(getUI().getPersonActionComboBox()); String title = t("tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.import.dialog.title"); String message = t("tutti.manageTemporaryReferential.action.chooseReferentialPersonFile.import.dialog.message", diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ImportTemporarySpeciesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ImportTemporarySpeciesAction.java index e06e89f..f9f0a7b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ImportTemporarySpeciesAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ImportTemporarySpeciesAction.java @@ -74,7 +74,7 @@ public class ImportTemporarySpeciesAction extends ImportTemporaryActionSupport<S getDataContext().resetSpecies(); reloadFishingOperation(); - getHandler().resetExportSpeciesAction(); + getHandler().resetComboBoxAction(getUI().getSpeciesActionComboBox()); String title = t("tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.import.dialog.title"); String message = t("tutti.manageTemporaryReferential.action.chooseReferentialSpeciesFile.import.dialog.message", result.getNbRefAdded(), result.getNbRefUpdated(), result.getNbRefDeleted()); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ImportTemporaryVesselAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ImportTemporaryVesselAction.java index 035f298..dcfcffc 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ImportTemporaryVesselAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/ImportTemporaryVesselAction.java @@ -75,7 +75,7 @@ public class ImportTemporaryVesselAction extends ImportTemporaryActionSupport<Ve reloadCruise(); reloadFishingOperation(); - getHandler().resetExportVesselsAction(); + getHandler().resetComboBoxAction(getUI().getVesselActionComboBox()); String title = t("tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.import.dialog.title"); String message = t("tutti.manageTemporaryReferential.action.chooseReferentialVesselFile.import.dialog.message", diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/OpenReplaceTemporaryGearUIAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/OpenReplaceTemporaryGearUIAction.java index b70d8d0..6d2c283 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/OpenReplaceTemporaryGearUIAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/OpenReplaceTemporaryGearUIAction.java @@ -81,8 +81,10 @@ public class OpenReplaceTemporaryGearUIAction extends AbstractOpenReplaceTempora } @Override - public void doAction() throws Exception { - super.doAction(); - getHandler().resetExportGearsAction(); + public void postSuccessAction() { + + getHandler().resetComboBoxAction(getUI().getGearActionComboBox()); + super.postSuccessAction(); + } } \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/OpenReplaceTemporaryPersonUIAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/OpenReplaceTemporaryPersonUIAction.java index e9d518f..9f8e2cd 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/OpenReplaceTemporaryPersonUIAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/OpenReplaceTemporaryPersonUIAction.java @@ -81,8 +81,10 @@ public class OpenReplaceTemporaryPersonUIAction extends AbstractOpenReplaceTempo } @Override - public void doAction() throws Exception { - super.doAction(); - getHandler().resetExportPersonAction(); + public void postSuccessAction() { + + getHandler().resetComboBoxAction(getUI().getPersonActionComboBox()); + super.postSuccessAction(); + } } \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/OpenReplaceTemporarySpeciesUIAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/OpenReplaceTemporarySpeciesUIAction.java index 9d22467..2645fbc 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/OpenReplaceTemporarySpeciesUIAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/OpenReplaceTemporarySpeciesUIAction.java @@ -81,8 +81,10 @@ public class OpenReplaceTemporarySpeciesUIAction extends AbstractOpenReplaceTemp } @Override - public void doAction() throws Exception { - super.doAction(); - getHandler().resetExportSpeciesAction(); + public void postSuccessAction() { + + getHandler().resetComboBoxAction(getUI().getSpeciesActionComboBox()); + super.postSuccessAction(); + } } \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/OpenReplaceTemporaryVesselUIAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/OpenReplaceTemporaryVesselUIAction.java index 5c2e168..9228c29 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/OpenReplaceTemporaryVesselUIAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/referential/actions/OpenReplaceTemporaryVesselUIAction.java @@ -81,8 +81,10 @@ public class OpenReplaceTemporaryVesselUIAction extends AbstractOpenReplaceTempo } @Override - public void doAction() throws Exception { - super.doAction(); - getHandler().resetExportVesselsAction(); + public void postSuccessAction() { + + getHandler().resetComboBoxAction(getUI().getVesselActionComboBox()); + super.postSuccessAction(); + } } \ No newline at end of file diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java index fbb343e..c91f60c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java @@ -37,6 +37,7 @@ import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.MainUI; import fr.ifremer.tutti.ui.swing.content.MainUIHandler; +import fr.ifremer.tutti.ui.swing.util.actions.ShowComboBoxPopupActions; import fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachment; import fr.ifremer.tutti.ui.swing.util.computable.ComputableDataEditor; import fr.ifremer.tutti.util.Weights; @@ -58,12 +59,16 @@ import org.nuiton.jaxx.application.swing.AbstractApplicationUIHandler; import org.nuiton.jaxx.application.swing.action.ApplicationActionUI; import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; +import org.nuiton.jaxx.application.swing.util.ActionListCellRenderer; import org.nuiton.jaxx.widgets.number.NumberEditor; import org.nuiton.validator.bean.simple.SimpleBeanValidator; import javax.swing.AbstractButton; import javax.swing.Action; +import javax.swing.DefaultComboBoxModel; +import javax.swing.JButton; import javax.swing.JCheckBox; +import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JMenuItem; @@ -80,10 +85,15 @@ import javax.swing.table.TableColumnModel; import java.awt.Color; import java.awt.Component; import java.awt.Font; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.text.DecimalFormat; +import java.util.List; import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -316,11 +326,94 @@ public abstract class AbstractTuttiUIHandler<M, UI extends TuttiUI<M, ?>> extend } else if (component instanceof ButtonAttachment) { initButtonAttachment((ButtonAttachment) component); + } else if (component instanceof JComboBox) { + + initComboBox((JComboBox) component); } else { super.initUIComponent(component); } } + private void initComboBox(JComboBox<?> comboBox) { + + super.initUIComponent(comboBox); + List<JButton> comboboxActions = (List<JButton>) comboBox.getClientProperty("comboboxActions"); + if (comboboxActions != null) { + + comboBox.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE); + comboBox.addMouseListener(TuttiUIUtil.GRAB_FOCUS_ON_ENTER_LISTENER); + + comboBox.setRenderer(new ActionListCellRenderer()); + comboBox.setModel(new DefaultComboBoxModel(comboboxActions.toArray())); + comboBox.addPropertyChangeListener("enabled", new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + JComboBox source = (JComboBox) evt.getSource(); + source.setFocusable((Boolean) evt.getNewValue()); + } + }); + comboBox.addMouseListener(new MouseAdapter() { + @Override + public void mouseEntered(MouseEvent e) { + + JComboBox source = (JComboBox) e.getSource(); + + if (source.isEnabled()) { + + getContext().getTimer().schedule(new ShowComboBoxPopupActions(source), 300); + + } + + } + + @Override + public void mouseClicked(MouseEvent e) { + + JComboBox source = (JComboBox) e.getSource(); + if (source.isEnabled()) { + + AbstractButton action = (AbstractButton) source.getItemAt(0); + getContext().getActionEngine().runAction(action); + + } + + } + }); + + comboBox.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + + JComboBox source = (JComboBox) e.getSource(); + Boolean canEdit = (Boolean) source.getClientProperty("_canEdit_"); + if (canEdit == null || canEdit) { + + JButton selectedAction = (JButton) source.getSelectedItem(); + // hide popup before performing the action, otherwise, if the action + // opens a popup, the user must click a first time to hide the combobox + // popup to then interact with the popup opened by the action + // (see http://forge.codelutin.com/issues/2032) + source.setSelectedIndex(0); + source.hidePopup(); + getContext().getActionEngine().runAction(selectedAction); + + } + } + + }); + } + } + + public void resetComboBoxAction(JComboBox source) { + source.putClientProperty("_canEdit_", false); + + try { + source.setSelectedIndex(0); + } finally { + source.putClientProperty("_canEdit_", null); + } + } + protected void initJXTitledPanel(JXTitledPanel jTextField) { // Boolean boldFont = (Boolean) jTextField.getClientProperty("boldFont"); // if (boldFont!= null && boldFont) { @@ -430,6 +523,7 @@ public abstract class AbstractTuttiUIHandler<M, UI extends TuttiUI<M, ?>> extend } } + public String buildReminderLabelTitle(Species species, Iterable<SampleCategory<?>> categories, String prefix, diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/actions/ShowComboBoxPopupActions.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/actions/ShowComboBoxPopupActions.java new file mode 100644 index 0000000..62f3ca7 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/actions/ShowComboBoxPopupActions.java @@ -0,0 +1,25 @@ +package fr.ifremer.tutti.ui.swing.util.actions; + +import javax.swing.JComboBox; +import java.util.TimerTask; + +/** + * Created on 4/4/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14.4 + */ +public class ShowComboBoxPopupActions extends TimerTask { + + private final JComboBox comboBox; + + public ShowComboBoxPopupActions(JComboBox comboBox) { + this.comboBox = comboBox; + } + + @Override + public void run() { + comboBox.showPopup(); + } + +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.