Merge remote-tracking branch

'origin/GP-2637-dragonmacher-drop-down-keybinding' into patch
(Closes #4625)
This commit is contained in:
Ryan Kurtz 2022-10-08 01:00:38 -04:00
commit 37fd3450e0

View file

@ -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();
@ -177,8 +181,8 @@ class DockableToolBarManager {
}
//==================================================================================================
// Inner Classes
//==================================================================================================
// Inner Classes
//==================================================================================================
/**
* Action added to toolbar for "hiding" the component.
@ -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);
}
}
}