[Git][ultreiaio/ird-observe][develop] 5 commits: avoid re-entrant code in listener
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: ee03d54b by Tony Chemit at 2023-11-28T17:19:37+01:00 avoid re-entrant code in listener - - - - - b5b89df8 by Tony Chemit at 2023-11-28T17:20:29+01:00 Do not enable change mode action if not one selected data - - - - - b3f7a158 by Tony Chemit at 2023-11-28T17:33:20+01:00 On list ui, always select first item at end open - - - - - c4dec149 by Tony Chemit at 2023-11-28T17:34:08+01:00 On list ui, show configuration actions in navigation context menu even if model is not editable (may have the goto editing child action enabled here) - - - - - cfc0c2f3 by Tony Chemit at 2023-11-28T17:34:26+01:00 Merge branch 'feature/issue-2810' into develop LL observations, en sélection multiple d'activités, la fonction 'Rouvrir la donnée de type activité' ne devrait pas être disponible - Closes #2810 - - - - - 3 changed files: - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/mode/ChangeModeProducer.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUIHandler.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/NavigationTreeShowPopupHandler.java Changes: ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/mode/ChangeModeProducer.java ===================================== @@ -45,6 +45,8 @@ public class ChangeModeProducer<U extends ContentUI> { private final U ui; private final PropertyChangeListener listener; + private boolean adjusting; + public ChangeModeProducer(U ui, ChangeModeRequest request, String... properties) { this.ui = Objects.requireNonNull(ui); this.request = Objects.requireNonNull(request); @@ -57,7 +59,16 @@ public class ChangeModeProducer<U extends ContentUI> { listener = (PropertyChangeEvent evt) -> { if (modelStates.contains(evt.getPropertyName())) { - doRebuildChangeMode(); + if (adjusting) { + return; + } + try { + adjusting = true; + doRebuildChangeMode(); + } finally { + adjusting = false; + } + } }; ui.getModel().getStates().addPropertyChangeListener(ContentUIModelStates.PROPERTY_OPENED, evt -> { ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/list/ContentListUIHandler.java ===================================== @@ -46,6 +46,7 @@ import org.apache.logging.log4j.Logger; import javax.swing.JComponent; import javax.swing.JMenuItem; +import javax.swing.SwingUtilities; import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.MouseEvent; @@ -126,6 +127,16 @@ public abstract class ContentListUIHandler<D extends OpenableDto, R extends Data ShowTechnicalInformations.installAction(ui); } + @Override + public void onEndOpenUI() { + super.onEndOpenUI(); + SwingUtilities.invokeLater(()-> { + if (!ui.getModel().getStates().isEmpty() && ui.getList().isSelectionEmpty()) { + ui.getList().setSelectedIndex(0); + } + }); + } + @Override public void installChangeModeAction() { ChangeModeRequest request = ui.getModel().toChangeModeRequest(); @@ -194,6 +205,26 @@ public abstract class ContentListUIHandler<D extends OpenableDto, R extends Data ui.getActions().setVisible(false); super.rebuildNotEditableZone(ui); } + + @Override + protected void rebuildAction(U ui, ContentMode newValue) { + ContentListUIModelStates<R> states = ui.getModel().getStates(); + boolean editable = states.isEditable(); + if (editable && ContentMode.READ.equals(newValue)) { + boolean disableAction = false; + if (!states.isOneSelectedData()) { + disableAction = true; + states.setEditable(false); + } + super.rebuildAction(ui, newValue); + if(disableAction) { + states.setEditable(true); + setEnabled(false); + } + } else { + super.rebuildAction(ui, newValue); + } + } }; ChangeMode.installAction(ui, action); } ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/NavigationTreeShowPopupHandler.java ===================================== @@ -25,6 +25,7 @@ package fr.ird.observe.client.datasource.editor.api.navigation; import fr.ird.observe.client.datasource.editor.api.DataSourceEditorModel; import fr.ird.observe.client.datasource.editor.api.content.ContentUI; import fr.ird.observe.client.datasource.editor.api.content.ContentUIHandler; +import fr.ird.observe.client.datasource.editor.api.content.data.list.ContentListUI; import fr.ird.observe.client.datasource.editor.api.content.referential.ReferentialHomeUI; import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode; import org.apache.logging.log4j.LogManager; @@ -92,7 +93,7 @@ public class NavigationTreeShowPopupHandler implements KeyListener, MouseListene actions.forEach(a -> ContentUIMenuAction.createWithKeyStroke(popup, a).init()); length = popup.getSubElements().length; } else { - if (selectedContentUI.getMode().isEnabled()) { + if (selectedContentUI.getMode().isEnabled() || selectedContentUI instanceof ContentListUI) { ContentUIMenuAction.createWithKeyStroke(popup, selectedContentUI.getMode()).init(); actions.forEach(a -> ContentUIMenuAction.createWithKeyStroke(popup, a).init()); popup.addSeparator(); View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/9686faf40d5b01922d30adc5f... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/9686faf40d5b01922d30adc5f... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT (@tchemit)