GT-3567 - Dialog Keybindings - review fixes

This commit is contained in:
dragonmacher 2020-03-09 15:41:29 -04:00
parent 314100a70c
commit a2a9ade24f
5 changed files with 20 additions and 17 deletions

View file

@ -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);
} }

View file

@ -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();
} }

View file

@ -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);

View file

@ -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;
} }

View file

@ -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);