mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-06 06:21:16 +07:00
diff: allow to disable "F7 goes to next file" behaviour
This commit is contained in:
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user