mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[vcs-log] move code that closes tabs to VcsLogContentUtil and close all closable content
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user