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
This commit is contained in:
@@ -18,12 +18,15 @@ package com.intellij.ide.hierarchy;
|
||||
|
||||
import com.intellij.icons.AllIcons;
|
||||
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;
|
||||
import com.intellij.openapi.wm.ToolWindowManager;
|
||||
import com.intellij.openapi.wm.ex.ToolWindowEx;
|
||||
import com.intellij.ui.content.ContentManager;
|
||||
|
||||
@State(
|
||||
@@ -46,11 +49,15 @@ public final class HierarchyBrowserManager implements PersistentStateComponent<H
|
||||
private final ContentManager myContentManager;
|
||||
|
||||
public HierarchyBrowserManager(final Project project) {
|
||||
final ToolWindowManager toolWindowManager=ToolWindowManager.getInstance(project);
|
||||
final ToolWindow toolWindow = toolWindowManager.registerToolWindow(ToolWindowId.HIERARCHY, true, ToolWindowAnchor.RIGHT, project);
|
||||
ToolWindowManager toolWindowManager = ToolWindowManager.getInstance(project);
|
||||
ToolWindow toolWindow = toolWindowManager.registerToolWindow(ToolWindowId.HIERARCHY, true, ToolWindowAnchor.RIGHT, project);
|
||||
DefaultActionGroup gearActions = new DefaultActionGroup();
|
||||
gearActions.addAction(SimpleToolWindowPanel.createToggleToolbarAction(toolWindow)).setAsSecondary(true);
|
||||
((ToolWindowEx)toolWindow).setAdditionalGearActions(gearActions);
|
||||
|
||||
myContentManager = toolWindow.getContentManager();
|
||||
toolWindow.setIcon(AllIcons.Toolwindows.ToolWindowHierarchy);
|
||||
new ContentManagerWatcher(toolWindow,myContentManager);
|
||||
new ContentManagerWatcher(toolWindow, myContentManager);
|
||||
}
|
||||
|
||||
public final ContentManager getContentManager() {
|
||||
|
||||
@@ -36,6 +36,7 @@ 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;
|
||||
@@ -69,6 +70,7 @@ import java.util.List;
|
||||
public class StructureViewWrapperImpl implements StructureViewWrapper, Disposable {
|
||||
private final Project myProject;
|
||||
private final ToolWindowEx myToolWindow;
|
||||
private final AnAction myShowToolbarAction;
|
||||
|
||||
private VirtualFile myFile;
|
||||
|
||||
@@ -90,6 +92,7 @@ public class StructureViewWrapperImpl implements StructureViewWrapper, Disposabl
|
||||
public StructureViewWrapperImpl(Project project, ToolWindowEx toolWindow) {
|
||||
myProject = project;
|
||||
myToolWindow = toolWindow;
|
||||
myShowToolbarAction = SimpleToolWindowPanel.createToggleToolbarAction(myToolWindow);
|
||||
|
||||
myUpdateQueue = new MergingUpdateQueue("StructureView", Registry.intValue("structureView.coalesceTime"), false, myToolWindow.getComponent(), this, myToolWindow.getComponent(), true);
|
||||
myUpdateQueue.setRestartTimerOnAdd(true);
|
||||
@@ -365,12 +368,13 @@ public class StructureViewWrapperImpl implements StructureViewWrapper, Disposabl
|
||||
}
|
||||
|
||||
private void updateHeaderActions(StructureView structureView) {
|
||||
ActionGroup gearActions = null;
|
||||
DefaultActionGroup gearActions = new DefaultActionGroup();
|
||||
AnAction[] titleActions = AnAction.EMPTY_ARRAY;
|
||||
if (structureView instanceof StructureViewComponent) {
|
||||
gearActions = ((StructureViewComponent)structureView).getGearActions();
|
||||
gearActions.addAll(((StructureViewComponent)structureView).getGearActions());
|
||||
titleActions = ((StructureViewComponent)structureView).getTitleActions();
|
||||
}
|
||||
gearActions.addAction(myShowToolbarAction).setAsSecondary(true);
|
||||
myToolWindow.setAdditionalGearActions(gearActions);
|
||||
myToolWindow.setTitleActions(titleActions);
|
||||
}
|
||||
|
||||
-1
@@ -54,7 +54,6 @@ public final class StructureViewFactoryImpl extends StructureViewFactoryEx imple
|
||||
@SuppressWarnings({"WeakerAccess"}) public boolean AUTOSCROLL_MODE = true;
|
||||
@SuppressWarnings({"WeakerAccess"}) public boolean AUTOSCROLL_FROM_SOURCE = false;
|
||||
@SuppressWarnings({"WeakerAccess"}) public String ACTIVE_ACTIONS = "";
|
||||
public boolean SHOW_TOOLBAR = false;
|
||||
}
|
||||
|
||||
private final Project myProject;
|
||||
|
||||
+2
-22
@@ -154,9 +154,7 @@ public class StructureViewComponent extends SimpleToolWindowPanel implements Tre
|
||||
myAutoScrollToSourceHandler = new MyAutoScrollToSourceHandler();
|
||||
myAutoScrollFromSourceHandler = new MyAutoScrollFromSourceHandler(myProject, this);
|
||||
|
||||
if (getSettings().SHOW_TOOLBAR) {
|
||||
setToolbar(createToolbar());
|
||||
}
|
||||
setToolbar(createToolbar());
|
||||
|
||||
installTree();
|
||||
|
||||
@@ -390,25 +388,7 @@ public class StructureViewComponent extends SimpleToolWindowPanel implements Tre
|
||||
}
|
||||
|
||||
public ActionGroup getGearActions() {
|
||||
DefaultActionGroup group = createActionGroup(true);
|
||||
group.addAction(new ToggleAction("Show Toolbar") {
|
||||
@Override
|
||||
public boolean isDumbAware() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSelected(AnActionEvent e) {
|
||||
return getSettings().SHOW_TOOLBAR;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSelected(AnActionEvent e, boolean state) {
|
||||
setToolbar(state ? createToolbar() : null);
|
||||
getSettings().SHOW_TOOLBAR = state;
|
||||
}
|
||||
}).setAsSecondary(true);
|
||||
return group;
|
||||
return createActionGroup(true);
|
||||
}
|
||||
|
||||
private StructureViewFactoryImpl.State getSettings() {
|
||||
|
||||
@@ -18,12 +18,15 @@ package com.intellij.usageView.impl;
|
||||
|
||||
import com.intellij.icons.AllIcons;
|
||||
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;
|
||||
import com.intellij.openapi.wm.ToolWindowId;
|
||||
import com.intellij.openapi.wm.ToolWindowManager;
|
||||
import com.intellij.openapi.wm.ex.ToolWindowEx;
|
||||
import com.intellij.ui.content.*;
|
||||
import com.intellij.usageView.UsageViewManager;
|
||||
import com.intellij.usages.UsageView;
|
||||
@@ -41,6 +44,10 @@ public class UsageViewManagerImpl extends UsageViewManager {
|
||||
ToolWindow toolWindow = toolWindowManager.registerToolWindow(ToolWindowId.FIND, true, ToolWindowAnchor.BOTTOM, project, true);
|
||||
toolWindow.setToHideOnEmptyContent(true);
|
||||
toolWindow.setIcon(AllIcons.Toolwindows.ToolWindowFind);
|
||||
DefaultActionGroup gearActions = new DefaultActionGroup();
|
||||
gearActions.addAction(SimpleToolWindowPanel.createToggleToolbarAction(toolWindow)).setAsSecondary(true);
|
||||
((ToolWindowEx)toolWindow).setAdditionalGearActions(gearActions);
|
||||
|
||||
myFindContentManager = toolWindow.getContentManager();
|
||||
myFindContentManager.addContentManagerListener(new ContentManagerAdapter() {
|
||||
@Override
|
||||
|
||||
@@ -15,20 +15,27 @@
|
||||
*/
|
||||
package com.intellij.openapi.ui;
|
||||
|
||||
import com.intellij.openapi.actionSystem.ActionToolbar;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.DataProvider;
|
||||
import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.wm.ToolWindow;
|
||||
import com.intellij.ui.content.Content;
|
||||
import com.intellij.ui.content.ContentManagerAdapter;
|
||||
import com.intellij.ui.content.ContentManagerEvent;
|
||||
import com.intellij.ui.switcher.QuickActionProvider;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.ui.AwtVisitor;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ContainerAdapter;
|
||||
import java.awt.event.ContainerEvent;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
public class SimpleToolWindowPanel extends JPanel implements QuickActionProvider, DataProvider {
|
||||
@@ -74,6 +81,10 @@ public class SimpleToolWindowPanel extends JPanel implements QuickActionProvider
|
||||
});
|
||||
}
|
||||
|
||||
public boolean isToolbarVisible() {
|
||||
return myToolbar != null && myToolbar.isVisible();
|
||||
}
|
||||
|
||||
public void setToolbar(@Nullable JComponent c) {
|
||||
if (c == null) {
|
||||
remove(myToolbar);
|
||||
@@ -159,4 +170,67 @@ public class SimpleToolWindowPanel extends JPanel implements QuickActionProvider
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static AnAction createToggleToolbarAction(@NotNull ToolWindow toolWindow) {
|
||||
return new ToggleToolbarAction(toolWindow, PropertiesComponent.getInstance());
|
||||
}
|
||||
|
||||
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) {
|
||||
setContentToolbarVisible(event.getContent(), getVisibilityValue());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@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, state);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private String getProperty() {
|
||||
return myToolWindow.getStripeTitle() + ".ShowToolbar";
|
||||
}
|
||||
|
||||
private boolean getVisibilityValue() {
|
||||
return myPropertiesComponent.getBoolean(getProperty(), true);
|
||||
}
|
||||
|
||||
private static void setContentToolbarVisible(Content content, boolean state) {
|
||||
LinkedList<JComponent> deque = ContainerUtil.newLinkedList(content.getComponent());
|
||||
while(!deque.isEmpty()) {
|
||||
JComponent component = deque.pollFirst();
|
||||
if (!(component instanceof JPanel)) continue;
|
||||
|
||||
for (int i = 0, count = component.getComponentCount(); i < count; i++) {
|
||||
Component c = component.getComponent(i);
|
||||
if (c instanceof ActionToolbar) {
|
||||
c.setVisible(state);
|
||||
}
|
||||
else if (c instanceof JPanel) {
|
||||
deque.addLast((JPanel)c);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+7
@@ -19,6 +19,7 @@ package com.intellij.openapi.vcs.changes.ui;
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.lifecycle.PeriodicalTasksCloser;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.actionSystem.DefaultActionGroup;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
import com.intellij.openapi.components.AbstractProjectComponent;
|
||||
@@ -26,6 +27,7 @@ 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;
|
||||
@@ -36,6 +38,7 @@ import com.intellij.openapi.vcs.VcsListener;
|
||||
import com.intellij.openapi.wm.ToolWindow;
|
||||
import com.intellij.openapi.wm.ToolWindowAnchor;
|
||||
import com.intellij.openapi.wm.ToolWindowManager;
|
||||
import com.intellij.openapi.wm.ex.ToolWindowEx;
|
||||
import com.intellij.ui.content.*;
|
||||
import com.intellij.util.Alarm;
|
||||
import com.intellij.util.NotNullFunction;
|
||||
@@ -83,6 +86,10 @@ public class ChangesViewContentManager extends AbstractProjectComponent implemen
|
||||
if (toolWindowManager != null) {
|
||||
myToolWindow = toolWindowManager.registerToolWindow(TOOLWINDOW_ID, true, ToolWindowAnchor.BOTTOM, myProject, true);
|
||||
myToolWindow.setIcon(AllIcons.Toolwindows.ToolWindowChanges);
|
||||
DefaultActionGroup gearActions = new DefaultActionGroup();
|
||||
gearActions.addAction(SimpleToolWindowPanel.createToggleToolbarAction(myToolWindow)).setAsSecondary(true);
|
||||
((ToolWindowEx)myToolWindow).setAdditionalGearActions(gearActions);
|
||||
|
||||
updateToolWindowAvailability();
|
||||
final ContentManager contentManager = myToolWindow.getContentManager();
|
||||
myContentManagerListener = new MyContentManagerListener();
|
||||
|
||||
Reference in New Issue
Block a user