diff --git a/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserManager.java b/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserManager.java index 595907aa5720..905e8a96ceb9 100644 --- a/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserManager.java +++ b/platform/lang-impl/src/com/intellij/ide/hierarchy/HierarchyBrowserManager.java @@ -17,11 +17,11 @@ package com.intellij.ide.hierarchy; import com.intellij.icons.AllIcons; +import com.intellij.ide.actions.ToggleToolbarAction; import com.intellij.ide.impl.ContentManagerWatcher; import com.intellij.openapi.actionSystem.DefaultActionGroup; import com.intellij.openapi.components.*; import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.SimpleToolWindowPanel; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowAnchor; import com.intellij.openapi.wm.ToolWindowId; @@ -52,7 +52,7 @@ public final class HierarchyBrowserManager implements PersistentStateComponent iterateToolbars(JComponent root) { + return JBSwingUtilities.uiTraverser().preOrderTraversal(root).filter(ActionToolbar.class); + } + + private static class ToolbarTogglesGroup extends ActionGroup { + + private final ToolWindow myToolWindow; + + public ToolbarTogglesGroup(ToolWindow toolWindow) { + super("View Options", true); + myToolWindow = toolWindow; + } + + @Override + public boolean isPopup() { + return getChildren(null).length > 3; + } + + @Override + public void update(AnActionEvent e) { + e.getPresentation().setVisible(!ActionGroupUtil.isGroupEmpty(this, e)); + } + + @NotNull + @Override + public AnAction[] getChildren(@Nullable AnActionEvent e) { + ContentManager contentManager = myToolWindow.getContentManager(); + Content selectedContent = contentManager.getSelectedContent(); + JComponent contentComponent = selectedContent != null ? selectedContent.getComponent() : null; + if (contentComponent == null) return EMPTY_ARRAY; + List result = ContainerUtil.newSmartList(); + for (final ActionToolbar toolbar : iterateToolbars(contentComponent)) { + JComponent c = toolbar.getComponent(); + if (c.isVisible() || !c.isValid()) continue; + List actions = toolbar.getActions(false); + for (AnAction action : actions) { + if (!(action instanceof ToggleAction || action instanceof Separator)) continue; + result.add(action); + } + } + return result.toArray(new AnAction[result.size()]); + } + } +} diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesViewContentManager.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesViewContentManager.java index 7801b7f80b45..2fc08b1d2f8a 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesViewContentManager.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesViewContentManager.java @@ -17,6 +17,7 @@ package com.intellij.openapi.vcs.changes.ui; import com.intellij.icons.AllIcons; +import com.intellij.ide.actions.ToggleToolbarAction; import com.intellij.lifecycle.PeriodicalTasksCloser; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.DefaultActionGroup; @@ -27,7 +28,6 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.DumbAwareRunnable; import com.intellij.openapi.project.Project; import com.intellij.openapi.startup.StartupManager; -import com.intellij.openapi.ui.SimpleToolWindowPanel; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Key; @@ -87,7 +87,7 @@ public class ChangesViewContentManager extends AbstractProjectComponent implemen myToolWindow = toolWindowManager.registerToolWindow(TOOLWINDOW_ID, true, ToolWindowAnchor.BOTTOM, myProject, true); myToolWindow.setIcon(AllIcons.Toolwindows.ToolWindowChanges); DefaultActionGroup gearActions = new DefaultActionGroup(); - gearActions.addAction(SimpleToolWindowPanel.createToggleToolbarAction(myProject, myToolWindow)).setAsSecondary(true); + gearActions.addAction(ToggleToolbarAction.createToggleToolbarGroup(myProject, myToolWindow)).setAsSecondary(true); ((ToolWindowEx)myToolWindow).setAdditionalGearActions(gearActions); updateToolWindowAvailability(); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/ProjectLevelVcsManagerImpl.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/ProjectLevelVcsManagerImpl.java index 6886dd5098d8..1e0ab57f5c52 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/ProjectLevelVcsManagerImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/ProjectLevelVcsManagerImpl.java @@ -16,6 +16,7 @@ package com.intellij.openapi.vcs.impl; import com.intellij.icons.AllIcons; +import com.intellij.ide.actions.ToggleToolbarAction; import com.intellij.openapi.actionSystem.DefaultActionGroup; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; @@ -34,7 +35,6 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ex.ProjectEx; import com.intellij.openapi.roots.FileIndexFacade; import com.intellij.openapi.startup.StartupManager; -import com.intellij.openapi.ui.SimpleToolWindowPanel; import com.intellij.openapi.util.*; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.registry.Registry; @@ -242,7 +242,7 @@ public class ProjectLevelVcsManagerImpl extends ProjectLevelVcsManagerEx impleme myContentManager = toolWindow.getContentManager(); toolWindow.setIcon(AllIcons.Toolwindows.VcsSmallTab); DefaultActionGroup gearActions = new DefaultActionGroup(); - gearActions.addAction(SimpleToolWindowPanel.createToggleToolbarAction(myProject, toolWindow)).setAsSecondary(true); + gearActions.addAction(ToggleToolbarAction.createToggleToolbarGroup(myProject, toolWindow)).setAsSecondary(true); ((ToolWindowEx)toolWindow).setAdditionalGearActions(gearActions); toolWindow.installWatcher(myContentManager); }