summaryrefslogtreecommitdiff
path: root/platform/platform-impl/src/com/intellij/openapi/diff/impl/incrementalMerge/ui/MergePanel2.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/platform-impl/src/com/intellij/openapi/diff/impl/incrementalMerge/ui/MergePanel2.java')
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/diff/impl/incrementalMerge/ui/MergePanel2.java61
1 files changed, 53 insertions, 8 deletions
diff --git a/platform/platform-impl/src/com/intellij/openapi/diff/impl/incrementalMerge/ui/MergePanel2.java b/platform/platform-impl/src/com/intellij/openapi/diff/impl/incrementalMerge/ui/MergePanel2.java
index 10362cc8b304..cbad541fe129 100644
--- a/platform/platform-impl/src/com/intellij/openapi/diff/impl/incrementalMerge/ui/MergePanel2.java
+++ b/platform/platform-impl/src/com/intellij/openapi/diff/impl/incrementalMerge/ui/MergePanel2.java
@@ -27,9 +27,7 @@ import com.intellij.openapi.diff.*;
import com.intellij.openapi.diff.actions.NextDiffAction;
import com.intellij.openapi.diff.actions.PreviousDiffAction;
import com.intellij.openapi.diff.actions.ToggleAutoScrollAction;
-import com.intellij.openapi.diff.impl.DiffUtil;
-import com.intellij.openapi.diff.impl.EditingSides;
-import com.intellij.openapi.diff.impl.GenericDataProvider;
+import com.intellij.openapi.diff.impl.*;
import com.intellij.openapi.diff.impl.highlighting.FragmentSide;
import com.intellij.openapi.diff.impl.incrementalMerge.ChangeCounter;
import com.intellij.openapi.diff.impl.incrementalMerge.ChangeList;
@@ -49,16 +47,20 @@ import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.openapi.editor.ex.EditorEx;
import com.intellij.openapi.editor.ex.EditorMarkupModel;
+import com.intellij.openapi.editor.highlighter.EditorHighlighter;
import com.intellij.openapi.editor.highlighter.EditorHighlighterFactory;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogBuilder;
+import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.LabeledComponent;
+import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.EditorNotificationPanel;
-import com.intellij.util.diff.FilesTooBigForDiffException;
+import com.intellij.util.containers.Convertor;
import gnu.trove.TIntHashSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -141,9 +143,6 @@ public class MergePanel2 implements DiffViewer {
private DiffRequest.ToolbarAddons createToolbar() {
return new DiffRequest.ToolbarAddons() {
public void customize(DiffToolbar toolbar) {
- ActionManager actionManager = ActionManager.getInstance();
- toolbar.addAction(actionManager.getAction(IdeActions.ACTION_COPY));
- toolbar.addAction(actionManager.getAction(IdeActions.ACTION_FIND));
toolbar.addAction(PreviousDiffAction.find());
toolbar.addAction(NextDiffAction.find());
toolbar.addSeparator();
@@ -235,6 +234,8 @@ public class MergePanel2 implements DiffViewer {
Editor base = getEditor(1);
Editor right = getEditor(2);
+ setupHighlighterSettings(left, base, right);
+
myMergeList.setMarkups(left, base, right);
EditingSides[] sides = {getFirstEditingSide(), getSecondEditingSide()};
myScrollSupport.install(sides);
@@ -271,6 +272,37 @@ public class MergePanel2 implements DiffViewer {
return myScrollSupport.isEnabled();
}
+ private void setupHighlighterSettings(Editor left, Editor base, Editor right) {
+ Editor[] editors = new Editor[]{left, base, right};
+ DiffContent[] contents = myData.getContents();
+ FileType[] types = DiffUtil.chooseContentTypes(contents);
+
+ VirtualFile fallbackFile = contents[1].getFile();
+ FileType fallbackType = contents[1].getContentType();
+
+ for (int i = 0; i < 3; i++) {
+ Editor editor = editors[i];
+ DiffContent content = contents[i];
+
+ EditorHighlighter highlighter =
+ createHighlighter(types[i], content.getFile(), fallbackFile, fallbackType, myData.getProject()).createHighlighter();
+ if (highlighter != null) {
+ ((EditorEx)editor).setHighlighter(highlighter);
+ }
+ }
+ }
+
+ private static DiffHighlighterFactory createHighlighter(FileType contentType,
+ VirtualFile file,
+ VirtualFile otherFile,
+ FileType otherType,
+ Project project) {
+ if (file == null) file = otherFile;
+ if (contentType == null) contentType = otherType;
+
+ return new DiffHighlighterFactoryImpl(contentType, file, project);
+ }
+
public void setHighlighterSettings(@Nullable EditorColorsScheme settings) {
for (EditorPlace place : getEditorPlaces()) {
setHighlighterSettings(settings, place);
@@ -337,7 +369,20 @@ public class MergePanel2 implements DiffViewer {
data.customizeToolbar(myPanel.resetToolbar());
myPanel.registerToolbarActions();
if ( data instanceof MergeRequestImpl && myBuilder != null){
- ((MergeRequestImpl)data).setActions(myBuilder, this);
+ Convertor<DialogWrapper, Boolean> preOkHook = new Convertor<DialogWrapper, Boolean>() {
+ @Override
+ public Boolean convert(DialogWrapper dialog) {
+ ChangeCounter counter = ChangeCounter.getOrCreate(myMergeList);
+ int changes = counter.getChangeCounter();
+ int conflicts = counter.getConflictCounter();
+ if (changes == 0 && conflicts == 0) return true;
+ return Messages.showYesNoDialog(dialog.getRootPane(),
+ DiffBundle.message("merge.dialog.apply.partially.resolved.changes.confirmation.message", changes, conflicts),
+ DiffBundle.message("apply.partially.resolved.merge.dialog.title"),
+ Messages.getQuestionIcon()) == Messages.YES;
+ }
+ };
+ ((MergeRequestImpl)data).setActions(myBuilder, this, preOkHook);
}
}
finally {