Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcvs2001-06-01 19:00:19 +0000
committercvs2001-06-01 19:00:19 +0000
commit8f6ef5c57d4493a705370676e5e9cf3be064a35d (patch)
tree9d9e157f9b52ac7c4406668e7b0327b95c98ff95 /bundles
parent2ce7abddb1b90a527a34b07a55ace8907b75db4f (diff)
downloadeclipse.platform.team-8f6ef5c57d4493a705370676e5e9cf3be064a35d.tar.gz
eclipse.platform.team-8f6ef5c57d4493a705370676e5e9cf3be064a35d.tar.xz
eclipse.platform.team-8f6ef5c57d4493a705370676e5e9cf3be064a35d.zip
1GEK2NH & 1GEK2LR
Diffstat (limited to 'bundles')
-rw-r--r--bundles/org.eclipse.compare/build.properties2
-rw-r--r--bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java25
-rw-r--r--bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java14
-rw-r--r--bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java95
-rw-r--r--bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java1
-rw-r--r--bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java19
-rw-r--r--bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java108
-rw-r--r--bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java15
-rw-r--r--bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java6
-rw-r--r--bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java2
-rw-r--r--bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/NavigationAction.java33
-rw-r--r--bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java242
-rw-r--r--bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java3
-rw-r--r--bundles/org.eclipse.compare/plugin.properties7
-rw-r--r--bundles/org.eclipse.compare/plugins/org.eclipse.compare/build.properties2
-rw-r--r--bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java25
-rw-r--r--bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java14
-rw-r--r--bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java95
-rw-r--r--bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java1
-rw-r--r--bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java19
-rw-r--r--bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java108
-rw-r--r--bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java15
-rw-r--r--bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java6
-rw-r--r--bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java2
-rw-r--r--bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/NavigationAction.java33
-rw-r--r--bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java242
-rw-r--r--bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java3
-rw-r--r--bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.properties7
-rw-r--r--bundles/org.eclipse.compare/plugins/org.eclipse.compare/readme_compare.html6
-rw-r--r--bundles/org.eclipse.compare/readme_compare.html6
30 files changed, 870 insertions, 286 deletions
diff --git a/bundles/org.eclipse.compare/build.properties b/bundles/org.eclipse.compare/build.properties
index 19daddb9f..c1fa38f46 100644
--- a/bundles/org.eclipse.compare/build.properties
+++ b/bundles/org.eclipse.compare/build.properties
@@ -1,5 +1,5 @@
# VAJ build contribution
-build.includes=doc,icons,plugin.jars,plugin.properties,plugin.xml
+build.includes=build.properties,doc,icons,plugin.jars,plugin.properties,plugin.xml
build.vaj.Eclipse\ Compare=Eclipse Compare
# Eclipse build contribution
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
index f4edaae2c..abd268253 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
@@ -110,7 +110,7 @@ public abstract class CompareEditorInput implements IEditorInput, IPropertyChang
private Object fInput;
private String fTitle= "Compare";
private ListenerList fListenerList= new ListenerList();
-
+ private CompareNavigator fNavigator;
private boolean fDirty= false;
private IPropertyChangeListener fDirtyStateListener;
@@ -144,6 +144,18 @@ public abstract class CompareEditorInput implements IEditorInput, IPropertyChang
* see IAdaptable.getAdapter
*/
public Object getAdapter(Class adapter) {
+ if (CompareNavigator.class.equals(adapter)) {
+ if (fNavigator == null)
+ fNavigator= new CompareNavigator(
+ new CompareViewerSwitchingPane[] {
+ fStructureInputPane,
+ fStructurePane1,
+ fStructurePane2,
+ fContentInputPane
+ }
+ );
+ return fNavigator;
+ }
return null;
}
@@ -327,6 +339,7 @@ public abstract class CompareEditorInput implements IEditorInput, IPropertyChang
public Control createContents(Composite parent) {
fComposite= new Splitter(parent, SWT.VERTICAL);
+ fComposite.setData(this);
final Splitter h= new Splitter(fComposite, SWT.HORIZONTAL);
@@ -431,6 +444,16 @@ public abstract class CompareEditorInput implements IEditorInput, IPropertyChang
fStructureInputPane.setInput(input2);
fContentInputPane.setInput(input2);
}
+
+ //
+ fComposite.setData("Nav",
+ new CompareViewerSwitchingPane[] {
+ fStructureInputPane,
+ fStructurePane1,
+ fStructurePane2,
+ fContentInputPane
+ }
+ );
return fComposite;
}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
index 82a2c5088..90d4e8f11 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
@@ -580,12 +580,14 @@ public abstract class ContentMergeViewer extends ContentViewer implements IPrope
if (input != null) {
IMergeViewerContentProvider content= getMergeContentProvider();
-
- Object ancestor= content.getAncestorContent(input);
- Object left= content.getLeftContent(input);
- Object right= content.getRightContent(input);
+
+ if (content != null) {
+ Object ancestor= content.getAncestorContent(input);
+ Object left= content.getLeftContent(input);
+ Object right= content.getRightContent(input);
- updateContent(ancestor, left, right);
+ updateContent(ancestor, left, right);
+ }
}
}
@@ -611,7 +613,7 @@ public abstract class ContentMergeViewer extends ContentViewer implements IPrope
}
};
fComposite.setData(CompareUI.COMPARE_VIEWER_TITLE, getTitle());
-
+
hookControl(fComposite); // hook help & dispose listener
fComposite.setLayout(new ContentMergeViewerLayout());
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 84c40aa57..a4c2d0b24 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
@@ -53,6 +53,8 @@ import org.eclipse.compare.internal.DocLineComparator;
import org.eclipse.compare.internal.ComparePreferencePage;
import org.eclipse.compare.internal.CompareUIPlugin;
import org.eclipse.compare.internal.MergeViewerAction;
+import org.eclipse.compare.internal.INavigatable;
+import org.eclipse.compare.internal.CompareNavigator;
import org.eclipse.compare.rangedifferencer.RangeDifference;
import org.eclipse.compare.rangedifferencer.RangeDifferencer;
@@ -369,7 +371,7 @@ public class TextMergeViewer extends ContentMergeViewer {
*/
public TextMergeViewer(Composite parent, int style, CompareConfiguration configuration) {
super(style, ResourceBundle.getBundle(BUNDLE_NAME), configuration);
-
+
IPreferenceStore ps= CompareUIPlugin.getDefault().getPreferenceStore();
if (ps != null) {
fPreferenceChangeListener= new IPropertyChangeListener() {
@@ -395,6 +397,13 @@ public class TextMergeViewer extends ContentMergeViewer {
};
buildControl(parent);
+
+ INavigatable nav= new INavigatable() {
+ public boolean gotoDifference(boolean next) {
+ return navigate(next, false, false);
+ }
+ };
+ fComposite.setData(INavigatable.NAVIGATOR_PROPERTY, nav);
}
private void updateFont(IPreferenceStore ps, Control c) {
@@ -579,6 +588,7 @@ public class TextMergeViewer extends ContentMergeViewer {
paintCenter(this, gc);
}
};
+ CompareNavigator.hookNavigation(canvas);
new Resizer(canvas, HORIZONTAL);
return canvas;
}
@@ -614,6 +624,7 @@ public class TextMergeViewer extends ContentMergeViewer {
new KeyAdapter() {
public void keyPressed(KeyEvent e) {
handleSelectionChanged(part);
+ CompareNavigator.handleNavigationKeys(e);
}
}
);
@@ -691,19 +702,21 @@ public class TextMergeViewer extends ContentMergeViewer {
fLeft.setEditable(leftEditable);
// set new documents
- setDocument(fAncestor, ancestor);
-
setDocument(fLeft, left);
fLeftLineCount= fLeft.getLineCount();
setDocument(fRight, right);
fRightLineCount= fRight.getLineCount();
+ setDocument(fAncestor, ancestor);
+
doDiff();
invalidateLines();
updateVScrollBar();
- selectFirstDiff();
+
+ if (ancestor != null || left != null || right != null)
+ selectFirstDiff();
}
private void updateDiffBackground(Diff diff) {
@@ -854,6 +867,12 @@ public class TextMergeViewer extends ContentMergeViewer {
}
tp.setEnabled(enabled);
+ if (fFocusPart == null) {
+ if (enabled) {
+ fFocusPart= tp;
+ fFocusPart.getTextWidget().setFocus();
+ }
+ }
return enabled;
}
@@ -909,8 +928,13 @@ public class TextMergeViewer extends ContentMergeViewer {
fAncestorCanvas.setBounds(x, y, MARGIN_WIDTH, height-scrollbarHeight);
fAncestor.getTextWidget().setBounds(x+MARGIN_WIDTH, y, width-MARGIN_WIDTH, height);
} else {
- if (Utilities.okToUse(fAncestorCanvas))
+ if (Utilities.okToUse(fAncestorCanvas)) {
fAncestorCanvas.setVisible(false);
+ if (fFocusPart == fAncestor) {
+ fFocusPart= fLeft;
+ fFocusPart.getTextWidget().setFocus();
+ }
+ }
if (fAncestor.isControlOkToUse()) {
StyledText t= fAncestor.getTextWidget();
t.setVisible(false);
@@ -1467,7 +1491,7 @@ public class TextMergeViewer extends ContentMergeViewer {
Action a= new Action() {
public void run() {
- navigate(true);
+ navigate(true, true, true);
}
};
Utilities.initAction(a, getResourceBundle(), "action.NextDiff.");
@@ -1476,7 +1500,7 @@ public class TextMergeViewer extends ContentMergeViewer {
a= new Action() {
public void run() {
- navigate(false);
+ navigate(false, true, true);
}
};
Utilities.initAction(a, getResourceBundle(), "action.PrevDiff.");
@@ -1553,7 +1577,11 @@ public class TextMergeViewer extends ContentMergeViewer {
}
private void selectFirstDiff() {
- Diff firstDiff= findNext(fRight, fChangeDiffs, -1, -1);
+ Diff firstDiff= null;
+ if (CompareNavigator.getDirection(fComposite))
+ firstDiff= findNext(fRight, fChangeDiffs, -1, -1, false);
+ else
+ firstDiff= findPrev(fRight, fChangeDiffs, 9999999, 9999999, false);
setCurrentDiff(firstDiff, true);
}
@@ -1888,7 +1916,7 @@ public class TextMergeViewer extends ContentMergeViewer {
/**
*/
- private void navigate(boolean down) {
+ private boolean navigate(boolean down, boolean wrap, boolean deep) {
Diff diff= null;
if (fChangeDiffs != null) {
@@ -1899,27 +1927,31 @@ public class TextMergeViewer extends ContentMergeViewer {
if (part != null) {
Point s= part.getSelectedRange();
if (down)
- diff= findNext(part, fChangeDiffs, s.x, s.x+s.y);
+ diff= findNext(part, fChangeDiffs, s.x, s.x+s.y, deep);
else
- diff= findPrev(part, fChangeDiffs, s.x, s.x+s.y);
+ diff= findPrev(part, fChangeDiffs, s.x, s.x+s.y, deep);
}
}
if (diff == null) {
- Control c= getControl();
- if (Utilities.okToUse(c))
- c.getDisplay().beep();
- if (DEAD_STEP)
- return;
- if (fChangeDiffs.size() > 0) {
- if (down)
- diff= (Diff) fChangeDiffs.get(0);
- else
- diff= (Diff) fChangeDiffs.get(fChangeDiffs.size()-1);
- }
+ if (wrap) {
+ Control c= getControl();
+ if (Utilities.okToUse(c))
+ c.getDisplay().beep();
+ if (DEAD_STEP)
+ return true;
+ if (fChangeDiffs.size() > 0) {
+ if (down)
+ diff= (Diff) fChangeDiffs.get(0);
+ else
+ diff= (Diff) fChangeDiffs.get(fChangeDiffs.size()-1);
+ }
+ } else
+ return true;
}
setCurrentDiff(diff, true);
+ return false;
}
/**
@@ -1939,7 +1971,7 @@ public class TextMergeViewer extends ContentMergeViewer {
return null;
}
- private static Diff findNext(MergeSourceViewer tp, List v, int start, int end) {
+ private static Diff findNext(MergeSourceViewer tp, List v, int start, int end, boolean deep) {
for (int i= 0; i < v.size(); i++) {
Diff diff= (Diff) v.get(i);
Position p= diff.getPosition(tp);
@@ -1947,13 +1979,13 @@ public class TextMergeViewer extends ContentMergeViewer {
int startOffset= p.getOffset();
if (end < startOffset)
return diff;
- if (diff.fDiffs != null) {
+ if (deep && diff.fDiffs != null) {
Diff d= null;
int endOffset= startOffset + p.getLength();
if (start == startOffset && end == endOffset) {
- d= findNext(tp, diff.fDiffs, start, start);
+ d= findNext(tp, diff.fDiffs, start, start, deep);
} else if (end < endOffset) {
- d= findNext(tp, diff.fDiffs, start, end);
+ d= findNext(tp, diff.fDiffs, start, end, deep);
}
if (d != null)
return d;
@@ -1963,7 +1995,7 @@ public class TextMergeViewer extends ContentMergeViewer {
return null;
}
- private static Diff findPrev(MergeSourceViewer tp, List v, int start, int end) {
+ private static Diff findPrev(MergeSourceViewer tp, List v, int start, int end, boolean deep) {
for (int i= v.size()-1; i >= 0; i--) {
Diff diff= (Diff) v.get(i);
Position p= diff.getPosition(tp);
@@ -1972,12 +2004,12 @@ public class TextMergeViewer extends ContentMergeViewer {
int endOffset= startOffset + p.getLength();
if (start > endOffset)
return diff;
- if (diff.fDiffs != null) {
+ if (deep && diff.fDiffs != null) {
Diff d= null;
if (start == startOffset && end == endOffset) {
- d= findPrev(tp, diff.fDiffs, end, end);
+ d= findPrev(tp, diff.fDiffs, end, end, deep);
} else if (start >= startOffset) {
- d= findPrev(tp, diff.fDiffs, start, end);
+ d= findPrev(tp, diff.fDiffs, start, end, deep);
}
if (d != null)
return d;
@@ -2197,7 +2229,7 @@ public class TextMergeViewer extends ContentMergeViewer {
diff.setResolved(true);
if (gotoNext) {
- navigate(true/*, true*/);
+ navigate(true, true, true);
} else {
revealDiff(diff, true);
updateControls();
@@ -2467,5 +2499,4 @@ public class TextMergeViewer extends ContentMergeViewer {
}
return viewPos;
}
-
} \ No newline at end of file
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java
index 36b3ebc2d..63197cd51 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java
@@ -37,6 +37,7 @@ public class BinaryCompareViewer extends AbstractViewer {
fControl= new Text(parent, SWT.NONE);
fControl.setEditable(false);
fControl.setData(CompareUI.COMPARE_VIEWER_TITLE, Utilities.getString(fBundle, "title"));
+ CompareNavigator.hookNavigation(fControl);
}
public Control getControl() {
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java
index 87db063ac..a1b52a9f8 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java
@@ -10,9 +10,11 @@ import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.part.EditorActionBarContributor;
import org.eclipse.compare.CompareConfiguration;
+import org.eclipse.compare.CompareEditorInput;
public class CompareEditorContributor extends EditorActionBarContributor {
@@ -20,18 +22,24 @@ public class CompareEditorContributor extends EditorActionBarContributor {
private IEditorPart fActiveEditorPart= null;
private IgnoreWhiteSpaceAction fIgnoreWhitespace;
+ private NavigationAction fNext;
+ private NavigationAction fPrevious;
//private ShowPseudoConflicts fShowPseudoConflicts;
public CompareEditorContributor() {
ResourceBundle bundle= CompareUIPlugin.getResourceBundle();
fIgnoreWhitespace= new IgnoreWhiteSpaceAction(bundle, null);
+ fNext= new NavigationAction(bundle, true);
+ fPrevious= new NavigationAction(bundle, false);
//fShowPseudoConflicts= new ShowPseudoConflicts(bundle, null);
}
public void contributeToToolBar(IToolBarManager tbm) {
tbm.add(new Separator());
tbm.add(fIgnoreWhitespace);
+ tbm.add(fNext);
+ tbm.add(fPrevious);
//tbm.add(fShowPseudoConflicts);
}
@@ -39,6 +47,15 @@ public class CompareEditorContributor extends EditorActionBarContributor {
if (fActiveEditorPart != targetEditor) {
fActiveEditorPart= targetEditor;
+
+ if (fActiveEditorPart != null) {
+ IEditorInput input= fActiveEditorPart.getEditorInput();
+ if (input instanceof CompareEditorInput) {
+ CompareEditorInput compareInput= (CompareEditorInput) input;
+ fNext.setCompareEditorInput(compareInput);
+ fPrevious.setCompareEditorInput(compareInput);
+ }
+ }
if (targetEditor instanceof CompareEditor) {
CompareEditor editor= (CompareEditor) targetEditor;
@@ -46,7 +63,7 @@ public class CompareEditorContributor extends EditorActionBarContributor {
CompareConfiguration cc= editor.getCompareConfiguration();
fIgnoreWhitespace.setCompareConfiguration(cc);
- //fShowPseudoConflicts.setCompareConfiguration(cc);
+ //fShowPseudoConflicts.setCompareConfiguration(cc);
}
}
}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java
new file mode 100644
index 000000000..1fad74054
--- /dev/null
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java
@@ -0,0 +1,108 @@
+/*
+ * (c) Copyright IBM Corp. 2000, 2001.
+ * All Rights Reserved.
+ */
+package org.eclipse.compare.internal;
+
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.compare.CompareEditorInput;
+
+
+public class CompareNavigator {
+
+ private boolean fLastDirection= true;
+ private CompareViewerSwitchingPane[] fPanes;
+
+ public CompareNavigator(CompareViewerSwitchingPane[] panes) {
+ fPanes= panes;
+ }
+
+ public void selectChange(boolean next) {
+
+ fLastDirection= next;
+
+ // find most down stream Pane
+ int n= 0;
+ INavigatable[] navigators= new INavigatable[4];
+ for (int i= 0; i < fPanes.length; i++) {
+ navigators[n]= getNavigator(fPanes[i]);
+ if (navigators[n] != null)
+ n++;
+ }
+
+ while (n > 0) {
+ n--;
+ if (!navigators[n].gotoDifference(next))
+ break;
+ }
+ }
+
+ private static INavigatable getNavigator(CompareViewerSwitchingPane pane) {
+ if (pane == null)
+ return null;
+ if (pane.isEmpty())
+ return null;
+ Viewer viewer= pane.getViewer();
+ if (viewer == null)
+ return null;
+ Control control= viewer.getControl();
+ if (control == null)
+ return null;
+ Object data= control.getData(INavigatable.NAVIGATOR_PROPERTY);
+ if (data instanceof INavigatable)
+ return (INavigatable) data;
+ return null;
+ }
+
+ public static void hookNavigation(final Control c) {
+ c.addKeyListener(
+ new KeyAdapter() {
+ public void keyPressed(KeyEvent e) {
+ handleNavigationKeys(e);
+ }
+ }
+ );
+ }
+
+ public static void handleNavigationKeys(KeyEvent e) {
+ if (e.character == 14 || e.character == 16) { // next
+ if (e.widget instanceof Control) {
+ CompareNavigator nav= findNavigator((Control)e.widget);
+ if (nav != null)
+ nav.selectChange(e.character == 14);
+ }
+ }
+ }
+
+ private static CompareNavigator findNavigator(Control c) {
+ while (c != null) {
+ Object data= c.getData();
+ if (data instanceof CompareEditorInput) {
+ CompareEditorInput cei= (CompareEditorInput) data;
+ Object adapter= cei.getAdapter(CompareNavigator.class);
+ if (adapter instanceof CompareNavigator)
+ return (CompareNavigator)adapter;
+ }
+ c= c.getParent();
+ }
+ return null;
+ }
+
+ private boolean getLastDirection() {
+ boolean last= fLastDirection;
+ fLastDirection= true;
+ return last;
+ }
+
+ public static boolean getDirection(Control c) {
+ CompareNavigator nav= findNavigator(c);
+ if (nav != null)
+ return nav.getLastDirection();
+ return true;
+ }
+}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java
new file mode 100644
index 000000000..a84cbad97
--- /dev/null
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java
@@ -0,0 +1,15 @@
+/*
+ * (c) Copyright IBM Corp. 2000, 2001.
+ * All Rights Reserved.
+ */
+package org.eclipse.compare.internal;
+
+public interface INavigatable {
+
+ static final String NAVIGATOR_PROPERTY= "org.eclipse.compare.internal.Navigator";
+
+ /**
+ * Returns true if at end or beginning.
+ */
+ boolean gotoDifference(boolean next);
+}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java
index 4264803b8..813bdbcf1 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java
@@ -62,8 +62,14 @@ public class ImageMergeViewer extends ContentMergeViewer {
public void createControls(Composite composite) {
fAncestor= new ImageCanvas(composite, SWT.NONE);
+ CompareNavigator.hookNavigation(fAncestor);
+
fLeft= new ImageCanvas(composite, SWT.NONE);
+ CompareNavigator.hookNavigation(fLeft);
+ fLeft.setFocus();
+
fRight= new ImageCanvas(composite, SWT.NONE);
+ CompareNavigator.hookNavigation(fRight);
}
private static void setInput(ImageCanvas canvas, Object input) {
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java
index 1f117d526..b58dcf4d3 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java
@@ -284,6 +284,8 @@ public class MergeSourceViewer extends SourceViewer
MergeViewerAction action= (MergeViewerAction) fActions.get(actionId);
if (action == null) {
action= createAction(actionId);
+ if (action == null)
+ return null;
if (action.isContentDependent())
addTextListener(this);
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/NavigationAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/NavigationAction.java
new file mode 100644
index 000000000..93e7a9bb7
--- /dev/null
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/NavigationAction.java
@@ -0,0 +1,33 @@
+/*
+ * (c) Copyright IBM Corp. 2000, 2001.
+ * All Rights Reserved.
+ */
+package org.eclipse.compare.internal;
+
+import java.util.ResourceBundle;
+import org.eclipse.jface.action.Action;
+import org.eclipse.compare.CompareEditorInput;
+
+
+public class NavigationAction extends Action {
+
+ private boolean fNext;
+ private CompareEditorInput fCompareEditorInput;
+
+ public NavigationAction(ResourceBundle bundle, boolean next) {
+ Utilities.initAction(this, bundle, next ? "action.Next." : "action.Previous.");
+ fNext= next;
+ }
+
+ public void run() {
+ if (fCompareEditorInput != null) {
+ Object adapter= fCompareEditorInput.getAdapter(CompareNavigator.class);
+ if (adapter instanceof CompareNavigator)
+ ((CompareNavigator)adapter).selectChange(fNext);
+ }
+ }
+
+ public void setCompareEditorInput(CompareEditorInput input) {
+ fCompareEditorInput= input;
+ }
+} \ No newline at end of file
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java
index e1e8047bf..d2b7adf6d 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java
@@ -21,7 +21,6 @@ import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.compare.internal.*;
import org.eclipse.compare.*;
-
/**
* A tree viewer that works on objects implementing
* the <code>IDiffContainer</code> and <code>IDiffElement</code> interfaces.
@@ -127,7 +126,7 @@ public class DiffTreeViewer extends TreeViewer {
return false;
}
}
-
+
private ResourceBundle fBundle;
private CompareConfiguration fCompareConfiguration;
private boolean fLeftIsLocal;
@@ -164,9 +163,19 @@ public class DiffTreeViewer extends TreeViewer {
private void initialize(CompareConfiguration configuration) {
+ Control tree= getControl();
+
+ CompareNavigator.hookNavigation(tree);
+
+ INavigatable nav= new INavigatable() {
+ public boolean gotoDifference(boolean next) {
+ return internalNavigate(next);
+ }
+ };
+ tree.setData(INavigatable.NAVIGATOR_PROPERTY, nav);
+
fLeftIsLocal= Utilities.getBoolean(configuration, "LEFT_IS_LOCAL", false);
- Control tree= getControl();
tree.setData(CompareUI.COMPARE_VIEWER_TITLE, getTitle());
@@ -301,15 +310,18 @@ public class DiffTreeViewer extends TreeViewer {
protected void inputChanged(Object in, Object oldInput) {
super.inputChanged(in, oldInput);
- expandToLevel(2);
- updateActions();
+ //expandToLevel(2);
-// System.out.println("inputChanged: " + in);
-// if (fCompareConfiguration != null) {
-// System.out.println(" left: " + fCompareConfiguration.isLeftEditable());
-// System.out.println(" right: " + fCompareConfiguration.isRightEditable());
+// Control c= getControl();
+// Display display= c.getDisplay();
+// display.asyncExec(
+// new Runnable() {
+// public void run() {
+ navigate(true);
+ updateActions();
+// }
// }
-
+// );
}
/**
@@ -356,21 +368,21 @@ public class DiffTreeViewer extends TreeViewer {
// Utilities.initAction(fCopyRightToLeftAction, fBundle, "action.TakeRight.");
// toolbarManager.appendToGroup("merge", fCopyRightToLeftAction);
- fNextAction= new Action() {
- public void run() {
- navigate(true);
- }
- };
- Utilities.initAction(fNextAction, fBundle, "action.NextDiff.");
- toolbarManager.appendToGroup("navigation", fNextAction);
-
- fPreviousAction= new Action() {
- public void run() {
- navigate(false);
- }
- };
- Utilities.initAction(fPreviousAction, fBundle, "action.PrevDiff.");
- toolbarManager.appendToGroup("navigation", fPreviousAction);
+// fNextAction= new Action() {
+// public void run() {
+// navigate(true);
+// }
+// };
+// Utilities.initAction(fNextAction, fBundle, "action.NextDiff.");
+// toolbarManager.appendToGroup("navigation", fNextAction);
+//
+// fPreviousAction= new Action() {
+// public void run() {
+// navigate(false);
+// }
+// };
+// Utilities.initAction(fPreviousAction, fBundle, "action.PrevDiff.");
+// toolbarManager.appendToGroup("navigation", fPreviousAction);
}
/**
@@ -432,117 +444,147 @@ public class DiffTreeViewer extends TreeViewer {
*
* @param next if <code>true</code> the next node is selected, otherwise the previous node
*/
- protected void navigate(boolean next) {
+ protected void navigate(boolean next) {
+ internalNavigate(next);
+ }
+
+ //---- private
+
+ /**
+ * Selects the next (or previous) node of the current selection.
+ * If there is no current selection the first (last) node in the tree is selected.
+ * Wraps around at end or beginning.
+ * Clients may override.
+ *
+ * @param next if <code>true</code> the next node is selected, otherwise the previous node
+ * @return <code>true</code> if at end (or beginning)
+ */
+ private boolean internalNavigate(boolean next) {
Control c= getControl();
if (!(c instanceof Tree))
- return;
+ return false;
Tree tree= (Tree) c;
- TreeItem children[]= tree.getSelection();
TreeItem item= null;
-
+ TreeItem children[]= tree.getSelection();
if (children != null && children.length > 0)
item= children[0];
+ if (item == null) {
+ children= tree.getItems();
+ if (children != null && children.length > 0) {
+ item= children[0];
+ if (item != null && item.getItemCount() <= 0) {
+ internalSetSelection(item);
+ return false;
+ }
+ }
+ }
+ while (true) {
+ item= findNextPrev(item, next);
+ if (item == null)
+ break;
+ if (item.getItemCount() <= 0)
+ break;
+ }
+
if (item != null) {
- if (!next) {
+ internalSetSelection(item);
+ return false;
+ }
+ return true;
+ }
+
+ private TreeItem findNextPrev(TreeItem item, boolean next) {
+
+ if (item == null)
+ return null;
+
+ TreeItem children[]= null;
+
+ if (!next) {
+
+ TreeItem parent= item.getParentItem();
+ if (parent != null)
+ children= parent.getItems();
+ else
+ children= item.getParent().getItems();
+
+ if (children != null && children.length > 0) {
+ // goto previous child
+ int index= 0;
+ for (; index < children.length; index++)
+ if (children[index] == item)
+ break;
+
+ if (index > 0) {
+
+ item= children[index-1];
+
+ while (true) {
+ int n= item.getItemCount();
+ if (n <= 0)
+ break;
+
+ item.setExpanded(true);
+ item= item.getItems()[n-1];
+ }
+
+ // previous
+ return item;
+ }
+ }
+
+ // go up
+ return parent;
+
+ } else {
+ item.setExpanded(true);
+ createChildren(item);
+
+ if (item.getItemCount() > 0) {
+ // has children: go down
+ children= item.getItems();
+ return children[0];
+ }
+ while (item != null) {
+ children= null;
TreeItem parent= item.getParentItem();
if (parent != null)
children= parent.getItems();
else
- children= tree.getItems();
+ children= item.getParent().getItems();
if (children != null && children.length > 0) {
- // goto previous child
+ // goto next child
int index= 0;
for (; index < children.length; index++)
if (children[index] == item)
break;
- if (index > 0) {
-
- item= children[index-1];
-
- while (true) {
- int n= item.getItemCount();
- if (n <= 0)
- break;
-
- item.setExpanded(true);
- item= item.getItems()[n-1];
- }
-
- // previous
- internalSetSelection(item);
- return;
+ if (index < children.length-1) {
+ // next
+ return children[index+1];
}
}
// go up
- if (parent != null) {
- internalSetSelection(parent);
- return;
- }
- item= null;
-
- } else {
- item.setExpanded(true);
- createChildren(item);
-
- if (item.getItemCount() > 0) {
- // has children: go down
- children= item.getItems();
- internalSetSelection(children[0]);
- return;
- }
-
- while (item != null) {
- children= null;
- TreeItem parent= item.getParentItem();
- if (parent != null)
- children= parent.getItems();
- else
- children= tree.getItems();
-
- if (children != null && children.length > 0) {
- // goto next child
- int index= 0;
- for (; index < children.length; index++)
- if (children[index] == item)
- break;
-
- if (index < children.length-1) {
- // next
- internalSetSelection(children[index+1]);
- return;
- }
- }
-
- // go up
- item= parent;
- }
+ item= parent;
}
}
-
- // at end (or beginning): wrap around
- if (item == null) {
- children= tree.getItems();
- if (children != null && children.length > 0)
- internalSetSelection(children[next ? 0 : children.length-1]);
- }
+
+ return item;
}
private void internalSetSelection(TreeItem ti) {
if (ti != null) {
Object data= ti.getData();
- setSelection(new StructuredSelection(data));
+ setSelection(new StructuredSelection(data), true);
}
}
- //---- private
-
private void syncShowPseudoConflictFilter() {
boolean showPseudoConflicts= Utilities.getBoolean(fCompareConfiguration, CompareConfiguration.SHOW_PSEUDO_CONFLICTS, false);
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java
index 223730ee9..04b5008c4 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java
@@ -150,7 +150,8 @@ public class StructureDiffViewer extends DiffTreeViewer {
if (input instanceof ICompareInput) {
compareInputChanged((ICompareInput) input);
diff();
- expandToLevel(3);
+ //expandToLevel(3);
+ navigate(true);
}
}
diff --git a/bundles/org.eclipse.compare/plugin.properties b/bundles/org.eclipse.compare/plugin.properties
index f6a7961f2..fb96c7492 100644
--- a/bundles/org.eclipse.compare/plugin.properties
+++ b/bundles/org.eclipse.compare/plugin.properties
@@ -39,3 +39,10 @@ action.IgnoreWhiteSpace.label=Ignore White Space
action.IgnoreWhiteSpace.tooltip=Ignore white space where applicable
action.IgnoreWhiteSpace.image=etool16/ignorews_edit.gif
+action.Next.label=Next Difference
+action.Next.tooltip=Go to next difference
+action.Next.image=elcl16/next_nav.gif
+
+action.Previous.label=Previous Difference
+action.Previous.tooltip=Go to previous difference
+action.Previous.image=elcl16/prev_nav.gif
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/build.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/build.properties
index 19daddb9f..c1fa38f46 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/build.properties
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/build.properties
@@ -1,5 +1,5 @@
# VAJ build contribution
-build.includes=doc,icons,plugin.jars,plugin.properties,plugin.xml
+build.includes=build.properties,doc,icons,plugin.jars,plugin.properties,plugin.xml
build.vaj.Eclipse\ Compare=Eclipse Compare
# Eclipse build contribution
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
index f4edaae2c..abd268253 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
@@ -110,7 +110,7 @@ public abstract class CompareEditorInput implements IEditorInput, IPropertyChang
private Object fInput;
private String fTitle= "Compare";
private ListenerList fListenerList= new ListenerList();
-
+ private CompareNavigator fNavigator;
private boolean fDirty= false;
private IPropertyChangeListener fDirtyStateListener;
@@ -144,6 +144,18 @@ public abstract class CompareEditorInput implements IEditorInput, IPropertyChang
* see IAdaptable.getAdapter
*/
public Object getAdapter(Class adapter) {
+ if (CompareNavigator.class.equals(adapter)) {
+ if (fNavigator == null)
+ fNavigator= new CompareNavigator(
+ new CompareViewerSwitchingPane[] {
+ fStructureInputPane,
+ fStructurePane1,
+ fStructurePane2,
+ fContentInputPane
+ }
+ );
+ return fNavigator;
+ }
return null;
}
@@ -327,6 +339,7 @@ public abstract class CompareEditorInput implements IEditorInput, IPropertyChang
public Control createContents(Composite parent) {
fComposite= new Splitter(parent, SWT.VERTICAL);
+ fComposite.setData(this);
final Splitter h= new Splitter(fComposite, SWT.HORIZONTAL);
@@ -431,6 +444,16 @@ public abstract class CompareEditorInput implements IEditorInput, IPropertyChang
fStructureInputPane.setInput(input2);
fContentInputPane.setInput(input2);
}
+
+ //
+ fComposite.setData("Nav",
+ new CompareViewerSwitchingPane[] {
+ fStructureInputPane,
+ fStructurePane1,
+ fStructurePane2,
+ fContentInputPane
+ }
+ );
return fComposite;
}
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
index 82a2c5088..90d4e8f11 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
@@ -580,12 +580,14 @@ public abstract class ContentMergeViewer extends ContentViewer implements IPrope
if (input != null) {
IMergeViewerContentProvider content= getMergeContentProvider();
-
- Object ancestor= content.getAncestorContent(input);
- Object left= content.getLeftContent(input);
- Object right= content.getRightContent(input);
+
+ if (content != null) {
+ Object ancestor= content.getAncestorContent(input);
+ Object left= content.getLeftContent(input);
+ Object right= content.getRightContent(input);
- updateContent(ancestor, left, right);
+ updateContent(ancestor, left, right);
+ }
}
}
@@ -611,7 +613,7 @@ public abstract class ContentMergeViewer extends ContentViewer implements IPrope
}
};
fComposite.setData(CompareUI.COMPARE_VIEWER_TITLE, getTitle());
-
+
hookControl(fComposite); // hook help & dispose listener
fComposite.setLayout(new ContentMergeViewerLayout());
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
index 84c40aa57..a4c2d0b24 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
@@ -53,6 +53,8 @@ import org.eclipse.compare.internal.DocLineComparator;
import org.eclipse.compare.internal.ComparePreferencePage;
import org.eclipse.compare.internal.CompareUIPlugin;
import org.eclipse.compare.internal.MergeViewerAction;
+import org.eclipse.compare.internal.INavigatable;
+import org.eclipse.compare.internal.CompareNavigator;
import org.eclipse.compare.rangedifferencer.RangeDifference;
import org.eclipse.compare.rangedifferencer.RangeDifferencer;
@@ -369,7 +371,7 @@ public class TextMergeViewer extends ContentMergeViewer {
*/
public TextMergeViewer(Composite parent, int style, CompareConfiguration configuration) {
super(style, ResourceBundle.getBundle(BUNDLE_NAME), configuration);
-
+
IPreferenceStore ps= CompareUIPlugin.getDefault().getPreferenceStore();
if (ps != null) {
fPreferenceChangeListener= new IPropertyChangeListener() {
@@ -395,6 +397,13 @@ public class TextMergeViewer extends ContentMergeViewer {
};
buildControl(parent);
+
+ INavigatable nav= new INavigatable() {
+ public boolean gotoDifference(boolean next) {
+ return navigate(next, false, false);
+ }
+ };
+ fComposite.setData(INavigatable.NAVIGATOR_PROPERTY, nav);
}
private void updateFont(IPreferenceStore ps, Control c) {
@@ -579,6 +588,7 @@ public class TextMergeViewer extends ContentMergeViewer {
paintCenter(this, gc);
}
};
+ CompareNavigator.hookNavigation(canvas);
new Resizer(canvas, HORIZONTAL);
return canvas;
}
@@ -614,6 +624,7 @@ public class TextMergeViewer extends ContentMergeViewer {
new KeyAdapter() {
public void keyPressed(KeyEvent e) {
handleSelectionChanged(part);
+ CompareNavigator.handleNavigationKeys(e);
}
}
);
@@ -691,19 +702,21 @@ public class TextMergeViewer extends ContentMergeViewer {
fLeft.setEditable(leftEditable);
// set new documents
- setDocument(fAncestor, ancestor);
-
setDocument(fLeft, left);
fLeftLineCount= fLeft.getLineCount();
setDocument(fRight, right);
fRightLineCount= fRight.getLineCount();
+ setDocument(fAncestor, ancestor);
+
doDiff();
invalidateLines();
updateVScrollBar();
- selectFirstDiff();
+
+ if (ancestor != null || left != null || right != null)
+ selectFirstDiff();
}
private void updateDiffBackground(Diff diff) {
@@ -854,6 +867,12 @@ public class TextMergeViewer extends ContentMergeViewer {
}
tp.setEnabled(enabled);
+ if (fFocusPart == null) {
+ if (enabled) {
+ fFocusPart= tp;
+ fFocusPart.getTextWidget().setFocus();
+ }
+ }
return enabled;
}
@@ -909,8 +928,13 @@ public class TextMergeViewer extends ContentMergeViewer {
fAncestorCanvas.setBounds(x, y, MARGIN_WIDTH, height-scrollbarHeight);
fAncestor.getTextWidget().setBounds(x+MARGIN_WIDTH, y, width-MARGIN_WIDTH, height);
} else {
- if (Utilities.okToUse(fAncestorCanvas))
+ if (Utilities.okToUse(fAncestorCanvas)) {
fAncestorCanvas.setVisible(false);
+ if (fFocusPart == fAncestor) {
+ fFocusPart= fLeft;
+ fFocusPart.getTextWidget().setFocus();
+ }
+ }
if (fAncestor.isControlOkToUse()) {
StyledText t= fAncestor.getTextWidget();
t.setVisible(false);
@@ -1467,7 +1491,7 @@ public class TextMergeViewer extends ContentMergeViewer {
Action a= new Action() {
public void run() {
- navigate(true);
+ navigate(true, true, true);
}
};
Utilities.initAction(a, getResourceBundle(), "action.NextDiff.");
@@ -1476,7 +1500,7 @@ public class TextMergeViewer extends ContentMergeViewer {
a= new Action() {
public void run() {
- navigate(false);
+ navigate(false, true, true);
}
};
Utilities.initAction(a, getResourceBundle(), "action.PrevDiff.");
@@ -1553,7 +1577,11 @@ public class TextMergeViewer extends ContentMergeViewer {
}
private void selectFirstDiff() {
- Diff firstDiff= findNext(fRight, fChangeDiffs, -1, -1);
+ Diff firstDiff= null;
+ if (CompareNavigator.getDirection(fComposite))
+ firstDiff= findNext(fRight, fChangeDiffs, -1, -1, false);
+ else
+ firstDiff= findPrev(fRight, fChangeDiffs, 9999999, 9999999, false);
setCurrentDiff(firstDiff, true);
}
@@ -1888,7 +1916,7 @@ public class TextMergeViewer extends ContentMergeViewer {
/**
*/
- private void navigate(boolean down) {
+ private boolean navigate(boolean down, boolean wrap, boolean deep) {
Diff diff= null;
if (fChangeDiffs != null) {
@@ -1899,27 +1927,31 @@ public class TextMergeViewer extends ContentMergeViewer {
if (part != null) {
Point s= part.getSelectedRange();
if (down)
- diff= findNext(part, fChangeDiffs, s.x, s.x+s.y);
+ diff= findNext(part, fChangeDiffs, s.x, s.x+s.y, deep);
else
- diff= findPrev(part, fChangeDiffs, s.x, s.x+s.y);
+ diff= findPrev(part, fChangeDiffs, s.x, s.x+s.y, deep);
}
}
if (diff == null) {
- Control c= getControl();
- if (Utilities.okToUse(c))
- c.getDisplay().beep();
- if (DEAD_STEP)
- return;
- if (fChangeDiffs.size() > 0) {
- if (down)
- diff= (Diff) fChangeDiffs.get(0);
- else
- diff= (Diff) fChangeDiffs.get(fChangeDiffs.size()-1);
- }
+ if (wrap) {
+ Control c= getControl();
+ if (Utilities.okToUse(c))
+ c.getDisplay().beep();
+ if (DEAD_STEP)
+ return true;
+ if (fChangeDiffs.size() > 0) {
+ if (down)
+ diff= (Diff) fChangeDiffs.get(0);
+ else
+ diff= (Diff) fChangeDiffs.get(fChangeDiffs.size()-1);
+ }
+ } else
+ return true;
}
setCurrentDiff(diff, true);
+ return false;
}
/**
@@ -1939,7 +1971,7 @@ public class TextMergeViewer extends ContentMergeViewer {
return null;
}
- private static Diff findNext(MergeSourceViewer tp, List v, int start, int end) {
+ private static Diff findNext(MergeSourceViewer tp, List v, int start, int end, boolean deep) {
for (int i= 0; i < v.size(); i++) {
Diff diff= (Diff) v.get(i);
Position p= diff.getPosition(tp);
@@ -1947,13 +1979,13 @@ public class TextMergeViewer extends ContentMergeViewer {
int startOffset= p.getOffset();
if (end < startOffset)
return diff;
- if (diff.fDiffs != null) {
+ if (deep && diff.fDiffs != null) {
Diff d= null;
int endOffset= startOffset + p.getLength();
if (start == startOffset && end == endOffset) {
- d= findNext(tp, diff.fDiffs, start, start);
+ d= findNext(tp, diff.fDiffs, start, start, deep);
} else if (end < endOffset) {
- d= findNext(tp, diff.fDiffs, start, end);
+ d= findNext(tp, diff.fDiffs, start, end, deep);
}
if (d != null)
return d;
@@ -1963,7 +1995,7 @@ public class TextMergeViewer extends ContentMergeViewer {
return null;
}
- private static Diff findPrev(MergeSourceViewer tp, List v, int start, int end) {
+ private static Diff findPrev(MergeSourceViewer tp, List v, int start, int end, boolean deep) {
for (int i= v.size()-1; i >= 0; i--) {
Diff diff= (Diff) v.get(i);
Position p= diff.getPosition(tp);
@@ -1972,12 +2004,12 @@ public class TextMergeViewer extends ContentMergeViewer {
int endOffset= startOffset + p.getLength();
if (start > endOffset)
return diff;
- if (diff.fDiffs != null) {
+ if (deep && diff.fDiffs != null) {
Diff d= null;
if (start == startOffset && end == endOffset) {
- d= findPrev(tp, diff.fDiffs, end, end);
+ d= findPrev(tp, diff.fDiffs, end, end, deep);
} else if (start >= startOffset) {
- d= findPrev(tp, diff.fDiffs, start, end);
+ d= findPrev(tp, diff.fDiffs, start, end, deep);
}
if (d != null)
return d;
@@ -2197,7 +2229,7 @@ public class TextMergeViewer extends ContentMergeViewer {
diff.setResolved(true);
if (gotoNext) {
- navigate(true/*, true*/);
+ navigate(true, true, true);
} else {
revealDiff(diff, true);
updateControls();
@@ -2467,5 +2499,4 @@ public class TextMergeViewer extends ContentMergeViewer {
}
return viewPos;
}
-
} \ No newline at end of file
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java
index 36b3ebc2d..63197cd51 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java
@@ -37,6 +37,7 @@ public class BinaryCompareViewer extends AbstractViewer {
fControl= new Text(parent, SWT.NONE);
fControl.setEditable(false);
fControl.setData(CompareUI.COMPARE_VIEWER_TITLE, Utilities.getString(fBundle, "title"));
+ CompareNavigator.hookNavigation(fControl);
}
public Control getControl() {
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java
index 87db063ac..a1b52a9f8 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java
@@ -10,9 +10,11 @@ import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.part.EditorActionBarContributor;
import org.eclipse.compare.CompareConfiguration;
+import org.eclipse.compare.CompareEditorInput;
public class CompareEditorContributor extends EditorActionBarContributor {
@@ -20,18 +22,24 @@ public class CompareEditorContributor extends EditorActionBarContributor {
private IEditorPart fActiveEditorPart= null;
private IgnoreWhiteSpaceAction fIgnoreWhitespace;
+ private NavigationAction fNext;
+ private NavigationAction fPrevious;
//private ShowPseudoConflicts fShowPseudoConflicts;
public CompareEditorContributor() {
ResourceBundle bundle= CompareUIPlugin.getResourceBundle();
fIgnoreWhitespace= new IgnoreWhiteSpaceAction(bundle, null);
+ fNext= new NavigationAction(bundle, true);
+ fPrevious= new NavigationAction(bundle, false);
//fShowPseudoConflicts= new ShowPseudoConflicts(bundle, null);
}
public void contributeToToolBar(IToolBarManager tbm) {
tbm.add(new Separator());
tbm.add(fIgnoreWhitespace);
+ tbm.add(fNext);
+ tbm.add(fPrevious);
//tbm.add(fShowPseudoConflicts);
}
@@ -39,6 +47,15 @@ public class CompareEditorContributor extends EditorActionBarContributor {
if (fActiveEditorPart != targetEditor) {
fActiveEditorPart= targetEditor;
+
+ if (fActiveEditorPart != null) {
+ IEditorInput input= fActiveEditorPart.getEditorInput();
+ if (input instanceof CompareEditorInput) {
+ CompareEditorInput compareInput= (CompareEditorInput) input;
+ fNext.setCompareEditorInput(compareInput);
+ fPrevious.setCompareEditorInput(compareInput);
+ }
+ }
if (targetEditor instanceof CompareEditor) {
CompareEditor editor= (CompareEditor) targetEditor;
@@ -46,7 +63,7 @@ public class CompareEditorContributor extends EditorActionBarContributor {
CompareConfiguration cc= editor.getCompareConfiguration();
fIgnoreWhitespace.setCompareConfiguration(cc);
- //fShowPseudoConflicts.setCompareConfiguration(cc);
+ //fShowPseudoConflicts.setCompareConfiguration(cc);
}
}
}
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java
new file mode 100644
index 000000000..1fad74054
--- /dev/null
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java
@@ -0,0 +1,108 @@
+/*
+ * (c) Copyright IBM Corp. 2000, 2001.
+ * All Rights Reserved.
+ */
+package org.eclipse.compare.internal;
+
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.compare.CompareEditorInput;
+
+
+public class CompareNavigator {
+
+ private boolean fLastDirection= true;
+ private CompareViewerSwitchingPane[] fPanes;
+
+ public CompareNavigator(CompareViewerSwitchingPane[] panes) {
+ fPanes= panes;
+ }
+
+ public void selectChange(boolean next) {
+
+ fLastDirection= next;
+
+ // find most down stream Pane
+ int n= 0;
+ INavigatable[] navigators= new INavigatable[4];
+ for (int i= 0; i < fPanes.length; i++) {
+ navigators[n]= getNavigator(fPanes[i]);
+ if (navigators[n] != null)
+ n++;
+ }
+
+ while (n > 0) {
+ n--;
+ if (!navigators[n].gotoDifference(next))
+ break;
+ }
+ }
+
+ private static INavigatable getNavigator(CompareViewerSwitchingPane pane) {
+ if (pane == null)
+ return null;
+ if (pane.isEmpty())
+ return null;
+ Viewer viewer= pane.getViewer();
+ if (viewer == null)
+ return null;
+ Control control= viewer.getControl();
+ if (control == null)
+ return null;
+ Object data= control.getData(INavigatable.NAVIGATOR_PROPERTY);
+ if (data instanceof INavigatable)
+ return (INavigatable) data;
+ return null;
+ }
+
+ public static void hookNavigation(final Control c) {
+ c.addKeyListener(
+ new KeyAdapter() {
+ public void keyPressed(KeyEvent e) {
+ handleNavigationKeys(e);
+ }
+ }
+ );
+ }
+
+ public static void handleNavigationKeys(KeyEvent e) {
+ if (e.character == 14 || e.character == 16) { // next
+ if (e.widget instanceof Control) {
+ CompareNavigator nav= findNavigator((Control)e.widget);
+ if (nav != null)
+ nav.selectChange(e.character == 14);
+ }
+ }
+ }
+
+ private static CompareNavigator findNavigator(Control c) {
+ while (c != null) {
+ Object data= c.getData();
+ if (data instanceof CompareEditorInput) {
+ CompareEditorInput cei= (CompareEditorInput) data;
+ Object adapter= cei.getAdapter(CompareNavigator.class);
+ if (adapter instanceof CompareNavigator)
+ return (CompareNavigator)adapter;
+ }
+ c= c.getParent();
+ }
+ return null;
+ }
+
+ private boolean getLastDirection() {
+ boolean last= fLastDirection;
+ fLastDirection= true;
+ return last;
+ }
+
+ public static boolean getDirection(Control c) {
+ CompareNavigator nav= findNavigator(c);
+ if (nav != null)
+ return nav.getLastDirection();
+ return true;
+ }
+}
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java
new file mode 100644
index 000000000..a84cbad97
--- /dev/null
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java
@@ -0,0 +1,15 @@
+/*
+ * (c) Copyright IBM Corp. 2000, 2001.
+ * All Rights Reserved.
+ */
+package org.eclipse.compare.internal;
+
+public interface INavigatable {
+
+ static final String NAVIGATOR_PROPERTY= "org.eclipse.compare.internal.Navigator";
+
+ /**
+ * Returns true if at end or beginning.
+ */
+ boolean gotoDifference(boolean next);
+}
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java
index 4264803b8..813bdbcf1 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java
@@ -62,8 +62,14 @@ public class ImageMergeViewer extends ContentMergeViewer {
public void createControls(Composite composite) {
fAncestor= new ImageCanvas(composite, SWT.NONE);
+ CompareNavigator.hookNavigation(fAncestor);
+
fLeft= new ImageCanvas(composite, SWT.NONE);
+ CompareNavigator.hookNavigation(fLeft);
+ fLeft.setFocus();
+
fRight= new ImageCanvas(composite, SWT.NONE);
+ CompareNavigator.hookNavigation(fRight);
}
private static void setInput(ImageCanvas canvas, Object input) {
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java
index 1f117d526..b58dcf4d3 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java
@@ -284,6 +284,8 @@ public class MergeSourceViewer extends SourceViewer
MergeViewerAction action= (MergeViewerAction) fActions.get(actionId);
if (action == null) {
action= createAction(actionId);
+ if (action == null)
+ return null;
if (action.isContentDependent())
addTextListener(this);
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/NavigationAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/NavigationAction.java
new file mode 100644
index 000000000..93e7a9bb7
--- /dev/null
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/NavigationAction.java
@@ -0,0 +1,33 @@
+/*
+ * (c) Copyright IBM Corp. 2000, 2001.
+ * All Rights Reserved.
+ */
+package org.eclipse.compare.internal;
+
+import java.util.ResourceBundle;
+import org.eclipse.jface.action.Action;
+import org.eclipse.compare.CompareEditorInput;
+
+
+public class NavigationAction extends Action {
+
+ private boolean fNext;
+ private CompareEditorInput fCompareEditorInput;
+
+ public NavigationAction(ResourceBundle bundle, boolean next) {
+ Utilities.initAction(this, bundle, next ? "action.Next." : "action.Previous.");
+ fNext= next;
+ }
+
+ public void run() {
+ if (fCompareEditorInput != null) {
+ Object adapter= fCompareEditorInput.getAdapter(CompareNavigator.class);
+ if (adapter instanceof CompareNavigator)
+ ((CompareNavigator)adapter).selectChange(fNext);
+ }
+ }
+
+ public void setCompareEditorInput(CompareEditorInput input) {
+ fCompareEditorInput= input;
+ }
+} \ No newline at end of file
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java
index e1e8047bf..d2b7adf6d 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java
@@ -21,7 +21,6 @@ import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.compare.internal.*;
import org.eclipse.compare.*;
-
/**
* A tree viewer that works on objects implementing
* the <code>IDiffContainer</code> and <code>IDiffElement</code> interfaces.
@@ -127,7 +126,7 @@ public class DiffTreeViewer extends TreeViewer {
return false;
}
}
-
+
private ResourceBundle fBundle;
private CompareConfiguration fCompareConfiguration;
private boolean fLeftIsLocal;
@@ -164,9 +163,19 @@ public class DiffTreeViewer extends TreeViewer {
private void initialize(CompareConfiguration configuration) {
+ Control tree= getControl();
+
+ CompareNavigator.hookNavigation(tree);
+
+ INavigatable nav= new INavigatable() {
+ public boolean gotoDifference(boolean next) {
+ return internalNavigate(next);
+ }
+ };
+ tree.setData(INavigatable.NAVIGATOR_PROPERTY, nav);
+
fLeftIsLocal= Utilities.getBoolean(configuration, "LEFT_IS_LOCAL", false);
- Control tree= getControl();
tree.setData(CompareUI.COMPARE_VIEWER_TITLE, getTitle());
@@ -301,15 +310,18 @@ public class DiffTreeViewer extends TreeViewer {
protected void inputChanged(Object in, Object oldInput) {
super.inputChanged(in, oldInput);
- expandToLevel(2);
- updateActions();
+ //expandToLevel(2);
-// System.out.println("inputChanged: " + in);
-// if (fCompareConfiguration != null) {
-// System.out.println(" left: " + fCompareConfiguration.isLeftEditable());
-// System.out.println(" right: " + fCompareConfiguration.isRightEditable());
+// Control c= getControl();
+// Display display= c.getDisplay();
+// display.asyncExec(
+// new Runnable() {
+// public void run() {
+ navigate(true);
+ updateActions();
+// }
// }
-
+// );
}
/**
@@ -356,21 +368,21 @@ public class DiffTreeViewer extends TreeViewer {
// Utilities.initAction(fCopyRightToLeftAction, fBundle, "action.TakeRight.");
// toolbarManager.appendToGroup("merge", fCopyRightToLeftAction);
- fNextAction= new Action() {
- public void run() {
- navigate(true);
- }
- };
- Utilities.initAction(fNextAction, fBundle, "action.NextDiff.");
- toolbarManager.appendToGroup("navigation", fNextAction);
-
- fPreviousAction= new Action() {
- public void run() {
- navigate(false);
- }
- };
- Utilities.initAction(fPreviousAction, fBundle, "action.PrevDiff.");
- toolbarManager.appendToGroup("navigation", fPreviousAction);
+// fNextAction= new Action() {
+// public void run() {
+// navigate(true);
+// }
+// };
+// Utilities.initAction(fNextAction, fBundle, "action.NextDiff.");
+// toolbarManager.appendToGroup("navigation", fNextAction);
+//
+// fPreviousAction= new Action() {
+// public void run() {
+// navigate(false);
+// }
+// };
+// Utilities.initAction(fPreviousAction, fBundle, "action.PrevDiff.");
+// toolbarManager.appendToGroup("navigation", fPreviousAction);
}
/**
@@ -432,117 +444,147 @@ public class DiffTreeViewer extends TreeViewer {
*
* @param next if <code>true</code> the next node is selected, otherwise the previous node
*/
- protected void navigate(boolean next) {
+ protected void navigate(boolean next) {
+ internalNavigate(next);
+ }
+
+ //---- private
+
+ /**
+ * Selects the next (or previous) node of the current selection.
+ * If there is no current selection the first (last) node in the tree is selected.
+ * Wraps around at end or beginning.
+ * Clients may override.
+ *
+ * @param next if <code>true</code> the next node is selected, otherwise the previous node
+ * @return <code>true</code> if at end (or beginning)
+ */
+ private boolean internalNavigate(boolean next) {
Control c= getControl();
if (!(c instanceof Tree))
- return;
+ return false;
Tree tree= (Tree) c;
- TreeItem children[]= tree.getSelection();
TreeItem item= null;
-
+ TreeItem children[]= tree.getSelection();
if (children != null && children.length > 0)
item= children[0];
+ if (item == null) {
+ children= tree.getItems();
+ if (children != null && children.length > 0) {
+ item= children[0];
+ if (item != null && item.getItemCount() <= 0) {
+ internalSetSelection(item);
+ return false;
+ }
+ }
+ }
+ while (true) {
+ item= findNextPrev(item, next);
+ if (item == null)
+ break;
+ if (item.getItemCount() <= 0)
+ break;
+ }
+
if (item != null) {
- if (!next) {
+ internalSetSelection(item);
+ return false;
+ }
+ return true;
+ }
+
+ private TreeItem findNextPrev(TreeItem item, boolean next) {
+
+ if (item == null)
+ return null;
+
+ TreeItem children[]= null;
+
+ if (!next) {
+
+ TreeItem parent= item.getParentItem();
+ if (parent != null)
+ children= parent.getItems();
+ else
+ children= item.getParent().getItems();
+
+ if (children != null && children.length > 0) {
+ // goto previous child
+ int index= 0;
+ for (; index < children.length; index++)
+ if (children[index] == item)
+ break;
+
+ if (index > 0) {
+
+ item= children[index-1];
+
+ while (true) {
+ int n= item.getItemCount();
+ if (n <= 0)
+ break;
+
+ item.setExpanded(true);
+ item= item.getItems()[n-1];
+ }
+
+ // previous
+ return item;
+ }
+ }
+
+ // go up
+ return parent;
+
+ } else {
+ item.setExpanded(true);
+ createChildren(item);
+
+ if (item.getItemCount() > 0) {
+ // has children: go down
+ children= item.getItems();
+ return children[0];
+ }
+ while (item != null) {
+ children= null;
TreeItem parent= item.getParentItem();
if (parent != null)
children= parent.getItems();
else
- children= tree.getItems();
+ children= item.getParent().getItems();
if (children != null && children.length > 0) {
- // goto previous child
+ // goto next child
int index= 0;
for (; index < children.length; index++)
if (children[index] == item)
break;
- if (index > 0) {
-
- item= children[index-1];
-
- while (true) {
- int n= item.getItemCount();
- if (n <= 0)
- break;
-
- item.setExpanded(true);
- item= item.getItems()[n-1];
- }
-
- // previous
- internalSetSelection(item);
- return;
+ if (index < children.length-1) {
+ // next
+ return children[index+1];
}
}
// go up
- if (parent != null) {
- internalSetSelection(parent);
- return;
- }
- item= null;
-
- } else {
- item.setExpanded(true);
- createChildren(item);
-
- if (item.getItemCount() > 0) {
- // has children: go down
- children= item.getItems();
- internalSetSelection(children[0]);
- return;
- }
-
- while (item != null) {
- children= null;
- TreeItem parent= item.getParentItem();
- if (parent != null)
- children= parent.getItems();
- else
- children= tree.getItems();
-
- if (children != null && children.length > 0) {
- // goto next child
- int index= 0;
- for (; index < children.length; index++)
- if (children[index] == item)
- break;
-
- if (index < children.length-1) {
- // next
- internalSetSelection(children[index+1]);
- return;
- }
- }
-
- // go up
- item= parent;
- }
+ item= parent;
}
}
-
- // at end (or beginning): wrap around
- if (item == null) {
- children= tree.getItems();
- if (children != null && children.length > 0)
- internalSetSelection(children[next ? 0 : children.length-1]);
- }
+
+ return item;
}
private void internalSetSelection(TreeItem ti) {
if (ti != null) {
Object data= ti.getData();
- setSelection(new StructuredSelection(data));
+ setSelection(new StructuredSelection(data), true);
}
}
- //---- private
-
private void syncShowPseudoConflictFilter() {
boolean showPseudoConflicts= Utilities.getBoolean(fCompareConfiguration, CompareConfiguration.SHOW_PSEUDO_CONFLICTS, false);
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java
index 223730ee9..04b5008c4 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java
@@ -150,7 +150,8 @@ public class StructureDiffViewer extends DiffTreeViewer {
if (input instanceof ICompareInput) {
compareInputChanged((ICompareInput) input);
diff();
- expandToLevel(3);
+ //expandToLevel(3);
+ navigate(true);
}
}
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.properties
index f6a7961f2..fb96c7492 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.properties
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.properties
@@ -39,3 +39,10 @@ action.IgnoreWhiteSpace.label=Ignore White Space
action.IgnoreWhiteSpace.tooltip=Ignore white space where applicable
action.IgnoreWhiteSpace.image=etool16/ignorews_edit.gif
+action.Next.label=Next Difference
+action.Next.tooltip=Go to next difference
+action.Next.image=elcl16/next_nav.gif
+
+action.Previous.label=Previous Difference
+action.Previous.tooltip=Go to previous difference
+action.Previous.image=elcl16/prev_nav.gif
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/readme_compare.html b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/readme_compare.html
index b17dffc4d..5b7640294 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/readme_compare.html
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/readme_compare.html
@@ -11,7 +11,7 @@
<h1>
Eclipse Platform Release Notes<br>
Compare (including example)</h1>
-Eclipse SDK Build 116 - May 31, 2001
+Eclipse SDK Build 116 - June 1, 2001
<h2>
What's new in this drop</h2>
@@ -35,6 +35,8 @@ Problem reports fixed</h2>
1GEJAJ1: ITPJUI:WIN2000 - Can't compare large files like Parser.java<br>
1GEHYZZ: ITPJUI:WIN2000 - Smoke 114: strange behaviour in "Replace from Local Histroy"<br>
1GELRZV: ITPUI:WINNT - Remove Copy actions from structure compare viewers<br>
+1GEK2LR: ITPUI:ALL - Compare: stepping in one resources could take you to next<br>
+1GEK2NH: ITPUI:ALL - Compare: cntrl-N for stepping<br>
<h2>
Problem reports closed</h2>
@@ -43,6 +45,8 @@ Problem reports closed</h2>
1GAZIF2: ITPJUI:Linux - Compare viewer: lines rendered through text<br>
1GAZDJ6: ITPJUI:WINNT - SH: Show Next Diff buttons not working sometimes<br>
1GDUAP8: ITPVCM:WINNT - IllegalArgumentException in Compare (Cachup / Release)<br>
+1GE2510: ITPJUI:WIN2000 - Compare usability<br>
+1GE6XFM: ITPJUI:ALL - DCR: Add some new buttons to compare view to scan changes in varying granularity<br>
<h1>
<hr WIDTH="100%"></h1>
diff --git a/bundles/org.eclipse.compare/readme_compare.html b/bundles/org.eclipse.compare/readme_compare.html
index b17dffc4d..5b7640294 100644
--- a/bundles/org.eclipse.compare/readme_compare.html
+++ b/bundles/org.eclipse.compare/readme_compare.html
@@ -11,7 +11,7 @@
<h1>
Eclipse Platform Release Notes<br>
Compare (including example)</h1>
-Eclipse SDK Build 116 - May 31, 2001
+Eclipse SDK Build 116 - June 1, 2001
<h2>
What's new in this drop</h2>
@@ -35,6 +35,8 @@ Problem reports fixed</h2>
1GEJAJ1: ITPJUI:WIN2000 - Can't compare large files like Parser.java<br>
1GEHYZZ: ITPJUI:WIN2000 - Smoke 114: strange behaviour in "Replace from Local Histroy"<br>
1GELRZV: ITPUI:WINNT - Remove Copy actions from structure compare viewers<br>
+1GEK2LR: ITPUI:ALL - Compare: stepping in one resources could take you to next<br>
+1GEK2NH: ITPUI:ALL - Compare: cntrl-N for stepping<br>
<h2>
Problem reports closed</h2>
@@ -43,6 +45,8 @@ Problem reports closed</h2>
1GAZIF2: ITPJUI:Linux - Compare viewer: lines rendered through text<br>
1GAZDJ6: ITPJUI:WINNT - SH: Show Next Diff buttons not working sometimes<br>
1GDUAP8: ITPVCM:WINNT - IllegalArgumentException in Compare (Cachup / Release)<br>
+1GE2510: ITPJUI:WIN2000 - Compare usability<br>
+1GE6XFM: ITPJUI:ALL - DCR: Add some new buttons to compare view to scan changes in varying granularity<br>
<h1>
<hr WIDTH="100%"></h1>

Back to the top