Tony CHEMIT pushed to branch develop-9.0.x at ultreiaio / ird-observe Commits: 33992b20 by Tony Chemit at 2022-10-24T11:20:54+02:00 Meilleur gestion des raccourcis clavier dans le gestionnaire de connexions et du focus - Closes #2489 - - - - - 3 changed files: - client/core/src/main/java/fr/ird/observe/client/datasource/presets/RemotePresetsUIHandler.java - client/core/src/main/java/fr/ird/observe/client/datasource/presets/actions/RemoteActionSupport.java - client/core/src/main/java/fr/ird/observe/client/datasource/presets/actions/ServerActionSupport.java Changes: ===================================== client/core/src/main/java/fr/ird/observe/client/datasource/presets/RemotePresetsUIHandler.java ===================================== @@ -22,7 +22,6 @@ package fr.ird.observe.client.datasource.presets; * #L% */ -import fr.ird.observe.client.ClientUIContextApplicationComponent; import fr.ird.observe.client.WithClientUIContextApi; import fr.ird.observe.client.configuration.ClientConfig; import fr.ird.observe.dto.presets.RemoteDataSourceConfiguration; @@ -34,9 +33,9 @@ import org.nuiton.jaxx.runtime.swing.renderer.DecoratorListCellRenderer; import javax.swing.DefaultListModel; import javax.swing.JComponent; import javax.swing.JPanel; -import javax.swing.JSplitPane; -import javax.swing.KeyStroke; +import javax.swing.JTabbedPane; import javax.swing.SwingUtilities; +import javax.swing.event.ChangeEvent; import java.awt.CardLayout; import java.awt.event.KeyEvent; import java.util.List; @@ -64,60 +63,95 @@ public class RemotePresetsUIHandler implements UIHandler<RemotePresetsUI>, WithC @Override public void afterInit(RemotePresetsUI ui) { - for (Object o : ui.get$objectMap().values()) { - if (o instanceof JSplitPane) { - init((JSplitPane) o); - } + initRemotePanel(ui); + initServerPanel(ui); + + ui.getTabs().addChangeListener(this::onTabChanged); + + onTabChanged(null); + } + + void setServerModified(KeyEvent event) { + if (event.isActionKey()) { + return; } + ui.getModel().setServerModified(true); + } - Decorator remoteDecorator = ClientConfig.getDecoratorService().getDecoratorByType(RemoteDataSourceConfiguration.class, RemoteDataSourceConfiguration.WITH_URL); + void setRemoteModified(KeyEvent event) { + if (event.isActionKey()) { + return; + } + ui.getModel().setRemoteModified(true); + } + + private void onTabChanged(ChangeEvent e) { + JTabbedPane tabbedPane = e == null ? ui.getTabs() : (JTabbedPane) e.getSource(); + int selectedIndex = tabbedPane.getSelectedIndex(); + JComponent toFocus = ui.getCreateAction(); + switch (selectedIndex) { + case 0: + if (ui.getServerForm().isVisible()) { + toFocus = ui.getServerName(); + } + break; + case 1: + if (ui.getRemoteForm().isVisible()) { + toFocus = ui.getRemoteName(); + } + break; + } + SwingUtilities.invokeLater(toFocus::requestFocusInWindow); + } + + private void initRemotePanel(RemotePresetsUI ui) { + Decorator remoteDecorator = getDecoratorService().getDecoratorByType(RemoteDataSourceConfiguration.class, RemoteDataSourceConfiguration.WITH_URL); ui.getRemoteConfigurations().setCellRenderer(new DecoratorListCellRenderer<>(remoteDecorator)); DefaultListModel<RemoteDataSourceConfiguration> remoteModel = new DefaultListModel<>(); - ui.getModel().getRemoteDataSourceConfigurations().forEach(remoteModel::addElement); + RemotePresetsUIModel model = ui.getModel(); + model.getRemoteDataSourceConfigurations().forEach(remoteModel::addElement); ui.getRemoteConfigurations().setModel(remoteModel); ui.getRemoteConfigurations().addListSelectionListener(evt -> { if (ui.getRemoteConfigurations().isSelectionEmpty()) { - - ui.getModel().setRemoteDataSourceConfiguration(null); - ui.getModel().setRemoteModified(false); + model.setRemoteDataSourceConfiguration(null); + model.setRemoteModified(false); } else { - ui.getModel().setRemoteDataSourceConfiguration(ui.getRemoteConfigurations().getSelectedValue()); + model.setRemoteDataSourceConfiguration(ui.getRemoteConfigurations().getSelectedValue()); ui.getRemoteName().requestFocusInWindow(); } }); - ui.getModel().addPropertyChangeListener("remoteDataSourceConfigurations", evt -> { + model.addPropertyChangeListener("remoteDataSourceConfigurations", evt -> { @SuppressWarnings("unchecked") List<RemoteDataSourceConfiguration> newValue = (List<RemoteDataSourceConfiguration>) evt.getNewValue(); - DefaultListModel<RemoteDataSourceConfiguration> model = (DefaultListModel<RemoteDataSourceConfiguration>) ui.getRemoteConfigurations().getModel(); - model.clear(); + DefaultListModel<RemoteDataSourceConfiguration> listModel = (DefaultListModel<RemoteDataSourceConfiguration>) ui.getRemoteConfigurations().getModel(); + listModel.clear(); for (RemoteDataSourceConfiguration remoteDataSourceConfiguration : newValue) { - model.addElement(remoteDataSourceConfiguration); + listModel.addElement(remoteDataSourceConfiguration); } }); - ui.getModel().addPropertyChangeListener("remoteDataSourceConfiguration", evt -> { + model.addPropertyChangeListener("remoteDataSourceConfiguration", evt -> { RemoteDataSourceConfiguration oldValue = (RemoteDataSourceConfiguration) evt.getOldValue(); - - if (ui.getModel().getRemoteDataSourceConfiguration() == null) { + if (model.getRemoteDataSourceConfiguration() == null) { ((CardLayout) ui.getRemoteContentPanel().getLayout()).show(ui.getRemoteContentPanel(), "empty"); ui.getCreateAction().requestFocusInWindow(); } else { if (oldValue == null) { ((CardLayout) ui.getRemoteContentPanel().getLayout()).show(ui.getRemoteContentPanel(), "form"); } - ui.getModel().setRemoteModified(false); + model.setRemoteModified(false); } SwingUtilities.invokeLater(ui::repaint); }); - ui.getModel().addPropertyChangeListener("remoteCreateMode", evt -> { + model.addPropertyChangeListener("remoteCreateMode", evt -> { JPanel remoteActions = ui.getRemoteActions(); if ((Boolean) evt.getNewValue()) { remoteActions.remove(ui.getResetRemoteAction()); @@ -132,54 +166,60 @@ public class RemotePresetsUIHandler implements UIHandler<RemotePresetsUI>, WithC } }); ui.getRemoteActions().remove(0); - Decorator serverDecorator = ClientUIContextApplicationComponent.value().getDecoratorService().getDecoratorByType(ServerDataSourceConfiguration.class, ServerDataSourceConfiguration.WITH_URL); + + if (ui.getRemoteConfigurations().getModel().getSize() > 0) { + ui.getRemoteConfigurations().setSelectedIndex(0); + } + } + + private void initServerPanel(RemotePresetsUI ui) { + RemotePresetsUIModel model = ui.getModel(); + Decorator serverDecorator = getDecoratorService().getDecoratorByType(ServerDataSourceConfiguration.class, ServerDataSourceConfiguration.WITH_URL); ui.getServerConfigurations().setCellRenderer(new DecoratorListCellRenderer<>(serverDecorator)); DefaultListModel<ServerDataSourceConfiguration> ServerModel = new DefaultListModel<>(); - ui.getModel().getServerDataSourceConfigurations().forEach(ServerModel::addElement); + model.getServerDataSourceConfigurations().forEach(ServerModel::addElement); ui.getServerConfigurations().setModel(ServerModel); ui.getServerConfigurations().addListSelectionListener(evt -> { - if (ui.getServerConfigurations().isSelectionEmpty()) { - - ui.getModel().setServerDataSourceConfiguration(null); - ui.getModel().setServerModified(false); + model.setServerDataSourceConfiguration(null); + model.setServerModified(false); } else { - ui.getModel().setServerDataSourceConfiguration(ui.getServerConfigurations().getSelectedValue()); + model.setServerDataSourceConfiguration(ui.getServerConfigurations().getSelectedValue()); ui.getServerName().requestFocusInWindow(); } }); - ui.getModel().addPropertyChangeListener("serverDataSourceConfigurations", evt -> { + model.addPropertyChangeListener("serverDataSourceConfigurations", evt -> { @SuppressWarnings("unchecked") List<ServerDataSourceConfiguration> newValue = (List<ServerDataSourceConfiguration>) evt.getNewValue(); - DefaultListModel<ServerDataSourceConfiguration> model = (DefaultListModel<ServerDataSourceConfiguration>) ui.getServerConfigurations().getModel(); - model.clear(); + DefaultListModel<ServerDataSourceConfiguration> listModel = (DefaultListModel<ServerDataSourceConfiguration>) ui.getServerConfigurations().getModel(); + listModel.clear(); for (ServerDataSourceConfiguration ServerDataSourceConfiguration : newValue) { - model.addElement(ServerDataSourceConfiguration); + listModel.addElement(ServerDataSourceConfiguration); } }); - ui.getModel().addPropertyChangeListener("serverDataSourceConfiguration", evt -> { + model.addPropertyChangeListener("serverDataSourceConfiguration", evt -> { ServerDataSourceConfiguration oldValue = (ServerDataSourceConfiguration) evt.getOldValue(); - if (ui.getModel().getServerDataSourceConfiguration() == null) { + if (model.getServerDataSourceConfiguration() == null) { ((CardLayout) ui.getServerContentPanel().getLayout()).show(ui.getServerContentPanel(), "empty"); ui.getCreateAction().requestFocusInWindow(); } else { if (oldValue == null) { ((CardLayout) ui.getServerContentPanel().getLayout()).show(ui.getServerContentPanel(), "form"); } - ui.getModel().setServerModified(false); + model.setServerModified(false); } SwingUtilities.invokeLater(ui::repaint); }); - ui.getModel().addPropertyChangeListener("serverCreateMode", evt -> { + model.addPropertyChangeListener("serverCreateMode", evt -> { JPanel serverActions = ui.getServerActions(); if ((Boolean) evt.getNewValue()) { serverActions.remove(ui.getResetServerAction()); @@ -196,33 +236,8 @@ public class RemotePresetsUIHandler implements UIHandler<RemotePresetsUI>, WithC }); ui.getServerActions().remove(0); - ui.getCreateAction().requestFocusInWindow(); - - if (ui.getRemoteConfigurations().getModel().getSize() > 0) { - ui.getRemoteConfigurations().setSelectedIndex(0); - } - if (ui.getServerConfigurations().getModel().getSize() > 0) { ui.getServerConfigurations().setSelectedIndex(0); } } - - protected void init(JSplitPane editor) { - editor.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT) - .put(KeyStroke.getKeyStroke(KeyEvent.VK_F6, 0), "none"); - } - - protected void setServerModified(KeyEvent event) { - if (event.isActionKey()) { - return; - } - ui.getModel().setServerModified(true); - } - - protected void setRemoteModified(KeyEvent event) { - if (event.isActionKey()) { - return; - } - ui.getModel().setRemoteModified(true); - } } ===================================== client/core/src/main/java/fr/ird/observe/client/datasource/presets/actions/RemoteActionSupport.java ===================================== @@ -40,12 +40,12 @@ abstract class RemoteActionSupport extends RemotePresetsUIActionSupport { @Override protected InputMap getInputMap(RemotePresetsUI ui, int inputMapCondition) { - return ui.getRemoteContentPanel().getInputMap(inputMapCondition); + return ui.getRemotePanel().getInputMap(inputMapCondition); } @Override protected ActionMap getActionMap(RemotePresetsUI ui) { - return ui.getRemoteContentPanel().getActionMap(); + return ui.getRemotePanel().getActionMap(); } } ===================================== client/core/src/main/java/fr/ird/observe/client/datasource/presets/actions/ServerActionSupport.java ===================================== @@ -40,12 +40,12 @@ abstract class ServerActionSupport extends RemotePresetsUIActionSupport { @Override protected InputMap getInputMap(RemotePresetsUI ui, int inputMapCondition) { - return ui.getServerContentPanel().getInputMap(inputMapCondition); + return ui.getServerPanel().getInputMap(inputMapCondition); } @Override protected ActionMap getActionMap(RemotePresetsUI ui) { - return ui.getServerContentPanel().getActionMap(); + return ui.getServerPanel().getActionMap(); } } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/33992b20948cb52c4ebc845a68... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/33992b20948cb52c4ebc845a68... You're receiving this email because of your account on gitlab.com.