diff: allow to disable "F7 goes to next file" behaviour

This commit is contained in:
Aleksey Pivovarov
2015-03-02 18:32:28 +03:00
parent 46aad3d74f
commit 8ace098ebb
4 changed files with 36 additions and 12 deletions
@@ -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<DiffTool> myAvailableTools;
@NotNull private final LinkedList<DiffTool> 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<DiffTool> getToolOrderFromSettings(@NotNull List<DiffTool> availableTools) {
DiffSettingsHolder.DiffSettings settings = DiffSettingsHolder.getInstance().getSettings(getContextUserData(DiffUserDataKeysEx.PLACE));
List<DiffTool> result = new ArrayList<DiffTool>();
List<String> savedOrder = settings.getDiffToolsOrder();
List<String> savedOrder = myDiffSettings.getDiffToolsOrder();
for (final String clazz : savedOrder) {
DiffTool tool = ContainerUtil.find(availableTools, new Condition<DiffTool>() {
@@ -339,13 +342,11 @@ public abstract class DiffRequestProcessor implements Disposable {
}
protected void updateToolOrderSettings(@NotNull List<DiffTool> toolOrder) {
DiffSettingsHolder.DiffSettings settings = DiffSettingsHolder.getInstance().getSettings(getContextUserData(DiffUserDataKeysEx.PLACE));
List<String> savedOrder = new ArrayList<String>();
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);
@@ -39,6 +39,7 @@ public class DiffSettingsHolder implements PersistentStateComponent<DiffSettings
public static final Key<DiffSettings> 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<DiffSettings
PLACE_SETTINGS.DIFF_TOOLS_ORDER = order;
}
public boolean isGoToNextFileOnNextDifference() {
return SHARED_SETTINGS.GO_TO_NEXT_FILE_ON_NEXT_DIFFERENCE;
}
public void setGoToNextFileOnNextDifference(boolean value) {
SHARED_SETTINGS.GO_TO_NEXT_FILE_ON_NEXT_DIFFERENCE = value;
}
//
// Impl
//
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.diff.settings.DiffSettingsPanel">
<grid id="27dc6" binding="myPane" layout-manager="GridLayoutManager" row-count="3" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<grid id="27dc6" binding="myPane" layout-manager="GridLayoutManager" row-count="4" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<xy x="20" y="20" width="500" height="400"/>
@@ -10,7 +10,7 @@
<children>
<vspacer id="925fa">
<constraints>
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
<grid row="3" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
</constraints>
</vspacer>
<component id="ad85b" class="com.intellij.ui.TitledSeparator">
@@ -35,6 +35,14 @@
</constraints>
<properties/>
</component>
<component id="cf884" class="javax.swing.JCheckBox" binding="myGoToNextFileOnNextDifferenceCheckbox">
<constraints>
<grid row="2" column="0" row-span="1" col-span="2" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<text value="Go to the next file after reaching last change"/>
</properties>
</component>
</children>
</grid>
</form>
@@ -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() {