From 1a47dc662cc6f78cf488cc5b90d5eec721a4c7dc Mon Sep 17 00:00:00 2001 From: Dennis Ushakov Date: Thu, 2 Feb 2012 12:51:13 +0400 Subject: [PATCH] variables settings actions reorganized --- .../debugger/ui/DebuggerSessionTab.java | 24 ++++----- .../ui/layout/LayoutViewOptions.java | 2 + .../ui/layout/impl/RunnerContentUi.java | 5 ++ .../ui/layout/impl/RunnerLayoutUiImpl.java | 10 ++++ .../src/idea/LangActions.xml | 15 +++--- .../xdebugger/impl/ui/XDebugSessionTab.java | 49 +++++++++++++++++-- 6 files changed, 84 insertions(+), 21 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java index 29ca342908a5..b259f4fe85a9 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerSessionTab.java @@ -137,6 +137,8 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos stepping.add(actionManager.getAction(DebuggerActions.POP_FRAME)); stepping.addSeparator(); stepping.add(actionManager.getAction(DebuggerActions.RUN_TO_CURSOR)); + stepping.addSeparator(); + stepping.add(actionManager.getAction(DebuggerActions.EVALUATE_EXPRESSION)); myUi.getOptions().setTopToolbar(stepping, ActionPlaces.DEBUGGER_TOOLBAR); @@ -168,11 +170,6 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos XDebuggerUIConstants.VARIABLES_TAB_ICON, null); vars.setCloseable(false); vars.setAlertIcon(breakpointAlert); - final DefaultActionGroup varsGroup = new DefaultActionGroup(); - addAction(varsGroup, DebuggerActions.EVALUATE_EXPRESSION); - varsGroup.add(new WatchLastMethodReturnValueAction()); - varsGroup.add(new AutoVarsSwitchAction()); - vars.setActions(varsGroup, ActionPlaces.DEBUGGER_TOOLBAR, myVariablesPanel.getTree()); myUi.addContent(vars, 0, PlaceInGrid.center, false); // threads @@ -301,14 +298,16 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos addAction(group, DebuggerActions.DUMP_THREADS); group.addSeparator(); - final AnAction[] layout = myUi.getOptions().getLayoutActionsList(); - final AnAction layoutGroup = myUi.getOptions().getLayoutActions(); + group.add(myUi.getOptions().getLayoutActions()); + + final AnAction[] commonSettings = myUi.getOptions().getSettingsActionsList(); + final AnAction commonSettingsList = myUi.getOptions().getSettingsActions(); final DefaultActionGroup settings = new DefaultActionGroup("DebuggerSettings", true) { @Override public void update(AnActionEvent e) { e.getPresentation().setText(ActionsBundle.message("group.XDebugger.settings.text")); - e.getPresentation().setIcon(layoutGroup.getTemplatePresentation().getIcon()); + e.getPresentation().setIcon(commonSettingsList.getTemplatePresentation().getIcon()); } @Override @@ -316,12 +315,15 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos return true; } }; - for (AnAction each : layout) { + for (AnAction each : commonSettings) { settings.add(each); } - if (layout.length > 0) { + if (commonSettings.length > 0) { settings.addSeparator(); } + settings.add(new WatchLastMethodReturnValueAction()); + settings.add(new AutoVarsSwitchAction()); + settings.addSeparator(); addActionToGroup(settings, XDebuggerActions.AUTO_TOOLTIP); group.add(settings); @@ -563,7 +565,7 @@ public class DebuggerSessionTab extends DebuggerSessionTabBase implements Dispos private final String myMyTextDisable; public WatchLastMethodReturnValueAction() { - super("", DebuggerBundle.message("action.watch.method.return.value.description"), WATCH_RETURN_VALUES_ICON); + super("", DebuggerBundle.message("action.watch.method.return.value.description"), null); myWatchesReturnValues = DebuggerSettings.getInstance().WATCH_RETURN_VALUES; myTextEnable = DebuggerBundle.message("action.watches.method.return.value.enable"); myMyTextDisable = DebuggerBundle.message("action.watches.method.return.value.disable"); diff --git a/platform/lang-api/src/com/intellij/execution/ui/layout/LayoutViewOptions.java b/platform/lang-api/src/com/intellij/execution/ui/layout/LayoutViewOptions.java index 900d4b929a93..d0faa6782ec0 100644 --- a/platform/lang-api/src/com/intellij/execution/ui/layout/LayoutViewOptions.java +++ b/platform/lang-api/src/com/intellij/execution/ui/layout/LayoutViewOptions.java @@ -50,4 +50,6 @@ public interface LayoutViewOptions { LayoutViewOptions setAdditionalFocusActions(ActionGroup group); + AnAction getSettingsActions(); + AnAction[] getSettingsActionsList(); } \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerContentUi.java b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerContentUi.java index e31d8a32d3cd..f256405b29e1 100644 --- a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerContentUi.java +++ b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerContentUi.java @@ -69,6 +69,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac QuickActionProvider, DockContainer.Dialog { @NonNls public static final String LAYOUT = "Runner.Layout"; + @NonNls public static final String SETTINGS = "XDebugger.Settings"; @NonNls public static final String VIEW_POPUP = "Runner.View.Popup"; @NonNls public static final String VIEW_TOOLBAR = "Runner.View.Toolbar"; @@ -690,6 +691,10 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac } } + public ActionGroup getSettingsActions() { + return (ActionGroup)myActionManager.getAction(SETTINGS); + } + private static void moveFollowingTabs(int index, final JBRunnerTabs tabs) { for (TabInfo info : tabs.getTabs()) { final TabImpl tab = getTabFor(info); diff --git a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerLayoutUiImpl.java b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerLayoutUiImpl.java index 3560b1c25a17..584d919fb087 100644 --- a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerLayoutUiImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerLayoutUiImpl.java @@ -293,6 +293,16 @@ public class RunnerLayoutUiImpl implements Disposable, RunnerLayoutUi, LayoutSta return this; } + @Override + public AnAction getSettingsActions() { + return myContentUI.getSettingsActions(); + } + + public AnAction[] getSettingsActionsList() { + final ActionGroup group = (ActionGroup)getSettingsActions(); + return group.getChildren(null); + } + public Content[] getContents() { Content[] contents = new Content[getContentManager().getContentCount()]; for (int i = 0; i < contents.length; i++) { diff --git a/platform/platform-resources/src/idea/LangActions.xml b/platform/platform-resources/src/idea/LangActions.xml index 55c7d4b531c0..b3689548f07b 100644 --- a/platform/platform-resources/src/idea/LangActions.xml +++ b/platform/platform-resources/src/idea/LangActions.xml @@ -671,7 +671,7 @@ - + @@ -726,12 +726,15 @@ - - - - - + + + + + + + diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java index 28fcef27bc2f..f3dadf64bf25 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java @@ -30,10 +30,8 @@ import com.intellij.execution.ui.RunContentDescriptor; import com.intellij.execution.ui.actions.CloseAction; import com.intellij.execution.ui.layout.PlaceInGrid; import com.intellij.ide.actions.ContextHelpAction; -import com.intellij.openapi.actionSystem.ActionGroup; -import com.intellij.openapi.actionSystem.ActionManager; -import com.intellij.openapi.actionSystem.ActionPlaces; -import com.intellij.openapi.actionSystem.DefaultActionGroup; +import com.intellij.idea.ActionsBundle; +import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; import com.intellij.ui.content.Content; @@ -46,6 +44,7 @@ import com.intellij.xdebugger.impl.frame.XDebugViewBase; import com.intellij.xdebugger.impl.frame.XFramesView; import com.intellij.xdebugger.impl.frame.XVariablesView; import com.intellij.xdebugger.impl.frame.XWatchesView; +import com.intellij.xdebugger.impl.ui.tree.actions.SortValuesToggleAction; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -162,6 +161,31 @@ public class XDebugSessionTab extends DebuggerSessionTabBase { leftToolbar.addSeparator(); leftToolbar.add(myUi.getOptions().getLayoutActions()); + final AnAction[] commonSettings = myUi.getOptions().getSettingsActionsList(); + final AnAction commonSettingsList = myUi.getOptions().getSettingsActions(); + + final DefaultActionGroup settings = new DefaultActionGroup("DebuggerSettings", commonSettings.length > 0) { + @Override + public void update(AnActionEvent e) { + e.getPresentation().setText(ActionsBundle.message("group.XDebugger.settings.text")); + e.getPresentation().setIcon(commonSettingsList.getTemplatePresentation().getIcon()); + } + + @Override + public boolean isDumbAware() { + return true; + } + }; + for (AnAction each : commonSettings) { + settings.add(each); + } + if (commonSettings.length > 0) { + settings.addSeparator(); + } + settings.add(new ToggleSortValuesAction(commonSettings.length == 0)); + + leftToolbar.add(settings); + leftToolbar.addSeparator(); @@ -192,4 +216,21 @@ public class XDebugSessionTab extends DebuggerSessionTabBase { public RunContentDescriptor getRunContentDescriptor() { return myRunContentDescriptor; } + + private static class ToggleSortValuesAction extends SortValuesToggleAction { + private final boolean myShowIcon; + + private ToggleSortValuesAction(boolean showIcon) { + copyFrom(ActionManager.getInstance().getAction(XDebuggerActions.TOGGLE_SORT_VALUES)); + myShowIcon = showIcon; + } + + @Override + public void update(AnActionEvent e) { + super.update(e); + if (!myShowIcon) { + e.getPresentation().setIcon(null); + } + } + } }