[521945] Add a preference to disable jumping the next diff after merge

Bug: 521945
Change-Id: I5ab05bf0c49056b240ff5df63e3a6617b0de234f
Signed-off-by: Philip Langer <planger@eclipsesource.com>
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/ide_ui_messages.properties b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/ide_ui_messages.properties
index 1112ae3..a85574a 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/ide_ui_messages.properties
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/ide_ui_messages.properties
@@ -84,6 +84,7 @@
 ModelResolutionPreferencesPage.resolutionScope.invalid = Invalid resolution scope value.
 
 MergePreferencesPage.preMergeOnConflict = Pre-merge models when a real conflict is detected
+MergePreferencesPage.selectNextUnresolvedDiff = Select next unresolved difference after a merge action
 
 EditorPreferencesPage.colorTab.label = Colors
 EditorPreferencesPage.colorTab.preferenceHyperLink = See <a>''Color and Fonts''</a> preferences for EMF Compare colors.
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/preferences/EMFCompareUIPreferences.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/preferences/EMFCompareUIPreferences.java
index 620cf87..7ef926c 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/preferences/EMFCompareUIPreferences.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/preferences/EMFCompareUIPreferences.java
@@ -76,4 +76,11 @@
 	 */
 	String EDITOR_TREE_HIGHLIGHT_RELATED_CHANGES = EMFCompareIDEUIPlugin.PLUGIN_ID
 			+ ".preference.editor.tree.highlight"; //$NON-NLS-1$
+
+	/**
+	 * Preference indicating whether the next unresolved diff should be selected after a merge action. The
+	 * expected values are <code>true</code> or <code>false</code>.
+	 */
+	String SELECT_NEXT_UNRESOLVED_DIFF = EMFCompareIDEUIPlugin.PLUGIN_ID
+			+ ".preference.selectNextUnresolvedDiff"; //$NON-NLS-1$
 }
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/preferences/EMFCompareUIPreferencesInitializer.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/preferences/EMFCompareUIPreferencesInitializer.java
index 4df8fc8..48c09dd 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/preferences/EMFCompareUIPreferencesInitializer.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/preferences/EMFCompareUIPreferencesInitializer.java
@@ -36,5 +36,6 @@
 		store.setDefault(EMFCompareUIPreferences.EDITOR_TREE_AUTO_EXPAND_LEVEL, 1);
 		store.setDefault(EMFCompareUIPreferences.EDITOR_TREE_AUTO_SELECT_FIRST_CHANGE, true);
 		store.setDefault(EMFCompareUIPreferences.EDITOR_TREE_HIGHLIGHT_RELATED_CHANGES, true);
+		store.setDefault(EMFCompareUIPreferences.SELECT_NEXT_UNRESOLVED_DIFF, true);
 	}
 }
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/preferences/EditorPreferencePage.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/preferences/EditorPreferencePage.java
index ce788fa..7cfe701 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/preferences/EditorPreferencePage.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/preferences/EditorPreferencePage.java
@@ -15,6 +15,7 @@
 import static org.eclipse.emf.compare.ide.ui.internal.preferences.EMFCompareUIPreferences.EDITOR_TREE_AUTO_SELECT_FIRST_CHANGE;
 import static org.eclipse.emf.compare.ide.ui.internal.preferences.EMFCompareUIPreferences.EDITOR_TREE_HIGHLIGHT_RELATED_CHANGES;
 
+import org.eclipse.emf.compare.ide.ui.internal.EMFCompareIDEUIMessages;
 import org.eclipse.emf.compare.ide.ui.internal.EMFCompareIDEUIPlugin;
 import org.eclipse.emf.compare.rcp.ui.internal.mergeviewer.CompareColorImpl;
 import org.eclipse.jface.layout.GridDataFactory;
@@ -66,6 +67,9 @@
 	/** Editor for preference {@link EMFCompareUIPreferences#EDITOR_TREE_HIGHLIGHT_RELATED_CHANGES}. */
 	protected BooleanFieldEditor treeHighlightRelatedChanges;
 
+	/** Editor for preference {@link EMFCompareUIPreferences#SELECT_NEXT_UNRESOLVED_DIFF}. */
+	private BooleanFieldEditor selectNextUnresolvedDiff;
+
 	public EditorPreferencePage() {
 		super(FieldEditorPreferencePage.GRID);
 	}
@@ -165,10 +169,12 @@
 		createAutoExpandTreeLevel(getTreeTab());
 		createAutoSelectFirstChange(getTreeTab());
 		createHighlightRelatedChanges(getTreeTab());
+		createSelectNextUnresolvedDiff(getTreeTab());
 
 		GridLayoutFactory.swtDefaults().numColumns(2).applyTo(getTreeTab());
 		treeAutoSelectFirstChange.fillIntoGrid(getTreeTab(), 2);
 		treeHighlightRelatedChanges.fillIntoGrid(getTreeTab(), 2);
+		selectNextUnresolvedDiff.fillIntoGrid(getTreeTab(), 2);
 	}
 
 	/**
@@ -234,4 +240,20 @@
 		addField(treeHighlightRelatedChanges);
 		return treeHighlightRelatedChanges;
 	}
+
+	/**
+	 * Creates an editor for the {@link EMFCompareUIPreferences#EDITOR_TREE_HIGHLIGHT_RELATED_CHANGES}
+	 * preference.
+	 * 
+	 * @param parent
+	 *            editor parent
+	 * @return editor
+	 */
+	protected BooleanFieldEditor createSelectNextUnresolvedDiff(Composite parent) {
+		selectNextUnresolvedDiff = new BooleanFieldEditor(EMFCompareUIPreferences.SELECT_NEXT_UNRESOLVED_DIFF,
+				EMFCompareIDEUIMessages.getString("MergePreferencesPage.selectNextUnresolvedDiff"), //$NON-NLS-1$
+				BooleanFieldEditor.DEFAULT, parent);
+		addField(selectNextUnresolvedDiff);
+		return selectNextUnresolvedDiff;
+	}
 }
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/MergeAction.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/MergeAction.java
index 9b1c7ac..67fffa8 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/MergeAction.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/MergeAction.java
@@ -32,6 +32,7 @@
 import org.eclipse.emf.compare.domain.IMergeRunnable;
 import org.eclipse.emf.compare.ide.ui.internal.EMFCompareIDEUIMessages;
 import org.eclipse.emf.compare.ide.ui.internal.EMFCompareIDEUIPlugin;
+import org.eclipse.emf.compare.ide.ui.internal.preferences.EMFCompareUIPreferences;
 import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.Navigatable;
 import org.eclipse.emf.compare.internal.merge.MergeMode;
 import org.eclipse.emf.compare.merge.IDiffRelationshipComputer;
@@ -230,7 +231,8 @@
 				mergerRegistry, mergeRunnable);
 		editingDomain.getCommandStack().execute(mergeCommand);
 
-		if (navigatable != null) {
+		if (navigatable != null && EMFCompareIDEUIPlugin.getDefault().getPreferenceStore()
+				.getBoolean(EMFCompareUIPreferences.SELECT_NEXT_UNRESOLVED_DIFF)) {
 			// navigator is null in MergeAllNonConflictingAction
 			navigatable.selectChange(Navigatable.NEXT_UNRESOLVED_CHANGE);
 		}