mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-06 03:50:02 +02:00
GT-3567 - Dialog Keybindings - review fixes
This commit is contained in:
parent
314100a70c
commit
a2a9ade24f
5 changed files with 20 additions and 17 deletions
|
@ -30,7 +30,7 @@ import docking.action.*;
|
||||||
import docking.actions.KeyBindingUtils;
|
import docking.actions.KeyBindingUtils;
|
||||||
import docking.event.mouse.GMouseListenerAdapter;
|
import docking.event.mouse.GMouseListenerAdapter;
|
||||||
import docking.help.HelpService;
|
import docking.help.HelpService;
|
||||||
import docking.menu.DockingToolbarButton;
|
import docking.menu.DialogToolbarButton;
|
||||||
import docking.util.AnimationUtils;
|
import docking.util.AnimationUtils;
|
||||||
import docking.widgets.label.GDHtmlLabel;
|
import docking.widgets.label.GDHtmlLabel;
|
||||||
import ghidra.util.*;
|
import ghidra.util.*;
|
||||||
|
@ -81,7 +81,7 @@ public class DialogComponentProvider
|
||||||
private Component focusComponent;
|
private Component focusComponent;
|
||||||
private JPanel toolbar;
|
private JPanel toolbar;
|
||||||
|
|
||||||
private final Map<DockingActionIf, DockingToolbarButton> actionMap = new HashMap<>();
|
private final Map<DockingActionIf, DialogToolbarButton> actionMap = new HashMap<>();
|
||||||
private final DialogComponentProviderPopupActionManager popupManager =
|
private final DialogComponentProviderPopupActionManager popupManager =
|
||||||
new DialogComponentProviderPopupActionManager(this);
|
new DialogComponentProviderPopupActionManager(this);
|
||||||
private final PopupHandler popupHandler = new PopupHandler();
|
private final PopupHandler popupHandler = new PopupHandler();
|
||||||
|
@ -1184,7 +1184,7 @@ public class DialogComponentProvider
|
||||||
mainPanel.add(toolbar, BorderLayout.NORTH);
|
mainPanel.add(toolbar, BorderLayout.NORTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
DockingToolbarButton button = new DockingToolbarButton(action, this);
|
DialogToolbarButton button = new DialogToolbarButton(action, this);
|
||||||
toolbar.add(button);
|
toolbar.add(button);
|
||||||
actionMap.put(action, button);
|
actionMap.put(action, button);
|
||||||
}
|
}
|
||||||
|
|
|
@ -220,10 +220,10 @@ public class KeyBindingOverrideKeyEventDispatcher implements KeyEventDispatcher
|
||||||
Window activeWindow = focusProvider.getActiveWindow();
|
Window activeWindow = focusProvider.getActiveWindow();
|
||||||
if (activeWindow instanceof DockingDialog) {
|
if (activeWindow instanceof DockingDialog) {
|
||||||
|
|
||||||
// This is legacy code, for which the reasons it exists cannot be recalled. We
|
// The choice to ignore modal dialogs was made long ago. We cannot remember why the
|
||||||
// speculate that odd things can happen when keybindings are processed with model
|
// choice was made, but speculate that odd things can happen when keybindings are
|
||||||
// dialogs open. For now, do not let key bindings get processed for modal dialogs.
|
// processed with modal dialogs open. For now, do not let key bindings get processed
|
||||||
// This can be changed in the future if needed.
|
// for modal dialogs. This can be changed in the future if needed.
|
||||||
DockingDialog dialog = (DockingDialog) activeWindow;
|
DockingDialog dialog = (DockingDialog) activeWindow;
|
||||||
return !dialog.isModal();
|
return !dialog.isModal();
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,14 +23,17 @@ import docking.EmptyBorderToggleButton;
|
||||||
import docking.action.*;
|
import docking.action.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Toolbar buttons for Dialogs. This class handles the peculiarities of DockableAction (see
|
* Toolbar buttons for Dialogs.
|
||||||
* the override notes below).
|
*
|
||||||
|
* <p>This class exists because dialog actions are not added to the regular tool's toolbars. This
|
||||||
|
* means that we have to create the dialog's toolbars outside of the tool. Thus, this class
|
||||||
|
* mimics how the tool's toolbar buttons are created.
|
||||||
*/
|
*/
|
||||||
public class DockingToolbarButton extends EmptyBorderToggleButton {
|
public class DialogToolbarButton extends EmptyBorderToggleButton {
|
||||||
private DockingActionIf dockingAction;
|
private DockingActionIf dockingAction;
|
||||||
private ActionContextProvider contextProvider;
|
private ActionContextProvider contextProvider;
|
||||||
|
|
||||||
public DockingToolbarButton(DockingActionIf action, ActionContextProvider contextProvider) {
|
public DialogToolbarButton(DockingActionIf action, ActionContextProvider contextProvider) {
|
||||||
super(action);
|
super(action);
|
||||||
this.contextProvider = contextProvider;
|
this.contextProvider = contextProvider;
|
||||||
setFocusable(false);
|
setFocusable(false);
|
|
@ -43,7 +43,7 @@ import docking.action.ToggleDockingActionIf;
|
||||||
import docking.actions.DockingToolActions;
|
import docking.actions.DockingToolActions;
|
||||||
import docking.dnd.GClipboard;
|
import docking.dnd.GClipboard;
|
||||||
import docking.framework.DockingApplicationConfiguration;
|
import docking.framework.DockingApplicationConfiguration;
|
||||||
import docking.menu.DockingToolbarButton;
|
import docking.menu.DialogToolbarButton;
|
||||||
import docking.widgets.MultiLineLabel;
|
import docking.widgets.MultiLineLabel;
|
||||||
import docking.widgets.OptionDialog;
|
import docking.widgets.OptionDialog;
|
||||||
import docking.widgets.filechooser.GhidraFileChooser;
|
import docking.widgets.filechooser.GhidraFileChooser;
|
||||||
|
@ -1430,9 +1430,9 @@ public abstract class AbstractDockingTest extends AbstractGenericTest {
|
||||||
if (element instanceof JButton) {
|
if (element instanceof JButton) {
|
||||||
|
|
||||||
JButton button = (JButton) element;
|
JButton button = (JButton) element;
|
||||||
if (button instanceof DockingToolbarButton) {
|
if (button instanceof DialogToolbarButton) {
|
||||||
DockingActionIf dockingAction =
|
DockingActionIf dockingAction =
|
||||||
((DockingToolbarButton) button).getDockingAction();
|
((DialogToolbarButton) button).getDockingAction();
|
||||||
if (dockingAction.getName().equals(name)) {
|
if (dockingAction.getName().equals(name)) {
|
||||||
return button;
|
return button;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ import org.junit.Test;
|
||||||
|
|
||||||
import docking.ActionContext;
|
import docking.ActionContext;
|
||||||
import docking.action.*;
|
import docking.action.*;
|
||||||
import docking.menu.DockingToolbarButton;
|
import docking.menu.DialogToolbarButton;
|
||||||
import docking.test.AbstractDockingTest;
|
import docking.test.AbstractDockingTest;
|
||||||
import docking.widgets.EmptyBorderButton;
|
import docking.widgets.EmptyBorderButton;
|
||||||
import resources.ResourceManager;
|
import resources.ResourceManager;
|
||||||
|
@ -146,13 +146,13 @@ public class EmptyBorderButtonTest extends AbstractDockingTest {
|
||||||
action.setToolBarData(new ToolBarData(ResourceManager.getDefaultIcon()));
|
action.setToolBarData(new ToolBarData(ResourceManager.getDefaultIcon()));
|
||||||
action.setEnabled(false);
|
action.setEnabled(false);
|
||||||
|
|
||||||
DockingToolbarButton button = new DockingToolbarButton(action, contextProvider);
|
DialogToolbarButton button = new DialogToolbarButton(action, contextProvider);
|
||||||
assertTrue(!button.isEnabled());
|
assertTrue(!button.isEnabled());
|
||||||
|
|
||||||
action.setEnabled(true);
|
action.setEnabled(true);
|
||||||
assertTrue(button.isEnabled());
|
assertTrue(button.isEnabled());
|
||||||
|
|
||||||
button = new DockingToolbarButton(action, contextProvider);
|
button = new DialogToolbarButton(action, contextProvider);
|
||||||
assertTrue(button.isEnabled());
|
assertTrue(button.isEnabled());
|
||||||
|
|
||||||
action.setEnabled(false);
|
action.setEnabled(false);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue