mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-04 18:29:37 +02:00
GP-2637 - Updated the Component Providers' drop-down button to allow
users to add a keybinding to show the popup menu.
This commit is contained in:
parent
0d5ff7628f
commit
8eba8cafed
1 changed files with 36 additions and 9 deletions
|
@ -17,7 +17,7 @@ package docking;
|
||||||
|
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.FlowLayout;
|
import java.awt.FlowLayout;
|
||||||
import java.util.ArrayList;
|
import java.util.Collections;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
@ -49,7 +49,8 @@ class DockableToolBarManager {
|
||||||
|
|
||||||
DockableToolBarManager(GenericHeader header) {
|
DockableToolBarManager(GenericHeader header) {
|
||||||
this.dockableHeader = header;
|
this.dockableHeader = header;
|
||||||
initialize(null, null, new ArrayList<DockingActionIf>().iterator());
|
menuButtonManager = new ToolBarItemManager(new ToolBarMenuAction(), null);
|
||||||
|
initialize(null, null, Collections.emptyIterator());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -74,17 +75,20 @@ class DockableToolBarManager {
|
||||||
String owner = provider.getOwner();
|
String owner = provider.getOwner();
|
||||||
ToolBarCloseAction closeAction = new ToolBarCloseAction(owner);
|
ToolBarCloseAction closeAction = new ToolBarCloseAction(owner);
|
||||||
closeButtonManager = new ToolBarItemManager(closeAction, winMgr);
|
closeButtonManager = new ToolBarItemManager(closeAction, winMgr);
|
||||||
Tool tool = winMgr.getTool();
|
|
||||||
|
ToolBarMenuAction dropDownAction = new ToolBarMenuAction(owner);
|
||||||
|
menuButtonManager = new ToolBarItemManager(dropDownAction, winMgr);
|
||||||
|
|
||||||
// we need to add this action to the tool in order to use key bindings
|
// we need to add this action to the tool in order to use key bindings
|
||||||
|
Tool tool = winMgr.getTool();
|
||||||
tool.addLocalAction(provider, closeAction);
|
tool.addLocalAction(provider, closeAction);
|
||||||
|
tool.addLocalAction(provider, dropDownAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initialize(DockingWindowManager winMgr, MenuHandler menuHandler,
|
private void initialize(DockingWindowManager winMgr, MenuHandler menuHandler,
|
||||||
Iterator<DockingActionIf> actions) {
|
Iterator<DockingActionIf> actions) {
|
||||||
toolBarManager = new ToolBarManager(winMgr);
|
toolBarManager = new ToolBarManager(winMgr);
|
||||||
menuManager = new MenuManager(null, '\0', null, false, menuHandler, menuGroupMap);
|
menuManager = new MenuManager(null, '\0', null, false, menuHandler, menuGroupMap);
|
||||||
menuButtonManager = new ToolBarItemManager(new ToolBarMenuAction(), winMgr);
|
|
||||||
|
|
||||||
while (actions.hasNext()) {
|
while (actions.hasNext()) {
|
||||||
DockingActionIf action = actions.next();
|
DockingActionIf action = actions.next();
|
||||||
|
@ -212,19 +216,42 @@ class DockableToolBarManager {
|
||||||
*/
|
*/
|
||||||
private class ToolBarMenuAction extends DockingAction {
|
private class ToolBarMenuAction extends DockingAction {
|
||||||
|
|
||||||
|
private JButton myButton;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for tool bars that are not part of standard component providers, such as
|
||||||
|
* those used when direct rendering.
|
||||||
|
*/
|
||||||
ToolBarMenuAction() {
|
ToolBarMenuAction() {
|
||||||
super("Local Menu", DockingWindowManager.DOCKING_WINDOWS_OWNER);
|
super("Local Menu", DockingWindowManager.DOCKING_WINDOWS_OWNER);
|
||||||
setDescription("Menu");
|
setDescription("Menu");
|
||||||
setToolBarData(new ToolBarData(MENU_ICON, null));
|
setToolBarData(new ToolBarData(MENU_ICON, null));
|
||||||
|
markHelpUnnecessary();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for component providers
|
||||||
|
* @param owner the action owner, typically a plugin
|
||||||
|
*/
|
||||||
|
ToolBarMenuAction(String owner) {
|
||||||
|
super("Local Menu", owner, KeyBindingType.SHARED);
|
||||||
|
setDescription("Menu");
|
||||||
|
setToolBarData(new ToolBarData(MENU_ICON, null));
|
||||||
|
markHelpUnnecessary();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected JButton doCreateButton() {
|
||||||
|
myButton = super.doCreateButton();
|
||||||
|
return myButton;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionContext context) {
|
public void actionPerformed(ActionContext context) {
|
||||||
JComponent src = (JComponent) context.getSourceObject();
|
Dimension d = myButton.getSize();
|
||||||
Dimension d = src.getSize();
|
|
||||||
JPopupMenu popupMenu = menuManager.getPopupMenu();
|
JPopupMenu popupMenu = menuManager.getPopupMenu();
|
||||||
popupMenu.addPopupMenuListener(menuManager.getMenuHandler());
|
popupMenu.addPopupMenuListener(menuManager.getMenuHandler());
|
||||||
popupMenu.show(src, 0, d.height);
|
popupMenu.show(myButton, 0, d.height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue