IDEA-161662 VersionControl toolwindow should not be available for project with no VCS enabled

This commit is contained in:
Dmitry Avdeev
2016-09-26 14:25:18 +03:00
parent c420ec722c
commit 8f6589d311
4 changed files with 25 additions and 10 deletions
@@ -24,6 +24,7 @@ import org.jetbrains.annotations.Nullable;
*/
public interface ChangesViewContentI {
void setUp(ToolWindow toolWindow);
boolean isAvailable();
void addContent(Content content);
void removeContent(final Content content);
void setSelectedContent(final Content content);
@@ -24,8 +24,8 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.vcs.AbstractVcs;
import com.intellij.openapi.vcs.ProjectLevelVcsManager;
import com.intellij.openapi.vcs.VcsDirectoryMapping;
import com.intellij.openapi.vcs.VcsListener;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowId;
@@ -65,6 +65,7 @@ public class ChangesViewContentManager extends AbstractProjectComponent implemen
super(project);
myVcsManager = vcsManager;
myVcsChangeAlarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD, project);
myProject.getMessageBus().connect().subscribe(ProjectLevelVcsManager.VCS_CONFIGURATION_CHANGED, myVcsListener);
}
public void setUp(ToolWindow toolWindow) {
@@ -73,13 +74,9 @@ public class ChangesViewContentManager extends AbstractProjectComponent implemen
myContentManagerListener = new MyContentManagerListener();
contentManager.addContentManagerListener(myContentManagerListener);
myVcsManager.addVcsListener(myVcsListener);
Disposer.register(myProject, new Disposable(){
public void dispose() {
contentManager.removeContentManagerListener(myContentManagerListener);
myVcsManager.removeVcsListener(myVcsListener);
}
});
@@ -146,11 +143,15 @@ public class ChangesViewContentManager extends AbstractProjectComponent implemen
}
private void updateToolWindowAvailability() {
final AbstractVcs[] abstractVcses = myVcsManager.getAllActiveVcss();
ToolWindow toolWindow = ToolWindowManager.getInstance(myProject).getToolWindow(TOOLWINDOW_ID);
toolWindow.setAvailable(abstractVcses.length > 0, null);
toolWindow.setAvailable(isAvailable(), null);
}
public boolean isAvailable() {
final List<VcsDirectoryMapping> mappings = myVcsManager.getDirectoryMappings();
return !mappings.isEmpty() && !mappings.get(0).isDefaultMapping() && mappings.get(0).getVcs() != null;
}
public void projectClosed() {
myVcsChangeAlarm.cancelAllRequests();
}
@@ -216,7 +217,9 @@ public class ChangesViewContentManager extends AbstractProjectComponent implemen
public void run() {
if (myProject.isDisposed()) return;
updateToolWindowAvailability();
updateExtensionTabs();
if (myContentManager != null) {
updateExtensionTabs();
}
}
}, 100, ModalityState.NON_MODAL);
}
@@ -17,6 +17,7 @@ package com.intellij.openapi.vcs.changes.ui;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowFactory;
import org.jetbrains.annotations.NotNull;
@@ -24,9 +25,14 @@ import org.jetbrains.annotations.NotNull;
/**
* @author Dmitry Avdeev
*/
public class ChangesViewToolWindowFactory implements ToolWindowFactory, DumbAware {
public class ChangesViewToolWindowFactory implements ToolWindowFactory, DumbAware, Condition<Project> {
@Override
public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) {
ChangesViewContentManager.getInstance(project).setUp(toolWindow);
}
@Override
public boolean value(Project project) {
return ChangesViewContentManager.getInstance(project).isAvailable();
}
}
@@ -27,6 +27,11 @@ public class DummyChangesViewContentManager implements ChangesViewContentI {
}
@Override
public boolean isAvailable() {
return false;
}
@Override
public void addContent(final Content content) {
}