diff --git a/platform/diff-impl/src/com/intellij/diff/impl/DiffRequestProcessor.java b/platform/diff-impl/src/com/intellij/diff/impl/DiffRequestProcessor.java index ac9210e30598..bd2b97ae7c3f 100644 --- a/platform/diff-impl/src/com/intellij/diff/impl/DiffRequestProcessor.java +++ b/platform/diff-impl/src/com/intellij/diff/impl/DiffRequestProcessor.java @@ -24,6 +24,7 @@ import com.intellij.diff.DiffTool; import com.intellij.diff.FrameDiffTool; import com.intellij.diff.FrameDiffTool.DiffViewer; import com.intellij.diff.actions.impl.*; +import com.intellij.diff.impl.DiffSettingsHolder.DiffSettings; import com.intellij.diff.requests.DiffRequest; import com.intellij.diff.requests.ErrorDiffRequest; import com.intellij.diff.requests.MessageDiffRequest; @@ -78,6 +79,8 @@ public abstract class DiffRequestProcessor implements Disposable { @NotNull private final List myAvailableTools; @NotNull private final LinkedList myToolOrder; + @NotNull private final DiffSettings myDiffSettings; + @NotNull private final OpenInEditorAction myOpenInEditorAction; @Nullable private DefaultActionGroup myPopupActionGroup; @@ -104,6 +107,8 @@ public abstract class DiffRequestProcessor implements Disposable { myContext = new MyDiffContext(context); myActiveRequest = new NoDiffRequest(); + myDiffSettings = DiffSettingsHolder.getInstance().getSettings(getContextUserData(DiffUserDataKeysEx.PLACE)); + // UI myPanel = new JPanel(new BorderLayout()); @@ -316,10 +321,8 @@ public abstract class DiffRequestProcessor implements Disposable { @NotNull protected List getToolOrderFromSettings(@NotNull List availableTools) { - DiffSettingsHolder.DiffSettings settings = DiffSettingsHolder.getInstance().getSettings(getContextUserData(DiffUserDataKeysEx.PLACE)); - List result = new ArrayList(); - List savedOrder = settings.getDiffToolsOrder(); + List savedOrder = myDiffSettings.getDiffToolsOrder(); for (final String clazz : savedOrder) { DiffTool tool = ContainerUtil.find(availableTools, new Condition() { @@ -339,13 +342,11 @@ public abstract class DiffRequestProcessor implements Disposable { } protected void updateToolOrderSettings(@NotNull List toolOrder) { - DiffSettingsHolder.DiffSettings settings = DiffSettingsHolder.getInstance().getSettings(getContextUserData(DiffUserDataKeysEx.PLACE)); - List savedOrder = new ArrayList(); for (DiffTool tool : toolOrder) { savedOrder.add(tool.getClass().getCanonicalName()); } - settings.setDiffToolsOrder(savedOrder); + myDiffSettings.setDiffToolsOrder(savedOrder); } @Override @@ -617,7 +618,7 @@ public abstract class DiffRequestProcessor implements Disposable { return; } - if (isNavigationEnabled() && hasNextChange()) { + if (isNavigationEnabled() && hasNextChange() && myDiffSettings.isGoToNextFileOnNextDifference()) { e.getPresentation().setEnabled(true); return; } @@ -634,7 +635,7 @@ public abstract class DiffRequestProcessor implements Disposable { return; } - if (!isNavigationEnabled() || !hasNextChange()) return; + if (!isNavigationEnabled() || !hasNextChange() || !myDiffSettings.isGoToNextFileOnNextDifference()) return; if (myIterationState != IterationState.NEXT) { // TODO: provide "change" word in chain UserData - for tests/etc @@ -667,7 +668,7 @@ public abstract class DiffRequestProcessor implements Disposable { return; } - if (isNavigationEnabled() && hasPrevChange()) { + if (isNavigationEnabled() && hasPrevChange() && myDiffSettings.isGoToNextFileOnNextDifference()) { e.getPresentation().setEnabled(true); return; } @@ -684,7 +685,7 @@ public abstract class DiffRequestProcessor implements Disposable { return; } - if (!isNavigationEnabled() || !hasPrevChange()) return; + if (!isNavigationEnabled() || !hasPrevChange() || !myDiffSettings.isGoToNextFileOnNextDifference()) return; if (myIterationState != IterationState.PREV) { notifyMessage(e.getData(DiffDataKeys.CURRENT_EDITOR), "Press again to go to the previous file", false); diff --git a/platform/diff-impl/src/com/intellij/diff/impl/DiffSettingsHolder.java b/platform/diff-impl/src/com/intellij/diff/impl/DiffSettingsHolder.java index bcf1117e05c3..3cd3e64aec92 100644 --- a/platform/diff-impl/src/com/intellij/diff/impl/DiffSettingsHolder.java +++ b/platform/diff-impl/src/com/intellij/diff/impl/DiffSettingsHolder.java @@ -39,6 +39,7 @@ public class DiffSettingsHolder implements PersistentStateComponent KEY = Key.create("DiffSettings"); private static class SharedSettings { + public boolean GO_TO_NEXT_FILE_ON_NEXT_DIFFERENCE = true; } private static class PlaceSettings { @@ -67,6 +68,14 @@ public class DiffSettingsHolder implements PersistentStateComponent
- + @@ -10,7 +10,7 @@ - + @@ -35,6 +35,14 @@ + + + + + + + + diff --git a/platform/diff-impl/src/com/intellij/diff/settings/DiffSettingsPanel.java b/platform/diff-impl/src/com/intellij/diff/settings/DiffSettingsPanel.java index 1108503cfcb7..4257af2a09d9 100644 --- a/platform/diff-impl/src/com/intellij/diff/settings/DiffSettingsPanel.java +++ b/platform/diff-impl/src/com/intellij/diff/settings/DiffSettingsPanel.java @@ -15,6 +15,7 @@ */ package com.intellij.diff.settings; +import com.intellij.diff.impl.DiffSettingsHolder.DiffSettings; import com.intellij.diff.tools.util.base.TextDiffSettingsHolder; import com.intellij.diff.tools.util.base.TextDiffSettingsHolder.TextDiffSettings; import com.intellij.util.ui.UIUtil; @@ -27,8 +28,10 @@ import java.util.Hashtable; public class DiffSettingsPanel { private JPanel myPane; private ContextRangePanel myContextRangeComponent; + private JCheckBox myGoToNextFileOnNextDifferenceCheckbox; @NotNull private TextDiffSettings myTextSettings = TextDiffSettings.getSettings(); + @NotNull private DiffSettings myDiffSettings = DiffSettings.getSettings(); @NotNull public JComponent getPanel() { @@ -37,15 +40,18 @@ public class DiffSettingsPanel { public boolean isModified() { if (myContextRangeComponent.isModified()) return true; + if (myGoToNextFileOnNextDifferenceCheckbox.isSelected() != myDiffSettings.isGoToNextFileOnNextDifference()) return true; return false; } public void apply() { myContextRangeComponent.apply(); + myDiffSettings.setGoToNextFileOnNextDifference(myGoToNextFileOnNextDifferenceCheckbox.isSelected()); } public void reset() { myContextRangeComponent.reset(); + myGoToNextFileOnNextDifferenceCheckbox.setSelected(myDiffSettings.isGoToNextFileOnNextDifference()); } private void createUIComponents() {