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();
     }
 
     /**

Reply via email to