mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
close corresponding tabs when untoggling the preview button
annotations fix action usages move out ui logic from MainFrame GitOrigin-RevId: 130986c6433d89b293b591dfa382e1176361efc2
This commit is contained in:
committed by
intellij-monorepo-bot
parent
7da6b9e82a
commit
212c83cdd8
@@ -31,9 +31,6 @@ class DiffRequestProcessorEditor(
|
||||
private val processor: DiffRequestProcessor
|
||||
) : FileEditorBase() {
|
||||
init {
|
||||
Disposer.register(this, Disposable {
|
||||
Disposer.dispose(processor)
|
||||
})
|
||||
Disposer.register(processor, Disposable {
|
||||
propertyChangeSupport.firePropertyChange(FileEditor.PROP_VALID, true, false)
|
||||
})
|
||||
|
||||
@@ -24,5 +24,5 @@ class GraphViewEditorProvider : FileEditorProvider, DumbAware {
|
||||
|
||||
override fun getEditorTypeId(): String = "GraphViewEditor"
|
||||
override fun getPolicy(): FileEditorPolicy =
|
||||
FileEditorPolicy.HIDE_DEFAULT_EDITOR
|
||||
FileEditorPolicy.PLACE_BEFORE_DEFAULT_EDITOR
|
||||
}
|
||||
@@ -10,7 +10,7 @@ class GraphViewVirtualFile(val toolbarsAndTable: JComponent, val getTabNameFunc:
|
||||
: LightVirtualFile(getTabNameFunc(), GraphViewFileType.INSTANCE, "") {
|
||||
companion object {
|
||||
@JvmField
|
||||
val TabContent: Key<Content> = Key("TabContent")
|
||||
val TabContentId: Key<String> = Key("TabContentId")
|
||||
@JvmField
|
||||
val GraphVirtualFile: Key<GraphViewVirtualFile> = Key("GraphVirtualFile")
|
||||
}
|
||||
|
||||
@@ -491,6 +491,9 @@ public class ChangesViewManager implements ChangesViewEx,
|
||||
private void setDiffPreviewVisible(boolean isDiffPreviewVisible) {
|
||||
if (Registry.is("show.diff.preview.as.editor.tab") && !isDiffPreviewVisible)
|
||||
FileEditorManager.getInstance(myProject).closeFile(myPreviewDiffVirtualFile);
|
||||
else {
|
||||
FileEditorManager.getInstance(myProject).openFile(new PreviewDiffVirtualFile(myDiffPreviewProvider), false, true);
|
||||
}
|
||||
|
||||
myDiffPreviewSplitter.setDetailsOn(isDiffPreviewVisible);
|
||||
setCommitSplitOrientation();
|
||||
|
||||
@@ -182,7 +182,6 @@
|
||||
<group id="Vcs.Log.ChangesBrowser.Toolbar">
|
||||
<reference id="Vcs.RepositoryChangesBrowserToolbar"/>
|
||||
<reference id="Vcs.Log.ShowOnlyAffectedChanges"/>
|
||||
<reference id="Vcs.Log.ShowDiffPreviewInEditor"/>
|
||||
<separator/>
|
||||
<reference id="ChangesView.GroupBy"/>
|
||||
<separator/>
|
||||
@@ -214,7 +213,6 @@
|
||||
<reference id="Vcs.Log.Refresh"/>
|
||||
<reference id="Diff.ShowDiff"/>
|
||||
<reference id="Vcs.Log.ShowAllAffected"/>
|
||||
<reference id="Vcs.Log.ShowDiffPreviewInEditor"/>
|
||||
<separator/>
|
||||
<reference id="Vcs.Log.ShowOtherBranches"/>
|
||||
<reference id="Vcs.FileHistory.PresentationSettings"/>
|
||||
@@ -242,7 +240,6 @@
|
||||
<reference ref="Vcs.Log.ShowDetailsAction"/>
|
||||
<reference ref="Vcs.Log.ShowChangesFromParents"/>
|
||||
<reference ref="Vcs.Log.ShowDiffPreview"/>
|
||||
<reference ref="Vcs.Log.ShowDiffPreviewInEditor"/>
|
||||
<separator/>
|
||||
<reference ref="Vcs.Log.Refresh"/>
|
||||
<reference ref="Vcs.Log.OpenAnotherTab"/>
|
||||
|
||||
@@ -211,6 +211,11 @@ public class FileHistoryPanel extends JPanel implements DataProvider, Disposable
|
||||
|
||||
void showDiffPreview(boolean state) {
|
||||
if (Registry.is("show.diff.preview.as.editor.tab")) {
|
||||
if (!state) {
|
||||
FileEditorManager.getInstance(myLogData.getProject()).closeFile(new PreviewDiffVirtualFile(myDiffPreviewProvider));
|
||||
} else {
|
||||
FileEditorManager.getInstance(myLogData.getProject()).openFile(new PreviewDiffVirtualFile(myDiffPreviewProvider), false, true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -223,8 +228,8 @@ public class FileHistoryPanel extends JPanel implements DataProvider, Disposable
|
||||
FileHistoryDiffPreview diffPreview = new FileHistoryDiffPreview(myLogData.getProject(), () -> myUi.getSelectedChange(),
|
||||
isInEditor, this);
|
||||
ListSelectionListener selectionListener = e -> {
|
||||
if (!myProperties.get(CommonUiProperties.SHOW_DIFF_PREVIEW))
|
||||
return;int[] selection = myGraphTable.getSelectedRows();
|
||||
if (!myProperties.get(CommonUiProperties.SHOW_DIFF_PREVIEW)){
|
||||
return;}int[] selection = myGraphTable.getSelectedRows();
|
||||
ApplicationManager.getApplication().invokeLater(() -> diffPreview.updatePreview(diffPreview.getComponent().isShowing()),
|
||||
o -> !Arrays.equals(selection, myGraphTable.getSelectedRows()));
|
||||
};
|
||||
|
||||
@@ -5,14 +5,15 @@ import com.intellij.diff.editor.GraphViewVirtualFile;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManagerEvent;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManagerListener;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.vcs.changes.ui.ChangesViewContentI;
|
||||
import com.intellij.openapi.vcs.changes.ui.ChangesViewContentManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.wm.ToolWindow;
|
||||
import com.intellij.openapi.wm.ToolWindowManager;
|
||||
import com.intellij.openapi.wm.ex.ToolWindowManagerEx;
|
||||
import com.intellij.openapi.wm.ex.ToolWindowManagerListener;
|
||||
import com.intellij.ui.content.Content;
|
||||
@@ -23,12 +24,15 @@ import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.messages.MessageBusConnection;
|
||||
import com.intellij.vcs.log.impl.PostponableLogRefresher.VcsLogWindow;
|
||||
import com.intellij.vcs.log.statistics.VcsLogUsageTriggerCollector;
|
||||
import com.intellij.vcs.log.ui.AbstractVcsLogUi;
|
||||
import com.intellij.vcs.log.ui.VcsLogPanel;
|
||||
import com.intellij.vcs.log.ui.frame.MainFrame;
|
||||
import com.intellij.vcs.log.visible.VisiblePackRefresher;
|
||||
import one.util.streamex.StreamEx;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.util.Arrays;
|
||||
@@ -89,6 +93,32 @@ public class VcsLogTabsWatcher implements Disposable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void processVirtualFile(VirtualFile file) {
|
||||
if (file instanceof GraphViewVirtualFile) {
|
||||
ToolWindow window = ToolWindowManager.getInstance(myProject).getToolWindow(ChangesViewContentManager.TOOLWINDOW_ID);
|
||||
|
||||
if (window != null) {
|
||||
for (Content content : window.getContentManager().getContents()) {
|
||||
JComponent component = content.getComponent();
|
||||
String logId = file.getUserData(GraphViewVirtualFile.TabContentId);
|
||||
|
||||
if (component instanceof VcsLogPanel) {
|
||||
AbstractVcsLogUi ui = ((VcsLogPanel)component).getUi();
|
||||
if (ui.getId().equals(logId)) {
|
||||
content.putUserData(GraphViewVirtualFile.GraphVirtualFile, (GraphViewVirtualFile)file);
|
||||
}
|
||||
}
|
||||
else if (VcsLogContentProvider.TAB_NAME.equals(content.getDisplayName()) && VcsLogProjectTabsProperties.MAIN_LOG_ID.equals(logId)) {
|
||||
content.putUserData(GraphViewVirtualFile.GraphVirtualFile, (GraphViewVirtualFile)file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void installLogEditorListeners(Project project) {
|
||||
if (!Registry.is("show.log.as.editor.tab")) {
|
||||
return;
|
||||
@@ -98,20 +128,25 @@ public class VcsLogTabsWatcher implements Disposable {
|
||||
if (toolWindow != null) {
|
||||
toolWindow.getContentManager().addContentManagerListener(myLogEditorListener);
|
||||
|
||||
ChangesViewContentI changesViewManager = ChangesViewContentManager.getInstance(project);
|
||||
|
||||
project.getMessageBus().connect(project)
|
||||
.subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, new FileEditorManagerListener() {
|
||||
@Override
|
||||
public void selectionChanged(@NotNull FileEditorManagerEvent e) {
|
||||
VirtualFile file = e.getNewFile();
|
||||
if (file instanceof GraphViewVirtualFile) {
|
||||
Content data = file.getUserData(GraphViewVirtualFile.TabContent);
|
||||
String data = file.getUserData(GraphViewVirtualFile.TabContentId);
|
||||
if (data != null) {
|
||||
changesViewManager.setSelectedContent(data);
|
||||
VcsLogContentUtil.findAndSelect(project, AbstractVcsLogUi.class, ui -> {
|
||||
return ui.getId() == data;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
|
||||
processVirtualFile(file);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,12 +27,9 @@ import com.intellij.openapi.vcs.changes.DiffPreviewProvider;
|
||||
import com.intellij.openapi.vcs.changes.PreviewDiffVirtualFile;
|
||||
import com.intellij.openapi.vcs.changes.ui.ChangesViewContentManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.wm.ToolWindow;
|
||||
import com.intellij.openapi.wm.ToolWindowManager;
|
||||
import com.intellij.ui.*;
|
||||
import com.intellij.ui.components.JBLoadingPanel;
|
||||
import com.intellij.ui.components.panels.Wrapper;
|
||||
import com.intellij.ui.content.Content;
|
||||
import com.intellij.util.ContentUtilEx;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
@@ -48,7 +45,10 @@ import com.intellij.vcs.log.data.VcsLogData;
|
||||
import com.intellij.vcs.log.impl.CommonUiProperties;
|
||||
import com.intellij.vcs.log.impl.MainVcsLogUiProperties;
|
||||
import com.intellij.vcs.log.impl.VcsLogContentProvider;
|
||||
import com.intellij.vcs.log.ui.*;
|
||||
import com.intellij.vcs.log.ui.AbstractVcsLogUi;
|
||||
import com.intellij.vcs.log.ui.VcsLogActionPlaces;
|
||||
import com.intellij.vcs.log.ui.VcsLogInternalDataKeys;
|
||||
import com.intellij.vcs.log.ui.VcsLogUiImpl;
|
||||
import com.intellij.vcs.log.ui.actions.IntelliSortChooserPopupAction;
|
||||
import com.intellij.vcs.log.ui.actions.ShowPreviewEditorAction;
|
||||
import com.intellij.vcs.log.ui.filter.VcsLogFilterUiEx;
|
||||
@@ -164,7 +164,7 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
|
||||
showDetails(myUiProperties.get(CommonUiProperties.SHOW_DETAILS));
|
||||
|
||||
myChangesBrowserSplitter = new OnePixelSplitter(false, CHANGES_SPLITTER_PROPORTION, 0.7f);
|
||||
installGraphView(toolbarsAndTable);
|
||||
installGraphView(toolbarsAndTable, logUi);
|
||||
myChangesBrowserSplitter.setSecondComponent(myDetailsSplitter);
|
||||
|
||||
myPreviewDiffSplitter = new OnePixelSplitter(false, DIFF_SPLITTER_PROPORTION, 0.7f);
|
||||
@@ -220,12 +220,12 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
|
||||
}, this);
|
||||
}
|
||||
|
||||
private void installGraphView(JComponent toolbarsAndTable) {
|
||||
private void installGraphView(JComponent toolbarsAndTable, AbstractVcsLogUi logUi) {
|
||||
if (Registry.is("show.log.as.editor.tab")) {
|
||||
DataManager.registerDataProvider(toolbarsAndTable, this);
|
||||
|
||||
ApplicationManager.getApplication().invokeLater(() -> {
|
||||
VirtualFile file = getOrCreateGraphViewFile(toolbarsAndTable);
|
||||
VirtualFile file = getOrCreateGraphViewFile(toolbarsAndTable, logUi);
|
||||
openLogEditorTab(file, myLogData.getProject());
|
||||
}, ModalityState.NON_MODAL);
|
||||
}
|
||||
@@ -234,7 +234,7 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
|
||||
}
|
||||
}
|
||||
|
||||
public static void openLogEditorTab(VirtualFile file, Project project) {
|
||||
public static void openLogEditorTab(@NotNull VirtualFile file, @NotNull Project project) {
|
||||
FileEditor[] editors = FileEditorManager.getInstance(project).openFile(file, true);
|
||||
assert editors.length == 1 : "opened multiple log editors for " + file;
|
||||
FileEditor editor = editors[0];
|
||||
@@ -248,43 +248,24 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
|
||||
editorWindow.setFilePinned(file, true);
|
||||
}
|
||||
|
||||
public VirtualFile getOrCreateGraphViewFile(JComponent logViewComponent) {
|
||||
public VirtualFile getOrCreateGraphViewFile(JComponent logViewComponent, AbstractVcsLogUi logUi) {
|
||||
ApplicationManager.getApplication().assertIsDispatchThread();
|
||||
|
||||
if (myGraphViewFile == null || !myGraphViewFile.isValid()) {
|
||||
String name = getTabName();
|
||||
myGraphViewFile = new GraphViewVirtualFile(logViewComponent, () -> {
|
||||
return getTabName();
|
||||
});
|
||||
|
||||
Project project = myLogData.getProject();
|
||||
|
||||
ToolWindow window = ToolWindowManager.getInstance(project).getToolWindow(ChangesViewContentManager.TOOLWINDOW_ID);
|
||||
if (window != null) {
|
||||
for (Content content : window.getContentManager().getContents()) {
|
||||
JComponent component = content.getComponent();
|
||||
if (component instanceof VcsLogPanel) {
|
||||
if (((VcsLogPanel)component).getUi().getMainComponent().equals(this.getMainComponent())) {
|
||||
myGraphViewFile.putUserData(GraphViewVirtualFile.TabContent, content);
|
||||
content.putUserData(GraphViewVirtualFile.GraphVirtualFile, myGraphViewFile);
|
||||
}
|
||||
}
|
||||
else if (name.equals(VcsLogContentProvider.TAB_NAME) && name.equals(content.getDisplayName())) {
|
||||
myGraphViewFile.putUserData(GraphViewVirtualFile.TabContent, content);
|
||||
content.putUserData(GraphViewVirtualFile.GraphVirtualFile, myGraphViewFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
myGraphViewFile.putUserData(GraphViewVirtualFile.TabContentId, logUi.getId());
|
||||
}
|
||||
|
||||
|
||||
Disposer.register(this, () -> myGraphViewFile = null);
|
||||
|
||||
return myGraphViewFile;
|
||||
}
|
||||
|
||||
//todo move it out from MainFrame
|
||||
private String getTabName() {
|
||||
|
||||
VcsLogContentProvider instance = VcsLogContentProvider.getInstance(myLogData.getProject());
|
||||
if (instance != null) {
|
||||
VcsLogUiImpl ui = instance.getUi();
|
||||
@@ -430,6 +411,16 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
|
||||
public void showDiffPreview(boolean state) {
|
||||
myPreviewDiff.updatePreview(state);
|
||||
if (Registry.is("show.diff.preview.as.editor.tab")) {
|
||||
if (myDiffPreviewProvider != null) {
|
||||
if (!state) {
|
||||
//'equals' for such files is overridden and means the equality of its owner
|
||||
FileEditorManager.getInstance(myLogData.getProject()).closeFile(new PreviewDiffVirtualFile(myDiffPreviewProvider));
|
||||
}
|
||||
else {
|
||||
FileEditorManager.getInstance(myLogData.getProject()).openFile(new PreviewDiffVirtualFile(myDiffPreviewProvider), false, true);
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user