branch develop updated (d0824a7 -> 5f5d631)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git from d0824a7 fixes #7204 [PS/LL] Séparer les programmes LL et PS dans l'arbre de navigation new b9dcf8a refs #7204 [PS/LL] Ajout d'un bouton pour masquer les programmes sans marée new 5f5d631 refs #8429 Possibilité de choisir les couleurs de bordure + amélioration du code de rechargement de l'ui The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 5f5d63128e63d226242ea0d96aac90044f990114 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Nov 27 13:25:04 2016 +0100 refs #8429 Possibilité de choisir les couleurs de bordure + amélioration du code de rechargement de l'ui commit b9dcf8a06c8c376d19d1533862c126627b65fc03 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Nov 27 11:11:31 2016 +0100 refs #7204 [PS/LL] Ajout d'un bouton pour masquer les programmes sans marée Summary of changes: .../src/main/config/ObserveSwingApplication.ini | 12 ++ ...pplication-swing-configuration_en_GB.properties | 2 + ...pplication-swing-configuration_es_ES.properties | 2 + ...pplication-swing-configuration_fr_FR.properties | 2 + .../application/swing/ui/BorderFocusListener.java | 72 -------- .../application/swing/ui/ObserveMainUI.jaxx | 4 +- .../application/swing/ui/ObserveMainUIHandler.java | 192 ++++++++++++--------- .../application/swing/ui/ObserveUICallback.java | 11 +- .../swing/ui/actions/ShowConfigAction.java | 3 + .../ui/actions/global/AbstractGlobalUIAction.java | 18 ++ .../actions/global/ChangeFocusGlobalUIAction.java | 9 +- .../global/OpenCloseDataGlobalUIAction.java | 8 +- .../swing/ui/content/ContentUIManager.java | 13 +- .../swing/ui/tree/navigation/NavigationTree.java | 5 + .../navigation/NavigationTreeCellRenderer.java | 8 +- .../ui/tree/navigation/NavigationTreeHeader.jaxx | 11 +- .../ui/tree/navigation/NavigationTreeHeader.jcss | 15 +- .../navigation/NavigationTreeHeaderHandler.java | 66 +++++-- .../ui/tree/navigation/NavigationTreeModel.java | 10 ++ .../i18n/application-swing_en_GB.properties | 4 + .../i18n/application-swing_es_ES.properties | 4 + .../i18n/application-swing_fr_FR.properties | 4 + .../topia/service/data/NavigationServiceTopia.java | 33 +++- .../services/service/data/NavigationRequest.java | 9 + 24 files changed, 310 insertions(+), 207 deletions(-) delete mode 100644 application-swing/src/main/java/fr/ird/observe/application/swing/ui/BorderFocusListener.java -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit b9dcf8a06c8c376d19d1533862c126627b65fc03 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Nov 27 11:11:31 2016 +0100 refs #7204 [PS/LL] Ajout d'un bouton pour masquer les programmes sans marée --- .../swing/ui/tree/navigation/NavigationTree.java | 5 ++ .../navigation/NavigationTreeCellRenderer.java | 8 ++- .../ui/tree/navigation/NavigationTreeHeader.jaxx | 11 +++- .../ui/tree/navigation/NavigationTreeHeader.jcss | 10 +++- .../navigation/NavigationTreeHeaderHandler.java | 66 +++++++++++++++------- .../ui/tree/navigation/NavigationTreeModel.java | 10 ++++ .../i18n/application-swing_en_GB.properties | 4 ++ .../i18n/application-swing_es_ES.properties | 4 ++ .../i18n/application-swing_fr_FR.properties | 4 ++ .../topia/service/data/NavigationServiceTopia.java | 33 ++++++++--- .../services/service/data/NavigationRequest.java | 9 +++ 11 files changed, 132 insertions(+), 32 deletions(-) diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTree.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTree.java index 832e5ce..e1642d1 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTree.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTree.java @@ -139,6 +139,11 @@ public class NavigationTree extends JXTree { } + @Override + public String getStringAt(int row) { + return super.getStringAt(row); + } + public NavigationTreeModel getTreeModel() { return (NavigationTreeModel) getModel(); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeCellRenderer.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeCellRenderer.java index 783b907..87a9d41 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeCellRenderer.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeCellRenderer.java @@ -25,6 +25,7 @@ package fr.ird.observe.application.swing.ui.tree.navigation; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.jdesktop.swingx.renderer.StringValue; import javax.swing.Icon; import javax.swing.JLabel; @@ -39,7 +40,7 @@ import java.awt.Component; * @author Tony Chemit - chemit@codelutin.com * @since 5.1 */ -public class NavigationTreeCellRenderer extends DefaultTreeCellRenderer { +public class NavigationTreeCellRenderer extends DefaultTreeCellRenderer implements StringValue { /** Logger */ private static final Log log = LogFactory.getLog(NavigationTreeCellRenderer.class); @@ -88,4 +89,9 @@ public class NavigationTreeCellRenderer extends DefaultTreeCellRenderer { return comp; } + @Override + public String getString(Object value) { + NavigationTreeNodeSupport node = (NavigationTreeNodeSupport) value; + return node.getText(); + } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeHeader.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeHeader.jaxx index 7bf4717..9513ac2 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeHeader.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeHeader.jaxx @@ -19,10 +19,15 @@ --> <JPanel layout='{new BorderLayout()}'> - <JToolBar constraints='BorderLayout.WEST' layout="{new GridLayout(1,3)}"> + <import> + java.awt.FlowLayout + </import> + + <JToolBar constraints='BorderLayout.WEST' layout="{new FlowLayout(FlowLayout.CENTER, 2, 2)}"> <JToggleButton id='showSeine' onActionPerformed="handler.tryToUpdateNavigationTree()"/> <JToggleButton id='showLongline' onActionPerformed="handler.tryToUpdateNavigationTree()"/> <JToggleButton id='showReferential' onActionPerformed="handler.tryToUpdateNavigationTree()"/> + <JToggleButton id='showEmptyProgram' onActionPerformed="handler.tryToUpdateNavigationTree()"/> </JToolBar> <!-- label --> @@ -31,8 +36,10 @@ <!-- tree --> <NavigationTree id='tree' javaBean='new NavigationTree()'/> + <JTextField id="search" visible="false" constraints='BorderLayout.CENTER' + onKeyReleased="handler.search(search.getText())"/> - <JLabel id="label" constraints='BorderLayout.CENTER'/> + <!--<JLabel id="label" constraints='BorderLayout.CENTER'/>--> <JToolBar id='toolbar' constraints='BorderLayout.EAST'> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeHeader.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeHeader.jcss index 71920e5..3527f68 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeHeader.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeHeader.jcss @@ -23,14 +23,22 @@ #showSeine { selected: {tree.getTreeModel().isLoadSeine()}; text:"observe.enum.fr.ird.observe.services.dto.ObserveModelType.PS"; + toolTipText:"observe.enum.fr.ird.observe.services.dto.ObserveModelType.PS.tip"; } #showLongline { selected: {tree.getTreeModel().isLoadLongline()}; text:"observe.enum.fr.ird.observe.services.dto.ObserveModelType.LL"; + toolTipText:"observe.enum.fr.ird.observe.services.dto.ObserveModelType.LL.tip"; } -#showReferential{ +#showReferential { selected: {tree.getTreeModel().isLoadReferential()}; text:"observe.enum.fr.ird.observe.services.dto.ObserveModelType.REF"; + toolTipText:"observe.enum.fr.ird.observe.services.dto.ObserveModelType.REF.tip"; +} + +#showEmptyProgram { + selected: {tree.getTreeModel().isLoadEmptyProgram()}; + toolTipText:"observe.enum.fr.ird.observe.services.dto.ObserveModelType.EMPTY.tip"; } #label { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeHeaderHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeHeaderHandler.java index b1e7e9a..c22d252 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeHeaderHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeHeaderHandler.java @@ -23,14 +23,28 @@ package fr.ird.observe.application.swing.ui.tree.navigation; */ import fr.ird.observe.application.swing.ObserveSwingApplicationContext; +import fr.ird.observe.application.swing.ui.UIHelper; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; +import fr.ird.observe.services.dto.longline.TripLonglineDto; +import fr.ird.observe.services.dto.referential.ProgramDto; +import fr.ird.observe.services.dto.seine.TripSeineDto; import jaxx.runtime.spi.UIHandler; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.jdesktop.swingx.decorator.ColorHighlighter; +import org.jdesktop.swingx.search.Searchable; +import org.jdesktop.swingx.search.TreeSearchable; + +import java.awt.Color; /** * @author Samuel Maisonneuve- maisonneuve@codelutin.com */ public class NavigationTreeHeaderHandler implements UIHandler<NavigationTreeHeader> { + /** Logger */ + private static final Log log = LogFactory.getLog(NavigationTreeHeaderHandler.class); + private NavigationTreeHeader ui; public NavigationTreeHeader getUi() { @@ -48,6 +62,24 @@ public class NavigationTreeHeaderHandler implements UIHandler<NavigationTreeHead @Override public void afterInit(NavigationTreeHeader navigationTreeHeader) { + + navigationTreeHeader.getShowSeine().setIcon(UIHelper.getUIManagerIcon("navigation." + TripSeineDto.class.getName() + "-16")); + navigationTreeHeader.getShowLongline().setIcon(UIHelper.getUIManagerIcon("navigation." + TripLonglineDto.class.getName() + "-16")); + navigationTreeHeader.getShowReferential().setIcon(UIHelper.getUIManagerIcon("navigation.referentiel-16")); + navigationTreeHeader.getShowEmptyProgram().setIcon(UIHelper.getUIManagerIcon("navigation." + ProgramDto.class.getName() + "-16")); + + NavigationTree tree = navigationTreeHeader.getTree(); + TreeSearchable searchable = new TreeSearchable(tree); + tree.setSearchable(searchable); + searchable.setMatchHighlighter(new ColorHighlighter(Color.YELLOW, Color.BLACK)); + + } + + public void search(String term) { + + Searchable searchable = getTree().getSearchable(); + searchable.search(term); + } public void tryToUpdateNavigationTree() { @@ -58,51 +90,47 @@ public class NavigationTreeHeaderHandler implements UIHandler<NavigationTreeHead return; } - NavigationTreeNodeSupport<?> selectedNode = getTree().getSelectedNode(); + NavigationTree tree = getTree(); - getTree().clearSelection(); + NavigationTreeNodeSupport<?> selectedNode = tree.getSelectedNode(); + if (log.isInfoEnabled()) { + log.info("Selected node: "+selectedNode); + } + tree.clearSelection(); boolean showSeine = ui.getShowSeine().isSelected(); boolean showLongline = ui.getShowLongline().isSelected(); boolean showReferential = ui.getShowReferential().isSelected(); + boolean showEmptyProgram = ui.getShowEmptyProgram().isSelected(); - NavigationTreeModel treeModel = getTree().getTreeModel(); + NavigationTreeModel treeModel = tree.getTreeModel(); treeModel.setLoadSeine(showSeine); treeModel.setLoadLongline(showLongline); treeModel.setLoadReferential(showReferential); + treeModel.setLoadEmptyProgram(showEmptyProgram); treeModel.populate(); //FIXME repositionner le nœud sélectionné if (!treeModel.getRoot().isLeaf()) { - getTree().setSelectionRow(0); + tree.setSelectionRow(0); } } public void collapseAll() { -// // Let's unselect the nodes before collapsing them -// unselectAll(); NavigationTree tree = getTree(); + tree.clearSelection(); tree.collapseAll(); + tree.setSelectionRow(0); + } public void expandAll() { + NavigationTree tree = getTree(); tree.expandAll(); - ; + } -// public void unselectAll() { -// JTree tree = getTree(); -// TreeSelectionModel selectionModel = tree.getSelectionModel(); -// -// for (int i = 0, l = tree.getRowCount(); i < l; i++) { -// -// TreePath path = tree.getPathForRow(i); -// if (selectionModel.isPathSelected(path)) { -// tree.setSelectionPath(path); -// } -// } -// } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeModel.java index 29253a2..a0b510d 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeModel.java @@ -61,6 +61,7 @@ public class NavigationTreeModel extends DefaultTreeModel { private boolean loadSeine = true; private boolean loadLongline = true; private boolean loadReferential = true; + private boolean loadEmptyProgram = true; public NavigationTreeModel() { super(new RootNavigationTreeNode()); @@ -129,6 +130,7 @@ public class NavigationTreeModel extends DefaultTreeModel { NavigationRequest navigationRequest = new NavigationRequest(); navigationRequest.setLoadLongline(isLoadLongline()); navigationRequest.setLoadSeine(isLoadSeine()); + navigationRequest.setLoadEmptyProgram(isLoadEmptyProgram()); return navigationRequest; } @@ -161,6 +163,14 @@ public class NavigationTreeModel extends DefaultTreeModel { this.loadReferential = loadReferential; } + public boolean isLoadEmptyProgram() { + return loadEmptyProgram; + } + + public void setLoadEmptyProgram(boolean loadEmptyProgram) { + this.loadEmptyProgram = loadEmptyProgram; + } + public <N extends NavigationTreeNodeSupport> void reload(N node) { node.reload(); super.reload(node); diff --git a/application-swing/src/main/resources/i18n/application-swing_en_GB.properties b/application-swing/src/main/resources/i18n/application-swing_en_GB.properties index 8021417..e7cf855 100644 --- a/application-swing/src/main/resources/i18n/application-swing_en_GB.properties +++ b/application-swing/src/main/resources/i18n/application-swing_en_GB.properties @@ -1418,9 +1418,13 @@ observe.enum.fr.ird.observe.application.swing.validation.ValidationModelMode.DAT observe.enum.fr.ird.observe.application.swing.validation.ValidationModelMode.DATA.description=Only data observe.enum.fr.ird.observe.application.swing.validation.ValidationModelMode.REFERENTIEL=Only referentials observe.enum.fr.ird.observe.application.swing.validation.ValidationModelMode.REFERENTIEL.description=Only referentials +observe.enum.fr.ird.observe.services.dto.ObserveModelType.EMPTY.tip=Display programs with no trip observe.enum.fr.ird.observe.services.dto.ObserveModelType.LL=Longline +observe.enum.fr.ird.observe.services.dto.ObserveModelType.LL.tip=Display Palangre's programs observe.enum.fr.ird.observe.services.dto.ObserveModelType.PS=Seine +observe.enum.fr.ird.observe.services.dto.ObserveModelType.PS.tip=Display Seine's programs observe.enum.fr.ird.observe.services.dto.ObserveModelType.REF=Referential +observe.enum.fr.ird.observe.services.dto.ObserveModelType.REF.tip=Display referential observe.enum.fr.ird.observe.services.dto.constants.GearType.longline=Longline gear type observe.enum.fr.ird.observe.services.dto.constants.GearType.seine=Senne gear type observe.enum.fr.ird.observe.services.dto.constants.ReferenceStatus.disabled=Disabled diff --git a/application-swing/src/main/resources/i18n/application-swing_es_ES.properties b/application-swing/src/main/resources/i18n/application-swing_es_ES.properties index 37676e1..9ab8c56 100644 --- a/application-swing/src/main/resources/i18n/application-swing_es_ES.properties +++ b/application-swing/src/main/resources/i18n/application-swing_es_ES.properties @@ -1418,9 +1418,13 @@ observe.enum.fr.ird.observe.application.swing.validation.ValidationModelMode.DAT observe.enum.fr.ird.observe.application.swing.validation.ValidationModelMode.DATA.description=Datos del observador observe.enum.fr.ird.observe.application.swing.validation.ValidationModelMode.REFERENTIEL=Referencial observe.enum.fr.ird.observe.application.swing.validation.ValidationModelMode.REFERENTIEL.description=Todos los referenciales +observe.enum.fr.ird.observe.services.dto.ObserveModelType.EMPTY.tip=Voir les programmes sans marée \#TODO observe.enum.fr.ird.observe.services.dto.ObserveModelType.LL=Palangre +observe.enum.fr.ird.observe.services.dto.ObserveModelType.LL.tip=Voir les programmes Palangre \#TODO observe.enum.fr.ird.observe.services.dto.ObserveModelType.PS=Senne +observe.enum.fr.ird.observe.services.dto.ObserveModelType.PS.tip=Voir les programmes Senne \#TODO observe.enum.fr.ird.observe.services.dto.ObserveModelType.REF=Referencial +observe.enum.fr.ird.observe.services.dto.ObserveModelType.REF.tip=Voir le référentiel \#TODO observe.enum.fr.ird.observe.services.dto.constants.GearType.longline=Palangre observe.enum.fr.ird.observe.services.dto.constants.GearType.seine=Senne observe.enum.fr.ird.observe.services.dto.constants.ReferenceStatus.disabled=Desactivado diff --git a/application-swing/src/main/resources/i18n/application-swing_fr_FR.properties b/application-swing/src/main/resources/i18n/application-swing_fr_FR.properties index 0569c2b..517ecb4 100644 --- a/application-swing/src/main/resources/i18n/application-swing_fr_FR.properties +++ b/application-swing/src/main/resources/i18n/application-swing_fr_FR.properties @@ -1418,9 +1418,13 @@ observe.enum.fr.ird.observe.application.swing.validation.ValidationModelMode.DAT observe.enum.fr.ird.observe.application.swing.validation.ValidationModelMode.DATA.description=Données observées observe.enum.fr.ird.observe.application.swing.validation.ValidationModelMode.REFERENTIEL=Référentiel observe.enum.fr.ird.observe.application.swing.validation.ValidationModelMode.REFERENTIEL.description=Tous les référentiels +observe.enum.fr.ird.observe.services.dto.ObserveModelType.EMPTY.tip=Voir les programmes sans marée observe.enum.fr.ird.observe.services.dto.ObserveModelType.LL=Palangre +observe.enum.fr.ird.observe.services.dto.ObserveModelType.LL.tip=Voir les programmes Palangre observe.enum.fr.ird.observe.services.dto.ObserveModelType.PS=Senne +observe.enum.fr.ird.observe.services.dto.ObserveModelType.PS.tip=Voir les programmes Seine observe.enum.fr.ird.observe.services.dto.ObserveModelType.REF=Référentiel +observe.enum.fr.ird.observe.services.dto.ObserveModelType.REF.tip=Voir le référentiel observe.enum.fr.ird.observe.services.dto.constants.GearType.longline=Longline observe.enum.fr.ird.observe.services.dto.constants.GearType.seine=Senne observe.enum.fr.ird.observe.services.dto.constants.ReferenceStatus.disabled=Désactivé diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/data/NavigationServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/data/NavigationServiceTopia.java index 4acc746..1d5ca60 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/data/NavigationServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/data/NavigationServiceTopia.java @@ -58,18 +58,10 @@ public class NavigationServiceTopia extends ObserveServiceTopia implements Navig ImmutableSet<ReferentialReference<ProgramDto>> allPrograms = serviceContext.newService(ReferentialService.class).getReferenceSet(ProgramDto.class, null).getReferences(); ImmutableMap<String, ReferentialReference<ProgramDto>> programsById = Maps.uniqueIndex(allPrograms, ReferentialReference::getId); - ImmutableSet.Builder<ReferentialReference<ProgramDto>> programsBuilder = ImmutableSet.builder(); boolean loadLongline = request.isLoadLongline(); boolean loadSeine = request.isLoadSeine(); - - for (ReferentialReference<ProgramDto> program : allPrograms) { - if (loadLongline && ProgramHelper.isProgramLongline(program)) { - programsBuilder.add(program); - } else if (loadSeine && ProgramHelper.isProgramSeine(program)) { - programsBuilder.add(program); - } - } + boolean loadEmptyProgram = request.isLoadEmptyProgram(); Multimap<ReferentialReference<ProgramDto>, DataReference<TripSeineDto>> tripsSeineByProgram = HashMultimap.create(); Multimap<ReferentialReference<ProgramDto>, DataReference<TripLonglineDto>> tripsLonglineByProgram = HashMultimap.create(); @@ -96,6 +88,29 @@ public class NavigationServiceTopia extends ObserveServiceTopia implements Navig } + ImmutableSet.Builder<ReferentialReference<ProgramDto>> programsBuilder = ImmutableSet.builder(); + if (loadEmptyProgram) { + + // on renvoie tous les programmes + for (ReferentialReference<ProgramDto> program : allPrograms) { + if (loadLongline && ProgramHelper.isProgramLongline(program)) { + programsBuilder.add(program); + } else if (loadSeine && ProgramHelper.isProgramSeine(program)) { + programsBuilder.add(program); + } + } + + } else { + + // on renvoie uniquement les programmes utilisés + if (loadLongline) { + programsBuilder.addAll(tripsLonglineByProgram.keySet()); + } + if (loadSeine) { + programsBuilder.addAll(tripsSeineByProgram.keySet()); + } + } + return new NavigationResult(programsBuilder.build(), tripsSeineByProgram, tripsLonglineByProgram); } } diff --git a/services/src/main/java/fr/ird/observe/services/service/data/NavigationRequest.java b/services/src/main/java/fr/ird/observe/services/service/data/NavigationRequest.java index 45f625d..a4a2640 100644 --- a/services/src/main/java/fr/ird/observe/services/service/data/NavigationRequest.java +++ b/services/src/main/java/fr/ird/observe/services/service/data/NavigationRequest.java @@ -33,6 +33,7 @@ public class NavigationRequest { private boolean loadSeine; private boolean loadLongline; + private boolean loadEmptyProgram; public boolean isLoadSeine() { return loadSeine; @@ -49,4 +50,12 @@ public class NavigationRequest { public void setLoadLongline(boolean loadLongline) { this.loadLongline = loadLongline; } + + public void setLoadEmptyProgram(boolean loadEmptyProgram) { + this.loadEmptyProgram = loadEmptyProgram; + } + + public boolean isLoadEmptyProgram() { + return loadEmptyProgram; + } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 5f5d63128e63d226242ea0d96aac90044f990114 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Nov 27 13:25:04 2016 +0100 refs #8429 Possibilité de choisir les couleurs de bordure + amélioration du code de rechargement de l'ui --- .../src/main/config/ObserveSwingApplication.ini | 12 ++ ...pplication-swing-configuration_en_GB.properties | 2 + ...pplication-swing-configuration_es_ES.properties | 2 + ...pplication-swing-configuration_fr_FR.properties | 2 + .../application/swing/ui/BorderFocusListener.java | 72 -------- .../application/swing/ui/ObserveMainUI.jaxx | 4 +- .../application/swing/ui/ObserveMainUIHandler.java | 192 ++++++++++++--------- .../application/swing/ui/ObserveUICallback.java | 11 +- .../swing/ui/actions/ShowConfigAction.java | 3 + .../ui/actions/global/AbstractGlobalUIAction.java | 18 ++ .../actions/global/ChangeFocusGlobalUIAction.java | 9 +- .../global/OpenCloseDataGlobalUIAction.java | 8 +- .../swing/ui/content/ContentUIManager.java | 13 +- .../ui/tree/navigation/NavigationTreeHeader.jcss | 5 + 14 files changed, 178 insertions(+), 175 deletions(-) diff --git a/application-swing-configuration/src/main/config/ObserveSwingApplication.ini b/application-swing-configuration/src/main/config/ObserveSwingApplication.ini index 53c2015..6087171 100644 --- a/application-swing-configuration/src/main/config/ObserveSwingApplication.ini +++ b/application-swing-configuration/src/main/config/ObserveSwingApplication.ini @@ -491,6 +491,18 @@ key = ui.coordinate.format type = org.nuiton.jaxx.widgets.gis.CoordinateFormat defaultValue = "dmd" +[option focusBorderColor] +description = observe.config.ui.focusBorderColor +key = ui.focusBorder.color +type = java.awt.Color +defaultValue = "java.awt.Color[r=64,g=64,b=64]" + +[option noFocusBorderColor] +description = observe.config.ui.noFocusBorderColor +key = ui.noFocusBorderColor.color +type = java.awt.Color +defaultValue = "java.awt.Color[r=192,g=192,b=192]" + [action help] description = observe.action.commandline.help action = "fr.ird.observe.application.swing.ObserveCLAction#help" diff --git a/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_en_GB.properties b/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_en_GB.properties index 5972f04..c75c8f5 100644 --- a/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_en_GB.properties +++ b/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_en_GB.properties @@ -74,9 +74,11 @@ observe.config.speciesList.seine.targetCatch=Species for target catches observe.config.swingSessionFile.description=Swing session file. observe.config.ui.autoPopupNumberEditor=Flag sets to true when number editor show automaticly popup observe.config.ui.changeSynchroSrc=Flag sets to true if you can change local source in admin tasks +observe.config.ui.focusBorderColor=Color of the focus container border observe.config.ui.fullscreen=Flag sets to true to lauch application in full screen mode observe.config.ui.loadLocalStorage=Flag sets to true to load local data source when application starts observe.config.ui.locale=Application's language +observe.config.ui.noFocusBorderColor=Color of the not focus container border observe.config.ui.showNumberEditorButton=Flag sets to true to show button to invoke popup on number's editors observe.config.ui.showTimeEditorSlider=Show timer slider observe.config.ui.storeRemoteStorage=Flag sets to true to store in config a remote connexion (except passwords) diff --git a/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_es_ES.properties b/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_es_ES.properties index d1f3d9c..b3ad83e 100644 --- a/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_es_ES.properties +++ b/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_es_ES.properties @@ -74,9 +74,11 @@ observe.config.speciesList.seine.targetCatch=Especies par las capturas objetivo observe.config.swingSessionFile.description=Fichier de sauvegarde des états des UI. \#TODO observe.config.ui.autoPopupNumberEditor=Para mostrar automáticamente el editor numérico durante la edición de un número observe.config.ui.changeSynchroSrc=Pour autoriser la sélection de la base source dans les opérations sur base +observe.config.ui.focusBorderColor=Couleur de la bordure de la zone qui a le focus \#TODO observe.config.ui.fullscreen=Para mostrar en modo pantalla completa la aplicación observe.config.ui.loadLocalStorage=Cambiar la base local al iniciar la aplicación observe.config.ui.locale=Idioma de la aplicación (fr_FR, en_GB o es_ES) +observe.config.ui.noFocusBorderColor=Couleur de la bordure de la zone qui n'a pas le focus \#TODO observe.config.ui.showNumberEditorButton=Para mostrar el botón que permite usar el editor numérico a la izquierda de cada campo numérico observe.config.ui.showTimeEditorSlider=Para mostrar la regla de edición de las horas observe.config.ui.storeRemoteStorage=Para activar la copia de seguridad de la configuración de la fuente de datos remota diff --git a/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_fr_FR.properties b/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_fr_FR.properties index fedfa39..5207b9a 100644 --- a/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_fr_FR.properties +++ b/application-swing-configuration/src/main/resources/i18n/application-swing-configuration_fr_FR.properties @@ -74,9 +74,11 @@ observe.config.speciesList.seine.targetCatch=Espèces pour les captures cible observe.config.swingSessionFile.description=Fichier de sauvegarde des états des UI. observe.config.ui.autoPopupNumberEditor=Pour afficher automatiquement l'éditeur numérique lors de l'édition d'un nombre observe.config.ui.changeSynchroSrc=Pour autoriser la sélection de la base source dans les opérations sur base +observe.config.ui.focusBorderColor=Couleur de la bordure de la zone qui a le focus observe.config.ui.fullscreen=Pour afficher l'application en mode pleine écran observe.config.ui.loadLocalStorage=Charger la base locale au démarrage de l'application observe.config.ui.locale=Langue utilisée par l'application (fr_FR, en_GB ou es_ES) +observe.config.ui.noFocusBorderColor=Couleur de la bordure de la zone qui n'a pas le focus observe.config.ui.showNumberEditorButton=Pour afficher le bouton qui permet d'utiliser l'éditeur numérique à gauche de chaque champs numérique observe.config.ui.showTimeEditorSlider=Pour afficher la réglette d'édition des heures observe.config.ui.storeRemoteStorage=Pour activer la sauvegarde de la configuration de la source distante 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 deleted file mode 100644 index c225e8d..0000000 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/BorderFocusListener.java +++ /dev/null @@ -1,72 +0,0 @@ -package fr.ird.observe.application.swing.ui; - -/*- - * #%L - * ObServe :: Application Swing - * %% - * Copyright (C) 2008 - 2016 IRD, Code Lutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -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 c1c201b..5dcc505 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 @@ -97,6 +97,8 @@ <Boolean id='busy' javaBean='false'/> + <Boolean id='focusOnNavigation' javaBean='false'/> + <CardLayout2 id='contentLayout'/> <CardLayout2Ext id='bodyLayout' constructorParams='this, "body"'/> @@ -338,6 +340,4 @@ 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/ObserveMainUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUIHandler.java index dfcbbea..3937401 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 @@ -41,7 +41,6 @@ import fr.ird.observe.application.swing.ui.util.ObserveSwingValidatorMessageTabl import fr.ird.observe.application.swing.ui.util.ObserveValidatorMessageTableRenderer; import fr.ird.observe.services.dto.AbstractObserveDto; import fr.ird.observe.services.dto.constants.ReferentialLocale; -import jaxx.runtime.JAXXContext; import jaxx.runtime.context.DefaultApplicationContext; import jaxx.runtime.context.JAXXInitialContext; import jaxx.runtime.swing.ErrorDialogUI; @@ -54,10 +53,12 @@ import org.nuiton.i18n.I18n; import javax.swing.Icon; import javax.swing.JComponent; import javax.swing.SwingUtilities; +import javax.swing.border.Border; +import javax.swing.border.LineBorder; import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreePath; import java.awt.Component; +import java.awt.Container; import java.awt.Cursor; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -171,8 +172,44 @@ public class ObserveMainUIHandler { DataContext context = ui.getDataContext(); context.populateSelectedIds(selectedIds); - BorderFocusListener borderFocusListener = ui.getBorderFocusListener(); - borderFocusListener.setEnabled(false); + JComponent focusOwner = (JComponent) ui.getFocusOwner(); + boolean focusOnNavigation = false; + + if (focusOwner != null) { + if (ui.getNavigation().equals(focusOwner)) { + focusOnNavigation = true; + } + if (ui.getNavigationTreeHeader().equals(focusOwner)) { + focusOnNavigation = true; + } + if (ui.getNavigationView().equals(focusOwner)) { + focusOnNavigation = true; + } + if (!focusOnNavigation) { + Container focusOwnerParent = focusOwner.getParent(); + while (focusOwnerParent != null) { + if (ui.getNavigation().equals(focusOwnerParent)) { + focusOnNavigation = true; + break; + } + if (ui.getNavigationTreeHeader().equals(focusOwnerParent)) { + focusOnNavigation = true; + break; + } + if (ui.getNavigationView().equals(focusOwnerParent)) { + focusOnNavigation = true; + break; + } + focusOwnerParent = focusOwnerParent.getParent(); + } + } + } + + if (focusOnNavigation) { + if (log.isInfoEnabled()) { + log.info("Focus on navigation: " + focusOwner); + } + } // on recherche l'ui (voir si elle existe déjà) ContentUI<?, ?> content = manager.getContent(uiClass); @@ -185,7 +222,7 @@ public class ObserveMainUIHandler { // on ouvre l'écran manager.openContent(content); - SwingUtilities.invokeLater(() -> borderFocusListener.setEnabled(true)); + if (focusOnNavigation) SwingUtilities.invokeLater(focusOwner::requestFocusInWindow); } /** @@ -197,26 +234,21 @@ public class ObserveMainUIHandler { */ public ObserveMainUI initUI(ObserveSwingApplicationContext context, ObserveSwingApplicationConfig config) { - SwingValidatorMessageTableModel errorModel = - new ObserveSwingValidatorMessageTableModel(); + SwingValidatorMessageTableModel errorModel = new ObserveSwingValidatorMessageTableModel(); DecoratorService decoratorService = context.getDecoratorService(); boolean reloadDecorators = false; Locale currentLocale = I18n.getDefaultLocale(); -// if (!config.getLocale().equals( -// I18n.getStore().getLanguage().getLocale())) { Locale configurationLocale = config.getLocale(); if (!configurationLocale.equals(currentLocale)) { if (log.isInfoEnabled()) { log.info("re-init I18n with locale " + configurationLocale); } I18n.setDefaultLocale(configurationLocale); -// I18n.init(configurationLocale); reloadDecorators = true; } - if (!config.getDbLocale().equals( - decoratorService.getReferentialLocale().getLocale())) { + if (!config.getDbLocale().equals(decoratorService.getReferentialLocale().getLocale())) { if (log.isInfoEnabled()) { log.info("re-init db with locale " + config.getDbLocale()); } @@ -232,16 +264,6 @@ public class ObserveMainUIHandler { decoratorService.reload(); } -// ObserveTreeHelper treeHelper = new ObserveTreeHelper(); -// ObserveSwingDataSource source = context.getDataSourcesManager().getMainDataSource(); - -// boolean open = context.getDataContext().getEnabled(); -// if (open) { -// treeHelper.initModel(source); -// } else { -// treeHelper.createEmptyModel(); -// } - JAXXInitialContext tx = new JAXXInitialContext(); tx.add(context).add(errorModel); @@ -307,7 +329,7 @@ public class ObserveMainUIHandler { config.removeJaxxPropertyChangeListener(); // scan main ui - ObserveMainUI ui = getUI(rootContext); + ObserveMainUI ui = rootContext.getMainUI(); ObserveSwingDataSource mainStorage = rootContext.getDataSourcesManager().getMainDataSource(); @@ -330,6 +352,8 @@ public class ObserveMainUIHandler { System.runFinalization(); } + focusBorder = null; + noFocusBorder = null; ui = initUI(rootContext, config); if (oldMode == null) { @@ -345,6 +369,15 @@ public class ObserveMainUIHandler { if (oldMode == ObserveUIMode.DB) { + // on met à jour le modèle de navigation + NavigationTreeModel treeModel = ui.getNavigation().getTreeModel(); + treeModel.setLoadSeine(ui.getNavigationTreeHeader().getShowSeine().isSelected()); + treeModel.setLoadLongline(ui.getNavigationTreeHeader().getShowLongline().isSelected()); + treeModel.setLoadReferential(ui.getNavigationTreeHeader().getShowReferential().isSelected()); + treeModel.setLoadEmptyProgram(ui.getNavigationTreeHeader().getShowEmptyProgram().isSelected()); + + treeModel.populate(); + // on conserve les noeuds a reselectionner rootContext.setNodesToReselect(ids); @@ -430,61 +463,16 @@ public class ObserveMainUIHandler { return l != null && l.toString().equals(expected); } - public ObserveMainUI getUI(JAXXContext context) { - if (context instanceof ObserveMainUI) { - return (ObserveMainUI) context; - } - return ObserveSwingApplicationContext.get().getMainUI(); - } - protected void $afterCompleteSetup(ObserveMainUI ui) { // bad binding, force value ui.getStopH2WebServer().setEnabled(false); -// ui.setContextValue(ui.getNavigation()); - ui.getStatus().init(); // ajout d'un ecouteur sur la navigation pour toujours mettre la scrollbar // tout à droite a chaque selection - TreeSelectionListener listener; - listener = e -> { - changeNavigationNode(ui, e); -// SwingUtilities.invokeLater(() -> { -// ui.getNavigationScrollPane().getHorizontalScrollBar().setValue(0); -// ui.getSplitpane2().resetToPreferredSizes(); -// }); - }; - ui.getNavigation().addTreeSelectionListener(listener); -// TreeWillExpandListener veteobableTreeWillExpand = new TreeWillExpandListener() { -// @Override -// public void treeWillExpand(TreeExpansionEvent event) { -// } -// -// @Override -// public void treeWillCollapse(TreeExpansionEvent event) throws ExpandVetoException { -// -// // le seul posant problème est la fermeture d'un noeud parent -// // du noeud courant : cela va changer la selection -// ObserveNode selectedNode = ui.getTreeHelper().getSelectedNode(); -// if (selectedNode == null) { -// // pas de noeud selectionne -// return; -// } -// -// ObserveNode o = (ObserveNode) event.getPath().getLastPathComponent(); -// if (selectedNode.equals(o) || !selectedNode.isNodeAncestor(o)) { -// return; -// } -// boolean canChange = ObserveSwingApplicationContext.get().getContentUIManager().closeSelectedContentUI(); -// if (!canChange) { -// throw new ExpandVetoException(event, "Can not collapse node " + event.getPath()); -// } -// } -// }; - -// ui.getTreeHelper().setUI(ui.getNavigation(), true, true, listener, veteobableTreeWillExpand); + ui.getNavigation().addTreeSelectionListener(e -> changeNavigationNode(ui, e)); SwingValidatorUtil.installUI(ui.getErrorTable(), new ObserveValidatorMessageTableRenderer()); @@ -493,28 +481,74 @@ public class ObserveMainUIHandler { // ecoute des changements de l'état busy ui.addPropertyChangeListener(ObserveMainUI.PROPERTY_BUSY, evt -> { - Boolean newvalue = (Boolean) evt.getNewValue(); - updateBusyState(ui, newvalue != null && newvalue); + boolean newvalue = (boolean) evt.getNewValue(); + updateBusyState(ui, newvalue); + }); + + ui.addPropertyChangeListener(ObserveMainUI.PROPERTY_FOCUS_ON_NAVIGATION, evt -> { + boolean newvalue = (boolean) evt.getNewValue(); + updateFocusOnNavigation(ui, newvalue); }); - ui.getNavigation().addFocusListener(ui.getBorderFocusListener()); + ui.getNavigationView().addMouseListener(new MouseAdapter() { + @Override + public void mouseEntered(MouseEvent e) { + ui.setFocusOnNavigation(true); + } + }); ui.getNavigation().addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { - ((JComponent) e.getSource()).grabFocus(); + ui.setFocusOnNavigation(true); + } + }); + ui.getNavigationTreeHeader().addMouseListener(new MouseAdapter() { + @Override + public void mouseEntered(MouseEvent e) { + ui.setFocusOnNavigation(true); } }); ui.getSplitpane2().addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { - if (log.isInfoEnabled()) { - log.info("grab getSplitpane2 focus: " + e); - } - ((JComponent) e.getSource()).grabFocus(); + ui.setFocusOnNavigation(false); } }); } + private Border focusBorder; + private Border noFocusBorder; + + public Border getFocusBorder() { + if (focusBorder == null) { + focusBorder = new LineBorder(ObserveSwingApplicationContext.get().getConfig().getFocusBorderColor(), 3, true); + } + return focusBorder; + } + + public Border getNoFocusBorder() { + if (noFocusBorder == null) { + noFocusBorder = new LineBorder(ObserveSwingApplicationContext.get().getConfig().getNoFocusBorderColor(), 3, true); + } + return noFocusBorder; + } + + private void updateFocusOnNavigation(ObserveMainUI ui, boolean newvalue) { + if (newvalue) { + if (log.isDebugEnabled()) { + log.debug("Focus on navigation"); + } + ui.getNavigationView().setBorder(getFocusBorder()); + ui.getSplitpane2().setBorder(getNoFocusBorder()); + } else { + if (log.isDebugEnabled()) { + log.debug("Focus on content"); + } + ui.getNavigationView().setBorder(getNoFocusBorder()); + ui.getSplitpane2().setBorder(getFocusBorder()); + } + } + protected void updateBusyState(ObserveMainUI ui, boolean busy) { if (busy) { // ui bloquee @@ -574,6 +608,8 @@ public class ObserveMainUIHandler { tree.setVisible(true); - SwingUtilities.invokeLater(tree::revalidate); + mainUI.setFocusOnNavigation(true); + + SwingUtilities.invokeLater(tree::requestFocusInWindow); } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveUICallback.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveUICallback.java index b70467e..81578ab 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveUICallback.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveUICallback.java @@ -49,8 +49,7 @@ public enum ObserveUICallback implements Runnable { log.info("will reload application"); } ObserveSwingApplicationContext context = ObserveSwingApplicationContext.get(); - ObserveMainUIHandler handler = new ObserveMainUIHandler(); - ObserveMainUI ui = handler.getUI(context); + ObserveMainUI ui = context.getMainUI(); if (log.isDebugEnabled()) { log.debug("Ask to reload."); @@ -67,10 +66,9 @@ public enum ObserveUICallback implements Runnable { log.info("will reload ui"); } ObserveSwingApplicationContext context = ObserveSwingApplicationContext.get(); - ObserveMainUIHandler handler = new ObserveMainUIHandler(); - ObserveMainUI ui = handler.getUI(context); + ObserveMainUI ui = context.getMainUI(); ObserveSwingApplicationConfig config = ui.getConfig(); - handler.reloadUI(context, config); + ui.getHandler().reloadUI(context, config); } }, db(n("observe.action.reload.storage"), @@ -82,8 +80,7 @@ public enum ObserveUICallback implements Runnable { } ObserveSwingApplicationContext context = ObserveSwingApplicationContext.get(); - ObserveMainUIHandler handler = new ObserveMainUIHandler(); - ObserveMainUI ui = handler.getUI(context); + ObserveMainUI ui = context.getMainUI(); new ReloadStorageAction(ui).run(); // handler.launchReloadStorage(ui); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ShowConfigAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ShowConfigAction.java index 964251c..1b1a036 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ShowConfigAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ShowConfigAction.java @@ -180,6 +180,9 @@ public class ShowConfigAction extends AbstractAction { helper.addOption(ObserveSwingApplicationConfigOption.SHOW_DATE_TIME_EDITOR_SLIDER); helper.addOption(ObserveSwingApplicationConfigOption.COORDINATE_FORMAT); + helper.addOption(ObserveSwingApplicationConfigOption.FOCUS_BORDER_COLOR); + helper.addOption(ObserveSwingApplicationConfigOption.NO_FOCUS_BORDER_COLOR); + helper.addOption(ObserveSwingApplicationConfigOption.DEFAULT_DB_MODE); helper.addOption(ObserveSwingApplicationConfigOption.DEFAULT_CREATION_MODE); helper.addOption(ObserveSwingApplicationConfigOption.STORE_REMOTE_STORAGE); 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 index ff7d344..05c1a5d 100644 --- 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 @@ -25,6 +25,9 @@ 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; +import javax.swing.JComponent; +import javax.swing.SwingUtilities; + /** * Created on 11/11/16. * @@ -37,4 +40,19 @@ public abstract class AbstractGlobalUIAction extends AbstractUIAction { super(mainUI, actionId, "<NONE>", "<NONE>", "reset", acceleratorKey); } + public void actionPerformed(Runnable r) { + + boolean focusOnNavigation = getMainUI().isFocusOnNavigation(); + JComponent focusOwner = (JComponent) getMainUI().getFocusOwner(); + + r.run(); + + if (focusOnNavigation) { + +// SwingUtilities.invokeLater(focusOwner::grabFocus); + SwingUtilities.invokeLater(focusOwner::requestFocusInWindow); + + } + } + } 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 index 5a6fcc8..f1ad3a4 100644 --- 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 @@ -28,7 +28,6 @@ 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; @@ -52,13 +51,14 @@ public class ChangeFocusGlobalUIAction extends AbstractGlobalUIAction { @Override public void actionPerformed(ActionEvent e) { - JTree navigation = getMainUI().getNavigation(); + boolean navigation = getMainUI().isFocusOnNavigation(); JComponent focusComponent; - if (navigation.isFocusOwner()) { + if (navigation) { if (log.isInfoEnabled()) { log.info("Focus to content"); } + getMainUI().setFocusOnNavigation(false); ContentUI<?, ?> contentUI = getContentUI(e); FocusTraversalPolicy focusTraversalPolicy = contentUI.getFocusTraversalPolicy(); focusComponent = (JComponent) focusTraversalPolicy.getFirstComponent(contentUI); @@ -74,7 +74,8 @@ public class ChangeFocusGlobalUIAction extends AbstractGlobalUIAction { if (log.isInfoEnabled()) { log.info("Focus to navigation"); } - focusComponent = navigation; + getMainUI().setFocusOnNavigation(true); + focusComponent = getMainUI().getNavigation(); } SwingUtilities.invokeLater(focusComponent::requestFocusInWindow); 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 index 7fda9ff..cb9e795 100644 --- 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 @@ -40,7 +40,7 @@ import java.util.Objects; * @author Tony Chemit - chemit@codelutin.com * @since 5.1 */ -public class OpenCloseDataGlobalUIAction extends AbstractGlobalUIAction { +public class OpenCloseDataGlobalUIAction extends AbstractGlobalUIAction implements Runnable { public static final String ACTION_NAME = "openCloseDataGlobal"; @@ -55,6 +55,12 @@ public class OpenCloseDataGlobalUIAction extends AbstractGlobalUIAction { @Override public void actionPerformed(ActionEvent e) { + actionPerformed(this); + } + + @Override + public void run() { + ContentUI<?, ?> contentUI = ObserveSwingApplicationContext.get().getContentUIManager().getSelectedContentUI(); if (contentUI instanceof ContentListUI) { 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 7e6ac25..4aab8bf 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 @@ -34,8 +34,6 @@ 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; @@ -110,7 +108,7 @@ public class ContentUIManager { if (log.isInfoEnabled()) { log.info("grab enter focus: " + e); } - ((JComponent) e.getSource()).grabFocus(); + getMainUI().setFocusOnNavigation(false); } @Override @@ -119,7 +117,7 @@ public class ContentUIManager { if (log.isInfoEnabled()) { log.info("grab moved focus: " + e); } - ((JComponent) e.getSource()).grabFocus(); + getMainUI().setFocusOnNavigation(false); } } }); @@ -139,9 +137,6 @@ 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(); @@ -158,10 +153,6 @@ public class ContentUIManager { getLayout().show(getLayoutContent(), constraints); } - if (focusOnNavigation) { - SwingUtilities.invokeLater(navigation::grabFocus); - } - } public void close() { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeHeader.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeHeader.jcss index 3527f68..0e2ffc3 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeHeader.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeHeader.jcss @@ -45,6 +45,11 @@ text:{getLabelText()}; } +JToggleButton { + focusable:false; + focusPainted:false; +} + JButton { focusable:false; focusPainted:false; -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm