Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: b73d1ded by Tony Chemit at 2022-09-03T08:02:13+02:00 La taille de la fenêtre de configuration de l'arbre de navigation tronque les boutons du bas si on passe du module PS vers LL - Closes #2340 - - - - - 2 changed files: - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/config/TreeConfigUIHandler.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/config/TreeConfigUIModel.java Changes: ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/config/TreeConfigUIHandler.java ===================================== @@ -49,12 +49,14 @@ import org.nuiton.jaxx.runtime.JAXXObject; import org.nuiton.jaxx.runtime.spi.UIHandler; import javax.swing.AbstractButton; +import javax.swing.Box; import javax.swing.Icon; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.KeyStroke; import javax.swing.SwingUtilities; +import javax.swing.UIManager; import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; import java.awt.Component; @@ -85,6 +87,11 @@ public class TreeConfigUIHandler implements UIHandler<TreeConfigUI>, PropertyCha private final Map<String, AbstractButton> allOptions; private final Multimap<String, AbstractButton> groupByOptions; private final Map<String, AbstractButton> temporalOptions; + /** + * Keep the default height (to add some extra components for missing groupBy count in a module and always have + * the same groupByChoose height at any cost). + */ + private final int defaultGroupByComponentHeight; private TreeConfigUI ui; public static void updateStatistics(ToolkitTreeFlatModelRootRequest request, @@ -178,6 +185,7 @@ public class TreeConfigUIHandler implements UIHandler<TreeConfigUI>, PropertyCha groupByOptions = ArrayListMultimap.create(); allOptions = new TreeMap<>(); temporalOptions = new TreeMap<>(); + defaultGroupByComponentHeight = UIManager.getDefaults().getIcon("RadioButton.icon").getIconHeight(); } @Override @@ -226,7 +234,7 @@ public class TreeConfigUIHandler implements UIHandler<TreeConfigUI>, PropertyCha reset(bean); } - public void updateOptions(){ + public void updateOptions() { for (Map.Entry<String, Collection<AbstractButton>> entry : groupByOptions.asMap().entrySet()) { entry.getValue().forEach(c -> { if (Objects.equals(true, c.getClientProperty(DISABLED))) { @@ -279,6 +287,7 @@ public class TreeConfigUIHandler implements UIHandler<TreeConfigUI>, PropertyCha } } } + public void reset(TreeConfig bean) { String moduleName = bean.getModuleName(); String groupByName = bean.getGroupByName(); @@ -309,6 +318,15 @@ public class TreeConfigUIHandler implements UIHandler<TreeConfigUI>, PropertyCha UseGroupByAction action = (UseGroupByAction) editor.getAction(); action.install(); } + int definitionMaxCount = ui.getModel().getDefinitionMaxCount(); + if (definitionMaxCount > editors.size()) { + // Fill with extra component to always have the same number of component in the groupByChoose + // See https://gitlab.com/ultreiaio/ird-observe/-/issues/2340 + for (int i = editors.size(); i < definitionMaxCount; i++) { + log.info("Add extra dummy component to fix size {} with height {}", i, defaultGroupByComponentHeight); + groupByChoose.add(Box.createVerticalStrut(defaultGroupByComponentHeight)); + } + } changeGroupByName(newGroupByName); SwingUtilities.invokeLater(ui::revalidate); SwingUtilities.invokeLater(ui::repaint); ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/config/TreeConfigUIModel.java ===================================== @@ -22,8 +22,11 @@ package fr.ird.observe.client.datasource.editor.api.config; * #L% */ +import fr.ird.observe.dto.data.DataGroupByDtoDefinition; import fr.ird.observe.navigation.tree.GroupByHelper; import fr.ird.observe.navigation.tree.TreeConfig; +import fr.ird.observe.spi.module.BusinessModule; +import fr.ird.observe.spi.module.ObserveBusinessProject; import io.ultreia.java4all.bean.AbstractJavaBean; import io.ultreia.java4all.bean.monitor.BeanMonitor; import io.ultreia.java4all.bean.monitor.PropertyDiff; @@ -78,12 +81,23 @@ public class TreeConfigUIModel extends AbstractJavaBean implements PropertyChang * GroupBy helper. */ private final GroupByHelper groupByHelper; + /** + * To keep to max count of definitions for a module to fix a minimum size in the ui. + * <p> + * See <a href="https://gitlab.com/ultreiaio/ird-observe/-/issues/2340">issue 2340</a> + */ + private final int definitionMaxCount; protected TreeConfigUIModel(GroupByHelper groupByHelper, TreeConfig originalBean) { this.groupByHelper = groupByHelper; this.originalBean = originalBean; this.bean = new TreeConfig(); this.monitor = new BeanMonitor(MONITORED_PROPERTIES.toArray(new String[0])); + this.definitionMaxCount = computeDefinitionMaxCount(ObserveBusinessProject.get().getModules()); + } + + public int getDefinitionMaxCount() { + return definitionMaxCount; } public TreeConfig getOriginalBean() { @@ -133,15 +147,15 @@ public class TreeConfigUIModel extends AbstractJavaBean implements PropertyChang */ public boolean isStructureChanged() { List<String> modifiedProperties = List.of(monitor.getModifiedProperties()); - if( modifiedProperties.contains(TreeConfig.LOAD_DATA)) { + if (modifiedProperties.contains(TreeConfig.LOAD_DATA)) { // loadData is now off return !bean.isLoadData(); } - if( modifiedProperties.contains(TreeConfig.LOAD_REFERENTIAL)) { + if (modifiedProperties.contains(TreeConfig.LOAD_REFERENTIAL)) { // loadReferential is now off return !bean.isLoadReferential(); } - if( modifiedProperties.contains(TreeConfig.MODULE_NAME)) { + if (modifiedProperties.contains(TreeConfig.MODULE_NAME)) { // previous module name is off return true; } @@ -170,4 +184,15 @@ public class TreeConfigUIModel extends AbstractJavaBean implements PropertyChang private void fireEmpty() { firePropertyChange(EMPTY, isEmpty()); } + + + private int computeDefinitionMaxCount(List<BusinessModule> modules) { + int definitionMaxCount = 0; + for (BusinessModule module : modules) { + List<DataGroupByDtoDefinition<?, ?>> definitions = module.getDataGroupByDtoDefinitions(); + definitionMaxCount = Math.max(definitionMaxCount, definitions.size()); + } + return definitionMaxCount; + } + } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/b73d1dedea0675802ad6fa4ebf... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/b73d1dedea0675802ad6fa4ebf... You're receiving this email because of your account on gitlab.com.