From ce55ca024fe9cb6b8a878a193fa2b60616bd58dc Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Fri, 18 Aug 2017 02:23:19 +0300 Subject: [PATCH] [vcs-log] move code that closes tabs to VcsLogContentUtil and close all closable content --- .../vcs/log/impl/VcsLogContentProvider.java | 34 ++++++------------- .../vcs/log/impl/VcsLogContentUtil.java | 22 +++++++++++- 2 files changed, 32 insertions(+), 24 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentProvider.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentProvider.java index 4418d82a7ee9..b67d0ba3f747 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentProvider.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentProvider.java @@ -21,12 +21,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.vcs.ProjectLevelVcsManager; import com.intellij.openapi.vcs.changes.ui.ChangesViewContentProvider; -import com.intellij.openapi.wm.ToolWindow; -import com.intellij.openapi.wm.ToolWindowId; -import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.ui.components.JBPanel; -import com.intellij.ui.content.Content; -import com.intellij.util.ContentsUtil; import com.intellij.util.NotNullFunction; import com.intellij.util.messages.MessageBusConnection; import com.intellij.vcs.log.ui.VcsLogPanel; @@ -65,7 +60,7 @@ public class VcsLogContentProvider implements ChangesViewContentProvider { @Override public void logDisposed(@NotNull VcsLogManager logManager) { - dispose(logManager); + disposeLogUi(logManager); } }); @@ -85,12 +80,19 @@ public class VcsLogContentProvider implements ChangesViewContentProvider { } } - private void dispose(@Nullable VcsLogManager logManager) { + @CalledInAwt + private void disposeLogUi(@Nullable VcsLogManager logManager) { LOG.assertTrue(ApplicationManager.getApplication().isDispatchThread()); + + // main ui myContainer.removeAll(); VcsLogUiImpl ui = myProjectLog.getMainLogUi(); if (ui != null) Disposer.dispose(ui); - if (logManager != null) closeLogTabs(logManager); + + // other tabs + if (logManager != null) { + VcsLogContentUtil.closeLogTabs(myProject, logManager.getTabNames()); + } } @Override @@ -101,21 +103,7 @@ public class VcsLogContentProvider implements ChangesViewContentProvider { @Override public void disposeContent() { - dispose(myProjectLog.getLogManager()); - } - - private void closeLogTabs(@NotNull VcsLogManager logManager) { - ToolWindow toolWindow = ToolWindowManager.getInstance(myProject).getToolWindow(ToolWindowId.VCS); - - if (toolWindow != null) { - for (String tabName : logManager.getTabNames()) { - if (!TAB_NAME.equals(tabName)) { // main tab is closed by the ChangesViewContentManager - Content content = toolWindow.getContentManager().findContent(tabName); - LOG.assertTrue(content != null, "Could not find content for tab " + tabName); - ContentsUtil.closeContentTab(toolWindow.getContentManager(), content); - } - } - } + disposeLogUi(myProjectLog.getLogManager()); } public static class VcsLogVisibilityPredicate implements NotNullFunction { diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentUtil.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentUtil.java index 53d7511087c4..1324e60300dd 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentUtil.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogContentUtil.java @@ -15,6 +15,7 @@ */ package com.intellij.vcs.log.impl; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.MessageType; import com.intellij.openapi.util.Condition; @@ -28,6 +29,7 @@ import com.intellij.ui.content.ContentManager; import com.intellij.ui.content.TabbedContent; import com.intellij.util.Consumer; import com.intellij.util.ContentUtilEx; +import com.intellij.util.ContentsUtil; import com.intellij.util.containers.ContainerUtil; import com.intellij.vcs.log.VcsLogUi; import com.intellij.vcs.log.ui.AbstractVcsLogUi; @@ -36,12 +38,15 @@ import com.intellij.vcs.log.ui.VcsLogUiImpl; import org.jetbrains.annotations.NotNull; import javax.swing.*; +import java.util.Collection; import java.util.List; /** * Utility methods to operate VCS Log tabs as {@link Content}s of the {@link ContentManager} of the VCS toolwindow. */ public class VcsLogContentUtil { + private static final Logger LOG = Logger.getInstance(VcsLogContentUtil.class); + public static boolean findAndSelectContent(@NotNull Project project, @NotNull Class clazz, @NotNull Condition condition) { @@ -88,7 +93,8 @@ public class VcsLogContentUtil { } else { List contents = ContainerUtil.filter(toolWindow.getContentManager().getContents(), - content -> VcsLogContentProvider.TAB_NAME.equals(content.getUserData(Content.TAB_GROUP_NAME_KEY))); + content -> VcsLogContentProvider.TAB_NAME + .equals(content.getUserData(Content.TAB_GROUP_NAME_KEY))); return String.valueOf(contents.size() + 1); } } @@ -145,4 +151,18 @@ public class VcsLogContentUtil { logUi.invokeOnChange(openLogAndRun); } + + public static void closeLogTabs(@NotNull Project project, @NotNull Collection tabs) { + ToolWindow toolWindow = ToolWindowManager.getInstance(project).getToolWindow(ToolWindowId.VCS); + + if (toolWindow != null) { + for (String tabName : tabs) { + Content content = toolWindow.getContentManager().findContent(tabName); + LOG.assertTrue(content != null, "Could not find content for tab " + tabName); + if (content.isCloseable()) { + ContentsUtil.closeContentTab(toolWindow.getContentManager(), content); + } + } + } + } }