This is an automated email from the git hooks/post-receive script. New commit to branch feature/8429 in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 8357698a5edcfa54ce08177117fbc421690be78b Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Nov 13 20:13:56 2016 +0100 meilleure gestion du faction, réusinage des actions, ajout des actions globales --- .../CoordinateLatitudeDtoFieldValidator.java | 4 + .../CoordinateLongitudeDtoFieldValidator.java | 4 + .../application/swing/ui/BorderFocusListener.java | 50 ++ .../application/swing/ui/ObserveMainUI.jaxx | 4 +- .../application/swing/ui/ObserveMainUI.jcss | 6 +- .../application/swing/ui/ObserveMainUIHandler.java | 32 +- .../AbstractContentUIAction.java | 3 +- .../{shared => content}/CancelCreateUIAction.java | 3 +- .../CloseAndCreateUIAction.java | 3 +- .../{shared => content}/CloseOpenUIAction.java | 5 +- .../ui/actions/content/CreateOpenUIAction.java | 29 + .../{shared => content}/DeleteDataUIAction.java | 3 +- .../DeleteReferenceUIAction.java | 3 +- .../DeleteTableEntryUIAction.java | 3 +- .../MoveActivityLonglinesUIAction.java | 2 +- .../MoveActivitySeinesUIAction.java | 3 +- .../{shared => content}/MoveRoutesUIAction.java | 57 +- .../MoveTripLonglinesUIAction.java | 3 +- .../MoveTripSeinesUIAction.java | 3 +- .../{shared => content}/MoveTripsUIAction.java | 43 +- .../{shared => content}/NewTableEntryUIAction.java | 3 +- .../{shared => content}/ReOpenUIAction.java | 5 +- .../{shared => content}/ResetEditUIAction.java | 15 +- .../ResetTableEntryUIAction.java | 3 +- .../{shared => content}/SaveEditUIAction.java | 6 +- .../SaveTableEntryUIAction.java | 3 +- .../ui/actions/global/AbstractGlobalUIAction.java | 18 + .../actions/global/ChangeFocusGlobalUIAction.java | 60 ++ .../actions/global/DeleteDataGlobalUIAction.java | 45 + .../actions/global/NewNextDataGlobalUIAction.java | 45 + .../global/OpenCloseDataGlobalUIAction.java | 76 ++ .../ui/actions/global/ResetDataGlobalUIAction.java | 38 + .../ui/actions/global/SaveDataGlobalUIAction.java | 38 + .../swing/ui/actions/shared/AbstractUIAction.java | 21 +- .../application/swing/ui/content/Common.jcss | 4 + .../application/swing/ui/content/ContentUI.jcss | 2 + .../swing/ui/content/ContentUIBlockingLayerUI.java | 10 +- .../swing/ui/content/ContentUIHandler.java | 69 +- .../swing/ui/content/ContentUIInitializer.java | 7 + .../swing/ui/content/ContentUIManager.java | 54 +- .../swing/ui/content/ObserveActionMap.java | 54 +- .../swing/ui/content/ObserveFocusManager.java | 943 +++++++-------------- .../impl/longline/LonglineDetailCompositionUI.jaxx | 4 +- .../impl/longline/LonglineGlobalCompositionUI.jaxx | 4 +- .../ui/content/impl/longline/SetLonglineUI.jaxx | 8 +- .../FloatingObjectTransmittingBuoyOperationUI.jaxx | 4 +- .../ui/content/impl/seine/FloatingObjectUI.jaxx | 8 +- .../swing/ui/content/impl/seine/SetSeineUI.jaxx | 8 +- .../swing/ui/content/list/ContentListUI.jaxx | 7 +- .../swing/ui/content/list/ContentListUI.jcss | 2 +- .../ui/content/list/ContentListUIHandler.java | 13 +- .../list/impl/longline/ActivityLonglinesUI.jaxx | 9 +- .../list/impl/longline/ActivityLonglinesUI.jcss | 7 +- .../content/list/impl/longline/CommonListUI.jcss | 4 + .../list/impl/longline/TripLonglinesUI.jaxx | 3 +- .../list/impl/longline/TripLonglinesUI.jcss | 8 +- .../content/list/impl/seine/ActivitySeinesUI.jaxx | 6 +- .../ui/content/list/impl/seine/CommonListUI.jcss | 4 + .../swing/ui/content/list/impl/seine/RoutesUI.jaxx | 2 +- .../ui/content/list/impl/seine/TripSeinesUI.jaxx | 2 +- .../swing/ui/content/open/ContentOpenableUI.jaxx | 19 +- .../swing/ui/content/open/ContentOpenableUI.jcss | 9 +- .../open/impl/longline/ActivityLonglineUI.jaxx | 2 +- .../content/open/impl/longline/TripLonglineUI.jaxx | 2 +- .../content/open/impl/seine/ActivitySeineUI.jaxx | 2 +- .../swing/ui/content/ref/ContentReferenceUI.jaxx | 6 +- .../ui/content/ref/ContentReferenceUIHandler.java | 2 +- .../swing/ui/content/table/CommonTable.jcss | 4 + .../swing/ui/content/table/ContentTableUI.jaxx | 12 +- .../ui/content/table/ContentTableUIHandler.java | 4 +- .../table/impl/longline/SensorUsedUIHandler.java | 6 +- .../content/table/impl/longline/TdrUIHandler.java | 6 +- .../swing/ui/tree/ObserveTreeHelper.java | 3 +- 73 files changed, 1121 insertions(+), 841 deletions(-) diff --git a/application-swing-validators/src/main/java/fr/ird/observe/application/swing/validators/CoordinateLatitudeDtoFieldValidator.java b/application-swing-validators/src/main/java/fr/ird/observe/application/swing/validators/CoordinateLatitudeDtoFieldValidator.java index 597c669..86de2b7 100644 --- a/application-swing-validators/src/main/java/fr/ird/observe/application/swing/validators/CoordinateLatitudeDtoFieldValidator.java +++ b/application-swing-validators/src/main/java/fr/ird/observe/application/swing/validators/CoordinateLatitudeDtoFieldValidator.java @@ -62,6 +62,10 @@ public class CoordinateLatitudeDtoFieldValidator extends FieldValidatorSupport { Map<String, CoordinatesEditor> map = (Map<String, CoordinatesEditor>) getFieldValue("coordinatesEditors", object); CoordinatesEditor coordinatesEditor = map.get(editorName); + //FIXME une validation est lancé dans l'ui alors que l'on ne devrait pas et on a pas ce composant alors + if (coordinatesEditor == null) { + return; + } Objects.requireNonNull(coordinatesEditor, "can't find editor named " + editorName); CoordinateFormat format = coordinatesEditor.getModel().getFormat(); diff --git a/application-swing-validators/src/main/java/fr/ird/observe/application/swing/validators/CoordinateLongitudeDtoFieldValidator.java b/application-swing-validators/src/main/java/fr/ird/observe/application/swing/validators/CoordinateLongitudeDtoFieldValidator.java index c94fe60..4c51cab 100644 --- a/application-swing-validators/src/main/java/fr/ird/observe/application/swing/validators/CoordinateLongitudeDtoFieldValidator.java +++ b/application-swing-validators/src/main/java/fr/ird/observe/application/swing/validators/CoordinateLongitudeDtoFieldValidator.java @@ -62,6 +62,10 @@ public class CoordinateLongitudeDtoFieldValidator extends FieldValidatorSupport Map<String, CoordinatesEditor> map = (Map<String, CoordinatesEditor>) getFieldValue("coordinatesEditors", object); CoordinatesEditor coordinatesEditor = map.get(editorName); + //FIXME une validation est lancé dans l'ui alors que l'on ne devrait pas et on a pas ce composant alors + if (coordinatesEditor == null) { + return; + } Objects.requireNonNull(coordinatesEditor, "can't find editor named " + editorName); CoordinateFormat format = coordinatesEditor.getModel().getFormat(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/BorderFocusListener.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/BorderFocusListener.java new file mode 100644 index 0000000..c064f1b --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/BorderFocusListener.java @@ -0,0 +1,50 @@ +package fr.ird.observe.application.swing.ui; + +import javax.swing.JComponent; +import javax.swing.border.Border; +import javax.swing.border.LineBorder; +import java.awt.Color; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; + +/** + * Created on 10/11/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.1 + */ +public class BorderFocusListener implements FocusListener { + + private final Border defaultBorder; + private final JComponent container2; + private final Border focusBorder; + private final JComponent container; + private boolean enabled; + + public BorderFocusListener(ObserveMainUI mainUI) { + this.container = mainUI.getNavigationView(); + this.defaultBorder = container.getBorder(); + this.container2 = mainUI.getSplitpane2(); + this.focusBorder = new LineBorder(Color.blue, 3, true); + } + + @Override + public void focusGained(FocusEvent e) { + if (enabled) { + container.setBorder(focusBorder); + container2.setBorder(defaultBorder); + } + } + + @Override + public void focusLost(FocusEvent e) { + if (enabled) { + container.setBorder(defaultBorder); + container2.setBorder(focusBorder); + } + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } +} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUI.jaxx index 271c367..22ce441 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUI.jaxx @@ -35,7 +35,7 @@ fr.ird.observe.services.dto.seine.TripSeineDto fr.ird.observe.services.dto.constants.ReferentialLocale - fr.ird.observe.application.swing.ui.actions.shared.ReOpenUIAction + fr.ird.observe.application.swing.ui.actions.content.ReOpenUIAction fr.ird.observe.application.swing.ui.admin.AdminStep fr.ird.observe.application.swing.ui.actions.ChangeStorageAction @@ -341,4 +341,6 @@ void $afterCompleteSetup() { <!-- status message bar --> <StatusMessagePanel id='status' constraints="BorderLayout.SOUTH"/> + <BorderFocusListener id="borderFocusListener" constructorParams='this'/> + </JFrame> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUI.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUI.jcss index 877da9e..0172c0b 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUI.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUI.jcss @@ -50,15 +50,15 @@ JSplitPane { // trip menu #navigationOpenAction { - action: {new fr.ird.observe.application.swing.ui.actions.shared.ReOpenUIAction(this)}; + action: {new fr.ird.observe.application.swing.ui.actions.content.ReOpenUIAction(this)}; } #navigationCloseAction { - action: {new fr.ird.observe.application.swing.ui.actions.shared.CloseOpenUIAction(this)}; + action: {new fr.ird.observe.application.swing.ui.actions.content.CloseOpenUIAction(this)}; } #navigationDeleteAction { - action: {new fr.ird.observe.application.swing.ui.actions.shared.DeleteDataUIAction(this)}; + action: {new fr.ird.observe.application.swing.ui.actions.content.DeleteDataUIAction(this)}; } #menuFile { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUIHandler.java index 78fa0bc..bdb3cad 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUIHandler.java @@ -31,7 +31,6 @@ import fr.ird.observe.application.swing.ui.content.ContentMode; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.ContentUIManager; import fr.ird.observe.application.swing.ui.content.ContentUIModel; -import fr.ird.observe.application.swing.ui.content.ObserveContentUI; import fr.ird.observe.application.swing.ui.tree.ObserveNavigationTreeShowPopupAction; import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; @@ -50,6 +49,7 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.i18n.I18n; import javax.swing.Icon; +import javax.swing.JComponent; import javax.swing.SwingUtilities; import javax.swing.event.TreeExpansionEvent; import javax.swing.event.TreeSelectionEvent; @@ -58,6 +58,8 @@ import javax.swing.event.TreeWillExpandListener; import javax.swing.tree.ExpandVetoException; import javax.swing.tree.TreePath; import java.awt.Cursor; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -101,7 +103,7 @@ public class ObserveMainUIHandler { ContentUIManager manager = ui.getContentUIManager(); // obtain the ui type to show - Class<? extends ObserveContentUI<?, ?>> uiClass = manager.convertNodeToContentUI(node); + Class<? extends ContentUI<?, ?>> uiClass = manager.convertNodeToContentUI(node); if (log.isDebugEnabled()) { log.debug("new selected path = " + node + ", ui = " + uiClass); } @@ -132,7 +134,7 @@ public class ObserveMainUIHandler { } } - public void doOpencontent(ObserveMainUI ui, TreePath path, Class<? extends ObserveContentUI<?, ?>> uiClass) { + public void doOpencontent(ObserveMainUI ui, TreePath path, Class<? extends ContentUI<?, ?>> uiClass) { ContentUIManager manager = ui.getContentUIManager(); @@ -157,8 +159,11 @@ public class ObserveMainUIHandler { DataContext context = ui.getDataContext(); context.populateSelectedIds(selectedIds); + BorderFocusListener borderFocusListener = ui.getBorderFocusListener(); + borderFocusListener.setEnabled(false); + // on recherche l'ui (voir si elle existe déjà) - ObserveContentUI<?, ?> content = manager.getContent(uiClass); + ContentUI<?, ?> content = manager.getContent(uiClass); if (content == null) { @@ -167,6 +172,8 @@ public class ObserveMainUIHandler { // on ouvre l'écran manager.openContent(content); + + SwingUtilities.invokeLater(() -> borderFocusListener.setEnabled(true)); } /** @@ -476,6 +483,23 @@ public class ObserveMainUIHandler { Boolean newvalue = (Boolean) evt.getNewValue(); updateBusyState(ui, newvalue != null && newvalue); }); + + ui.getNavigation().addFocusListener(ui.getBorderFocusListener()); + ui.getNavigation().addMouseListener(new MouseAdapter() { + @Override + public void mouseEntered(MouseEvent e) { + ((JComponent) e.getSource()).grabFocus(); + } + }); + ui.getSplitpane2().addMouseListener(new MouseAdapter() { + @Override + public void mouseEntered(MouseEvent e) { + if (log.isInfoEnabled()) { + log.info("grab getSplitpane2 focus: " + e); + } + ((JComponent) e.getSource()).grabFocus(); + } + }); } protected void updateBusyState(ObserveMainUI ui, boolean busy) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/AbstractContentUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/AbstractContentUIAction.java similarity index 86% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/AbstractContentUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/AbstractContentUIAction.java index 309f5eb..b9853e5 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/AbstractContentUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/AbstractContentUIAction.java @@ -1,6 +1,7 @@ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.shared.AbstractUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; import java.awt.event.ActionEvent; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CancelCreateUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/CancelCreateUIAction.java similarity index 92% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CancelCreateUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/CancelCreateUIAction.java index 5fa99df..e415500 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CancelCreateUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/CancelCreateUIAction.java @@ -19,9 +19,10 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.content.AbstractContentUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseAndCreateUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/CloseAndCreateUIAction.java similarity index 97% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseAndCreateUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/CloseAndCreateUIAction.java index 90b9118..c774930 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseAndCreateUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/CloseAndCreateUIAction.java @@ -19,10 +19,11 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.content.AbstractContentUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.list.impl.longline.ActivityLonglinesUI; import fr.ird.observe.application.swing.ui.content.list.impl.seine.ActivitySeinesUI; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseOpenUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/CloseOpenUIAction.java similarity index 95% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseOpenUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/CloseOpenUIAction.java index dd838ac..d2c6a43 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseOpenUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/CloseOpenUIAction.java @@ -19,10 +19,11 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.content.AbstractContentUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.list.impl.longline.ActivityLonglinesUI; import fr.ird.observe.application.swing.ui.content.list.impl.longline.TripLonglinesUI; @@ -60,7 +61,7 @@ public class CloseOpenUIAction extends AbstractContentUIAction { } @Override - protected void actionPerformed(ContentUI<?, ?> ui) { + public void actionPerformed(ContentUI<?, ?> ui) { if (ui instanceof ContentOpenableUI) { ((ContentOpenableUI<?, ?>) ui).closeData(); return; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/CreateOpenUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/CreateOpenUIAction.java new file mode 100644 index 0000000..cbb1df8 --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/CreateOpenUIAction.java @@ -0,0 +1,29 @@ +package fr.ird.observe.application.swing.ui.actions.content; + +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.content.ContentUI; +import fr.ird.observe.application.swing.ui.content.list.ContentListUI; + +/** + * Created on 11/11/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.1 + */ +public class CreateOpenUIAction extends AbstractContentUIAction { + + public static final String ACTION_NAME = "createOpen"; + + public CreateOpenUIAction(ObserveMainUI mainUI) { + super(mainUI, ACTION_NAME, "<NONE>", "<NONE>", "add", "ctrl pressed N"); + } + + @Override + protected void actionPerformed(ContentUI<?, ?> contentUI) { + + if (contentUI instanceof ContentListUI) { + ContentListUI ui = (ContentListUI) contentUI; + ui.getHandler().addChild(); + } + } +} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/DeleteDataUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/DeleteDataUIAction.java similarity index 92% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/DeleteDataUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/DeleteDataUIAction.java index 29f16b0..10327c0 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/DeleteDataUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/DeleteDataUIAction.java @@ -19,9 +19,10 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.content.AbstractContentUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; import javax.swing.SwingUtilities; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/DeleteReferenceUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/DeleteReferenceUIAction.java similarity index 92% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/DeleteReferenceUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/DeleteReferenceUIAction.java index 6d1eac7..e205d04 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/DeleteReferenceUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/DeleteReferenceUIAction.java @@ -19,9 +19,10 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.content.AbstractContentUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; import static org.nuiton.i18n.I18n.n; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/DeleteTableEntryUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/DeleteTableEntryUIAction.java similarity index 84% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/DeleteTableEntryUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/DeleteTableEntryUIAction.java index ab78e22..b69ceef 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/DeleteTableEntryUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/DeleteTableEntryUIAction.java @@ -1,6 +1,7 @@ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.content.AbstractContentUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.table.ContentTableUI; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/MoveActivityLonglinesUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveActivityLonglinesUIAction.java similarity index 99% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/MoveActivityLonglinesUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveActivityLonglinesUIAction.java index 796ec5f..4fdeed0 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/MoveActivityLonglinesUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveActivityLonglinesUIAction.java @@ -19,7 +19,7 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; import fr.ird.observe.application.swing.ObserveOpenDataManager; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/MoveActivitySeinesUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveActivitySeinesUIAction.java similarity index 98% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/MoveActivitySeinesUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveActivitySeinesUIAction.java index dca5e7d..26a9630 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/MoveActivitySeinesUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveActivitySeinesUIAction.java @@ -19,13 +19,14 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; import fr.ird.observe.application.swing.ObserveOpenDataManager; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.decoration.ObserveI18nDecoratorHelper; import fr.ird.observe.application.swing.decoration.decorators.DataReferenceDecorator; import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.content.AbstractContentUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.list.impl.seine.ActivitySeinesUI; import fr.ird.observe.application.swing.ui.content.list.impl.seine.ActivitySeinesUIModel; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/MoveRoutesUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveRoutesUIAction.java similarity index 79% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/MoveRoutesUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveRoutesUIAction.java index e2bdf49..7abe582 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/MoveRoutesUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveRoutesUIAction.java @@ -19,13 +19,14 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; import fr.ird.observe.application.swing.ObserveOpenDataManager; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.decoration.ObserveI18nDecoratorHelper; import fr.ird.observe.application.swing.decoration.decorators.DataReferenceDecorator; import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.content.AbstractContentUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.list.impl.seine.RoutesUI; import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; @@ -37,10 +38,7 @@ import fr.ird.observe.services.dto.seine.RouteDto; import fr.ird.observe.services.dto.seine.TripSeineDto; import fr.ird.observe.services.service.data.seine.RouteService; -import javax.swing.JComponent; import javax.swing.JOptionPane; -import javax.swing.SwingUtilities; -import java.awt.event.ActionEvent; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -54,7 +52,7 @@ import static org.nuiton.i18n.I18n.t; * @author Kevin Morin (Code Lutin) * @since 5.0 */ -public class MoveRoutesUIAction extends AbstractUIAction { +public class MoveRoutesUIAction extends AbstractContentUIAction { private static final long serialVersionUID = 1L; @@ -71,41 +69,32 @@ public class MoveRoutesUIAction extends AbstractUIAction { } @Override - public void actionPerformed(ActionEvent e) { + protected void actionPerformed(ContentUI<?, ?> ui) { - SwingUtilities.invokeLater(() -> { - JComponent c = (JComponent) e.getSource(); - ContentUI<?, ?> ui = (ContentUI<?, ?>) c.getClientProperty("ui"); - if (ui == null) { - throw new IllegalStateException("could not find client property ui on component" + c); - } - - if (!(ui instanceof RoutesUI)) { - throw new IllegalStateException("Can not come here!"); - } - - RoutesUI theUi = (RoutesUI) ui; + if (!(ui instanceof RoutesUI)) { + throw new IllegalStateException("Can not come here!"); + } - // get current tripseine id - ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); - ObserveNode oldRoutesNode = treeHelper.getSelectedNode(); - ObserveNode oldTripSeineNode = oldRoutesNode.getParent(); + RoutesUI theUi = (RoutesUI) ui; - // choose the new tripseine - String tripSeineId = chooseNewTripSeine(theUi, oldTripSeineNode); + // get current tripseine id + ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); + ObserveNode oldRoutesNode = treeHelper.getSelectedNode(); + ObserveNode oldTripSeineNode = oldRoutesNode.getParent(); - if (tripSeineId != null) { - // change the tripseine of the selected routes - List<DataReference<RouteDto>> selectedDatas = theUi.getModel().getSelectedDatas(); - List<String> routeIds = selectedDatas.stream().map(DataReference.ID_FUNCTION).collect(Collectors.toList()); - RouteService service = ObserveSwingApplicationContext.get().getMainDataSourceServicesProvider().newRouteService(); - List<Integer> positions = service.moveRoutesToTripSeine(routeIds, tripSeineId); + // choose the new tripseine + String tripSeineId = chooseNewTripSeine(theUi, oldTripSeineNode); - // update the tree - updateTree(oldRoutesNode, tripSeineId, routeIds); - } + if (tripSeineId != null) { + // change the tripseine of the selected routes + List<DataReference<RouteDto>> selectedDatas = theUi.getModel().getSelectedDatas(); + List<String> routeIds = selectedDatas.stream().map(DataReference.ID_FUNCTION).collect(Collectors.toList()); + RouteService service = ObserveSwingApplicationContext.get().getMainDataSourceServicesProvider().newRouteService(); + List<Integer> positions = service.moveRoutesToTripSeine(routeIds, tripSeineId); - }); + // update the tree + updateTree(oldRoutesNode, tripSeineId, routeIds); + } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/MoveTripLonglinesUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveTripLonglinesUIAction.java similarity index 95% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/MoveTripLonglinesUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveTripLonglinesUIAction.java index bff6c8d..8aabffd 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/MoveTripLonglinesUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveTripLonglinesUIAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; /*- * #%L @@ -24,6 +24,7 @@ package fr.ird.observe.application.swing.ui.actions.shared; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.content.MoveTripsUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.list.impl.longline.TripLonglinesUI; import fr.ird.observe.application.swing.ui.content.list.impl.longline.TripLonglinesUIModel; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/MoveTripSeinesUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveTripSeinesUIAction.java similarity index 95% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/MoveTripSeinesUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveTripSeinesUIAction.java index 4988af1..bca7be6 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/MoveTripSeinesUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveTripSeinesUIAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; /*- * #%L @@ -24,6 +24,7 @@ package fr.ird.observe.application.swing.ui.actions.shared; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.content.MoveTripsUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.list.impl.seine.TripSeinesUI; import fr.ird.observe.application.swing.ui.content.list.impl.seine.TripSeinesUIModel; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/MoveTripsUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveTripsUIAction.java similarity index 83% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/MoveTripsUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveTripsUIAction.java index 043fb8d..c4f73bc 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/MoveTripsUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveTripsUIAction.java @@ -19,7 +19,7 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; import fr.ird.observe.application.swing.ObserveOpenDataManager; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; @@ -37,8 +37,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.swing.JOptionPane; -import javax.swing.SwingUtilities; -import java.awt.event.ActionEvent; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -52,7 +50,7 @@ import static org.nuiton.i18n.I18n.t; * @author Kevin Morin (Code Lutin) * @since 5.0 */ -public abstract class MoveTripsUIAction<T extends DataDto> extends AbstractUIAction { +public abstract class MoveTripsUIAction<T extends DataDto> extends AbstractContentUIAction { private static final long serialVersionUID = 1L; @@ -74,33 +72,28 @@ public abstract class MoveTripsUIAction<T extends DataDto> extends AbstractUIAct } @Override - public void actionPerformed(ActionEvent e) { + protected void actionPerformed(ContentUI<?, ?> ui) { - SwingUtilities.invokeLater(() -> { + checkUIClass(ui); - ContentUI<?, ?> ui = getContentUI(e); - checkUIClass(ui); - - // get current program id - ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); - ObserveNode oldProgramNode = treeHelper.getSelectedNode(); - String oldProgramId = oldProgramNode.getId(); + // get current program id + ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); + ObserveNode oldProgramNode = treeHelper.getSelectedNode(); + String oldProgramId = oldProgramNode.getId(); - // choose the new program - String programId = chooseNewProgram(ui, oldProgramId); + // choose the new program + String programId = chooseNewProgram(ui, oldProgramId); - if (programId != null) { + if (programId != null) { - // change the program of the selected trips - List<DataReference<T>> selectedDatas = ((ContentListUIModel) ui.getModel()).getSelectedDatas(); - List<String> tripIds = selectedDatas.stream().map(DataReference.ID_FUNCTION).collect(Collectors.toList()); - List<Integer> positions = getPositions(tripIds, programId); + // change the program of the selected trips + List<DataReference<T>> selectedDatas = ((ContentListUIModel) ui.getModel()).getSelectedDatas(); + List<String> tripIds = selectedDatas.stream().map(DataReference.ID_FUNCTION).collect(Collectors.toList()); + List<Integer> positions = getPositions(tripIds, programId); - // update the tree - updateTree(ui, oldProgramNode, oldProgramId, programId, tripIds, positions); - } - - }); + // update the tree + updateTree(ui, oldProgramNode, oldProgramId, programId, tripIds, positions); + } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/NewTableEntryUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/NewTableEntryUIAction.java similarity index 83% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/NewTableEntryUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/NewTableEntryUIAction.java index f0e129c..17fe4f7 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/NewTableEntryUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/NewTableEntryUIAction.java @@ -1,6 +1,7 @@ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.content.AbstractContentUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.table.ContentTableUI; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/ReOpenUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/ReOpenUIAction.java similarity index 93% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/ReOpenUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/ReOpenUIAction.java index b122bf9..b96e700 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/ReOpenUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/ReOpenUIAction.java @@ -19,10 +19,11 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.content.AbstractContentUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.list.ContentListUI; import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI; @@ -56,7 +57,7 @@ public class ReOpenUIAction extends AbstractContentUIAction { } @Override - protected void actionPerformed(ContentUI<?, ?> ui) { + public void actionPerformed(ContentUI<?, ?> ui) { ContentOpenableUI<?, ?> openUI; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/ResetEditUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/ResetEditUIAction.java similarity index 74% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/ResetEditUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/ResetEditUIAction.java index da7a884..b922346 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/ResetEditUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/ResetEditUIAction.java @@ -19,10 +19,12 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.content.AbstractContentUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; +import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import static org.nuiton.i18n.I18n.n; @@ -50,8 +52,15 @@ public class ResetEditUIAction extends AbstractContentUIAction { } @Override - protected void actionPerformed(ContentUI<?, ?> contentUI) { - contentUI.resetEdit(); + protected void actionPerformed(ContentUI<?, ?> ui) { + + if (ui.getModel().isCreatingMode()) { + ui.stopEdit(); + ObserveNode parentNode = ui.getTreeHelper().removeNode(ui.getTreeHelper().getSelectedNode()); + ui.getTreeHelper().selectNode(parentNode); + } else { + ui.resetEdit(); + } } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/ResetTableEntryUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/ResetTableEntryUIAction.java similarity index 87% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/ResetTableEntryUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/ResetTableEntryUIAction.java index a0c8bdd..ce0291b 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/ResetTableEntryUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/ResetTableEntryUIAction.java @@ -1,6 +1,7 @@ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.content.AbstractContentUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.table.ContentTableUI; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/SaveEditUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/SaveEditUIAction.java similarity index 91% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/SaveEditUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/SaveEditUIAction.java index 04ad480..597e6ce 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/SaveEditUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/SaveEditUIAction.java @@ -19,14 +19,12 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.content.AbstractContentUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; -import javax.swing.SwingUtilities; -import java.awt.event.ActionEvent; - import static org.nuiton.i18n.I18n.n; /** diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/SaveTableEntryUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/SaveTableEntryUIAction.java similarity index 87% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/SaveTableEntryUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/SaveTableEntryUIAction.java index 469e349..018a011 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/SaveTableEntryUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/SaveTableEntryUIAction.java @@ -1,6 +1,7 @@ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.content.AbstractContentUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.table.ContentTableUI; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/AbstractGlobalUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/AbstractGlobalUIAction.java new file mode 100644 index 0000000..a2df2d9 --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/AbstractGlobalUIAction.java @@ -0,0 +1,18 @@ +package fr.ird.observe.application.swing.ui.actions.global; + +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.shared.AbstractUIAction; + +/** + * Created on 11/11/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.1 + */ +public abstract class AbstractGlobalUIAction extends AbstractUIAction { + + protected AbstractGlobalUIAction(ObserveMainUI mainUI, String actionId, String acceleratorKey) { + super(mainUI, actionId, "<NONE>", "<NONE>", "reset", acceleratorKey); + } + +} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/ChangeFocusGlobalUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/ChangeFocusGlobalUIAction.java new file mode 100644 index 0000000..a88b96a --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/ChangeFocusGlobalUIAction.java @@ -0,0 +1,60 @@ +package fr.ird.observe.application.swing.ui.actions.global; + +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.content.ContentUI; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.JComponent; +import javax.swing.JTree; +import javax.swing.SwingUtilities; +import java.awt.FocusTraversalPolicy; +import java.awt.event.ActionEvent; + +/** + * Created on 11/11/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.1 + */ +public class ChangeFocusGlobalUIAction extends AbstractGlobalUIAction { + + /** Logger */ + private static final Log log = LogFactory.getLog(ChangeFocusGlobalUIAction.class); + + public static final String ACTION_NAME = "focusOnTreeGlobal"; + + public ChangeFocusGlobalUIAction(ObserveMainUI mainUI) { + super(mainUI, ACTION_NAME, "pressed F1"); + } + + @Override + public void actionPerformed(ActionEvent e) { + JTree navigation = getMainUI().getNavigation(); + + JComponent focusComponent; + if (navigation.isFocusOwner()) { + if (log.isInfoEnabled()) { + log.info("Focus to content"); + } + ContentUI<?, ?> contentUI = getContentUI(e); + FocusTraversalPolicy focusTraversalPolicy = contentUI.getFocusTraversalPolicy(); + focusComponent = (JComponent) focusTraversalPolicy.getFirstComponent(contentUI); +// if (focusComponent instanceof JList) { +// JList jList = (JList) focusComponent; +// if (jList.getModel().getSize() > 0) { +// jList.setSelectedIndex(0); +// } +// jList.requestFocusInWindow(); +// } + + } else { + if (log.isInfoEnabled()) { + log.info("Focus to navigation"); + } + focusComponent = navigation; + } + + SwingUtilities.invokeLater(focusComponent::requestFocusInWindow); + } +} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/DeleteDataGlobalUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/DeleteDataGlobalUIAction.java new file mode 100644 index 0000000..60a64a6 --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/DeleteDataGlobalUIAction.java @@ -0,0 +1,45 @@ +package fr.ird.observe.application.swing.ui.actions.global; + +import fr.ird.observe.application.swing.ObserveSwingApplicationContext; +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.global.AbstractGlobalUIAction; +import fr.ird.observe.application.swing.ui.content.ContentUI; +import fr.ird.observe.application.swing.ui.content.table.ContentTableUI; + +import javax.swing.JButton; +import java.awt.event.ActionEvent; + +/** + * Created on 11/11/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.1 + */ +public class DeleteDataGlobalUIAction extends AbstractGlobalUIAction { + + public static final String ACTION_NAME = "deleteDataGlobal"; + + public DeleteDataGlobalUIAction(ObserveMainUI mainUI) { + super(mainUI, ACTION_NAME, "pressed F6"); + } + + + @Override + public void actionPerformed(ActionEvent e) { + + ContentUI<?, ?> contentUI = ObserveSwingApplicationContext.get().getContentUIManager().getSelectedContentUI(); + + JButton button; + if (contentUI instanceof ContentTableUI) { + ContentTableUI ui = (ContentTableUI) contentUI; + button = ui.getDeleteEntry(); + } else { + button = (JButton) contentUI.getObjectById("delete"); + } + if (button != null) { + button.getAction().actionPerformed(e); + } + + } + +} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/NewNextDataGlobalUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/NewNextDataGlobalUIAction.java new file mode 100644 index 0000000..3b9f2e1 --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/NewNextDataGlobalUIAction.java @@ -0,0 +1,45 @@ +package fr.ird.observe.application.swing.ui.actions.global; + +import fr.ird.observe.application.swing.ObserveSwingApplicationContext; +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.global.AbstractGlobalUIAction; +import fr.ird.observe.application.swing.ui.content.ContentUI; +import fr.ird.observe.application.swing.ui.content.list.ContentListUI; +import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI; +import fr.ird.observe.application.swing.ui.content.table.ContentTableUI; + +import java.awt.event.ActionEvent; + +/** + * Created on 11/11/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.1 + */ +public class NewNextDataGlobalUIAction extends AbstractGlobalUIAction { + + public static final String ACTION_NAME = "newNextGlobal"; + + public NewNextDataGlobalUIAction(ObserveMainUI mainUI) { + super(mainUI, ACTION_NAME, "pressed F4"); + } + + @Override + public void actionPerformed(ActionEvent e) { + + ContentUI<?, ?> contentUI = ObserveSwingApplicationContext.get().getContentUIManager().getSelectedContentUI(); + + if (contentUI instanceof ContentListUI) { + ContentListUI ui = (ContentListUI) contentUI; + ui.getCreateChild().getAction().actionPerformed(e); + } else if (contentUI instanceof ContentOpenableUI) { + ContentOpenableUI ui = (ContentOpenableUI) contentUI; + ui.getCloseAndCreate().getAction().actionPerformed(e); + } else if (contentUI instanceof ContentTableUI) { + ContentTableUI ui = (ContentTableUI) contentUI; + ui.getNewEntry().getAction().actionPerformed(e); + } + + } + +} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/OpenCloseDataGlobalUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/OpenCloseDataGlobalUIAction.java new file mode 100644 index 0000000..8c59d34 --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/OpenCloseDataGlobalUIAction.java @@ -0,0 +1,76 @@ +package fr.ird.observe.application.swing.ui.actions.global; + +import fr.ird.observe.application.swing.ObserveOpenDataManager; +import fr.ird.observe.application.swing.ObserveSwingApplicationContext; +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.content.CloseOpenUIAction; +import fr.ird.observe.application.swing.ui.actions.content.ReOpenUIAction; +import fr.ird.observe.application.swing.ui.content.ContentUI; +import fr.ird.observe.application.swing.ui.content.list.ContentListUI; +import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI; + +import java.awt.event.ActionEvent; +import java.util.Objects; + +/** + * Created on 11/11/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.1 + */ +public class OpenCloseDataGlobalUIAction extends AbstractGlobalUIAction { + + public static final String ACTION_NAME = "openCloseDataGlobal"; + + private final ReOpenUIAction openAction; + private final CloseOpenUIAction closeAction; + + public OpenCloseDataGlobalUIAction(ObserveMainUI mainUI) { + super(mainUI, ACTION_NAME, "pressed F3"); + openAction = new ReOpenUIAction(mainUI); + closeAction = new CloseOpenUIAction(mainUI); + } + + @Override + public void actionPerformed(ActionEvent e) { + ContentUI<?, ?> contentUI = ObserveSwingApplicationContext.get().getContentUIManager().getSelectedContentUI(); + + if (contentUI instanceof ContentListUI) { + ContentListUI ui = (ContentListUI) contentUI; + + if (ui.getReopenChild().isEnabled()) { + + // on réouvre + openAction.actionPerformed(ui); + } else if (ui.getCloseChild().isEnabled()) { + + // on ferme + closeAction.actionPerformed(ui); + + } + + return; + } + + if (contentUI.getModel().isCreatingMode() || !(contentUI instanceof ContentOpenableUI)) { + return; + } + + // le seul cas où on peut intervenir (sur un ecran open et pas en mode création) + + String currentId = contentUI.getModel().getBean().getId(); + Objects.requireNonNull(currentId); + + ObserveOpenDataManager openDataManager = ObserveSwingApplicationContext.get().getOpenDataManager(); + + boolean isOpened = openDataManager.isOpen(currentId); + + if (isOpened) { + closeAction.actionPerformed(contentUI); + } else { + openAction.actionPerformed(contentUI); + } + + } + +} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/ResetDataGlobalUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/ResetDataGlobalUIAction.java new file mode 100644 index 0000000..75492b6 --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/ResetDataGlobalUIAction.java @@ -0,0 +1,38 @@ +package fr.ird.observe.application.swing.ui.actions.global; + +import fr.ird.observe.application.swing.ObserveSwingApplicationContext; +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.global.AbstractGlobalUIAction; +import fr.ird.observe.application.swing.ui.content.ContentUI; + +import javax.swing.JButton; +import java.awt.event.ActionEvent; + +/** + * Created on 11/11/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.1 + */ +public class ResetDataGlobalUIAction extends AbstractGlobalUIAction { + + public static final String ACTION_NAME = "resetDataGlobal"; + + public ResetDataGlobalUIAction(ObserveMainUI mainUI) { + super(mainUI, ACTION_NAME, "pressed F7"); + } + + + @Override + public void actionPerformed(ActionEvent e) { + + ContentUI<?, ?> contentUI = ObserveSwingApplicationContext.get().getContentUIManager().getSelectedContentUI(); + + JButton button = (JButton) contentUI.getObjectById("reset"); + if (button != null) { + button.getAction().actionPerformed(e); + } + + } + +} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/SaveDataGlobalUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/SaveDataGlobalUIAction.java new file mode 100644 index 0000000..64869a4 --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/SaveDataGlobalUIAction.java @@ -0,0 +1,38 @@ +package fr.ird.observe.application.swing.ui.actions.global; + +import fr.ird.observe.application.swing.ObserveSwingApplicationContext; +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.global.AbstractGlobalUIAction; +import fr.ird.observe.application.swing.ui.content.ContentUI; + +import javax.swing.JButton; +import java.awt.event.ActionEvent; + +/** + * Created on 11/11/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.1 + */ +public class SaveDataGlobalUIAction extends AbstractGlobalUIAction { + + public static final String ACTION_NAME = "saveDataGlobal"; + + public SaveDataGlobalUIAction(ObserveMainUI mainUI) { + super(mainUI, ACTION_NAME, "pressed F5"); + } + + + @Override + public void actionPerformed(ActionEvent e) { + + ContentUI<?, ?> contentUI = ObserveSwingApplicationContext.get().getContentUIManager().getSelectedContentUI(); + + JButton button = (JButton) contentUI.getObjectById("save"); + if (button != null) { + button.getAction().actionPerformed(e); + } + + } + +} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/AbstractUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/AbstractUIAction.java index 99fa5f1..251cac4 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/AbstractUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/AbstractUIAction.java @@ -21,6 +21,7 @@ */ package fr.ird.observe.application.swing.ui.actions.shared; +import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.ui.ObserveMainUI; import fr.ird.observe.application.swing.ui.content.ContentUI; @@ -139,13 +140,13 @@ public abstract class AbstractUIAction extends AbstractAction { protected boolean canExecuteAction(ActionEvent e) { JComponent editor = getEditor(); - if (!(editor.isVisible() && editor.isEnabled())) { - if (log.isInfoEnabled()) { - log.info("Disabled action: " + getActionCommandKey() + " :: " + this); - } - return false; + if ((editor == null || (editor.isVisible() && editor.isEnabled()))) { + return true; + } + if (log.isInfoEnabled()) { + log.info("Disabled action: " + getActionCommandKey() + " :: " + this); } - return true; + return false; } private JComponent getEditor() { @@ -154,7 +155,7 @@ public abstract class AbstractUIAction extends AbstractAction { public static boolean isOpenActivityNodeCollapsed(JTree tree, ObserveTreeHelper treeHelper, DataContext dataContext) { - // on regarde si le noeud de l'activity ouverte est collapsé + // on regarde si le noeud de l'activité ouverte est collapsé ObserveNode node = treeHelper.getSelectedNode(); @@ -173,6 +174,8 @@ public abstract class AbstractUIAction extends AbstractAction { JComponent c = (JComponent) e.getSource(); ContentUI<?, ?> ui; + //FIXME On devrait peut-être toujours se baser sur le contentui manager + //FIXME et ne plus rien attacher aux editeurs ? if (c instanceof ContentUI) { ui = (ContentUI<?, ?>) c; } else if (c.getParent() instanceof ContentUI) { @@ -180,7 +183,9 @@ public abstract class AbstractUIAction extends AbstractAction { } else { ui = (ContentUI<?, ?>) c.getClientProperty("ui"); } - Objects.requireNonNull(ui, "could not find client property ui on component" + c); + if (ui == null) { + ui = ObserveSwingApplicationContext.get().getContentUIManager().getSelectedContentUI(); + } return ui; } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/Common.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/Common.jcss index f3e4867..643d755 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/Common.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/Common.jcss @@ -20,6 +20,10 @@ * #L% */ +JButton { + _protectFocus:true; +} + TimeEditor { bean:{bean}; } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUI.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUI.jcss index 9edb264..2d23bbe 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUI.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUI.jcss @@ -36,6 +36,7 @@ #actionDown { _observeAction:{GoDownUIAction.ACTION_NAME}; + _protectFocus:true; } #actionUpPane { @@ -44,6 +45,7 @@ #actionUp { _observeAction:{GoUpUIAction.ACTION_NAME}; + _protectFocus:true; } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIBlockingLayerUI.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIBlockingLayerUI.java index e60fbfe..5101388 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIBlockingLayerUI.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIBlockingLayerUI.java @@ -15,7 +15,6 @@ import javax.swing.KeyStroke; import javax.swing.SwingUtilities; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; -import java.util.Objects; import java.util.Set; /** @@ -49,7 +48,7 @@ public class ContentUIBlockingLayerUI extends BlockingLayerUI { @Override protected void processKeyEvent(KeyEvent e, JXLayer<? extends JComponent> l) { - InputMap inputMap = ui.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + InputMap inputMap = ui.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); ActionMap actionMap = ui.getActionMap(); boolean consumed = false; @@ -65,10 +64,10 @@ public class ContentUIBlockingLayerUI extends BlockingLayerUI { consumed = doAction(keyStroke, inputMap, actionMap); } - if (!consumed && !e.isControlDown() && !e.isShiftDown() && !e.isAltDown() && !e.isAltGraphDown() + if (!consumed && e.getID() == KeyEvent.KEY_PRESSED && !e.isControlDown() && !e.isShiftDown() && !e.isAltDown() && !e.isAltGraphDown() && !e.isMetaDown() && GLOBAL_KEY_CODES.contains(e.getKeyCode())) { - KeyStroke keyStroke = KeyStroke.getKeyStroke("pressed " + (char) e.getKeyCode()); + KeyStroke keyStroke = KeyStroke.getKeyStroke(e.getKeyCode(), 0); if (keyStroke == null) { super.processKeyEvent(e, l); @@ -94,8 +93,7 @@ public class ContentUIBlockingLayerUI extends BlockingLayerUI { Action action = actionMap.get(actionName); JComponent editor = (JComponent) action.getValue(AbstractUIAction.EDITOR); - Objects.requireNonNull(editor, "No editor on action: " + action); - if (editor.isVisible() && editor.isEnabled()) { + if (editor == null || (editor.isVisible() && editor.isEnabled())) { if (log.isInfoEnabled()) { log.info("Found action: " + action.getValue(Action.NAME) + " for keyStroke: " + keyStroke); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIHandler.java index f19ecba..d5d0443 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIHandler.java @@ -244,17 +244,17 @@ public abstract class ContentUIHandler<E extends IdDto, U extends ContentUI<E, U return wasClosed; } - public static <E extends IdDto, U extends ContentUI<E,U>> void addMessage(U ui, NuitonValidatorScope scope, String fieldName, String message) { + public static <E extends IdDto, U extends ContentUI<E, U>> void addMessage(U ui, NuitonValidatorScope scope, String fieldName, String message) { SwingValidatorMessageTableModel model = ui.getErrorTableModel(); model.addMessages(ui, fieldName, scope, message); } - public static <E extends IdDto, U extends ContentUI<E,U>>void removeAllMessages(U ui, NuitonValidatorScope scope, String fieldName) { + public static <E extends IdDto, U extends ContentUI<E, U>> void removeAllMessages(U ui, NuitonValidatorScope scope, String fieldName) { SwingValidatorMessageTableModel model = ui.getErrorTableModel(); model.removeMessages(ui, fieldName, scope); } - protected static <E extends IdDto, U extends ContentUI<E,U>> void removeAllMessages(U ui) { + protected static <E extends IdDto, U extends ContentUI<E, U>> void removeAllMessages(U ui) { SwingValidatorMessageTableModel model = ui.getErrorTableModel(); model.removeMessages(ui, null); } @@ -303,7 +303,59 @@ public abstract class ContentUIHandler<E extends IdDto, U extends ContentUI<E, U getModel().addPropertyChangeListener(ContentUIModel.PROPERTY_FORM, evt -> updateUiWithReferenceSetsFromModel()); - ObserveSwingApplicationContext.get().getFocusManager().setFocusTraversalPolicy(ui); + ObserveSwingApplicationContext.get().getFocusManager().installFocusTraversalPolicy(ui); + +// addFocusabelOnForm(); + + } + + protected void addFocusabelOnForm() { + getModel().addPropertyChangeListener(ContentUIModel.PROPERTY_MODE, evt -> updateFocusable((ContentMode) evt.getNewValue())); + updateFocusable(ContentMode.READ); + } + + public void updateFocusable(ContentMode newMode) { + if (newMode == null) { + return; + } + switch (newMode) { + case CREATE: + case UPDATE: + ui.get$objectMap().values().stream().filter(o -> o instanceof JComponent).forEach(o -> { + JComponent component = (JComponent) o; + if (BooleanUtils.isTrue((Boolean) component.getClientProperty("protectFocus"))) { + return; + } + if (component instanceof BeanComboBox) { + BeanComboBox beanComboBox = (BeanComboBox) component; + component = beanComboBox.getCombobox(); + } + Boolean focusable = (Boolean) component.getClientProperty("_focusable"); + component.setFocusable(BooleanUtils.isTrue(focusable)); + + }); + break; + case READ: + + // remove all focusables + ui.get$objectMap().values().stream().filter(o -> o instanceof JComponent).forEach(o -> { + JComponent component = (JComponent) o; + if (BooleanUtils.isTrue((Boolean) component.getClientProperty("protectFocus"))) { + return; + } + if (component instanceof BeanComboBox) { + BeanComboBox beanComboBox = (BeanComboBox) component; + component = beanComboBox.getCombobox(); + } + boolean focusable = component.isFocusable(); + if (focusable) { + component.putClientProperty("_focusable", true); + component.setFocusable(false); + } + + }); + break; + } } public void openUI() { @@ -324,8 +376,7 @@ public abstract class ContentUIHandler<E extends IdDto, U extends ContentUI<E, U // suppression des messages de validation removeAllMessages(ui); ObserveTreeHelper treeHelper = getTreeHelper(ui); - AbstractObserveTreeCellRenderer render = - treeHelper.getTreeCellRenderer(); + AbstractObserveTreeCellRenderer render = treeHelper.getTreeCellRenderer(); ObserveNode node = treeHelper.getSelectedNode(); if (ContentReferenceUIHandler.class.isAssignableFrom(getClass())) { node = node.getParent(); @@ -333,6 +384,12 @@ public abstract class ContentUIHandler<E extends IdDto, U extends ContentUI<E, U ui.setContentIcon(render.getNavigationIcon(node)); updateActions(); + + JComponent firstComponent = (JComponent) ui.getFocusTraversalPolicy().getFirstComponent(ui); + if (log.isInfoEnabled()) { + log.info("Grab focus on first component: " + firstComponent); + } + firstComponent.grabFocus(); } public Icon getErrorIconIfFalse(boolean valid) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIInitializer.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIInitializer.java index bf5e7c1..6d15481 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIInitializer.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIInitializer.java @@ -207,6 +207,9 @@ public class ContentUIInitializer<E extends IdDto, UI extends ContentUI<E, UI>> Set<String> doNotBlockComponentIds = new HashSet<>(); + ui.getActionMap().setParent(actionMap); + ui.setInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW ,ObserveSwingApplicationContext.get().getMainUI().getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)); + for (String name : ui.get$objectMap().keySet()) { Object o = ui.getObjectById(name); @@ -493,6 +496,10 @@ public class ContentUIInitializer<E extends IdDto, UI extends ContentUI<E, UI>> } editor.setFormat(ObserveSwingApplicationContext.get().getConfig().getCoordinateFormat()); editor.init(); + editor.getDmdFormat().setFocusable(false); + editor.getDmsFormat().setFocusable(false); + editor.getDdFormat().setFocusable(false); + } protected void init(JTextField editor) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIManager.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIManager.java index 1e70471..0182303 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIManager.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIManager.java @@ -99,7 +99,11 @@ import org.apache.commons.logging.LogFactory; import javax.swing.JComponent; import javax.swing.JPanel; +import javax.swing.JTree; +import javax.swing.SwingUtilities; import java.awt.Component; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.lang.reflect.Constructor; import java.util.Map; import java.util.TreeMap; @@ -121,7 +125,7 @@ public class ContentUIManager { /** Logger */ static private final Log log = LogFactory.getLog(ContentUIManager.class); - private final Map<String, Class<? extends ObserveContentUI<?, ?>>> mapping; + private final Map<String, Class<? extends ContentUI<?, ?>>> mapping; public ContentUIManager() { @@ -191,7 +195,7 @@ public class ContentUIManager { } - public Class<? extends ObserveContentUI<?, ?>> convertNodeToContentUI(ObserveNode node) { + public Class<? extends ContentUI<?, ?>> convertNodeToContentUI(ObserveNode node) { if (log.isDebugEnabled()) { log.debug("Entrer for node = " + node); } @@ -230,7 +234,7 @@ public class ContentUIManager { return mapping.get(mappingKey); } - public <U extends ObserveContentUI<?, ?>> U getContent(Class<U> uiClass) { + public <U extends ContentUI<?, ?>> U getContent(Class<U> uiClass) { CardLayout2 layout = getLayout(); JPanel layoutContent = getLayoutContent(); @@ -250,7 +254,7 @@ public class ContentUIManager { return content; } - public <U extends ObserveContentUI<?, ?>> U createContent(Class<U> uiClass) { + public <U extends ContentUI<?, ?>> U createContent(Class<U> uiClass) { String constraints = uiClass.getName(); @@ -271,14 +275,33 @@ public class ContentUIManager { try { // ajout du content dans son parent - getLayoutContent().add((JComponent) result, constraints); - + getLayoutContent().add(result, constraints); if (log.isDebugEnabled()) { log.debug("Add new content [" + constraints + "] : " + result.getClass().getName()); } // initialisation du content result.init(); + result.addMouseListener(new MouseAdapter() { + @Override + public void mouseEntered(MouseEvent e) { + if (log.isInfoEnabled()) { + log.info("grab enter focus: " + e); + } + ((JComponent) e.getSource()).grabFocus(); + } + + @Override + public void mouseMoved(MouseEvent e) { + if (!((JComponent) e.getSource()).isFocusOwner()) { + if (log.isInfoEnabled()) { + log.info("grab moved focus: " + e); + } + ((JComponent) e.getSource()).grabFocus(); + } + } + }); + return result; } catch (Exception e) { @@ -286,12 +309,7 @@ public class ContentUIManager { } } - public ObserveContentUI<?, ?> getCurrentContent() { - return (ObserveContentUI<?, ?>) - getLayout().getVisibleComponent(getLayoutContent()); - } - - public void openContent(ObserveContentUI<?, ?> content) { + public void openContent(ContentUI<?, ?> content) { String constraints = content.getClass().getName(); @@ -299,12 +317,15 @@ public class ContentUIManager { log.debug("Will open ui [" + constraints + "] : " + content.getClass()); } + JTree navigation = getMainUI().getNavigation(); + boolean focusOnNavigation = navigation.isFocusOwner(); + // on ouvre l'ui try { content.open(); ObserveSwingSessionHelper swingSessionHelper = ObserveSwingApplicationContext.get().getSwingSessionHelper(); - swingSessionHelper.addComponent((Component) content, true); + swingSessionHelper.addComponent(content, true); swingSessionHelper.save(); } catch (Exception e) { @@ -314,6 +335,11 @@ public class ContentUIManager { // on affiche l'ui quoi qu'il arrive ? getLayout().show(getLayoutContent(), constraints); } + + if (focusOnNavigation) { + SwingUtilities.invokeLater(navigation::grabFocus); + } + } public void close() { @@ -409,7 +435,7 @@ public class ContentUIManager { if (log.isDebugEnabled()) { log.debug("Add key: " + key + " → " + contentClass.getName()); } - mapping.put(key, (Class<? extends ContentUI<?, ?>>) contentClass); + mapping.put(key, (Class) contentClass); } private String getMappingKey(String prefix, Class<?> klass, String context) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ObserveActionMap.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ObserveActionMap.java index c59c0e2..71556dd 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ObserveActionMap.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ObserveActionMap.java @@ -3,6 +3,7 @@ package fr.ird.observe.application.swing.ui.content; import com.google.common.collect.ImmutableMap; import fr.ird.observe.application.swing.ObserveSwingTechnicalException; import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.global.AbstractGlobalUIAction; import fr.ird.observe.application.swing.ui.actions.shared.AbstractUIAction; import org.apache.commons.beanutils.ConstructorUtils; import org.apache.commons.logging.Log; @@ -11,6 +12,8 @@ import org.reflections.Reflections; import javax.swing.Action; import javax.swing.ActionMap; +import javax.swing.InputMap; +import javax.swing.JComponent; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Modifier; import java.util.Set; @@ -27,40 +30,82 @@ public class ObserveActionMap extends ActionMap { private static final Log log = LogFactory.getLog(ObserveActionMap.class); private final ObserveMainUI ui; - private final ImmutableMap<String, Class<? extends AbstractUIAction>> mapping; + private final ImmutableMap<String, ? extends AbstractGlobalUIAction> globalActions; public ObserveActionMap(ObserveMainUI ui) { this.ui = ui; - Set<Class<? extends AbstractUIAction>> actionTypes = new Reflections("fr.ird.observe.application.swing.ui.actions.shared").getSubTypesOf(AbstractUIAction.class); + Set<Class<? extends AbstractUIAction>> actionTypes = new Reflections("fr.ird.observe.application.swing.ui.actions").getSubTypesOf(AbstractUIAction.class); + + InputMap inputMap = ui.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); ImmutableMap.Builder<String, Class<? extends AbstractUIAction>> mappingBuilder = ImmutableMap.builder(); + ImmutableMap.Builder<String, AbstractGlobalUIAction> globalActionsBuilder = ImmutableMap.builder(); for (Class<? extends AbstractUIAction> actionType : actionTypes) { if (Modifier.isAbstract(actionType.getModifiers())) { continue; } + String actionId; try { - String actionId = (String) actionType.getDeclaredField("ACTION_NAME").get(null); - mappingBuilder.put(actionId, actionType); + actionId = (String) actionType.getDeclaredField("ACTION_NAME").get(null); } catch (IllegalAccessException | NoSuchFieldException e) { throw new ObserveSwingTechnicalException("Can't find ACTION_NAME field on action: " + actionType.getName()); } + if (AbstractGlobalUIAction.class.isAssignableFrom(actionType)) { + + // action globale + Class<? extends AbstractGlobalUIAction> globalActionType = (Class) actionType; + if (log.isInfoEnabled()) { + log.info("Register global action: " + actionId + " - type: " + globalActionType.getName()); + } + AbstractGlobalUIAction globalUIAction = newAction(actionId, globalActionType); + globalActionsBuilder.put(actionId, globalUIAction); + inputMap.put(globalUIAction.getAcceleratorKey(), actionId); + + } else { + + // action simple + if (log.isInfoEnabled()) { + log.info("Register action: " + actionId + " - type: " + actionType.getName()); + } + mappingBuilder.put(actionId, actionType); + + } + } mapping = mappingBuilder.build(); + globalActions = globalActionsBuilder.build(); + } @Override public Action get(Object key) { + + AbstractGlobalUIAction globalUIAction = globalActions.get(key); + if (globalUIAction != null) { + return globalUIAction; + } + Class<? extends AbstractUIAction> actionType = mapping.get(key); if (actionType == null) { return super.get(key); } + return newAction((String) key, actionType); + + } + + public ImmutableMap<String, ? extends AbstractGlobalUIAction> getGlobalActions() { + return globalActions; + } + + private <A extends AbstractUIAction> A newAction(String key, Class<A> actionType) { + try { if (log.isInfoEnabled()) { log.info("Create action: " + key + ", type: " + actionType.getName()); @@ -71,4 +116,5 @@ public class ObserveActionMap extends ActionMap { } } + } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ObserveFocusManager.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ObserveFocusManager.java index c649f10..c5c28fe 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ObserveFocusManager.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ObserveFocusManager.java @@ -7,6 +7,12 @@ import fr.ird.observe.application.swing.ui.content.impl.seine.FloatingObjectTran import fr.ird.observe.application.swing.ui.content.impl.seine.FloatingObjectUI; import fr.ird.observe.application.swing.ui.content.impl.seine.SetSeineUI; import fr.ird.observe.application.swing.ui.content.list.ContentListUI; +import fr.ird.observe.application.swing.ui.content.list.impl.longline.ActivityLonglinesUI; +import fr.ird.observe.application.swing.ui.content.list.impl.longline.TripLonglinesUI; +import fr.ird.observe.application.swing.ui.content.list.impl.seine.ActivitySeinesUI; +import fr.ird.observe.application.swing.ui.content.list.impl.seine.RoutesUI; +import fr.ird.observe.application.swing.ui.content.list.impl.seine.TripSeinesUI; +import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI; import fr.ird.observe.application.swing.ui.content.open.impl.longline.ActivityLonglineUI; import fr.ird.observe.application.swing.ui.content.open.impl.longline.TripLonglineUI; import fr.ird.observe.application.swing.ui.content.open.impl.seine.ActivitySeineUI; @@ -37,6 +43,10 @@ import fr.ird.observe.application.swing.ui.content.table.impl.seine.SchoolEstima import fr.ird.observe.application.swing.ui.content.table.impl.seine.TargetCatchUI; import fr.ird.observe.application.swing.ui.content.table.impl.seine.TargetDiscardCatchUI; import fr.ird.observe.application.swing.ui.content.table.impl.seine.TargetSampleUI; +import jaxx.runtime.swing.editor.NumberEditor; +import jaxx.runtime.swing.editor.bean.BeanComboBox; +import org.jdesktop.swingx.JXDatePicker; +import org.nuiton.jaxx.widgets.select.FilterableDoubleList; import javax.swing.JButton; import javax.swing.JComponent; @@ -61,12 +71,9 @@ public class ObserveFocusManager { private final ImmutableMap<Class<? extends ContentUI>, ObserveLayoutFocusTraversalPolicy> policies; - public <U extends ContentUI> void setFocusTraversalPolicy(U ui) { + public <U extends ContentUI> void installFocusTraversalPolicy(U ui) { Objects.requireNonNull(ui); Class<? extends ContentUI> uiClass = ui.getClass(); - if (ui instanceof ContentListUI) { - uiClass = ContentListUI.class; - } ObserveLayoutFocusTraversalPolicy policy = policies.get(uiClass); if (policy == null && ui instanceof ContentReferenceUI) { uiClass = ContentReferenceUI.class; @@ -86,22 +93,7 @@ public class ObserveFocusManager { builder.put(LonglineDetailCompositionUI.class, new ObserveLayoutFocusTraversalPolicy<LonglineDetailCompositionUI>() { @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - LonglineDetailCompositionUI ui = getUi(); - int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); - if (selectedIndex == 2) { - if (aComponent.equals(ui.getBranchlineDetailUI().getTopType().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - if (aComponent.equals(ui.getBranchlineDetailUI().getHookType().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - } - return super.getComponentBefore(aContainer, aComponent); - } - - @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { LonglineDetailCompositionUI ui = getUi(); int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); if (selectedIndex == 2) { @@ -117,8 +109,7 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { - + protected Component getLastComponentForEdit(Container aContainer) { LonglineDetailCompositionUI ui = getUi(); if (ui.getSave().isEnabled()) { return ui.getSave(); @@ -132,12 +123,13 @@ public class ObserveFocusManager { } return super.getLastComponent(aContainer); } + }); builder.put(SetLonglineUI.class, new ObserveLayoutFocusTraversalPolicy<SetLonglineUI>() { @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { SetLonglineUI ui = getUi(); int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); switch (selectedIndex) { @@ -152,42 +144,20 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { return getUi().getDelete(); } - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - SetLonglineUI ui = getUi(); - if (aComponent.equals(ui.getHomeId())) { - return getLastComponent(aContainer); - } - if (aComponent.equals(ui.getHaulingDirectionSameAsSetting())) { - return getLastComponent(aContainer); - } - if (aComponent.equals(ui.getSettingShape().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - return super.getComponentBefore(aContainer, aComponent); - } }); builder.put(FloatingObjectTransmittingBuoyOperationUI.class, new ObserveLayoutFocusTraversalPolicy<FloatingObjectTransmittingBuoyOperationUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - - if (aComponent.equals(getUi().getTypeOperation())) { - return getLastComponent(aContainer); - } - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { return getUi().getTypeOperation(); } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { FloatingObjectTransmittingBuoyOperationUI ui = getUi(); if (ui.getSave().isEnabled()) { return ui.getSave(); @@ -201,25 +171,9 @@ public class ObserveFocusManager { }); builder.put(SetSeineUI.class, new ObserveLayoutFocusTraversalPolicy<SetSeineUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - SetSeineUI ui = getUi(); - int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); - switch (selectedIndex) { - case 0: - if (aComponent.getParent().equals(ui.getStartTime().getHourEditor().getEditor())) { - return getLastComponent(aContainer); - } - case 1: - if (aComponent.equals(ui.getSchoolThickness().getTextField())) { - return getLastComponent(aContainer); - } - } - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { SetSeineUI ui = getUi(); int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); switch (selectedIndex) { @@ -233,7 +187,7 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { SetSeineUI ui = getUi(); if (ui.getDelete().isVisible() && ui.getDelete().isEnabled()) { return ui.getDelete(); @@ -243,25 +197,18 @@ public class ObserveFocusManager { } return ui.getReset(); } + }); builder.put(FloatingObjectUI.class, new ObserveLayoutFocusTraversalPolicy<FloatingObjectUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - FloatingObjectUI ui = getUi(); - if (aComponent.equals(ui.getObjectOperation().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { return getUi().getObjectOperation(); } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { FloatingObjectUI ui = getUi(); if (ui.getDelete().isVisible() && ui.getDelete().isEnabled()) { return ui.getDelete(); @@ -271,145 +218,75 @@ public class ObserveFocusManager { } return ui.getReset(); } - }); - - builder.put(ContentListUI.class, new ObserveLayoutFocusTraversalPolicy<ContentListUI>() { - - private List<JComponent> actions; - - @Override - public Component getFirstComponent(Container aContainer) { - return getUi().getList(); - } - - public List<JComponent> getActions() { - if (actions == null) { - - actions = new ArrayList<>(); - actions.add(getUi().getGotoSelectedChild()); - actions.add(getUi().getReopenChild()); - actions.add(getUi().getCloseChild()); - actions.add(getUi().getGotoOpenChild()); - actions.add(getUi().getGotoOpenChild2()); - actions.add(getUi().getCreateChild()); - for (Component component : getUi().getExtraActions().getComponents()) { - if (component instanceof JButton) { - actions.add((JComponent) component); - } - } - actions.add(getUi().getMoveSelectedChildren()); - - } - List<JComponent> result = new ArrayList<>(actions); - Collections.reverse(result); - return result; - } - - @Override - public Component getLastComponent(Container aContainer) { - Optional<JComponent> optional = getActions().stream().filter(a -> a.isEnabled() && a.isVisible()).findFirst(); - return optional.isPresent() ? optional.get() : super.getLastComponent(aContainer); - } - - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - if (aComponent.equals(getUi().getList())) { - return getLastComponent(aContainer); - } - return super.getComponentBefore(aContainer, aComponent); - } }); + builder.put(TripSeinesUI.class, new ContentListUIObserveLayoutFocusTraversalPolicy()); + builder.put(RoutesUI.class, new ContentListUIObserveLayoutFocusTraversalPolicy()); + builder.put(ActivitySeinesUI.class, new ContentListUIObserveLayoutFocusTraversalPolicy()); + builder.put(TripLonglinesUI.class, new ContentListUIObserveLayoutFocusTraversalPolicy()); + builder.put(ActivityLonglinesUI.class, new ContentListUIObserveLayoutFocusTraversalPolicy()); + builder.put(TripLonglineUI.class, new ObserveLayoutFocusTraversalPolicy<TripLonglineUI>() { @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { + protected Component getFirstComponentForEdit(Container aContainer) { TripLonglineUI ui = getUi(); - if (aComponent.equals(ui.getTripType().getCombobox().getEditor().getEditorComponent())) { - if (ui.getCloseAndCreate().isEnabled()) { - return ui.getCloseAndCreate(); + if (ui.getModel().isReadingMode()) { + if (ui.getReopen().isVisible()) { + return ui.getReopen(); } - return ui.getDelete(); + if (ui.getActionUp().isEnabled()) { + return ui.getActionUp(); + } + return ui.getActionDown(); } - return super.getComponentBefore(aContainer, aComponent); + return ui.getTripType(); } @Override - public Component getComponentAfter(Container aContainer, Component aComponent) { + protected Component getLastComponentForEdit(Container aContainer) { TripLonglineUI ui = getUi(); - if (!ui.getCloseAndCreate().isEnabled() && aComponent.equals(ui.getDelete())) { - - // retour au début - return ui.getTripType(); + if (ui.getCloseAndCreate().isVisible() && ui.getCloseAndCreate().isEnabled()) { + return ui.getCloseAndCreate(); } - if (aComponent.equals(ui.getCloseAndCreate())) { - - // retour au début - return ui.getTripType(); + if (ui.getDelete().isVisible() && ui.getDelete().isEnabled()) { + return ui.getDelete(); } - return super.getComponentAfter(aContainer, aComponent); + if (ui.getModel().isReadingMode()) { + if (ui.getReopen().isVisible()) { + return ui.getReopen(); + } + if (ui.getActionDown().isEnabled()) { + return ui.getActionDown(); + } + return ui.getActionUp(); + } + return ui.getActionUp(); } + }); builder.put(ActivityLonglineUI.class, new ObserveLayoutFocusTraversalPolicy<ActivityLonglineUI>() { @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - ActivityLonglineUI ui = getUi(); - if (aComponent.equals(ui.getTimeStamp().getDayDateEditor().getEditor())) { - if (ui.getCloseAndCreate().isEnabled()) { - return ui.getCloseAndCreate(); - } - return ui.getDelete(); - } - return super.getComponentBefore(aContainer, aComponent); + protected Component getFirstComponentForEdit(Container aContainer) { + return getUi().getTimeStamp().getDayDateEditor(); } @Override - public Component getComponentAfter(Container aContainer, Component aComponent) { + protected Component getLastComponentForEdit(Container aContainer) { ActivityLonglineUI ui = getUi(); - if (!ui.getCloseAndCreate().isEnabled() && aComponent.equals(ui.getDelete())) { - - // retour au début - return ui.getTimeStamp().getDayDateEditor().getEditor(); - } - if (aComponent.equals(ui.getCloseAndCreate())) { - - // retour au début - return ui.getTimeStamp().getDayDateEditor().getEditor(); + if (ui.getCloseAndCreate().isEnabled()) { + return ui.getCloseAndCreate(); } - return super.getComponentAfter(aContainer, aComponent); + return ui.getDelete(); } + }); builder.put(ActivitySeineUI.class, new ObserveLayoutFocusTraversalPolicy<ActivitySeineUI>() { @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - ActivitySeineUI ui = getUi(); - int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); - switch (selectedIndex) { - case 0: - if (aComponent.getParent().equals(ui.getTime().getHourEditor().getEditor())) { - if (ui.getCloseAndCreate().isEnabled()) { - return ui.getCloseAndCreate(); - } - return ui.getDelete(); - } - break; - case 1: - if (aComponent.equals(ui.getVesselSpeed().getTextField())) { - return getLastComponent(aContainer); - } - case 2: - if (aComponent.equals(ui.getObservedSystem().getUniverseList())) { - return getLastComponent(aContainer); - } - } - return super.getComponentBefore(aContainer, aComponent); - } - - @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { ActivitySeineUI ui = getUi(); int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); switch (selectedIndex) { @@ -425,7 +302,7 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { ActivitySeineUI ui = getUi(); if (ui.getModel().isCreatingMode()) { if (ui.getSave().isEnabled()) { @@ -435,99 +312,47 @@ public class ObserveFocusManager { } else return ui.getCloseAndCreate(); } + }); builder.put(TripSeineUI.class, new ObserveLayoutFocusTraversalPolicy<TripSeineUI>() { @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - TripSeineUI ui = getUi(); - if (aComponent.equals(ui.getCaptain().getCombobox().getEditor().getEditorComponent())) { - if (ui.getCloseAndCreate().isEnabled()) { - return ui.getCloseAndCreate(); - } - return ui.getDelete(); - } - return super.getComponentBefore(aContainer, aComponent); + protected Component getFirstComponentForEdit(Container aContainer) { + return getUi().getCaptain(); } @Override - public Component getComponentAfter(Container aContainer, Component aComponent) { + protected Component getLastComponentForEdit(Container aContainer) { TripSeineUI ui = getUi(); - if (!ui.getCloseAndCreate().isEnabled() && aComponent.equals(ui.getDelete())) { - - // retour au début - return ui.getCaptain(); - } - if (aComponent.equals(ui.getCloseAndCreate())) { - - // retour au début - return ui.getCaptain(); + if (!ui.getCloseAndCreate().isEnabled()) { + return ui.getDelete(); } - return super.getComponentAfter(aContainer, aComponent); + return ui.getCloseAndCreate(); } + }); + builder.put(RouteUI.class, new ObserveLayoutFocusTraversalPolicy<RouteUI>() { @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - RouteUI ui = getUi(); - if (aComponent.equals(ui.getDate().getEditor())) { - if (ui.getCloseAndCreate().isEnabled()) { - return ui.getCloseAndCreate(); - } - return ui.getDelete(); - } - return super.getComponentBefore(aContainer, aComponent); + protected Component getFirstComponentForEdit(Container aContainer) { + return getUi().getDate(); } @Override - public Component getComponentAfter(Container aContainer, Component aComponent) { + protected Component getLastComponentForEdit(Container aContainer) { RouteUI ui = getUi(); - if (!ui.getCloseAndCreate().isEnabled() && aComponent.equals(ui.getDelete())) { - - // retour au début - return ui.getDate(); - } - if (aComponent.equals(ui.getCloseAndCreate())) { - - // retour au début - return ui.getDate(); + if (ui.getCloseAndCreate().isEnabled()) { + return ui.getCloseAndCreate(); } - return super.getComponentAfter(aContainer, aComponent); + return ui.getDelete(); } + }); builder.put(TdrUI.class, new ObserveLayoutFocusTraversalPolicy<TdrUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - TdrUI ui = getUi(); - int selectedIndex = ui.getEditTabPane().getSelectedIndex(); - switch (selectedIndex) { - case 0: - if (aComponent.equals(ui.getHomeId())) { - return getLastComponent(aContainer); - } - case 1: - if (aComponent.equals(ui.getSection().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - case 2: - if (aComponent.equals(ui.getEnableTimestamp())) { - return getLastComponent(aContainer); - } - case 3: - if (aComponent.equals(ui.getFishingStartDepth())) { - return getLastComponent(aContainer); - } - case 4: - if (aComponent.equals(ui.getSpecies().getUniverseList())) { - return getLastComponent(aContainer); - } - } - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { TdrUI ui = getUi(); int selectedIndex = ui.getEditTabPane().getSelectedIndex(); switch (selectedIndex) { @@ -546,7 +371,7 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { TdrUI ui = getUi(); if (ui.getSave().isEnabled()) { return ui.getSave(); @@ -566,24 +391,18 @@ public class ObserveFocusManager { return super.getLastComponent(aContainer); } + + }); builder.put(SensorUsedUI.class, new ObserveLayoutFocusTraversalPolicy<SensorUsedUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - SensorUsedUI ui = getUi(); - if (aComponent.equals(ui.getSensorType().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { return getUi().getSensorType(); } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { SensorUsedUI ui = getUi(); if (ui.getSave().isEnabled()) { return ui.getSave(); @@ -593,23 +412,11 @@ public class ObserveFocusManager { } return ui.getComment2(); } + }); builder.put(GearUseFeaturesLonglineUI.class, new ObserveLayoutFocusTraversalPolicy<GearUseFeaturesLonglineUI>() { @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - GearUseFeaturesLonglineUI ui = getUi(); - int selectedIndex = ui.getGearUseFeaturesTabPane().getSelectedIndex(); - switch (selectedIndex) { - case 0: - if (aComponent.equals(ui.getGear().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - } - return super.getComponentBefore(aContainer, aComponent); - } - - @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { GearUseFeaturesLonglineUI ui = getUi(); int selectedIndex = ui.getGearUseFeaturesTabPane().getSelectedIndex(); switch (selectedIndex) { @@ -620,27 +427,20 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { - return getDefaultLastComponent(getUi(), null); + protected Component getLastComponentForEdit(Container aContainer) { + return getTableDefaultLastComponent(getUi(), null); } + }); builder.put(EncounterUI.class, new ObserveLayoutFocusTraversalPolicy<EncounterUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - EncounterUI ui = getUi(); - if (aComponent.equals(ui.getEncounterType().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { return getUi().getEncounterType(); } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { EncounterUI ui = getUi(); if (ui.getSave().isEnabled()) { return ui.getSave(); @@ -650,42 +450,12 @@ public class ObserveFocusManager { } return ui.getComment2(); } + }); builder.put(CatchLonglineUI.class, new ObserveLayoutFocusTraversalPolicy<CatchLonglineUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - CatchLonglineUI ui = getUi(); - int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); - switch (selectedIndex) { - case 0: - if (ui.getTableModel().isCreate()) { - if (aComponent.equals(ui.getAcquisitionModeIndividual())) { - return getLastComponent(aContainer); - } - } else { - if (aComponent.equals(ui.getSection().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - } - - case 1: - if (aComponent.equals(ui.getDepredated())) { - return getLastComponent(aContainer); - } - case 2: - if (aComponent.equals(ui.getStomacFullness().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - case 5: - if (aComponent.equals(ui.getDepthRecorder())) { - return getLastComponent(aContainer); - } - } - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { CatchLonglineUI ui = getUi(); int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); switch (selectedIndex) { @@ -706,25 +476,15 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { - return getDefaultLastComponent(getUi(), null); + protected Component getLastComponentForEdit(Container aContainer) { + return getTableDefaultLastComponent(getUi(), null); } + }); builder.put(TargetSampleUI.class, new ObserveLayoutFocusTraversalPolicy<TargetSampleUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - TargetSampleUI ui = getUi(); - if (aComponent.equals(ui.getAcquisitionModeEffectif())) { - return getLastComponent(aContainer); - } - if (aComponent.equals(ui.getSizeMeasureType().getCombobox().getEditor().getEditorComponent()) && !ui.getAcquisitionModeEffectif().isEnabled()) { - return super.getLastComponent(aContainer); - } - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { TargetSampleUI ui = getUi(); if (ui.getAcquisitionModeEffectif().isEnabled()) { return ui.getAcquisitionModeEffectif(); @@ -733,27 +493,16 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { TargetSampleUI ui = getUi(); - return getDefaultLastComponent(ui, ui.getComment2()); + return getTableDefaultLastComponent(ui, ui.getComment2()); } + }); builder.put(TargetDiscardCatchUI.class, new ObserveLayoutFocusTraversalPolicy<TargetDiscardCatchUI>() { @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - TargetDiscardCatchUI ui = getUi(); - if (aComponent.equals(ui.getSpecies().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - if (aComponent.equals(ui.getCatchWeight().getTextField()) && !ui.getSpecies().isEnabled()) { - return super.getLastComponent(aContainer); - } - return super.getComponentBefore(aContainer, aComponent); - } - - @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { TargetDiscardCatchUI ui = getUi(); if (ui.getSpecies().isEnabled()) { return ui.getSpecies(); @@ -762,26 +511,16 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { TargetDiscardCatchUI ui = getUi(); - return getDefaultLastComponent(ui, ui.getTargetDiscardCatchCompositionEstimatedByObserver()); + return getTableDefaultLastComponent(ui, ui.getTargetDiscardCatchCompositionEstimatedByObserver()); } + }); builder.put(TargetCatchUI.class, new ObserveLayoutFocusTraversalPolicy<TargetCatchUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - TargetCatchUI ui = getUi(); - if (aComponent.equals(ui.getSpecies().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - if (aComponent.equals(ui.getCatchWeight().getTextField()) && !ui.getSpecies().isEnabled()) { - return super.getLastComponent(aContainer); - } - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { TargetCatchUI ui = getUi(); if (ui.getSpecies().isEnabled()) { return ui.getSpecies(); @@ -790,26 +529,16 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { TargetCatchUI ui = getUi(); - return getDefaultLastComponent(ui, ui.getTargetCatchCompositionEstimatedByObserver()); + return getTableDefaultLastComponent(ui, ui.getTargetCatchCompositionEstimatedByObserver()); } + }); builder.put(SchoolEstimateUI.class, new ObserveLayoutFocusTraversalPolicy<SchoolEstimateUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - SchoolEstimateUI ui = getUi(); - if (aComponent.equals(ui.getSpecies().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - if (aComponent.equals(ui.getTotalWeight().getTextField()) && !ui.getSpecies().isEnabled()) { - return getLastComponent(aContainer); - } - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { SchoolEstimateUI ui = getUi(); if (ui.getSpecies().isEnabled()) { return ui.getSpecies(); @@ -818,69 +547,44 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { SchoolEstimateUI ui = getUi(); - return getDefaultLastComponent(ui, ui.getComment2()); + return getTableDefaultLastComponent(ui, ui.getComment2()); } }); builder.put(ObjectSchoolEstimateUI.class, new ObserveLayoutFocusTraversalPolicy<ObjectSchoolEstimateUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - if (aComponent.equals(getUi().getSpecies().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { return getUi().getSpecies(); } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { ObjectSchoolEstimateUI ui = getUi(); - return getDefaultLastComponent(ui, ui.getComment2()); + return getTableDefaultLastComponent(ui, ui.getComment2()); } }); builder.put(ObjectObservedSpeciesUI.class, new ObserveLayoutFocusTraversalPolicy<ObjectObservedSpeciesUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - if (aComponent.equals(getUi().getSpecies().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { return getUi().getSpecies(); } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { ObjectObservedSpeciesUI ui = getUi(); - return getDefaultLastComponent(ui, ui.getComment2()); + return getTableDefaultLastComponent(ui, ui.getComment2()); } }); builder.put(NonTargetSampleUI.class, new ObserveLayoutFocusTraversalPolicy<NonTargetSampleUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - NonTargetSampleUI ui = getUi(); - if (aComponent.equals(ui.getAcquisitionModeEffectif())) { - return getLastComponent(aContainer); - } - if (aComponent.equals(ui.getSizeMeasureType().getCombobox().getEditor().getEditorComponent()) && !ui.getAcquisitionModeEffectif().isEnabled()) { - return super.getLastComponent(aContainer); - } - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { NonTargetSampleUI ui = getUi(); if (ui.getAcquisitionModeEffectif().isEnabled()) { return ui.getAcquisitionModeEffectif(); @@ -889,48 +593,29 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { NonTargetSampleUI ui = getUi(); - return getDefaultLastComponent(ui, ui.getComment2()); + return getTableDefaultLastComponent(ui, ui.getComment2()); } }); builder.put(NonTargetCatchUI.class, new ObserveLayoutFocusTraversalPolicy<NonTargetCatchUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - if (aComponent.equals(getUi().getSpecies().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { return getUi().getSpecies(); } @Override - public Component getLastComponent(Container aContainer) { - return getDefaultLastComponent(getUi(), null); + protected Component getLastComponentForEdit(Container aContainer) { + return getTableDefaultLastComponent(getUi(), null); } }); builder.put(GearUseFeaturesSeineUI.class, new ObserveLayoutFocusTraversalPolicy<GearUseFeaturesSeineUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - GearUseFeaturesSeineUI ui = getUi(); - int selectedIndex = ui.getGearUseFeaturesTabPane().getSelectedIndex(); - switch (selectedIndex) { - case 0: - if (aComponent.equals(ui.getGear().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - } - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { GearUseFeaturesSeineUI ui = getUi(); int selectedIndex = ui.getGearUseFeaturesTabPane().getSelectedIndex(); switch (selectedIndex) { @@ -941,55 +626,42 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { - return getDefaultLastComponent(getUi(), null); + protected Component getLastComponentForEdit(Container aContainer) { + return getTableDefaultLastComponent(getUi(), null); } + }); builder.put(ContentReferenceUI.class, new ObserveLayoutFocusTraversalPolicy<ContentReferenceUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - if (aComponent.equals(getUi().getUri())) { - return getLastComponent(aContainer); - } - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { return getUi().getUri(); } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { return getUi().getBackToList(); } - }); - builder.put(ReferenceHomeUI.class, new ObserveLayoutFocusTraversalPolicy<ReferenceHomeUI>()); + }); - builder.put(VesselUI.class, new ObserveLayoutFocusTraversalPolicy<VesselUI>() { + builder.put(ReferenceHomeUI.class, new ObserveLayoutFocusTraversalPolicy<ReferenceHomeUI>() { @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - VesselUI ui = getUi(); - int selectedIndex = ui.getTabPane().getSelectedIndex(); - switch (selectedIndex) { - case 0: - if (aComponent.equals(ui.getKeelCode().getTextField())) { - return getLastComponent(aContainer); - } - break; - case 1: - if (aComponent.equals(ui.getLength().getTextField())) { - return getLastComponent(aContainer); - } - break; - } + protected Component getFirstComponentForEdit(Container aContainer) { + return null; + } - return super.getComponentBefore(aContainer, aComponent); + @Override + protected Component getLastComponentForEdit(Container aContainer) { + return null; } + }); + + builder.put(VesselUI.class, new ObserveLayoutFocusTraversalPolicy<VesselUI>() { + @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { VesselUI ui = getUi(); int selectedIndex = ui.getTabPane().getSelectedIndex(); switch (selectedIndex) { @@ -1002,34 +674,16 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { return getUi().getBackToList(); } + }); builder.put(SpeciesUI.class, new ObserveLayoutFocusTraversalPolicy<SpeciesUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - SpeciesUI ui = getUi(); - int selectedIndex = ui.getTabPane().getSelectedIndex(); - switch (selectedIndex) { - case 0: - if (aComponent.equals(ui.getUri())) { - return getLastComponent(aContainer); - } - break; - case 1: - if (aComponent.equals(ui.getSizeMeasureType().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - break; - } - - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { SpeciesUI ui = getUi(); int selectedIndex = ui.getTabPane().getSelectedIndex(); switch (selectedIndex) { @@ -1042,34 +696,16 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { return getUi().getBackToList(); } + }); builder.put(SpeciesListUI.class, new ObserveLayoutFocusTraversalPolicy<SpeciesListUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - SpeciesListUI ui = getUi(); - int selectedIndex = ui.getTabPane().getSelectedIndex(); - switch (selectedIndex) { - case 0: - if (aComponent.equals(ui.getUri())) { - return getLastComponent(aContainer); - } - break; - case 1: - if (aComponent.equals(ui.getSpecies().getUniverseList())) { - return getLastComponent(aContainer); - } - break; - } - - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { SpeciesListUI ui = getUi(); int selectedIndex = ui.getTabPane().getSelectedIndex(); switch (selectedIndex) { @@ -1082,34 +718,16 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { return getUi().getBackToList(); } + }); builder.put(ProgramUI.class, new ObserveLayoutFocusTraversalPolicy<ProgramUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - ProgramUI ui = getUi(); - int selectedIndex = ui.getTabPane().getSelectedIndex(); - switch (selectedIndex) { - case 0: - if (aComponent.equals(ui.getUri())) { - return getLastComponent(aContainer); - } - break; - case 1: - if (aComponent.equals(ui.getNonTargetObservation())) { - return getLastComponent(aContainer); - } - break; - } - - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { ProgramUI ui = getUi(); int selectedIndex = ui.getTabPane().getSelectedIndex(); switch (selectedIndex) { @@ -1122,41 +740,16 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { return getUi().getBackToList(); } + }); builder.put(LengthWeightParameterUI.class, new ObserveLayoutFocusTraversalPolicy<LengthWeightParameterUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - LengthWeightParameterUI ui = getUi(); - int selectedIndex = ui.getTabPane().getSelectedIndex(); - switch (selectedIndex) { - case 0: - if (ui.getModel().isCreatingMode()) { - if (aComponent.equals(ui.getSex().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - } else { - - if (aComponent.equals(ui.getStartDate().getEditor())) { - return getLastComponent(aContainer); - } - } - break; - case 1: - if (aComponent.equals(ui.getCoefficients())) { - return getLastComponent(aContainer); - } - break; - } - - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { LengthWeightParameterUI ui = getUi(); int selectedIndex = ui.getTabPane().getSelectedIndex(); switch (selectedIndex) { @@ -1174,41 +767,16 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { return getUi().getBackToList(); } + }); builder.put(LengthLengthParameterUI.class, new ObserveLayoutFocusTraversalPolicy<LengthLengthParameterUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - LengthLengthParameterUI ui = getUi(); - int selectedIndex = ui.getTabPane().getSelectedIndex(); - switch (selectedIndex) { - case 0: - if (ui.getModel().isCreatingMode()) { - if (aComponent.equals(ui.getInputSizeMeasureType().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - } else { - - if (aComponent.equals(ui.getUri())) { - return getLastComponent(aContainer); - } - } - break; - case 1: - if (aComponent.equals(ui.getCoefficients())) { - return getLastComponent(aContainer); - } - break; - } - - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { LengthLengthParameterUI ui = getUi(); int selectedIndex = ui.getTabPane().getSelectedIndex(); switch (selectedIndex) { @@ -1226,34 +794,16 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { return getUi().getBackToList(); } + }); builder.put(GearUI.class, new ObserveLayoutFocusTraversalPolicy<GearUI>() { - @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - GearUI ui = getUi(); - int selectedIndex = ui.getTabPane().getSelectedIndex(); - switch (selectedIndex) { - case 0: - if (aComponent.equals(ui.getUri())) { - return getLastComponent(aContainer); - } - break; - case 1: - if (aComponent.equals(ui.getGearCaracteristic().getUniverseList())) { - return getLastComponent(aContainer); - } - break; - } - - return super.getComponentBefore(aContainer, aComponent); - } @Override - public Component getFirstComponent(Container aContainer) { + protected Component getFirstComponentForEdit(Container aContainer) { GearUI ui = getUi(); int selectedIndex = ui.getTabPane().getSelectedIndex(); switch (selectedIndex) { @@ -1266,38 +816,41 @@ public class ObserveFocusManager { } @Override - public Component getLastComponent(Container aContainer) { + protected Component getLastComponentForEdit(Container aContainer) { return getUi().getBackToList(); } }); builder.put(WeightCategoryUI.class, new ObserveLayoutFocusTraversalPolicy<WeightCategoryUI>() { + @Override - public Component getComponentBefore(Container aContainer, Component aComponent) { - WeightCategoryUI ui = getUi(); - if (aComponent.equals(ui.getSpecies().getCombobox().getEditor().getEditorComponent())) { - return getLastComponent(aContainer); - } - return super.getComponentBefore(aContainer, aComponent); + protected Component getFirstComponentForEdit(Container aContainer) { + return getUi().getSpecies(); } @Override - public Component getFirstComponent(Container aContainer) { - return getUi().getSpecies(); + protected Component getLastComponentForEdit(Container aContainer) { + return getUi().getBackToList(); } @Override - public Component getLastComponent(Container aContainer) { + protected Component getFirstComponentForRead(Container aContainer) { return getUi().getBackToList(); } + + @Override + protected Component getLastComponentForRead(Container aContainer) { + return getUi().getBackToList(); + } + }); policies = builder.build(); } - public static class ObserveLayoutFocusTraversalPolicy<U extends ContentUI> extends LayoutFocusTraversalPolicy { + public static abstract class ObserveLayoutFocusTraversalPolicy<U extends ContentUI> extends LayoutFocusTraversalPolicy { private Supplier<U> uiSupplier; @@ -1309,7 +862,101 @@ public class ObserveFocusManager { return uiSupplier.get(); } - protected <UU extends ContentTableUI> Component getDefaultLastComponent(UU ui, Component optionalComponent) { + protected abstract Component getFirstComponentForEdit(Container aContainer); + + protected abstract Component getLastComponentForEdit(Container aContainer); + + protected Component getFirstComponentForRead(Container aContainer) { + if (getUi() instanceof ContentOpenableUI) { + ContentOpenableUI ui = (ContentOpenableUI) getUi(); + if (ui.getReopen().isEnabled() && ui.getReopen().isVisible()) { + return ui.getReopen(); + } + } else if (getUi() instanceof ContentReferenceUI) { + ContentReferenceUI ui = (ContentReferenceUI) getUi(); + return ui.getBackToList(); + } + if (getUi().getActionUp().isEnabled()) { + return getUi().getActionUp(); + } + return getUi().getActionDown(); + } + + protected Component getLastComponentForRead(Container aContainer) { + if (getUi() instanceof ContentOpenableUI) { + ContentOpenableUI ui = (ContentOpenableUI) getUi(); + if (ui.getReopen().isEnabled() && ui.getReopen().isVisible()) { + return ui.getReopen(); + } + } else if (getUi() instanceof ContentReferenceUI) { + ContentReferenceUI ui = (ContentReferenceUI) getUi(); + return ui.getBackToList(); + + } + if (getUi().getActionDown().isEnabled()) { + return getUi().getActionDown(); + } + return getUi().getActionUp(); + } + + @Override + public final Component getComponentAfter(Container aContainer, Component aComponent) { + Component lastComponent = getLastComponent(aContainer); + lastComponent = getRealFocusComponent(lastComponent); + if (aComponent.equals(lastComponent)) { + return getFirstComponent(aContainer); + } + return super.getComponentAfter(aContainer, aComponent); + } + + @Override + public final Component getComponentBefore(Container aContainer, Component aComponent) { + + Component firstComponent = getFirstComponent(aContainer); + firstComponent = getRealFocusComponent(firstComponent); + if (aComponent.equals(firstComponent)) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + protected Component getRealFocusComponent(Component firstComponent) { + if (firstComponent instanceof BeanComboBox) { + BeanComboBox component = (BeanComboBox) firstComponent; + firstComponent = component.getCombobox().getEditor().getEditorComponent(); + } else if (firstComponent instanceof JSpinner) { + JSpinner component = (JSpinner) firstComponent; + firstComponent = component.getEditor(); + } else if (firstComponent instanceof NumberEditor) { + NumberEditor component = (NumberEditor) firstComponent; + firstComponent = component.getTextField(); + } else if (firstComponent instanceof JXDatePicker) { + JXDatePicker component = (JXDatePicker) firstComponent; + firstComponent = component.getEditor(); + } else if (firstComponent instanceof FilterableDoubleList) { + FilterableDoubleList component = (FilterableDoubleList) firstComponent; + firstComponent = component.getUniverseList(); + } + return firstComponent; + } + + @Override + public final Component getFirstComponent(Container aContainer) { + if (getUi().getModel().isReadingMode()) { + return getFirstComponentForRead(aContainer); + } + return getFirstComponentForEdit(aContainer); + } + + @Override + public final Component getLastComponent(Container aContainer) { + if (getUi().getModel().isReadingMode()) { + return getLastComponentForRead(aContainer); + } + return getLastComponentForEdit(aContainer); + } + + protected <UU extends ContentTableUI> Component getTableDefaultLastComponent(UU ui, Component optionalComponent) { if (ui.getSave().isEnabled()) { return ui.getSave(); } @@ -1334,4 +981,54 @@ public class ObserveFocusManager { } + private static class ContentListUIObserveLayoutFocusTraversalPolicy extends ObserveLayoutFocusTraversalPolicy<ContentListUI> { + + private List<JComponent> actions; + + @Override + protected Component getFirstComponentForEdit(Container aContainer) { + return getUi().getList(); + } + + @Override + protected Component getLastComponentForEdit(Container aContainer) { + Optional<JComponent> optional = getActions().stream().filter(a -> a.isEnabled() && a.isVisible()).findFirst(); + return optional.isPresent() ? optional.get() : null; + } + + @Override + protected Component getFirstComponentForRead(Container aContainer) { + return getUi().getList(); + } + + @Override + protected Component getLastComponentForRead(Container aContainer) { + Optional<JComponent> optional = getActions().stream().filter(a -> a.isEnabled() && a.isVisible()).findFirst(); + return optional.isPresent() ? optional.get() : null; + } + + public List<JComponent> getActions() { + if (actions == null) { + + actions = new ArrayList<>(); + actions.add(getUi().getGotoSelectedChild()); + actions.add(getUi().getReopenChild()); + actions.add(getUi().getCloseChild()); + actions.add(getUi().getGotoOpenChild()); + actions.add(getUi().getGotoOpenChild2()); + actions.add(getUi().getCreateChild()); + for (Component component : getUi().getExtraActions().getComponents()) { + if (component instanceof JButton) { + actions.add((JComponent) component); + } + } + actions.add(getUi().getMoveSelectedChildren()); + + } + List<JComponent> result = new ArrayList<>(actions); + Collections.reverse(result); + return result; + } + + } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/LonglineDetailCompositionUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/LonglineDetailCompositionUI.jaxx index c9eb46d..f3a398a 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/LonglineDetailCompositionUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/LonglineDetailCompositionUI.jaxx @@ -25,8 +25,8 @@ <import> fr.ird.observe.application.swing.ObserveSwingApplicationContext fr.ird.observe.services.dto.longline.SetLonglineDetailCompositionDto - fr.ird.observe.application.swing.ui.actions.shared.ResetEditUIAction - fr.ird.observe.application.swing.ui.actions.shared.SaveEditUIAction + fr.ird.observe.application.swing.ui.actions.content.ResetEditUIAction + fr.ird.observe.application.swing.ui.actions.content.SaveEditUIAction fr.ird.observe.application.swing.ui.util.JVetoableTabbedPane diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/LonglineGlobalCompositionUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/LonglineGlobalCompositionUI.jaxx index 91de3f7..372a383 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/LonglineGlobalCompositionUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/LonglineGlobalCompositionUI.jaxx @@ -28,8 +28,8 @@ fr.ird.observe.services.dto.longline.SetLonglineGlobalCompositionDto fr.ird.observe.services.dto.referential.ReferentialReference fr.ird.observe.services.dto.referential.longline.MitigationTypeDto - fr.ird.observe.application.swing.ui.actions.shared.ResetEditUIAction - fr.ird.observe.application.swing.ui.actions.shared.SaveEditUIAction + fr.ird.observe.application.swing.ui.actions.content.ResetEditUIAction + fr.ird.observe.application.swing.ui.actions.content.SaveEditUIAction fr.ird.observe.application.swing.ui.content.table.impl.longline.BaitsCompositionUI fr.ird.observe.application.swing.ui.content.table.impl.longline.BaitsCompositionUIModel fr.ird.observe.application.swing.ui.content.table.impl.longline.BranchlinesCompositionUI diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/SetLonglineUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/SetLonglineUI.jaxx index 0fd6436..36225bd 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/SetLonglineUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/SetLonglineUI.jaxx @@ -32,10 +32,10 @@ fr.ird.observe.services.dto.referential.longline.LightsticksTypeDto fr.ird.observe.services.dto.referential.longline.LightsticksColorDto - fr.ird.observe.application.swing.ui.actions.shared.CancelCreateUIAction - fr.ird.observe.application.swing.ui.actions.shared.DeleteDataUIAction - fr.ird.observe.application.swing.ui.actions.shared.ResetEditUIAction - fr.ird.observe.application.swing.ui.actions.shared.SaveEditUIAction + fr.ird.observe.application.swing.ui.actions.content.CancelCreateUIAction + fr.ird.observe.application.swing.ui.actions.content.DeleteDataUIAction + fr.ird.observe.application.swing.ui.actions.content.ResetEditUIAction + fr.ird.observe.application.swing.ui.actions.content.SaveEditUIAction fr.ird.observe.application.swing.ui.content.ContentUIModel fr.ird.observe.application.swing.ui.util.BooleanEditor diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectTransmittingBuoyOperationUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectTransmittingBuoyOperationUI.jaxx index cde2155..8bfa13f 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectTransmittingBuoyOperationUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectTransmittingBuoyOperationUI.jaxx @@ -33,8 +33,8 @@ fr.ird.observe.services.dto.referential.ReferentialReference fr.ird.observe.services.dto.referential.seine.TransmittingBuoyOperationDto fr.ird.observe.services.dto.referential.seine.TransmittingBuoyTypeDto - fr.ird.observe.application.swing.ui.actions.shared.ResetEditUIAction - fr.ird.observe.application.swing.ui.actions.shared.SaveEditUIAction + fr.ird.observe.application.swing.ui.actions.content.ResetEditUIAction + fr.ird.observe.application.swing.ui.actions.content.SaveEditUIAction jaxx.runtime.swing.editor.bean.BeanComboBox java.awt.Dimension diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectUI.jaxx index 47721bb..ae8fae4 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectUI.jaxx @@ -29,10 +29,10 @@ fr.ird.observe.services.dto.referential.seine.ObjectFateDto fr.ird.observe.services.dto.referential.seine.ObjectOperationDto fr.ird.observe.services.dto.referential.seine.ObjectTypeDto - fr.ird.observe.application.swing.ui.actions.shared.CancelCreateUIAction - fr.ird.observe.application.swing.ui.actions.shared.DeleteDataUIAction - fr.ird.observe.application.swing.ui.actions.shared.ResetEditUIAction - fr.ird.observe.application.swing.ui.actions.shared.SaveEditUIAction + fr.ird.observe.application.swing.ui.actions.content.CancelCreateUIAction + fr.ird.observe.application.swing.ui.actions.content.DeleteDataUIAction + fr.ird.observe.application.swing.ui.actions.content.ResetEditUIAction + fr.ird.observe.application.swing.ui.actions.content.SaveEditUIAction jaxx.runtime.swing.editor.NumberEditor jaxx.runtime.swing.editor.bean.BeanComboBox diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/SetSeineUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/SetSeineUI.jaxx index 638dc60..784199b 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/SetSeineUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/SetSeineUI.jaxx @@ -28,10 +28,10 @@ fr.ird.observe.services.dto.seine.SetSeineDto fr.ird.observe.services.dto.referential.ReferentialReference fr.ird.observe.services.dto.referential.seine.ReasonForNullSetDto - fr.ird.observe.application.swing.ui.actions.shared.CancelCreateUIAction - fr.ird.observe.application.swing.ui.actions.shared.DeleteDataUIAction - fr.ird.observe.application.swing.ui.actions.shared.ResetEditUIAction - fr.ird.observe.application.swing.ui.actions.shared.SaveEditUIAction + fr.ird.observe.application.swing.ui.actions.content.CancelCreateUIAction + fr.ird.observe.application.swing.ui.actions.content.DeleteDataUIAction + fr.ird.observe.application.swing.ui.actions.content.ResetEditUIAction + fr.ird.observe.application.swing.ui.actions.content.SaveEditUIAction fr.ird.observe.application.swing.ui.util.BooleanEditor jaxx.runtime.swing.editor.NumberEditor diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jaxx index f0091a0..349a395 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jaxx @@ -25,8 +25,9 @@ genericType='E extends IdDto, C extends DataDto, U extends ContentListUI<E,C, U>'> <import> - fr.ird.observe.application.swing.ui.actions.shared.CloseOpenUIAction - fr.ird.observe.application.swing.ui.actions.shared.ReOpenUIAction + fr.ird.observe.application.swing.ui.actions.content.CloseOpenUIAction + fr.ird.observe.application.swing.ui.actions.content.CreateOpenUIAction + fr.ird.observe.application.swing.ui.actions.content.ReOpenUIAction fr.ird.observe.application.swing.ui.actions.shared.SelectNodeUIAction fr.ird.observe.services.dto.IdDto @@ -104,7 +105,7 @@ public final List<DataReference<C>> getSelectedDatas() { <JButton id='gotoOpenChild2'/> </cell> <cell> - <JButton id='createChild' onActionPerformed='getHandler().addChild()'/> + <JButton id='createChild'/> </cell> </row> <row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jcss index 1ea4dae..03a4753 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jcss @@ -68,8 +68,8 @@ } #createChild { - actionIcon:"add"; visible:{model.isCreatingMode()}; + _observeAction:{CreateOpenUIAction.ACTION_NAME}; } #moveSelectedChildren { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIHandler.java index d98dabe..915a071 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIHandler.java @@ -40,20 +40,14 @@ import org.apache.commons.logging.LogFactory; import javax.swing.DefaultListCellRenderer; import javax.swing.Icon; import javax.swing.JButton; -import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JList; -import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.ListCellRenderer; import javax.swing.SwingUtilities; import java.awt.Color; import java.awt.Component; -import java.awt.Container; import java.awt.event.MouseEvent; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; -import java.util.Optional; import static org.nuiton.i18n.I18n.t; @@ -108,6 +102,11 @@ public abstract class ContentListUIHandler<E extends IdDto, C extends DataDto, U } @Override + protected void addFocusabelOnForm() { + // pas besoin de gérer le focus, pas de formulaire + } + + @Override public final void openUI() { super.openUI(); @@ -176,7 +175,7 @@ public abstract class ContentListUIHandler<E extends IdDto, C extends DataDto, U getUi().getShowTechnicalInformations().setEnabled(false); } - void addChild() { + public void addChild() { addChild(getModel().getChildType()); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jaxx index 89140dc..b2e3ddb 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jaxx @@ -28,10 +28,10 @@ <import> fr.ird.observe.services.dto.longline.ActivityLonglineDto fr.ird.observe.services.dto.longline.TripLonglineDto - fr.ird.observe.application.swing.ui.actions.shared.CloseAndCreateUIAction - fr.ird.observe.application.swing.ui.actions.shared.CloseOpenUIAction + fr.ird.observe.application.swing.ui.actions.content.CloseAndCreateUIAction + fr.ird.observe.application.swing.ui.actions.content.CloseOpenUIAction fr.ird.observe.application.swing.ui.actions.shared.SelectOpenNodeUIAction - fr.ird.observe.application.swing.ui.actions.shared.MoveActivityLonglinesUIAction + fr.ird.observe.application.swing.ui.actions.content.MoveActivityLonglinesUIAction static org.nuiton.i18n.I18n.n </import> @@ -59,9 +59,6 @@ <!-- extra actions --> <Table id='extraActions' fill="both" weightx="1" insets='2'> <row> - <cell weightx="0.5" fill="both"> - <JButton id='close'/> - </cell> <cell weightx="0.5"> <JButton id='closeAndCreate'/> </cell> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jcss index e53824b..ed15846 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jcss @@ -31,16 +31,15 @@ } #createChild { - text:"observe.content.action.activity"; - toolTipText:"observe.content.action.activity.tip"; + _text:{t("observe.content.action.activity")}; + _toolTipText:{t("observe.content.action.activity.tip")}; } #extraActions { visible:{model.isUpdatingMode() && getDataContext().isOpenActivity()}; } -#close { - _observeAction:{CloseOpenUIAction.ACTION_NAME}; +#closeChild { _toolTipText:{t("observe.action.close.activity.tip")}; } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/CommonListUI.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/CommonListUI.jcss index c1806f1..bfd407c 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/CommonListUI.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/CommonListUI.jcss @@ -20,6 +20,10 @@ * #L% */ +JButton { + _protectFocus:true; +} + #model { enabled: true; } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jaxx index 4bfe978..0fbb378 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jaxx @@ -28,9 +28,10 @@ fr.ird.observe.services.dto.longline.TripLonglineDto fr.ird.observe.services.dto.referential.ProgramDto fr.ird.observe.application.swing.ui.actions.shared.SelectOpenNodeUIAction - fr.ird.observe.application.swing.ui.actions.shared.MoveTripLonglinesUIAction + fr.ird.observe.application.swing.ui.actions.content.MoveTripLonglinesUIAction static org.nuiton.i18n.I18n.n + static org.nuiton.i18n.I18n.t </import> <style source="CommonListUI.jcss"/> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jcss index e61a170..eb85cca 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jcss @@ -31,13 +31,13 @@ } #createChild { - text:"observe.content.action.trip"; - toolTipText:"observe.content.action.trip.tip"; + _text:{t("observe.content.action.trip")}; + _toolTipText:{t("observe.content.action.trip.tip")}; } #moveSelectedChildren { - text:"observe.content.action.move.trips"; - toolTipText:"observe.content.action.move.trips.tip"; + _text:{t("observe.content.action.move.trips")}; + _toolTipText:{t("observe.content.action.move.trips.tip")}; _observeAction:{MoveTripLonglinesUIAction.ACTION_NAME}; } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUI.jaxx index 0a453d7..e81401b 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUI.jaxx @@ -28,10 +28,10 @@ <import> fr.ird.observe.services.dto.seine.ActivitySeineDto fr.ird.observe.services.dto.seine.RouteDto - fr.ird.observe.application.swing.ui.actions.shared.CloseAndCreateUIAction - fr.ird.observe.application.swing.ui.actions.shared.CloseOpenUIAction + fr.ird.observe.application.swing.ui.actions.content.CloseAndCreateUIAction + fr.ird.observe.application.swing.ui.actions.content.CloseOpenUIAction fr.ird.observe.application.swing.ui.actions.shared.SelectOpenNodeUIAction - fr.ird.observe.application.swing.ui.actions.shared.MoveActivitySeinesUIAction + fr.ird.observe.application.swing.ui.actions.content.MoveActivitySeinesUIAction static org.nuiton.i18n.I18n.n </import> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/CommonListUI.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/CommonListUI.jcss index 2feab9c..fe34dfb 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/CommonListUI.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/CommonListUI.jcss @@ -24,6 +24,10 @@ enabled: true; } +JButton { + _protectFocus:true; +} + .gotoOpenTrip { visible:{model.isUpdatingMode() && dataContext.isOpenTrip()}; _observeAction:{SelectOpenNodeUIAction.ACTION_NAME}; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUI.jaxx index bdc29a5..4a44aa8 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUI.jaxx @@ -30,7 +30,7 @@ fr.ird.observe.services.dto.seine.TripSeineDto fr.ird.observe.services.dto.seine.RouteDto fr.ird.observe.application.swing.ui.actions.shared.SelectOpenNodeUIAction - fr.ird.observe.application.swing.ui.actions.shared.MoveRoutesUIAction + fr.ird.observe.application.swing.ui.actions.content.MoveRoutesUIAction static org.nuiton.i18n.I18n.n </import> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUI.jaxx index 4701fef..3dcaa27 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUI.jaxx @@ -29,7 +29,7 @@ fr.ird.observe.services.dto.seine.RouteDto fr.ird.observe.services.dto.referential.ProgramDto fr.ird.observe.application.swing.ui.actions.shared.SelectOpenNodeUIAction - fr.ird.observe.application.swing.ui.actions.shared.MoveTripSeinesUIAction + fr.ird.observe.application.swing.ui.actions.content.MoveTripSeinesUIAction static org.nuiton.i18n.I18n.n </import> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUI.jaxx index bc7195b..795e0cf 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUI.jaxx @@ -27,13 +27,12 @@ <import> fr.ird.observe.services.dto.IdDto - fr.ird.observe.application.swing.ui.actions.shared.CancelCreateUIAction - fr.ird.observe.application.swing.ui.actions.shared.CloseAndCreateUIAction - fr.ird.observe.application.swing.ui.actions.shared.CloseOpenUIAction - fr.ird.observe.application.swing.ui.actions.shared.DeleteDataUIAction - fr.ird.observe.application.swing.ui.actions.shared.ReOpenUIAction - fr.ird.observe.application.swing.ui.actions.shared.ResetEditUIAction - fr.ird.observe.application.swing.ui.actions.shared.SaveEditUIAction + fr.ird.observe.application.swing.ui.actions.content.CloseAndCreateUIAction + fr.ird.observe.application.swing.ui.actions.content.CloseOpenUIAction + fr.ird.observe.application.swing.ui.actions.content.DeleteDataUIAction + fr.ird.observe.application.swing.ui.actions.content.ReOpenUIAction + fr.ird.observe.application.swing.ui.actions.content.ResetEditUIAction + fr.ird.observe.application.swing.ui.actions.content.SaveEditUIAction javax.swing.SwingConstants @@ -67,9 +66,6 @@ <cell fill="both"> <Table id='editActions' fill="both" weightx="1" insets='2'> <row> - <cell weightx="0.5" fill="both"> - <JButton id='cancel'/> - </cell> <cell weightx="0.5"> <JButton id='reset'/> </cell> @@ -85,8 +81,7 @@ </row> <row insets='0'> <cell fill='both'> - <Table id='extraActions' fill="both" weightx="1" insets='2' - visible='{model.isUpdatingMode()}'/> + <Table id='extraActions' fill="both" weightx="1" insets='2' visible='{model.isUpdatingMode()}'/> </cell> </row> <row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUI.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUI.jcss index 2626b6e..f1255cc 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUI.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUI.jcss @@ -24,15 +24,10 @@ visible:{!model.isReadingMode()}; } -#cancel { - _observeAction:{CancelCreateUIAction.ACTION_NAME}; - visible:{model.isCreatingMode()}; -} - #reset { _observeAction:{ResetEditUIAction.ACTION_NAME}; - visible:{model.isUpdatingMode()}; - enabled:{model.isModified()}; + visible:{!model.isReadingMode()}; + enabled:{model.isCreatingMode() ? true : model.isModified()}; horizontalTextPosition:{SwingConstants.RIGHT}; } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUI.jaxx index 03c3ef9..46ee176 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUI.jaxx @@ -33,7 +33,7 @@ fr.ird.observe.services.dto.referential.ReferentialReference fr.ird.observe.services.dto.referential.FpaZoneDto fr.ird.observe.services.dto.referential.longline.VesselActivityLonglineDto - fr.ird.observe.application.swing.ui.actions.shared.DeleteDataUIAction + fr.ird.observe.application.swing.ui.actions.content.DeleteDataUIAction jaxx.runtime.swing.editor.NumberEditor jaxx.runtime.swing.editor.bean.BeanComboBox diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUI.jaxx index 5b71a2f..d7355eb 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUI.jaxx @@ -35,7 +35,7 @@ fr.ird.observe.services.dto.referential.PersonDto fr.ird.observe.services.dto.referential.OceanDto fr.ird.observe.services.dto.referential.longline.TripTypeDto - fr.ird.observe.application.swing.ui.actions.shared.DeleteDataUIAction + fr.ird.observe.application.swing.ui.actions.content.DeleteDataUIAction fr.ird.observe.application.swing.ui.util.tripMap.TripMapUI org.jdesktop.swingx.JXDatePicker diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUI.jaxx index 290eeef..360e22f 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUI.jaxx @@ -39,7 +39,7 @@ fr.ird.observe.services.dto.referential.seine.DetectionModeDto fr.ird.observe.services.dto.referential.seine.WindDto - fr.ird.observe.application.swing.ui.actions.shared.DeleteDataUIAction + fr.ird.observe.application.swing.ui.actions.content.DeleteDataUIAction jaxx.runtime.swing.editor.NumberEditor jaxx.runtime.swing.editor.bean.BeanComboBox diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ref/ContentReferenceUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ref/ContentReferenceUI.jaxx index 7bf35bf..35732ba 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ref/ContentReferenceUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ref/ContentReferenceUI.jaxx @@ -29,9 +29,9 @@ fr.ird.observe.services.dto.referential.ReferentialReference fr.ird.observe.application.swing.decoration.ObserveI18nDecoratorHelper fr.ird.observe.application.swing.ui.UIHelper - fr.ird.observe.application.swing.ui.actions.shared.DeleteReferenceUIAction - fr.ird.observe.application.swing.ui.actions.shared.ResetEditUIAction - fr.ird.observe.application.swing.ui.actions.shared.SaveEditUIAction + fr.ird.observe.application.swing.ui.actions.content.DeleteReferenceUIAction + fr.ird.observe.application.swing.ui.actions.content.ResetEditUIAction + fr.ird.observe.application.swing.ui.actions.content.SaveEditUIAction jaxx.runtime.swing.editor.bean.BeanListHeader jaxx.runtime.validator.swing.SwingValidator diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ref/ContentReferenceUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ref/ContentReferenceUIHandler.java index c04f2f5..c0b7fa5 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ref/ContentReferenceUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ref/ContentReferenceUIHandler.java @@ -390,7 +390,7 @@ public class ContentReferenceUIHandler<E extends ReferentialDto, U extends Conte ui.getViewLayout().addPropertyChangeListener(CardLayout2Ext.SELECTED_PROPERTY_NAME, evt -> SwingUtilities.invokeLater(revalidate)); - ObserveSwingApplicationContext.get().getFocusManager().setFocusTraversalPolicy(ui); + ObserveSwingApplicationContext.get().getFocusManager().installFocusTraversalPolicy(ui); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/CommonTable.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/CommonTable.jcss index 8901b79..64bb674 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/CommonTable.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/CommonTable.jcss @@ -26,6 +26,10 @@ JToolBar { opaque:false; } +JButton { + _protectFocus:true; +} + NumberEditor { bean: {tableEditBean}; } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUI.jaxx index 4809b9e..52661bb 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUI.jaxx @@ -26,12 +26,12 @@ genericType='E extends IdDto, D extends IdDto, U extends ContentTableUI<E, D, U>'> <import> - fr.ird.observe.application.swing.ui.actions.shared.ResetEditUIAction - fr.ird.observe.application.swing.ui.actions.shared.SaveEditUIAction - fr.ird.observe.application.swing.ui.actions.shared.NewTableEntryUIAction - fr.ird.observe.application.swing.ui.actions.shared.ResetTableEntryUIAction - fr.ird.observe.application.swing.ui.actions.shared.SaveTableEntryUIAction - fr.ird.observe.application.swing.ui.actions.shared.DeleteTableEntryUIAction + fr.ird.observe.application.swing.ui.actions.content.ResetEditUIAction + fr.ird.observe.application.swing.ui.actions.content.SaveEditUIAction + fr.ird.observe.application.swing.ui.actions.content.NewTableEntryUIAction + fr.ird.observe.application.swing.ui.actions.content.ResetTableEntryUIAction + fr.ird.observe.application.swing.ui.actions.content.SaveTableEntryUIAction + fr.ird.observe.application.swing.ui.actions.content.DeleteTableEntryUIAction jaxx.runtime.swing.BlockingLayerUI jaxx.runtime.validator.swing.SwingValidator diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIHandler.java index 45838e3..097684e 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIHandler.java @@ -219,8 +219,10 @@ public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto, U uiInitializer.initUI(); getModel().addPropertyChangeListener(ContentUIModel.PROPERTY_FORM, evt -> updateUiWithReferenceSetsFromModel()); + getModel().addPropertyChangeListener(ContentUIModel.PROPERTY_MODE, evt -> updateFocusable((ContentMode) evt.getNewValue())); + updateFocusable(ContentMode.READ); - ObserveSwingApplicationContext.get().getFocusManager().setFocusTraversalPolicy(ui); + ObserveSwingApplicationContext.get().getFocusManager().installFocusTraversalPolicy(ui); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIHandler.java index a3cdf99..fcda169 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIHandler.java @@ -121,7 +121,7 @@ public class SensorUsedUIHandler extends ContentTableUIHandler<ActivityLonglineS dataFile = getActivityLonglineSensorUsedService().getDataFile(getTableEditBean().getId()); } - int response = UIHelper.askUser((Component) ui, + int response = UIHelper.askUser(ui, t("observe.title.confirmReplace"), t("observe.content.sensorUsed.replace.data.message", dataFile.getName()), JOptionPane.WARNING_MESSAGE, @@ -135,7 +135,7 @@ public class SensorUsedUIHandler extends ContentTableUIHandler<ActivityLonglineS } } - File file = UIHelper.chooseFile((Component) ui, + File file = UIHelper.chooseFile(ui, t("observe.content.choose.sensorUsed.title.importData"), t("observe.action.choose.sensorUsed.importData"), null); @@ -156,7 +156,7 @@ public class SensorUsedUIHandler extends ContentTableUIHandler<ActivityLonglineS public void deleteData() { - int response = UIHelper.askUser((Component) ui, + int response = UIHelper.askUser(ui, t("observe.title.delete"), t("observe.content.sensorUsed.delete.data.message"), JOptionPane.WARNING_MESSAGE, diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIHandler.java index b0fa06a..29f01c8 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIHandler.java @@ -278,7 +278,7 @@ public class TdrUIHandler extends ContentTableUIHandler<SetLonglineTdrDto, TdrDt dataFile = getTdrService().getDataFile(getTableEditBean().getId()); } - int response = UIHelper.askUser((Component) ui, + int response = UIHelper.askUser(ui, t("observe.title.confirmReplace"), t("observe.content.tdr.replace.data.message", dataFile.getName()), JOptionPane.WARNING_MESSAGE, @@ -292,7 +292,7 @@ public class TdrUIHandler extends ContentTableUIHandler<SetLonglineTdrDto, TdrDt } } - File file = UIHelper.chooseFile((Component) ui, + File file = UIHelper.chooseFile(ui, t("observe.content.choose.tdr.title.importData"), t("observe.action.choose.tdr.importData"), null); @@ -313,7 +313,7 @@ public class TdrUIHandler extends ContentTableUIHandler<SetLonglineTdrDto, TdrDt public void deleteData() { - int response = UIHelper.askUser((Component) ui, + int response = UIHelper.askUser(ui, t("observe.title.delete"), t("observe.content.tdr.delete.data.message"), JOptionPane.WARNING_MESSAGE, diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/ObserveTreeHelper.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/ObserveTreeHelper.java index e2e103a..711f93a 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/ObserveTreeHelper.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/ObserveTreeHelper.java @@ -71,6 +71,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.swing.JTree; +import javax.swing.SwingUtilities; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeCellRenderer; import javax.swing.tree.TreeModel; @@ -378,7 +379,7 @@ public class ObserveTreeHelper extends NavTreeHelper<ObserveNode> { } // navigation tree should acquire focus - tree.requestFocus(); + SwingUtilities.invokeLater(tree::grabFocus); } @Override -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.