This is an automated email from the git hooks/post-receive script. New commit to branch feature/2 in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 0223196b298268285c8848ae076dd79d40c2455e Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Dec 17 17:35:26 2016 +0100 Ajout de deux raccourcis clavier (shift + Q) et (shift + W) pour naviguer dans les tableaux sans donner le focus au formulaire --- .../application/swing/ui/ObserveMainUIModel.java | 17 +++++++++ .../ird/observe/application/swing/ui/UIHelper.java | 4 +-- .../content/table/ContentTableUIInitializer.java | 41 ++++++++++++++++++++++ 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUIModel.java index 524b2c7..b0a7a4f 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUIModel.java @@ -78,6 +78,7 @@ public class ObserveMainUIModel extends AbstractBean { private boolean changeDbLanguageToSpanishEnabled; private boolean devMode; private boolean fullScreen; + private boolean blockFocus; private boolean adjusting; @@ -174,6 +175,10 @@ public class ObserveMainUIModel extends AbstractBean { firePropertyChange("busy", null, busy); } + public boolean canAcquireFocus() { + return !isFocusOnNavigation() && !isBlockFocus(); + } + public boolean isFocusOnNavigation() { return focusOnNavigation; } @@ -443,4 +448,16 @@ public class ObserveMainUIModel extends AbstractBean { } + public boolean isBlockFocus() { + return blockFocus; + } + + public void blockFocus() { + this.blockFocus = true; + } + + public void unblockFocus() { + this.blockFocus = false; + } + } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/UIHelper.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/UIHelper.java index ed2a1ab..df3edef 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/UIHelper.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/UIHelper.java @@ -524,8 +524,8 @@ public class UIHelper extends SwingUtil { if (component == null) { return; } - boolean focusOnNavigation = ObserveSwingApplicationContext.get().getMainUI().getModel().isFocusOnNavigation(); - if (!focusOnNavigation) { + boolean canAcquireFocus = ObserveSwingApplicationContext.get().getMainUI().getModel().canAcquireFocus(); + if (canAcquireFocus) { SwingUtilities.invokeLater(component::requestFocusInWindow); } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIInitializer.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIInitializer.java index d26814c..f6404b9 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIInitializer.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIInitializer.java @@ -22,6 +22,7 @@ package fr.ird.observe.application.swing.ui.content.table; * #L% */ +import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.ui.content.ContentUIInitializer; import fr.ird.observe.application.swing.ui.content.ObserveActionMap; import fr.ird.observe.application.swing.ui.util.BooleanEditor; @@ -31,13 +32,18 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.jaxx.application.bean.JavaBeanObjectUtil; +import javax.swing.AbstractAction; import javax.swing.AbstractButton; +import javax.swing.ActionMap; +import javax.swing.InputMap; import javax.swing.JCheckBox; import javax.swing.JComponent; import javax.swing.JTextArea; import javax.swing.JTextField; +import javax.swing.KeyStroke; import javax.swing.table.DefaultTableCellRenderer; import java.awt.BorderLayout; +import java.awt.event.ActionEvent; import java.awt.event.ItemEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; @@ -142,6 +148,41 @@ public class ContentTableUIInitializer<E extends IdDto, D extends IdDto, UI exte }); + InputMap inputMap = ui.getTable().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); + ActionMap actionMap = ui.getTable().getActionMap(); + + inputMap.put(KeyStroke.getKeyStroke("shift pressed W"), "selectDown"); + actionMap.put("selectDown", new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + int selectedRow = getModel().getTableModel().getSelectedRow(); + if (selectedRow < getModel().getTableModel().getRowCount() - 1) { + + ObserveSwingApplicationContext.get().getMainUI().getModel().blockFocus(); + try { + ui.getTable().setRowSelectionInterval(selectedRow + 1, selectedRow + 1); + } finally { + ObserveSwingApplicationContext.get().getMainUI().getModel().unblockFocus(); + } + } + } + }); + inputMap.put(KeyStroke.getKeyStroke("shift pressed Q"), "selectUp"); + actionMap.put("selectUp", new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + + int selectedRow = getModel().getTableModel().getSelectedRow(); + if (selectedRow > 0) { + ObserveSwingApplicationContext.get().getMainUI().getModel().blockFocus(); + try { + ui.getTable().setRowSelectionInterval(selectedRow - 1, selectedRow - 1); + } finally { + ObserveSwingApplicationContext.get().getMainUI().getModel().unblockFocus(); + } + } + } + }); } @Override -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.