Repository: cayenne Updated Branches: refs/heads/master 09b0fdb00 -> e0fe30731
Minor UI improvements Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/1a00b577 Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/1a00b577 Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/1a00b577 Branch: refs/heads/master Commit: 1a00b57733965ad3133281f83992a01453b43dad Parents: 09b0fdb Author: Nikita Timofeev <stari...@gmail.com> Authored: Thu May 11 15:37:07 2017 +0300 Committer: Nikita Timofeev <stari...@gmail.com> Committed: Thu May 11 15:37:07 2017 +0300 ---------------------------------------------------------------------- .../modeler/generic/GenericButtonUI.java | 83 +++++++++++++++++--- .../modeler/editor/ObjEntityAttributePanel.java | 3 +- .../editor/ObjEntityRelationshipPanel.java | 3 +- .../dbentity/DbEntityRelationshipPanel.java | 3 +- .../cayenne/modeler/util/CayenneAction.java | 40 +++++++++- .../components/image/FilteredIconFactory.java | 1 + .../cayenne/swing/control/FileMenuItem.java | 10 ++- 7 files changed, 123 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/1a00b577/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericButtonUI.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericButtonUI.java b/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericButtonUI.java index 306378d..75af1f4 100644 --- a/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericButtonUI.java +++ b/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericButtonUI.java @@ -19,11 +19,15 @@ package org.apache.cayenne.modeler.generic; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import javax.swing.AbstractButton; +import javax.swing.BorderFactory; import javax.swing.JComponent; -import javax.swing.border.CompoundBorder; -import javax.swing.border.EmptyBorder; -import javax.swing.border.LineBorder; +import javax.swing.border.Border; import javax.swing.plaf.ComponentUI; import org.apache.cayenne.modeler.util.CayenneAction; @@ -34,6 +38,30 @@ import org.apache.cayenne.modeler.util.CayenneAction; public class GenericButtonUI extends com.jgoodies.looks.plastic.PlasticButtonUI { private static final GenericButtonUI INSTANCE = new GenericButtonUI(); + private static final Border BORDER = BorderFactory.createCompoundBorder( + BorderFactory.createEmptyBorder(1, 1, 1, 1), + BorderFactory.createCompoundBorder( + BorderFactory.createLineBorder(Color.GRAY), + BorderFactory.createEmptyBorder(4, 4, 4, 4) + ) + ); + + private static final Border DISABLED_BORDER = BorderFactory.createCompoundBorder( + BorderFactory.createEmptyBorder(1, 1, 1, 1), + BorderFactory.createCompoundBorder( + BorderFactory.createLineBorder(Color.LIGHT_GRAY), + BorderFactory.createEmptyBorder(4, 4, 4, 4) + ) + ); + + private static final Border ACTIVE_BORDER = BorderFactory.createCompoundBorder( + BorderFactory.createEmptyBorder(1, 1, 1, 1), + BorderFactory.createCompoundBorder( + BorderFactory.createLineBorder(new Color(0x333333)), + BorderFactory.createEmptyBorder(4, 4, 4, 4) + ) + ); + public GenericButtonUI() { } @@ -42,18 +70,49 @@ public class GenericButtonUI extends com.jgoodies.looks.plastic.PlasticButtonUI } @Override - public void installDefaults(AbstractButton b) { + public void installDefaults(final AbstractButton b) { super.installDefaults(b); b.putClientProperty("Plastic.is3D", Boolean.FALSE); if(b instanceof CayenneAction.CayenneToolbarButton) { - b.setBorder( - new CompoundBorder( - new EmptyBorder(1, 1, 1, 1), - new CompoundBorder( - LineBorder.createGrayLineBorder(), - new EmptyBorder(4, 4, 4, 4)) - ) - ); + b.addMouseListener(new MouseAdapter() { + @Override + public void mouseEntered(MouseEvent e) { + b.getModel().setArmed(true); + } + @Override + public void mouseExited(MouseEvent e) { + b.getModel().setArmed(false); + } + }); + } + } + + @Override + public void update(Graphics g, JComponent c) { + if(c instanceof CayenneAction.CayenneToolbarButton) { + AbstractButton b = (AbstractButton)c; + if(!b.isEnabled()) { + b.setBorder(DISABLED_BORDER); + } else if(b.getModel().isArmed()) { + b.setBorder(ACTIVE_BORDER); + } else { + b.setBorder(BORDER); + } + } + super.update(g, c); + } + + @Override + protected void paintButtonPressed(Graphics g, AbstractButton b){ + if ( b.isContentAreaFilled() ) { + Dimension size = b.getSize(); + g.setColor(getSelectColor()); + if(b instanceof CayenneAction.CayenneToolbarButton) { + // don't paint outer border area + g.fillRect(1, 1, size.width - 2, size.height - 2); + } else { + g.fillRect(0, 0, size.width, size.height); + } } } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/1a00b577/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java index 2e160f8..263a0c0 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java @@ -43,6 +43,7 @@ import org.apache.cayenne.modeler.event.ProjectOnSaveEvent; import org.apache.cayenne.modeler.event.ProjectOnSaveListener; import org.apache.cayenne.modeler.event.TablePopupHandler; import org.apache.cayenne.modeler.pref.TableColumnPreferences; +import org.apache.cayenne.modeler.util.CayenneAction; import org.apache.cayenne.modeler.util.CayenneTable; import org.apache.cayenne.modeler.util.CayenneTableModel; import org.apache.cayenne.modeler.util.DbAttributePathComboBoxRenderer; @@ -152,7 +153,7 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL // Create and install a popup Icon ico = ModelerUtil.buildIcon("icon-edit.png"); - resolveMenu = new JMenuItem("Database Mapping", ico); + resolveMenu = new CayenneAction.CayenneMenuItem("Database Mapping", ico); JPopupMenu popup = new JPopupMenu(); popup.add(resolveMenu); http://git-wip-us.apache.org/repos/asf/cayenne/blob/1a00b577/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java index 133eb72..01bab81 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java @@ -38,6 +38,7 @@ import org.apache.cayenne.modeler.event.EntityDisplayEvent; import org.apache.cayenne.modeler.event.ObjEntityDisplayListener; import org.apache.cayenne.modeler.event.TablePopupHandler; import org.apache.cayenne.modeler.pref.TableColumnPreferences; +import org.apache.cayenne.modeler.util.CayenneAction; import org.apache.cayenne.modeler.util.CayenneTable; import org.apache.cayenne.modeler.util.CellRenderers; import org.apache.cayenne.modeler.util.DbRelationshipPathComboBoxEditor; @@ -133,7 +134,7 @@ public class ObjEntityRelationshipPanel extends JPanel implements ObjEntityDispl // Create and install a popup Icon ico = ModelerUtil.buildIcon("icon-edit.png"); - resolveMenu = new JMenuItem("Database Mapping", ico); + resolveMenu = new CayenneAction.CayenneMenuItem("Database Mapping", ico); JPopupMenu popup = new JPopupMenu(); popup.add(resolveMenu); http://git-wip-us.apache.org/repos/asf/cayenne/blob/1a00b577/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityRelationshipPanel.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityRelationshipPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityRelationshipPanel.java index a37131c..3e98e43 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityRelationshipPanel.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityRelationshipPanel.java @@ -39,6 +39,7 @@ import org.apache.cayenne.modeler.event.EntityDisplayEvent; import org.apache.cayenne.modeler.event.TablePopupHandler; import org.apache.cayenne.modeler.pref.TableColumnPreferences; import org.apache.cayenne.modeler.util.BoardTableCellRenderer; +import org.apache.cayenne.modeler.util.CayenneAction; import org.apache.cayenne.modeler.util.CayenneTable; import org.apache.cayenne.modeler.util.CellRenderers; import org.apache.cayenne.modeler.util.ModelerUtil; @@ -111,7 +112,7 @@ public class DbEntityRelationshipPanel extends JPanel implements DbEntityDisplay // Create and install a popup Icon ico = ModelerUtil.buildIcon("icon-edit.png"); - resolveMenu = new JMenuItem("Database Mapping", ico); + resolveMenu = new CayenneAction.CayenneMenuItem("Database Mapping", ico); JPopupMenu popup = new JPopupMenu(); popup.add(resolveMenu); http://git-wip-us.apache.org/repos/asf/cayenne/blob/1a00b577/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneAction.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneAction.java index e6a2efe..8b294ca 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneAction.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneAction.java @@ -21,6 +21,8 @@ package org.apache.cayenne.modeler.util; import java.awt.event.ActionEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import javax.swing.AbstractAction; import javax.swing.Action; @@ -171,7 +173,7 @@ public abstract class CayenneAction extends AbstractAction { * Factory method that creates a menu item hooked up to this action. */ public JMenuItem buildMenu() { - return new JMenuItem(this); + return new CayenneMenuItem(this); } /** @@ -224,6 +226,42 @@ public abstract class CayenneAction extends AbstractAction { } } + public static class CayenneMenuItem extends JMenuItem { + + public CayenneMenuItem(String title) { + super(title); + } + + public CayenneMenuItem(String title, Icon icon) { + super(title, icon); + updateActiveIcon(); + } + + public CayenneMenuItem(AbstractAction action) { + super(action); + updateActiveIcon(); + } + + protected void updateActiveIcon() { + final Icon icon = getIcon(); + final Icon selectedIcon = FilteredIconFactory.createIcon(icon, FilteredIconFactory.FilterType.WHITE); + // this wouldn't work on MacOS, as it uses native menu + addMouseListener(new MouseAdapter() { + @Override + public void mouseEntered(MouseEvent e) { + if(isEnabled()) { + setIcon(selectedIcon); + } + } + + @Override + public void mouseExited(MouseEvent e) { + setIcon(icon); + } + }); + } + } + /** * On changes in action text, will update toolbar tip instead. */ http://git-wip-us.apache.org/repos/asf/cayenne/blob/1a00b577/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/image/FilteredIconFactory.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/image/FilteredIconFactory.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/image/FilteredIconFactory.java index 4fbd4db..4e92238 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/image/FilteredIconFactory.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/image/FilteredIconFactory.java @@ -41,6 +41,7 @@ public class FilteredIconFactory { public enum FilterType { DISABLE (new DisabledFilter()), SELECTION (new SelectionFilter()), + WHITE (new ColorFilter(0xFFFFFF)), GREEN (new ColorFilter(0x65A91B)), VIOLET (new ColorFilter(0xAD78DD)), BLUE (new ColorFilter(0x53A3D6)), http://git-wip-us.apache.org/repos/asf/cayenne/blob/1a00b577/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/control/FileMenuItem.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/control/FileMenuItem.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/control/FileMenuItem.java index 3cf5140..95746b3 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/control/FileMenuItem.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/control/FileMenuItem.java @@ -23,25 +23,27 @@ import java.io.File; import javax.swing.Action; import javax.swing.Icon; -import javax.swing.JMenuItem; + +import org.apache.cayenne.modeler.util.CayenneAction; /** * A menu item that points to a file. * */ -public class FileMenuItem extends JMenuItem { +public class FileMenuItem extends CayenneAction.CayenneMenuItem { /** * Creates a new instance with the specified fileName. */ public FileMenuItem(String fileName) { - setText(fileName); + super(fileName); } protected void configurePropertiesFromAction(Action a) { // excludes most generic action keys that are not applicable here... setIcon(a != null ? (Icon) a.getValue(Action.SMALL_ICON) : null); - setEnabled(a != null ? a.isEnabled() : true); + setEnabled(a == null || a.isEnabled()); + updateActiveIcon(); } /**