This is an automated email from the git hooks/post-receive script. New commit to branch feature/3368 in repository jaxx. See http://git.nuiton.org/jaxx.git commit fbf4a7b6b8681a12e40f7bd3360544d1f4338c81 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Sep 22 11:36:13 2014 +0200 refs #3368 introduce ApplicationUIConfiguration + deal with shortcuts --- .../jaxx/application/ApplicationConfiguration.java | 4 ++ .../swing/AbstractApplicationUIHandler.java | 68 +++++++++++++++++++--- .../swing/ApplicationUIConfiguration.java | 21 +++++++ 3 files changed, 84 insertions(+), 9 deletions(-) diff --git a/jaxx-application-api/src/main/java/org/nuiton/jaxx/application/ApplicationConfiguration.java b/jaxx-application-api/src/main/java/org/nuiton/jaxx/application/ApplicationConfiguration.java index 680d795..a43ce9b 100644 --- a/jaxx-application-api/src/main/java/org/nuiton/jaxx/application/ApplicationConfiguration.java +++ b/jaxx-application-api/src/main/java/org/nuiton/jaxx/application/ApplicationConfiguration.java @@ -47,6 +47,10 @@ public abstract class ApplicationConfiguration { public abstract Version getVersion(); + /** + * @deprecated since 2.13, use now {@code org.nuiton.jaxx.application.swing.ApplicationUIConfiguration#getShortcutClosePopup()} + */ + @Deprecated public abstract KeyStroke getShortcutClosePopup(); public ApplicationConfiguration(ApplicationConfig applicationConfig) { diff --git a/jaxx-application-swing/src/main/java/org/nuiton/jaxx/application/swing/AbstractApplicationUIHandler.java b/jaxx-application-swing/src/main/java/org/nuiton/jaxx/application/swing/AbstractApplicationUIHandler.java index beacb19..02cbd03 100644 --- a/jaxx-application-swing/src/main/java/org/nuiton/jaxx/application/swing/AbstractApplicationUIHandler.java +++ b/jaxx-application-swing/src/main/java/org/nuiton/jaxx/application/swing/AbstractApplicationUIHandler.java @@ -43,6 +43,7 @@ import jaxx.runtime.swing.renderer.DecoratorListCellRenderer; import jaxx.runtime.swing.renderer.DecoratorTableCellRenderer; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXDatePicker; @@ -52,7 +53,9 @@ import org.jdesktop.swingx.autocomplete.ObjectToStringConverter; import org.jdesktop.swingx.table.TableColumnExt; import org.nuiton.decorator.Decorator; import org.nuiton.decorator.JXPathDecorator; +import org.nuiton.jaxx.application.ApplicationConfiguration; import org.nuiton.jaxx.application.ApplicationDataUtil; +import org.nuiton.jaxx.application.bean.JavaBeanObjectUtil; import org.nuiton.jaxx.application.swing.action.AbstractApplicationAction; import org.nuiton.jaxx.application.swing.action.ApplicationActionUI; import org.nuiton.jaxx.application.swing.action.ApplicationUIAction; @@ -235,24 +238,24 @@ public abstract class AbstractApplicationUIHandler<M, UI extends ApplicationUI<M public void setText(KeyEvent event, String property) { JTextComponent field = (JTextComponent) event.getSource(); String value = field.getText(); - ApplicationDataUtil.setProperty(getModel(), property, value); + JavaBeanObjectUtil.setProperty(getModel(), property, value); } public void setFile(ActionEvent event, String property) { FileEditor field = (FileEditor) event.getSource(); File value = field.getSelectedFile(); - ApplicationDataUtil.setProperty(getModel(), property, value); + JavaBeanObjectUtil.setProperty(getModel(), property, value); } public void setBoolean(ItemEvent event, String property) { boolean value = event.getStateChange() == ItemEvent.SELECTED; - ApplicationDataUtil.setProperty(getModel(), property, value); + JavaBeanObjectUtil.setProperty(getModel(), property, value); } public void setDate(ActionEvent event, String property) { JXDatePicker field = (JXDatePicker) event.getSource(); Date value = field.getDate(); - ApplicationDataUtil.setProperty(getModel(), property, value); + JavaBeanObjectUtil.setProperty(getModel(), property, value); } public void selectListData(ListSelectionEvent event, String property) { @@ -268,7 +271,7 @@ public abstract class AbstractApplicationUIHandler<M, UI extends ApplicationUI<M Object o = list.getModel().getElementAt(index); selectedList.add(o); } - ApplicationDataUtil.setProperty(getModel(), property, selectedList); + JavaBeanObjectUtil.setProperty(getModel(), property, selectedList); } finally { selectionModel.setValueIsAdjusting(false); } @@ -618,6 +621,55 @@ public abstract class AbstractApplicationUIHandler<M, UI extends ApplicationUI<M Action action = getContext().getActionFactory().createUIAction(this, abstractButton, actionName); abstractButton.setAction(action); } + + if (abstractButton.getAction() != null) { + // get the _applicationActionKey property + String key = (String) abstractButton.getClientProperty("applicationActionKey"); + if (key != null) { + affectKeyStroke(abstractButton, key); + } + } + } + + protected void affectKeyStroke(AbstractButton abstractButton, String key) { + + if (abstractButton.getAction() == null) { + log.warn("the buton '" + abstractButton.getName() + "' has no action. can't affect key stroke."); + return; + } + + KeyStroke keyStroke = KeyStroke.getKeyStroke(key); + if (keyStroke != null) { + + // affect this key stroke to the button's action + abstractButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(keyStroke, key); + abstractButton.getActionMap().put(key, abstractButton.getAction()); + + boolean modifyText = true; + boolean modifyTip = false; + ApplicationConfiguration configuration = context.getConfiguration(); + if (configuration instanceof ApplicationUIConfiguration) { + ApplicationUIConfiguration applicationUIConfiguration = (ApplicationUIConfiguration) configuration; + + modifyText = applicationUIConfiguration.isShowKeyStrokeOnText(); + modifyTip = applicationUIConfiguration.isShowKeyStrokeOnTip(); + + } + + // modify text + String text = abstractButton.getText(); + if (modifyText && !StringUtils.isBlank(text)) { + text += " (" + key.toUpperCase() + ")"; + abstractButton.setText(text); + } + + // modify tip + String tip = abstractButton.getToolTipText(); + if (modifyTip && !StringUtils.isBlank(tip)) { + tip += " (" + key.toUpperCase() + ")"; + abstractButton.setText(tip); + } + } } /** @@ -653,8 +705,7 @@ public abstract class AbstractApplicationUIHandler<M, UI extends ApplicationUI<M } if (log.isDebugEnabled()) { - log.debug("entity comboBox list [" + beanType.getName() + "] : " + - (data == null ? 0 : data.size())); + log.debug("entity comboBox list [" + beanType.getName() + "] : " + data.size()); } comboBox.setI18nPrefix(getContext().getI18nPrefix()); @@ -695,8 +746,7 @@ public abstract class AbstractApplicationUIHandler<M, UI extends ApplicationUI<M } if (log.isDebugEnabled()) { - log.debug("entity comboBox list [" + beanType.getName() + "] : " + - (data == null ? 0 : data.size())); + log.debug("entity comboBox list [" + beanType.getName() + "] : " + data.size()); } comboBox.setI18nPrefix(getContext().getI18nPrefix()); diff --git a/jaxx-application-swing/src/main/java/org/nuiton/jaxx/application/swing/ApplicationUIConfiguration.java b/jaxx-application-swing/src/main/java/org/nuiton/jaxx/application/swing/ApplicationUIConfiguration.java new file mode 100644 index 0000000..6202249 --- /dev/null +++ b/jaxx-application-swing/src/main/java/org/nuiton/jaxx/application/swing/ApplicationUIConfiguration.java @@ -0,0 +1,21 @@ +package org.nuiton.jaxx.application.swing; + +import javax.swing.KeyStroke; + +/** + * Contract to place on ui configuration. + * + * Created on 9/19/14. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 2.13 + */ +public interface ApplicationUIConfiguration { + + KeyStroke getShortcutClosePopup(); + + boolean isShowKeyStrokeOnText(); + + boolean isShowKeyStrokeOnTip(); + +} -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.