mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
UI: one simple way to control toolwindow toolbars visibility 5
This commit is contained in:
@@ -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<H
|
||||
ToolWindowManager toolWindowManager = ToolWindowManager.getInstance(project);
|
||||
ToolWindow toolWindow = toolWindowManager.registerToolWindow(ToolWindowId.HIERARCHY, true, ToolWindowAnchor.RIGHT, project);
|
||||
DefaultActionGroup gearActions = new DefaultActionGroup();
|
||||
gearActions.addAction(SimpleToolWindowPanel.createToggleToolbarAction(project, toolWindow)).setAsSecondary(true);
|
||||
gearActions.addAction(ToggleToolbarAction.createToggleToolbarGroup(project, toolWindow)).setAsSecondary(true);
|
||||
((ToolWindowEx)toolWindow).setAdditionalGearActions(gearActions);
|
||||
|
||||
myContentManager = toolWindow.getContentManager();
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
|
||||
package com.intellij.ide.impl;
|
||||
|
||||
import com.intellij.ide.CommonActionsManager;
|
||||
import com.intellij.ide.DataManager;
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.ide.actions.ToggleToolbarAction;
|
||||
import com.intellij.ide.projectView.impl.ProjectRootsUtil;
|
||||
import com.intellij.ide.structureView.*;
|
||||
import com.intellij.ide.structureView.impl.StructureViewComposite;
|
||||
@@ -36,7 +38,6 @@ import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleUtil;
|
||||
import com.intellij.openapi.module.ModuleUtilCore;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.SimpleToolWindowPanel;
|
||||
import com.intellij.openapi.ui.popup.JBPopupFactory;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
@@ -92,7 +93,7 @@ public class StructureViewWrapperImpl implements StructureViewWrapper, Disposabl
|
||||
public StructureViewWrapperImpl(Project project, ToolWindowEx toolWindow) {
|
||||
myProject = project;
|
||||
myToolWindow = toolWindow;
|
||||
myShowToolbarAction = SimpleToolWindowPanel.createToggleToolbarAction(project, myToolWindow);
|
||||
myShowToolbarAction = ToggleToolbarAction.createToggleToolbarGroup(project, myToolWindow);
|
||||
|
||||
myUpdateQueue = new MergingUpdateQueue("StructureView", Registry.intValue("structureView.coalesceTime"), false, myToolWindow.getComponent(), this, myToolWindow.getComponent(), true);
|
||||
myUpdateQueue.setRestartTimerOnAdd(true);
|
||||
@@ -368,12 +369,14 @@ public class StructureViewWrapperImpl implements StructureViewWrapper, Disposabl
|
||||
}
|
||||
|
||||
private void updateHeaderActions(StructureView structureView) {
|
||||
DefaultActionGroup gearActions = new DefaultActionGroup();
|
||||
AnAction[] titleActions = AnAction.EMPTY_ARRAY;
|
||||
if (structureView instanceof StructureViewComponent) {
|
||||
gearActions.addAll(((StructureViewComponent)structureView).getGearActions());
|
||||
titleActions = ((StructureViewComponent)structureView).getTitleActions();
|
||||
JTree tree = ((StructureViewComponent)structureView).getTree();
|
||||
titleActions = new AnAction[]{
|
||||
CommonActionsManager.getInstance().createExpandAllHeaderAction(tree),
|
||||
CommonActionsManager.getInstance().createCollapseAllHeaderAction(tree)};
|
||||
}
|
||||
DefaultActionGroup gearActions = new DefaultActionGroup();
|
||||
gearActions.addAction(myShowToolbarAction).setAsSecondary(true);
|
||||
myToolWindow.setAdditionalGearActions(gearActions);
|
||||
myToolWindow.setTitleActions(titleActions);
|
||||
|
||||
+2
-20
@@ -16,7 +16,6 @@
|
||||
|
||||
package com.intellij.ide.structureView.newStructureView;
|
||||
|
||||
import com.intellij.ide.CommonActionsManager;
|
||||
import com.intellij.ide.CopyPasteDelegator;
|
||||
import com.intellij.ide.DataManager;
|
||||
import com.intellij.ide.PsiCopyPasteManager;
|
||||
@@ -387,26 +386,11 @@ public class StructureViewComponent extends SimpleToolWindowPanel implements Tre
|
||||
}
|
||||
}
|
||||
|
||||
public ActionGroup getGearActions() {
|
||||
return createActionGroup(true);
|
||||
}
|
||||
|
||||
private StructureViewFactoryImpl.State getSettings() {
|
||||
return ((StructureViewFactoryImpl)StructureViewFactory.getInstance(myProject)).getState();
|
||||
}
|
||||
|
||||
public AnAction[] getTitleActions() {
|
||||
return new AnAction[]{
|
||||
CommonActionsManager.getInstance().createExpandAllHeaderAction(getTree()),
|
||||
CommonActionsManager.getInstance().createCollapseAllHeaderAction(getTree()),
|
||||
};
|
||||
}
|
||||
|
||||
protected ActionGroup createActionGroup() {
|
||||
return createActionGroup(false);
|
||||
}
|
||||
|
||||
protected DefaultActionGroup createActionGroup(boolean togglesOnly) {
|
||||
DefaultActionGroup result = new DefaultActionGroup();
|
||||
Sorter[] sorters = myTreeModel.getSorters();
|
||||
for (final Sorter sorter : sorters) {
|
||||
@@ -431,10 +415,8 @@ public class StructureViewComponent extends SimpleToolWindowPanel implements Tre
|
||||
}
|
||||
}
|
||||
|
||||
if (!togglesOnly) {
|
||||
result.add(new ExpandAllAction(getTree()));
|
||||
result.add(new CollapseAllAction(getTree()));
|
||||
}
|
||||
result.add(new ExpandAllAction(getTree()));
|
||||
result.add(new CollapseAllAction(getTree()));
|
||||
|
||||
if (showScrollToFromSourceActions()) {
|
||||
result.addSeparator();
|
||||
|
||||
@@ -17,10 +17,10 @@
|
||||
package com.intellij.usageView.impl;
|
||||
|
||||
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.project.Project;
|
||||
import com.intellij.openapi.ui.SimpleToolWindowPanel;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.wm.ToolWindow;
|
||||
import com.intellij.openapi.wm.ToolWindowAnchor;
|
||||
@@ -45,7 +45,7 @@ public class UsageViewManagerImpl extends UsageViewManager {
|
||||
toolWindow.setToHideOnEmptyContent(true);
|
||||
toolWindow.setIcon(AllIcons.Toolwindows.ToolWindowFind);
|
||||
DefaultActionGroup gearActions = new DefaultActionGroup();
|
||||
gearActions.addAction(SimpleToolWindowPanel.createToggleToolbarAction(project, toolWindow)).setAsSecondary(true);
|
||||
gearActions.addAction(ToggleToolbarAction.createToggleToolbarGroup(project, toolWindow)).setAsSecondary(true);
|
||||
((ToolWindowEx)toolWindow).setAdditionalGearActions(gearActions);
|
||||
|
||||
myFindContentManager = toolWindow.getContentManager();
|
||||
|
||||
@@ -15,23 +15,14 @@
|
||||
*/
|
||||
package com.intellij.openapi.ui;
|
||||
|
||||
import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Conditions;
|
||||
import com.intellij.openapi.actionSystem.ActionToolbar;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.DataProvider;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.wm.ToolWindow;
|
||||
import com.intellij.ui.content.Content;
|
||||
import com.intellij.ui.content.ContentManager;
|
||||
import com.intellij.ui.content.ContentManagerAdapter;
|
||||
import com.intellij.ui.content.ContentManagerEvent;
|
||||
import com.intellij.ui.switcher.QuickActionProvider;
|
||||
import com.intellij.util.ui.AwtVisitor;
|
||||
import com.intellij.util.ui.JBSwingUtilities;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
@@ -172,61 +163,4 @@ public class SimpleToolWindowPanel extends JPanel implements QuickActionProvider
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static AnAction createToggleToolbarAction(Project project, @NotNull ToolWindow toolWindow) {
|
||||
return new ToggleToolbarAction(toolWindow, PropertiesComponent.getInstance(project));
|
||||
}
|
||||
|
||||
private static class ToggleToolbarAction extends ToggleAction implements DumbAware {
|
||||
|
||||
private final PropertiesComponent myPropertiesComponent;
|
||||
private final ToolWindow myToolWindow;
|
||||
|
||||
private ToggleToolbarAction(@NotNull ToolWindow toolWindow, @NotNull PropertiesComponent propertiesComponent) {
|
||||
super("Show Toolbar");
|
||||
myPropertiesComponent = propertiesComponent;
|
||||
myToolWindow = toolWindow;
|
||||
myToolWindow.getContentManager().addContentManagerListener(new ContentManagerAdapter() {
|
||||
@Override
|
||||
public void contentAdded(ContentManagerEvent event) {
|
||||
JComponent component = event.getContent().getComponent();
|
||||
setContentToolbarVisible(component, getVisibilityValue());
|
||||
|
||||
// support nested content managers, e.g. RunnerLayoutUi as content component
|
||||
ContentManager contentManager =
|
||||
component instanceof DataProvider ? PlatformDataKeys.CONTENT_MANAGER.getData((DataProvider)component) : null;
|
||||
if (contentManager != null) contentManager.addContentManagerListener(this);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSelected(AnActionEvent e) {
|
||||
return getVisibilityValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSelected(AnActionEvent e, boolean state) {
|
||||
myPropertiesComponent.setValue(getProperty(), String.valueOf(state), String.valueOf(true));
|
||||
for (Content content : myToolWindow.getContentManager().getContents()) {
|
||||
setContentToolbarVisible(content.getComponent(), state);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private String getProperty() {
|
||||
return myToolWindow.getStripeTitle() + ".ShowToolbar";
|
||||
}
|
||||
|
||||
private boolean getVisibilityValue() {
|
||||
return myPropertiesComponent.getBoolean(getProperty(), true);
|
||||
}
|
||||
|
||||
private static void setContentToolbarVisible(@NotNull JComponent root, boolean state) {
|
||||
for (Component c : JBSwingUtilities.uiTraverser().preOrderTraversal(root).filter(Conditions.instanceOf(ActionToolbar.class))) {
|
||||
c.setVisible(state);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,144 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
*
|
||||
* 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.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.ide.actions;
|
||||
|
||||
import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.wm.ToolWindow;
|
||||
import com.intellij.ui.content.Content;
|
||||
import com.intellij.ui.content.ContentManager;
|
||||
import com.intellij.ui.content.ContentManagerAdapter;
|
||||
import com.intellij.ui.content.ContentManagerEvent;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.ui.JBSwingUtilities;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author gregsh
|
||||
*/
|
||||
public class ToggleToolbarAction extends ToggleAction implements DumbAware {
|
||||
|
||||
@NotNull
|
||||
public static ActionGroup createToggleToolbarGroup(@NotNull Project project, @NotNull ToolWindow toolWindow) {
|
||||
return new DefaultActionGroup(new ToolbarTogglesGroup(toolWindow),
|
||||
new ToggleToolbarAction(toolWindow, PropertiesComponent.getInstance(project)));
|
||||
}
|
||||
|
||||
private final PropertiesComponent myPropertiesComponent;
|
||||
private final ToolWindow myToolWindow;
|
||||
|
||||
ToggleToolbarAction(@NotNull ToolWindow toolWindow, @NotNull PropertiesComponent propertiesComponent) {
|
||||
super("Show Toolbar");
|
||||
myPropertiesComponent = propertiesComponent;
|
||||
myToolWindow = toolWindow;
|
||||
myToolWindow.getContentManager().addContentManagerListener(new ContentManagerAdapter() {
|
||||
@Override
|
||||
public void contentAdded(ContentManagerEvent event) {
|
||||
JComponent component = event.getContent().getComponent();
|
||||
setContentToolbarVisible(component, getVisibilityValue());
|
||||
|
||||
// support nested content managers, e.g. RunnerLayoutUi as content component
|
||||
ContentManager contentManager =
|
||||
component instanceof DataProvider ? PlatformDataKeys.CONTENT_MANAGER.getData((DataProvider)component) : null;
|
||||
if (contentManager != null) contentManager.addContentManagerListener(this);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSelected(AnActionEvent e) {
|
||||
return getVisibilityValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSelected(AnActionEvent e, boolean state) {
|
||||
myPropertiesComponent.setValue(getProperty(), String.valueOf(state), String.valueOf(true));
|
||||
for (Content content : myToolWindow.getContentManager().getContents()) {
|
||||
setContentToolbarVisible(content.getComponent(), state);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private String getProperty() {
|
||||
return getShowToolbarProperty(myToolWindow);
|
||||
}
|
||||
|
||||
private boolean getVisibilityValue() {
|
||||
return myPropertiesComponent.getBoolean(getProperty(), true);
|
||||
}
|
||||
|
||||
private static void setContentToolbarVisible(@NotNull JComponent root, boolean state) {
|
||||
for (ActionToolbar toolbar : iterateToolbars(root)) {
|
||||
toolbar.getComponent().setVisible(state);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String getShowToolbarProperty(@NotNull ToolWindow window) {
|
||||
return window.getStripeTitle() + ".ShowToolbar";
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static Iterable<ActionToolbar> 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<AnAction> result = ContainerUtil.newSmartList();
|
||||
for (final ActionToolbar toolbar : iterateToolbars(contentComponent)) {
|
||||
JComponent c = toolbar.getComponent();
|
||||
if (c.isVisible() || !c.isValid()) continue;
|
||||
List<AnAction> 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()]);
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user