diff --git a/Ghidra/Framework/Docking/src/main/java/docking/action/DockingAction.java b/Ghidra/Framework/Docking/src/main/java/docking/action/DockingAction.java index ec2b6744a1..865d975fed 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/action/DockingAction.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/action/DockingAction.java @@ -303,7 +303,11 @@ public abstract class DockingAction implements DockingActionIf { String text = menuData.getMenuItemName(); String trimmed = StringUtilities.trimMiddle(text, 50); menuItem.setText(trimmed); - menuItem.setIcon(menuData.getMenuIcon()); + Icon icon = menuData.getMenuIcon(); + menuItem.setIcon(icon); + if (icon != null) { + menuItem.setDisabledIcon(ResourceManager.getDisabledIcon(icon)); + } menuItem.setMnemonic(menuData.getMnemonic()); } else { diff --git a/Ghidra/Framework/Docking/src/main/java/docking/menu/DockingCheckboxMenuItemUI.java b/Ghidra/Framework/Docking/src/main/java/docking/menu/DockingCheckboxMenuItemUI.java index 11b8ed0883..d8fb81e897 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/menu/DockingCheckboxMenuItemUI.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/menu/DockingCheckboxMenuItemUI.java @@ -15,16 +15,15 @@ */ package docking.menu; -import javax.swing.*; -import javax.swing.plaf.ComponentUI; +import javax.swing.JComponent; +import javax.swing.UIManager; import javax.swing.plaf.MenuItemUI; /** * Overrides the painting behavior of the BasicCheckBoxMenuItemUI */ - public class DockingCheckboxMenuItemUI extends DockingMenuItemUI { - public static ComponentUI createUI(JComponent c) { + public static DockingCheckboxMenuItemUI createUI(JComponent c) { DockingCheckboxMenuItemUI result = new DockingCheckboxMenuItemUI(); result.ui = (MenuItemUI) UIManager.getDefaults().getUI(c); return result; diff --git a/Ghidra/Framework/Docking/src/main/java/docking/menu/DockingMenuItemUI.java b/Ghidra/Framework/Docking/src/main/java/docking/menu/DockingMenuItemUI.java index c692839a0b..1a403c800c 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/menu/DockingMenuItemUI.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/menu/DockingMenuItemUI.java @@ -28,24 +28,23 @@ import java.util.Map; import javax.accessibility.Accessible; import javax.swing.*; -import javax.swing.plaf.ComponentUI; import javax.swing.plaf.MenuItemUI; import docking.util.GraphicsUtils; /** * This class exists to make menu items display content with proper alignment whether or not - * they are displaying an icon. That is, this class will introduce padding for absent icons + * they are displaying an icon. That is, this class will introduce padding for absent icons * within menu items so that the item lines up with those items that do contain icons. *

* This class has an additional feature that allows clients to display menu item content in a * tabular fashion. A menu item using this UI can contain some combination of the of the following - * items, in the given order: + * items, in the given order: *

  * [Checkbox][Icon][Menu Item Content][Menu Pull-right/Accelerator Text]
  * 
- * To display the Menu Item Content in a tabular fashion, use the '\t' character - * to delimit the data into columns. This class will align all menu items in the given menu + * To display the Menu Item Content in a tabular fashion, use the '\t' character + * to delimit the data into columns. This class will align all menu items in the given menu * based upon the largest number of columns in the group and the largest width for each column. */ public class DockingMenuItemUI extends MenuItemUI { @@ -57,7 +56,7 @@ public class DockingMenuItemUI extends MenuItemUI { protected MenuItemUI ui; - public static ComponentUI createUI(JComponent c) { + public static DockingMenuItemUI createUI(JComponent c) { DockingMenuItemUI result = new DockingMenuItemUI(); result.ui = (MenuItemUI) UIManager.getDefaults().getUI(c); return result; @@ -170,7 +169,7 @@ public class DockingMenuItemUI extends MenuItemUI { } public static class MenuTabulator { - private ArrayList columns = new ArrayList(); + private ArrayList columns = new ArrayList<>(); public static MenuTabulator tabulate(JMenuItem c) { MenuTabulator tabulator = get(c); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/menu/DockingMenuUI.java b/Ghidra/Framework/Docking/src/main/java/docking/menu/DockingMenuUI.java index d53eacd34b..956bb9c32a 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/menu/DockingMenuUI.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/menu/DockingMenuUI.java @@ -15,12 +15,12 @@ */ package docking.menu; -import javax.swing.*; -import javax.swing.plaf.ComponentUI; +import javax.swing.JComponent; +import javax.swing.UIManager; import javax.swing.plaf.MenuItemUI; public class DockingMenuUI extends DockingMenuItemUI { - public static ComponentUI createUI(JComponent c) { + public static DockingMenuUI createUI(JComponent c) { DockingMenuUI result = new DockingMenuUI(); result.ui = (MenuItemUI) UIManager.getDefaults().getUI(c); return result; diff --git a/Ghidra/Framework/Docking/src/main/java/docking/menu/MenuItemManager.java b/Ghidra/Framework/Docking/src/main/java/docking/menu/MenuItemManager.java index 83eeda43c4..daf9c03906 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/menu/MenuItemManager.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/menu/MenuItemManager.java @@ -20,8 +20,7 @@ import java.awt.event.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import javax.swing.ButtonModel; -import javax.swing.JMenuItem; +import javax.swing.*; import javax.swing.event.ChangeListener; import docking.ActionContext; @@ -29,6 +28,7 @@ import docking.DefaultActionContext; import docking.action.*; import ghidra.util.Msg; import ghidra.util.StringUtilities; +import resources.ResourceManager; /** * Class to manage a JMenuItem for an action. Handles property changes in the action @@ -184,7 +184,11 @@ class MenuItemManager implements ManagedMenuItem, PropertyChangeListener, Action String text = menuData.getMenuItemName(); String trimmed = StringUtilities.trimMiddle(text, 50); menuItem.setText(trimmed); - menuItem.setIcon(menuData.getMenuIcon()); + Icon menuIcon = menuData.getMenuIcon(); + menuItem.setIcon(menuIcon); + if (menuIcon != null) { + menuItem.setDisabledIcon(ResourceManager.getDisabledIcon(menuIcon)); + } menuItem.setMnemonic(menuData.getMnemonic()); menuItem.revalidate(); } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/menu/MultipleActionDockingToolbarButton.java b/Ghidra/Framework/Docking/src/main/java/docking/menu/MultipleActionDockingToolbarButton.java index 01c4828894..d7f64c9b44 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/menu/MultipleActionDockingToolbarButton.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/menu/MultipleActionDockingToolbarButton.java @@ -164,10 +164,10 @@ public class MultipleActionDockingToolbarButton extends EmptyBorderButton { // 1) show a popup if it was not showing // 2) hide the popup if it was showing // - // Case 2 requires timestamps. Java will close the popup as the button is clicked. This - // means that when we are told to show the popup as the result of a click, the popup will - // never be showing. To work around this, we track the elapsed time since last click. If - // the period is too short, then we assume Java closed the popup when the click happened + // Case 2 requires timestamps. Java will close the popup as the button is clicked. This + // means that when we are told to show the popup as the result of a click, the popup will + // never be showing. To work around this, we track the elapsed time since last click. If + // the period is too short, then we assume Java closed the popup when the click happened //and thus we should ignore it. // long elapsedTime = System.currentTimeMillis() - popupLastClosedTime; @@ -197,7 +197,7 @@ public class MultipleActionDockingToolbarButton extends EmptyBorderButton { } // a custom Ghidra UI that handles alignment issues and allows for tabulating presentation - item.setUI((DockingMenuItemUI) DockingMenuItemUI.createUI(item)); + item.setUI(DockingMenuItemUI.createUI(item)); final DockingActionIf delegateAction = dockingAction; item.addActionListener(e -> { ActionContext context = getActionContext(); diff --git a/Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/app/plugin/core/clipboard/ClipboardPluginTest.java b/Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/app/plugin/core/clipboard/ClipboardPluginTest.java index 3c2d61fe46..9bebcd716f 100644 --- a/Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/app/plugin/core/clipboard/ClipboardPluginTest.java +++ b/Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/app/plugin/core/clipboard/ClipboardPluginTest.java @@ -1401,8 +1401,8 @@ public class ClipboardPluginTest extends AbstractGhidraHeadedIntegrationTest { Point point = wrapper.getStartMouseDragLocation(); int startX = point.x; int startY = point.y; - Point endPoint = wrapper.getEndMouseDragLocation(); + int endX = endPoint.x; int endY = endPoint.y;