remove unnecessary GraphVirtualFile data key

restore actions availability for the log in editor

GitOrigin-RevId: d9b1192c42f7d433bf85c13df6ad5ff050f3771b
This commit is contained in:
Kirill.Skrygan
2019-10-14 10:32:59 +00:00
committed by intellij-monorepo-bot
parent a5474b0313
commit b32c45d6c7
4 changed files with 54 additions and 54 deletions
@@ -10,8 +10,7 @@ class GraphViewVirtualFile(val toolbarsAndTable: JComponent, val getTabNameFunc:
companion object {
@JvmField
val TabContentId: Key<String> = Key("TabContentId")
@JvmField
val GraphVirtualFile: Key<GraphViewVirtualFile> = Key("GraphVirtualFile")
}
init {
@@ -45,7 +45,7 @@ public class VcsLogContentUtil {
private static final Logger LOG = Logger.getInstance(VcsLogContentUtil.class);
@Nullable
private static AbstractVcsLogUi getLogUi(@NotNull JComponent c) {
public static AbstractVcsLogUi getLogUi(@NotNull JComponent c) {
VcsLogPanel vcsLogPanel = null;
if (c instanceof VcsLogPanel) {
vcsLogPanel = (VcsLogPanel)c;
@@ -5,7 +5,6 @@ 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;
@@ -13,7 +12,6 @@ import com.intellij.openapi.util.registry.Registry;
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;
@@ -25,14 +23,13 @@ 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.VcsLogUiImpl;
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;
@@ -108,30 +105,6 @@ 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() {
if (!Registry.is("show.log.as.editor.tab")) {
return;
@@ -155,11 +128,6 @@ public class VcsLogTabsWatcher implements Disposable {
}
}
}
@Override
public void fileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
processVirtualFile(file);
}
});
}
}
@@ -300,9 +268,10 @@ public class VcsLogTabsWatcher implements Disposable {
}
private void selectEditorTab(Content content) {
GraphViewVirtualFile file = content.getUserData(GraphViewVirtualFile.GraphVirtualFile);
if (file != null) {
MainFrame.openLogEditorTab(file, myProject);
AbstractVcsLogUi ui = VcsLogContentUtil.getLogUi(content.getComponent());
if (ui instanceof VcsLogUiImpl) {
MainFrame frame = ((VcsLogUiImpl)ui).getMainFrame();
frame.openLogEditorTab();
}
}
@@ -26,10 +26,12 @@ import com.intellij.openapi.vcs.changes.Change;
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.vcs.history.VcsRevisionNumber;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.*;
import com.intellij.ui.components.JBLoadingPanel;
import com.intellij.ui.components.panels.Wrapper;
import com.intellij.ui.navigation.History;
import com.intellij.util.ContentUtilEx;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.JBUI;
@@ -75,6 +77,8 @@ import java.util.List;
import static com.intellij.openapi.vfs.VfsUtilCore.toVirtualFileArray;
import static com.intellij.util.ObjectUtils.notNull;
import static com.intellij.util.containers.ContainerUtil.getFirstItem;
import static com.intellij.vcs.log.VcsLogDataKeys.VCS_LOG;
import static com.intellij.vcs.log.VcsLogDataKeys.VCS_LOG_UI;
public class MainFrame extends JPanel implements DataProvider, Disposable {
private static final String DIFF_SPLITTER_PROPORTION = "vcs.log.diff.splitter.proportion";
@@ -98,9 +102,11 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
@NotNull private final VcsLogCommitDetailsListPanel myDetailsPanel;
@NotNull private final Splitter myDetailsSplitter;
@NotNull private final EditorNotificationPanel myNotificationLabel;
@NotNull private final AbstractVcsLogUi myLogUi;
@Nullable DiffPreviewProvider myDiffPreviewProvider;
@Nullable private GraphViewVirtualFile myGraphViewFile;
@NotNull private final JComponent myToolbarsAndTable;
public MainFrame(@NotNull VcsLogData logData,
@NotNull AbstractVcsLogUi logUi,
@@ -110,6 +116,7 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
myUiProperties = uiProperties;
myFilterUi = filterUi;
myLogUi = logUi;
myGraphTable = new MyVcsLogGraphTable(logUi, logData);
myGraphTable.setCompactReferencesView(myUiProperties.get(MainVcsLogUiProperties.COMPACT_REFERENCES_VIEW));
@@ -154,17 +161,17 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
JComponent toolbars = new JPanel(new BorderLayout());
toolbars.add(myToolbar, BorderLayout.NORTH);
toolbars.add(myNotificationLabel, BorderLayout.CENTER);
JComponent toolbarsAndTable = new JPanel(new BorderLayout());
toolbarsAndTable.add(toolbars, BorderLayout.NORTH);
toolbarsAndTable.add(VcsLogUiUtil.installProgress(VcsLogUiUtil.setupScrolledGraph(myGraphTable, SideBorder.TOP),
myLogData, logUi.getId(), this), BorderLayout.CENTER);
myToolbarsAndTable = new JPanel(new BorderLayout());
myToolbarsAndTable.add(toolbars, BorderLayout.NORTH);
myToolbarsAndTable.add(VcsLogUiUtil.installProgress(VcsLogUiUtil.setupScrolledGraph(myGraphTable, SideBorder.TOP),
myLogData, logUi.getId(), this), BorderLayout.CENTER);
myDetailsSplitter = new OnePixelSplitter(true, DETAILS_SPLITTER_PROPORTION, 0.7f);
myDetailsSplitter.setFirstComponent(changesLoadingPane);
showDetails(myUiProperties.get(CommonUiProperties.SHOW_DETAILS));
myChangesBrowserSplitter = new OnePixelSplitter(false, CHANGES_SPLITTER_PROPORTION, 0.7f);
installGraphView(toolbarsAndTable, logUi);
installGraphView();
myChangesBrowserSplitter.setSecondComponent(myDetailsSplitter);
myPreviewDiffSplitter = new OnePixelSplitter(false, DIFF_SPLITTER_PROPORTION, 0.7f);
@@ -220,22 +227,23 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
}, this);
}
private void installGraphView(JComponent toolbarsAndTable, AbstractVcsLogUi logUi) {
private void installGraphView() {
if (Registry.is("show.log.as.editor.tab")) {
DataManager.registerDataProvider(toolbarsAndTable, this);
DataManager.registerDataProvider(myToolbarsAndTable, this);
ApplicationManager.getApplication().invokeLater(() -> {
VirtualFile file = getOrCreateGraphViewFile(toolbarsAndTable, logUi);
openLogEditorTab(file, myLogData.getProject());
openLogEditorTab();
}, ModalityState.NON_MODAL);
}
else {
myChangesBrowserSplitter.setFirstComponent(toolbarsAndTable);
myChangesBrowserSplitter.setFirstComponent(myToolbarsAndTable);
}
}
public static void openLogEditorTab(@NotNull VirtualFile file, @NotNull Project project) {
FileEditor[] editors = FileEditorManager.getInstance(project).openFile(file, true);
public void openLogEditorTab() {
VirtualFile file = getOrCreateGraphViewFile();
FileEditor[] editors = FileEditorManager.getInstance(myLogData.getProject()).openFile(file, true);
assert editors.length == 1 : "opened multiple log editors for " + file;
FileEditor editor = editors[0];
final JComponent component = editor.getComponent();
@@ -248,15 +256,15 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
editorWindow.setFilePinned(file, true);
}
public VirtualFile getOrCreateGraphViewFile(JComponent logViewComponent, AbstractVcsLogUi logUi) {
private VirtualFile getOrCreateGraphViewFile() {
ApplicationManager.getApplication().assertIsDispatchThread();
if (myGraphViewFile == null || !myGraphViewFile.isValid()) {
myGraphViewFile = new GraphViewVirtualFile(logViewComponent, () -> {
myGraphViewFile = new GraphViewVirtualFile(myToolbarsAndTable, () -> {
return getTabName();
});
myGraphViewFile.putUserData(GraphViewVirtualFile.TabContentId, logUi.getId());
myGraphViewFile.putUserData(GraphViewVirtualFile.TabContentId, myLogUi.getId());
}
Disposer.register(this, () -> myGraphViewFile = null);
@@ -385,6 +393,30 @@ public class MainFrame extends JPanel implements DataProvider, Disposable {
else if (ShowPreviewEditorAction.DATA_KEY.is(dataId)) {
return myDiffPreviewProvider;
}
else if (VCS_LOG.is(dataId)) {
return myLogUi.getVcsLog();
}
else if (VCS_LOG_UI.is(dataId)) {
return myLogUi;
}
else if (VcsDataKeys.VCS_REVISION_NUMBER.is(dataId)) {
List<CommitId> hashes = myLogUi.getVcsLog().getSelectedCommits();
if (hashes.isEmpty()) return null;
return VcsLogUtil.convertToRevisionNumber(notNull(getFirstItem(hashes)).getHash());
}
else if (VcsDataKeys.VCS_REVISION_NUMBERS.is(dataId)) {
List<CommitId> hashes = myLogUi.getVcsLog().getSelectedCommits();
if (hashes.size() > VcsLogUtil.MAX_SELECTED_COMMITS) return null;
return ContainerUtil.map(hashes,
commitId -> VcsLogUtil.convertToRevisionNumber(commitId.getHash())).toArray(new VcsRevisionNumber[0]);
}
else if (PlatformDataKeys.HELP_ID.is(dataId)) {
return myLogUi.getHelpId();
}
else if (History.KEY.is(dataId)) {
return myLogUi.getNavigationHistory();
}
return null;
}