From 1ffac15ddf23f01c3e414332937e4c7a7fa7b061 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Mon, 5 Jun 2017 12:17:29 +0300 Subject: [PATCH] vcs: fix "Preview Diff" state in Local Changes * remove unnecessary inner state, that could differ from the real one --- .../vcs/changes/ChangesViewManager.java | 11 ++++--- .../actions/ShowDiffPreviewAction.java | 13 -------- .../shelf/ShelvedChangesViewManager.java | 30 +++++++++++-------- 3 files changed, 24 insertions(+), 30 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.java index a43c2189bb97..103acc7c0821 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.java @@ -73,7 +73,6 @@ import java.awt.event.KeyEvent; import java.util.Collection; import java.util.List; -import static com.intellij.util.ObjectUtils.assertNotNull; import static java.util.stream.Collectors.toList; @State( @@ -83,7 +82,7 @@ import static java.util.stream.Collectors.toList; public class ChangesViewManager implements ChangesViewI, ProjectComponent, PersistentStateComponent { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.vcs.changes.ChangesViewManager"); - public static final String CHANGES_VIEW_PREVIEW_SPLITTER_PROPORTION = "ChangesViewManager.DETAILS_SPLITTER_PROPORTION"; + private static final String CHANGES_VIEW_PREVIEW_SPLITTER_PROPORTION = "ChangesViewManager.DETAILS_SPLITTER_PROPORTION"; @NotNull private final ChangesListView myView; private JPanel myProgressLabel; @@ -478,10 +477,14 @@ public class ChangesViewManager implements ChangesViewI, ProjectComponent, Persi private class ToggleDetailsAction extends ShowDiffPreviewAction { @Override public void setSelected(AnActionEvent e, boolean state) { - super.setSelected(e, state); - assertNotNull(mySplitterComponent).setDetailsOn(state); + mySplitterComponent.setDetailsOn(state); VcsConfiguration.getInstance(myProject).LOCAL_CHANGES_DETAILS_PREVIEW_SHOWN = state; } + + @Override + public boolean isSelected(AnActionEvent e) { + return VcsConfiguration.getInstance(myProject).LOCAL_CHANGES_DETAILS_PREVIEW_SHOWN; + } } private class MyChangeProcessor extends ChangeViewDiffRequestProcessor { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/ShowDiffPreviewAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/ShowDiffPreviewAction.java index 068a97b8ea16..56528d7d599b 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/ShowDiffPreviewAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/ShowDiffPreviewAction.java @@ -16,24 +16,11 @@ package com.intellij.openapi.vcs.changes.actions; import com.intellij.icons.AllIcons; -import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.ToggleAction; import com.intellij.openapi.project.DumbAware; public abstract class ShowDiffPreviewAction extends ToggleAction implements DumbAware { - private boolean myState; - public ShowDiffPreviewAction() { super("Preview Diff", null, AllIcons.Actions.DiffPreview); } - - @Override - public boolean isSelected(AnActionEvent e) { - return myState; - } - - @Override - public void setSelected(AnActionEvent e, boolean state) { - myState = state; - } } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelvedChangesViewManager.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelvedChangesViewManager.java index a811a1a7c1ab..76c6bc03fd89 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelvedChangesViewManager.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelvedChangesViewManager.java @@ -108,6 +108,7 @@ public class ShelvedChangesViewManager implements ProjectComponent { private static final Logger LOG = Logger.getInstance(ShelvedChangesViewManager.class); @NonNls static final String SHELF_CONTEXT_MENU = "Vcs.Shelf.ContextMenu"; + private static final String SHELVE_PREVIEW_SPLITTER_PROPORTION = "ShelvedChangesViewManager.DETAILS_SPLITTER_PROPORTION"; private final ChangesViewContentManager myContentManager; private final ShelveChangesManager myShelveChangesManager; @@ -247,21 +248,11 @@ public class ShelvedChangesViewManager implements ProjectComponent { DefaultActionGroup actionGroup = new DefaultActionGroup(); actionGroup.addAll((ActionGroup)ActionManager.getInstance().getAction("ShelvedChangesToolbar")); - ShowDiffPreviewAction diffPreviewAction = new ShowDiffPreviewAction() { - @Override - public void setSelected(AnActionEvent e, boolean state) { - super.setSelected(e, state); - assertNotNull(mySplitterComponent).setDetailsOn(state); - VcsConfiguration.getInstance(myProject).SHELVE_DETAILS_PREVIEW_SHOWN = state; - } - }; - actionGroup.add(diffPreviewAction, new Constraints(AFTER, "ShelvedChanges.ShowHideDeleted")); + actionGroup.add(new MyToggleDetailsAction(), new Constraints(AFTER, "ShelvedChanges.ShowHideDeleted")); MyShelvedPreviewProcessor changeProcessor = new MyShelvedPreviewProcessor(myProject); - mySplitterComponent = - new PreviewDiffSplitterComponent(pane, changeProcessor, "ShelvedChangesViewManager.DETAILS_SPLITTER_PROPORTION", - VcsConfiguration.getInstance(myProject).SHELVE_DETAILS_PREVIEW_SHOWN); - diffPreviewAction.setSelected(null, mySplitterComponent.isDetailsOn()); + mySplitterComponent = new PreviewDiffSplitterComponent(pane, changeProcessor, SHELVE_PREVIEW_SPLITTER_PROPORTION, + VcsConfiguration.getInstance(myProject).SHELVE_DETAILS_PREVIEW_SHOWN); ActionToolbar toolbar = ActionManager.getInstance().createActionToolbar("ShelvedChanges", actionGroup, false); JPanel rootPanel = new JPanel(new BorderLayout()); @@ -742,6 +733,19 @@ public class ShelvedChangesViewManager implements ProjectComponent { return new DnDImage(image, new Point(-image.getWidth(null), -image.getHeight(null))); } + private class MyToggleDetailsAction extends ShowDiffPreviewAction { + @Override + public void setSelected(AnActionEvent e, boolean state) { + mySplitterComponent.setDetailsOn(state); + VcsConfiguration.getInstance(myProject).SHELVE_DETAILS_PREVIEW_SHOWN = state; + } + + @Override + public boolean isSelected(AnActionEvent e) { + return VcsConfiguration.getInstance(myProject).SHELVE_DETAILS_PREVIEW_SHOWN; + } + } + private class MyShelvedPreviewProcessor extends CacheDiffRequestProcessor implements DiffPreviewUpdateProcessor { @NotNull private final DiffShelvedChangesActionProvider.PatchesPreloader myPreloader;