mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-04 02:09:44 +02:00
GP-5114 - Updated component providers to close on Escape when they are the only provider in a window
This commit is contained in:
parent
7e0a96e477
commit
aaf23cf096
11 changed files with 187 additions and 41 deletions
|
@ -4,9 +4,9 @@
|
|||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
|
@ -75,12 +75,15 @@ class DockableToolBarManager {
|
|||
ToolBarCloseAction closeAction = new ToolBarCloseAction(owner);
|
||||
closeButtonManager = new ToolBarItemManager(closeAction, winMgr);
|
||||
|
||||
CloseLastProviderAction closeLastProviderAction = new CloseLastProviderAction(owner);
|
||||
|
||||
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, closeLastProviderAction);
|
||||
tool.addLocalAction(provider, dropDownAction);
|
||||
}
|
||||
|
||||
|
@ -216,6 +219,42 @@ class DockableToolBarManager {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* An action to close the provider on Escape if the provider is the last in the window. This
|
||||
* allows users to close transient providers (like search results) easily.
|
||||
*/
|
||||
private class CloseLastProviderAction extends DockingAction {
|
||||
|
||||
CloseLastProviderAction(String owner) {
|
||||
super("Close Window for Last Provider", owner, KeyBindingType.SHARED);
|
||||
setKeyBindingData(new KeyBindingData("ESCAPE"));
|
||||
setDescription("Close the window if this provider is the last provider in the window");
|
||||
markHelpUnnecessary();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionContext context) {
|
||||
ComponentPlaceholder placeholder = dockableComponent.getComponentWindowingPlaceholder();
|
||||
if (placeholder != null) {
|
||||
placeholder.close();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabledForContext(ActionContext context) {
|
||||
DockingWindowManager dwm = DockingWindowManager.getActiveInstance();
|
||||
ComponentProvider provider = context.getComponentProvider();
|
||||
if (provider == null) {
|
||||
// Some context providers do not specify the provider when creating a contexts
|
||||
provider = dwm.getActiveComponentProvider();
|
||||
}
|
||||
if (provider != dockableComponent.getComponentProvider()) {
|
||||
return false; // not my provider
|
||||
}
|
||||
return dwm.isLastProviderInDetachedWindow(provider);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Actions added to toolbar for displaying the drop-down menu.
|
||||
*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue