diff options
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.java | 61 |
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 { |