Revision: 6484
          http://sourceforge.net/p/jump-pilot/code/6484
Author:   edso
Date:     2020-09-15 13:06:58 +0000 (Tue, 15 Sep 2020)
Log Message:
-----------
cutify selected menu item icons (checkboxed) on windows by ticking them visually

Modified Paths:
--------------
    
core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/FeatureInstaller.java

Added Paths:
-----------
    core/trunk/src/com/vividsolutions/jump/workbench/ui/images/famfam/tick.png

Added: 
core/trunk/src/com/vividsolutions/jump/workbench/ui/images/famfam/tick.png
===================================================================
(Binary files differ)

Index: 
core/trunk/src/com/vividsolutions/jump/workbench/ui/images/famfam/tick.png
===================================================================
--- core/trunk/src/com/vividsolutions/jump/workbench/ui/images/famfam/tick.png  
2020-09-15 13:04:29 UTC (rev 6483)
+++ core/trunk/src/com/vividsolutions/jump/workbench/ui/images/famfam/tick.png  
2020-09-15 13:06:58 UTC (rev 6484)

Property changes on: 
core/trunk/src/com/vividsolutions/jump/workbench/ui/images/famfam/tick.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Modified: 
core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/FeatureInstaller.java
===================================================================
--- 
core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/FeatureInstaller.java
    2020-09-15 13:04:29 UTC (rev 6483)
+++ 
core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/FeatureInstaller.java
    2020-09-15 13:06:58 UTC (rev 6484)
@@ -339,7 +339,7 @@
     if (checkboxSetting.equals(WorkbenchProperties.ATTR_VALUE_TRUE))
       checkBox = true;
 
-    JMenuItem menuItem = createMenuItem(menuItemName, checkBox);
+    JMenuItem menuItem = createMenuItem(menuItemName, checkBox, icon);
     menuItem = addMainMenuPluginItemWithPostProcessing(executable, menuPath,
         menuItem, icon, enableCheck, pos);
     return menuItem;
@@ -363,7 +363,7 @@
     // check and replace with checkbox item if necessary
     if (executable instanceof CheckBoxed
         && !(menuItem instanceof JCheckBoxMenuItem))
-      menuItem = createMenuItem(menuItem.getText(), true);
+      menuItem = createMenuItem(menuItem.getText(), true, icon);
 
     // we silently ignore the pos argument as positions are defined in xml or
     // not at all
@@ -397,7 +397,7 @@
     if (checkBoxSetting.equals(WorkbenchProperties.ATTR_VALUE_TRUE))
       checkBox = true;
 
-    JMenuItem menuItem = createMenuItem(plugin.getName(), checkBox);
+    JMenuItem menuItem = createMenuItem(plugin.getName(), checkBox, null);
     return addMenuPluginItem(menu, plugin, new String[] {}, menuItem, null, 
null);
 
   }
@@ -857,7 +857,7 @@
       EnableCheck enableCheck) {
 
     checkBox = checkBox || executable instanceof CheckBoxed;
-    JMenuItem menuItem = createMenuItem(menuItemName, checkBox);
+    JMenuItem menuItem = createMenuItem(menuItemName, checkBox, icon);
 
     return addMenuPluginItem(wrapMenu(popupMenu), executable, menuPath,
         menuItem, icon, enableCheck);
@@ -1877,9 +1877,54 @@
     }
   }
 
-  private JMenuItem createMenuItem(String menuItemName, boolean checkBox) {
-    return checkBox ? new JCheckBoxMenuItem(menuItemName) : new JMenuItem(
-        menuItemName);
+  private JMenuItem createMenuItem(String menuItemName, boolean checkBox, Icon 
icon) {
+    JMenuItem item;
+    if (checkBox) {
+      // create the checkbox menuitem
+      JCheckBoxMenuItem cbi = new JCheckBoxMenuItem(menuItemName, icon) {
+        Icon def = null;
+        ImageIcon sel = null;
+
+        /**
+         * this is a workaround because JCheckBoxMenuItem.setSelectedIcon() 
and friends do f**k all
+         * 
+         * switch the icon on windows to indicate selection via a green tick
+         * when the selected state changes
+         */
+        @Override
+        public void setSelected(boolean b) {
+          // TODO Auto-generated method stub
+          super.setSelected(b);
+          
+          // all except of the new windows skin have a tick in front of the 
icon
+          // hence no need to switch icons in that case
+          if (!vista_checkbox_workaround()) {
+            // restore default icon, if set, skin might have been switched
+            if ( def != null && getIcon() != def ) setIcon(def);
+            return;
+          }
+
+          // save default icon, unselected state
+          if (def == null)
+            def = getIcon();
+
+          // no def no fun
+          if (def instanceof ImageIcon) {
+            // draw selected icon, add a tick over the default icon
+            if (sel == null)
+              sel = 
GUIUtil.overlay(GUIUtil.pad(GUIUtil.resize(GUIUtil.toImageIcon(getIcon()), 12), 
0, 0, 4, 4),
+                  GUIUtil.resize(IconLoader.icon("famfam/tick.png"), 12), 4, 
4);
+            setIcon(isSelected() ? sel : def);
+          }
+        }
+      };
+
+      item = cbi;
+    } else {
+      item = new JMenuItem(menuItemName, icon);
+    }
+
+    return item;
   }
 
   private void associate(JMenuItem menuItem, PlugIn plugIn) {
@@ -1898,12 +1943,13 @@
   // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7122141
   // we simply leave out the icon, so the tick is displayed instead of the
   // icon with a blue background
-  private boolean vista_checkbox_workaround = CheckOS.isWindows()
-      && Float.valueOf(System.getProperty("os.version")) >= 6
-      && UIManager.getLookAndFeel().getClass().getName()
-          .equals("com.sun.java.swing.plaf.windows.WindowsLookAndFeel")
-      // check windows vista/7 really uses native l&f, not Windows Classic
-      && UIManager.get("CheckBoxMenuItem.checkIconFactory") != null;
+  private static boolean vista_checkbox_workaround() {
+    boolean b = CheckOS.isWindows() && 
Float.valueOf(System.getProperty("os.version")) >= 6
+        && 
UIManager.getLookAndFeel().getClass().getName().equals("com.sun.java.swing.plaf.windows.WindowsLookAndFeel")
+        // check windows vista/7 really uses native l&f, not Windows Classic
+        && UIManager.get("CheckBoxMenuItem.checkIconFactory") != null;
+    return b;
+  }
 
   private void addMenuItemIcon(JMenuItem menuItem, Icon icon) {
     // no icons for radio/checkbox on windows laf on vista+, the "highlighted"
@@ -1912,8 +1958,8 @@
     // as items are created with or w/o icon during startup. however it will
     // work correctly when the new skin is restored after a restart
     // [ ede 5.4.2012 ]
-    if (vista_checkbox_workaround
-        && (menuItem instanceof JRadioButtonMenuItem || menuItem instanceof 
JCheckBoxMenuItem))
+    if (vista_checkbox_workaround()
+        && (menuItem instanceof JRadioButtonMenuItem /*|| menuItem instanceof 
JCheckBoxMenuItem*/))
       return;
     // ignore null values
     if (icon instanceof Icon)



_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to