[vcs-log] move code that closes tabs to VcsLogContentUtil and close all closable content

This commit is contained in:
Julia Beliaeva
2017-08-21 02:22:17 +03:00
parent 2217d8c92c
commit ce55ca024f
2 changed files with 32 additions and 24 deletions
@@ -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<Project, Boolean> {
@@ -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 <U extends AbstractVcsLogUi> boolean findAndSelectContent(@NotNull Project project,
@NotNull Class<U> clazz,
@NotNull Condition<U> condition) {
@@ -88,7 +93,8 @@ public class VcsLogContentUtil {
}
else {
List<Content> 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<String> 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);
}
}
}
}
}