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.FlowLayout;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
|
||||
import javax.swing.*;
|
||||
|
@ -49,7 +49,8 @@ class DockableToolBarManager {
|
|||
|
||||
DockableToolBarManager(GenericHeader 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();
|
||||
ToolBarCloseAction closeAction = new ToolBarCloseAction(owner);
|
||||
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
|
||||
Tool tool = winMgr.getTool();
|
||||
tool.addLocalAction(provider, closeAction);
|
||||
tool.addLocalAction(provider, dropDownAction);
|
||||
}
|
||||
|
||||
private void initialize(DockingWindowManager winMgr, MenuHandler menuHandler,
|
||||
Iterator<DockingActionIf> actions) {
|
||||
toolBarManager = new ToolBarManager(winMgr);
|
||||
menuManager = new MenuManager(null, '\0', null, false, menuHandler, menuGroupMap);
|
||||
menuButtonManager = new ToolBarItemManager(new ToolBarMenuAction(), winMgr);
|
||||
|
||||
while (actions.hasNext()) {
|
||||
DockingActionIf action = actions.next();
|
||||
|
@ -212,19 +216,42 @@ class DockableToolBarManager {
|
|||
*/
|
||||
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() {
|
||||
super("Local Menu", DockingWindowManager.DOCKING_WINDOWS_OWNER);
|
||||
setDescription("Menu");
|
||||
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
|
||||
public void actionPerformed(ActionContext context) {
|
||||
JComponent src = (JComponent) context.getSourceObject();
|
||||
Dimension d = src.getSize();
|
||||
Dimension d = myButton.getSize();
|
||||
JPopupMenu popupMenu = menuManager.getPopupMenu();
|
||||
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