Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java')
-rw-r--r--bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java249
1 files changed, 108 insertions, 141 deletions
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
index 1096ed525..21b5faf7d 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2016 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -316,8 +316,6 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
/** line width of change borders */
private static final int LW= 1;
- // determines whether a change between left and right is considered incoming or outgoing
- private boolean fLeftIsLocal;
private boolean fShowCurrentOnly= false;
private boolean fShowCurrentOnly2= false;
private int fMarginWidth= MARGIN_WIDTH;
@@ -375,7 +373,6 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
private boolean fUseSplines= true;
private boolean fUseSingleLine= true;
- private boolean fUseResolveUI= true;
private boolean fHighlightTokenChanges = false;
private String fSymbolicFontName;
@@ -774,15 +771,19 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
// install new document
tp.setRegion(range);
- if (this.fViewer.fSubDoc) {
- if (range != null) {
+ SourceViewer sourceViewer = tp.getSourceViewer();
+ sourceViewer.setRedraw(false);
+ try {
+ if (this.fViewer.fSubDoc && range != null) {
IRegion r= this.fViewer.normalizeDocumentRegion(document, TextMergeViewer.toRegion(range));
- tp.getSourceViewer().setDocument(document, r.getOffset(), r.getLength());
- } else
- tp.getSourceViewer().setDocument(document);
- } else
- tp.getSourceViewer().setDocument(document);
-
+ sourceViewer.setDocument(document, r.getOffset(), r.getLength());
+ } else {
+ sourceViewer.setDocument(document);
+ }
+ } finally {
+ sourceViewer.setRedraw(true);
+ }
+
tp.rememberDocument(document);
}
@@ -1320,17 +1321,12 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
if (isThreeWay() && !isIgnoreAncestor()) {
switch (diff.getKind()) {
case RangeDifference.RIGHT:
- if (fLeftIsLocal)
- return INCOMING_TEXT_FILL;
- return OUTGOING_TEXT_FILL;
+ return getCompareConfiguration().isMirrored() ? OUTGOING_TEXT_FILL : INCOMING_TEXT_FILL;
case RangeDifference.ANCESTOR:
- return CONFLICT_TEXT_FILL;
- case RangeDifference.LEFT:
- if (fLeftIsLocal)
- return OUTGOING_TEXT_FILL;
- return INCOMING_TEXT_FILL;
case RangeDifference.CONFLICT:
return CONFLICT_TEXT_FILL;
+ case RangeDifference.LEFT:
+ return getCompareConfiguration().isMirrored() ? INCOMING_TEXT_FILL : OUTGOING_TEXT_FILL;
default:
return null;
}
@@ -1607,7 +1603,6 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
if (fPreferenceStore != null) {
fPreferenceStore.addPropertyChangeListener(fPreferenceChangeListener);
- fLeftIsLocal= Utilities.getBoolean(getCompareConfiguration(), "LEFT_IS_LOCAL", false); //$NON-NLS-1$
fSynchronizedScrolling= fPreferenceStore.getBoolean(ComparePreferencePage.SYNCHRONIZE_SCROLLING);
fShowPseudoConflicts= fPreferenceStore.getBoolean(ComparePreferencePage.SHOW_PSEUDO_CONFLICTS);
//fUseSplines= fPreferenceStore.getBoolean(ComparePreferencePage.USE_SPLINES);
@@ -1663,7 +1658,7 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
}
private ChainedPreferenceStore createChainedPreferenceStore() {
- ArrayList<IPreferenceStore> stores= new ArrayList<IPreferenceStore>(2);
+ List<IPreferenceStore> stores= new ArrayList<>(2);
stores.add(getCompareConfiguration().getPreferenceStore());
stores.add(EditorsUI.getPreferenceStore());
return new ChainedPreferenceStore(stores.toArray(new IPreferenceStore[stores.size()]));
@@ -2456,46 +2451,42 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
paintCenter(this, gc);
}
};
- if (fUseResolveUI) {
- new HoverResizer(canvas, HORIZONTAL);
-
- if (fNormalCursor == null) fNormalCursor= new Cursor(canvas.getDisplay(), SWT.CURSOR_ARROW);
- int style= fIsMac ? SWT.FLAT : SWT.PUSH;
-
- fLeftToRightButton= new Button(canvas, style);
- fLeftToRightButton.setCursor(fNormalCursor);
- fLeftToRightButton.setText(COPY_LEFT_TO_RIGHT_INDICATOR);
- fLeftToRightButton.setToolTipText(
- Utilities.getString(getResourceBundle(), "action.CopyDiffLeftToRight.tooltip")); //$NON-NLS-1$
- fLeftToRightButton.pack();
- fLeftToRightButton.setVisible(false);
- fLeftToRightButton.addSelectionListener(
+ new HoverResizer(canvas, HORIZONTAL);
+
+ if (fNormalCursor == null) fNormalCursor= new Cursor(canvas.getDisplay(), SWT.CURSOR_ARROW);
+ int style= fIsMac ? SWT.FLAT : SWT.PUSH;
+
+ fLeftToRightButton= new Button(canvas, style);
+ fLeftToRightButton.setCursor(fNormalCursor);
+ fLeftToRightButton.setText(COPY_LEFT_TO_RIGHT_INDICATOR);
+ fLeftToRightButton.setToolTipText(
+ Utilities.getString(getResourceBundle(), "action.CopyDiffLeftToRight.tooltip")); //$NON-NLS-1$
+ fLeftToRightButton.pack();
+ fLeftToRightButton.setVisible(false);
+ fLeftToRightButton.addSelectionListener(
+ new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ handleCenterButtonSelection(true);
+ }
+ }
+ );
+
+ fRightToLeftButton= new Button(canvas, style);
+ fRightToLeftButton.setCursor(fNormalCursor);
+ fRightToLeftButton.setText(COPY_RIGHT_TO_LEFT_INDICATOR);
+ fRightToLeftButton.setToolTipText(
+ Utilities.getString(getResourceBundle(), "action.CopyDiffRightToLeft.tooltip")); //$NON-NLS-1$
+ fRightToLeftButton.pack();
+ fRightToLeftButton.setVisible(false);
+ fRightToLeftButton.addSelectionListener(
new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
- handleCenterButtonSelection(true);
+ handleCenterButtonSelection(false);
}
}
- );
-
- fRightToLeftButton= new Button(canvas, style);
- fRightToLeftButton.setCursor(fNormalCursor);
- fRightToLeftButton.setText(COPY_RIGHT_TO_LEFT_INDICATOR);
- fRightToLeftButton.setToolTipText(
- Utilities.getString(getResourceBundle(), "action.CopyDiffRightToLeft.tooltip")); //$NON-NLS-1$
- fRightToLeftButton.pack();
- fRightToLeftButton.setVisible(false);
- fRightToLeftButton.addSelectionListener(
- new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- handleCenterButtonSelection(false);
- }
- }
- );
- } else {
- new Resizer(canvas, HORIZONTAL);
- }
+ );
return canvas;
}
@@ -2514,8 +2505,6 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
private boolean handleMouseMoveOverCenter(Canvas canvas, int x, int y) {
Rectangle r= new Rectangle(0, 0, 0, 0);
Diff diff= getDiffUnderMouse(canvas, x, y, r);
- if (diff != null && !diff.isUnresolvedIncomingOrConflicting())
- diff= null;
if (diff != fButtonDiff) {
if (diff != null) {
fButtonDiff= diff;
@@ -2987,24 +2976,18 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
rightRange= ((IDocumentRange)right).getRange();
ancestor= ci.getAncestor();
- left= ci.getLeft();
- right= ci.getRight();
+ left= getCompareConfiguration().isMirrored() ? ci.getRight() : ci.getLeft();
+ right= getCompareConfiguration().isMirrored() ? ci.getLeft() : ci.getRight();
}
}
}
}
- int n= 0;
- if (left != null)
- n++;
- if (right != null)
- n++;
- fHighlightRanges= n > 1;
+ fHighlightRanges= left != null && right != null;
resetDiffs();
fHasErrors= false; // start with no errors
- CompareConfiguration cc= getCompareConfiguration();
IMergeViewerContentProvider cp= getMergeContentProvider();
if (cp instanceof MergeViewerContentProvider) {
@@ -3042,26 +3025,20 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
if (!isConfigured) {
configureSourceViewer(fAncestor.getSourceViewer(), false, null);
- configureSourceViewer(fLeft.getSourceViewer(), cc.isLeftEditable() && cp.isLeftEditable(input), fLeftContributor);
- configureSourceViewer(fRight.getSourceViewer(), cc.isRightEditable() && cp.isRightEditable(input), fRightContributor);
+ configureSourceViewer(fLeft.getSourceViewer(), isLeftEditable() && cp.isLeftEditable(input), fLeftContributor);
+ configureSourceViewer(fRight.getSourceViewer(), isRightEditable() && cp.isRightEditable(input), fRightContributor);
isConfigured = true; // configure once
}
// set new documents
- fLeftContributor.setDocument(fLeft, cc.isLeftEditable() && cp.isLeftEditable(input));
+ fLeftContributor.setDocument(fLeft, isLeftEditable() && cp.isLeftEditable(input));
fLeftLineCount= fLeft.getLineCount();
- fRightContributor.setDocument(fRight, cc.isRightEditable() && cp.isRightEditable(input));
+ fRightContributor.setDocument(fRight, isRightEditable() && cp.isRightEditable(input));
fRightLineCount= fRight.getLineCount();
fAncestorContributor.setDocument(fAncestor, false);
- //if the input is part of a patch hunk, toggle synchronized scrolling
- /*if (isPatchHunk()){
- setSyncScrolling(false);
- } else {
- setSyncScrolling(fPreferenceStore.getBoolean(ComparePreferencePage.SYNCHRONIZE_SCROLLING));
- }*/
setSyncScrolling(fPreferenceStore.getBoolean(ComparePreferencePage.SYNCHRONIZE_SCROLLING));
update(false);
@@ -3616,9 +3593,9 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
}
if (fCopyDiffLeftToRightItem != null)
- ((Action)fCopyDiffLeftToRightItem.getAction()).setEnabled(leftToRight);
+ fCopyDiffLeftToRightItem.getAction().setEnabled(leftToRight);
if (fCopyDiffRightToLeftItem != null)
- ((Action)fCopyDiffRightToLeftItem.getAction()).setEnabled(rightToLeft);
+ fCopyDiffRightToLeftItem.getAction().setEnabled(rightToLeft);
if (fNextDiff != null) {
IAction a = fNextDiff.getAction();
@@ -3660,15 +3637,12 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
if (showResolveUI()) {
// we only show red or green if there is at least one incoming or conflicting change
- int incomingOrConflicting= 0;
int unresolvedIncoming= 0;
int unresolvedConflicting= 0;
if (fMerger.hasChanges()) {
for (Iterator<?> iterator = fMerger.changesIterator(); iterator .hasNext();) {
Diff d = (Diff) iterator.next();
- if (d.isIncomingOrConflicting() /* && useChange(d.fDirection) && !d.fIsWhitespace */) {
- incomingOrConflicting++;
if (!d.isResolved()) {
if (d.getKind() == RangeDifference.CONFLICT) {
unresolvedConflicting++;
@@ -3676,18 +3650,15 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
}
unresolvedIncoming++;
}
- }
}
}
- if (incomingOrConflicting > 0) {
- if (unresolvedConflicting > 0)
- rgb= SELECTED_CONFLICT;
- else if (unresolvedIncoming > 0)
- rgb= SELECTED_INCOMING;
- else
- rgb= RESOLVED;
- }
+ if (unresolvedConflicting > 0)
+ rgb= SELECTED_CONFLICT;
+ else if (unresolvedIncoming > 0)
+ rgb= SELECTED_INCOMING;
+ else
+ rgb= RESOLVED;
}
if (fHeaderPainter.setColor(rgb))
@@ -3728,10 +3699,14 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
String s= ""; //$NON-NLS-1$
switch(diff.getKind()) {
case RangeDifference.LEFT:
- s= CompareMessages.TextMergeViewer_direction_outgoing;
+ s= getCompareConfiguration().isMirrored() ?
+ CompareMessages.TextMergeViewer_direction_incoming :
+ CompareMessages.TextMergeViewer_direction_outgoing;
break;
case RangeDifference.RIGHT:
- s= CompareMessages.TextMergeViewer_direction_incoming;
+ s= getCompareConfiguration().isMirrored() ?
+ CompareMessages.TextMergeViewer_direction_outgoing :
+ CompareMessages.TextMergeViewer_direction_incoming;
break;
case RangeDifference.CONFLICT:
s= CompareMessages.TextMergeViewer_direction_conflicting;
@@ -3896,35 +3871,29 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
tbm.appendToGroup("navigation", fPreviousChange); //$NON-NLS-1$
fHandlerService.registerAction(a, "org.eclipse.compare.selectPreviousChange"); //$NON-NLS-1$
- CompareConfiguration cc= getCompareConfiguration();
-
- if (cc.isRightEditable()) {
- a= new Action() {
- @Override
- public void run() {
- copyDiffLeftToRight();
- }
- };
- Utilities.initAction(a, getResourceBundle(), "action.CopyDiffLeftToRight."); //$NON-NLS-1$
- fCopyDiffLeftToRightItem= new ActionContributionItem(a);
- fCopyDiffLeftToRightItem.setVisible(true);
- tbm.appendToGroup("merge", fCopyDiffLeftToRightItem); //$NON-NLS-1$
- fHandlerService.registerAction(a, "org.eclipse.compare.copyLeftToRight"); //$NON-NLS-1$
- }
+ a= new Action() {
+ @Override
+ public void run() {
+ copyDiffLeftToRight();
+ }
+ };
+ Utilities.initAction(a, getResourceBundle(), "action.CopyDiffLeftToRight."); //$NON-NLS-1$
+ fCopyDiffLeftToRightItem= new ActionContributionItem(a);
+ fCopyDiffLeftToRightItem.setVisible(isRightEditable());
+ tbm.appendToGroup("merge", fCopyDiffLeftToRightItem); //$NON-NLS-1$
+ fHandlerService.registerAction(a, "org.eclipse.compare.copyLeftToRight"); //$NON-NLS-1$
- if (cc.isLeftEditable()) {
- a= new Action() {
- @Override
- public void run() {
- copyDiffRightToLeft();
- }
- };
- Utilities.initAction(a, getResourceBundle(), "action.CopyDiffRightToLeft."); //$NON-NLS-1$
- fCopyDiffRightToLeftItem= new ActionContributionItem(a);
- fCopyDiffRightToLeftItem.setVisible(true);
- tbm.appendToGroup("merge", fCopyDiffRightToLeftItem); //$NON-NLS-1$
- fHandlerService.registerAction(a, "org.eclipse.compare.copyRightToLeft"); //$NON-NLS-1$
- }
+ a= new Action() {
+ @Override
+ public void run() {
+ copyDiffRightToLeft();
+ }
+ };
+ Utilities.initAction(a, getResourceBundle(), "action.CopyDiffRightToLeft."); //$NON-NLS-1$
+ fCopyDiffRightToLeftItem= new ActionContributionItem(a);
+ fCopyDiffRightToLeftItem.setVisible(isLeftEditable());
+ tbm.appendToGroup("merge", fCopyDiffRightToLeftItem); //$NON-NLS-1$
+ fHandlerService.registerAction(a, "org.eclipse.compare.copyRightToLeft"); //$NON-NLS-1$
fIgnoreWhitespace= ChangePropertyAction.createIgnoreWhiteSpaceAction(getResourceBundle(), getCompareConfiguration());
fIgnoreWhitespace.setActionDefinitionId(ICompareUIConstants.COMMAND_IGNORE_WHITESPACE);
@@ -4213,6 +4182,13 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
@Override
protected void updateToolItems() {
+ if (fCopyDiffLeftToRightItem != null) {
+ fCopyDiffLeftToRightItem.setVisible(isRightEditable());
+ }
+ if (fCopyDiffRightToLeftItem != null) {
+ fCopyDiffRightToLeftItem.setVisible(isLeftEditable());
+ }
+
//only update toolbar items if diffs need to be calculated (which
//dictates whether a toolbar gets added at all)
if (!isPatchHunk()){
@@ -4229,9 +4205,8 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
if (a != null)
a.setEnabled(a.isEnabled() && !fHasErrors);
}
-
- super.updateToolItems();
}
+ super.updateToolItems();
}
//---- painting lines
@@ -4295,18 +4270,14 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
}
private boolean showResolveUI() {
- if (!fUseResolveUI || !isThreeWay() || isIgnoreAncestor())
+ if (!isThreeWay() || isIgnoreAncestor())
return false;
return isAnySideEditable();
}
private boolean isAnySideEditable() {
- CompareConfiguration cc= getCompareConfiguration();
// we only enable the new resolve UI if exactly one side is editable
- boolean l= cc.isLeftEditable();
- boolean r= cc.isRightEditable();
- //return (l && !r) || (r && !l);
- return l || r;
+ return isLeftEditable() || isRightEditable();
}
private void paintCenter(Canvas canvas, GC g) {
@@ -4339,8 +4310,6 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
if (! fHighlightRanges)
return;
- boolean isAnySideEditable= isAnySideEditable();
-
if (fMerger.hasChanges()) {
int lshift= fLeft.getVerticalScrollOffset();
int rshift= fRight.getVerticalScrollOffset();
@@ -4423,7 +4392,7 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
}
}
- if (fUseSingleLine && isAnySideEditable && diff.isUnresolvedIncomingOrConflicting()) {
+ if (fUseSingleLine && isAnySideEditable()) {
// draw resolve state
int cx= (w-RESOLVE_SIZE)/2;
int cy= ((ly+lh/2) + (ry+rh/2) - RESOLVE_SIZE)/2;
@@ -4577,17 +4546,16 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
if (isThreeWay() && !isIgnoreAncestor()) {
switch (diff.getKind()) {
case RangeDifference.RIGHT:
- if (fLeftIsLocal)
+ if (!getCompareConfiguration().isMirrored())
return selected ? selected_fill : INCOMING_FILL;
return selected ? selected_fill : OUTGOING_FILL;
case RangeDifference.ANCESTOR:
+ case RangeDifference.CONFLICT:
return selected ? selected_fill : CONFLICT_FILL;
case RangeDifference.LEFT:
- if (fLeftIsLocal)
+ if (!getCompareConfiguration().isMirrored())
return selected ? selected_fill : OUTGOING_FILL;
return selected ? selected_fill : INCOMING_FILL;
- case RangeDifference.CONFLICT:
- return selected ? selected_fill : CONFLICT_FILL;
default:
return null;
}
@@ -4601,17 +4569,16 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable {
if (isThreeWay() && !isIgnoreAncestor()) {
switch (diff.getKind()) {
case RangeDifference.RIGHT:
- if (fLeftIsLocal)
+ if (!getCompareConfiguration().isMirrored())
return selected ? SELECTED_INCOMING : INCOMING;
return selected ? SELECTED_OUTGOING : OUTGOING;
case RangeDifference.ANCESTOR:
+ case RangeDifference.CONFLICT:
return selected ? SELECTED_CONFLICT : CONFLICT;
case RangeDifference.LEFT:
- if (fLeftIsLocal)
+ if (!getCompareConfiguration().isMirrored())
return selected ? SELECTED_OUTGOING : OUTGOING;
return selected ? SELECTED_INCOMING : INCOMING;
- case RangeDifference.CONFLICT:
- return selected ? SELECTED_CONFLICT : CONFLICT;
default:
return null;
}

Back to the top