Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model')
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ChildrenCountUpdate.java112
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ChildrenUpdate.java54
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementCompareRequest.java80
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementMementoRequest.java30
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/FilterTransform.java10
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/HasChildrenUpdate.java62
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/IInternalTreeModelViewer.java524
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelContentProvider.java434
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelLabelProvider.java82
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java1428
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java2580
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/LabelUpdate.java2
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/MementoUpdate.java12
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/SubTreeModelViewer.java964
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TimeTriggeredProgressMonitorDialog.java130
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java2010
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelLabelProvider.java268
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerAdapterService.java128
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerInputUpdate.java146
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerStateTracker.java2086
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerUpdateMonitor.java242
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualCopyToClipboardActionDelegate.java240
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualFindAction.java282
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ICheckUpdate.java24
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ICheckboxModelProxy.java34
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IElementContentProvider.java2
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IElementMementoProvider.java4
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ILabelUpdate.java58
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelProxy.java4
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelProxy2.java30
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelSelectionPolicy.java2
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IPresentationContext.java154
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IStateUpdateListener.java30
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IStatusMonitor.java30
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ITreeModelViewer.java438
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IViewerUpdate.java42
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IVirtualItemListener.java30
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IVirtualItemValidator.java28
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ModelDelta.java306
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/PresentationContext.java252
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/TreeModelViewer.java16
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/TreeModelViewerFilter.java16
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ViewerInputService.java34
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/VirtualItem.java996
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/VirtualTree.java332
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/VirtualTreeModelViewer.java318
46 files changed, 7543 insertions, 7543 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ChildrenCountUpdate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ChildrenCountUpdate.java
index 940d18bf2..b77fcc474 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ChildrenCountUpdate.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ChildrenCountUpdate.java
@@ -28,9 +28,9 @@ import org.eclipse.jface.viewers.TreePath;
*/
class ChildrenCountUpdate extends ViewerUpdateMonitor implements IChildrenCountUpdate {
- /**
- * Child count result.
- */
+ /**
+ * Child count result.
+ */
private int fCount = 0;
/**
@@ -39,18 +39,18 @@ class ChildrenCountUpdate extends ViewerUpdateMonitor implements IChildrenCountU
*/
private List<ViewerUpdateMonitor> fBatchedRequests = null;
- /**
- * Flag whether filtering is enabled in viewer. If filtering is enabled, then a
- * children update is performed on child elements to filter them as part of the
- * child count calculation.
- */
+ /**
+ * Flag whether filtering is enabled in viewer. If filtering is enabled, then a
+ * children update is performed on child elements to filter them as part of the
+ * child count calculation.
+ */
private boolean fShouldFilter = false;
/**
* Children indexes which are currently filtered. When updating child count, also need
* to verify that currently filtered children are still filtered.
*/
- private int[] fFilteredChildren = null;
+ private int[] fFilteredChildren = null;
/**
* Children update used to filter children.
@@ -81,42 +81,42 @@ class ChildrenCountUpdate extends ViewerUpdateMonitor implements IChildrenCountU
@Override
protected synchronized void scheduleViewerUpdate() {
- // If filtering is enabled perform child update on all children in order to update
- // viewer filters.
+ // If filtering is enabled perform child update on all children in order to update
+ // viewer filters.
if (fShouldFilter || fFilteredChildren != null) {
- if (fChildrenUpdate == null) {
- int startIdx;
- int count;
- if (fShouldFilter) {
- startIdx = 0;
- count = getCount();
- } else {
- startIdx = fFilteredChildren[0];
- int endIdx = fFilteredChildren[fFilteredChildren.length - 1];
- count = endIdx - startIdx + 1;
- }
-
- fChildrenUpdate = new ChildrenUpdate(getContentProvider(), getViewerInput(), getElementPath(), getElement(), startIdx, count, getElementContentProvider()) {
- @Override
+ if (fChildrenUpdate == null) {
+ int startIdx;
+ int count;
+ if (fShouldFilter) {
+ startIdx = 0;
+ count = getCount();
+ } else {
+ startIdx = fFilteredChildren[0];
+ int endIdx = fFilteredChildren[fFilteredChildren.length - 1];
+ count = endIdx - startIdx + 1;
+ }
+
+ fChildrenUpdate = new ChildrenUpdate(getContentProvider(), getViewerInput(), getElementPath(), getElement(), startIdx, count, getElementContentProvider()) {
+ @Override
protected void performUpdate() {
- performUpdate(true);
- ChildrenCountUpdate.super.scheduleViewerUpdate();
- }
+ performUpdate(true);
+ ChildrenCountUpdate.super.scheduleViewerUpdate();
+ }
- @Override
+ @Override
protected void scheduleViewerUpdate() {
execInDisplayThread(() -> {
if (!getContentProvider().isDisposed() && !isCanceled()) {
performUpdate();
}
});
- }
- };
+ }
+ };
execInDisplayThread(() -> fChildrenUpdate.startRequest());
- return;
- }
+ return;
+ }
} else {
- super.scheduleViewerUpdate();
+ super.scheduleViewerUpdate();
}
}
@@ -137,9 +137,9 @@ class ChildrenCountUpdate extends ViewerUpdateMonitor implements IChildrenCountU
// Child 0 is automatically updated by the tree at the same time that the child count is requested. Therefore,
// If this child count update filtered out this element, it needs to be updated again.
if (fShouldFilter && getContentProvider().isFiltered(elementPath, 0)) {
- getContentProvider().updateElement(elementPath, 0);
+ getContentProvider().updateElement(elementPath, 0);
}
- getContentProvider().getViewer().setChildCount(elementPath, viewCount);
+ getContentProvider().getViewer().setChildCount(elementPath, viewCount);
getContentProvider().getStateTracker().restorePendingStateOnUpdate(getElementPath(), -1, true, true, false);
}
@@ -192,16 +192,16 @@ class ChildrenCountUpdate extends ViewerUpdateMonitor implements IChildrenCountU
@Override
boolean containsUpdate(TreePath path) {
- if (getElementPath().equals(path)) {
- return true;
- } else if (fBatchedRequests != null) {
- for (int i = 0; i < fBatchedRequests.size(); i++) {
- if (fBatchedRequests.get(i).getElementPath().equals(path)) {
- return true;
- }
- }
- }
- return false;
+ if (getElementPath().equals(path)) {
+ return true;
+ } else if (fBatchedRequests != null) {
+ for (int i = 0; i < fBatchedRequests.size(); i++) {
+ if (fBatchedRequests.get(i).getElementPath().equals(path)) {
+ return true;
+ }
+ }
+ }
+ return false;
}
@Override
@@ -219,19 +219,19 @@ class ChildrenCountUpdate extends ViewerUpdateMonitor implements IChildrenCountU
}
int getCount() {
- return fCount;
+ return fCount;
}
- @Override
+ @Override
protected boolean doEquals(ViewerUpdateMonitor update) {
- return
- update instanceof ChildrenCountUpdate &&
- getViewerInput().equals(update.getViewerInput()) &&
- getElementPath().equals(update.getElementPath());
- }
+ return
+ update instanceof ChildrenCountUpdate &&
+ getViewerInput().equals(update.getViewerInput()) &&
+ getElementPath().equals(update.getElementPath());
+ }
- @Override
+ @Override
protected int doHashCode() {
- return getClass().hashCode() + getViewerInput().hashCode() + getElementPath().hashCode();
- }
+ return getClass().hashCode() + getViewerInput().hashCode() + getElementPath().hashCode();
+ }
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ChildrenUpdate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ChildrenUpdate.java
index 8819290ea..0a29af029 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ChildrenUpdate.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ChildrenUpdate.java
@@ -66,26 +66,26 @@ public class ChildrenUpdate extends ViewerUpdateMonitor implements IChildrenUpda
int viewIndex = provider.modelToViewIndex(elementPath, modelIndex);
if (provider.shouldFilter(elementPath, element)) {
if (provider.addFilteredIndex(elementPath, modelIndex, element)) {
- if (!updateFilterOnly) {
- if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
- DebugUIPlugin.trace("REMOVE(" + getElement() + ", modelIndex: " + modelIndex + " viewIndex: " + viewIndex + ", " + element + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
- }
- viewer.remove(elementPath, viewIndex);
- }
+ if (!updateFilterOnly) {
+ if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
+ DebugUIPlugin.trace("REMOVE(" + getElement() + ", modelIndex: " + modelIndex + " viewIndex: " + viewIndex + ", " + element + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+ }
+ viewer.remove(elementPath, viewIndex);
+ }
}
} else {
if (provider.isFiltered(elementPath, modelIndex)) {
provider.clearFilteredChild(elementPath, modelIndex);
- if (!updateFilterOnly) {
+ if (!updateFilterOnly) {
int insertIndex = provider.modelToViewIndex(elementPath, modelIndex);
if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER) {
DebugUIPlugin.trace("insert(" + getElement() + ", modelIndex: " + modelIndex + " insertIndex: " + insertIndex + ", " + element + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
}
viewer.insert(elementPath, element, insertIndex);
- }
+ }
} else if (!updateFilterOnly){
- if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
- DebugUIPlugin.trace("replace(" + getElement() + ", modelIndex: " + modelIndex + " viewIndex: " + viewIndex + ", " + element + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+ if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
+ DebugUIPlugin.trace("replace(" + getElement() + ", modelIndex: " + modelIndex + " viewIndex: " + viewIndex + ", " + element + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
}
viewer.replace(elementPath, viewIndex, element);
}
@@ -149,8 +149,8 @@ public class ChildrenUpdate extends ViewerUpdateMonitor implements IChildrenUpda
@Override
boolean containsUpdate(TreePath path) {
- return getElementPath().equals(path);
- }
+ return getElementPath().equals(path);
+ }
@Override
public int getLength() {
@@ -201,24 +201,24 @@ public class ChildrenUpdate extends ViewerUpdateMonitor implements IChildrenUpda
}
Object[] getElements() {
- return fElements;
+ return fElements;
}
- @Override
+ @Override
protected boolean doEquals(ViewerUpdateMonitor update) {
- return
- update instanceof ChildrenUpdate &&
- ((ChildrenUpdate)update).getOffset() == getOffset() &&
- ((ChildrenUpdate)update).getLength() == getLength() &&
- getViewerInput().equals(update.getViewerInput()) &&
- getElementPath().equals(update.getElementPath());
- }
-
- @Override
+ return
+ update instanceof ChildrenUpdate &&
+ ((ChildrenUpdate)update).getOffset() == getOffset() &&
+ ((ChildrenUpdate)update).getLength() == getLength() &&
+ getViewerInput().equals(update.getViewerInput()) &&
+ getElementPath().equals(update.getElementPath());
+ }
+
+ @Override
protected int doHashCode() {
- return (int)Math.pow(
- (getClass().hashCode() + getViewerInput().hashCode() + getElementPath().hashCode()) * (getOffset() + 2),
- getLength() + 2);
- }
+ return (int)Math.pow(
+ (getClass().hashCode() + getViewerInput().hashCode() + getElementPath().hashCode()) * (getOffset() + 2),
+ getLength() + 2);
+ }
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementCompareRequest.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementCompareRequest.java
index 25d737dad..76f30f905 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementCompareRequest.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementCompareRequest.java
@@ -26,30 +26,30 @@ import org.eclipse.ui.IMemento;
public class ElementCompareRequest extends MementoUpdate implements IElementCompareRequest {
private boolean fEqual;
- private final int fModelIndex;
+ private final int fModelIndex;
private ModelDelta fDelta;
- private boolean fKnowsHasChildren;
- private boolean fKnowsChildCount;
- private boolean fCheckChildrenRealized;
-
-
- /**
- * @param provider the content provider to use for the update
- * @param viewerInput the current input
- * @param element the element to update
- * @param elementPath the path of the element to update
- * @param memento Memento to encode result into
- * @param delta Delta to write the result comparison into.
- * @param modelIndex Index of element to compare.
- * @param knowsHasChildren Flag indicating whether provider knows the has
- * children state of element.
- * @param knowsChildCount Flag indicating whether provider knows the
- * child count state of element.
- * @param checkChildrenRealized Flag indicating if any realized children should be checked
- */
+ private boolean fKnowsHasChildren;
+ private boolean fKnowsChildCount;
+ private boolean fCheckChildrenRealized;
+
+
+ /**
+ * @param provider the content provider to use for the update
+ * @param viewerInput the current input
+ * @param element the element to update
+ * @param elementPath the path of the element to update
+ * @param memento Memento to encode result into
+ * @param delta Delta to write the result comparison into.
+ * @param modelIndex Index of element to compare.
+ * @param knowsHasChildren Flag indicating whether provider knows the has
+ * children state of element.
+ * @param knowsChildCount Flag indicating whether provider knows the
+ * child count state of element.
+ * @param checkChildrenRealized Flag indicating if any realized children should be checked
+ */
public ElementCompareRequest(TreeModelContentProvider provider, Object viewerInput, Object element,
- TreePath elementPath, IMemento memento, ModelDelta delta, int modelIndex,
- boolean knowsHasChildren, boolean knowsChildCount, boolean checkChildrenRealized)
+ TreePath elementPath, IMemento memento, ModelDelta delta, int modelIndex,
+ boolean knowsHasChildren, boolean knowsChildCount, boolean checkChildrenRealized)
{
super(provider, viewerInput, provider.getPresentationContext(), element, elementPath, memento);
fProvider = provider;
@@ -67,21 +67,21 @@ public class ElementCompareRequest extends MementoUpdate implements IElementComp
@Override
public void done() {
- ITreeModelViewer viewer = getContentProvider().getViewer();
- if (viewer == null)
+ ITreeModelViewer viewer = getContentProvider().getViewer();
+ if (viewer == null)
{
return; // disposed
}
- if (viewer.getDisplay().getThread() == Thread.currentThread()) {
- fProvider.getStateTracker().compareFinished(ElementCompareRequest.this, fDelta);
- } else {
+ if (viewer.getDisplay().getThread() == Thread.currentThread()) {
+ fProvider.getStateTracker().compareFinished(ElementCompareRequest.this, fDelta);
+ } else {
viewer.getDisplay().asyncExec(() -> {
if (getContentProvider().isDisposed()) {
return;
}
fProvider.getStateTracker().compareFinished(ElementCompareRequest.this, fDelta);
});
- }
+ }
}
public boolean isEqual() {
@@ -113,20 +113,20 @@ public class ElementCompareRequest extends MementoUpdate implements IElementComp
return fKnowsChildCount;
}
- void setCheckChildrenRealized(boolean checkChildrenRealized) {
- fCheckChildrenRealized = checkChildrenRealized;
- }
+ void setCheckChildrenRealized(boolean checkChildrenRealized) {
+ fCheckChildrenRealized = checkChildrenRealized;
+ }
- boolean checkChildrenRealized() {
- return fCheckChildrenRealized;
- }
+ boolean checkChildrenRealized() {
+ return fCheckChildrenRealized;
+ }
- @Override
+ @Override
public String toString() {
- StringBuilder buf = new StringBuilder();
- buf.append("IElementCompareRequest: "); //$NON-NLS-1$
- buf.append(getElement());
- return buf.toString();
- }
+ StringBuilder buf = new StringBuilder();
+ buf.append("IElementCompareRequest: "); //$NON-NLS-1$
+ buf.append(getElement());
+ return buf.toString();
+ }
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementMementoRequest.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementMementoRequest.java
index 7b3c8e73b..d3887179a 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementMementoRequest.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementMementoRequest.java
@@ -32,11 +32,11 @@ class ElementMementoRequest extends MementoUpdate implements IElementMementoRequ
private ModelDelta fDelta;
/**
- * @param provider the content provider to use for the update
- * @param viewerInput the current input
- * @param collector Collector to report the result to
- * @param element the element to update
- * @param elementPath the path of the element to update
+ * @param provider the content provider to use for the update
+ * @param viewerInput the current input
+ * @param collector Collector to report the result to
+ * @param element the element to update
+ * @param elementPath the path of the element to update
* @param memento Memento to encode result into
* @param delta Delta to write the result comparison into.
*/
@@ -63,22 +63,22 @@ class ElementMementoRequest extends MementoUpdate implements IElementMementoRequ
}
private void doComplete() {
- if (getContentProvider().isDisposed()) {
+ if (getContentProvider().isDisposed()) {
return;
}
- if (!isCanceled() && (getStatus() == null || getStatus().isOK())) {
- // replace the element with a memento
- fDelta.setElement(getMemento());
- }
- fManager.requestComplete(ElementMementoRequest.this);
+ if (!isCanceled() && (getStatus() == null || getStatus().isOK())) {
+ // replace the element with a memento
+ fDelta.setElement(getMemento());
+ }
+ fManager.requestComplete(ElementMementoRequest.this);
}
@Override
public String toString() {
- StringBuilder buf = new StringBuilder();
- buf.append("IElementMementoRequest: "); //$NON-NLS-1$
- buf.append(getElement());
- return buf.toString();
+ StringBuilder buf = new StringBuilder();
+ buf.append("IElementMementoRequest: "); //$NON-NLS-1$
+ buf.append(getElement());
+ return buf.toString();
}
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/FilterTransform.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/FilterTransform.java
index f43a6dd9b..60c8125bd 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/FilterTransform.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/FilterTransform.java
@@ -375,11 +375,11 @@ public class FilterTransform {
}
public int indexOfFilteredElement(TreePath parentPath, Object element) {
- Node parentNode = root.find(parentPath, 0);
- if (parentNode == null) {
- return -1;
- }
- return parentNode.indexOfFilteredElement(element);
+ Node parentNode = root.find(parentPath, 0);
+ if (parentNode == null) {
+ return -1;
+ }
+ return parentNode.indexOfFilteredElement(element);
}
/**
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/HasChildrenUpdate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/HasChildrenUpdate.java
index 808f66e5a..b05729bfa 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/HasChildrenUpdate.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/HasChildrenUpdate.java
@@ -32,15 +32,15 @@ class HasChildrenUpdate extends ViewerUpdateMonitor implements IHasChildrenUpdat
private List<ViewerUpdateMonitor> fBatchedRequests = null;
- /**
- * Constructs a request to update an element
- *
- * @param provider the content provider
- * @param viewerInput the current input
- * @param elementPath the path to the element being update
- * @param element the element
- * @param elementContentProvider the content provider for the element
- */
+ /**
+ * Constructs a request to update an element
+ *
+ * @param provider the content provider
+ * @param viewerInput the current input
+ * @param elementPath the path to the element being update
+ * @param element the element
+ * @param elementContentProvider the content provider for the element
+ */
public HasChildrenUpdate(TreeModelContentProvider provider, Object viewerInput, TreePath elementPath, Object element, IElementContentProvider elementContentProvider) {
super(provider, viewerInput, elementPath, element, elementContentProvider, provider.getPresentationContext());
}
@@ -52,7 +52,7 @@ class HasChildrenUpdate extends ViewerUpdateMonitor implements IHasChildrenUpdat
if (!fHasChildren) {
contentProvider.clearFilters(elementPath);
}
- if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
+ if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
}
contentProvider.getViewer().setHasChildren(elementPath, fHasChildren);
if (fHasChildren) {
@@ -112,17 +112,17 @@ class HasChildrenUpdate extends ViewerUpdateMonitor implements IHasChildrenUpdat
@Override
boolean containsUpdate(TreePath path) {
- if (getElementPath().equals(path)) {
- return true;
- } else if (fBatchedRequests != null) {
- for (int i = 0; i < fBatchedRequests.size(); i++) {
- if (fBatchedRequests.get(i).getElementPath().equals(path)) {
- return true;
- }
- }
- }
- return false;
- }
+ if (getElementPath().equals(path)) {
+ return true;
+ } else if (fBatchedRequests != null) {
+ for (int i = 0; i < fBatchedRequests.size(); i++) {
+ if (fBatchedRequests.get(i).getElementPath().equals(path)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
@Override
int getPriority() {
@@ -139,20 +139,20 @@ class HasChildrenUpdate extends ViewerUpdateMonitor implements IHasChildrenUpdat
}
boolean hasChildren() {
- return fHasChildren;
+ return fHasChildren;
}
- @Override
+ @Override
protected boolean doEquals(ViewerUpdateMonitor update) {
- return
- update instanceof HasChildrenUpdate &&
- getViewerInput().equals(update.getViewerInput()) &&
- getElementPath().equals(update.getElementPath());
- }
+ return
+ update instanceof HasChildrenUpdate &&
+ getViewerInput().equals(update.getViewerInput()) &&
+ getElementPath().equals(update.getElementPath());
+ }
- @Override
+ @Override
protected int doHashCode() {
- return getClass().hashCode() + getViewerInput().hashCode() + getElementPath().hashCode();
- }
+ return getClass().hashCode() + getViewerInput().hashCode() + getElementPath().hashCode();
+ }
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/IInternalTreeModelViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/IInternalTreeModelViewer.java
index c71362168..d89111ae1 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/IInternalTreeModelViewer.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/IInternalTreeModelViewer.java
@@ -32,291 +32,291 @@ import org.eclipse.swt.graphics.RGB;
*/
public interface IInternalTreeModelViewer extends ITreeModelViewer {
- /**
- * Returns this viewer's filters.
- *
- * @return an array of viewer filters
- * @see org.eclipse.jface.viewers.StructuredViewer#setFilters(ViewerFilter[])
- */
- @Override ViewerFilter[] getFilters();
+ /**
+ * Returns this viewer's filters.
+ *
+ * @return an array of viewer filters
+ * @see org.eclipse.jface.viewers.StructuredViewer#setFilters(ViewerFilter[])
+ */
+ @Override ViewerFilter[] getFilters();
- /**
- * Reveals the given element in the viewer.
- * @param path Path to the element's parent.
- * @param index Index of the element to be revealed.
- */
- void reveal(TreePath path, int index);
+ /**
+ * Reveals the given element in the viewer.
+ * @param path Path to the element's parent.
+ * @param index Index of the element to be revealed.
+ */
+ void reveal(TreePath path, int index);
- /**
- * Triggers an update of the given element's state. If multiple instances
- * of the given element are found in the tree, they will all be updated.
- *
- * @param element Element to update.
- */
- void update(Object element);
+ /**
+ * Triggers an update of the given element's state. If multiple instances
+ * of the given element are found in the tree, they will all be updated.
+ *
+ * @param element Element to update.
+ */
+ void update(Object element);
- /**
- * Sets the given object to be the element at the given index of the given parent.
- * <p>
- * This method should only be called by the viewer framework.
- * </p>
- *
- * @param parentOrTreePath Parent object, or a tree path of the parent element.
- * @param index Index at which to set the new element.
- * @param element Element object.
- * @noreference This method is not intended to be referenced by clients.
- */
- void replace(Object parentOrTreePath, final int index, Object element);
+ /**
+ * Sets the given object to be the element at the given index of the given parent.
+ * <p>
+ * This method should only be called by the viewer framework.
+ * </p>
+ *
+ * @param parentOrTreePath Parent object, or a tree path of the parent element.
+ * @param index Index at which to set the new element.
+ * @param element Element object.
+ * @noreference This method is not intended to be referenced by clients.
+ */
+ void replace(Object parentOrTreePath, final int index, Object element);
- /**
- * Set the number of children of the given element or tree path. To set the
- * number of children of the invisible root of the tree, you can pass the
- * input object or an empty tree path.
- * <p>
- * This method should only be called by the viewer framework.
- * </p>
- *
- * @param elementOrTreePath The element, or tree path.
- * @param count new value
- * @noreference This method is not intended to be referenced by clients.
- */
- void setChildCount(final Object elementOrTreePath, final int count);
+ /**
+ * Set the number of children of the given element or tree path. To set the
+ * number of children of the invisible root of the tree, you can pass the
+ * input object or an empty tree path.
+ * <p>
+ * This method should only be called by the viewer framework.
+ * </p>
+ *
+ * @param elementOrTreePath The element, or tree path.
+ * @param count new value
+ * @noreference This method is not intended to be referenced by clients.
+ */
+ void setChildCount(final Object elementOrTreePath, final int count);
- /**
- * Inform the viewer about whether the given element or tree path has
- * children. Avoid calling this method if the number of children has
- * already been set.
- * <p>
- * This method should only be called by the viewer framework.
- * </p>
- *
- * @param elementOrTreePath the element, or tree path
- * @param hasChildren new value.
- * @noreference This method is not intended to be referenced by clients.
- */
- void setHasChildren(final Object elementOrTreePath, final boolean hasChildren);
+ /**
+ * Inform the viewer about whether the given element or tree path has
+ * children. Avoid calling this method if the number of children has
+ * already been set.
+ * <p>
+ * This method should only be called by the viewer framework.
+ * </p>
+ *
+ * @param elementOrTreePath the element, or tree path
+ * @param hasChildren new value.
+ * @noreference This method is not intended to be referenced by clients.
+ */
+ void setHasChildren(final Object elementOrTreePath, final boolean hasChildren);
- /**
- * Performs auto expand on an element at the specified path if the auto expand
- * level dictates the element should be expanded.
- * <p>
- * This method should only be called by the viewer framework.
- * </p>
- *
- * @param elementPath tree path to element to consider for expansion
- * @noreference This method is not intended to be referenced by clients.
- */
- void autoExpand(TreePath elementPath);
+ /**
+ * Performs auto expand on an element at the specified path if the auto expand
+ * level dictates the element should be expanded.
+ * <p>
+ * This method should only be called by the viewer framework.
+ * </p>
+ *
+ * @param elementPath tree path to element to consider for expansion
+ * @noreference This method is not intended to be referenced by clients.
+ */
+ void autoExpand(TreePath elementPath);
- /**
- * Sets whether the node corresponding to the given element or tree path is
- * expanded or collapsed.
- * <p>
- * This method should only be called by the viewer framework.
- * </p>
- *
- * @param elementOrTreePath
- * the element, or the tree path to the element
- * @param expanded
- * <code>true</code> if the node is expanded, and
- * <code>false</code> if collapsed
- *
- * @noreference This method is not intended to be referenced by clients.
- */
- void setExpandedState(Object elementOrTreePath, boolean expanded);
+ /**
+ * Sets whether the node corresponding to the given element or tree path is
+ * expanded or collapsed.
+ * <p>
+ * This method should only be called by the viewer framework.
+ * </p>
+ *
+ * @param elementOrTreePath
+ * the element, or the tree path to the element
+ * @param expanded
+ * <code>true</code> if the node is expanded, and
+ * <code>false</code> if collapsed
+ *
+ * @noreference This method is not intended to be referenced by clients.
+ */
+ void setExpandedState(Object elementOrTreePath, boolean expanded);
- /**
- * Expands all ancestors of the given element or tree path so that the given
- * element becomes visible in this viewer's tree control, and then expands
- * the subtree rooted at the given element to the given level.
- * <p>
- * This method should only be called by the viewer framework.
- * </p>
- *
- * @param elementOrTreePath
- * the element
- * @param level
- * non-negative level, or <code>ALL_LEVELS</code> to expand all
- * levels of the tree
- *
- * @noreference This method is not intended to be referenced by clients.
- */
- void expandToLevel(Object elementOrTreePath, int level);
+ /**
+ * Expands all ancestors of the given element or tree path so that the given
+ * element becomes visible in this viewer's tree control, and then expands
+ * the subtree rooted at the given element to the given level.
+ * <p>
+ * This method should only be called by the viewer framework.
+ * </p>
+ *
+ * @param elementOrTreePath
+ * the element
+ * @param level
+ * non-negative level, or <code>ALL_LEVELS</code> to expand all
+ * levels of the tree
+ *
+ * @noreference This method is not intended to be referenced by clients.
+ */
+ void expandToLevel(Object elementOrTreePath, int level);
- /**
- * Removes the given element from the viewer. The selection is updated if
- * necessary.
- * <p>
- * This method should only be called by the viewer framework.
- * </p>
- * @param elementOrTreePath the element, or the tree path to the element
- * @noreference This method is not intended to be referenced by clients.
- */
- void remove(Object elementOrTreePath);
+ /**
+ * Removes the given element from the viewer. The selection is updated if
+ * necessary.
+ * <p>
+ * This method should only be called by the viewer framework.
+ * </p>
+ * @param elementOrTreePath the element, or the tree path to the element
+ * @noreference This method is not intended to be referenced by clients.
+ */
+ void remove(Object elementOrTreePath);
- /**
- * Removes the element at the specified index of the parent. The selection is updated if required.
- * <p>
- * This method should only be called by the viewer framework.
- * </p>
- *
- * @param parentOrTreePath the parent element, the input element, or a tree path to the parent element
- * @param index child index
- * @noreference This method is not intended to be referenced by clients.
- */
- void remove(Object parentOrTreePath, final int index);
+ /**
+ * Removes the element at the specified index of the parent. The selection is updated if required.
+ * <p>
+ * This method should only be called by the viewer framework.
+ * </p>
+ *
+ * @param parentOrTreePath the parent element, the input element, or a tree path to the parent element
+ * @param index child index
+ * @noreference This method is not intended to be referenced by clients.
+ */
+ void remove(Object parentOrTreePath, final int index);
- /**
- * Inserts the given element as a new child element of the given parent
- * element at the given position. If this viewer has a sorter, the position
- * is ignored and the element is inserted at the correct position in the
- * sort order.
- * <p>
- * This method should only be called by the viewer framework.
- * </p>
- * @param parentOrTreePath the parent element, or the tree path to the parent
- *
- * @param element the element
- * @param position a 0-based position relative to the model, or -1 to indicate
- * the last position
- * @noreference This method is not intended to be referenced by clients.
- */
- void insert(Object parentOrTreePath, Object element, int position);
+ /**
+ * Inserts the given element as a new child element of the given parent
+ * element at the given position. If this viewer has a sorter, the position
+ * is ignored and the element is inserted at the correct position in the
+ * sort order.
+ * <p>
+ * This method should only be called by the viewer framework.
+ * </p>
+ * @param parentOrTreePath the parent element, or the tree path to the parent
+ *
+ * @param element the element
+ * @param position a 0-based position relative to the model, or -1 to indicate
+ * the last position
+ * @noreference This method is not intended to be referenced by clients.
+ */
+ void insert(Object parentOrTreePath, Object element, int position);
- /**
- * Returns whether the candidate selection should override the current
- * selection.
- * @param current Current selection in viewer.
- * @param candidate Proposed new selection.
- * @return whether new selection should override the current
- */
- boolean overrideSelection(ISelection current, ISelection candidate);
+ /**
+ * Returns whether the candidate selection should override the current
+ * selection.
+ * @param current Current selection in viewer.
+ * @param candidate Proposed new selection.
+ * @return whether new selection should override the current
+ */
+ boolean overrideSelection(ISelection current, ISelection candidate);
- /**
- * Returns whether the node corresponding to the given element or tree path
- * is expanded or collapsed.
- *
- * @param elementOrTreePath
- * the element
- * @return <code>true</code> if the node is expanded, and
- * <code>false</code> if collapsed
- */
- boolean getExpandedState(Object elementOrTreePath);
+ /**
+ * Returns whether the node corresponding to the given element or tree path
+ * is expanded or collapsed.
+ *
+ * @param elementOrTreePath
+ * the element
+ * @return <code>true</code> if the node is expanded, and
+ * <code>false</code> if collapsed
+ */
+ boolean getExpandedState(Object elementOrTreePath);
- /**
- * Returns whether the node corresponding to the given element or tree path
- * has any child elements.
- *
- * @param elementOrTreePath Path to element
- * @return Returns whether the given element has children.
- */
- boolean getHasChildren(Object elementOrTreePath);
+ /**
+ * Returns whether the node corresponding to the given element or tree path
+ * has any child elements.
+ *
+ * @param elementOrTreePath Path to element
+ * @return Returns whether the given element has children.
+ */
+ boolean getHasChildren(Object elementOrTreePath);
- /**
- * Returns the child count of the element at the given path. <br>
- * Note: The child count may be incorrect if the element is not
- * expanded in the tree.
- *
- * @param path Path to get count for.
- * @return The child count.
- */
- int getChildCount(TreePath path);
+ /**
+ * Returns the child count of the element at the given path. <br>
+ * Note: The child count may be incorrect if the element is not
+ * expanded in the tree.
+ *
+ * @param path Path to get count for.
+ * @return The child count.
+ */
+ int getChildCount(TreePath path);
- /**
- * Returns the element which is a child of the element at the
- * given path, with the given index.
- *
- * @param path Path to parent element.
- * @param index Index of child element.
- * @return Child element.
- */
- Object getChildElement(TreePath path, int index);
+ /**
+ * Returns the element which is a child of the element at the
+ * given path, with the given index.
+ *
+ * @param path Path to parent element.
+ * @param index Index of child element.
+ * @return Child element.
+ */
+ Object getChildElement(TreePath path, int index);
- /**
- * Returns the tree path of the element that is at the top of the
- * viewer.
- *
- * @return the tree path of the element at the top of the
- * viewer.
- */
- TreePath getTopElementPath();
+ /**
+ * Returns the tree path of the element that is at the top of the
+ * viewer.
+ *
+ * @return the tree path of the element at the top of the
+ * viewer.
+ */
+ TreePath getTopElementPath();
- /**
- * Finds the index of the given element with a parent of given path.
- *
- * @param parentPath Path of parent element.
- * @param element Element to find.
- *
- * @return The element's index, or -1 if not found.
- */
- int findElementIndex(TreePath parentPath, Object element);
+ /**
+ * Finds the index of the given element with a parent of given path.
+ *
+ * @param parentPath Path of parent element.
+ * @param element Element to find.
+ *
+ * @return The element's index, or -1 if not found.
+ */
+ int findElementIndex(TreePath parentPath, Object element);
- /**
- * Returns a boolean indicating whether all the child elements of the
- * given parent have been realized already.
- *
- * @param parentPath Path of parent element.
- * @return true if all children realized
- */
- boolean getElementChildrenRealized(TreePath parentPath);
+ /**
+ * Returns a boolean indicating whether all the child elements of the
+ * given parent have been realized already.
+ *
+ * @param parentPath Path of parent element.
+ * @return true if all children realized
+ */
+ boolean getElementChildrenRealized(TreePath parentPath);
- /**
- * Clears the selection in the viewer, if any, without firing
- * selection change notification. This is only to be used by
- * the platform.
- */
- void clearSelectionQuiet();
+ /**
+ * Clears the selection in the viewer, if any, without firing
+ * selection change notification. This is only to be used by
+ * the platform.
+ */
+ void clearSelectionQuiet();
- /**
- * Sets the element's display information.
- * <p>
- * This method should only be called by the viewer framework.
- * </p>
- *
- * @param path Element path.
- * @param numColumns Number of columns in the data.
- * @param labels Array of labels. The array cannot to be
- * <code>null</code>, but values within the array may be.
- * @param images Array of image descriptors, may be <code>null</code>.
- * @param fontDatas Array of fond data objects, may be <code>null</code>.
- * @param foregrounds Array of RGB values for foreground colors, may be
- * <code>null</code>.
- * @param backgrounds Array of RGB values for background colors, may be
- * <code>null</code>.
- * @noreference This method is not intended to be referenced by clients.
- */
- void setElementData(TreePath path, int numColumns, String[] labels, ImageDescriptor[] images, FontData[] fontDatas, RGB[] foregrounds, RGB[] backgrounds);
+ /**
+ * Sets the element's display information.
+ * <p>
+ * This method should only be called by the viewer framework.
+ * </p>
+ *
+ * @param path Element path.
+ * @param numColumns Number of columns in the data.
+ * @param labels Array of labels. The array cannot to be
+ * <code>null</code>, but values within the array may be.
+ * @param images Array of image descriptors, may be <code>null</code>.
+ * @param fontDatas Array of fond data objects, may be <code>null</code>.
+ * @param foregrounds Array of RGB values for foreground colors, may be
+ * <code>null</code>.
+ * @param backgrounds Array of RGB values for background colors, may be
+ * <code>null</code>.
+ * @noreference This method is not intended to be referenced by clients.
+ */
+ void setElementData(TreePath path, int numColumns, String[] labels, ImageDescriptor[] images, FontData[] fontDatas, RGB[] foregrounds, RGB[] backgrounds);
- /**
- * Returns identifiers of the visible columns in this viewer, or <code>null</code>
- * if there is currently no column presentation.
- *
- * @return visible columns or <code>null</code>
- */
- String[] getVisibleColumns();
+ /**
+ * Returns identifiers of the visible columns in this viewer, or <code>null</code>
+ * if there is currently no column presentation.
+ *
+ * @return visible columns or <code>null</code>
+ */
+ String[] getVisibleColumns();
- /**
- * Sets the element check state data.
- *
- * @param path Path of element to check.
- * @param checked if true, item will be checked
- * @param grayed if true item will be grayed
- */
- void setElementChecked(TreePath path, boolean checked, boolean grayed);
+ /**
+ * Sets the element check state data.
+ *
+ * @param path Path of element to check.
+ * @param checked if true, item will be checked
+ * @param grayed if true item will be grayed
+ */
+ void setElementChecked(TreePath path, boolean checked, boolean grayed);
- /**
- * Retrieves the element check state.
- *
- * @param path Path of element to return check state for.
- * @return the element checked state
- */
- boolean getElementChecked(TreePath path);
+ /**
+ * Retrieves the element check state.
+ *
+ * @param path Path of element to return check state for.
+ * @return the element checked state
+ */
+ boolean getElementChecked(TreePath path);
- /**
- * Retrieves the element's check box grayed state.
- *
- * @param path Path of element to return grayed state for.
- * @return the element grayed state
- */
- boolean getElementGrayed(TreePath path);
+ /**
+ * Retrieves the element's check box grayed state.
+ *
+ * @param path Path of element to return grayed state for.
+ * @return the element grayed state
+ */
+ boolean getElementGrayed(TreePath path);
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelContentProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelContentProvider.java
index 04476f252..ee94069e4 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelContentProvider.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelContentProvider.java
@@ -31,221 +31,221 @@ import org.eclipse.jface.viewers.Viewer;
*/
public interface ITreeModelContentProvider extends ILazyTreePathContentProvider {
- /**
- * Bit-mask which allows all possible model delta flags.
- *
- * @since 3.6
- * @see #setModelDeltaMask(int)
- */
- int ALL_MODEL_DELTA_FLAGS = ~0;
-
- /**
- * Bit-mask which allows only flags which control selection and expansion.
- *
- * @since 3.6
- * @see #setModelDeltaMask(int)
- */
- int CONTROL_MODEL_DELTA_FLAGS =
- IModelDelta.EXPAND | IModelDelta.COLLAPSE | IModelDelta.SELECT | IModelDelta.REVEAL | IModelDelta.FORCE;
-
- /**
- * Bit-mask which allows only flags which update viewer's information
- * about the model.
- *
- * @since 3.6
- * @see #setModelDeltaMask(int)
- */
- int UPDATE_MODEL_DELTA_FLAGS =
- IModelDelta.ADDED | IModelDelta.CONTENT | IModelDelta.INSERTED | IModelDelta.INSTALL | IModelDelta.REMOVED |
- IModelDelta.REPLACED | IModelDelta.STATE | IModelDelta.UNINSTALL;
-
- /**
- * Translates and returns the given child index from the viewer coordinate
- * space to the model coordinate space.
- *
- * @param parentPath path to parent element
- * @param index index of child element in viewer (filtered) space
- * @return index of child element in model (raw) space
- */
- int viewToModelIndex(TreePath parentPath, int index);
-
- /**
- * Translates and returns the given child count from the viewer coordinate
- * space to the model coordinate space.
- *
- * @param parentPath path to parent element
- * @param count number of child elements in viewer (filtered) space
- * @return number of child elements in model (raw) space
- */
- int viewToModelCount(TreePath parentPath, int count);
-
- /**
- * Translates and returns the given child index from the model coordinate
- * space to the viewer coordinate space.
- *
- * @param parentPath path to parent element
- * @param index index of child element in model (raw) space
- * @return index of child element in viewer (filtered) space or -1 if filtered
- */
- int modelToViewIndex(TreePath parentPath, int index);
-
- /**
- * Returns whether the children of given element should be filtered.
- * <p>This method is used to determine whether any of the registered filters
- * that extend {@link TreeModelViewerFilter} are applicable to the given
- * element. If so, then children of given element should be filtered
- * prior to populating them in the viewer.
- *
- * @param parentElement
- * the parent element
- * @return whether there are any {@link TreeModelViewerFilter} filters
- * applicable to given parent
- */
- boolean areTreeModelViewerFiltersApplicable(Object parentElement);
-
- /**
- * Returns whether the given element is filtered.
- *
- * @param parentElementOrTreePath
- * the parent element or path
- * @param element
- * the child element
- * @return whether to filter the element
- */
- boolean shouldFilter(Object parentElementOrTreePath, Object element);
-
- /**
- * Notification the given element is being unmapped.
- *
- * @param path Path to unmap
- */
- void unmapPath(TreePath path);
-
- /**
- * Sets the bit mask which will be used to filter the {@link IModelDelta}
- * coming from the model. Any delta flags which are hidden by the mask
- * will be ignored.
- *
- * @param mask for <code>IModelDelta</code> flags
- *
- * @since 3.6
- */
- void setModelDeltaMask(int mask);
-
- /**
- * Returns the current model delta mask.
- *
- * @return bit mask used to filter model delta events.
- *
- * @see #setModelDeltaMask(int)
- * @since 3.6
- */
- int getModelDeltaMask();
-
- /**
- * Translates and returns the given child count from the model coordinate
- * space to the viewer coordinate space.
- *
- * @param parentPath path to parent element
- * @param count child count element in model (raw) space
- * @return child count in viewer (filtered) space
- */
- int modelToViewChildCount(TreePath parentPath, int count);
-
- /**
- * Registers the specified listener for view update notifications.
- * @param listener Listener to add
- */
- void addViewerUpdateListener(IViewerUpdateListener listener);
-
- /**
- * Removes the specified listener from update notifications.
- * @param listener Listener to remove
- */
- void removeViewerUpdateListener(IViewerUpdateListener listener);
-
- /**
- * Registers the given listener for model delta notification.
- * This listener is called immediately after the viewer processes
- * the delta.
- * @param listener Listener to add
- */
- void addModelChangedListener(IModelChangedListener listener);
-
- /**
- * Removes the given listener from model delta notification.
- * @param listener Listener to remove
- */
- void removeModelChangedListener(IModelChangedListener listener);
-
- /**
- * Causes the content provider to save the expansion and selection state
- * of given element. The state is then restored as the tree is lazily
- * re-populated.
- * @param path Path of the element to save.
- */
- void preserveState(TreePath path);
-
- /**
- * Registers the specified listener for state update notifications.
- * @param listener Listener to add
- * @since 3.6
- */
- void addStateUpdateListener(IStateUpdateListener listener);
-
- /**
- * Removes the specified listener from state update notifications.
- * @param listener Listener to remove
- * @since 3.6
- */
- void removeStateUpdateListener(IStateUpdateListener listener);
-
- /**
- * Instructs the content provider to process the given model delta. This
- * mechanism can be used to control the view's layout (expanding, selecting
- * , etc.)
- *
- * @param delta The model delta to process.
- * @param mask Mask that can be used to suppress processing of some of the
- * delta flags
- *
- * @since 3.6
- */
- void updateModel(IModelDelta delta, int mask);
-
- /**
- * Instructs the content provider to cancel any pending state changes
- * (i.e. SELECT, REVEAL, EXPAND, COLLAPSE) for the given path. Pending
- * state changes are changes the the viewer plans to re-apply to the
- * viewer following a refresh. If the user changes viewer state while
- * the viewer is being refreshed, user's change should override the
- * previous state.
- *
- * @param path Path of the element for which to cancel pending changes.
- * @param flags Flags indicating the changes to cancel.
- */
- void cancelRestore(TreePath path, int flags);
-
- /**
- * Notifies the content provider that a client called {@link Viewer#setInput(Object)},
- * and the viewer input is changed.
- * This method is guaranteed to be called after {@link IContentProvider#inputChanged(Viewer, Object, Object)}
- *
- * @param viewer The viewer that uses this content provider.
- * @param oldInput Old input object.
- * @param newInput New input object.
- *
- * @since 3.8
- */
- void postInputChanged(IInternalTreeModelViewer viewer, Object oldInput, Object newInput);
-
- /**
- * Notifies the receiver that the given element has had its
- * checked state modified in the viewer.
- *
- * @param path Path of the element that had its checked state changed
- * @param checked The new checked state of the element
- * @return false if the check state should not change
- */
- boolean setChecked(TreePath path, boolean checked);
+ /**
+ * Bit-mask which allows all possible model delta flags.
+ *
+ * @since 3.6
+ * @see #setModelDeltaMask(int)
+ */
+ int ALL_MODEL_DELTA_FLAGS = ~0;
+
+ /**
+ * Bit-mask which allows only flags which control selection and expansion.
+ *
+ * @since 3.6
+ * @see #setModelDeltaMask(int)
+ */
+ int CONTROL_MODEL_DELTA_FLAGS =
+ IModelDelta.EXPAND | IModelDelta.COLLAPSE | IModelDelta.SELECT | IModelDelta.REVEAL | IModelDelta.FORCE;
+
+ /**
+ * Bit-mask which allows only flags which update viewer's information
+ * about the model.
+ *
+ * @since 3.6
+ * @see #setModelDeltaMask(int)
+ */
+ int UPDATE_MODEL_DELTA_FLAGS =
+ IModelDelta.ADDED | IModelDelta.CONTENT | IModelDelta.INSERTED | IModelDelta.INSTALL | IModelDelta.REMOVED |
+ IModelDelta.REPLACED | IModelDelta.STATE | IModelDelta.UNINSTALL;
+
+ /**
+ * Translates and returns the given child index from the viewer coordinate
+ * space to the model coordinate space.
+ *
+ * @param parentPath path to parent element
+ * @param index index of child element in viewer (filtered) space
+ * @return index of child element in model (raw) space
+ */
+ int viewToModelIndex(TreePath parentPath, int index);
+
+ /**
+ * Translates and returns the given child count from the viewer coordinate
+ * space to the model coordinate space.
+ *
+ * @param parentPath path to parent element
+ * @param count number of child elements in viewer (filtered) space
+ * @return number of child elements in model (raw) space
+ */
+ int viewToModelCount(TreePath parentPath, int count);
+
+ /**
+ * Translates and returns the given child index from the model coordinate
+ * space to the viewer coordinate space.
+ *
+ * @param parentPath path to parent element
+ * @param index index of child element in model (raw) space
+ * @return index of child element in viewer (filtered) space or -1 if filtered
+ */
+ int modelToViewIndex(TreePath parentPath, int index);
+
+ /**
+ * Returns whether the children of given element should be filtered.
+ * <p>This method is used to determine whether any of the registered filters
+ * that extend {@link TreeModelViewerFilter} are applicable to the given
+ * element. If so, then children of given element should be filtered
+ * prior to populating them in the viewer.
+ *
+ * @param parentElement
+ * the parent element
+ * @return whether there are any {@link TreeModelViewerFilter} filters
+ * applicable to given parent
+ */
+ boolean areTreeModelViewerFiltersApplicable(Object parentElement);
+
+ /**
+ * Returns whether the given element is filtered.
+ *
+ * @param parentElementOrTreePath
+ * the parent element or path
+ * @param element
+ * the child element
+ * @return whether to filter the element
+ */
+ boolean shouldFilter(Object parentElementOrTreePath, Object element);
+
+ /**
+ * Notification the given element is being unmapped.
+ *
+ * @param path Path to unmap
+ */
+ void unmapPath(TreePath path);
+
+ /**
+ * Sets the bit mask which will be used to filter the {@link IModelDelta}
+ * coming from the model. Any delta flags which are hidden by the mask
+ * will be ignored.
+ *
+ * @param mask for <code>IModelDelta</code> flags
+ *
+ * @since 3.6
+ */
+ void setModelDeltaMask(int mask);
+
+ /**
+ * Returns the current model delta mask.
+ *
+ * @return bit mask used to filter model delta events.
+ *
+ * @see #setModelDeltaMask(int)
+ * @since 3.6
+ */
+ int getModelDeltaMask();
+
+ /**
+ * Translates and returns the given child count from the model coordinate
+ * space to the viewer coordinate space.
+ *
+ * @param parentPath path to parent element
+ * @param count child count element in model (raw) space
+ * @return child count in viewer (filtered) space
+ */
+ int modelToViewChildCount(TreePath parentPath, int count);
+
+ /**
+ * Registers the specified listener for view update notifications.
+ * @param listener Listener to add
+ */
+ void addViewerUpdateListener(IViewerUpdateListener listener);
+
+ /**
+ * Removes the specified listener from update notifications.
+ * @param listener Listener to remove
+ */
+ void removeViewerUpdateListener(IViewerUpdateListener listener);
+
+ /**
+ * Registers the given listener for model delta notification.
+ * This listener is called immediately after the viewer processes
+ * the delta.
+ * @param listener Listener to add
+ */
+ void addModelChangedListener(IModelChangedListener listener);
+
+ /**
+ * Removes the given listener from model delta notification.
+ * @param listener Listener to remove
+ */
+ void removeModelChangedListener(IModelChangedListener listener);
+
+ /**
+ * Causes the content provider to save the expansion and selection state
+ * of given element. The state is then restored as the tree is lazily
+ * re-populated.
+ * @param path Path of the element to save.
+ */
+ void preserveState(TreePath path);
+
+ /**
+ * Registers the specified listener for state update notifications.
+ * @param listener Listener to add
+ * @since 3.6
+ */
+ void addStateUpdateListener(IStateUpdateListener listener);
+
+ /**
+ * Removes the specified listener from state update notifications.
+ * @param listener Listener to remove
+ * @since 3.6
+ */
+ void removeStateUpdateListener(IStateUpdateListener listener);
+
+ /**
+ * Instructs the content provider to process the given model delta. This
+ * mechanism can be used to control the view's layout (expanding, selecting
+ * , etc.)
+ *
+ * @param delta The model delta to process.
+ * @param mask Mask that can be used to suppress processing of some of the
+ * delta flags
+ *
+ * @since 3.6
+ */
+ void updateModel(IModelDelta delta, int mask);
+
+ /**
+ * Instructs the content provider to cancel any pending state changes
+ * (i.e. SELECT, REVEAL, EXPAND, COLLAPSE) for the given path. Pending
+ * state changes are changes the the viewer plans to re-apply to the
+ * viewer following a refresh. If the user changes viewer state while
+ * the viewer is being refreshed, user's change should override the
+ * previous state.
+ *
+ * @param path Path of the element for which to cancel pending changes.
+ * @param flags Flags indicating the changes to cancel.
+ */
+ void cancelRestore(TreePath path, int flags);
+
+ /**
+ * Notifies the content provider that a client called {@link Viewer#setInput(Object)},
+ * and the viewer input is changed.
+ * This method is guaranteed to be called after {@link IContentProvider#inputChanged(Viewer, Object, Object)}
+ *
+ * @param viewer The viewer that uses this content provider.
+ * @param oldInput Old input object.
+ * @param newInput New input object.
+ *
+ * @since 3.8
+ */
+ void postInputChanged(IInternalTreeModelViewer viewer, Object oldInput, Object newInput);
+
+ /**
+ * Notifies the receiver that the given element has had its
+ * checked state modified in the viewer.
+ *
+ * @param path Path of the element that had its checked state changed
+ * @param checked The new checked state of the element
+ * @return false if the check state should not change
+ */
+ boolean setChecked(TreePath path, boolean checked);
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelLabelProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelLabelProvider.java
index da09cf204..f9e720e28 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelLabelProvider.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelLabelProvider.java
@@ -31,50 +31,50 @@ import org.eclipse.swt.graphics.RGB;
*/
public interface ITreeModelLabelProvider extends IBaseLabelProvider {
- /**
- * Requests an label update label of the given element.
- * @param elementPath Element to update.
- * @return true if element label provider is found and update will
- * be requested.
- */
- boolean update(TreePath elementPath);
+ /**
+ * Requests an label update label of the given element.
+ * @param elementPath Element to update.
+ * @return true if element label provider is found and update will
+ * be requested.
+ */
+ boolean update(TreePath elementPath);
- /**
- * Registers the specified listener for view label update notifications.
- * @param listener Listener to add
- */
- void addLabelUpdateListener(ILabelUpdateListener listener);
+ /**
+ * Registers the specified listener for view label update notifications.
+ * @param listener Listener to add
+ */
+ void addLabelUpdateListener(ILabelUpdateListener listener);
- /**
- * Removes the specified listener from view label update notifications.
- * @param listener Listener to remove
- */
- void removeLabelUpdateListener(ILabelUpdateListener listener);
+ /**
+ * Removes the specified listener from view label update notifications.
+ * @param listener Listener to remove
+ */
+ void removeLabelUpdateListener(ILabelUpdateListener listener);
- /**
- * Returns an image for the given image descriptor or <code>null</code>. Adds the image
- * to a cache of images if it does not already exist.
- *
- * @param descriptor image descriptor or <code>null</code>
- * @return image or <code>null</code>
- */
- Image getImage(ImageDescriptor descriptor);
+ /**
+ * Returns an image for the given image descriptor or <code>null</code>. Adds the image
+ * to a cache of images if it does not already exist.
+ *
+ * @param descriptor image descriptor or <code>null</code>
+ * @return image or <code>null</code>
+ */
+ Image getImage(ImageDescriptor descriptor);
- /**
- * Returns a font for the given font data or <code>null</code>. Adds the font to the font
- * cache if not yet created.
- *
- * @param fontData font data or <code>null</code>
- * @return font font or <code>null</code>
- */
- Font getFont(FontData fontData);
+ /**
+ * Returns a font for the given font data or <code>null</code>. Adds the font to the font
+ * cache if not yet created.
+ *
+ * @param fontData font data or <code>null</code>
+ * @return font font or <code>null</code>
+ */
+ Font getFont(FontData fontData);
- /**
- * Returns a color for the given RGB or <code>null</code>. Adds the color to the color
- * cache if not yet created.
- *
- * @param rgb RGB or <code>null</code>
- * @return color or <code>null</code>
- */
- Color getColor(RGB rgb);
+ /**
+ * Returns a color for the given RGB or <code>null</code>. Adds the color to the color
+ * cache if not yet created.
+ *
+ * @param rgb RGB or <code>null</code>
+ * @return color or <code>null</code>
+ */
+ Color getColor(RGB rgb);
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java
index 20bfcc8e1..3bc99b786 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java
@@ -82,41 +82,41 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
private final IPresentationContext fContext;
- /**
- * Current column presentation or <code>null</code>
- */
- private IColumnPresentation fColumnPresentation = null;
-
- /**
- * Map of columns presentation id to its visible columns id's (String[])
- * When a columns presentation is not in the map, default settings are used.
- */
+ /**
+ * Current column presentation or <code>null</code>
+ */
+ private IColumnPresentation fColumnPresentation = null;
+
+ /**
+ * Map of columns presentation id to its visible columns id's (String[])
+ * When a columns presentation is not in the map, default settings are used.
+ */
private final Map<String, String[]> fVisibleColumns = new HashMap<>();
- /**
- * Map of column id's to persisted sizes
- */
+ /**
+ * Map of column id's to persisted sizes
+ */
private final Map<Object, Integer> fColumnSizes = new HashMap<>();
- /**
- * Map of column presentation id's to an array of integers representing the column order
- * for that presentation, or <code>null</code> if default.
- */
+ /**
+ * Map of column presentation id's to an array of integers representing the column order
+ * for that presentation, or <code>null</code> if default.
+ */
private final Map<String, int[]> fColumnOrder = new HashMap<>();
- /**
- * Map of column presentation id to whether columns should be displayed
- * for that presentation (the user can toggle columns on/off when a
- * presentation is optional.
- */
+ /**
+ * Map of column presentation id to whether columns should be displayed
+ * for that presentation (the user can toggle columns on/off when a
+ * presentation is optional.
+ */
private final Map<String, Boolean> fShowColumns = new HashMap<>();
- /**
- * Item's tree path cache
- */
- private static final String TREE_PATH_KEY = "TREE_PATH_KEY"; //$NON-NLS-1$
+ /**
+ * Item's tree path cache
+ */
+ private static final String TREE_PATH_KEY = "TREE_PATH_KEY"; //$NON-NLS-1$
- /**
+ /**
* Memento type for column sizes. Sizes are keyed by column presentation id
*/
private static final String COLUMN_SIZES = "COLUMN_SIZES"; //$NON-NLS-1$
@@ -190,15 +190,15 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
if (fModifier.canModify(element, property)) {
// install cell editor
CellEditor cellEditor = editor.getCellEditor(getPresentationContext(), property, element, (Composite)getControl());
- if (cellEditor != null) {
- disposeCellEditors();
- CellEditor[] newEditors = new CellEditor[getVisibleColumns().length];
- for (int i = 0; i < newEditors.length; i++) {
+ if (cellEditor != null) {
+ disposeCellEditors();
+ CellEditor[] newEditors = new CellEditor[getVisibleColumns().length];
+ for (int i = 0; i < newEditors.length; i++) {
newEditors[i] = cellEditor;
}
- setCellEditors(newEditors);
- return true;
- }
+ setCellEditors(newEditors);
+ return true;
+ }
}
}
}
@@ -271,12 +271,12 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
// A pop-up viewer is transient and does not automatically expand
// and select elements up when requested by the model
if ((style & SWT.POP_UP) != 0) {
- ((ITreeModelContentProvider)getContentProvider()).setModelDeltaMask(
- ~ITreeModelContentProvider.CONTROL_MODEL_DELTA_FLAGS);
+ ((ITreeModelContentProvider)getContentProvider()).setModelDeltaMask(
+ ~ITreeModelContentProvider.CONTROL_MODEL_DELTA_FLAGS);
+ }
+ if ((style & SWT.CHECK) != 0) {
+ context.setProperty(ICheckUpdate.PROP_CHECK, Boolean.TRUE);
}
- if ((style & SWT.CHECK) != 0) {
- context.setProperty(ICheckUpdate.PROP_CHECK, Boolean.TRUE);
- }
}
/**
@@ -346,14 +346,14 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
item.setBackground(i, (Color) backgrounds[i]);
}
}
- Boolean checked = (Boolean) item.getData(PREV_CHECKED_KEY);
- if (checked != null) {
- item.setChecked(checked.booleanValue());
- }
- Boolean grayed = (Boolean) item.getData(PREV_GRAYED_KEY);
- if (grayed != null) {
- item.setGrayed(grayed.booleanValue());
- }
+ Boolean checked = (Boolean) item.getData(PREV_CHECKED_KEY);
+ if (checked != null) {
+ item.setChecked(checked.booleanValue());
+ }
+ Boolean grayed = (Boolean) item.getData(PREV_GRAYED_KEY);
+ if (grayed != null) {
+ item.setGrayed(grayed.booleanValue());
+ }
}
/*
@@ -362,23 +362,23 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
*/
@Override
protected void handleInvalidSelection(ISelection selection, ISelection newSelection) {
- IModelSelectionPolicy selectionPolicy = ViewerAdapterService.getSelectionPolicy(selection, getPresentationContext());
- if (selectionPolicy != null) {
- while (!selection.equals(newSelection)) {
- ISelection temp = newSelection;
- selection = selectionPolicy.replaceInvalidSelection(selection, newSelection);
- if (selection == null) {
- selection = TreeSelection.EMPTY;
- }
- if (!temp.equals(selection)) {
- setSelectionToWidget(selection, false);
- newSelection = getSelection();
- } else {
- break;
- }
- }
- }
- super.handleInvalidSelection(selection, newSelection);
+ IModelSelectionPolicy selectionPolicy = ViewerAdapterService.getSelectionPolicy(selection, getPresentationContext());
+ if (selectionPolicy != null) {
+ while (!selection.equals(newSelection)) {
+ ISelection temp = newSelection;
+ selection = selectionPolicy.replaceInvalidSelection(selection, newSelection);
+ if (selection == null) {
+ selection = TreeSelection.EMPTY;
+ }
+ if (!temp.equals(selection)) {
+ setSelectionToWidget(selection, false);
+ newSelection = getSelection();
+ } else {
+ break;
+ }
+ }
+ }
+ super.handleInvalidSelection(selection, newSelection);
}
@Override
@@ -405,7 +405,7 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
protected void unmapElement(Object element, Widget widget) {
if (fNotifyUnmap) {
// TODO: should we update the filter with the "new non-identical element"?
- ((ITreeModelContentProvider) getContentProvider()).unmapPath((TreePath) widget.getData(TREE_PATH_KEY));
+ ((ITreeModelContentProvider) getContentProvider()).unmapPath((TreePath) widget.getData(TREE_PATH_KEY));
}
super.unmapElement(element, widget);
}
@@ -468,20 +468,20 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
@Override
protected void unmapAllElements() {
- // Do nothing when called from StructuredViewer.setInput(), to avoid
- // clearing elements before viewer state is saved.
- // Bug 326917
- if (getControl().isDisposed()) {
- unmapAllElements();
- }
+ // Do nothing when called from StructuredViewer.setInput(), to avoid
+ // clearing elements before viewer state is saved.
+ // Bug 326917
+ if (getControl().isDisposed()) {
+ unmapAllElements();
+ }
}
@Override
protected void inputChanged(Object input, Object oldInput) {
- fCellModifier.clear();
- // Clear items map now that ITreeModelContentProvider.inputChanged() was already called.
- // Bug 326917
- super.unmapAllElements();
+ fCellModifier.clear();
+ // Clear items map now that ITreeModelContentProvider.inputChanged() was already called.
+ // Bug 326917
+ super.unmapAllElements();
((ITreeModelContentProvider)getContentProvider()).postInputChanged(this, oldInput, input);
super.inputChanged(input, oldInput);
@@ -489,19 +489,19 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
}
/**
- * Configures the columns for the given viewer input.
- *
- * @param input the viewer input
- */
- protected void resetColumns(Object input) {
- if (input != null) {
- // only change columns if the input is non-null (persist when empty)
- IColumnPresentationFactory factory = ViewerAdapterService.getColumnPresentationFactory(input);
- PresentationContext context = (PresentationContext) getPresentationContext();
- String type = null;
- if (factory != null) {
- type = factory.getColumnPresentationId(context, input);
- }
+ * Configures the columns for the given viewer input.
+ *
+ * @param input the viewer input
+ */
+ protected void resetColumns(Object input) {
+ if (input != null) {
+ // only change columns if the input is non-null (persist when empty)
+ IColumnPresentationFactory factory = ViewerAdapterService.getColumnPresentationFactory(input);
+ PresentationContext context = (PresentationContext) getPresentationContext();
+ String type = null;
+ if (factory != null) {
+ type = factory.getColumnPresentationId(context, input);
+ }
if (type != null && factory != null) {
if (fColumnPresentation != null) {
if (!fColumnPresentation.getId().equals(type)) {
@@ -524,14 +524,14 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
configureColumns();
}
}
- }
- }
-
- /**
- * Configures the columns based on the current settings.
- */
- protected void configureColumns() {
- if (fColumnPresentation != null) {
+ }
+ }
+
+ /**
+ * Configures the columns based on the current settings.
+ */
+ protected void configureColumns() {
+ if (fColumnPresentation != null) {
IColumnPresentation build = null;
if (isShowColumns(fColumnPresentation.getId())) {
build = fColumnPresentation;
@@ -541,7 +541,7 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
// get rid of columns
buildColumns(null);
}
- }
+ }
/**
* Toggles columns on/off for the current column presentation, if any.
@@ -608,33 +608,33 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
@Override
protected void internalRefresh(Object element, boolean updateLabels) {
- ITreeModelContentProvider contentProvider = (ITreeModelContentProvider)getContentProvider();
-
- if (element == null) {
- internalRefresh(getControl(), getRoot(), true, updateLabels);
- contentProvider.preserveState(TreePath.EMPTY);
- } else {
- Widget[] items = findItems(element);
- if (items.length != 0) {
- for (int i = 0; i < items.length; i++) {
- if (items[i] instanceof TreeItem) {
- contentProvider.preserveState(getTreePathFromItem((TreeItem)items[i]));
- } else {
- contentProvider.preserveState(TreePath.EMPTY);
- }
- }
- }
- }
- super.internalRefresh(element, updateLabels);
- }
-
- /**
- * Refreshes the columns in the view, based on the viewer input.
- */
- protected void refreshColumns() {
- configureColumns();
- refresh();
- }
+ ITreeModelContentProvider contentProvider = (ITreeModelContentProvider)getContentProvider();
+
+ if (element == null) {
+ internalRefresh(getControl(), getRoot(), true, updateLabels);
+ contentProvider.preserveState(TreePath.EMPTY);
+ } else {
+ Widget[] items = findItems(element);
+ if (items.length != 0) {
+ for (int i = 0; i < items.length; i++) {
+ if (items[i] instanceof TreeItem) {
+ contentProvider.preserveState(getTreePathFromItem((TreeItem)items[i]));
+ } else {
+ contentProvider.preserveState(TreePath.EMPTY);
+ }
+ }
+ }
+ }
+ super.internalRefresh(element, updateLabels);
+ }
+
+ /**
+ * Refreshes the columns in the view, based on the viewer input.
+ */
+ protected void refreshColumns() {
+ configureColumns();
+ refresh();
+ }
/**
* Returns whether columns are being displayed currently.
@@ -665,28 +665,28 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
return bool.booleanValue();
}
- /**
- * Creates new columns for the given presentation.
- *
- * TODO: does this need to be asynchronous?
- *
- * @param presentation the column presentation to build from
- */
- protected void buildColumns(IColumnPresentation presentation) {
- // dispose current columns, persisting their weights
- Tree tree = getTree();
+ /**
+ * Creates new columns for the given presentation.
+ *
+ * TODO: does this need to be asynchronous?
+ *
+ * @param presentation the column presentation to build from
+ */
+ protected void buildColumns(IColumnPresentation presentation) {
+ // dispose current columns, persisting their weights
+ Tree tree = getTree();
final TreeColumn[] columns = tree.getColumns();
String[] visibleColumnIds = getVisibleColumns();
// remove all listeners before disposing - see bug 223233
- for (int i = 0; i < columns.length; i++) {
- columns[i].removeControlListener(fListener);
- }
- for (int i = 0; i < columns.length; i++) {
+ for (int i = 0; i < columns.length; i++) {
+ columns[i].removeControlListener(fListener);
+ }
+ for (int i = 0; i < columns.length; i++) {
columns[i].dispose();
}
- PresentationContext presentationContext = (PresentationContext) getPresentationContext();
- if (presentation != null) {
- for (int i = 0; i < visibleColumnIds.length; i++) {
+ PresentationContext presentationContext = (PresentationContext) getPresentationContext();
+ if (presentation != null) {
+ for (int i = 0; i < visibleColumnIds.length; i++) {
String id = visibleColumnIds[i];
String header = presentation.getHeader(id);
// TODO: allow client to specify style
@@ -700,68 +700,68 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
}
column.setData(id);
}
- int[] order = fColumnOrder.get(presentation.getId());
- if (order != null) {
- tree.setColumnOrder(order);
- }
- tree.setHeaderVisible(true);
- tree.setLinesVisible(true);
- presentationContext.setColumns(visibleColumnIds);
- setColumnProperties(visibleColumnIds);
- setCellModifier(fCellModifier);
- } else {
- tree.setHeaderVisible(false);
- tree.setLinesVisible(false);
- presentationContext.setColumns(null);
- setCellModifier(null);
- setColumnProperties(null);
- }
-
- int treeWidgetWidth = tree.getSize().x;
- int avg = treeWidgetWidth;
- if (visibleColumnIds != null) {
+ int[] order = fColumnOrder.get(presentation.getId());
+ if (order != null) {
+ tree.setColumnOrder(order);
+ }
+ tree.setHeaderVisible(true);
+ tree.setLinesVisible(true);
+ presentationContext.setColumns(visibleColumnIds);
+ setColumnProperties(visibleColumnIds);
+ setCellModifier(fCellModifier);
+ } else {
+ tree.setHeaderVisible(false);
+ tree.setLinesVisible(false);
+ presentationContext.setColumns(null);
+ setCellModifier(null);
+ setColumnProperties(null);
+ }
+
+ int treeWidgetWidth = tree.getSize().x;
+ int avg = treeWidgetWidth;
+ if (visibleColumnIds != null) {
avg /= visibleColumnIds.length;
}
- if (avg == 0) {
- tree.addPaintListener(new PaintListener() {
- @Override
+ if (avg == 0) {
+ tree.addPaintListener(new PaintListener() {
+ @Override
public void paintControl(PaintEvent e) {
- Tree tree2 = getTree();
- String[] visibleColumns = getVisibleColumns();
- if (visibleColumns != null) {
- int treeWidgetWidth1 = tree2.getSize().x;
+ Tree tree2 = getTree();
+ String[] visibleColumns = getVisibleColumns();
+ if (visibleColumns != null) {
+ int treeWidgetWidth1 = tree2.getSize().x;
int avg1 = treeWidgetWidth1 / visibleColumns.length;
- initColumns(avg1, treeWidgetWidth1, visibleColumns);
- }
- tree2.removePaintListener(this);
- }
- });
- } else {
- initColumns(avg, treeWidgetWidth, visibleColumnIds);
- }
- }
-
- private void initColumns(int widthHint, int treeWidgetWidth, String[] visibleColumnIds) {
- TreeColumn[] columns = getTree().getColumns();
- for (int i = 0; i < columns.length; i++) {
- TreeColumn treeColumn = columns[i];
- Object colData = treeColumn.getData();
- String columnId = colData instanceof String ? (String) colData : null;
- Integer width = fColumnSizes.get(colData);
- if (width == null) {
- int ans = getInitialColumnWidth(columnId, treeWidgetWidth, visibleColumnIds);
- if (ans == -1) {
- treeColumn.setWidth(widthHint);
- } else {
- treeColumn.setWidth(ans);
- }
- } else {
- treeColumn.setWidth(width.intValue());
- }
- treeColumn.addControlListener(fListener);
- }
- }
+ initColumns(avg1, treeWidgetWidth1, visibleColumns);
+ }
+ tree2.removePaintListener(this);
+ }
+ });
+ } else {
+ initColumns(avg, treeWidgetWidth, visibleColumnIds);
+ }
+ }
+
+ private void initColumns(int widthHint, int treeWidgetWidth, String[] visibleColumnIds) {
+ TreeColumn[] columns = getTree().getColumns();
+ for (int i = 0; i < columns.length; i++) {
+ TreeColumn treeColumn = columns[i];
+ Object colData = treeColumn.getData();
+ String columnId = colData instanceof String ? (String) colData : null;
+ Integer width = fColumnSizes.get(colData);
+ if (width == null) {
+ int ans = getInitialColumnWidth(columnId, treeWidgetWidth, visibleColumnIds);
+ if (ans == -1) {
+ treeColumn.setWidth(widthHint);
+ } else {
+ treeColumn.setWidth(ans);
+ }
+ } else {
+ treeColumn.setWidth(width.intValue());
+ }
+ treeColumn.addControlListener(fListener);
+ }
+ }
/**
* Returns the current column presentation for this viewer, or <code>null</code>
@@ -788,25 +788,25 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
if (columns == null) {
return presentation.getInitialColumns();
} else {
- String[] available = presentation.getAvailableColumns();
- for (int i = 0; i < columns.length; i++) {
- boolean columnAvailable = false;
- for (int j = 0; j < available.length; j++) {
- if (columns[i].equals(available[j])) {
+ String[] available = presentation.getAvailableColumns();
+ for (int i = 0; i < columns.length; i++) {
+ boolean columnAvailable = false;
+ for (int j = 0; j < available.length; j++) {
+ if (columns[i].equals(available[j])) {
columnAvailable = true;
}
- }
-
- if (!columnAvailable || presentation.getHeader(columns[i]) == null) {
- // We found a column ID which is not in current list of available column IDs.
- // Or the presentation cannot return a header title for the given column.
- // Clear out saved column data for given column presentation.
- fVisibleColumns.remove(presentation.getId());
- fColumnOrder.remove(presentation.getId());
- fColumnSizes.remove(presentation.getId());
- return presentation.getInitialColumns();
- }
- }
+ }
+
+ if (!columnAvailable || presentation.getHeader(columns[i]) == null) {
+ // We found a column ID which is not in current list of available column IDs.
+ // Or the presentation cannot return a header title for the given column.
+ // Clear out saved column data for given column presentation.
+ fVisibleColumns.remove(presentation.getId());
+ fColumnOrder.remove(presentation.getId());
+ fColumnSizes.remove(presentation.getId());
+ return presentation.getInitialColumns();
+ }
+ }
}
return columns;
}
@@ -834,9 +834,9 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
}
/**
- * Persists column sizes in cache
- */
- protected void persistColumnSizes() {
+ * Persists column sizes in cache
+ */
+ protected void persistColumnSizes() {
Tree tree = getTree();
TreeColumn[] columns = tree.getColumns();
for (int i = 0; i < columns.length; i++) {
@@ -844,29 +844,29 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
Object id = treeColumn.getData();
fColumnSizes.put(id, Integer.valueOf(treeColumn.getWidth()));
}
- }
-
- /**
- * Persists column ordering
- */
- protected void persistColumnOrder() {
- IColumnPresentation presentation = getColumnPresentation();
- if (presentation != null) {
- Tree tree = getTree();
- int[] order = tree.getColumnOrder();
- if (order.length > 0) {
- for (int i = 0; i < order.length; i++) {
+ }
+
+ /**
+ * Persists column ordering
+ */
+ protected void persistColumnOrder() {
+ IColumnPresentation presentation = getColumnPresentation();
+ if (presentation != null) {
+ Tree tree = getTree();
+ int[] order = tree.getColumnOrder();
+ if (order.length > 0) {
+ for (int i = 0; i < order.length; i++) {
if (i != order[i]) {
// non default order
fColumnOrder.put(presentation.getId(), order);
return;
}
}
- }
- // default order
- fColumnOrder.remove(presentation.getId());
- }
- }
+ }
+ // default order
+ fColumnOrder.remove(presentation.getId());
+ }
+ }
/**
* Save viewer state into the given memento.
@@ -1022,7 +1022,7 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
return false;
}
/**
- * Registers the specified listener for view update notifications.
+ * Registers the specified listener for view update notifications.
*
* @param listener listener
*/
@@ -1038,7 +1038,7 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
*/
@Override
public void removeViewerUpdateListener(IViewerUpdateListener listener) {
- ITreeModelContentProvider cp = (ITreeModelContentProvider)getContentProvider();
+ ITreeModelContentProvider cp = (ITreeModelContentProvider)getContentProvider();
if (cp != null) {
cp.removeViewerUpdateListener(listener);
}
@@ -1061,24 +1061,24 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
*/
@Override
public void removeModelChangedListener(IModelChangedListener listener) {
- ITreeModelContentProvider cp = (ITreeModelContentProvider)getContentProvider();
+ ITreeModelContentProvider cp = (ITreeModelContentProvider)getContentProvider();
if (cp != null) {
cp.removeModelChangedListener(listener);
}
}
- @Override
+ @Override
public void addStateUpdateListener(IStateUpdateListener listener) {
- ((ITreeModelContentProvider)getContentProvider()).addStateUpdateListener(listener);
- }
+ ((ITreeModelContentProvider)getContentProvider()).addStateUpdateListener(listener);
+ }
- @Override
+ @Override
public void removeStateUpdateListener(IStateUpdateListener listener) {
- ITreeModelContentProvider cp = (ITreeModelContentProvider)getContentProvider();
- if (cp != null) {
- cp.removeStateUpdateListener(listener);
- }
- }
+ ITreeModelContentProvider cp = (ITreeModelContentProvider)getContentProvider();
+ if (cp != null) {
+ cp.removeStateUpdateListener(listener);
+ }
+ }
@Override
protected void doUpdateItem(final Item item, Object element) {
@@ -1092,9 +1092,9 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
}
if ( !((ITreeModelLabelProvider)getLabelProvider()).update(getTreePathFromItem(item)) ) {
- if (element instanceof String) {
- item.setData(PREV_LABEL_KEY, new String[] { (String)element } );
- }
+ if (element instanceof String) {
+ item.setData(PREV_LABEL_KEY, new String[] { (String)element } );
+ }
}
@@ -1107,14 +1107,14 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
@Override
public void addLabelUpdateListener(ILabelUpdateListener listener) {
- ((ITreeModelLabelProvider)getLabelProvider()).addLabelUpdateListener(listener);
+ ((ITreeModelLabelProvider)getLabelProvider()).addLabelUpdateListener(listener);
}
@Override
public void removeLabelUpdateListener(ILabelUpdateListener listener) {
- if (!getControl().isDisposed()) {
- ((ITreeModelLabelProvider)getLabelProvider()).removeLabelUpdateListener(listener);
- }
+ if (!getControl().isDisposed()) {
+ ((ITreeModelLabelProvider)getLabelProvider()).removeLabelUpdateListener(listener);
+ }
}
/**
@@ -1271,50 +1271,50 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
//**************************************************************************
// Another couple of methods copied from TreeViewer to workaround the UI bug 266189.
//
- @Override
+ @Override
protected void createChildren(Widget widget) {
- Object element = widget.getData();
- if (element == null && widget instanceof TreeItem) {
- // parent has not been materialized
- virtualMaterializeItem((TreeItem) widget);
- // try getting the element now that updateElement was called
- element = widget.getData();
- }
- if (element == null) {
- // give up because the parent is still not materialized
- return;
- }
- Item[] children = getChildren(widget);
- if (children.length == 1 && children[0].getData() == null) {
- // found a dummy node
- virtualLazyUpdateChildCount(widget, children.length);
- children = getChildren(widget);
- }
- // DO NOT touch all children
- return;
- }
-
- private void virtualMaterializeItem(TreeItem treeItem) {
- if (treeItem.getData() != null) {
- // already materialized
- return;
- }
-
- int index;
- Widget parent = treeItem.getParentItem();
- if (parent == null) {
- parent = treeItem.getParent();
- }
- Object parentElement = parent.getData();
- if (parentElement != null) {
- if (parent instanceof Tree) {
- index = ((Tree) parent).indexOf(treeItem);
- } else {
- index = ((TreeItem) parent).indexOf(treeItem);
- }
- virtualLazyUpdateWidget(parent, index);
- }
- }
+ Object element = widget.getData();
+ if (element == null && widget instanceof TreeItem) {
+ // parent has not been materialized
+ virtualMaterializeItem((TreeItem) widget);
+ // try getting the element now that updateElement was called
+ element = widget.getData();
+ }
+ if (element == null) {
+ // give up because the parent is still not materialized
+ return;
+ }
+ Item[] children = getChildren(widget);
+ if (children.length == 1 && children[0].getData() == null) {
+ // found a dummy node
+ virtualLazyUpdateChildCount(widget, children.length);
+ children = getChildren(widget);
+ }
+ // DO NOT touch all children
+ return;
+ }
+
+ private void virtualMaterializeItem(TreeItem treeItem) {
+ if (treeItem.getData() != null) {
+ // already materialized
+ return;
+ }
+
+ int index;
+ Widget parent = treeItem.getParentItem();
+ if (parent == null) {
+ parent = treeItem.getParent();
+ }
+ Object parentElement = parent.getData();
+ if (parentElement != null) {
+ if (parent instanceof Tree) {
+ index = ((Tree) parent).indexOf(treeItem);
+ } else {
+ index = ((TreeItem) parent).indexOf(treeItem);
+ }
+ virtualLazyUpdateWidget(parent, index);
+ }
+ }
/**
@@ -1333,470 +1333,470 @@ public class InternalTreeModelViewer extends TreeViewer implements IInternalTree
}
}
- @Override
+ @Override
public int findElementIndex(TreePath parentPath, Object element) {
- Widget parentItem = findItem(parentPath);
- if (parentItem != null) {
- Item[] children = getChildren(parentItem);
- for (int i = 0; i < children.length; i++) {
- Item item = children[i];
- Object data = item.getData();
- if ( (element != null && element.equals(data)) || (element == null && data == null) ) {
- return i;
- }
- }
- }
- return -1;
- }
-
- @Override
+ Widget parentItem = findItem(parentPath);
+ if (parentItem != null) {
+ Item[] children = getChildren(parentItem);
+ for (int i = 0; i < children.length; i++) {
+ Item item = children[i];
+ Object data = item.getData();
+ if ( (element != null && element.equals(data)) || (element == null && data == null) ) {
+ return i;
+ }
+ }
+ }
+ return -1;
+ }
+
+ @Override
public boolean getElementChildrenRealized(TreePath parentPath) {
- Widget parentItem = findItem(parentPath);
- if (parentItem != null) {
- Item[] children = getChildren(parentItem);
- for (int i = 0; i < children.length; i++) {
- if (children[i].getData() == null) {
- return false;
- }
- }
- }
- return true;
- }
-
- @Override
+ Widget parentItem = findItem(parentPath);
+ if (parentItem != null) {
+ Item[] children = getChildren(parentItem);
+ for (int i = 0; i < children.length; i++) {
+ if (children[i].getData() == null) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ @Override
public Display getDisplay() {
- Control control = getControl();
+ Control control = getControl();
if (control != null && !control.isDisposed()) {
- return control.getDisplay();
- }
- return null;
- }
+ return control.getDisplay();
+ }
+ return null;
+ }
- protected static final String[] STATE_PROPERTIES = new String[]{ IBasicPropertyConstants.P_TEXT, IBasicPropertyConstants.P_IMAGE };
+ protected static final String[] STATE_PROPERTIES = new String[]{ IBasicPropertyConstants.P_TEXT, IBasicPropertyConstants.P_IMAGE };
- @Override
+ @Override
public void update(Object element) {
- update(element, STATE_PROPERTIES);
- }
-
- /**
- * Label data cache keys
- * TODO: workaround for bug 159461
- */
- static String PREV_LABEL_KEY = "PREV_LABEL_KEY"; //$NON-NLS-1$
- static String PREV_IMAGE_KEY = "PREV_IMAGE_KEY"; //$NON-NLS-1$
- static String PREV_FONT_KEY = "PREV_FONT_KEY"; //$NON-NLS-1$
- static String PREV_FOREGROUND_KEY = "PREV_FOREGROUND_KEY"; //$NON-NLS-1$
- static String PREV_BACKGROUND_KEY = "PREV_BACKGROUND_KEY"; //$NON-NLS-1$
- static String PREV_CHECKED_KEY = "PREV_CHECKED_KEY"; //$NON-NLS-1$
- static String PREV_GRAYED_KEY = "PREV_GRAYED_KEY"; //$NON-NLS-1$
-
- @Override
+ update(element, STATE_PROPERTIES);
+ }
+
+ /**
+ * Label data cache keys
+ * TODO: workaround for bug 159461
+ */
+ static String PREV_LABEL_KEY = "PREV_LABEL_KEY"; //$NON-NLS-1$
+ static String PREV_IMAGE_KEY = "PREV_IMAGE_KEY"; //$NON-NLS-1$
+ static String PREV_FONT_KEY = "PREV_FONT_KEY"; //$NON-NLS-1$
+ static String PREV_FOREGROUND_KEY = "PREV_FOREGROUND_KEY"; //$NON-NLS-1$
+ static String PREV_BACKGROUND_KEY = "PREV_BACKGROUND_KEY"; //$NON-NLS-1$
+ static String PREV_CHECKED_KEY = "PREV_CHECKED_KEY"; //$NON-NLS-1$
+ static String PREV_GRAYED_KEY = "PREV_GRAYED_KEY"; //$NON-NLS-1$
+
+ @Override
public void setElementData(TreePath path, int numColumns, String[] labels, ImageDescriptor[] imageDescriptors,
- FontData[] fontDatas, RGB[] _foregrounds, RGB[] _backgrounds)
- {
- Widget widget = findItem(path);
- String[] columnIds = getVisibleColumns();
-
- if (widget != null && widget instanceof TreeItem && !widget.isDisposed()) {
- TreeItem item = (TreeItem)widget;
- /*Object data = item.getData();
- int itemCount = item.getItemCount();
- item.clearAll(false);
- item.setData(data);
- item.setItemCount(itemCount);*/
-
- for (int i=0; i<numColumns; i++){
- // text might be null if the launch has been terminated
- item.setText(i,(labels[i] == null ? IInternalDebugCoreConstants.EMPTY_STRING : labels[i]));
- }
- item.setData(PREV_LABEL_KEY, labels);
-
- if (imageDescriptors == null) {
- for (int i=0; i<numColumns; i++){
- item.setImage(i,null);
- }
- item.setData(PREV_IMAGE_KEY, null);
- } else {
- Image[] images = new Image[imageDescriptors.length];
- for (int i = 0; i < imageDescriptors.length; i++) {
- images[i] = ((ITreeModelLabelProvider)getLabelProvider()).getImage(imageDescriptors[i]);
- }
- if (columnIds == null) {
- item.setImage(images[0]);
- } else {
- item.setImage(images);
- }
- item.setData(PREV_IMAGE_KEY, images);
- }
-
- if (_foregrounds == null) {
- for (int i=0; i<numColumns; i++){
- item.setForeground(i,null);
- }
- item.setData(PREV_FOREGROUND_KEY, null);
- } else {
- Color[] foregrounds = new Color[_foregrounds.length];
- for (int i = 0; i< foregrounds.length; i++) {
- foregrounds[i] = ((ITreeModelLabelProvider)getLabelProvider()).getColor(_foregrounds[i]);
- }
- if (columnIds == null) {
- item.setForeground(0,foregrounds[0]);
- } else {
- for (int i = 0; i< foregrounds.length; i++) {
- item.setForeground(i, foregrounds[i]);
- }
- }
- item.setData(PREV_FOREGROUND_KEY, foregrounds);
- }
-
- if (_backgrounds == null) {
- for (int i=0; i<numColumns; i++){
- item.setBackground(i,null);
- }
- item.setData(PREV_BACKGROUND_KEY, null);
- } else {
- Color[] backgrounds = new Color[_backgrounds.length];
- for (int i = 0; i< backgrounds.length; i++) {
- backgrounds[i] = ((ITreeModelLabelProvider)getLabelProvider()).getColor(_backgrounds[i]);
- }
- if (columnIds == null) {
- item.setBackground(0,backgrounds[0]);
- } else {
- for (int i = 0; i< backgrounds.length; i++) {
- item.setBackground(i, backgrounds[i]);
- }
- }
- item.setData(PREV_BACKGROUND_KEY, backgrounds);
- }
-
- if (fontDatas == null) {
- for (int i=0; i<numColumns; i++){
- item.setFont(i,null);
- }
- item.setData(PREV_FONT_KEY, null);
- } else {
- Font[] fonts = new Font[fontDatas.length];
- for (int i = 0; i < fontDatas.length; i++) {
- fonts[i] = ((ITreeModelLabelProvider)getLabelProvider()).getFont(fontDatas[i]);
- }
- if (columnIds == null) {
- item.setFont(0,fonts[0]);
- } else {
- for (int i = 0; i < fonts.length; i++) {
- item.setFont(i, fonts[i]);
- }
- }
- item.setData(PREV_FONT_KEY, fonts);
- }
- }
- }
-
- @Override
+ FontData[] fontDatas, RGB[] _foregrounds, RGB[] _backgrounds)
+ {
+ Widget widget = findItem(path);
+ String[] columnIds = getVisibleColumns();
+
+ if (widget != null && widget instanceof TreeItem && !widget.isDisposed()) {
+ TreeItem item = (TreeItem)widget;
+ /*Object data = item.getData();
+ int itemCount = item.getItemCount();
+ item.clearAll(false);
+ item.setData(data);
+ item.setItemCount(itemCount);*/
+
+ for (int i=0; i<numColumns; i++){
+ // text might be null if the launch has been terminated
+ item.setText(i,(labels[i] == null ? IInternalDebugCoreConstants.EMPTY_STRING : labels[i]));
+ }
+ item.setData(PREV_LABEL_KEY, labels);
+
+ if (imageDescriptors == null) {
+ for (int i=0; i<numColumns; i++){
+ item.setImage(i,null);
+ }
+ item.setData(PREV_IMAGE_KEY, null);
+ } else {
+ Image[] images = new Image[imageDescriptors.length];
+ for (int i = 0; i < imageDescriptors.length; i++) {
+ images[i] = ((ITreeModelLabelProvider)getLabelProvider()).getImage(imageDescriptors[i]);
+ }
+ if (columnIds == null) {
+ item.setImage(images[0]);
+ } else {
+ item.setImage(images);
+ }
+ item.setData(PREV_IMAGE_KEY, images);
+ }
+
+ if (_foregrounds == null) {
+ for (int i=0; i<numColumns; i++){
+ item.setForeground(i,null);
+ }
+ item.setData(PREV_FOREGROUND_KEY, null);
+ } else {
+ Color[] foregrounds = new Color[_foregrounds.length];
+ for (int i = 0; i< foregrounds.length; i++) {
+ foregrounds[i] = ((ITreeModelLabelProvider)getLabelProvider()).getColor(_foregrounds[i]);
+ }
+ if (columnIds == null) {
+ item.setForeground(0,foregrounds[0]);
+ } else {
+ for (int i = 0; i< foregrounds.length; i++) {
+ item.setForeground(i, foregrounds[i]);
+ }
+ }
+ item.setData(PREV_FOREGROUND_KEY, foregrounds);
+ }
+
+ if (_backgrounds == null) {
+ for (int i=0; i<numColumns; i++){
+ item.setBackground(i,null);
+ }
+ item.setData(PREV_BACKGROUND_KEY, null);
+ } else {
+ Color[] backgrounds = new Color[_backgrounds.length];
+ for (int i = 0; i< backgrounds.length; i++) {
+ backgrounds[i] = ((ITreeModelLabelProvider)getLabelProvider()).getColor(_backgrounds[i]);
+ }
+ if (columnIds == null) {
+ item.setBackground(0,backgrounds[0]);
+ } else {
+ for (int i = 0; i< backgrounds.length; i++) {
+ item.setBackground(i, backgrounds[i]);
+ }
+ }
+ item.setData(PREV_BACKGROUND_KEY, backgrounds);
+ }
+
+ if (fontDatas == null) {
+ for (int i=0; i<numColumns; i++){
+ item.setFont(i,null);
+ }
+ item.setData(PREV_FONT_KEY, null);
+ } else {
+ Font[] fonts = new Font[fontDatas.length];
+ for (int i = 0; i < fontDatas.length; i++) {
+ fonts[i] = ((ITreeModelLabelProvider)getLabelProvider()).getFont(fontDatas[i]);
+ }
+ if (columnIds == null) {
+ item.setFont(0,fonts[0]);
+ } else {
+ for (int i = 0; i < fonts.length; i++) {
+ item.setFont(i, fonts[i]);
+ }
+ }
+ item.setData(PREV_FONT_KEY, fonts);
+ }
+ }
+ }
+
+ @Override
public ViewerLabel getElementLabel(TreePath path, String columnId) {
- if (path.getSegmentCount() == 0) {
- return null;
- }
-
- int columnIdx = -1;
- String[] visibleColumns = getVisibleColumns();
- if (columnId != null && visibleColumns != null) {
- int i = 0;
- for (i = 0; i < visibleColumns.length; i++) {
- if (columnId.equals(getVisibleColumns()[i])) {
- columnIdx = i;
- break;
- }
- }
- if (i == visibleColumns.length) {
- return null;
- }
- } else {
- columnIdx = 0;
- }
- TreeItem item = (TreeItem)findItem(path);
-
- if (item != null) {
- ViewerLabel label = new ViewerLabel(item.getText(columnIdx), item.getImage(columnIdx));
- label.setFont(item.getFont(columnIdx));
- label.setBackground(item.getBackground(columnIdx));
- label.setForeground(item.getForeground(columnIdx));
- return label;
- }
- return null;
- }
-
- @Override
+ if (path.getSegmentCount() == 0) {
+ return null;
+ }
+
+ int columnIdx = -1;
+ String[] visibleColumns = getVisibleColumns();
+ if (columnId != null && visibleColumns != null) {
+ int i = 0;
+ for (i = 0; i < visibleColumns.length; i++) {
+ if (columnId.equals(getVisibleColumns()[i])) {
+ columnIdx = i;
+ break;
+ }
+ }
+ if (i == visibleColumns.length) {
+ return null;
+ }
+ } else {
+ columnIdx = 0;
+ }
+ TreeItem item = (TreeItem)findItem(path);
+
+ if (item != null) {
+ ViewerLabel label = new ViewerLabel(item.getText(columnIdx), item.getImage(columnIdx));
+ label.setFont(item.getFont(columnIdx));
+ label.setBackground(item.getBackground(columnIdx));
+ label.setForeground(item.getForeground(columnIdx));
+ return label;
+ }
+ return null;
+ }
+
+ @Override
public void reveal(TreePath path, int index) {
- Widget item = findItem(path);
- TreeItem[] children = null;
- if (item instanceof TreeItem) {
- children = ((TreeItem)item).getItems();
- } else if (item instanceof Tree) {
- children = ((Tree)item).getItems();
- }
- if (children != null && index < children.length) {
- getTree().setTopItem(children[index]);
- }
- }
-
- @Override
+ Widget item = findItem(path);
+ TreeItem[] children = null;
+ if (item instanceof TreeItem) {
+ children = ((TreeItem)item).getItems();
+ } else if (item instanceof Tree) {
+ children = ((Tree)item).getItems();
+ }
+ if (children != null && index < children.length) {
+ getTree().setTopItem(children[index]);
+ }
+ }
+
+ @Override
public int getChildCount(TreePath path) {
- if (path.getSegmentCount() == 0) {
- return ((Tree)getControl()).getItemCount();
- } else {
- Widget[] items = internalFindItems(path);
- if (items.length > 0) {
- if (items[0] instanceof TreeItem) {
- return ((TreeItem)items[0]).getItemCount();
- }
- }
- }
- return -1;
- }
-
- @Override
+ if (path.getSegmentCount() == 0) {
+ return ((Tree)getControl()).getItemCount();
+ } else {
+ Widget[] items = internalFindItems(path);
+ if (items.length > 0) {
+ if (items[0] instanceof TreeItem) {
+ return ((TreeItem)items[0]).getItemCount();
+ }
+ }
+ }
+ return -1;
+ }
+
+ @Override
public Object getChildElement(TreePath path, int index) {
- TreeItem childItem = null;
- if (path.getSegmentCount() == 0) {
- Tree tree = (Tree)getControl();
- try {
- childItem = tree.getItem(index);
- } catch (IllegalArgumentException e) {}
- } else {
- try {
- Widget[] items = internalFindItems(path);
- if (items.length > 0) {
- if (items[0] instanceof TreeItem) {
- childItem = ((TreeItem)items[0]).getItem(index);
- }
- }
- } catch (IllegalArgumentException e) {}
- }
- if (childItem != null) {
- return childItem.getData();
- }
- return null;
- }
-
- @Override
+ TreeItem childItem = null;
+ if (path.getSegmentCount() == 0) {
+ Tree tree = (Tree)getControl();
+ try {
+ childItem = tree.getItem(index);
+ } catch (IllegalArgumentException e) {}
+ } else {
+ try {
+ Widget[] items = internalFindItems(path);
+ if (items.length > 0) {
+ if (items[0] instanceof TreeItem) {
+ childItem = ((TreeItem)items[0]).getItem(index);
+ }
+ }
+ } catch (IllegalArgumentException e) {}
+ }
+ if (childItem != null) {
+ return childItem.getData();
+ }
+ return null;
+ }
+
+ @Override
public TreePath getTopElementPath() {
- TreeItem topItem = ((Tree)getControl()).getTopItem();
+ TreeItem topItem = ((Tree)getControl()).getTopItem();
if (topItem != null && !topItem.isDisposed() && topItem.getData() != null) {
- return getTreePathFromItem(topItem);
- }
- return null;
- }
+ return getTreePathFromItem(topItem);
+ }
+ return null;
+ }
- @Override
+ @Override
public boolean saveElementState(TreePath path, ModelDelta delta, int flagsToSave) {
- Tree tree = (Tree) getControl();
- TreeItem[] selection = tree.getSelection();
+ Tree tree = (Tree) getControl();
+ TreeItem[] selection = tree.getSelection();
Set<TreeItem> set = new HashSet<>();
- for (int i = 0; i < selection.length; i++) {
- set.add(selection[i]);
- }
-
- TreeItem[] items = null;
- Widget w = internalGetWidgetToSelect(path);
- if (w instanceof Tree) {
- delta.setChildCount(
- ((ITreeModelContentProvider)getContentProvider()).viewToModelCount(path, tree.getItemCount()));
- if ((flagsToSave & IModelDelta.EXPAND) != 0) {
- delta.setFlags(delta.getFlags() | IModelDelta.EXPAND);
- }
- items = tree.getItems();
- } else if (w instanceof TreeItem) {
- TreeItem item = (TreeItem)w;
- if (item.getExpanded()) {
- int itemCount = item.getData() != null ? item.getItemCount() : -1;
- delta.setChildCount(((ITreeModelContentProvider)getContentProvider()).viewToModelCount(path, itemCount));
- if ((flagsToSave & IModelDelta.EXPAND) != 0) {
- delta.setFlags(delta.getFlags() | IModelDelta.EXPAND);
- }
- } else if ((flagsToSave & IModelDelta.COLLAPSE) != 0){
- delta.setFlags(delta.getFlags() | IModelDelta.COLLAPSE);
- }
-
- if (set.contains(item) && (flagsToSave & IModelDelta.SELECT) != 0) {
- delta.setFlags(delta.getFlags() | IModelDelta.SELECT);
- }
- items = ((TreeItem)w).getItems();
- }
- if (items != null && items.length != 0) {
- for (int i = 0; i < items.length; i++) {
- doSaveElementState(path, delta, items[i], set, i, flagsToSave);
- }
- return true;
- } else {
- return false;
- }
- }
+ for (int i = 0; i < selection.length; i++) {
+ set.add(selection[i]);
+ }
+
+ TreeItem[] items = null;
+ Widget w = internalGetWidgetToSelect(path);
+ if (w instanceof Tree) {
+ delta.setChildCount(
+ ((ITreeModelContentProvider)getContentProvider()).viewToModelCount(path, tree.getItemCount()));
+ if ((flagsToSave & IModelDelta.EXPAND) != 0) {
+ delta.setFlags(delta.getFlags() | IModelDelta.EXPAND);
+ }
+ items = tree.getItems();
+ } else if (w instanceof TreeItem) {
+ TreeItem item = (TreeItem)w;
+ if (item.getExpanded()) {
+ int itemCount = item.getData() != null ? item.getItemCount() : -1;
+ delta.setChildCount(((ITreeModelContentProvider)getContentProvider()).viewToModelCount(path, itemCount));
+ if ((flagsToSave & IModelDelta.EXPAND) != 0) {
+ delta.setFlags(delta.getFlags() | IModelDelta.EXPAND);
+ }
+ } else if ((flagsToSave & IModelDelta.COLLAPSE) != 0){
+ delta.setFlags(delta.getFlags() | IModelDelta.COLLAPSE);
+ }
+
+ if (set.contains(item) && (flagsToSave & IModelDelta.SELECT) != 0) {
+ delta.setFlags(delta.getFlags() | IModelDelta.SELECT);
+ }
+ items = ((TreeItem)w).getItems();
+ }
+ if (items != null && items.length != 0) {
+ for (int i = 0; i < items.length; i++) {
+ doSaveElementState(path, delta, items[i], set, i, flagsToSave);
+ }
+ return true;
+ } else {
+ return false;
+ }
+ }
private void doSaveElementState(TreePath parentPath, ModelDelta delta, TreeItem item, Collection<TreeItem> set, int index, int flagsToSave) {
- Object element = item.getData();
- if (element != null) {
- boolean expanded = item.getExpanded();
- boolean selected = set.contains(item);
- int flags = IModelDelta.NO_CHANGE;
- if (expanded && (flagsToSave & IModelDelta.EXPAND) != 0) {
- flags = flags | IModelDelta.EXPAND;
- }
- if (!expanded && (flagsToSave & IModelDelta.COLLAPSE) != 0) {
- flags = flags | IModelDelta.COLLAPSE;
- }
- if (selected && (flagsToSave & IModelDelta.SELECT) != 0) {
- flags = flags | IModelDelta.SELECT;
- }
- if (expanded || flags != IModelDelta.NO_CHANGE) {
- int modelIndex = ((ITreeModelContentProvider)getContentProvider()).viewToModelIndex(parentPath, index);
- TreePath elementPath = parentPath.createChildPath(element);
- ModelDelta childDelta = delta.addNode(element, modelIndex, flags, -1);
- if (expanded) {
- // Only get the item count if the item is expanded. Getting
- // item count triggers an update of the element (bug 335734).
- int itemCount = item.getItemCount();
- int numChildren = ((ITreeModelContentProvider)getContentProvider()).viewToModelCount(elementPath, itemCount);
- childDelta.setChildCount(numChildren);
- TreeItem[] items = item.getItems();
- for (int i = 0; i < items.length; i++) {
- doSaveElementState(elementPath, childDelta, items[i], set, i, flagsToSave);
- }
- }
- }
- }
- }
-
- @Override
+ Object element = item.getData();
+ if (element != null) {
+ boolean expanded = item.getExpanded();
+ boolean selected = set.contains(item);
+ int flags = IModelDelta.NO_CHANGE;
+ if (expanded && (flagsToSave & IModelDelta.EXPAND) != 0) {
+ flags = flags | IModelDelta.EXPAND;
+ }
+ if (!expanded && (flagsToSave & IModelDelta.COLLAPSE) != 0) {
+ flags = flags | IModelDelta.COLLAPSE;
+ }
+ if (selected && (flagsToSave & IModelDelta.SELECT) != 0) {
+ flags = flags | IModelDelta.SELECT;
+ }
+ if (expanded || flags != IModelDelta.NO_CHANGE) {
+ int modelIndex = ((ITreeModelContentProvider)getContentProvider()).viewToModelIndex(parentPath, index);
+ TreePath elementPath = parentPath.createChildPath(element);
+ ModelDelta childDelta = delta.addNode(element, modelIndex, flags, -1);
+ if (expanded) {
+ // Only get the item count if the item is expanded. Getting
+ // item count triggers an update of the element (bug 335734).
+ int itemCount = item.getItemCount();
+ int numChildren = ((ITreeModelContentProvider)getContentProvider()).viewToModelCount(elementPath, itemCount);
+ childDelta.setChildCount(numChildren);
+ TreeItem[] items = item.getItems();
+ for (int i = 0; i < items.length; i++) {
+ doSaveElementState(elementPath, childDelta, items[i], set, i, flagsToSave);
+ }
+ }
+ }
+ }
+ }
+
+ @Override
public void updateViewer(IModelDelta delta) {
- ((ITreeModelContentProvider)getContentProvider()).updateModel(delta, ITreeModelContentProvider.ALL_MODEL_DELTA_FLAGS);
- }
+ ((ITreeModelContentProvider)getContentProvider()).updateModel(delta, ITreeModelContentProvider.ALL_MODEL_DELTA_FLAGS);
+ }
@Override
public void setElementChecked(TreePath path, boolean checked, boolean grayed) {
- Widget widget = findItem(path);
+ Widget widget = findItem(path);
- if (widget != null && widget instanceof TreeItem && !widget.isDisposed()) {
- TreeItem item = (TreeItem)widget;
+ if (widget != null && widget instanceof TreeItem && !widget.isDisposed()) {
+ TreeItem item = (TreeItem)widget;
- item.setChecked(checked);
- item.setGrayed(grayed);
+ item.setChecked(checked);
+ item.setGrayed(grayed);
- item.setData(PREV_CHECKED_KEY, checked ? Boolean.TRUE : Boolean.FALSE);
- item.setData(PREV_GRAYED_KEY, grayed ? Boolean.TRUE : Boolean.FALSE);
- }
+ item.setData(PREV_CHECKED_KEY, checked ? Boolean.TRUE : Boolean.FALSE);
+ item.setData(PREV_GRAYED_KEY, grayed ? Boolean.TRUE : Boolean.FALSE);
+ }
}
- @Override
+ @Override
public boolean getElementChecked(TreePath path) {
- Widget widget = findItem(path);
-
- if (widget != null && widget instanceof TreeItem && !widget.isDisposed()) {
- TreeItem item = (TreeItem)widget;
-
- return item.getChecked();
- }
- return false;
- }
-
- /**
- * Retrieves the element's check box grayed state.
- *
- * @param path the path of the element to set grayed
- * @return grayed
- */
- @Override
+ Widget widget = findItem(path);
+
+ if (widget != null && widget instanceof TreeItem && !widget.isDisposed()) {
+ TreeItem item = (TreeItem)widget;
+
+ return item.getChecked();
+ }
+ return false;
+ }
+
+ /**
+ * Retrieves the element's check box grayed state.
+ *
+ * @param path the path of the element to set grayed
+ * @return grayed
+ */
+ @Override
public boolean getElementGrayed(TreePath path) {
- Widget widget = findItem(path);
+ Widget widget = findItem(path);
- if (widget != null && widget instanceof TreeItem && !widget.isDisposed()) {
- TreeItem item = (TreeItem)widget;
+ if (widget != null && widget instanceof TreeItem && !widget.isDisposed()) {
+ TreeItem item = (TreeItem)widget;
- return item.getGrayed();
- }
- return false;
- }
+ return item.getGrayed();
+ }
+ return false;
+ }
- @Override
+ @Override
public boolean getHasChildren(Object elementOrTreePath) {
- if (elementOrTreePath instanceof TreePath &&
- ((TreePath)elementOrTreePath).getSegmentCount() == 0)
- {
- return getTree().getItemCount() > 0;
- }
-
- Widget[] items = internalFindItems(elementOrTreePath);
- if (items != null && items.length > 0) {
- if (items[0] instanceof TreeItem) {
- return ((TreeItem)items[0]).getItemCount() > 0;
- } else {
- return ((Tree)items[0]).getItemCount() > 0;
- }
- }
-
- return false;
- }
-
- @Override
+ if (elementOrTreePath instanceof TreePath &&
+ ((TreePath)elementOrTreePath).getSegmentCount() == 0)
+ {
+ return getTree().getItemCount() > 0;
+ }
+
+ Widget[] items = internalFindItems(elementOrTreePath);
+ if (items != null && items.length > 0) {
+ if (items[0] instanceof TreeItem) {
+ return ((TreeItem)items[0]).getItemCount() > 0;
+ } else {
+ return ((Tree)items[0]).getItemCount() > 0;
+ }
+ }
+
+ return false;
+ }
+
+ @Override
public TreePath[] getElementPaths(Object element) {
- Widget[] items = internalFindItems(element);
- TreePath[] paths = new TreePath[items.length];
- for (int i = 0; i < items.length; i++) {
- if (items[i] instanceof Tree) {
- paths[i] = TreePath.EMPTY;
- } else {
- paths[i] = getTreePathFromItem((Item)items[i]);
- }
- }
- return paths;
- }
+ Widget[] items = internalFindItems(element);
+ TreePath[] paths = new TreePath[items.length];
+ for (int i = 0; i < items.length; i++) {
+ if (items[i] instanceof Tree) {
+ paths[i] = TreePath.EMPTY;
+ } else {
+ paths[i] = getTreePathFromItem((Item)items[i]);
+ }
+ }
+ return paths;
+ }
@Override
protected void handleSelect(SelectionEvent event) {
- super.handleSelect(event);
-
- TreeItem item = (TreeItem) event.item;
- if (item != null) { // item can be null when de-selected (bug 296703)
- Object element = item.getData();
- IContentProvider contentProvider = getContentProvider();
- if (element != null && contentProvider instanceof TreeModelContentProvider) {
- TreePath path = getTreePathFromItem(item);
-
- if (event.detail == SWT.CHECK) {
- boolean checked = item.getChecked();
- boolean accepted = ((ITreeModelContentProvider) contentProvider).setChecked(path, checked);
-
- // if the listen rejects the change or there is not ICheckboxModelProxy, than revert the check state
- if (!accepted) {
- item.setChecked(!checked);
- } else {
- item.setData(PREV_CHECKED_KEY, Boolean.valueOf(checked));
- }
- } else {
- ((TreeModelContentProvider) contentProvider).cancelRestore(path, IModelDelta.SELECT|IModelDelta.REVEAL);
- }
- }
- }
+ super.handleSelect(event);
+
+ TreeItem item = (TreeItem) event.item;
+ if (item != null) { // item can be null when de-selected (bug 296703)
+ Object element = item.getData();
+ IContentProvider contentProvider = getContentProvider();
+ if (element != null && contentProvider instanceof TreeModelContentProvider) {
+ TreePath path = getTreePathFromItem(item);
+
+ if (event.detail == SWT.CHECK) {
+ boolean checked = item.getChecked();
+ boolean accepted = ((ITreeModelContentProvider) contentProvider).setChecked(path, checked);
+
+ // if the listen rejects the change or there is not ICheckboxModelProxy, than revert the check state
+ if (!accepted) {
+ item.setChecked(!checked);
+ } else {
+ item.setData(PREV_CHECKED_KEY, Boolean.valueOf(checked));
+ }
+ } else {
+ ((TreeModelContentProvider) contentProvider).cancelRestore(path, IModelDelta.SELECT|IModelDelta.REVEAL);
+ }
+ }
+ }
}
@Override
protected void handleTreeExpand(TreeEvent event) {
- super.handleTreeExpand(event);
- IContentProvider contentProvider = getContentProvider();
- if (contentProvider instanceof TreeModelContentProvider && event.item.getData() != null) {
- TreePath path = getTreePathFromItem((TreeItem)event.item);
- ((TreeModelContentProvider) contentProvider).cancelRestore(path, IModelDelta.COLLAPSE);
- }
+ super.handleTreeExpand(event);
+ IContentProvider contentProvider = getContentProvider();
+ if (contentProvider instanceof TreeModelContentProvider && event.item.getData() != null) {
+ TreePath path = getTreePathFromItem((TreeItem)event.item);
+ ((TreeModelContentProvider) contentProvider).cancelRestore(path, IModelDelta.COLLAPSE);
+ }
}
@Override
protected void handleTreeCollapse(TreeEvent event) {
- super.handleTreeCollapse(event);
- IContentProvider contentProvider = getContentProvider();
- if (contentProvider instanceof TreeModelContentProvider && event.item.getData() != null) {
- TreePath path = getTreePathFromItem((TreeItem)event.item);
- ((TreeModelContentProvider) contentProvider).cancelRestore(path, IModelDelta.EXPAND);
- }
+ super.handleTreeCollapse(event);
+ IContentProvider contentProvider = getContentProvider();
+ if (contentProvider instanceof TreeModelContentProvider && event.item.getData() != null) {
+ TreePath path = getTreePathFromItem((TreeItem)event.item);
+ ((TreeModelContentProvider) contentProvider).cancelRestore(path, IModelDelta.EXPAND);
+ }
}
@Override
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java
index fba0d7806..830bdf862 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java
@@ -68,245 +68,245 @@ import org.eclipse.ui.IMemento;
*/
@SuppressWarnings("deprecation")
public class InternalVirtualTreeModelViewer extends Viewer
- implements IVirtualItemListener,
- org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer,
- IInternalTreeModelViewer
+ implements IVirtualItemListener,
+ org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer,
+ IInternalTreeModelViewer
{
- /**
- * Memento type for the visible columns for a presentation context.
- * A memento is created for each column presentation keyed by column number
- */
- private static final String VISIBLE_COLUMNS = "VISIBLE_COLUMNS"; //$NON-NLS-1$
-
- /**
- * Memento type for whether columns are visible for a presentation context.
- * Booleans are keyed by column presentation id
- */
- private static final String SHOW_COLUMNS = "SHOW_COLUMNS"; //$NON-NLS-1$
- /**
- * Memento key for the number of visible columns in a VISIBLE_COLUMNS memento
- * or for the width of a column
- */
- private static final String SIZE = "SIZE"; //$NON-NLS-1$
- /**
- * Memento key prefix a visible column
- */
- private static final String COLUMN = "COLUMN"; //$NON-NLS-1$
-
- /**
- * Item's tree path cache
- */
- private static final String TREE_PATH_KEY = "TREE_PATH_KEY"; //$NON-NLS-1$
-
- /**
- * Viewer filters currently configured for viewer.
- */
- private ViewerFilter[] fFilters = new ViewerFilter[0];
-
- /**
- * The display that this virtual tree viewer is associated with. It is used
- * for access to the UI thread.
- */
- private Display fDisplay;
-
- /**
- * The object that allows the model to identify what this view
- * is presenting.
- */
- private IPresentationContext fContext;
-
- /**
- * Input into the viewer.
- */
- private Object fInput;
-
- /**
- * The tree of items in this viewer.
- */
- private VirtualTree fTree;
-
- /**
- * Mapping of data elements in the tree to the items that hold them. The
- * tree may contain the same element in several places, so the map values
- * are lists.
- */
+ /**
+ * Memento type for the visible columns for a presentation context.
+ * A memento is created for each column presentation keyed by column number
+ */
+ private static final String VISIBLE_COLUMNS = "VISIBLE_COLUMNS"; //$NON-NLS-1$
+
+ /**
+ * Memento type for whether columns are visible for a presentation context.
+ * Booleans are keyed by column presentation id
+ */
+ private static final String SHOW_COLUMNS = "SHOW_COLUMNS"; //$NON-NLS-1$
+ /**
+ * Memento key for the number of visible columns in a VISIBLE_COLUMNS memento
+ * or for the width of a column
+ */
+ private static final String SIZE = "SIZE"; //$NON-NLS-1$
+ /**
+ * Memento key prefix a visible column
+ */
+ private static final String COLUMN = "COLUMN"; //$NON-NLS-1$
+
+ /**
+ * Item's tree path cache
+ */
+ private static final String TREE_PATH_KEY = "TREE_PATH_KEY"; //$NON-NLS-1$
+
+ /**
+ * Viewer filters currently configured for viewer.
+ */
+ private ViewerFilter[] fFilters = new ViewerFilter[0];
+
+ /**
+ * The display that this virtual tree viewer is associated with. It is used
+ * for access to the UI thread.
+ */
+ private Display fDisplay;
+
+ /**
+ * The object that allows the model to identify what this view
+ * is presenting.
+ */
+ private IPresentationContext fContext;
+
+ /**
+ * Input into the viewer.
+ */
+ private Object fInput;
+
+ /**
+ * The tree of items in this viewer.
+ */
+ private VirtualTree fTree;
+
+ /**
+ * Mapping of data elements in the tree to the items that hold them. The
+ * tree may contain the same element in several places, so the map values
+ * are lists.
+ */
private Map<Object, List<VirtualItem>> fItemsMap = new HashMap<>();
- /**
- * Whether to notify the content provider when an element is unmapped.
- * Used to suppress the notification during an associate operation.
- */
- private boolean fNotifyUnmap = true;
-
- /**
- * The label provider, must be the tree model provider.
- */
- private TreeModelLabelProvider fLabelProvider;
-
- /**
- * The content provider must be a tree model provider.
- */
- private TreeModelContentProvider fContentProvider;
-
- /**
- * Flag indicating whether the viewer is currently executing an operation
- * at the end of which the selection will be restored.
- */
- private boolean fPreservingSelecction;
-
- /**
- * Flag indicating that the selection should not be restored at the end
- * of a preserving-selection operation.
- */
- private boolean fRestoreSelection;
-
- /**
- * Level to which the tree should automatically expand elements.
- * <code>-1<code> indicates that all levels shoudl be expanded.
- */
- private int fAutoExpandToLevel = 0;
-
- /**
- * Current column presentation or <code>null</code>
- */
- private IColumnPresentation fColumnPresentation = null;
-
- /**
- * Map of columns presentation id to its visible columns id's (String[])
- * When a columns presentation is not in the map, default settings are used.
- */
+ /**
+ * Whether to notify the content provider when an element is unmapped.
+ * Used to suppress the notification during an associate operation.
+ */
+ private boolean fNotifyUnmap = true;
+
+ /**
+ * The label provider, must be the tree model provider.
+ */
+ private TreeModelLabelProvider fLabelProvider;
+
+ /**
+ * The content provider must be a tree model provider.
+ */
+ private TreeModelContentProvider fContentProvider;
+
+ /**
+ * Flag indicating whether the viewer is currently executing an operation
+ * at the end of which the selection will be restored.
+ */
+ private boolean fPreservingSelecction;
+
+ /**
+ * Flag indicating that the selection should not be restored at the end
+ * of a preserving-selection operation.
+ */
+ private boolean fRestoreSelection;
+
+ /**
+ * Level to which the tree should automatically expand elements.
+ * <code>-1<code> indicates that all levels shoudl be expanded.
+ */
+ private int fAutoExpandToLevel = 0;
+
+ /**
+ * Current column presentation or <code>null</code>
+ */
+ private IColumnPresentation fColumnPresentation = null;
+
+ /**
+ * Map of columns presentation id to its visible columns id's (String[])
+ * When a columns presentation is not in the map, default settings are used.
+ */
private Map<String, String[]> fVisibleColumns = new HashMap<>();
- /**
- * Map of column presentation id to whether columns should be displayed
- * for that presentation (the user can toggle columns on/off when a
- * presentation is optional.
- */
+ /**
+ * Map of column presentation id to whether columns should be displayed
+ * for that presentation (the user can toggle columns on/off when a
+ * presentation is optional.
+ */
private Map<String, Boolean> fShowColumns = new HashMap<>();
- /**
- * Runnable for validating the virtual tree. It is scheduled to run in the
- * UI thread whenever a tree validation is requested.
- */
- private Runnable fValidateRunnable;
+ /**
+ * Runnable for validating the virtual tree. It is scheduled to run in the
+ * UI thread whenever a tree validation is requested.
+ */
+ private Runnable fValidateRunnable;
- public InternalVirtualTreeModelViewer(Display display, int style, IPresentationContext context, IVirtualItemValidator itemValidator) {
- fDisplay = display;
- fContext = context;
- fTree = new VirtualTree(style, itemValidator);
- fTree.addItemListener(this);
+ public InternalVirtualTreeModelViewer(Display display, int style, IPresentationContext context, IVirtualItemValidator itemValidator) {
+ fDisplay = display;
+ fContext = context;
+ fTree = new VirtualTree(style, itemValidator);
+ fTree.addItemListener(this);
- fContentProvider = new TreeModelContentProvider();
- fLabelProvider = new TreeModelLabelProvider(this);
+ fContentProvider = new TreeModelContentProvider();
+ fLabelProvider = new TreeModelLabelProvider(this);
- if ((style & SWT.POP_UP) != 0) {
- getContentProvider().setModelDeltaMask(~ITreeModelContentProvider.CONTROL_MODEL_DELTA_FLAGS);
- }
- }
+ if ((style & SWT.POP_UP) != 0) {
+ getContentProvider().setModelDeltaMask(~ITreeModelContentProvider.CONTROL_MODEL_DELTA_FLAGS);
+ }
+ }
- @Override
+ @Override
public Object getInput() {
- return fInput;
- }
+ return fInput;
+ }
- @Override
+ @Override
public Control getControl() {
- // The virtual viewer does not have an SWT control associated with it.
- // Fortunately this method is not used by the base Viewer class.
- return null;
- }
+ // The virtual viewer does not have an SWT control associated with it.
+ // Fortunately this method is not used by the base Viewer class.
+ return null;
+ }
- @Override
+ @Override
public Display getDisplay() {
- return fDisplay;
- }
+ return fDisplay;
+ }
- @Override
+ @Override
public void setInput(Object input) {
- Object oldInput = fInput;
- getContentProvider().inputChanged(this, oldInput, input);
- fItemsMap.clear();
- fTree.clearAll();
- fInput = input;
- mapElement(fInput, getTree());
- getContentProvider().postInputChanged(this, oldInput , input);
- fTree.setData(fInput);
- fTree.setSelection(EMPTY_ITEMS_ARRAY);
- inputChanged(fInput, oldInput);
- refresh();
- }
-
- @Override
+ Object oldInput = fInput;
+ getContentProvider().inputChanged(this, oldInput, input);
+ fItemsMap.clear();
+ fTree.clearAll();
+ fInput = input;
+ mapElement(fInput, getTree());
+ getContentProvider().postInputChanged(this, oldInput , input);
+ fTree.setData(fInput);
+ fTree.setSelection(EMPTY_ITEMS_ARRAY);
+ inputChanged(fInput, oldInput);
+ refresh();
+ }
+
+ @Override
public void replace(Object parentElementOrTreePath, final int index, Object element) {
- VirtualItem[] selectedItems = fTree.getSelection();
- TreeSelection selection = (TreeSelection) getSelection();
- VirtualItem[] itemsToDisassociate;
- if (parentElementOrTreePath instanceof TreePath) {
- TreePath elementPath = ((TreePath) parentElementOrTreePath).createChildPath(element);
- itemsToDisassociate = findItems(elementPath);
- } else {
- itemsToDisassociate = findItems(element);
- }
-
- VirtualItem[] parentItems = findItems(parentElementOrTreePath);
- for (int i = 0; i < parentItems.length; i++) {
- VirtualItem parentItem = parentItems[i];
- if (index < parentItem.getItemCount()) {
- VirtualItem item = parentItem.getItem(new Index(index));
- selection = adjustSelectionForReplace(selectedItems, selection, item, element, parentItem.getData());
- // disassociate any different item that represents the
- // same element under the same parent (the tree)
- for (int j = 0; j < itemsToDisassociate.length; j++) {
- VirtualItem itemToDisassociate = itemsToDisassociate[j];
- if (itemToDisassociate != item && itemsToDisassociate[j].getParent() == parentItem) {
- disassociate(itemToDisassociate);
- itemToDisassociate.getParent().clear(itemToDisassociate.getIndex());
- }
- }
- //Object oldData = item.getData();
- associate(element, item);
- doUpdate(item);
- VirtualItem[] children = item.getItems();
- for (int j = 0; j < children.length; j++) {
- children[j].setNeedsDataUpdate();
- }
- }
- }
- // Restore the selection if we are not already in a nested
- // preservingSelection:
- if (!fPreservingSelecction) {
- internalSetSelection(selection, false);
- // send out notification if old and new differ
- ISelection newSelection = getSelection();
- if (!newSelection.equals(selection)) {
- handleInvalidSelection(selection, newSelection);
- }
- }
- validate();
- }
-
- public VirtualTree getTree() {
- return fTree;
- }
-
- @Override
+ VirtualItem[] selectedItems = fTree.getSelection();
+ TreeSelection selection = (TreeSelection) getSelection();
+ VirtualItem[] itemsToDisassociate;
+ if (parentElementOrTreePath instanceof TreePath) {
+ TreePath elementPath = ((TreePath) parentElementOrTreePath).createChildPath(element);
+ itemsToDisassociate = findItems(elementPath);
+ } else {
+ itemsToDisassociate = findItems(element);
+ }
+
+ VirtualItem[] parentItems = findItems(parentElementOrTreePath);
+ for (int i = 0; i < parentItems.length; i++) {
+ VirtualItem parentItem = parentItems[i];
+ if (index < parentItem.getItemCount()) {
+ VirtualItem item = parentItem.getItem(new Index(index));
+ selection = adjustSelectionForReplace(selectedItems, selection, item, element, parentItem.getData());
+ // disassociate any different item that represents the
+ // same element under the same parent (the tree)
+ for (int j = 0; j < itemsToDisassociate.length; j++) {
+ VirtualItem itemToDisassociate = itemsToDisassociate[j];
+ if (itemToDisassociate != item && itemsToDisassociate[j].getParent() == parentItem) {
+ disassociate(itemToDisassociate);
+ itemToDisassociate.getParent().clear(itemToDisassociate.getIndex());
+ }
+ }
+ //Object oldData = item.getData();
+ associate(element, item);
+ doUpdate(item);
+ VirtualItem[] children = item.getItems();
+ for (int j = 0; j < children.length; j++) {
+ children[j].setNeedsDataUpdate();
+ }
+ }
+ }
+ // Restore the selection if we are not already in a nested
+ // preservingSelection:
+ if (!fPreservingSelecction) {
+ internalSetSelection(selection, false);
+ // send out notification if old and new differ
+ ISelection newSelection = getSelection();
+ if (!newSelection.equals(selection)) {
+ handleInvalidSelection(selection, newSelection);
+ }
+ }
+ validate();
+ }
+
+ public VirtualTree getTree() {
+ return fTree;
+ }
+
+ @Override
public void insert(Object parentOrTreePath, Object element, int position) {
- if (parentOrTreePath instanceof TreePath) {
- VirtualItem parentItem = findItem((TreePath) parentOrTreePath);
- if (parentItem != null) {
- VirtualItem item = parentItem.addItem(position);
- item.setData(element);
- mapElement(element, item);
- doUpdate(item);
- }
- } else {
- // TODO: Implement insert() for element
- }
- validate();
- }
-
- @Override
+ if (parentOrTreePath instanceof TreePath) {
+ VirtualItem parentItem = findItem((TreePath) parentOrTreePath);
+ if (parentItem != null) {
+ VirtualItem item = parentItem.addItem(position);
+ item.setData(element);
+ mapElement(element, item);
+ doUpdate(item);
+ }
+ } else {
+ // TODO: Implement insert() for element
+ }
+ validate();
+ }
+
+ @Override
public void remove(final Object parentOrTreePath, final int index) {
final List<TreePath> oldSelection = new LinkedList<>(Arrays.asList(((TreeSelection) getSelection()).getPaths()));
preservingSelection(() -> {
@@ -351,50 +351,50 @@ public class InternalVirtualTreeModelViewer extends Viewer
}
}
});
- }
+ }
- @Override
+ @Override
public void remove(Object elementOrPath) {
- if (elementOrPath.equals(getInput()) || TreePath.EMPTY.equals(elementOrPath)) {
- setInput(null);
- return;
- }
-
- VirtualItem[] items = findItems(elementOrPath);
- if (items.length > 0) {
- for (int j = 0; j < items.length; j++) {
- disassociate(items[j]);
- items[j].getParent().remove(items[j].getIndex());
- }
- }
- }
-
- private TreeSelection adjustSelectionForReplace(VirtualItem[] selectedItems, TreeSelection selection,
- VirtualItem item, Object element, Object parentElement)
- {
- if (item.getData() != null || selectedItems.length == selection.size() || parentElement == null) {
- // Don't do anything - we are not seeing an instance of bug 185673
- return selection;
- }
- for (int i = 0; i < selectedItems.length; i++) {
- if (item == selectedItems[i]) {
- // The current item was selected, but its data is null.
- // The data will be replaced by the given element, so to keep
- // it selected, we have to add it to the selection.
- TreePath[] originalPaths = selection.getPaths();
- int length = originalPaths.length;
- TreePath[] paths = new TreePath[length + 1];
- System.arraycopy(originalPaths, 0, paths, 0, length);
- // set the element temporarily so that we can call getTreePathFromItem
- item.setData(element);
- paths[length] = getTreePathFromItem(item);
- item.setData(null);
- return new TreeSelection(paths, selection.getElementComparer());
- }
- }
- // The item was not selected, return the given selection
- return selection;
- }
+ if (elementOrPath.equals(getInput()) || TreePath.EMPTY.equals(elementOrPath)) {
+ setInput(null);
+ return;
+ }
+
+ VirtualItem[] items = findItems(elementOrPath);
+ if (items.length > 0) {
+ for (int j = 0; j < items.length; j++) {
+ disassociate(items[j]);
+ items[j].getParent().remove(items[j].getIndex());
+ }
+ }
+ }
+
+ private TreeSelection adjustSelectionForReplace(VirtualItem[] selectedItems, TreeSelection selection,
+ VirtualItem item, Object element, Object parentElement)
+ {
+ if (item.getData() != null || selectedItems.length == selection.size() || parentElement == null) {
+ // Don't do anything - we are not seeing an instance of bug 185673
+ return selection;
+ }
+ for (int i = 0; i < selectedItems.length; i++) {
+ if (item == selectedItems[i]) {
+ // The current item was selected, but its data is null.
+ // The data will be replaced by the given element, so to keep
+ // it selected, we have to add it to the selection.
+ TreePath[] originalPaths = selection.getPaths();
+ int length = originalPaths.length;
+ TreePath[] paths = new TreePath[length + 1];
+ System.arraycopy(originalPaths, 0, paths, 0, length);
+ // set the element temporarily so that we can call getTreePathFromItem
+ item.setData(element);
+ paths[length] = getTreePathFromItem(item);
+ item.setData(null);
+ return new TreeSelection(paths, selection.getElementComparer());
+ }
+ }
+ // The item was not selected, return the given selection
+ return selection;
+ }
// private VirtualTreeSelection adjustSelectionForReplace(VirtualTreeSelection selection, VirtualItem item,
// Object element, Object parentElement)
@@ -449,181 +449,181 @@ public class InternalVirtualTreeModelViewer extends Viewer
// }
- @Override
+ @Override
public void reveal(TreePath path, final int index) {
- VirtualItem parentItem = findItem(path);
- if (parentItem != null && parentItem.getItemCount() >= index) {
- VirtualItem revealItem = parentItem.getItem(new Index(index));
- getTree().showItem(revealItem);
- getTree().validate();
- }
- // TODO: implement reveal()
- }
-
- @Override
+ VirtualItem parentItem = findItem(path);
+ if (parentItem != null && parentItem.getItemCount() >= index) {
+ VirtualItem revealItem = parentItem.getItem(new Index(index));
+ getTree().showItem(revealItem);
+ getTree().validate();
+ }
+ // TODO: implement reveal()
+ }
+
+ @Override
public int findElementIndex(TreePath parentPath, Object element) {
- VirtualItem parentItem = findItem(parentPath);
- if (parentItem != null) {
- VirtualItem item = parentItem.findItem(element);
- if (item != null) {
- return item.getIndex().intValue();
- }
- }
- return -1;
- }
-
- @Override
+ VirtualItem parentItem = findItem(parentPath);
+ if (parentItem != null) {
+ VirtualItem item = parentItem.findItem(element);
+ if (item != null) {
+ return item.getIndex().intValue();
+ }
+ }
+ return -1;
+ }
+
+ @Override
public boolean getElementChildrenRealized(TreePath parentPath) {
- VirtualItem parentItem = findItem(parentPath);
- if (parentItem != null) {
- return !parentItem.childrenNeedDataUpdate();
- }
- return true;
- }
+ VirtualItem parentItem = findItem(parentPath);
+ if (parentItem != null) {
+ return !parentItem.childrenNeedDataUpdate();
+ }
+ return true;
+ }
- private ITreeModelLabelProvider getLabelProvider() {
- return fLabelProvider;
- }
+ private ITreeModelLabelProvider getLabelProvider() {
+ return fLabelProvider;
+ }
- private ITreeModelContentProvider getContentProvider() {
- return fContentProvider;
- }
+ private ITreeModelContentProvider getContentProvider() {
+ return fContentProvider;
+ }
- public static int ALL_LEVELS = -1;
+ public static int ALL_LEVELS = -1;
- @Override
+ @Override
public void refresh() {
- refresh(fTree);
- validate();
- }
+ refresh(fTree);
+ validate();
+ }
- @Override
+ @Override
public void refresh(Object element) {
- VirtualItem[] items = findItems(element);
- for (int i = 0; i < items.length; i++) {
- refresh(items[i]);
- validate();
- }
- }
-
- private void refresh(VirtualItem item) {
- getContentProvider().preserveState(getTreePathFromItem(item));
-
- if (!item.needsDataUpdate()) {
- if (item.getParent() != null) {
- item.setNeedsLabelUpdate();
- virtualLazyUpdateHasChildren(item);
- }
-
- VirtualItem[] items = item.getItems();
- for (int i = 0; i < items.length; i++) {
- items[i].setNeedsDataUpdate();
- }
- }
- refreshStruct(item);
- }
-
- private void refreshStruct(VirtualItem item) {
- boolean expanded = false;
- if (item.getParent() == null) {
- // root item
- virtualLazyUpdateChildCount(item);
- expanded = true;
- } else {
- if (item.getExpanded()) {
- virtualLazyUpdateData(item);
- expanded = true;
- }
- }
-
- VirtualItem[] items = item.getItems();
- for (int i = 0; i < items.length; i++) {
- if (expanded) {
- refreshStruct(items[i]);
- } else {
- item.clear(new VirtualItem.Index(i));
- }
- }
- }
-
- private void validate() {
- if (fValidateRunnable == null) {
+ VirtualItem[] items = findItems(element);
+ for (int i = 0; i < items.length; i++) {
+ refresh(items[i]);
+ validate();
+ }
+ }
+
+ private void refresh(VirtualItem item) {
+ getContentProvider().preserveState(getTreePathFromItem(item));
+
+ if (!item.needsDataUpdate()) {
+ if (item.getParent() != null) {
+ item.setNeedsLabelUpdate();
+ virtualLazyUpdateHasChildren(item);
+ }
+
+ VirtualItem[] items = item.getItems();
+ for (int i = 0; i < items.length; i++) {
+ items[i].setNeedsDataUpdate();
+ }
+ }
+ refreshStruct(item);
+ }
+
+ private void refreshStruct(VirtualItem item) {
+ boolean expanded = false;
+ if (item.getParent() == null) {
+ // root item
+ virtualLazyUpdateChildCount(item);
+ expanded = true;
+ } else {
+ if (item.getExpanded()) {
+ virtualLazyUpdateData(item);
+ expanded = true;
+ }
+ }
+
+ VirtualItem[] items = item.getItems();
+ for (int i = 0; i < items.length; i++) {
+ if (expanded) {
+ refreshStruct(items[i]);
+ } else {
+ item.clear(new VirtualItem.Index(i));
+ }
+ }
+ }
+
+ private void validate() {
+ if (fValidateRunnable == null) {
fValidateRunnable = () -> {
if (!fTree.isDisposed()) {
fValidateRunnable = null;
fTree.validate();
}
};
- getDisplay().asyncExec(fValidateRunnable);
- }
- }
+ getDisplay().asyncExec(fValidateRunnable);
+ }
+ }
- @Override
+ @Override
protected void inputChanged(Object input, Object oldInput) {
- resetColumns(input);
- }
+ resetColumns(input);
+ }
- @Override
+ @Override
public int getAutoExpandLevel() {
- return fAutoExpandToLevel;
- }
+ return fAutoExpandToLevel;
+ }
- @Override
+ @Override
public void setAutoExpandLevel(int level) {
- fAutoExpandToLevel = level;
- }
+ fAutoExpandToLevel = level;
+ }
- public VirtualItem findItem(TreePath path) {
- if (path.getSegmentCount() == 0) {
- return fTree;
- }
+ public VirtualItem findItem(TreePath path) {
+ if (path.getSegmentCount() == 0) {
+ return fTree;
+ }
List<VirtualItem> itemsList = fItemsMap.get(path.getLastSegment());
- if (itemsList != null) {
+ if (itemsList != null) {
for (VirtualItem item : itemsList) {
if (path.equals(getTreePathFromItem(item))) {
return item;
- }
- }
- }
-
- return null;
- }
-
- static private final VirtualItem[] EMPTY_ITEMS_ARRAY = new VirtualItem[0];
-
- public VirtualItem[] findItems(Object elementOrTreePath) {
- Object element = elementOrTreePath;
- if (elementOrTreePath instanceof TreePath) {
- TreePath path = (TreePath)elementOrTreePath;
- if (path.getSegmentCount() == 0) {
- return new VirtualItem[] { getTree() };
- }
- element = path.getLastSegment();
- }
+ }
+ }
+ }
+
+ return null;
+ }
+
+ static private final VirtualItem[] EMPTY_ITEMS_ARRAY = new VirtualItem[0];
+
+ public VirtualItem[] findItems(Object elementOrTreePath) {
+ Object element = elementOrTreePath;
+ if (elementOrTreePath instanceof TreePath) {
+ TreePath path = (TreePath)elementOrTreePath;
+ if (path.getSegmentCount() == 0) {
+ return new VirtualItem[] { getTree() };
+ }
+ element = path.getLastSegment();
+ }
List<VirtualItem> itemsList = fItemsMap.get(element);
- if (itemsList == null) {
- return EMPTY_ITEMS_ARRAY;
- } else {
- return itemsList.toArray(new VirtualItem[itemsList.size()]);
- }
- }
-
- @Override
+ if (itemsList == null) {
+ return EMPTY_ITEMS_ARRAY;
+ } else {
+ return itemsList.toArray(new VirtualItem[itemsList.size()]);
+ }
+ }
+
+ @Override
public void setElementData(TreePath path, int numColumns, String[] labels, ImageDescriptor[] images,
- FontData[] fontDatas, RGB[] foregrounds, RGB[] backgrounds) {
- VirtualItem item = findItem(path);
- if (item != null) {
- item.setData(VirtualItem.LABEL_KEY, labels);
- item.setData(VirtualItem.IMAGE_KEY, images);
- item.setData(VirtualItem.FOREGROUND_KEY, foregrounds);
- item.setData(VirtualItem.BACKGROUND_KEY, backgrounds);
- item.setData(VirtualItem.FONT_KEY, fontDatas);
- }
- }
-
- @Override
+ FontData[] fontDatas, RGB[] foregrounds, RGB[] backgrounds) {
+ VirtualItem item = findItem(path);
+ if (item != null) {
+ item.setData(VirtualItem.LABEL_KEY, labels);
+ item.setData(VirtualItem.IMAGE_KEY, images);
+ item.setData(VirtualItem.FOREGROUND_KEY, foregrounds);
+ item.setData(VirtualItem.BACKGROUND_KEY, backgrounds);
+ item.setData(VirtualItem.FONT_KEY, fontDatas);
+ }
+ }
+
+ @Override
public void setChildCount(final Object elementOrTreePath, final int count) {
preservingSelection(() -> {
VirtualItem[] items = findItems(elementOrTreePath);
@@ -638,10 +638,10 @@ public class InternalVirtualTreeModelViewer extends Viewer
items[i].setItemCount(count);
}
});
- validate();
- }
+ validate();
+ }
- @Override
+ @Override
public void setHasChildren(final Object elementOrTreePath, final boolean hasChildren) {
preservingSelection(() -> {
VirtualItem[] items = findItems(elementOrTreePath);
@@ -667,962 +667,962 @@ public class InternalVirtualTreeModelViewer extends Viewer
}
}
});
- }
+ }
- @Override
+ @Override
public boolean getHasChildren(Object elementOrTreePath) {
- VirtualItem[] items = findItems(elementOrTreePath);
- if (items.length > 0) {
- return items[0].hasItems();
- }
- return false;
- }
-
- private void virtualLazyUpdateHasChildren(VirtualItem item) {
- TreePath treePath;
- treePath = getTreePathFromItem(item);
- item.clearNeedsCountUpdate();
- getContentProvider().updateHasChildren(treePath);
- }
-
- private void virtualLazyUpdateChildCount(VirtualItem item) {
- item.clearNeedsCountUpdate();
- getContentProvider().updateChildCount(getTreePathFromItem(item), item.getItemCount());
- }
-
- private void virtualLazyUpdateData(VirtualItem item) {
- item.clearNeedsDataUpdate();
- getContentProvider().updateElement(getTreePathFromItem(item.getParent()), item.getIndex().intValue());
- }
-
- private void virtualLazyUpdateLabel(VirtualItem item) {
- item.clearNeedsLabelUpdate();
- if ( !getLabelProvider().update(getTreePathFromItem(item)) ) {
- if (item.getData() instanceof String) {
- item.setData(VirtualItem.LABEL_KEY, new String[] { (String)item.getData() } );
- }
- }
- }
-
- private TreePath getTreePathFromItem(VirtualItem item) {
+ VirtualItem[] items = findItems(elementOrTreePath);
+ if (items.length > 0) {
+ return items[0].hasItems();
+ }
+ return false;
+ }
+
+ private void virtualLazyUpdateHasChildren(VirtualItem item) {
+ TreePath treePath;
+ treePath = getTreePathFromItem(item);
+ item.clearNeedsCountUpdate();
+ getContentProvider().updateHasChildren(treePath);
+ }
+
+ private void virtualLazyUpdateChildCount(VirtualItem item) {
+ item.clearNeedsCountUpdate();
+ getContentProvider().updateChildCount(getTreePathFromItem(item), item.getItemCount());
+ }
+
+ private void virtualLazyUpdateData(VirtualItem item) {
+ item.clearNeedsDataUpdate();
+ getContentProvider().updateElement(getTreePathFromItem(item.getParent()), item.getIndex().intValue());
+ }
+
+ private void virtualLazyUpdateLabel(VirtualItem item) {
+ item.clearNeedsLabelUpdate();
+ if ( !getLabelProvider().update(getTreePathFromItem(item)) ) {
+ if (item.getData() instanceof String) {
+ item.setData(VirtualItem.LABEL_KEY, new String[] { (String)item.getData() } );
+ }
+ }
+ }
+
+ private TreePath getTreePathFromItem(VirtualItem item) {
List<Object> segments = new LinkedList<>();
- while (item.getParent() != null) {
- segments.add(0, item.getData());
- item = item.getParent();
- }
- return new TreePath(segments.toArray());
- }
-
- private void unmapElement(Object element, VirtualItem item) {
- if (fNotifyUnmap) {
- // TODO: should we update the filter with the "new non-identical element"?
- IContentProvider provider = getContentProvider();
- if (provider instanceof TreeModelContentProvider) {
- ((TreeModelContentProvider) provider).unmapPath((TreePath) item.getData(TREE_PATH_KEY));
- }
- }
+ while (item.getParent() != null) {
+ segments.add(0, item.getData());
+ item = item.getParent();
+ }
+ return new TreePath(segments.toArray());
+ }
+
+ private void unmapElement(Object element, VirtualItem item) {
+ if (fNotifyUnmap) {
+ // TODO: should we update the filter with the "new non-identical element"?
+ IContentProvider provider = getContentProvider();
+ if (provider instanceof TreeModelContentProvider) {
+ ((TreeModelContentProvider) provider).unmapPath((TreePath) item.getData(TREE_PATH_KEY));
+ }
+ }
List<VirtualItem> itemsList = fItemsMap.get(element);
- if (itemsList != null) {
- itemsList.remove(item);
- if (itemsList.isEmpty()) {
- fItemsMap.remove(element);
- }
- }
- }
-
- private void mapElement(Object element, VirtualItem item) {
- // Get the items set for given element, if it doesn't exist, create it.
- // When retrieving the set, also remove it from the map, it will be
- // re-inserted to make sure that the new instance of element is used
- // in case the element has changed but the elment is equal to the old
- // one.
+ if (itemsList != null) {
+ itemsList.remove(item);
+ if (itemsList.isEmpty()) {
+ fItemsMap.remove(element);
+ }
+ }
+ }
+
+ private void mapElement(Object element, VirtualItem item) {
+ // Get the items set for given element, if it doesn't exist, create it.
+ // When retrieving the set, also remove it from the map, it will be
+ // re-inserted to make sure that the new instance of element is used
+ // in case the element has changed but the elment is equal to the old
+ // one.
List<VirtualItem> itemsList = fItemsMap.remove(element);
- if (itemsList == null) {
+ if (itemsList == null) {
itemsList = new ArrayList<>(1);
- }
+ }
- if (!itemsList.contains(item)) {
- itemsList.add(item);
- }
+ if (!itemsList.contains(item)) {
+ itemsList.add(item);
+ }
- // Insert the set back into the map.
- fItemsMap.put(element, itemsList);
+ // Insert the set back into the map.
+ fItemsMap.put(element, itemsList);
- item.setData(TREE_PATH_KEY, getTreePathFromItem(item));
- }
+ item.setData(TREE_PATH_KEY, getTreePathFromItem(item));
+ }
- @Override
+ @Override
public void revealed(VirtualItem item) {
- if (item.needsDataUpdate()) {
- virtualLazyUpdateData(item);
- } else if (item.getData() != null) {
- if (item.needsLabelUpdate()) {
- virtualLazyUpdateLabel(item);
- }
- if (item.needsCountUpdate() && item.getExpanded()) {
- virtualLazyUpdateChildCount(item);
- }
- }
- }
-
- @Override
+ if (item.needsDataUpdate()) {
+ virtualLazyUpdateData(item);
+ } else if (item.getData() != null) {
+ if (item.needsLabelUpdate()) {
+ virtualLazyUpdateLabel(item);
+ }
+ if (item.needsCountUpdate() && item.getExpanded()) {
+ virtualLazyUpdateChildCount(item);
+ }
+ }
+ }
+
+ @Override
public void disposed(VirtualItem item) {
- if (!fTree.isDisposed()) {
- Object data = item.getData();
- if (data != null) {
- unmapElement(data, item);
- }
- }
- }
-
- private void associate(Object element, VirtualItem item) {
- Object data = item.getData();
- if (data != null && data != element && data.equals(element)) {
- // elements are equal but not identical
- // -> being removed from map, but should not change filters
- try {
- fNotifyUnmap = false;
- doAssociate(element, item);
- } finally {
- fNotifyUnmap = true;
- }
- } else {
- doAssociate(element, item);
- }
-
- }
-
- private void doAssociate(Object element, VirtualItem item) {
- Object data = item.getData();
- if (data != null && data != element && data.equals(element)) {
- // workaround for PR 1FV62BT
- // assumption: elements are equal but not identical
- // -> remove from map but don't touch children
- unmapElement(data, item);
- item.setData(element);
- mapElement(element, item);
- } else {
- // recursively disassociate all
- if (data != element) {
- if (data != null) {
- unmapElement(element, item);
- disassociate(item);
- }
- item.setData(element);
- }
- // Always map the element, even if data == element,
- // since unmapAllElements() can leave the map inconsistent
- // See bug 2741 for details.
- mapElement(element, item);
- }
- }
-
- private void disassociate(VirtualItem item) {
- unmapElement(item.getData(), item);
-
- // Clear the map before we clear the data
- item.setData(null);
-
- // Disassociate the children
- VirtualItem[] items = item.getItems();
- for (int i = 0; i < items.length; i++) {
- if (items[i].getData() != null) {
- disassociate(items[i]);
- }
- }
- }
-
- @Override
+ if (!fTree.isDisposed()) {
+ Object data = item.getData();
+ if (data != null) {
+ unmapElement(data, item);
+ }
+ }
+ }
+
+ private void associate(Object element, VirtualItem item) {
+ Object data = item.getData();
+ if (data != null && data != element && data.equals(element)) {
+ // elements are equal but not identical
+ // -> being removed from map, but should not change filters
+ try {
+ fNotifyUnmap = false;
+ doAssociate(element, item);
+ } finally {
+ fNotifyUnmap = true;
+ }
+ } else {
+ doAssociate(element, item);
+ }
+
+ }
+
+ private void doAssociate(Object element, VirtualItem item) {
+ Object data = item.getData();
+ if (data != null && data != element && data.equals(element)) {
+ // workaround for PR 1FV62BT
+ // assumption: elements are equal but not identical
+ // -> remove from map but don't touch children
+ unmapElement(data, item);
+ item.setData(element);
+ mapElement(element, item);
+ } else {
+ // recursively disassociate all
+ if (data != element) {
+ if (data != null) {
+ unmapElement(element, item);
+ disassociate(item);
+ }
+ item.setData(element);
+ }
+ // Always map the element, even if data == element,
+ // since unmapAllElements() can leave the map inconsistent
+ // See bug 2741 for details.
+ mapElement(element, item);
+ }
+ }
+
+ private void disassociate(VirtualItem item) {
+ unmapElement(item.getData(), item);
+
+ // Clear the map before we clear the data
+ item.setData(null);
+
+ // Disassociate the children
+ VirtualItem[] items = item.getItems();
+ for (int i = 0; i < items.length; i++) {
+ if (items[i].getData() != null) {
+ disassociate(items[i]);
+ }
+ }
+ }
+
+ @Override
public void setSelection(ISelection selection, boolean reveal) {
- setSelection(selection, reveal, false);
- }
+ setSelection(selection, reveal, false);
+ }
- @Override
+ @Override
public void setSelection(ISelection selection, boolean reveal, boolean force) {
- trySelection(selection, reveal, force);
- }
+ trySelection(selection, reveal, force);
+ }
- @Override
+ @Override
public boolean trySelection(ISelection selection, boolean reveal, boolean force) {
- if (!force && !overrideSelection(getSelection(), selection)) {
- return false;
- }
-
- if (!fPreservingSelecction) {
- internalSetSelection(selection, reveal);
- fireSelectionChanged(new SelectionChangedEvent(this, selection));
- } else {
- fRestoreSelection = false;
- internalSetSelection(selection, reveal);
- }
- return true;
- }
-
- private void internalSetSelection(ISelection selection, boolean reveal) {
- if (selection instanceof ITreeSelection) {
- TreePath[] paths = ((ITreeSelection) selection).getPaths();
+ if (!force && !overrideSelection(getSelection(), selection)) {
+ return false;
+ }
+
+ if (!fPreservingSelecction) {
+ internalSetSelection(selection, reveal);
+ fireSelectionChanged(new SelectionChangedEvent(this, selection));
+ } else {
+ fRestoreSelection = false;
+ internalSetSelection(selection, reveal);
+ }
+ return true;
+ }
+
+ private void internalSetSelection(ISelection selection, boolean reveal) {
+ if (selection instanceof ITreeSelection) {
+ TreePath[] paths = ((ITreeSelection) selection).getPaths();
List<VirtualItem> newSelection = new ArrayList<>(paths.length);
- for (int i = 0; i < paths.length; ++i) {
- // Use internalExpand since item may not yet be created. See
- // 1G6B1AR.
- VirtualItem item = findItem(paths[i]);
- if (item != null) {
- newSelection.add(item);
- }
- }
- fTree.setSelection(newSelection.toArray(new VirtualItem[newSelection.size()]));
-
- // Although setting the selection in the control should reveal it,
- // setSelection may be a no-op if the selection is unchanged,
- // so explicitly reveal items in the selection here.
- // See bug 100565 for more details.
- if (reveal && newSelection.size() > 0) {
- // Iterate backwards so the first item in the list
- // is the one guaranteed to be visible
- for (int i = (newSelection.size() - 1); i >= 0; i--) {
- fTree.showItem(newSelection.get(i));
- }
- }
- } else {
- fTree.setSelection(EMPTY_ITEMS_ARRAY);
- }
-
- // Make sure that the new selection is properly revealed.
- validate();
- }
-
- @Override
+ for (int i = 0; i < paths.length; ++i) {
+ // Use internalExpand since item may not yet be created. See
+ // 1G6B1AR.
+ VirtualItem item = findItem(paths[i]);
+ if (item != null) {
+ newSelection.add(item);
+ }
+ }
+ fTree.setSelection(newSelection.toArray(new VirtualItem[newSelection.size()]));
+
+ // Although setting the selection in the control should reveal it,
+ // setSelection may be a no-op if the selection is unchanged,
+ // so explicitly reveal items in the selection here.
+ // See bug 100565 for more details.
+ if (reveal && newSelection.size() > 0) {
+ // Iterate backwards so the first item in the list
+ // is the one guaranteed to be visible
+ for (int i = (newSelection.size() - 1); i >= 0; i--) {
+ fTree.showItem(newSelection.get(i));
+ }
+ }
+ } else {
+ fTree.setSelection(EMPTY_ITEMS_ARRAY);
+ }
+
+ // Make sure that the new selection is properly revealed.
+ validate();
+ }
+
+ @Override
public void update(Object element) {
- VirtualItem[] items = findItems(element);
- for (int i = 0; i < items.length; i++) {
- doUpdate(items[i]);
- }
- }
-
- public void doUpdate(VirtualItem item) {
- item.setNeedsLabelUpdate();
- validate();
- }
-
- @Override
+ VirtualItem[] items = findItems(element);
+ for (int i = 0; i < items.length; i++) {
+ doUpdate(items[i]);
+ }
+ }
+
+ public void doUpdate(VirtualItem item) {
+ item.setNeedsLabelUpdate();
+ validate();
+ }
+
+ @Override
public ISelection getSelection() {
- if (fTree.isDisposed()) {
- return TreeSelection.EMPTY;
- }
- VirtualItem[] items = fTree.getSelection();
+ if (fTree.isDisposed()) {
+ return TreeSelection.EMPTY;
+ }
+ VirtualItem[] items = fTree.getSelection();
ArrayList<TreePath> list = new ArrayList<>(items.length);
Map<VirtualItem, TreePath> map = new LinkedHashMap<>(items.length * 4 / 3);
- for (int i = 0; i < items.length; i++) {
- TreePath path = null;
- if (items[i].getData() != null) {
- path = getTreePathFromItem(items[i]);
- list.add(path);
- }
- map.put(items[i], path);
- }
- return new TreeSelection(list.toArray(new TreePath[list.size()]));
- }
-
- private void preservingSelection(Runnable updateCode) {
-
- ISelection oldSelection = null;
- try {
- // preserve selection
- oldSelection = getSelection();
- fPreservingSelecction = fRestoreSelection = true;
-
- // perform the update
- updateCode.run();
-
- } finally {
- fPreservingSelecction = false;
-
- // restore selection
- if (fRestoreSelection) {
- internalSetSelection(oldSelection, false);
- }
-
- // send out notification if old and new differ
- ISelection newSelection = getSelection();
- if (!newSelection.equals(oldSelection)) {
- handleInvalidSelection(oldSelection, newSelection);
- }
- }
- }
-
- @Override
+ for (int i = 0; i < items.length; i++) {
+ TreePath path = null;
+ if (items[i].getData() != null) {
+ path = getTreePathFromItem(items[i]);
+ list.add(path);
+ }
+ map.put(items[i], path);
+ }
+ return new TreeSelection(list.toArray(new TreePath[list.size()]));
+ }
+
+ private void preservingSelection(Runnable updateCode) {
+
+ ISelection oldSelection = null;
+ try {
+ // preserve selection
+ oldSelection = getSelection();
+ fPreservingSelecction = fRestoreSelection = true;
+
+ // perform the update
+ updateCode.run();
+
+ } finally {
+ fPreservingSelecction = false;
+
+ // restore selection
+ if (fRestoreSelection) {
+ internalSetSelection(oldSelection, false);
+ }
+
+ // send out notification if old and new differ
+ ISelection newSelection = getSelection();
+ if (!newSelection.equals(oldSelection)) {
+ handleInvalidSelection(oldSelection, newSelection);
+ }
+ }
+ }
+
+ @Override
public void expandToLevel(Object elementOrTreePath, int level) {
- VirtualItem[] items = findItems(elementOrTreePath);
- if (items.length > 0) {
- expandToLevel(items[0], level);
- }
- validate();
- }
-
- @Override
+ VirtualItem[] items = findItems(elementOrTreePath);
+ if (items.length > 0) {
+ expandToLevel(items[0], level);
+ }
+ validate();
+ }
+
+ @Override
public void setExpandedState(Object elementOrTreePath, boolean expanded) {
- VirtualItem[] items = findItems(elementOrTreePath);
- for (int i = 0; i < items.length; i++) {
- items[i].setExpanded(expanded);
- }
- validate();
- }
-
- @Override
+ VirtualItem[] items = findItems(elementOrTreePath);
+ for (int i = 0; i < items.length; i++) {
+ items[i].setExpanded(expanded);
+ }
+ validate();
+ }
+
+ @Override
public boolean getExpandedState(Object elementOrTreePath) {
- VirtualItem[] items = findItems(elementOrTreePath);
- if (items.length > 0) {
- return items[0].getExpanded();
- }
- return false;
- }
-
- private void expandToLevel(VirtualItem item, int level) {
- if (level == ALL_LEVELS || level > 0) {
- if (!item.hasItems()) {
- return;
- }
-
- item.setExpanded(true);
-
- if (item.getData() == null) {
- virtualLazyUpdateData(item);
- // Cannot expand children if data is null.
- return;
- }
-
- if (level == ALL_LEVELS || level > 1) {
- VirtualItem[] children = item.getItems();
- int newLevel = (level == ALL_LEVELS ? ALL_LEVELS
- : level - 1);
- for (int i = 0; i < children.length; i++) {
- expandToLevel(children[i], newLevel);
- }
- }
- }
- }
-
- private void handleInvalidSelection(ISelection selection, ISelection newSelection) {
- IModelSelectionPolicy selectionPolicy = ViewerAdapterService.getSelectionPolicy(selection, getPresentationContext());
- if (selectionPolicy != null) {
- while (!selection.equals(newSelection)) {
- ISelection temp = newSelection;
- selection = selectionPolicy.replaceInvalidSelection(selection, newSelection);
- if (selection == null) {
- selection = TreeSelection.EMPTY;
- }
- if (!temp.equals(selection)) {
- internalSetSelection(selection, false);
- newSelection = getSelection();
- } else {
- break;
- }
- }
- }
-
- fireSelectionChanged(new SelectionChangedEvent(this, newSelection));
- }
-
- /**
- * Returns whether the candidate selection should override the current
- * selection.
- *
- * @param current Current selection in viewer
- * @param candidate New potential selection requested by model.
- * @return true if candidate selection should be set to viewer.
- */
- @Override
+ VirtualItem[] items = findItems(elementOrTreePath);
+ if (items.length > 0) {
+ return items[0].getExpanded();
+ }
+ return false;
+ }
+
+ private void expandToLevel(VirtualItem item, int level) {
+ if (level == ALL_LEVELS || level > 0) {
+ if (!item.hasItems()) {
+ return;
+ }
+
+ item.setExpanded(true);
+
+ if (item.getData() == null) {
+ virtualLazyUpdateData(item);
+ // Cannot expand children if data is null.
+ return;
+ }
+
+ if (level == ALL_LEVELS || level > 1) {
+ VirtualItem[] children = item.getItems();
+ int newLevel = (level == ALL_LEVELS ? ALL_LEVELS
+ : level - 1);
+ for (int i = 0; i < children.length; i++) {
+ expandToLevel(children[i], newLevel);
+ }
+ }
+ }
+ }
+
+ private void handleInvalidSelection(ISelection selection, ISelection newSelection) {
+ IModelSelectionPolicy selectionPolicy = ViewerAdapterService.getSelectionPolicy(selection, getPresentationContext());
+ if (selectionPolicy != null) {
+ while (!selection.equals(newSelection)) {
+ ISelection temp = newSelection;
+ selection = selectionPolicy.replaceInvalidSelection(selection, newSelection);
+ if (selection == null) {
+ selection = TreeSelection.EMPTY;
+ }
+ if (!temp.equals(selection)) {
+ internalSetSelection(selection, false);
+ newSelection = getSelection();
+ } else {
+ break;
+ }
+ }
+ }
+
+ fireSelectionChanged(new SelectionChangedEvent(this, newSelection));
+ }
+
+ /**
+ * Returns whether the candidate selection should override the current
+ * selection.
+ *
+ * @param current Current selection in viewer
+ * @param candidate New potential selection requested by model.
+ * @return true if candidate selection should be set to viewer.
+ */
+ @Override
public boolean overrideSelection(ISelection current, ISelection candidate) {
- IModelSelectionPolicy selectionPolicy = ViewerAdapterService.getSelectionPolicy(current, getPresentationContext());
- if (selectionPolicy == null) {
- return true;
- }
- if (selectionPolicy.contains(candidate, getPresentationContext())) {
- return selectionPolicy.overrides(current, candidate, getPresentationContext());
- }
- return !selectionPolicy.isSticky(current, getPresentationContext());
- }
-
- @Override
+ IModelSelectionPolicy selectionPolicy = ViewerAdapterService.getSelectionPolicy(current, getPresentationContext());
+ if (selectionPolicy == null) {
+ return true;
+ }
+ if (selectionPolicy.contains(candidate, getPresentationContext())) {
+ return selectionPolicy.overrides(current, candidate, getPresentationContext());
+ }
+ return !selectionPolicy.isSticky(current, getPresentationContext());
+ }
+
+ @Override
public ViewerFilter[] getFilters() {
- return fFilters;
- }
+ return fFilters;
+ }
- @Override
+ @Override
public void addFilter(ViewerFilter filter) {
- ViewerFilter[] newFilters = new ViewerFilter[fFilters.length + 1];
- System.arraycopy(fFilters, 0, newFilters, 0, fFilters.length);
- newFilters[fFilters.length] = filter;
- fFilters = newFilters;
- }
+ ViewerFilter[] newFilters = new ViewerFilter[fFilters.length + 1];
+ System.arraycopy(fFilters, 0, newFilters, 0, fFilters.length);
+ newFilters[fFilters.length] = filter;
+ fFilters = newFilters;
+ }
- @Override
+ @Override
public void setFilters(ViewerFilter... filters) {
- fFilters = filters;
- }
-
- public void dispose() {
- if (fColumnPresentation != null) {
- fColumnPresentation.dispose();
- }
-
- if (fContentProvider != null) {
- fContentProvider.dispose();
- fContentProvider = null;
- }
- if (fLabelProvider != null) {
- fLabelProvider.dispose();
- fLabelProvider = null;
- }
-
- fTree.removeItemListener(this);
- fTree.dispose();
- }
-
- /**
- * Returns this viewer's presentation context.
- *
- * @return presentation context
- */
- @Override
+ fFilters = filters;
+ }
+
+ public void dispose() {
+ if (fColumnPresentation != null) {
+ fColumnPresentation.dispose();
+ }
+
+ if (fContentProvider != null) {
+ fContentProvider.dispose();
+ fContentProvider = null;
+ }
+ if (fLabelProvider != null) {
+ fLabelProvider.dispose();
+ fLabelProvider = null;
+ }
+
+ fTree.removeItemListener(this);
+ fTree.dispose();
+ }
+
+ /**
+ * Returns this viewer's presentation context.
+ *
+ * @return presentation context
+ */
+ @Override
public IPresentationContext getPresentationContext() {
- return fContext;
- }
-
- /**
- * Configures the columns for the given viewer input.
- *
- * @param input new viewer input
- */
- private void resetColumns(Object input) {
- if (input != null) {
- // only change columns if the input is non-null (persist when empty)
- IColumnPresentationFactory factory = ViewerAdapterService.getColumnPresentationFactory(input);
- PresentationContext context = (PresentationContext) getPresentationContext();
- String type = null;
- if (factory != null) {
- type = factory.getColumnPresentationId(context, input);
- }
- if (type != null && factory != null) {
- if (fColumnPresentation != null) {
- if (!fColumnPresentation.getId().equals(type)) {
- // dispose old, create new
- fColumnPresentation.dispose();
- fColumnPresentation = null;
- }
- }
- if (fColumnPresentation == null) {
- fColumnPresentation = factory.createColumnPresentation(context, input);
- if (fColumnPresentation != null) {
- fColumnPresentation.init(context);
- configureColumns();
- }
- }
- } else {
- if (fColumnPresentation != null) {
- fColumnPresentation.dispose();
- fColumnPresentation = null;
- configureColumns();
- }
- }
- }
- }
-
- /**
- * Configures the columns based on the current settings.
- */
- protected void configureColumns() {
- if (fColumnPresentation != null) {
- IColumnPresentation build = null;
- if (isShowColumns(fColumnPresentation.getId())) {
- build = fColumnPresentation;
- }
- buildColumns(build);
- } else {
- // get rid of columns
- buildColumns(null);
- }
- }
-
- /**
- * Toggles columns on/off for the current column presentation, if any.
- *
- * @param show whether to show columns if the current input supports
- * columns
- */
- public void setShowColumns(boolean show) {
- if (show) {
- if (!isShowColumns()) {
- fShowColumns.remove(fColumnPresentation.getId());
- }
- } else {
- if (isShowColumns()){
- fShowColumns.put(fColumnPresentation.getId(), Boolean.FALSE);
- }
- }
- refreshColumns();
- }
-
- /**
- * Refreshes the columns in the view, based on the viewer input.
- */
- protected void refreshColumns() {
- configureColumns();
- refresh();
- }
-
- /**
- * @return Returns true if columns are being displayed currently.
- */
- public boolean isShowColumns() {
- if (fColumnPresentation != null) {
- return isShowColumns(fColumnPresentation.getId());
- }
- return false;
- }
-
- /**
- * Returns whether columns can be toggled on/off for the current input.
- *
- * @return whether columns can be toggled on/off for the current input
- */
- public boolean canToggleColumns() {
- return fColumnPresentation != null && fColumnPresentation.isOptional();
- }
-
- protected boolean isShowColumns(String columnPresentationId) {
- Boolean bool = fShowColumns.get(columnPresentationId);
- if (bool == null) {
- return true;
- }
- return bool.booleanValue();
- }
-
- /**
- * Creates new columns for the given presentation.
- *
- * @param presentation presentation context to build columns for.
- */
- protected void buildColumns(IColumnPresentation presentation) {
- PresentationContext presentationContext = (PresentationContext) getPresentationContext();
- if (presentation != null) {
- presentationContext.setColumns(getVisibleColumns());
- } else {
- presentationContext.setColumns(null);
- }
- }
-
- /**
- * Returns identifiers of the visible columns in this viewer, or <code>null</code>
- * if there is currently no column presentation.
- *
- * @return visible columns or <code>null</code>
- */
- @Override
+ return fContext;
+ }
+
+ /**
+ * Configures the columns for the given viewer input.
+ *
+ * @param input new viewer input
+ */
+ private void resetColumns(Object input) {
+ if (input != null) {
+ // only change columns if the input is non-null (persist when empty)
+ IColumnPresentationFactory factory = ViewerAdapterService.getColumnPresentationFactory(input);
+ PresentationContext context = (PresentationContext) getPresentationContext();
+ String type = null;
+ if (factory != null) {
+ type = factory.getColumnPresentationId(context, input);
+ }
+ if (type != null && factory != null) {
+ if (fColumnPresentation != null) {
+ if (!fColumnPresentation.getId().equals(type)) {
+ // dispose old, create new
+ fColumnPresentation.dispose();
+ fColumnPresentation = null;
+ }
+ }
+ if (fColumnPresentation == null) {
+ fColumnPresentation = factory.createColumnPresentation(context, input);
+ if (fColumnPresentation != null) {
+ fColumnPresentation.init(context);
+ configureColumns();
+ }
+ }
+ } else {
+ if (fColumnPresentation != null) {
+ fColumnPresentation.dispose();
+ fColumnPresentation = null;
+ configureColumns();
+ }
+ }
+ }
+ }
+
+ /**
+ * Configures the columns based on the current settings.
+ */
+ protected void configureColumns() {
+ if (fColumnPresentation != null) {
+ IColumnPresentation build = null;
+ if (isShowColumns(fColumnPresentation.getId())) {
+ build = fColumnPresentation;
+ }
+ buildColumns(build);
+ } else {
+ // get rid of columns
+ buildColumns(null);
+ }
+ }
+
+ /**
+ * Toggles columns on/off for the current column presentation, if any.
+ *
+ * @param show whether to show columns if the current input supports
+ * columns
+ */
+ public void setShowColumns(boolean show) {
+ if (show) {
+ if (!isShowColumns()) {
+ fShowColumns.remove(fColumnPresentation.getId());
+ }
+ } else {
+ if (isShowColumns()){
+ fShowColumns.put(fColumnPresentation.getId(), Boolean.FALSE);
+ }
+ }
+ refreshColumns();
+ }
+
+ /**
+ * Refreshes the columns in the view, based on the viewer input.
+ */
+ protected void refreshColumns() {
+ configureColumns();
+ refresh();
+ }
+
+ /**
+ * @return Returns true if columns are being displayed currently.
+ */
+ public boolean isShowColumns() {
+ if (fColumnPresentation != null) {
+ return isShowColumns(fColumnPresentation.getId());
+ }
+ return false;
+ }
+
+ /**
+ * Returns whether columns can be toggled on/off for the current input.
+ *
+ * @return whether columns can be toggled on/off for the current input
+ */
+ public boolean canToggleColumns() {
+ return fColumnPresentation != null && fColumnPresentation.isOptional();
+ }
+
+ protected boolean isShowColumns(String columnPresentationId) {
+ Boolean bool = fShowColumns.get(columnPresentationId);
+ if (bool == null) {
+ return true;
+ }
+ return bool.booleanValue();
+ }
+
+ /**
+ * Creates new columns for the given presentation.
+ *
+ * @param presentation presentation context to build columns for.
+ */
+ protected void buildColumns(IColumnPresentation presentation) {
+ PresentationContext presentationContext = (PresentationContext) getPresentationContext();
+ if (presentation != null) {
+ presentationContext.setColumns(getVisibleColumns());
+ } else {
+ presentationContext.setColumns(null);
+ }
+ }
+
+ /**
+ * Returns identifiers of the visible columns in this viewer, or <code>null</code>
+ * if there is currently no column presentation.
+ *
+ * @return visible columns or <code>null</code>
+ */
+ @Override
public String[] getVisibleColumns() {
- if (isShowColumns()) {
- IColumnPresentation presentation = getColumnPresentation();
- if (presentation != null) {
- String[] columns = fVisibleColumns.get(presentation.getId());
- if (columns == null) {
- return presentation.getInitialColumns();
- }
- return columns;
- }
- }
- return null;
- }
-
- /**
- * Sets the id's of visible columns, or <code>null</code> to set default columns.
- * Only affects the current column presentation.
- *
- * @param ids visible columns
- */
- public void setVisibleColumns(String[] ids) {
- if (ids != null && ids.length == 0) {
- ids = null;
- }
- IColumnPresentation presentation = getColumnPresentation();
- if (presentation != null) {
- fVisibleColumns.remove(presentation.getId());
- if (ids != null) {
- // put back in table if not default
- String[] columns = presentation.getInitialColumns();
- if (columns.length == ids.length) {
- for (int i = 0; i < columns.length; i++) {
- if (!ids[i].equals(columns[i])) {
- fVisibleColumns.put(presentation.getId(), ids);
- break;
- }
- }
- } else {
- fVisibleColumns.put(presentation.getId(), ids);
- }
- }
- PresentationContext presentationContext = (PresentationContext) getPresentationContext();
- presentationContext.setColumns(getVisibleColumns());
- refreshColumns();
- }
- }
-
- /**
- * Returns the current column presentation for this viewer, or <code>null</code>
- * if none.
- *
- * @return column presentation or <code>null</code>
- */
- public IColumnPresentation getColumnPresentation() {
- return fColumnPresentation;
- }
-
- /**
- * Save viewer state into the given memento.
- *
- * @param memento Memento to write state to.
- */
- public void saveState(IMemento memento) {
- if (!fShowColumns.isEmpty()) {
+ if (isShowColumns()) {
+ IColumnPresentation presentation = getColumnPresentation();
+ if (presentation != null) {
+ String[] columns = fVisibleColumns.get(presentation.getId());
+ if (columns == null) {
+ return presentation.getInitialColumns();
+ }
+ return columns;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Sets the id's of visible columns, or <code>null</code> to set default columns.
+ * Only affects the current column presentation.
+ *
+ * @param ids visible columns
+ */
+ public void setVisibleColumns(String[] ids) {
+ if (ids != null && ids.length == 0) {
+ ids = null;
+ }
+ IColumnPresentation presentation = getColumnPresentation();
+ if (presentation != null) {
+ fVisibleColumns.remove(presentation.getId());
+ if (ids != null) {
+ // put back in table if not default
+ String[] columns = presentation.getInitialColumns();
+ if (columns.length == ids.length) {
+ for (int i = 0; i < columns.length; i++) {
+ if (!ids[i].equals(columns[i])) {
+ fVisibleColumns.put(presentation.getId(), ids);
+ break;
+ }
+ }
+ } else {
+ fVisibleColumns.put(presentation.getId(), ids);
+ }
+ }
+ PresentationContext presentationContext = (PresentationContext) getPresentationContext();
+ presentationContext.setColumns(getVisibleColumns());
+ refreshColumns();
+ }
+ }
+
+ /**
+ * Returns the current column presentation for this viewer, or <code>null</code>
+ * if none.
+ *
+ * @return column presentation or <code>null</code>
+ */
+ public IColumnPresentation getColumnPresentation() {
+ return fColumnPresentation;
+ }
+
+ /**
+ * Save viewer state into the given memento.
+ *
+ * @param memento Memento to write state to.
+ */
+ public void saveState(IMemento memento) {
+ if (!fShowColumns.isEmpty()) {
for (Entry<String, Boolean> entry : fShowColumns.entrySet()) {
- IMemento sizes = memento.createChild(SHOW_COLUMNS, entry.getKey());
- sizes.putString(SHOW_COLUMNS, entry.getValue().toString());
- }
- }
- if (!fVisibleColumns.isEmpty()) {
+ IMemento sizes = memento.createChild(SHOW_COLUMNS, entry.getKey());
+ sizes.putString(SHOW_COLUMNS, entry.getValue().toString());
+ }
+ }
+ if (!fVisibleColumns.isEmpty()) {
for (Entry<String, String[]> entry : fVisibleColumns.entrySet()) {
IMemento visible = memento.createChild(VISIBLE_COLUMNS, entry.getKey());
- String[] columns = entry.getValue();
- visible.putInteger(SIZE, columns.length);
- for (int i = 0; i < columns.length; i++) {
- visible.putString(COLUMN+Integer.toString(i), columns[i]);
- }
- }
- }
- // save presentation context properties
- IPresentationContext context = getPresentationContext();
- if (context instanceof PresentationContext) {
- PresentationContext pc = (PresentationContext) context;
- pc.saveProperites(memento);
-
- }
- }
-
- /**
- * Initializes viewer state from the memento
- *
- * @param memento Memento to read state from.
- */
- public void initState(IMemento memento) {
- IMemento[] mementos = memento.getChildren(SHOW_COLUMNS);
- for (int i = 0; i < mementos.length; i++) {
- IMemento child = mementos[i];
- String id = child.getID();
- Boolean bool = Boolean.valueOf(child.getString(SHOW_COLUMNS));
- if (!bool.booleanValue()) {
- fShowColumns.put(id, bool);
- }
- }
- mementos = memento.getChildren(VISIBLE_COLUMNS);
- for (int i = 0; i < mementos.length; i++) {
- IMemento child = mementos[i];
- String id = child.getID();
- Integer integer = child.getInteger(SIZE);
- if (integer != null) {
- int length = integer.intValue();
- String[] columns = new String[length];
- for (int j = 0; j < length; j++) {
- columns[j] = child.getString(COLUMN+Integer.toString(j));
- }
- fVisibleColumns.put(id, columns);
- }
- }
- // restore presentation context properties
- // save presentation context properties
- IPresentationContext context = getPresentationContext();
- if (context instanceof PresentationContext) {
- PresentationContext pc = (PresentationContext) context;
- pc.initProperties(memento);
- }
- }
-
- @Override
+ String[] columns = entry.getValue();
+ visible.putInteger(SIZE, columns.length);
+ for (int i = 0; i < columns.length; i++) {
+ visible.putString(COLUMN+Integer.toString(i), columns[i]);
+ }
+ }
+ }
+ // save presentation context properties
+ IPresentationContext context = getPresentationContext();
+ if (context instanceof PresentationContext) {
+ PresentationContext pc = (PresentationContext) context;
+ pc.saveProperites(memento);
+
+ }
+ }
+
+ /**
+ * Initializes viewer state from the memento
+ *
+ * @param memento Memento to read state from.
+ */
+ public void initState(IMemento memento) {
+ IMemento[] mementos = memento.getChildren(SHOW_COLUMNS);
+ for (int i = 0; i < mementos.length; i++) {
+ IMemento child = mementos[i];
+ String id = child.getID();
+ Boolean bool = Boolean.valueOf(child.getString(SHOW_COLUMNS));
+ if (!bool.booleanValue()) {
+ fShowColumns.put(id, bool);
+ }
+ }
+ mementos = memento.getChildren(VISIBLE_COLUMNS);
+ for (int i = 0; i < mementos.length; i++) {
+ IMemento child = mementos[i];
+ String id = child.getID();
+ Integer integer = child.getInteger(SIZE);
+ if (integer != null) {
+ int length = integer.intValue();
+ String[] columns = new String[length];
+ for (int j = 0; j < length; j++) {
+ columns[j] = child.getString(COLUMN+Integer.toString(j));
+ }
+ fVisibleColumns.put(id, columns);
+ }
+ }
+ // restore presentation context properties
+ // save presentation context properties
+ IPresentationContext context = getPresentationContext();
+ if (context instanceof PresentationContext) {
+ PresentationContext pc = (PresentationContext) context;
+ pc.initProperties(memento);
+ }
+ }
+
+ @Override
public void addViewerUpdateListener(IViewerUpdateListener listener) {
- getContentProvider().addViewerUpdateListener(listener);
- }
+ getContentProvider().addViewerUpdateListener(listener);
+ }
- @Override
+ @Override
public void removeViewerUpdateListener(IViewerUpdateListener listener) {
- ITreeModelContentProvider cp = getContentProvider();
- if (cp != null) {
- cp.removeViewerUpdateListener(listener);
- }
- }
+ ITreeModelContentProvider cp = getContentProvider();
+ if (cp != null) {
+ cp.removeViewerUpdateListener(listener);
+ }
+ }
- @Override
+ @Override
public void addModelChangedListener(IModelChangedListener listener) {
- getContentProvider().addModelChangedListener(listener);
- }
+ getContentProvider().addModelChangedListener(listener);
+ }
- @Override
+ @Override
public void removeModelChangedListener(IModelChangedListener listener) {
- ITreeModelContentProvider cp = getContentProvider();
- if (cp != null) {
- cp.removeModelChangedListener(listener);
- }
- }
+ ITreeModelContentProvider cp = getContentProvider();
+ if (cp != null) {
+ cp.removeModelChangedListener(listener);
+ }
+ }
- @Override
+ @Override
public void addStateUpdateListener(IStateUpdateListener listener) {
- getContentProvider().addStateUpdateListener(listener);
- }
+ getContentProvider().addStateUpdateListener(listener);
+ }
- @Override
+ @Override
public void removeStateUpdateListener(IStateUpdateListener listener) {
- ITreeModelContentProvider cp = getContentProvider();
- if (cp != null) {
- cp.removeStateUpdateListener(listener);
- }
- }
+ ITreeModelContentProvider cp = getContentProvider();
+ if (cp != null) {
+ cp.removeStateUpdateListener(listener);
+ }
+ }
@Override
public void addLabelUpdateListener(ILabelUpdateListener listener) {
- getLabelProvider().addLabelUpdateListener(listener);
- }
+ getLabelProvider().addLabelUpdateListener(listener);
+ }
- @Override
+ @Override
public void removeLabelUpdateListener(ILabelUpdateListener listener) {
- getLabelProvider().removeLabelUpdateListener(listener);
- }
-
- /**
- * Performs auto expand on an element at the specified path if the auto expand
- * level dictates the element should be expanded.
- *
- * @param elementPath tree path to element to consider for expansion
- */
- @Override
+ getLabelProvider().removeLabelUpdateListener(listener);
+ }
+
+ /**
+ * Performs auto expand on an element at the specified path if the auto expand
+ * level dictates the element should be expanded.
+ *
+ * @param elementPath tree path to element to consider for expansion
+ */
+ @Override
public void autoExpand(TreePath elementPath) {
- int level = getAutoExpandLevel();
- if (level > 0 || level == org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer.ALL_LEVELS) {
- if (level == org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer.ALL_LEVELS || level > elementPath.getSegmentCount()) {
- expandToLevel(elementPath, 1);
- }
- }
- }
-
- @Override
+ int level = getAutoExpandLevel();
+ if (level > 0 || level == org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer.ALL_LEVELS) {
+ if (level == org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer.ALL_LEVELS || level > elementPath.getSegmentCount()) {
+ expandToLevel(elementPath, 1);
+ }
+ }
+ }
+
+ @Override
public int getChildCount(TreePath path) {
- int childCount = -1;
- VirtualItem[] items = findItems(path);
- if (items.length > 0) {
- childCount = items[0].getItemCount();
- // Mimic the jface viewer behavior which returns 1 for child count
- // for an item that has children but is not yet expanded.
- // Return 0, if we do not know if the item has children.
- if (childCount == -1) {
- childCount = items[0].hasItems() ? 1 : 0;
- }
- }
- return childCount;
- }
-
- @Override
+ int childCount = -1;
+ VirtualItem[] items = findItems(path);
+ if (items.length > 0) {
+ childCount = items[0].getItemCount();
+ // Mimic the jface viewer behavior which returns 1 for child count
+ // for an item that has children but is not yet expanded.
+ // Return 0, if we do not know if the item has children.
+ if (childCount == -1) {
+ childCount = items[0].hasItems() ? 1 : 0;
+ }
+ }
+ return childCount;
+ }
+
+ @Override
public Object getChildElement(TreePath path, int index) {
- VirtualItem[] items = findItems(path);
- if (items.length > 0) {
- if (index < items[0].getItemCount()) {
- return items[0].getItem(new VirtualItem.Index(index)).getData();
- }
- }
- return null;
- }
-
- @Override
+ VirtualItem[] items = findItems(path);
+ if (items.length > 0) {
+ if (index < items[0].getItemCount()) {
+ return items[0].getItem(new VirtualItem.Index(index)).getData();
+ }
+ }
+ return null;
+ }
+
+ @Override
public TreePath getTopElementPath() {
- return null;
- }
+ return null;
+ }
- @Override
+ @Override
public boolean saveElementState(TreePath path, ModelDelta delta, int flagsToSave) {
- VirtualTree tree = getTree();
- VirtualItem[] selection = tree.getSelection();
+ VirtualTree tree = getTree();
+ VirtualItem[] selection = tree.getSelection();
Set<VirtualItem> set = new HashSet<>();
- for (int i = 0; i < selection.length; i++) {
- set.add(selection[i]);
- }
-
- VirtualItem[] items = null;
- VirtualItem parent = findItem(path);
-
- if (parent != null) {
- delta.setChildCount(((TreeModelContentProvider)getContentProvider()).viewToModelCount(path, parent.getItemCount()));
- if (parent.getExpanded()) {
- if ((flagsToSave & IModelDelta.EXPAND) != 0) {
- delta.setFlags(delta.getFlags() | IModelDelta.EXPAND);
- }
- } else if ((flagsToSave & IModelDelta.COLLAPSE) != 0 && parent.hasItems()){
- delta.setFlags(delta.getFlags() | IModelDelta.COLLAPSE);
- }
-
- if (set.contains(parent) && (flagsToSave & IModelDelta.SELECT) != 0) {
- delta.setFlags(delta.getFlags() | IModelDelta.SELECT);
- }
-
- items = parent.getItems();
- for (int i = 0; i < items.length; i++) {
- doSaveElementState(path, delta, items[i], set, flagsToSave);
- }
- return true;
- } else {
- return false;
- }
- }
+ for (int i = 0; i < selection.length; i++) {
+ set.add(selection[i]);
+ }
+
+ VirtualItem[] items = null;
+ VirtualItem parent = findItem(path);
+
+ if (parent != null) {
+ delta.setChildCount(((TreeModelContentProvider)getContentProvider()).viewToModelCount(path, parent.getItemCount()));
+ if (parent.getExpanded()) {
+ if ((flagsToSave & IModelDelta.EXPAND) != 0) {
+ delta.setFlags(delta.getFlags() | IModelDelta.EXPAND);
+ }
+ } else if ((flagsToSave & IModelDelta.COLLAPSE) != 0 && parent.hasItems()){
+ delta.setFlags(delta.getFlags() | IModelDelta.COLLAPSE);
+ }
+
+ if (set.contains(parent) && (flagsToSave & IModelDelta.SELECT) != 0) {
+ delta.setFlags(delta.getFlags() | IModelDelta.SELECT);
+ }
+
+ items = parent.getItems();
+ for (int i = 0; i < items.length; i++) {
+ doSaveElementState(path, delta, items[i], set, flagsToSave);
+ }
+ return true;
+ } else {
+ return false;
+ }
+ }
private void doSaveElementState(TreePath parentPath, ModelDelta delta, VirtualItem item, Collection<VirtualItem> set, int flagsToSave) {
- Object element = item.getData();
- if (element != null) {
- boolean expanded = item.getExpanded();
- boolean selected = set.contains(item);
- int flags = IModelDelta.NO_CHANGE;
- if (expanded && (flagsToSave & IModelDelta.EXPAND) != 0) {
- flags = flags | IModelDelta.EXPAND;
- }
- if (!expanded && (flagsToSave & IModelDelta.COLLAPSE) != 0 && item.hasItems()){
- flags = flags | IModelDelta.COLLAPSE;
- }
- if (selected && (flagsToSave & IModelDelta.SELECT) != 0) {
- flags = flags | IModelDelta.SELECT;
- }
- if (expanded || flags != IModelDelta.NO_CHANGE) {
- int modelIndex = ((TreeModelContentProvider)getContentProvider()).viewToModelIndex(parentPath, item.getIndex().intValue());
- TreePath elementPath = parentPath.createChildPath(element);
- int numChildren = ((TreeModelContentProvider)getContentProvider()).viewToModelCount(elementPath, item.getItemCount());
- ModelDelta childDelta = delta.addNode(element, modelIndex, flags, numChildren);
- if (expanded) {
- VirtualItem[] items = item.getItems();
- for (int i = 0; i < items.length; i++) {
- doSaveElementState(elementPath, childDelta, items[i], set, flagsToSave);
- }
- }
- }
- }
- }
-
- @Override
+ Object element = item.getData();
+ if (element != null) {
+ boolean expanded = item.getExpanded();
+ boolean selected = set.contains(item);
+ int flags = IModelDelta.NO_CHANGE;
+ if (expanded && (flagsToSave & IModelDelta.EXPAND) != 0) {
+ flags = flags | IModelDelta.EXPAND;
+ }
+ if (!expanded && (flagsToSave & IModelDelta.COLLAPSE) != 0 && item.hasItems()){
+ flags = flags | IModelDelta.COLLAPSE;
+ }
+ if (selected && (flagsToSave & IModelDelta.SELECT) != 0) {
+ flags = flags | IModelDelta.SELECT;
+ }
+ if (expanded || flags != IModelDelta.NO_CHANGE) {
+ int modelIndex = ((TreeModelContentProvider)getContentProvider()).viewToModelIndex(parentPath, item.getIndex().intValue());
+ TreePath elementPath = parentPath.createChildPath(element);
+ int numChildren = ((TreeModelContentProvider)getContentProvider()).viewToModelCount(elementPath, item.getItemCount());
+ ModelDelta childDelta = delta.addNode(element, modelIndex, flags, numChildren);
+ if (expanded) {
+ VirtualItem[] items = item.getItems();
+ for (int i = 0; i < items.length; i++) {
+ doSaveElementState(elementPath, childDelta, items[i], set, flagsToSave);
+ }
+ }
+ }
+ }
+ }
+
+ @Override
public void updateViewer(IModelDelta delta) {
- getContentProvider().updateModel(delta, ITreeModelContentProvider.ALL_MODEL_DELTA_FLAGS);
- }
+ getContentProvider().updateModel(delta, ITreeModelContentProvider.ALL_MODEL_DELTA_FLAGS);
+ }
- @Override
+ @Override
public ViewerLabel getElementLabel(TreePath path, String columnId) {
- if (path.getSegmentCount() == 0) {
- return null;
- }
-
- int columnIdx = -1;
- String[] visibleColumns = getVisibleColumns();
- if (columnId != null && visibleColumns != null) {
- int i = 0;
- for (i = 0; i < visibleColumns.length; i++) {
- if (columnId.equals(getVisibleColumns()[i])) {
- columnIdx = i;
- break;
- }
- }
- if (i == visibleColumns.length) {
- return null;
- }
- } else {
- columnIdx = 0;
- }
- VirtualItem item = findItem(path);
-
- if (item != null) {
- ViewerLabel label = new ViewerLabel(getText(item, columnIdx), getImage(item, columnIdx));
- label.setFont(getFont(item, columnIdx));
- label.setBackground(getBackground(item, columnIdx));
- label.setForeground(getForeground(item, columnIdx));
- return label;
- }
- return null;
- }
-
- @Override
+ if (path.getSegmentCount() == 0) {
+ return null;
+ }
+
+ int columnIdx = -1;
+ String[] visibleColumns = getVisibleColumns();
+ if (columnId != null && visibleColumns != null) {
+ int i = 0;
+ for (i = 0; i < visibleColumns.length; i++) {
+ if (columnId.equals(getVisibleColumns()[i])) {
+ columnIdx = i;
+ break;
+ }
+ }
+ if (i == visibleColumns.length) {
+ return null;
+ }
+ } else {
+ columnIdx = 0;
+ }
+ VirtualItem item = findItem(path);
+
+ if (item != null) {
+ ViewerLabel label = new ViewerLabel(getText(item, columnIdx), getImage(item, columnIdx));
+ label.setFont(getFont(item, columnIdx));
+ label.setBackground(getBackground(item, columnIdx));
+ label.setForeground(getForeground(item, columnIdx));
+ return label;
+ }
+ return null;
+ }
+
+ @Override
public TreePath[] getElementPaths(Object element) {
- VirtualItem[] items = findItems(element);
- TreePath[] paths = new TreePath[items.length];
- for (int i = 0; i < items.length; i++) {
- paths[i] = getTreePathFromItem(items[i]);
- }
- return paths;
- }
-
-
- public String getText(VirtualItem item, int columnIdx) {
- String[] texts = (String[])item.getData(VirtualItem.LABEL_KEY);
- if (texts != null && texts.length > columnIdx) {
- return texts[columnIdx];
- }
- return null;
- }
-
- public Image getImage(VirtualItem item, int columnIdx) {
- ImageDescriptor[] imageDescriptors = (ImageDescriptor[]) item.getData(VirtualItem.IMAGE_KEY);
- if (imageDescriptors != null && imageDescriptors.length > columnIdx) {
- return getLabelProvider().getImage(imageDescriptors[columnIdx]);
- }
- return null;
- }
-
- public Font getFont(VirtualItem item, int columnIdx) {
- FontData[] fontDatas = (FontData[]) item.getData(VirtualItem.FONT_KEY);
- if (fontDatas != null) {
- return getLabelProvider().getFont(fontDatas[columnIdx]);
- }
- return null;
- }
-
- public Color getForeground(VirtualItem item, int columnIdx) {
- RGB[] rgbs = (RGB[]) item.getData(VirtualItem.FOREGROUND_KEY);
- if (rgbs != null) {
- return getLabelProvider().getColor(rgbs[columnIdx]);
- }
- return null;
- }
-
- public Color getBackground(VirtualItem item, int columnIdx) {
- RGB[] rgbs = (RGB[]) item.getData(VirtualItem.BACKGROUND_KEY);
- if (rgbs != null) {
- return getLabelProvider().getColor(rgbs[columnIdx]);
- }
- return null;
- }
-
- @Override
+ VirtualItem[] items = findItems(element);
+ TreePath[] paths = new TreePath[items.length];
+ for (int i = 0; i < items.length; i++) {
+ paths[i] = getTreePathFromItem(items[i]);
+ }
+ return paths;
+ }
+
+
+ public String getText(VirtualItem item, int columnIdx) {
+ String[] texts = (String[])item.getData(VirtualItem.LABEL_KEY);
+ if (texts != null && texts.length > columnIdx) {
+ return texts[columnIdx];
+ }
+ return null;
+ }
+
+ public Image getImage(VirtualItem item, int columnIdx) {
+ ImageDescriptor[] imageDescriptors = (ImageDescriptor[]) item.getData(VirtualItem.IMAGE_KEY);
+ if (imageDescriptors != null && imageDescriptors.length > columnIdx) {
+ return getLabelProvider().getImage(imageDescriptors[columnIdx]);
+ }
+ return null;
+ }
+
+ public Font getFont(VirtualItem item, int columnIdx) {
+ FontData[] fontDatas = (FontData[]) item.getData(VirtualItem.FONT_KEY);
+ if (fontDatas != null) {
+ return getLabelProvider().getFont(fontDatas[columnIdx]);
+ }
+ return null;
+ }
+
+ public Color getForeground(VirtualItem item, int columnIdx) {
+ RGB[] rgbs = (RGB[]) item.getData(VirtualItem.FOREGROUND_KEY);
+ if (rgbs != null) {
+ return getLabelProvider().getColor(rgbs[columnIdx]);
+ }
+ return null;
+ }
+
+ public Color getBackground(VirtualItem item, int columnIdx) {
+ RGB[] rgbs = (RGB[]) item.getData(VirtualItem.BACKGROUND_KEY);
+ if (rgbs != null) {
+ return getLabelProvider().getColor(rgbs[columnIdx]);
+ }
+ return null;
+ }
+
+ @Override
public void clearSelectionQuiet() {
- getTree().setSelection(EMPTY_ITEMS_ARRAY);
- }
+ getTree().setSelection(EMPTY_ITEMS_ARRAY);
+ }
- @Override
+ @Override
public boolean getElementChecked(TreePath path) {
- // Not supported
- return false;
- }
+ // Not supported
+ return false;
+ }
- @Override
+ @Override
public boolean getElementGrayed(TreePath path) {
- // Not supported
- return false;
- }
+ // Not supported
+ return false;
+ }
- @Override
+ @Override
public void setElementChecked(TreePath path, boolean checked, boolean grayed) {
- // Not supported
- }
+ // Not supported
+ }
- @Override
+ @Override
public String toString() {
- return getTree().toString();
- }
+ return getTree().toString();
+ }
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/LabelUpdate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/LabelUpdate.java
index 4ece51019..984ca2e6e 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/LabelUpdate.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/LabelUpdate.java
@@ -137,7 +137,7 @@ class LabelUpdate extends Request implements ILabelUpdate, ICheckUpdate {
* Applies settings to viewer cell
*/
public void performUpdate() {
- fProvider.setElementData(fElementPath, fNumColumns, fLabels, fImageDescriptors, fFontDatas, fForegrounds, fBackgrounds, fChecked, fGrayed);
+ fProvider.setElementData(fElementPath, fNumColumns, fLabels, fImageDescriptors, fFontDatas, fForegrounds, fBackgrounds, fChecked, fGrayed);
fProvider.updateComplete(this);
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/MementoUpdate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/MementoUpdate.java
index 329cac20b..0e718ba2e 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/MementoUpdate.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/MementoUpdate.java
@@ -33,12 +33,12 @@ abstract class MementoUpdate extends Request implements IViewerUpdate {
/**
* Constructs a viewer state request.
- * @param provider the content provider to use for the update
- * @param viewerInput the current input
- * @param elementPath the path of the element to update
- * @param element the element to update
- * @param memento Memento to update
- * @param context the presentation context
+ * @param provider the content provider to use for the update
+ * @param viewerInput the current input
+ * @param elementPath the path of the element to update
+ * @param element the element to update
+ * @param memento Memento to update
+ * @param context the presentation context
*
*/
public MementoUpdate(TreeModelContentProvider provider, Object viewerInput, IPresentationContext context, Object element, TreePath elementPath, IMemento memento) {
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/SubTreeModelViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/SubTreeModelViewer.java
index 8886c18d8..00a70d498 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/SubTreeModelViewer.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/SubTreeModelViewer.java
@@ -45,545 +45,545 @@ import org.eclipse.swt.widgets.Display;
*/
public class SubTreeModelViewer extends TreeModelViewer {
- /**
- * The tree path in the model to the root element of this viewer.
- */
- private TreePath fRootPath = TreePath.EMPTY;
-
- /**
- * Viewer delegate that content and label providers refer to for viewer data.
- */
- private DelegatingTreeModelViewer fDelegatingViewer;
-
- /**
- * @return Returns the root element's model tree path.
- */
- public TreePath getRootPath() {
- return fRootPath;
- }
-
- public SubTreeModelViewer(Composite parent, int style, IPresentationContext context) {
- super(parent, style, context);
- }
-
- /**
- * Sets the viewer's input and root element's path
- *
- * @param input New viewer input.
- * @param rootPath New root element path.
- */
- public void setInput(Object input, TreePath rootPath) {
- fRootPath = rootPath;
- super.setInput(input);
- }
-
- /**
- * A proxy for the sub tree viewer which is given to the content and
- * label providers. It translates the sub-tree paths in the viewer to the
- * full model paths that the providers expect.
- */
- public class DelegatingTreeModelViewer extends Viewer
- implements IInternalTreeModelViewer
- {
- @Override
+ /**
+ * The tree path in the model to the root element of this viewer.
+ */
+ private TreePath fRootPath = TreePath.EMPTY;
+
+ /**
+ * Viewer delegate that content and label providers refer to for viewer data.
+ */
+ private DelegatingTreeModelViewer fDelegatingViewer;
+
+ /**
+ * @return Returns the root element's model tree path.
+ */
+ public TreePath getRootPath() {
+ return fRootPath;
+ }
+
+ public SubTreeModelViewer(Composite parent, int style, IPresentationContext context) {
+ super(parent, style, context);
+ }
+
+ /**
+ * Sets the viewer's input and root element's path
+ *
+ * @param input New viewer input.
+ * @param rootPath New root element path.
+ */
+ public void setInput(Object input, TreePath rootPath) {
+ fRootPath = rootPath;
+ super.setInput(input);
+ }
+
+ /**
+ * A proxy for the sub tree viewer which is given to the content and
+ * label providers. It translates the sub-tree paths in the viewer to the
+ * full model paths that the providers expect.
+ */
+ public class DelegatingTreeModelViewer extends Viewer
+ implements IInternalTreeModelViewer
+ {
+ @Override
public void reveal(TreePath path, int index) {
- if (path.startsWith(fRootPath, null)) {
- SubTreeModelViewer.this.reveal(createSubPath(path), index);
- }
- }
+ if (path.startsWith(fRootPath, null)) {
+ SubTreeModelViewer.this.reveal(createSubPath(path), index);
+ }
+ }
- @Override
+ @Override
public void replace(Object parentOrTreePath, int index, Object element) {
- if (parentOrTreePath instanceof TreePath) {
- TreePath path = (TreePath)parentOrTreePath;
- if (path.startsWith(fRootPath, null)) {
- SubTreeModelViewer.this.replace(createSubPath(path), index, element);
- }
- } else {
- SubTreeModelViewer.this.replace(parentOrTreePath, index, element);
- }
- }
-
- @Override
+ if (parentOrTreePath instanceof TreePath) {
+ TreePath path = (TreePath)parentOrTreePath;
+ if (path.startsWith(fRootPath, null)) {
+ SubTreeModelViewer.this.replace(createSubPath(path), index, element);
+ }
+ } else {
+ SubTreeModelViewer.this.replace(parentOrTreePath, index, element);
+ }
+ }
+
+ @Override
public void setChildCount(Object elementOrTreePath, int count) {
- if (elementOrTreePath instanceof TreePath) {
- TreePath path = (TreePath)elementOrTreePath;
- if (path.startsWith(fRootPath, null)) {
- SubTreeModelViewer.this.setChildCount(createSubPath(path), count);
- }
- } else {
- SubTreeModelViewer.this.setChildCount(elementOrTreePath, count);
- }
- }
-
- @Override
+ if (elementOrTreePath instanceof TreePath) {
+ TreePath path = (TreePath)elementOrTreePath;
+ if (path.startsWith(fRootPath, null)) {
+ SubTreeModelViewer.this.setChildCount(createSubPath(path), count);
+ }
+ } else {
+ SubTreeModelViewer.this.setChildCount(elementOrTreePath, count);
+ }
+ }
+
+ @Override
public void setHasChildren(Object elementOrTreePath, boolean hasChildren) {
- if (elementOrTreePath instanceof TreePath) {
- TreePath path = (TreePath)elementOrTreePath;
- if (path.startsWith(fRootPath, null)) {
- SubTreeModelViewer.this.setHasChildren(createSubPath(path), hasChildren);
- }
- } else {
- SubTreeModelViewer.this.setHasChildren(elementOrTreePath, hasChildren);
- }
- }
-
- @Override
+ if (elementOrTreePath instanceof TreePath) {
+ TreePath path = (TreePath)elementOrTreePath;
+ if (path.startsWith(fRootPath, null)) {
+ SubTreeModelViewer.this.setHasChildren(createSubPath(path), hasChildren);
+ }
+ } else {
+ SubTreeModelViewer.this.setHasChildren(elementOrTreePath, hasChildren);
+ }
+ }
+
+ @Override
public void autoExpand(TreePath elementPath) {
- // not supported
- }
+ // not supported
+ }
- @Override
+ @Override
public void setExpandedState(Object elementOrTreePath, boolean expanded) {
- if (elementOrTreePath instanceof TreePath) {
- TreePath path = (TreePath)elementOrTreePath;
- if (path.startsWith(fRootPath, null)) {
- SubTreeModelViewer.this.setExpandedState(createSubPath(path), expanded);
- }
- } else {
- SubTreeModelViewer.this.setExpandedState(elementOrTreePath, expanded);
- }
- }
-
- @Override
+ if (elementOrTreePath instanceof TreePath) {
+ TreePath path = (TreePath)elementOrTreePath;
+ if (path.startsWith(fRootPath, null)) {
+ SubTreeModelViewer.this.setExpandedState(createSubPath(path), expanded);
+ }
+ } else {
+ SubTreeModelViewer.this.setExpandedState(elementOrTreePath, expanded);
+ }
+ }
+
+ @Override
public void expandToLevel(Object elementOrTreePath, int level) {
- if (elementOrTreePath instanceof TreePath) {
- TreePath path = (TreePath)elementOrTreePath;
- if (path.startsWith(fRootPath, null)) {
- SubTreeModelViewer.this.expandToLevel(createSubPath(path), level);
- }
- } else {
- SubTreeModelViewer.this.expandToLevel(elementOrTreePath, level);
- }
- }
-
- @Override
+ if (elementOrTreePath instanceof TreePath) {
+ TreePath path = (TreePath)elementOrTreePath;
+ if (path.startsWith(fRootPath, null)) {
+ SubTreeModelViewer.this.expandToLevel(createSubPath(path), level);
+ }
+ } else {
+ SubTreeModelViewer.this.expandToLevel(elementOrTreePath, level);
+ }
+ }
+
+ @Override
public void remove(Object elementOrTreePath) {
- if (elementOrTreePath instanceof TreePath) {
- TreePath path = (TreePath)elementOrTreePath;
- if (path.startsWith(fRootPath, null)) {
- SubTreeModelViewer.this.remove(createSubPath(path));
- }
- } else {
- SubTreeModelViewer.this.remove(elementOrTreePath);
- }
- }
-
- @Override
+ if (elementOrTreePath instanceof TreePath) {
+ TreePath path = (TreePath)elementOrTreePath;
+ if (path.startsWith(fRootPath, null)) {
+ SubTreeModelViewer.this.remove(createSubPath(path));
+ }
+ } else {
+ SubTreeModelViewer.this.remove(elementOrTreePath);
+ }
+ }
+
+ @Override
public void remove(Object parentOrTreePath, final int index) {
- if (parentOrTreePath instanceof TreePath) {
- TreePath path = (TreePath)parentOrTreePath;
- if (path.startsWith(fRootPath, null)) {
- SubTreeModelViewer.this.remove(createSubPath(path), index);
- }
- } else {
- SubTreeModelViewer.this.remove(parentOrTreePath, index);
- }
- }
-
- @Override
+ if (parentOrTreePath instanceof TreePath) {
+ TreePath path = (TreePath)parentOrTreePath;
+ if (path.startsWith(fRootPath, null)) {
+ SubTreeModelViewer.this.remove(createSubPath(path), index);
+ }
+ } else {
+ SubTreeModelViewer.this.remove(parentOrTreePath, index);
+ }
+ }
+
+ @Override
public void insert(Object parentOrTreePath, Object element, int position) {
- if (parentOrTreePath instanceof TreePath) {
- TreePath path = (TreePath)parentOrTreePath;
- if (path.startsWith(fRootPath, null)) {
- SubTreeModelViewer.this.insert(createSubPath(path), element, position);
- }
- } else {
- SubTreeModelViewer.this.insert(parentOrTreePath, element, position);
- }
- }
-
- @Override
+ if (parentOrTreePath instanceof TreePath) {
+ TreePath path = (TreePath)parentOrTreePath;
+ if (path.startsWith(fRootPath, null)) {
+ SubTreeModelViewer.this.insert(createSubPath(path), element, position);
+ }
+ } else {
+ SubTreeModelViewer.this.insert(parentOrTreePath, element, position);
+ }
+ }
+
+ @Override
public boolean getExpandedState(Object elementOrTreePath) {
- if (elementOrTreePath instanceof TreePath) {
- TreePath path = (TreePath)elementOrTreePath;
- if (path.startsWith(fRootPath, null)) {
- return SubTreeModelViewer.this.getExpandedState(createSubPath(path));
- }
- } else {
- return SubTreeModelViewer.this.getExpandedState(elementOrTreePath);
- }
- return false;
- }
-
- @Override
+ if (elementOrTreePath instanceof TreePath) {
+ TreePath path = (TreePath)elementOrTreePath;
+ if (path.startsWith(fRootPath, null)) {
+ return SubTreeModelViewer.this.getExpandedState(createSubPath(path));
+ }
+ } else {
+ return SubTreeModelViewer.this.getExpandedState(elementOrTreePath);
+ }
+ return false;
+ }
+
+ @Override
public int getChildCount(TreePath path) {
- if (path.startsWith(fRootPath, null)) {
- return SubTreeModelViewer.this.getChildCount(createSubPath(path));
- }
- return -1;
- }
+ if (path.startsWith(fRootPath, null)) {
+ return SubTreeModelViewer.this.getChildCount(createSubPath(path));
+ }
+ return -1;
+ }
- @Override
+ @Override
public boolean getHasChildren(Object elementOrTreePath) {
- if (elementOrTreePath instanceof TreePath) {
- TreePath path = (TreePath)elementOrTreePath;
- if (path.startsWith(fRootPath, null)) {
- return SubTreeModelViewer.this.getHasChildren(createSubPath(path));
- }
- } else {
- return SubTreeModelViewer.this.getHasChildren(elementOrTreePath);
- }
- return false;
- }
-
- @Override
+ if (elementOrTreePath instanceof TreePath) {
+ TreePath path = (TreePath)elementOrTreePath;
+ if (path.startsWith(fRootPath, null)) {
+ return SubTreeModelViewer.this.getHasChildren(createSubPath(path));
+ }
+ } else {
+ return SubTreeModelViewer.this.getHasChildren(elementOrTreePath);
+ }
+ return false;
+ }
+
+ @Override
public Object getChildElement(TreePath path, int index) {
- if (path.startsWith(fRootPath, null)) {
- return SubTreeModelViewer.this.getChildElement(createSubPath(path), index);
- }
- return null;
- }
+ if (path.startsWith(fRootPath, null)) {
+ return SubTreeModelViewer.this.getChildElement(createSubPath(path), index);
+ }
+ return null;
+ }
- @Override
+ @Override
public TreePath getTopElementPath() {
- return createFullPath(SubTreeModelViewer.this.getTopElementPath());
- }
+ return createFullPath(SubTreeModelViewer.this.getTopElementPath());
+ }
- @Override
+ @Override
public int findElementIndex(TreePath parentPath, Object element) {
- if (parentPath.startsWith(fRootPath, null)) {
- return SubTreeModelViewer.this.findElementIndex(createSubPath(parentPath), element);
- }
- return -1;
- }
+ if (parentPath.startsWith(fRootPath, null)) {
+ return SubTreeModelViewer.this.findElementIndex(createSubPath(parentPath), element);
+ }
+ return -1;
+ }
- @Override
+ @Override
public boolean getElementChildrenRealized(TreePath parentPath) {
- if (parentPath.startsWith(fRootPath, null)) {
- return SubTreeModelViewer.this.getElementChildrenRealized(createSubPath(parentPath));
- }
- return true;
- }
+ if (parentPath.startsWith(fRootPath, null)) {
+ return SubTreeModelViewer.this.getElementChildrenRealized(createSubPath(parentPath));
+ }
+ return true;
+ }
- @Override
+ @Override
public void setElementData(TreePath path, int numColumns, String[] labels, ImageDescriptor[] images, FontData[] fontDatas, RGB[] foregrounds, RGB[] backgrounds) {
- if (path.startsWith(fRootPath, null)) {
- SubTreeModelViewer.this.setElementData(createSubPath(path), numColumns, labels, images, fontDatas, foregrounds, backgrounds);
- }
- }
+ if (path.startsWith(fRootPath, null)) {
+ SubTreeModelViewer.this.setElementData(createSubPath(path), numColumns, labels, images, fontDatas, foregrounds, backgrounds);
+ }
+ }
- @Override
+ @Override
public Control getControl() {
- return SubTreeModelViewer.this.getControl();
- }
+ return SubTreeModelViewer.this.getControl();
+ }
- @Override
+ @Override
public Object getInput() {
- return SubTreeModelViewer.this.getInput();
- }
+ return SubTreeModelViewer.this.getInput();
+ }
- @Override
+ @Override
public ISelection getSelection() {
- return SubTreeModelViewer.this.getSelection();
- }
+ return SubTreeModelViewer.this.getSelection();
+ }
- @Override
+ @Override
public void refresh() {
- SubTreeModelViewer.this.refresh();
- }
+ SubTreeModelViewer.this.refresh();
+ }
- @Override
+ @Override
public void setInput(Object input) {
- SubTreeModelViewer.this.setInput(input);
- }
+ SubTreeModelViewer.this.setInput(input);
+ }
- @Override
+ @Override
public void setSelection(ISelection selection, boolean reveal) {
- SubTreeModelViewer.this.setSelection(selection, reveal);
- }
+ SubTreeModelViewer.this.setSelection(selection, reveal);
+ }
- @Override
+ @Override
public String[] getVisibleColumns() {
- return SubTreeModelViewer.this.getVisibleColumns();
- }
+ return SubTreeModelViewer.this.getVisibleColumns();
+ }
- @Override
+ @Override
public void addLabelUpdateListener(ILabelUpdateListener listener) {
- SubTreeModelViewer.this.addLabelUpdateListener(listener);
- }
+ SubTreeModelViewer.this.addLabelUpdateListener(listener);
+ }
- @Override
+ @Override
public void addModelChangedListener(IModelChangedListener listener) {
- SubTreeModelViewer.this.addModelChangedListener(listener);
- }
+ SubTreeModelViewer.this.addModelChangedListener(listener);
+ }
- @Override
+ @Override
public void addStateUpdateListener(IStateUpdateListener listener) {
- SubTreeModelViewer.this.addStateUpdateListener(listener);
- }
+ SubTreeModelViewer.this.addStateUpdateListener(listener);
+ }
- @Override
+ @Override
public void addViewerUpdateListener(IViewerUpdateListener listener) {
- SubTreeModelViewer.this.addViewerUpdateListener(listener);
- }
+ SubTreeModelViewer.this.addViewerUpdateListener(listener);
+ }
- @Override
+ @Override
public int getAutoExpandLevel() {
- return SubTreeModelViewer.this.getAutoExpandLevel();
- }
+ return SubTreeModelViewer.this.getAutoExpandLevel();
+ }
- @Override
+ @Override
public Display getDisplay() {
- return SubTreeModelViewer.this.getDisplay();
- }
+ return SubTreeModelViewer.this.getDisplay();
+ }
- @Override
+ @Override
public ViewerLabel getElementLabel(TreePath path, String columnId) {
- return SubTreeModelViewer.this.getElementLabel(path, columnId);
- }
+ return SubTreeModelViewer.this.getElementLabel(path, columnId);
+ }
- @Override
+ @Override
public IPresentationContext getPresentationContext() {
- return SubTreeModelViewer.this.getPresentationContext();
- }
+ return SubTreeModelViewer.this.getPresentationContext();
+ }
- @Override
+ @Override
public void removeLabelUpdateListener(ILabelUpdateListener listener) {
- SubTreeModelViewer.this.removeLabelUpdateListener(listener);
- }
+ SubTreeModelViewer.this.removeLabelUpdateListener(listener);
+ }
- @Override
+ @Override
public void removeModelChangedListener(IModelChangedListener listener) {
- SubTreeModelViewer.this.removeModelChangedListener(listener);
- }
+ SubTreeModelViewer.this.removeModelChangedListener(listener);
+ }
- @Override
+ @Override
public void removeStateUpdateListener(IStateUpdateListener listener) {
- SubTreeModelViewer.this.removeStateUpdateListener(listener);
- }
+ SubTreeModelViewer.this.removeStateUpdateListener(listener);
+ }
- @Override
+ @Override
public void removeViewerUpdateListener(IViewerUpdateListener listener) {
- SubTreeModelViewer.this.removeViewerUpdateListener(listener);
- }
+ SubTreeModelViewer.this.removeViewerUpdateListener(listener);
+ }
- @Override
+ @Override
public boolean saveElementState(TreePath path, ModelDelta delta, int deltaFlags) {
- return SubTreeModelViewer.this.saveElementState(path, delta, deltaFlags);
- }
+ return SubTreeModelViewer.this.saveElementState(path, delta, deltaFlags);
+ }
- @Override
+ @Override
public void setAutoExpandLevel(int level) {
- SubTreeModelViewer.this.setAutoExpandLevel(level);
- }
+ SubTreeModelViewer.this.setAutoExpandLevel(level);
+ }
- @Override
+ @Override
public void setSelection(ISelection selection, boolean reveal, boolean force) {
- SubTreeModelViewer.this.setSelection(selection, reveal, force);
- }
+ SubTreeModelViewer.this.setSelection(selection, reveal, force);
+ }
- @Override
+ @Override
public boolean trySelection(ISelection selection, boolean reveal, boolean force) {
- return SubTreeModelViewer.this.trySelection(selection, reveal, force);
- }
+ return SubTreeModelViewer.this.trySelection(selection, reveal, force);
+ }
- @Override
+ @Override
public void updateViewer(IModelDelta delta) {
- SubTreeModelViewer.this.updateViewer(delta);
- }
+ SubTreeModelViewer.this.updateViewer(delta);
+ }
- @Override
+ @Override
public ViewerFilter[] getFilters() {
- return SubTreeModelViewer.this.getFilters();
- }
+ return SubTreeModelViewer.this.getFilters();
+ }
- @Override
+ @Override
public void addFilter(ViewerFilter filter) {
- SubTreeModelViewer.this.addFilter(filter);
- }
+ SubTreeModelViewer.this.addFilter(filter);
+ }
- @Override
+ @Override
public void setFilters(ViewerFilter... filters) {
- SubTreeModelViewer.this.setFilters(filters);
- }
+ SubTreeModelViewer.this.setFilters(filters);
+ }
- @Override
+ @Override
public boolean overrideSelection(ISelection current, ISelection candidate) {
- return SubTreeModelViewer.this.overrideSelection(current, candidate);
- }
+ return SubTreeModelViewer.this.overrideSelection(current, candidate);
+ }
- @Override
+ @Override
public void refresh(Object element) {
- SubTreeModelViewer.this.refresh(element);
- }
+ SubTreeModelViewer.this.refresh(element);
+ }
- @Override
+ @Override
public void update(Object element) {
- SubTreeModelViewer.this.update(element);
- }
+ SubTreeModelViewer.this.update(element);
+ }
- @Override
+ @Override
public void clearSelectionQuiet() {
- SubTreeModelViewer.this.clearSelectionQuiet();
- }
+ SubTreeModelViewer.this.clearSelectionQuiet();
+ }
- @Override
+ @Override
public TreePath[] getElementPaths(Object element) {
- TreePath[] subViewerPaths = SubTreeModelViewer.this.getElementPaths(element);
- TreePath[] retVal = new TreePath[subViewerPaths.length];
- for (int i = 0; i < subViewerPaths.length; i++) {
- retVal[i] = createFullPath(subViewerPaths[i]);
- }
- return retVal;
- }
-
- @Override
+ TreePath[] subViewerPaths = SubTreeModelViewer.this.getElementPaths(element);
+ TreePath[] retVal = new TreePath[subViewerPaths.length];
+ for (int i = 0; i < subViewerPaths.length; i++) {
+ retVal[i] = createFullPath(subViewerPaths[i]);
+ }
+ return retVal;
+ }
+
+ @Override
public boolean getElementChecked(TreePath path) {
- return SubTreeModelViewer.this.getElementChecked(createSubPath(path));
- }
+ return SubTreeModelViewer.this.getElementChecked(createSubPath(path));
+ }
- @Override
+ @Override
public boolean getElementGrayed(TreePath path) {
- return SubTreeModelViewer.this.getElementGrayed(createSubPath(path));
- }
+ return SubTreeModelViewer.this.getElementGrayed(createSubPath(path));
+ }
- @Override
+ @Override
public void setElementChecked(TreePath path, boolean checked, boolean grayed) {
- SubTreeModelViewer.this.setElementChecked(createSubPath(path), checked, grayed);
- }
- }
+ SubTreeModelViewer.this.setElementChecked(createSubPath(path), checked, grayed);
+ }
+ }
- /**
- * Delegating content provider. It translates all the calls to the
- * underlying content provider to use full model tree paths.
- */
- private class SubTreeModelContentProvider implements ITreeModelContentProvider {
+ /**
+ * Delegating content provider. It translates all the calls to the
+ * underlying content provider to use full model tree paths.
+ */
+ private class SubTreeModelContentProvider implements ITreeModelContentProvider {
- private TreeModelContentProvider fBaseProvider;
+ private TreeModelContentProvider fBaseProvider;
- public SubTreeModelContentProvider() {
- fBaseProvider = new TreeModelContentProvider();
- }
+ public SubTreeModelContentProvider() {
+ fBaseProvider = new TreeModelContentProvider();
+ }
- @Override
+ @Override
public void updateHasChildren(TreePath path) {
- fBaseProvider.updateHasChildren(createFullPath(path));
- }
+ fBaseProvider.updateHasChildren(createFullPath(path));
+ }
- @Override
+ @Override
public void updateChildCount(TreePath path, int currentChildCount) {
- fBaseProvider.updateChildCount(createFullPath(path), currentChildCount);
- }
+ fBaseProvider.updateChildCount(createFullPath(path), currentChildCount);
+ }
- @Override
+ @Override
public void updateElement(TreePath parentPath, int viewIndex) {
- fBaseProvider.updateElement(createFullPath(parentPath), viewIndex);
- }
+ fBaseProvider.updateElement(createFullPath(parentPath), viewIndex);
+ }
- @Override
+ @Override
public int viewToModelCount(TreePath parentPath, int count) {
- return fBaseProvider.viewToModelCount(createFullPath(parentPath), count);
- }
+ return fBaseProvider.viewToModelCount(createFullPath(parentPath), count);
+ }
- @Override
+ @Override
public int viewToModelIndex(TreePath parentPath, int index) {
- return fBaseProvider.viewToModelIndex(createFullPath(parentPath), index);
- }
+ return fBaseProvider.viewToModelIndex(createFullPath(parentPath), index);
+ }
- @Override
+ @Override
public void addModelChangedListener(IModelChangedListener listener) {
- fBaseProvider.addModelChangedListener(listener);
- }
+ fBaseProvider.addModelChangedListener(listener);
+ }
- @Override
+ @Override
public void preserveState(TreePath subPath) {
- fBaseProvider.preserveState(createFullPath(subPath));
- }
+ fBaseProvider.preserveState(createFullPath(subPath));
+ }
- @Override
+ @Override
public void addStateUpdateListener(IStateUpdateListener listener) {
- fBaseProvider.addStateUpdateListener(listener);
- }
+ fBaseProvider.addStateUpdateListener(listener);
+ }
- @Override
+ @Override
public void addViewerUpdateListener(IViewerUpdateListener listener) {
- fBaseProvider.addViewerUpdateListener(listener);
- }
+ fBaseProvider.addViewerUpdateListener(listener);
+ }
- @Override
+ @Override
public int getModelDeltaMask() {
- return fBaseProvider.getModelDeltaMask();
- }
+ return fBaseProvider.getModelDeltaMask();
+ }
- @Override
+ @Override
public int modelToViewChildCount(TreePath parentPath, int count) {
- return fBaseProvider.modelToViewChildCount(createFullPath(parentPath), count);
- }
+ return fBaseProvider.modelToViewChildCount(createFullPath(parentPath), count);
+ }
- @Override
+ @Override
public int modelToViewIndex(TreePath parentPath, int index) {
- return fBaseProvider.modelToViewIndex(createFullPath(parentPath), index);
- }
+ return fBaseProvider.modelToViewIndex(createFullPath(parentPath), index);
+ }
- @Override
+ @Override
public void removeModelChangedListener(IModelChangedListener listener) {
- fBaseProvider.removeModelChangedListener(listener);
- }
+ fBaseProvider.removeModelChangedListener(listener);
+ }
- @Override
+ @Override
public void removeStateUpdateListener(IStateUpdateListener listener) {
- fBaseProvider.removeStateUpdateListener(listener);
- }
+ fBaseProvider.removeStateUpdateListener(listener);
+ }
- @Override
+ @Override
public void removeViewerUpdateListener(IViewerUpdateListener listener) {
- fBaseProvider.removeViewerUpdateListener(listener);
- }
+ fBaseProvider.removeViewerUpdateListener(listener);
+ }
- @Override
+ @Override
public void setModelDeltaMask(int mask) {
- fBaseProvider.setModelDeltaMask(mask);
- }
+ fBaseProvider.setModelDeltaMask(mask);
+ }
- @Override
+ @Override
public boolean areTreeModelViewerFiltersApplicable(Object parentElement) {
- return fBaseProvider.areTreeModelViewerFiltersApplicable(parentElement);
- }
+ return fBaseProvider.areTreeModelViewerFiltersApplicable(parentElement);
+ }
- @Override
+ @Override
public boolean shouldFilter(Object parentElementOrTreePath, Object element) {
- if (parentElementOrTreePath instanceof TreePath) {
- TreePath path = (TreePath)parentElementOrTreePath;
- return fBaseProvider.shouldFilter(createFullPath(path), element);
- } else {
- return fBaseProvider.shouldFilter(parentElementOrTreePath, element);
- }
+ if (parentElementOrTreePath instanceof TreePath) {
+ TreePath path = (TreePath)parentElementOrTreePath;
+ return fBaseProvider.shouldFilter(createFullPath(path), element);
+ } else {
+ return fBaseProvider.shouldFilter(parentElementOrTreePath, element);
+ }
- }
+ }
- @Override
+ @Override
public void unmapPath(TreePath path) {
- fBaseProvider.unmapPath(createFullPath(path));
- }
+ fBaseProvider.unmapPath(createFullPath(path));
+ }
- @Override
+ @Override
public void updateModel(IModelDelta delta, int mask) {
- fBaseProvider.updateModel(delta, mask);
- }
+ fBaseProvider.updateModel(delta, mask);
+ }
- @Override
+ @Override
public TreePath[] getParents(Object element) {
- // Not used
- return null;
- }
+ // Not used
+ return null;
+ }
- @Override
+ @Override
public void cancelRestore(TreePath path, int flags) {
- fBaseProvider.cancelRestore(createFullPath(path), flags);
- }
+ fBaseProvider.cancelRestore(createFullPath(path), flags);
+ }
- @Override
+ @Override
public void dispose() {
- fBaseProvider.dispose();
- }
+ fBaseProvider.dispose();
+ }
- @Override
+ @Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- fBaseProvider.inputChanged(fDelegatingViewer, oldInput, newInput);
- }
+ fBaseProvider.inputChanged(fDelegatingViewer, oldInput, newInput);
+ }
@Override
public void postInputChanged(IInternalTreeModelViewer viewer,
@@ -591,125 +591,125 @@ public class SubTreeModelViewer extends TreeModelViewer {
fBaseProvider.postInputChanged(viewer, oldInput, newInput);
}
- @Override
+ @Override
public boolean setChecked(TreePath path, boolean checked) {
- return fBaseProvider.setChecked(createFullPath(path), checked);
- }
+ return fBaseProvider.setChecked(createFullPath(path), checked);
+ }
- }
+ }
- /**
- * Delegating label provider. It translates all the calls to the
- * underlying label provider to use full model tree paths.
- */
- private class SubTreeModelLabelProvider extends ColumnLabelProvider
- implements ITreeModelLabelProvider
- {
+ /**
+ * Delegating label provider. It translates all the calls to the
+ * underlying label provider to use full model tree paths.
+ */
+ private class SubTreeModelLabelProvider extends ColumnLabelProvider
+ implements ITreeModelLabelProvider
+ {
- private TreeModelLabelProvider fBaseProvider;
+ private TreeModelLabelProvider fBaseProvider;
- public SubTreeModelLabelProvider(IInternalTreeModelViewer viewer) {
- fBaseProvider = new TreeModelLabelProvider(viewer);
- }
+ public SubTreeModelLabelProvider(IInternalTreeModelViewer viewer) {
+ fBaseProvider = new TreeModelLabelProvider(viewer);
+ }
- @Override
+ @Override
public boolean update(TreePath elementPath) {
- return fBaseProvider.update( createFullPath(elementPath) );
- }
+ return fBaseProvider.update( createFullPath(elementPath) );
+ }
- @Override
+ @Override
public void addLabelUpdateListener(ILabelUpdateListener listener) {
- fBaseProvider.addLabelUpdateListener(listener);
- }
+ fBaseProvider.addLabelUpdateListener(listener);
+ }
- @Override
+ @Override
public Color getColor(RGB rgb) {
- return fBaseProvider.getColor(rgb);
- }
+ return fBaseProvider.getColor(rgb);
+ }
- @Override
+ @Override
public Font getFont(FontData fontData) {
- return fBaseProvider.getFont(fontData);
- }
+ return fBaseProvider.getFont(fontData);
+ }
- @Override
+ @Override
public Image getImage(ImageDescriptor descriptor) {
- return fBaseProvider.getImage(descriptor);
- }
+ return fBaseProvider.getImage(descriptor);
+ }
- @Override
+ @Override
public void removeLabelUpdateListener(ILabelUpdateListener listener) {
- fBaseProvider.removeLabelUpdateListener(listener);
- }
+ fBaseProvider.removeLabelUpdateListener(listener);
+ }
- @Override
+ @Override
public void addListener(ILabelProviderListener listener) {
- fBaseProvider.addListener(listener);
- }
+ fBaseProvider.addListener(listener);
+ }
- @Override
+ @Override
public void dispose() {
- fBaseProvider.dispose();
- super.dispose();
- }
+ fBaseProvider.dispose();
+ super.dispose();
+ }
- @Override
+ @Override
public boolean isLabelProperty(Object element, String property) {
- return fBaseProvider.isLabelProperty(element, property);
- }
+ return fBaseProvider.isLabelProperty(element, property);
+ }
- @Override
+ @Override
public void removeListener(ILabelProviderListener listener) {
- fBaseProvider.removeListener(listener);
- }
- }
-
- private TreePath createFullPath(TreePath subPath) {
- if (fRootPath == null) {
- return TreePath.EMPTY;
- }
-
- Object[] segments = new Object[fRootPath.getSegmentCount() + subPath.getSegmentCount()];
- for (int i = 0; i < fRootPath.getSegmentCount(); i++) {
- segments[i] = fRootPath.getSegment(i);
- }
- for (int i = 0; i < subPath.getSegmentCount(); i++) {
- segments[i + fRootPath.getSegmentCount()] = subPath.getSegment(i);
- }
- return new TreePath(segments);
- }
-
- private TreePath createSubPath(TreePath fullPath) {
- if (fRootPath == null) {
- return TreePath.EMPTY;
- }
-
- if (fullPath.getSegmentCount() <= fRootPath.getSegmentCount()) {
- return TreePath.EMPTY;
- }
- Object[] segments = new Object[fullPath.getSegmentCount() - fRootPath.getSegmentCount()];
- for (int i = 0; i < segments.length; i++) {
- segments[i] = fullPath.getSegment(i + fRootPath.getSegmentCount());
- }
- return new TreePath(segments);
- }
-
- private DelegatingTreeModelViewer getDelegatingViewer() {
- if (fDelegatingViewer == null) {
- fDelegatingViewer = new DelegatingTreeModelViewer();
- }
- return fDelegatingViewer;
- }
-
- @Override
+ fBaseProvider.removeListener(listener);
+ }
+ }
+
+ private TreePath createFullPath(TreePath subPath) {
+ if (fRootPath == null) {
+ return TreePath.EMPTY;
+ }
+
+ Object[] segments = new Object[fRootPath.getSegmentCount() + subPath.getSegmentCount()];
+ for (int i = 0; i < fRootPath.getSegmentCount(); i++) {
+ segments[i] = fRootPath.getSegment(i);
+ }
+ for (int i = 0; i < subPath.getSegmentCount(); i++) {
+ segments[i + fRootPath.getSegmentCount()] = subPath.getSegment(i);
+ }
+ return new TreePath(segments);
+ }
+
+ private TreePath createSubPath(TreePath fullPath) {
+ if (fRootPath == null) {
+ return TreePath.EMPTY;
+ }
+
+ if (fullPath.getSegmentCount() <= fRootPath.getSegmentCount()) {
+ return TreePath.EMPTY;
+ }
+ Object[] segments = new Object[fullPath.getSegmentCount() - fRootPath.getSegmentCount()];
+ for (int i = 0; i < segments.length; i++) {
+ segments[i] = fullPath.getSegment(i + fRootPath.getSegmentCount());
+ }
+ return new TreePath(segments);
+ }
+
+ private DelegatingTreeModelViewer getDelegatingViewer() {
+ if (fDelegatingViewer == null) {
+ fDelegatingViewer = new DelegatingTreeModelViewer();
+ }
+ return fDelegatingViewer;
+ }
+
+ @Override
protected ITreeModelContentProvider createContentProvider() {
- return new SubTreeModelContentProvider();
- }
+ return new SubTreeModelContentProvider();
+ }
- @Override
+ @Override
protected ITreeModelLabelProvider createLabelProvider() {
- return new SubTreeModelLabelProvider(getDelegatingViewer());
- }
+ return new SubTreeModelLabelProvider(getDelegatingViewer());
+ }
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TimeTriggeredProgressMonitorDialog.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TimeTriggeredProgressMonitorDialog.java
index 22bc2da8e..38b2c2903 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TimeTriggeredProgressMonitorDialog.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TimeTriggeredProgressMonitorDialog.java
@@ -69,94 +69,94 @@ public class TimeTriggeredProgressMonitorDialog extends ProgressMonitorDialog {
this.longOperationTime = longOperationTime;
}
- /**
+ /**
* Create a monitor for the receiver that wrappers the superclasses monitor.
*
*/
- public void createWrapperedMonitor() {
- wrapperedMonitor = new IProgressMonitor() {
+ public void createWrapperedMonitor() {
+ wrapperedMonitor = new IProgressMonitor() {
- IProgressMonitor superMonitor = TimeTriggeredProgressMonitorDialog.super
- .getProgressMonitor();
+ IProgressMonitor superMonitor = TimeTriggeredProgressMonitorDialog.super
+ .getProgressMonitor();
- @Override
+ @Override
public void beginTask(String name, int totalWork) {
- superMonitor.beginTask(name, totalWork);
- checkTicking();
- }
+ superMonitor.beginTask(name, totalWork);
+ checkTicking();
+ }
- /**
+ /**
* Check if we have ticked in the last 800ms.
*/
- private void checkTicking() {
- if (triggerTime < 0) {
+ private void checkTicking() {
+ if (triggerTime < 0) {
triggerTime = System.currentTimeMillis() + longOperationTime;
}
- if (!dialogOpened && System.currentTimeMillis() > triggerTime) {
- open();
- dialogOpened = true;
- }
- }
+ if (!dialogOpened && System.currentTimeMillis() > triggerTime) {
+ open();
+ dialogOpened = true;
+ }
+ }
- @Override
+ @Override
public void done() {
- superMonitor.done();
- checkTicking();
- }
+ superMonitor.done();
+ checkTicking();
+ }
- @Override
+ @Override
public void internalWorked(double work) {
- superMonitor.internalWorked(work);
- checkTicking();
- }
+ superMonitor.internalWorked(work);
+ checkTicking();
+ }
- @Override
+ @Override
public boolean isCanceled() {
- return superMonitor.isCanceled();
- }
+ return superMonitor.isCanceled();
+ }
- @Override
+ @Override
public void setCanceled(boolean value) {
- superMonitor.setCanceled(value);
+ superMonitor.setCanceled(value);
- }
+ }
- @Override
+ @Override
public void setTaskName(String name) {
- superMonitor.setTaskName(name);
- checkTicking();
+ superMonitor.setTaskName(name);
+ checkTicking();
- }
+ }
- @Override
+ @Override
public void subTask(String name) {
- superMonitor.subTask(name);
- checkTicking();
- }
+ superMonitor.subTask(name);
+ checkTicking();
+ }
- @Override
+ @Override
public void worked(int work) {
- superMonitor.worked(work);
- checkTicking();
+ superMonitor.worked(work);
+ checkTicking();
- }
- };
- }
+ }
+ };
+ }
- @Override
+ @Override
public IProgressMonitor getProgressMonitor() {
- if (wrapperedMonitor == null) {
+ if (wrapperedMonitor == null) {
createWrapperedMonitor();
}
- return wrapperedMonitor;
- }
+ return wrapperedMonitor;
+ }
- @Override
+ @Override
public void run(final boolean fork, final boolean cancelable,
- final IRunnableWithProgress runnable) throws InvocationTargetException,
- InterruptedException {
- final InvocationTargetException[] invokes = new InvocationTargetException[1];
- final InterruptedException[] interrupt = new InterruptedException[1];
+ final IRunnableWithProgress runnable) throws InvocationTargetException,
+ InterruptedException {
+ final InvocationTargetException[] invokes = new InvocationTargetException[1];
+ final InterruptedException[] interrupt = new InterruptedException[1];
Runnable dialogWaitRunnable = () -> {
try {
TimeTriggeredProgressMonitorDialog.super.run(fork, cancelable, runnable);
@@ -166,17 +166,17 @@ public class TimeTriggeredProgressMonitorDialog extends ProgressMonitorDialog {
interrupt[0] = e2;
}
};
- final Display display = PlatformUI.getWorkbench().getDisplay();
- if (display == null) {
+ final Display display = PlatformUI.getWorkbench().getDisplay();
+ if (display == null) {
return;
}
- //show a busy cursor until the dialog opens
- BusyIndicator.showWhile(display, dialogWaitRunnable);
- if (invokes[0] != null) {
- throw invokes[0];
- }
- if (interrupt[0] != null) {
- throw interrupt[0];
- }
- }
+ //show a busy cursor until the dialog opens
+ BusyIndicator.showWhile(display, dialogWaitRunnable);
+ if (invokes[0] != null) {
+ throw invokes[0];
+ }
+ if (interrupt[0] != null) {
+ throw interrupt[0];
+ }
+ }
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java
index 4608c48b0..80c487b76 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java
@@ -67,327 +67,327 @@ import org.eclipse.ui.progress.WorkbenchJob;
*/
public class TreeModelContentProvider implements ITreeModelContentProvider, IContentProvider, IModelChangedListener {
- /**
- * Tree model viewer that this content provider is used with.
- */
- private IInternalTreeModelViewer fViewer;
-
- /**
- * Mask used to filter delta updates coming from the model.
- */
- private int fModelDeltaMask = ~0;
-
- /**
- * Map tree paths to model proxy responsible for element
- *
- * Used to install different model proxy instances for one element depending
- * on the tree path.
- */
+ /**
+ * Tree model viewer that this content provider is used with.
+ */
+ private IInternalTreeModelViewer fViewer;
+
+ /**
+ * Mask used to filter delta updates coming from the model.
+ */
+ private int fModelDeltaMask = ~0;
+
+ /**
+ * Map tree paths to model proxy responsible for element
+ *
+ * Used to install different model proxy instances for one element depending
+ * on the tree path.
+ */
private Map<TreePath, IModelProxy> fTreeModelProxies = new HashMap<>(); // tree
// model
// proxy
// by
// element tree path
- /**
- * Map element to model proxy responsible for it.
- *
- * Used to install a single model proxy which is responsible for all
- * instances of an element in the model tree.
- */
+ /**
+ * Map element to model proxy responsible for it.
+ *
+ * Used to install a single model proxy which is responsible for all
+ * instances of an element in the model tree.
+ */
private Map<Object, IModelProxy> fModelProxies = new HashMap<>(); // model
// proxy
// by
// element
- /**
- * Map of nodes that have been filtered from the viewer.
- */
- private FilterTransform fTransform = new FilterTransform();
+ /**
+ * Map of nodes that have been filtered from the viewer.
+ */
+ private FilterTransform fTransform = new FilterTransform();
- /**
- * Model listeners
- */
+ /**
+ * Model listeners
+ */
private ListenerList<IModelChangedListener> fModelListeners = new ListenerList<>();
- /**
- * Viewer update listeners
- */
+ /**
+ * Viewer update listeners
+ */
private ListenerList<IViewerUpdateListener> fUpdateListeners = new ListenerList<>();
- /**
- * Flag indicating whether we are currently in a model sequence.
- * @see IViewerUpdateListener
- */
- private boolean fModelSequenceRunning = false;
+ /**
+ * Flag indicating whether we are currently in a model sequence.
+ * @see IViewerUpdateListener
+ */
+ private boolean fModelSequenceRunning = false;
- /**
- * Map of updates in progress: element path -> list of requests
- */
+ /**
+ * Map of updates in progress: element path -> list of requests
+ */
private Map<TreePath, List<ViewerUpdateMonitor>> fRequestsInProgress = new HashMap<>();
- /**
- * Map of dependent requests waiting for parent requests to complete:
- * element path -> list of requests
- */
+ /**
+ * Map of dependent requests waiting for parent requests to complete:
+ * element path -> list of requests
+ */
private Map<TreePath, List<ViewerUpdateMonitor>> fWaitingRequests = new HashMap<>();
private List<ViewerUpdateMonitor> fCompletedUpdates = new ArrayList<>();
- private Runnable fCompletedUpdatesRunnable;
+ private Runnable fCompletedUpdatesRunnable;
- private ViewerStateTracker fStateTracker = new ViewerStateTracker(this);
+ private ViewerStateTracker fStateTracker = new ViewerStateTracker(this);
private TreePath fRevealPath;
private int fRevealIndex;
- /**
- * Update type constants
- */
- static final int UPDATE_SEQUENCE_BEGINS = 0;
+ /**
+ * Update type constants
+ */
+ static final int UPDATE_SEQUENCE_BEGINS = 0;
- static final int UPDATE_SEQUENCE_COMPLETE = 1;
+ static final int UPDATE_SEQUENCE_COMPLETE = 1;
- static final int UPDATE_BEGINS = 2;
+ static final int UPDATE_BEGINS = 2;
- static final int UPDATE_COMPLETE = 3;
+ static final int UPDATE_COMPLETE = 3;
- /**
- * Constant for an empty tree path.
- */
- static final TreePath EMPTY_TREE_PATH = new TreePath(new Object[] {});
+ /**
+ * Constant for an empty tree path.
+ */
+ static final TreePath EMPTY_TREE_PATH = new TreePath(new Object[] {});
- @Override
+ @Override
public void dispose() {
- if (fViewer == null) {
+ if (fViewer == null) {
return;
}
fDelayedDoModelChangeJob.shutdown();
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
- // cancel pending updates
+ // cancel pending updates
for (List<ViewerUpdateMonitor> requests : fRequestsInProgress.values()) {
for (ViewerUpdateMonitor vu : requests) {
vu.cancel();
- }
- }
- fWaitingRequests.clear();
-
- fStateTracker.dispose();
- fModelListeners.clear();
- fUpdateListeners.clear();
- disposeAllModelProxies();
-
- synchronized(this) {
- fViewer = null;
- }
- }
-
- /**
- * @return Returns whether the content provider is disposed.
- */
- boolean isDisposed() {
- synchronized(this) {
- return fViewer == null;
- }
- }
-
- @Override
+ }
+ }
+ fWaitingRequests.clear();
+
+ fStateTracker.dispose();
+ fModelListeners.clear();
+ fUpdateListeners.clear();
+ disposeAllModelProxies();
+
+ synchronized(this) {
+ fViewer = null;
+ }
+ }
+
+ /**
+ * @return Returns whether the content provider is disposed.
+ */
+ boolean isDisposed() {
+ synchronized(this) {
+ return fViewer == null;
+ }
+ }
+
+ @Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- synchronized(this) {
- fViewer = (IInternalTreeModelViewer) viewer;
- }
+ synchronized(this) {
+ fViewer = (IInternalTreeModelViewer) viewer;
+ }
- Assert.isTrue( fViewer.getDisplay().getThread() == Thread.currentThread() );
+ Assert.isTrue( fViewer.getDisplay().getThread() == Thread.currentThread() );
- if (oldInput != null) {
- fStateTracker.saveViewerState(oldInput);
- }
- }
+ if (oldInput != null) {
+ fStateTracker.saveViewerState(oldInput);
+ }
+ }
- @Override
+ @Override
public void postInputChanged(IInternalTreeModelViewer viewer, Object oldInput, Object newInput) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
-
- cancelSubtreeUpdates(TreePath.EMPTY);
- disposeAllModelProxies();
- cancelSubtreeUpdates(TreePath.EMPTY);
- fTransform.clear();
- if (newInput != null) {
- installModelProxy(newInput, TreePath.EMPTY);
- fStateTracker.restoreViewerState(newInput);
- }
- }
-
- @Override
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+
+ cancelSubtreeUpdates(TreePath.EMPTY);
+ disposeAllModelProxies();
+ cancelSubtreeUpdates(TreePath.EMPTY);
+ fTransform.clear();
+ if (newInput != null) {
+ installModelProxy(newInput, TreePath.EMPTY);
+ fStateTracker.restoreViewerState(newInput);
+ }
+ }
+
+ @Override
public void addViewerUpdateListener(IViewerUpdateListener listener) {
- fUpdateListeners.add(listener);
- }
+ fUpdateListeners.add(listener);
+ }
- @Override
+ @Override
public void removeViewerUpdateListener(IViewerUpdateListener listener) {
- fUpdateListeners.remove(listener);
- }
+ fUpdateListeners.remove(listener);
+ }
- @Override
+ @Override
public void addStateUpdateListener(IStateUpdateListener listener) {
- fStateTracker.addStateUpdateListener(listener);
- }
+ fStateTracker.addStateUpdateListener(listener);
+ }
- @Override
+ @Override
public void preserveState(TreePath path) {
- fStateTracker.appendToPendingStateDelta(path);
- }
+ fStateTracker.appendToPendingStateDelta(path);
+ }
- @Override
+ @Override
public void removeStateUpdateListener(IStateUpdateListener listener) {
- fStateTracker.removeStateUpdateListener(listener);
- }
+ fStateTracker.removeStateUpdateListener(listener);
+ }
- @Override
+ @Override
public void addModelChangedListener(IModelChangedListener listener) {
- fModelListeners.add(listener);
- }
+ fModelListeners.add(listener);
+ }
- @Override
+ @Override
public void removeModelChangedListener(IModelChangedListener listener) {
- fModelListeners.remove(listener);
- }
+ fModelListeners.remove(listener);
+ }
- @Override
+ @Override
public void cancelRestore(final TreePath path, final int flags) {
- fStateTracker.cancelRestore(path, flags);
- }
+ fStateTracker.cancelRestore(path, flags);
+ }
- @Override
+ @Override
public boolean setChecked(TreePath path, boolean checked) {
- IModelProxy elementProxy = getElementProxy(path);
- if (elementProxy instanceof ICheckboxModelProxy) {
- return ((ICheckboxModelProxy) elementProxy).setChecked(getPresentationContext(), getViewer().getInput(), path, checked);
- }
- return false;
- }
-
- /**
- * Installs the model proxy for the given element into this content provider
- * if not already installed.
- * @param input the input to install the model proxy on
- * @param path the {@link TreePath} to install the proxy for
- */
- private void installModelProxy(Object input, TreePath path) {
-
- if (!fTreeModelProxies.containsKey(path) && !fModelProxies.containsKey(path.getLastSegment())) {
- Object element = path.getSegmentCount() != 0 ? path.getLastSegment() : input;
- IModelProxy proxy = null;
- IModelProxyFactory2 modelProxyFactory2 = ViewerAdapterService.getModelProxyFactory2(element);
- if (modelProxyFactory2 != null) {
- proxy = modelProxyFactory2.createTreeModelProxy(input, path, getPresentationContext());
- if (proxy != null) {
- fTreeModelProxies.put(path, proxy);
- }
- }
- if (proxy == null) {
- IModelProxyFactory modelProxyFactory = ViewerAdapterService.getModelProxyFactory(element);
- if (modelProxyFactory != null) {
- proxy = modelProxyFactory.createModelProxy(element, getPresentationContext());
- if (proxy != null) {
- fModelProxies.put(element, proxy);
- }
- }
- }
-
- if (proxy instanceof IModelProxy2) {
- proxy.addModelChangedListener(this);
- ((IModelProxy2)proxy).initialize(getViewer());
- } else if (proxy != null) {
- final IModelProxy finalProxy = proxy;
- Job job = new Job("Model Proxy installed notification job") {//$NON-NLS-1$
- @Override
+ IModelProxy elementProxy = getElementProxy(path);
+ if (elementProxy instanceof ICheckboxModelProxy) {
+ return ((ICheckboxModelProxy) elementProxy).setChecked(getPresentationContext(), getViewer().getInput(), path, checked);
+ }
+ return false;
+ }
+
+ /**
+ * Installs the model proxy for the given element into this content provider
+ * if not already installed.
+ * @param input the input to install the model proxy on
+ * @param path the {@link TreePath} to install the proxy for
+ */
+ private void installModelProxy(Object input, TreePath path) {
+
+ if (!fTreeModelProxies.containsKey(path) && !fModelProxies.containsKey(path.getLastSegment())) {
+ Object element = path.getSegmentCount() != 0 ? path.getLastSegment() : input;
+ IModelProxy proxy = null;
+ IModelProxyFactory2 modelProxyFactory2 = ViewerAdapterService.getModelProxyFactory2(element);
+ if (modelProxyFactory2 != null) {
+ proxy = modelProxyFactory2.createTreeModelProxy(input, path, getPresentationContext());
+ if (proxy != null) {
+ fTreeModelProxies.put(path, proxy);
+ }
+ }
+ if (proxy == null) {
+ IModelProxyFactory modelProxyFactory = ViewerAdapterService.getModelProxyFactory(element);
+ if (modelProxyFactory != null) {
+ proxy = modelProxyFactory.createModelProxy(element, getPresentationContext());
+ if (proxy != null) {
+ fModelProxies.put(element, proxy);
+ }
+ }
+ }
+
+ if (proxy instanceof IModelProxy2) {
+ proxy.addModelChangedListener(this);
+ ((IModelProxy2)proxy).initialize(getViewer());
+ } else if (proxy != null) {
+ final IModelProxy finalProxy = proxy;
+ Job job = new Job("Model Proxy installed notification job") {//$NON-NLS-1$
+ @Override
protected IStatus run(IProgressMonitor monitor) {
- if (!monitor.isCanceled()) {
- IPresentationContext context = null;
- Viewer viewer = null;
- synchronized (TreeModelContentProvider.this) {
- if (!isDisposed()) {
- context = getPresentationContext();
- viewer = (Viewer) getViewer();
- }
- }
- if (viewer != null && context != null && !finalProxy.isDisposed()) {
- finalProxy.init(context);
- finalProxy.addModelChangedListener(TreeModelContentProvider.this);
- finalProxy.installed(viewer);
- }
- }
- return Status.OK_STATUS;
- }
-
- @Override
+ if (!monitor.isCanceled()) {
+ IPresentationContext context = null;
+ Viewer viewer = null;
+ synchronized (TreeModelContentProvider.this) {
+ if (!isDisposed()) {
+ context = getPresentationContext();
+ viewer = (Viewer) getViewer();
+ }
+ }
+ if (viewer != null && context != null && !finalProxy.isDisposed()) {
+ finalProxy.init(context);
+ finalProxy.addModelChangedListener(TreeModelContentProvider.this);
+ finalProxy.installed(viewer);
+ }
+ }
+ return Status.OK_STATUS;
+ }
+
+ @Override
public boolean shouldRun() {
- return !isDisposed();
- }
- };
- job.setSystem(true);
- job.schedule();
- }
- }
- }
-
- /**
- * Finds the model proxy that an element with a given path is associated with.
- * @param path Path of the element.
- * @return Element's model proxy.
- */
- private IModelProxy getElementProxy(TreePath path) {
- while (path != null) {
- IModelProxy proxy = fTreeModelProxies.get(path);
- if (proxy != null) {
- return proxy;
- }
-
- Object element = path.getSegmentCount() == 0 ? getViewer().getInput() : path.getLastSegment();
- proxy = fModelProxies.get(element);
- if (proxy != null) {
- return proxy;
- }
-
- path = path.getParentPath();
- }
- return null;
- }
-
- /**
- * Removes all model proxies
- */
- private void disposeAllModelProxies() {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ return !isDisposed();
+ }
+ };
+ job.setSystem(true);
+ job.schedule();
+ }
+ }
+ }
+
+ /**
+ * Finds the model proxy that an element with a given path is associated with.
+ * @param path Path of the element.
+ * @return Element's model proxy.
+ */
+ private IModelProxy getElementProxy(TreePath path) {
+ while (path != null) {
+ IModelProxy proxy = fTreeModelProxies.get(path);
+ if (proxy != null) {
+ return proxy;
+ }
+
+ Object element = path.getSegmentCount() == 0 ? getViewer().getInput() : path.getLastSegment();
+ proxy = fModelProxies.get(element);
+ if (proxy != null) {
+ return proxy;
+ }
+
+ path = path.getParentPath();
+ }
+ return null;
+ }
+
+ /**
+ * Removes all model proxies
+ */
+ private void disposeAllModelProxies() {
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
for (IModelProxy proxy : fModelProxies.values()) {
- proxy.dispose();
- }
- fModelProxies.clear();
+ proxy.dispose();
+ }
+ fModelProxies.clear();
for (IModelProxy proxy : fTreeModelProxies.values()) {
- proxy.dispose();
- }
- fTreeModelProxies.clear();
- }
-
- /**
- * Removes the model proxy installed for the given element, if any.
- * @param path the {@link TreePath} to dispose the model proxy for
- */
- private void disposeModelProxy(TreePath path) {
- IModelProxy proxy = fTreeModelProxies.remove(path);
- if (proxy != null) {
- proxy.dispose();
- }
- proxy = fModelProxies.remove(path.getLastSegment());
- if (proxy != null) {
- proxy.dispose();
- }
- }
+ proxy.dispose();
+ }
+ fTreeModelProxies.clear();
+ }
+
+ /**
+ * Removes the model proxy installed for the given element, if any.
+ * @param path the {@link TreePath} to dispose the model proxy for
+ */
+ private void disposeModelProxy(TreePath path) {
+ IModelProxy proxy = fTreeModelProxies.remove(path);
+ if (proxy != null) {
+ proxy.dispose();
+ }
+ proxy = fModelProxies.remove(path.getLastSegment());
+ if (proxy != null) {
+ proxy.dispose();
+ }
+ }
private static class DelayedDoModelChange {
public final IModelDelta delta;
@@ -488,280 +488,280 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
private final DelayedDoModelChangedJob fDelayedDoModelChangeJob = new DelayedDoModelChangedJob();
- @Override
+ @Override
public void modelChanged(final IModelDelta delta, final IModelProxy proxy) {
- Display display = null;
-
- // Check if the viewer is still available, i.e. if the content provider
- // is not disposed.
- synchronized(this) {
- if (fViewer != null && !proxy.isDisposed()) {
- display = fViewer.getDisplay();
- }
- }
- if (display != null) {
- // If we're in display thread, process the delta immediately to
- // avoid "skid" in processing events.
- if (Thread.currentThread().equals(display.getThread())) {
- doModelChanged(delta, proxy);
- }
- else {
+ Display display = null;
+
+ // Check if the viewer is still available, i.e. if the content provider
+ // is not disposed.
+ synchronized(this) {
+ if (fViewer != null && !proxy.isDisposed()) {
+ display = fViewer.getDisplay();
+ }
+ }
+ if (display != null) {
+ // If we're in display thread, process the delta immediately to
+ // avoid "skid" in processing events.
+ if (Thread.currentThread().equals(display.getThread())) {
+ doModelChanged(delta, proxy);
+ }
+ else {
try {
Job.getJobManager().join(ElementContentProvider.class, null);
} catch (OperationCanceledException | InterruptedException e) {
DebugUIPlugin.log(new Status(IStatus.WARNING, DebugUIPlugin.getUniqueIdentifier(), "Interrupted while waiting on ElementContentProvider jobs", e)); //$NON-NLS-1$
}
fDelayedDoModelChangeJob.runDelayed(delta, proxy);
- }
- }
- }
-
- /**
- * Executes the model proxy in UI thread.
- * @param delta Delta to process
- * @param proxy Proxy that fired the delta.
- */
- private void doModelChanged(IModelDelta delta, IModelProxy proxy) {
- if (!proxy.isDisposed()) {
- if (DebugUIPlugin.DEBUG_DELTAS && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
- DebugUIPlugin.trace("RECEIVED DELTA: " + delta.toString()); //$NON-NLS-1$
- }
-
- updateModel(delta, getModelDeltaMask());
-
- // Initiate model update sequence before notifying of the model changed.
- trigger(null);
-
- // Call model listeners after updating the viewer model.
+ }
+ }
+ }
+
+ /**
+ * Executes the model proxy in UI thread.
+ * @param delta Delta to process
+ * @param proxy Proxy that fired the delta.
+ */
+ private void doModelChanged(IModelDelta delta, IModelProxy proxy) {
+ if (!proxy.isDisposed()) {
+ if (DebugUIPlugin.DEBUG_DELTAS && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
+ DebugUIPlugin.trace("RECEIVED DELTA: " + delta.toString()); //$NON-NLS-1$
+ }
+
+ updateModel(delta, getModelDeltaMask());
+
+ // Initiate model update sequence before notifying of the model changed.
+ trigger(null);
+
+ // Call model listeners after updating the viewer model.
for (IModelChangedListener iModelChangedListener : fModelListeners) {
iModelChangedListener.modelChanged(delta, proxy);
}
- }
- }
+ }
+ }
- @Override
+ @Override
public void setModelDeltaMask(int mask) {
- fModelDeltaMask = mask;
- }
+ fModelDeltaMask = mask;
+ }
- @Override
+ @Override
public int getModelDeltaMask() {
- return fModelDeltaMask;
- }
+ return fModelDeltaMask;
+ }
- @Override
+ @Override
public void updateModel(IModelDelta delta, int mask) {
- // Processing deltas with null input leads to NPEs
- // (Bug 380288 - NPE switching to the Breakpoints View)
- if (getViewer() == null || getViewer().getInput() == null) {
+ // Processing deltas with null input leads to NPEs
+ // (Bug 380288 - NPE switching to the Breakpoints View)
+ if (getViewer() == null || getViewer().getInput() == null) {
return;
}
fRevealPath = null;
- IModelDelta[] deltaArray = new IModelDelta[] { delta };
- updateNodes(deltaArray, mask & (IModelDelta.REMOVED | IModelDelta.UNINSTALL));
- updateNodes(deltaArray, mask & ITreeModelContentProvider.UPDATE_MODEL_DELTA_FLAGS
- & ~(IModelDelta.REMOVED | IModelDelta.UNINSTALL));
- updateNodes(deltaArray, mask & ITreeModelContentProvider.CONTROL_MODEL_DELTA_FLAGS);
-
- fStateTracker.checkIfRestoreComplete();
- }
-
- /**
- * Returns a tree path for the node including the root element.
- *
- * @param node
- * model delta
- * @return corresponding tree path
- */
- TreePath getFullTreePath(IModelDelta node) {
+ IModelDelta[] deltaArray = new IModelDelta[] { delta };
+ updateNodes(deltaArray, mask & (IModelDelta.REMOVED | IModelDelta.UNINSTALL));
+ updateNodes(deltaArray, mask & ITreeModelContentProvider.UPDATE_MODEL_DELTA_FLAGS
+ & ~(IModelDelta.REMOVED | IModelDelta.UNINSTALL));
+ updateNodes(deltaArray, mask & ITreeModelContentProvider.CONTROL_MODEL_DELTA_FLAGS);
+
+ fStateTracker.checkIfRestoreComplete();
+ }
+
+ /**
+ * Returns a tree path for the node including the root element.
+ *
+ * @param node
+ * model delta
+ * @return corresponding tree path
+ */
+ TreePath getFullTreePath(IModelDelta node) {
ArrayList<Object> list = new ArrayList<>();
- while (node.getParentDelta() != null) {
- list.add(0, node.getElement());
- node = node.getParentDelta();
- }
- return new TreePath(list.toArray());
- }
-
- /**
- * Returns a tree path for the node, *not* including the root element.
- *
- * @param node
- * model delta
- * @return corresponding tree path
- */
- TreePath getViewerTreePath(IModelDelta node) {
+ while (node.getParentDelta() != null) {
+ list.add(0, node.getElement());
+ node = node.getParentDelta();
+ }
+ return new TreePath(list.toArray());
+ }
+
+ /**
+ * Returns a tree path for the node, *not* including the root element.
+ *
+ * @param node
+ * model delta
+ * @return corresponding tree path
+ */
+ TreePath getViewerTreePath(IModelDelta node) {
ArrayList<Object> list = new ArrayList<>();
- IModelDelta parentDelta = node.getParentDelta();
- while (parentDelta != null) {
- list.add(0, node.getElement());
- node = parentDelta;
- parentDelta = node.getParentDelta();
- }
- return new TreePath(list.toArray());
- }
-
- /**
- * Returns the viewer this content provider is working for.
- *
- * @return viewer
- */
- protected IInternalTreeModelViewer getViewer() {
- synchronized(this) {
- return fViewer;
- }
- }
-
- @Override
+ IModelDelta parentDelta = node.getParentDelta();
+ while (parentDelta != null) {
+ list.add(0, node.getElement());
+ node = parentDelta;
+ parentDelta = node.getParentDelta();
+ }
+ return new TreePath(list.toArray());
+ }
+
+ /**
+ * Returns the viewer this content provider is working for.
+ *
+ * @return viewer
+ */
+ protected IInternalTreeModelViewer getViewer() {
+ synchronized(this) {
+ return fViewer;
+ }
+ }
+
+ @Override
public int viewToModelIndex(TreePath parentPath, int index) {
- return fTransform.viewToModelIndex(parentPath, index);
- }
+ return fTransform.viewToModelIndex(parentPath, index);
+ }
- @Override
+ @Override
public int viewToModelCount(TreePath parentPath, int count) {
- return fTransform.viewToModelCount(parentPath, count);
- }
+ return fTransform.viewToModelCount(parentPath, count);
+ }
- @Override
+ @Override
public int modelToViewIndex(TreePath parentPath, int index) {
- return fTransform.modelToViewIndex(parentPath, index);
- }
+ return fTransform.modelToViewIndex(parentPath, index);
+ }
- @Override
+ @Override
public int modelToViewChildCount(TreePath parentPath, int count) {
- return fTransform.modelToViewCount(parentPath, count);
- }
+ return fTransform.modelToViewCount(parentPath, count);
+ }
- @Override
+ @Override
public boolean areTreeModelViewerFiltersApplicable(Object parentElement) {
- ViewerFilter[] filters = fViewer.getFilters();
- if (filters.length > 0) {
- for (int j = 0; j < filters.length; j++) {
- if (filters[j] instanceof TreeModelViewerFilter &&
- ((TreeModelViewerFilter)filters[j]).isApplicable(fViewer, parentElement))
- {
- return true;
- }
- }
- }
- return false;
- }
-
- @Override
+ ViewerFilter[] filters = fViewer.getFilters();
+ if (filters.length > 0) {
+ for (int j = 0; j < filters.length; j++) {
+ if (filters[j] instanceof TreeModelViewerFilter &&
+ ((TreeModelViewerFilter)filters[j]).isApplicable(fViewer, parentElement))
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ @Override
public boolean shouldFilter(Object parentElementOrTreePath, Object element) {
- ViewerFilter[] filters = fViewer.getFilters();
- if (filters.length > 0) {
- for (int j = 0; j < filters.length; j++) {
- if (filters[j] instanceof TreeModelViewerFilter) {
- // Skip the filter if not applicable to parent element
- Object parentElement = parentElementOrTreePath instanceof TreePath
- ? ((TreePath)parentElementOrTreePath).getLastSegment() : parentElementOrTreePath;
- if (parentElement == null) {
+ ViewerFilter[] filters = fViewer.getFilters();
+ if (filters.length > 0) {
+ for (int j = 0; j < filters.length; j++) {
+ if (filters[j] instanceof TreeModelViewerFilter) {
+ // Skip the filter if not applicable to parent element
+ Object parentElement = parentElementOrTreePath instanceof TreePath
+ ? ((TreePath)parentElementOrTreePath).getLastSegment() : parentElementOrTreePath;
+ if (parentElement == null) {
parentElement = fViewer.getInput();
}
- if (!((TreeModelViewerFilter)filters[j]).isApplicable(fViewer, parentElement)) {
- continue;
- }
- }
-
- if (!(filters[j].select((Viewer) fViewer, parentElementOrTreePath, element))) {
- return true;
- }
- }
- }
- return false;
- }
-
- @Override
+ if (!((TreeModelViewerFilter)filters[j]).isApplicable(fViewer, parentElement)) {
+ continue;
+ }
+ }
+
+ if (!(filters[j].select((Viewer) fViewer, parentElementOrTreePath, element))) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ @Override
public void unmapPath(TreePath path) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
- fTransform.clear(path);
- cancelSubtreeUpdates(path);
- }
-
-
- boolean addFilteredIndex(TreePath parentPath, int index, Object element) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
- return fTransform.addFilteredIndex(parentPath, index, element);
- }
-
- void removeElementFromFilters(TreePath parentPath, int index) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
- fTransform.removeElementFromFilters(parentPath, index);
- }
-
- boolean removeElementFromFilters(TreePath parentPath, Object element) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
- return fTransform.removeElementFromFilters(parentPath, element);
- }
-
- void setModelChildCount(TreePath parentPath, int childCount) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
- fTransform.setModelChildCount(parentPath, childCount);
- }
-
- boolean isFiltered(TreePath parentPath, int index) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
- return fTransform.isFiltered(parentPath, index);
- }
-
- int[] getFilteredChildren(TreePath parent) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
- return fTransform.getFilteredChildren(parent);
- }
-
- void clearFilteredChild(TreePath parent, int modelIndex) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
- fTransform.clear(parent, modelIndex);
- }
-
- void clearFilters(TreePath parent) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
- fTransform.clear(parent);
- }
-
- /**
- * Notification an update request has started
- *
- * @param update the update to notify about
- */
- void updateStarted(ViewerUpdateMonitor update) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ fTransform.clear(path);
+ cancelSubtreeUpdates(path);
+ }
+
+
+ boolean addFilteredIndex(TreePath parentPath, int index, Object element) {
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ return fTransform.addFilteredIndex(parentPath, index, element);
+ }
+
+ void removeElementFromFilters(TreePath parentPath, int index) {
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ fTransform.removeElementFromFilters(parentPath, index);
+ }
+
+ boolean removeElementFromFilters(TreePath parentPath, Object element) {
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ return fTransform.removeElementFromFilters(parentPath, element);
+ }
+
+ void setModelChildCount(TreePath parentPath, int childCount) {
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ fTransform.setModelChildCount(parentPath, childCount);
+ }
+
+ boolean isFiltered(TreePath parentPath, int index) {
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ return fTransform.isFiltered(parentPath, index);
+ }
+
+ int[] getFilteredChildren(TreePath parent) {
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ return fTransform.getFilteredChildren(parent);
+ }
+
+ void clearFilteredChild(TreePath parent, int modelIndex) {
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ fTransform.clear(parent, modelIndex);
+ }
+
+ void clearFilters(TreePath parent) {
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ fTransform.clear(parent);
+ }
+
+ /**
+ * Notification an update request has started
+ *
+ * @param update the update to notify about
+ */
+ void updateStarted(ViewerUpdateMonitor update) {
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
List<ViewerUpdateMonitor> requests = fRequestsInProgress.get(update.getSchedulingPath());
- if (requests == null) {
+ if (requests == null) {
requests = new ArrayList<>();
- fRequestsInProgress.put(update.getSchedulingPath(), requests);
- }
- requests.add(update);
- if (!fModelSequenceRunning) {
- fModelSequenceRunning = true;
- if (DebugUIPlugin.DEBUG_UPDATE_SEQUENCE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
- DebugUIPlugin.trace("MODEL SEQUENCE BEGINS"); //$NON-NLS-1$
- }
- notifyUpdate(UPDATE_SEQUENCE_BEGINS, null);
- }
- if (DebugUIPlugin.DEBUG_UPDATE_SEQUENCE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
- DebugUIPlugin.trace("\tBEGIN - " + update); //$NON-NLS-1$
- }
- notifyUpdate(UPDATE_BEGINS, update);
- }
-
- /**
- * Notification an update request has completed
- *
- * @param updates the updates to notify
- */
+ fRequestsInProgress.put(update.getSchedulingPath(), requests);
+ }
+ requests.add(update);
+ if (!fModelSequenceRunning) {
+ fModelSequenceRunning = true;
+ if (DebugUIPlugin.DEBUG_UPDATE_SEQUENCE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
+ DebugUIPlugin.trace("MODEL SEQUENCE BEGINS"); //$NON-NLS-1$
+ }
+ notifyUpdate(UPDATE_SEQUENCE_BEGINS, null);
+ }
+ if (DebugUIPlugin.DEBUG_UPDATE_SEQUENCE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
+ DebugUIPlugin.trace("\tBEGIN - " + update); //$NON-NLS-1$
+ }
+ notifyUpdate(UPDATE_BEGINS, update);
+ }
+
+ /**
+ * Notification an update request has completed
+ *
+ * @param updates the updates to notify
+ */
void updatesComplete(final List<ViewerUpdateMonitor> updates) {
- for (int i = 0; i < updates.size(); i++) {
- ViewerUpdateMonitor update = updates.get(i);
- notifyUpdate(UPDATE_COMPLETE, update);
- if (DebugUIPlugin.DEBUG_UPDATE_SEQUENCE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
- DebugUIPlugin.trace("\tEND - " + update); //$NON-NLS-1$
- }
- }
-
- // Wait a single cycle to allow viewer to queue requests triggered by completed updates.
+ for (int i = 0; i < updates.size(); i++) {
+ ViewerUpdateMonitor update = updates.get(i);
+ notifyUpdate(UPDATE_COMPLETE, update);
+ if (DebugUIPlugin.DEBUG_UPDATE_SEQUENCE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
+ DebugUIPlugin.trace("\tEND - " + update); //$NON-NLS-1$
+ }
+ }
+
+ // Wait a single cycle to allow viewer to queue requests triggered by completed updates.
getViewer().getDisplay().asyncExec(() -> {
if (isDisposed()) {
return;
@@ -811,355 +811,355 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
}
});
- }
-
- /**
- * @return Returns true if there are outstanding updates in the viewer.
- */
- boolean areRequestsPending() {
- return !fRequestsInProgress.isEmpty() || !fWaitingRequests.isEmpty();
- }
-
- /**
- * @return Returns the state tracker for the content provider.
- */
- ViewerStateTracker getStateTracker() {
- return fStateTracker;
- }
-
- /**
- * Notifies listeners about given update.
- * @param type Type of update to call listeners with.
- * @param update Update to notify about.
- */
- private void notifyUpdate(final int type, final IViewerUpdate update) {
- if (!fUpdateListeners.isEmpty()) {
+ }
+
+ /**
+ * @return Returns true if there are outstanding updates in the viewer.
+ */
+ boolean areRequestsPending() {
+ return !fRequestsInProgress.isEmpty() || !fWaitingRequests.isEmpty();
+ }
+
+ /**
+ * @return Returns the state tracker for the content provider.
+ */
+ ViewerStateTracker getStateTracker() {
+ return fStateTracker;
+ }
+
+ /**
+ * Notifies listeners about given update.
+ * @param type Type of update to call listeners with.
+ * @param update Update to notify about.
+ */
+ private void notifyUpdate(final int type, final IViewerUpdate update) {
+ if (!fUpdateListeners.isEmpty()) {
for (IViewerUpdateListener iViewerUpdateListener : fUpdateListeners) {
final IViewerUpdateListener listener = iViewerUpdateListener;
- SafeRunner.run(new ISafeRunnable() {
- @Override
+ SafeRunner.run(new ISafeRunnable() {
+ @Override
public void run() throws Exception {
- switch (type) {
- case UPDATE_SEQUENCE_BEGINS:
- listener.viewerUpdatesBegin();
- break;
- case UPDATE_SEQUENCE_COMPLETE:
- listener.viewerUpdatesComplete();
- break;
- case UPDATE_BEGINS:
- listener.updateStarted(update);
- break;
- case UPDATE_COMPLETE:
- listener.updateComplete(update);
- break;
+ switch (type) {
+ case UPDATE_SEQUENCE_BEGINS:
+ listener.viewerUpdatesBegin();
+ break;
+ case UPDATE_SEQUENCE_COMPLETE:
+ listener.viewerUpdatesComplete();
+ break;
+ case UPDATE_BEGINS:
+ listener.updateStarted(update);
+ break;
+ case UPDATE_COMPLETE:
+ listener.updateComplete(update);
+ break;
default:
break;
- }
- }
+ }
+ }
- @Override
+ @Override
public void handleException(Throwable exception) {
- DebugUIPlugin.log(exception);
- }
- });
- }
- }
- }
-
- /**
- * Cancels outstanding updates for the element at given path and its
- * children.
- * @param path Path of element.
- */
- private void cancelSubtreeUpdates(TreePath path) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ DebugUIPlugin.log(exception);
+ }
+ });
+ }
+ }
+ }
+
+ /**
+ * Cancels outstanding updates for the element at given path and its
+ * children.
+ * @param path Path of element.
+ */
+ private void cancelSubtreeUpdates(TreePath path) {
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
for (Entry<TreePath, List<ViewerUpdateMonitor>> entry : fRequestsInProgress.entrySet()) {
- TreePath entryPath = entry.getKey();
- if (entryPath.startsWith(path, null)) {
+ TreePath entryPath = entry.getKey();
+ if (entryPath.startsWith(path, null)) {
List<ViewerUpdateMonitor> requests = entry.getValue();
Iterator<ViewerUpdateMonitor> reqIter = requests.iterator();
- while (reqIter.hasNext()) {
- // Cancel update and remove from requests list. Removing from
- // fRequestsInProgress ensures that isRequestBlocked() won't be triggered
- // by a canceled update.
+ while (reqIter.hasNext()) {
+ // Cancel update and remove from requests list. Removing from
+ // fRequestsInProgress ensures that isRequestBlocked() won't be triggered
+ // by a canceled update.
reqIter.next().cancel();
- reqIter.remove();
- }
- }
- }
+ reqIter.remove();
+ }
+ }
+ }
List<TreePath> purge = new ArrayList<>();
for (TreePath entryPath : fWaitingRequests.keySet()) {
- if (entryPath.startsWith(path, null)) {
- purge.add(entryPath);
- }
- }
+ if (entryPath.startsWith(path, null)) {
+ purge.add(entryPath);
+ }
+ }
for (TreePath tp : purge) {
fWaitingRequests.remove(tp);
- }
+ }
- fStateTracker.cancelStateSubtreeUpdates(path);
- }
+ fStateTracker.cancelStateSubtreeUpdates(path);
+ }
- /**
- * Returns whether this given request should be run, or should wait for
- * parent update to complete.
- *
- * @param update the update the schedule
- */
- private void schedule(final ViewerUpdateMonitor update) {
- Assert.isTrue(getViewer().getDisplay().getThread() == Thread.currentThread());
+ /**
+ * Returns whether this given request should be run, or should wait for
+ * parent update to complete.
+ *
+ * @param update the update the schedule
+ */
+ private void schedule(final ViewerUpdateMonitor update) {
+ Assert.isTrue(getViewer().getDisplay().getThread() == Thread.currentThread());
- TreePath schedulingPath = update.getSchedulingPath();
+ TreePath schedulingPath = update.getSchedulingPath();
List<ViewerUpdateMonitor> requests = fWaitingRequests.get(schedulingPath);
- if (requests == null) {
+ if (requests == null) {
requests = new LinkedList<>();
- requests.add(update);
- fWaitingRequests.put(schedulingPath, requests);
+ requests.add(update);
+ fWaitingRequests.put(schedulingPath, requests);
List<ViewerUpdateMonitor> inProgressList = fRequestsInProgress.get(schedulingPath);
- if (inProgressList != null) {
- int staleUpdateIndex = inProgressList.indexOf(update);
- if (staleUpdateIndex >= 0) {
- // Cancel update and remove from requests list. Removing from
- // fRequestsInProgress ensures that isRequestBlocked() won't be triggered
- // by a canceled update.
- ViewerUpdateMonitor staleUpdate = inProgressList.remove(staleUpdateIndex);
- staleUpdate.cancel();
- // Note: Do not reset the inProgressList to null. This would cause the
- // updateStarted() method to think that a new update sequence is
- // being started. Since there are waiting requests for this scheduling
- // path, the list will be cleaned up later.
- }
- }
- if (inProgressList == null || inProgressList.isEmpty()) {
+ if (inProgressList != null) {
+ int staleUpdateIndex = inProgressList.indexOf(update);
+ if (staleUpdateIndex >= 0) {
+ // Cancel update and remove from requests list. Removing from
+ // fRequestsInProgress ensures that isRequestBlocked() won't be triggered
+ // by a canceled update.
+ ViewerUpdateMonitor staleUpdate = inProgressList.remove(staleUpdateIndex);
+ staleUpdate.cancel();
+ // Note: Do not reset the inProgressList to null. This would cause the
+ // updateStarted() method to think that a new update sequence is
+ // being started. Since there are waiting requests for this scheduling
+ // path, the list will be cleaned up later.
+ }
+ }
+ if (inProgressList == null || inProgressList.isEmpty()) {
getViewer().getDisplay().asyncExec(() -> {
if (isDisposed()) {
return;
}
trigger(update.getSchedulingPath());
});
- }
- } else {
- // there are waiting requests: coalesce with existing request and add to list
- requests.add(coalesce(requests, update));
- }
- }
-
- /**
- * Tries to coalesce the given request with any request in the list. If a match is found,
- * the resulting request is then coalesced again with candidates in list.
- * @param requests List of waiting requests to coalesce with
- * @param toCoalesce request to coalesce
- * @return Returns either the coalesced request. If no match was found it returns the
- * toCoalesce parameter request. Either way the returned request needs to be added to the
- * waiting requests list.
- */
+ }
+ } else {
+ // there are waiting requests: coalesce with existing request and add to list
+ requests.add(coalesce(requests, update));
+ }
+ }
+
+ /**
+ * Tries to coalesce the given request with any request in the list. If a match is found,
+ * the resulting request is then coalesced again with candidates in list.
+ * @param requests List of waiting requests to coalesce with
+ * @param toCoalesce request to coalesce
+ * @return Returns either the coalesced request. If no match was found it returns the
+ * toCoalesce parameter request. Either way the returned request needs to be added to the
+ * waiting requests list.
+ */
private ViewerUpdateMonitor coalesce(List<ViewerUpdateMonitor> requests, ViewerUpdateMonitor toCoalesce) {
for (ViewerUpdateMonitor waiting : requests) {
- if (waiting.coalesce(toCoalesce)) {
- requests.remove(waiting);
- // coalesced with existing request, done
- // try to coalesce the combined requests with other waiting requests
- return coalesce(requests, waiting);
- }
- }
- return toCoalesce;
- }
-
- /**
- * Returns whether there are outstanding ChildrenUpdate updates for the given path.
- * This method is expected to be called during processing of a ChildrenRequest,
- * therefore one running children request is ignored.
- * @param path Path of element to check.
- * @return True if there are outstanding children updates for given element.
- */
- boolean areChildrenUpdatesPending(TreePath path) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ if (waiting.coalesce(toCoalesce)) {
+ requests.remove(waiting);
+ // coalesced with existing request, done
+ // try to coalesce the combined requests with other waiting requests
+ return coalesce(requests, waiting);
+ }
+ }
+ return toCoalesce;
+ }
+
+ /**
+ * Returns whether there are outstanding ChildrenUpdate updates for the given path.
+ * This method is expected to be called during processing of a ChildrenRequest,
+ * therefore one running children request is ignored.
+ * @param path Path of element to check.
+ * @return True if there are outstanding children updates for given element.
+ */
+ boolean areChildrenUpdatesPending(TreePath path) {
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
List<ViewerUpdateMonitor> requests = fWaitingRequests.get(path);
- if (requests != null) {
- for (int i = 0; i < requests.size(); i++) {
- if (requests.get(i) instanceof ChildrenUpdate) {
- return true;
- }
- }
- }
- requests = fRequestsInProgress.get(path);
- if (requests != null) {
- int numChildrenUpdateRequests = 0;
- for (int i = 0; i < requests.size(); i++) {
- if (requests.get(i) instanceof ChildrenUpdate) {
- if (++numChildrenUpdateRequests > 1) {
- return true;
- }
- }
- }
- }
- return false;
- }
-
- /**
- * Triggers waiting requests based on the given request that just
- * completed.
- * <p>
- * Requests are processed in order such that updates to
- * children are delayed until updates for parent elements are completed.
- * This allows the expansion/selection state of the elements to be
- * properly restored as new elements are retrieved from model.
- * </p>
- * @param schedulingPath schedulingPath path or requests to start processing. May
- * be <code>null</code> to start the shortest path request.
- */
- private void trigger(TreePath schedulingPath) {
- Assert.isTrue(getViewer().getDisplay().getThread() == Thread.currentThread());
-
- if (fWaitingRequests.isEmpty()) {
- return;
- }
+ if (requests != null) {
+ for (int i = 0; i < requests.size(); i++) {
+ if (requests.get(i) instanceof ChildrenUpdate) {
+ return true;
+ }
+ }
+ }
+ requests = fRequestsInProgress.get(path);
+ if (requests != null) {
+ int numChildrenUpdateRequests = 0;
+ for (int i = 0; i < requests.size(); i++) {
+ if (requests.get(i) instanceof ChildrenUpdate) {
+ if (++numChildrenUpdateRequests > 1) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Triggers waiting requests based on the given request that just
+ * completed.
+ * <p>
+ * Requests are processed in order such that updates to
+ * children are delayed until updates for parent elements are completed.
+ * This allows the expansion/selection state of the elements to be
+ * properly restored as new elements are retrieved from model.
+ * </p>
+ * @param schedulingPath schedulingPath path or requests to start processing. May
+ * be <code>null</code> to start the shortest path request.
+ */
+ private void trigger(TreePath schedulingPath) {
+ Assert.isTrue(getViewer().getDisplay().getThread() == Thread.currentThread());
+
+ if (fWaitingRequests.isEmpty()) {
+ return;
+ }
List<ViewerUpdateMonitor> waiting = fWaitingRequests.get(schedulingPath);
- if (waiting == null) {
- // no waiting, update the entry with the shortest path
- int length = Integer.MAX_VALUE;
+ if (waiting == null) {
+ // no waiting, update the entry with the shortest path
+ int length = Integer.MAX_VALUE;
Entry<TreePath, List<ViewerUpdateMonitor>> candidate = null;
for (Entry<TreePath, List<ViewerUpdateMonitor>> entry : fWaitingRequests.entrySet()) {
- TreePath key = entry.getKey();
- if (key.getSegmentCount() < length && !isRequestBlocked(key)) {
- candidate = entry;
- length = key.getSegmentCount();
- }
- }
- if (candidate != null) {
- startHighestPriorityRequest(candidate.getKey(), candidate.getValue());
- }
- } else if (!isRequestBlocked(schedulingPath)) {
- // start the highest priority request
- startHighestPriorityRequest(schedulingPath, waiting);
- }
- }
-
- /**
- * Returns true if there are running requests for any parent element of
- * the given tree path.
- * @param requestPath Path of element to check.
- * @return Returns true if requests are running.
- */
- private boolean isRequestBlocked(TreePath requestPath) {
- TreePath parentPath = requestPath;
+ TreePath key = entry.getKey();
+ if (key.getSegmentCount() < length && !isRequestBlocked(key)) {
+ candidate = entry;
+ length = key.getSegmentCount();
+ }
+ }
+ if (candidate != null) {
+ startHighestPriorityRequest(candidate.getKey(), candidate.getValue());
+ }
+ } else if (!isRequestBlocked(schedulingPath)) {
+ // start the highest priority request
+ startHighestPriorityRequest(schedulingPath, waiting);
+ }
+ }
+
+ /**
+ * Returns true if there are running requests for any parent element of
+ * the given tree path.
+ * @param requestPath Path of element to check.
+ * @return Returns true if requests are running.
+ */
+ private boolean isRequestBlocked(TreePath requestPath) {
+ TreePath parentPath = requestPath;
List<ViewerUpdateMonitor> parentRequests = fRequestsInProgress.get(parentPath);
- while (parentRequests == null || parentRequests.isEmpty()) {
- parentPath = parentPath.getParentPath();
- if (parentPath == null) {
- // no running requests: start request
- return false;
- }
- parentRequests = fRequestsInProgress.get(parentPath);
- }
- return true;
- }
-
- /**
- * @param key the {@link TreePath}
- * @param waiting the list of waiting requests
- */
+ while (parentRequests == null || parentRequests.isEmpty()) {
+ parentPath = parentPath.getParentPath();
+ if (parentPath == null) {
+ // no running requests: start request
+ return false;
+ }
+ parentRequests = fRequestsInProgress.get(parentPath);
+ }
+ return true;
+ }
+
+ /**
+ * @param key the {@link TreePath}
+ * @param waiting the list of waiting requests
+ */
private void startHighestPriorityRequest(TreePath key, List<ViewerUpdateMonitor> waiting) {
- int priority = 4;
- ViewerUpdateMonitor next = null;
+ int priority = 4;
+ ViewerUpdateMonitor next = null;
for (ViewerUpdateMonitor vu : waiting) {
- if (vu.getPriority() < priority) {
- next = vu;
- priority = next.getPriority();
- }
- }
- if (next != null) {
- waiting.remove(next);
- if (waiting.isEmpty()) {
- fWaitingRequests.remove(key);
- }
- next.start();
- }
- }
-
- /**
- * Returns the element corresponding to the given tree path.
- *
- * @param path
- * tree path
- * @return model element
- */
- protected Object getElement(TreePath path) {
- if (path.getSegmentCount() > 0) {
- return path.getLastSegment();
- }
- return getViewer().getInput();
- }
-
- /**
- * Reschedule any children updates in progress for the given parent that
- * have a start index greater than the given index. An element has been
- * removed at this index, invalidating updates in progress.
- *
- * @param parentPath
- * view tree path to parent element
- * @param modelIndex
- * index at which an element was removed
- */
- private void rescheduleUpdates(TreePath parentPath, int modelIndex) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ if (vu.getPriority() < priority) {
+ next = vu;
+ priority = next.getPriority();
+ }
+ }
+ if (next != null) {
+ waiting.remove(next);
+ if (waiting.isEmpty()) {
+ fWaitingRequests.remove(key);
+ }
+ next.start();
+ }
+ }
+
+ /**
+ * Returns the element corresponding to the given tree path.
+ *
+ * @param path
+ * tree path
+ * @return model element
+ */
+ protected Object getElement(TreePath path) {
+ if (path.getSegmentCount() > 0) {
+ return path.getLastSegment();
+ }
+ return getViewer().getInput();
+ }
+
+ /**
+ * Reschedule any children updates in progress for the given parent that
+ * have a start index greater than the given index. An element has been
+ * removed at this index, invalidating updates in progress.
+ *
+ * @param parentPath
+ * view tree path to parent element
+ * @param modelIndex
+ * index at which an element was removed
+ */
+ private void rescheduleUpdates(TreePath parentPath, int modelIndex) {
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
List<ViewerUpdateMonitor> requests = fRequestsInProgress.get(parentPath);
List<IChildrenUpdate> reCreate = null;
- if (requests != null) {
+ if (requests != null) {
Iterator<ViewerUpdateMonitor> iterator = requests.iterator();
- while (iterator.hasNext()) {
+ while (iterator.hasNext()) {
ViewerUpdateMonitor update = iterator.next();
- if (update instanceof IChildrenUpdate) {
- IChildrenUpdate childrenUpdate = (IChildrenUpdate) update;
- if (childrenUpdate.getOffset() > modelIndex) {
- // Cancel update and remove from requests list. Removing from
- // fRequestsInProgress ensures that isRequestBlocked() won't be triggered
- // by a canceled update.
- childrenUpdate.cancel();
- iterator.remove();
- if (reCreate == null) {
+ if (update instanceof IChildrenUpdate) {
+ IChildrenUpdate childrenUpdate = (IChildrenUpdate) update;
+ if (childrenUpdate.getOffset() > modelIndex) {
+ // Cancel update and remove from requests list. Removing from
+ // fRequestsInProgress ensures that isRequestBlocked() won't be triggered
+ // by a canceled update.
+ childrenUpdate.cancel();
+ iterator.remove();
+ if (reCreate == null) {
reCreate = new ArrayList<>();
- }
- reCreate.add(childrenUpdate);
- if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
- DebugUIPlugin.trace("canceled update in progress handling REMOVE: " + childrenUpdate); //$NON-NLS-1$
- }
- }
- }
- }
- }
- requests = fWaitingRequests.get(parentPath);
- if (requests != null) {
+ }
+ reCreate.add(childrenUpdate);
+ if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
+ DebugUIPlugin.trace("canceled update in progress handling REMOVE: " + childrenUpdate); //$NON-NLS-1$
+ }
+ }
+ }
+ }
+ }
+ requests = fWaitingRequests.get(parentPath);
+ if (requests != null) {
for (ViewerUpdateMonitor update : requests) {
- if (update instanceof IChildrenUpdate) {
- IChildrenUpdate childrenUpdate = (IChildrenUpdate) update;
- if (childrenUpdate.getOffset() > modelIndex) {
- ((ChildrenUpdate) childrenUpdate).setOffset(childrenUpdate.getOffset() - 1);
- if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
- DebugUIPlugin.trace("modified waiting update handling REMOVE: " + childrenUpdate); //$NON-NLS-1$
- }
- }
- }
- }
- }
- // re-schedule canceled updates at new position.
- // have to do this last else the requests would be waiting and
- // get modified.
- if (reCreate != null) {
+ if (update instanceof IChildrenUpdate) {
+ IChildrenUpdate childrenUpdate = (IChildrenUpdate) update;
+ if (childrenUpdate.getOffset() > modelIndex) {
+ ((ChildrenUpdate) childrenUpdate).setOffset(childrenUpdate.getOffset() - 1);
+ if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
+ DebugUIPlugin.trace("modified waiting update handling REMOVE: " + childrenUpdate); //$NON-NLS-1$
+ }
+ }
+ }
+ }
+ }
+ // re-schedule canceled updates at new position.
+ // have to do this last else the requests would be waiting and
+ // get modified.
+ if (reCreate != null) {
for (IChildrenUpdate childrenUpdate : reCreate) {
- int start = childrenUpdate.getOffset() - 1;
- int end = start + childrenUpdate.getLength();
- for (int i = start; i < end; i++) {
- doUpdateElement(parentPath, i);
- }
- }
- }
- }
+ int start = childrenUpdate.getOffset() - 1;
+ int end = start + childrenUpdate.getLength();
+ for (int i = start; i < end; i++) {
+ doUpdateElement(parentPath, i);
+ }
+ }
+ }
+ }
private void doUpdateChildCount(TreePath path) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
Object element = getElement(path);
IElementContentProvider contentAdapter = ViewerAdapterService.getContentProvider(element);
@@ -1170,7 +1170,7 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
}
void doUpdateElement(TreePath parentPath, int modelIndex) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
Object parent = getElement(parentPath);
IElementContentProvider contentAdapter = ViewerAdapterService.getContentProvider(parent);
@@ -1181,7 +1181,7 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
}
private void doUpdateHasChildren(TreePath path) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
Object element = getElement(path);
IElementContentProvider contentAdapter = ViewerAdapterService.getContentProvider(element);
@@ -1197,73 +1197,73 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
* @param path Path of element to check.
* @return Returns true if there are outstanding updates.
*/
- boolean areElementUpdatesPending(TreePath path) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ boolean areElementUpdatesPending(TreePath path) {
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
- TreePath parentPath = path.getParentPath();
+ TreePath parentPath = path.getParentPath();
List<ViewerUpdateMonitor> requests = fWaitingRequests.get(path);
- if (requests != null) {
- for (int i = 0; i < requests.size(); i++) {
- ViewerUpdateMonitor update = requests.get(i);
- if (update instanceof ChildrenUpdate) {
- return true;
- }
- }
- }
- requests = fWaitingRequests.get(parentPath);
- if (requests != null) {
- for (int i = 0; i < requests.size(); i++) {
- ViewerUpdateMonitor update = requests.get(i);
- if (update.containsUpdate(path)) {
- return true;
- }
- }
- }
- requests = fRequestsInProgress.get(path);
- if (requests != null) {
- for (int i = 0; i < requests.size(); i++) {
- ViewerUpdateMonitor update = requests.get(i);
- if (update instanceof ChildrenUpdate) {
- return true;
- }
- }
- }
- requests = fRequestsInProgress.get(parentPath);
- if (requests != null) {
- for (int i = 0; i < requests.size(); i++) {
- ViewerUpdateMonitor update = requests.get(i);
- if (update.getElement().equals(path.getLastSegment())) {
- return true;
- }
- }
- }
- return false;
- }
-
- /**
- * Returns the presentation context for this content provider.
- *
- * @return presentation context
- */
+ if (requests != null) {
+ for (int i = 0; i < requests.size(); i++) {
+ ViewerUpdateMonitor update = requests.get(i);
+ if (update instanceof ChildrenUpdate) {
+ return true;
+ }
+ }
+ }
+ requests = fWaitingRequests.get(parentPath);
+ if (requests != null) {
+ for (int i = 0; i < requests.size(); i++) {
+ ViewerUpdateMonitor update = requests.get(i);
+ if (update.containsUpdate(path)) {
+ return true;
+ }
+ }
+ }
+ requests = fRequestsInProgress.get(path);
+ if (requests != null) {
+ for (int i = 0; i < requests.size(); i++) {
+ ViewerUpdateMonitor update = requests.get(i);
+ if (update instanceof ChildrenUpdate) {
+ return true;
+ }
+ }
+ }
+ requests = fRequestsInProgress.get(parentPath);
+ if (requests != null) {
+ for (int i = 0; i < requests.size(); i++) {
+ ViewerUpdateMonitor update = requests.get(i);
+ if (update.getElement().equals(path.getLastSegment())) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns the presentation context for this content provider.
+ *
+ * @return presentation context
+ */
protected IPresentationContext getPresentationContext() {
- ITreeModelViewer viewer = getViewer();
- if (viewer != null) {
- return viewer.getPresentationContext();
- }
- return null;
- }
-
- /**
- * Updates the viewer with the following deltas.
- *
- * @param nodes Model deltas to be processed.
- * @param mask the model delta mask
- * @see IModelDelta for a list of masks
- */
- protected void updateNodes(IModelDelta[] nodes, int mask) {
- for (int i = 0; i < nodes.length; i++) {
- IModelDelta node = nodes[i];
- int flags = node.getFlags() & mask;
+ ITreeModelViewer viewer = getViewer();
+ if (viewer != null) {
+ return viewer.getPresentationContext();
+ }
+ return null;
+ }
+
+ /**
+ * Updates the viewer with the following deltas.
+ *
+ * @param nodes Model deltas to be processed.
+ * @param mask the model delta mask
+ * @see IModelDelta for a list of masks
+ */
+ protected void updateNodes(IModelDelta[] nodes, int mask) {
+ for (int i = 0; i < nodes.length; i++) {
+ IModelDelta node = nodes[i];
+ int flags = node.getFlags() & mask;
if (flags != 0) {
if ((flags & IModelDelta.ADDED) != 0) {
handleAdd(node);
@@ -1301,36 +1301,36 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
if ((flags & IModelDelta.REVEAL) != 0) {
handleReveal(node);
}
- }
- updateNodes(node.getChildDeltas(), mask);
- }
- }
+ }
+ updateNodes(node.getChildDeltas(), mask);
+ }
+ }
- protected void handleInstall(IModelDelta delta) {
- installModelProxy(getViewer().getInput(), getFullTreePath(delta));
- }
+ protected void handleInstall(IModelDelta delta) {
+ installModelProxy(getViewer().getInput(), getFullTreePath(delta));
+ }
- protected void handleUninstall(IModelDelta delta) {
- disposeModelProxy(getFullTreePath(delta));
- }
+ protected void handleUninstall(IModelDelta delta) {
+ disposeModelProxy(getFullTreePath(delta));
+ }
- protected void handleAdd(IModelDelta delta) {
+ protected void handleAdd(IModelDelta delta) {
IModelDelta parentDelta = delta.getParentDelta();
if (parentDelta == null) {
- DebugUIPlugin.log(new Status(IStatus.ERROR, DebugUIPlugin.getUniqueIdentifier(), "Invalid viewer update: " + delta + ", in " + getPresentationContext().getId(), null )); //$NON-NLS-1$ //$NON-NLS-2$
- return;
+ DebugUIPlugin.log(new Status(IStatus.ERROR, DebugUIPlugin.getUniqueIdentifier(), "Invalid viewer update: " + delta + ", in " + getPresentationContext().getId(), null )); //$NON-NLS-1$ //$NON-NLS-2$
+ return;
}
TreePath parentPath = getViewerTreePath(parentDelta);
Object element = delta.getElement();
int count = parentDelta.getChildCount();
if (count > 0) {
- setModelChildCount(parentPath, count);
- int modelIndex = count - 1;
- if (delta.getIndex() != -1) {
- // assume addition at end, unless index specified by delta
- modelIndex = delta.getIndex();
- }
+ setModelChildCount(parentPath, count);
+ int modelIndex = count - 1;
+ if (delta.getIndex() != -1) {
+ // assume addition at end, unless index specified by delta
+ modelIndex = delta.getIndex();
+ }
if (shouldFilter(parentPath, element)) {
addFilteredIndex(parentPath, modelIndex, element);
if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
@@ -1341,7 +1341,7 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
if (isFiltered(parentPath, modelIndex)) {
clearFilteredChild(parentPath, modelIndex);
}
- int viewIndex = modelToViewIndex(parentPath, modelIndex);
+ int viewIndex = modelToViewIndex(parentPath, modelIndex);
int viewCount = modelToViewChildCount(parentPath, count);
if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
DebugUIPlugin.trace("handleAdd(" + delta.getElement() + ") viewIndex: " + viewIndex + " modelIndex: " + modelIndex + " viewCount: " + viewCount + " modelCount: " + count); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
@@ -1357,11 +1357,11 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
DebugUIPlugin.trace("handleAdd(" + delta.getElement() + ")"); //$NON-NLS-1$ //$NON-NLS-2$
}
- doUpdateChildCount(getViewerTreePath(delta.getParentDelta()));
+ doUpdateChildCount(getViewerTreePath(delta.getParentDelta()));
}
}
- protected void handleContent(IModelDelta delta) {
+ protected void handleContent(IModelDelta delta) {
if (delta.getParentDelta() == null && delta.getChildCount() == 0) {
// if the delta is for the root, ensure the root still matches viewer input
if (!delta.getElement().equals(getViewer().getInput())) {
@@ -1373,13 +1373,13 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
getViewer().refresh(getElement(treePath));
}
- protected void handleCollapse(IModelDelta delta) {
+ protected void handleCollapse(IModelDelta delta) {
TreePath elementPath = getViewerTreePath(delta);
getViewer().setExpandedState(elementPath, false);
- cancelRestore(elementPath, IModelDelta.EXPAND);
+ cancelRestore(elementPath, IModelDelta.EXPAND);
}
- protected void handleExpand(IModelDelta delta) {
+ protected void handleExpand(IModelDelta delta) {
// expand each parent, then this node
IModelDelta parentDelta = delta.getParentDelta();
if (parentDelta != null) {
@@ -1388,22 +1388,22 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
}
expand(delta);
} else {
- int childCount = delta.getChildCount();
- TreePath elementPath = getViewerTreePath(delta);
- if (childCount > 0) {
- int viewCount = modelToViewChildCount(elementPath, childCount);
- if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
- DebugUIPlugin.trace("[expand] setChildCount(" + delta.getElement() + ", (model) " + childCount + " (view) " + viewCount); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
- getViewer().setChildCount(elementPath, viewCount);
- }
- }
- }
-
- /**
- * Expands the element pointed to by given delta.
- * @param delta Delta that points to the element to expand.
- */
+ int childCount = delta.getChildCount();
+ TreePath elementPath = getViewerTreePath(delta);
+ if (childCount > 0) {
+ int viewCount = modelToViewChildCount(elementPath, childCount);
+ if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
+ DebugUIPlugin.trace("[expand] setChildCount(" + delta.getElement() + ", (model) " + childCount + " (view) " + viewCount); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ getViewer().setChildCount(elementPath, viewCount);
+ }
+ }
+ }
+
+ /**
+ * Expands the element pointed to by given delta.
+ * @param delta Delta that points to the element to expand.
+ */
private void expand(IModelDelta delta) {
int childCount = delta.getChildCount();
int modelIndex = delta.getIndex();
@@ -1435,9 +1435,9 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
DebugUIPlugin.trace("[expand] setChildCount(" + delta.getElement() + ", (model) " + childCount + " (view) " + viewCount); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
treeViewer.setChildCount(elementPath, viewCount);
- if (!treeViewer.getExpandedState(elementPath)) {
- treeViewer.expandToLevel(elementPath, 1);
- }
+ if (!treeViewer.getExpandedState(elementPath)) {
+ treeViewer.expandToLevel(elementPath, 1);
+ }
cancelRestore(elementPath, IModelDelta.COLLAPSE);
}
}
@@ -1451,7 +1451,7 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
* @param element element to insert
* @param modelIndex index of the element in the model
* @return Returns the view index of the newly inserted element
- * or -1 if not inserted.
+ * or -1 if not inserted.
*/
private int unfilterElement(TreePath parentPath, Object element, int modelIndex) {
// Element is filtered - if no longer filtered, insert the element
@@ -1478,11 +1478,11 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
}
protected void handleInsert(IModelDelta delta) {
- IModelDelta parentDelta = delta.getParentDelta();
- if (parentDelta == null) {
- DebugUIPlugin.log(new Status(IStatus.ERROR, DebugUIPlugin.getUniqueIdentifier(), "Invalid viewer update: " + delta + ", in " + getPresentationContext().getId(), null )); //$NON-NLS-1$ //$NON-NLS-2$
- return;
- }
+ IModelDelta parentDelta = delta.getParentDelta();
+ if (parentDelta == null) {
+ DebugUIPlugin.log(new Status(IStatus.ERROR, DebugUIPlugin.getUniqueIdentifier(), "Invalid viewer update: " + delta + ", in " + getPresentationContext().getId(), null )); //$NON-NLS-1$ //$NON-NLS-2$
+ return;
+ }
TreePath parentPath = getViewerTreePath(delta.getParentDelta());
Object element = delta.getElement();
@@ -1505,7 +1505,7 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
DebugUIPlugin.trace("handleInsert(" + delta.getElement() + ")"); //$NON-NLS-1$ //$NON-NLS-2$
}
- doUpdateChildCount(getViewerTreePath(delta.getParentDelta()));
+ doUpdateChildCount(getViewerTreePath(delta.getParentDelta()));
}
}
@@ -1515,8 +1515,8 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
}
IModelDelta parentDelta = delta.getParentDelta();
if (parentDelta == null) {
- DebugUIPlugin.log(new Status(IStatus.ERROR, DebugUIPlugin.getUniqueIdentifier(), "Invalid viewer update: " + delta + ", in " + getPresentationContext().getId(), null )); //$NON-NLS-1$ //$NON-NLS-2$
- return;
+ DebugUIPlugin.log(new Status(IStatus.ERROR, DebugUIPlugin.getUniqueIdentifier(), "Invalid viewer update: " + delta + ", in " + getPresentationContext().getId(), null )); //$NON-NLS-1$ //$NON-NLS-2$
+ return;
}
IInternalTreeModelViewer treeViewer = getViewer();
TreePath parentPath = getViewerTreePath(parentDelta);
@@ -1530,16 +1530,16 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
int unmappedIndex = -1;
int itemCount = -1;
if (modelIndex < 0) {
- itemCount = treeViewer.getChildCount(parentPath);
- if (itemCount == -1) {
- clearFilters(parentPath);
- }
- viewIndex = treeViewer.findElementIndex(parentPath, element);
- if (viewIndex >= 0) {
- modelIndex = viewToModelIndex(parentPath, viewIndex);
- } else {
- unmappedIndex = treeViewer.findElementIndex(parentPath, null);
- }
+ itemCount = treeViewer.getChildCount(parentPath);
+ if (itemCount == -1) {
+ clearFilters(parentPath);
+ }
+ viewIndex = treeViewer.findElementIndex(parentPath, element);
+ if (viewIndex >= 0) {
+ modelIndex = viewToModelIndex(parentPath, viewIndex);
+ } else {
+ unmappedIndex = treeViewer.findElementIndex(parentPath, null);
+ }
} else {
viewIndex = modelToViewIndex(parentPath, modelIndex);
}
@@ -1583,41 +1583,41 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
}
protected void handleReplace(IModelDelta delta) {
- IModelDelta parentDelta = delta.getParentDelta();
- if (parentDelta == null) {
- DebugUIPlugin.log(new Status(IStatus.ERROR, DebugUIPlugin.getUniqueIdentifier(), "Invalid viewer update: " + delta + ", in " + getPresentationContext().getId(), null )); //$NON-NLS-1$ //$NON-NLS-2$
- return;
- }
+ IModelDelta parentDelta = delta.getParentDelta();
+ if (parentDelta == null) {
+ DebugUIPlugin.log(new Status(IStatus.ERROR, DebugUIPlugin.getUniqueIdentifier(), "Invalid viewer update: " + delta + ", in " + getPresentationContext().getId(), null )); //$NON-NLS-1$ //$NON-NLS-2$
+ return;
+ }
TreePath parentPath = getViewerTreePath(parentDelta);
int index = delta.getIndex();
if (index < 0) {
- index = fTransform.indexOfFilteredElement(parentPath, delta.getElement());
+ index = fTransform.indexOfFilteredElement(parentPath, delta.getElement());
}
if (index >= 0) {
- boolean filtered = isFiltered(parentPath, index);
- boolean shouldFilter = shouldFilter(parentPath, delta.getReplacementElement());
-
- // Update the filter transform
- if (filtered) {
- clearFilteredChild(parentPath, index);
- }
- if (shouldFilter) {
- addFilteredIndex(parentPath, index, delta.getElement());
- }
-
- // Update the viewer
- if (filtered) {
- if (!shouldFilter) {
- getViewer().insert(parentPath, delta.getReplacementElement(), modelToViewIndex(parentPath, index));
- }
- //else do nothing
- } else {
- if (shouldFilter) {
- getViewer().remove(parentPath, modelToViewIndex(parentPath, index));
- } else {
- getViewer().replace(parentPath, delta.getIndex(), delta.getReplacementElement());
- }
- }
+ boolean filtered = isFiltered(parentPath, index);
+ boolean shouldFilter = shouldFilter(parentPath, delta.getReplacementElement());
+
+ // Update the filter transform
+ if (filtered) {
+ clearFilteredChild(parentPath, index);
+ }
+ if (shouldFilter) {
+ addFilteredIndex(parentPath, index, delta.getElement());
+ }
+
+ // Update the viewer
+ if (filtered) {
+ if (!shouldFilter) {
+ getViewer().insert(parentPath, delta.getReplacementElement(), modelToViewIndex(parentPath, index));
+ }
+ //else do nothing
+ } else {
+ if (shouldFilter) {
+ getViewer().remove(parentPath, modelToViewIndex(parentPath, index));
+ } else {
+ getViewer().replace(parentPath, delta.getIndex(), delta.getReplacementElement());
+ }
+ }
}
}
@@ -1627,18 +1627,18 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
// check if selection is allowed
IStructuredSelection candidate = new TreeSelection(getViewerTreePath(delta));
if ((delta.getFlags() & IModelDelta.FORCE) == 0 &&
- !treeViewer.overrideSelection(treeViewer.getSelection(), candidate))
+ !treeViewer.overrideSelection(treeViewer.getSelection(), candidate))
{
return;
}
// empty the selection before replacing elements to avoid materializing elements (@see bug 305739)
treeViewer.clearSelectionQuiet();
if (modelIndex >= 0) {
- IModelDelta parentDelta = delta.getParentDelta();
- if (parentDelta == null) {
- DebugUIPlugin.log(new Status(IStatus.ERROR, DebugUIPlugin.getUniqueIdentifier(), "Invalid viewer update: " + delta + ", in " + getPresentationContext().getId(), null )); //$NON-NLS-1$ //$NON-NLS-2$
- return;
- }
+ IModelDelta parentDelta = delta.getParentDelta();
+ if (parentDelta == null) {
+ DebugUIPlugin.log(new Status(IStatus.ERROR, DebugUIPlugin.getUniqueIdentifier(), "Invalid viewer update: " + delta + ", in " + getPresentationContext().getId(), null )); //$NON-NLS-1$ //$NON-NLS-2$
+ return;
+ }
TreePath parentPath = getViewerTreePath(parentDelta);
int viewIndex = modelToViewIndex(parentPath, modelIndex);
if (viewIndex >= 0) {
@@ -1659,7 +1659,7 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
}
TreePath selectionPath = getViewerTreePath(delta);
if (treeViewer.trySelection(new TreeSelection(selectionPath), false, (delta.getFlags() | IModelDelta.FORCE) == 0)) {
- cancelRestore(selectionPath, IModelDelta.SELECT);
+ cancelRestore(selectionPath, IModelDelta.SELECT);
}
}
@@ -1669,13 +1669,13 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
protected void handleReveal(IModelDelta delta) {
IModelDelta parentDelta = delta.getParentDelta();
- if (parentDelta == null) {
- DebugUIPlugin.log(new Status(IStatus.ERROR, DebugUIPlugin.getUniqueIdentifier(), "Invalid viewer update: " + delta + ", in " + getPresentationContext().getId(), null )); //$NON-NLS-1$ //$NON-NLS-2$
- return;
- }
- handleExpand(parentDelta);
- reveal(delta);
- cancelRestore(getViewerTreePath(delta), IModelDelta.REVEAL);
+ if (parentDelta == null) {
+ DebugUIPlugin.log(new Status(IStatus.ERROR, DebugUIPlugin.getUniqueIdentifier(), "Invalid viewer update: " + delta + ", in " + getPresentationContext().getId(), null )); //$NON-NLS-1$ //$NON-NLS-2$
+ return;
+ }
+ handleExpand(parentDelta);
+ reveal(delta);
+ cancelRestore(getViewerTreePath(delta), IModelDelta.REVEAL);
}
/**
@@ -1708,7 +1708,7 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
// only move tree based on force flag and selection policy
if ((delta.getFlags() & IModelDelta.FORCE) != 0 ||
- treeViewer.overrideSelection(treeViewer.getSelection(), new TreeSelection(elementPath)))
+ treeViewer.overrideSelection(treeViewer.getSelection(), new TreeSelection(elementPath)))
{
/*
* Bug 438724 - Save reveal parameters and redo reveal on
@@ -1717,7 +1717,7 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
*/
fRevealPath = parentPath;
fRevealIndex = viewIndex;
- treeViewer.reveal(parentPath, viewIndex);
+ treeViewer.reveal(parentPath, viewIndex);
}
}
}
@@ -1729,7 +1729,7 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
@Override
public void updateChildCount(TreePath treePath, int currentChildCount) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
DebugUIPlugin.trace("updateChildCount(" + getElement(treePath) + ", " + currentChildCount + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
@@ -1739,7 +1739,7 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
@Override
public void updateElement(TreePath parentPath, int viewIndex) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
int modelIndex = viewToModelIndex(parentPath, viewIndex);
if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
@@ -1750,7 +1750,7 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
@Override
public void updateHasChildren(TreePath path) {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
DebugUIPlugin.trace("updateHasChildren(" + getElement(path)); //$NON-NLS-1$
@@ -1765,61 +1765,61 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
* @param update Update to perform.
*/
void scheduleViewerUpdate(ViewerUpdateMonitor update) {
- Display display;
- Runnable updateJob = null;
- synchronized(this) {
- if (isDisposed()) {
+ Display display;
+ Runnable updateJob = null;
+ synchronized(this) {
+ if (isDisposed()) {
return;
}
- display = getViewer().getDisplay();
- fCompletedUpdates.add(update);
- if (fCompletedUpdatesRunnable == null) {
+ display = getViewer().getDisplay();
+ fCompletedUpdates.add(update);
+ if (fCompletedUpdatesRunnable == null) {
fCompletedUpdatesRunnable = () -> {
if (!isDisposed()) {
performUpdates();
}
};
- updateJob = fCompletedUpdatesRunnable;
- }
- }
-
- if (updateJob != null) {
- if (Thread.currentThread() == display.getThread()) {
- performUpdates();
- } else {
+ updateJob = fCompletedUpdatesRunnable;
+ }
+ }
+
+ if (updateJob != null) {
+ if (Thread.currentThread() == display.getThread()) {
+ performUpdates();
+ } else {
fDelayedDoModelChangeJob.runDelayed(updateJob);
- }
- }
+ }
+ }
}
/**
* Perform the updates pointed to by given array on the viewer.
*/
private void performUpdates() {
- Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
+ Assert.isTrue( getViewer().getDisplay().getThread() == Thread.currentThread() );
List<ViewerUpdateMonitor> jobCompletedUpdates;
- synchronized(this) {
- if (isDisposed()) {
- return;
- }
- jobCompletedUpdates = fCompletedUpdates;
- fCompletedUpdatesRunnable = null;
+ synchronized(this) {
+ if (isDisposed()) {
+ return;
+ }
+ jobCompletedUpdates = fCompletedUpdates;
+ fCompletedUpdatesRunnable = null;
fCompletedUpdates = new ArrayList<>();
- }
- // necessary to check if viewer is disposed
- try {
- for (int i = 0; i < jobCompletedUpdates.size(); i++) {
- ViewerUpdateMonitor completedUpdate = jobCompletedUpdates.get(i);
- if (!completedUpdate.isCanceled() && !isDisposed()) {
- IStatus status = completedUpdate.getStatus();
- if (status == null || status.isOK()) {
- completedUpdate.performUpdate();
- }
- }
- }
- } finally {
- updatesComplete(jobCompletedUpdates);
- }
+ }
+ // necessary to check if viewer is disposed
+ try {
+ for (int i = 0; i < jobCompletedUpdates.size(); i++) {
+ ViewerUpdateMonitor completedUpdate = jobCompletedUpdates.get(i);
+ if (!completedUpdate.isCanceled() && !isDisposed()) {
+ IStatus status = completedUpdate.getStatus();
+ if (status == null || status.isOK()) {
+ completedUpdate.performUpdate();
+ }
+ }
+ }
+ } finally {
+ updatesComplete(jobCompletedUpdates);
+ }
}
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelLabelProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelLabelProvider.java
index dbf6f53c2..bbde049f8 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelLabelProvider.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelLabelProvider.java
@@ -49,7 +49,7 @@ import org.eclipse.swt.widgets.Display;
* @since 3.3
*/
public class TreeModelLabelProvider extends ColumnLabelProvider
- implements ITreeModelLabelProvider, IModelChangedListener
+ implements ITreeModelLabelProvider, IModelChangedListener
{
private IInternalTreeModelViewer fViewer;
@@ -103,28 +103,28 @@ public class TreeModelLabelProvider extends ColumnLabelProvider
*/
private List<ILabelUpdate> fUpdatesInProgress = new ArrayList<>();
- /**
- * Delta visitor actively cancels the outstanding label updates for
- * elements that are changed and are about to be updated.
- */
- class CancelPendingUpdatesVisitor implements IModelDeltaVisitor {
- @Override
+ /**
+ * Delta visitor actively cancels the outstanding label updates for
+ * elements that are changed and are about to be updated.
+ */
+ class CancelPendingUpdatesVisitor implements IModelDeltaVisitor {
+ @Override
public boolean visit(IModelDelta delta, int depth) {
- if ((delta.getFlags() & IModelDelta.CONTENT) > 0) {
- cancelElementUpdates(delta.getElement(), true);
- return false;
- } else if ((delta.getFlags() & IModelDelta.STATE) > 0) {
- cancelElementUpdates(delta.getElement(), false);
- return true;
- }
- return true;
- }
- }
-
- /**
- * Delta visitor
- */
- private CancelPendingUpdatesVisitor fCancelPendingUpdatesVisitor = new CancelPendingUpdatesVisitor();
+ if ((delta.getFlags() & IModelDelta.CONTENT) > 0) {
+ cancelElementUpdates(delta.getElement(), true);
+ return false;
+ } else if ((delta.getFlags() & IModelDelta.STATE) > 0) {
+ cancelElementUpdates(delta.getElement(), false);
+ return true;
+ }
+ return true;
+ }
+ }
+
+ /**
+ * Delta visitor
+ */
+ private CancelPendingUpdatesVisitor fCancelPendingUpdatesVisitor = new CancelPendingUpdatesVisitor();
/**
* Constructs a new label provider on the given display
@@ -206,21 +206,21 @@ public class TreeModelLabelProvider extends ColumnLabelProvider
@Override
public void dispose() {
- Assert.isTrue(fViewer.getDisplay().getThread() == Thread.currentThread());
+ Assert.isTrue(fViewer.getDisplay().getThread() == Thread.currentThread());
- fViewer.removeModelChangedListener(this);
- fViewer = null;
+ fViewer.removeModelChangedListener(this);
+ fViewer = null;
List<ILabelUpdate> complete = null;
- synchronized(this) {
- complete = fComplete;
- fComplete = null;
- }
- if (complete != null) {
+ synchronized(this) {
+ complete = fComplete;
+ fComplete = null;
+ }
+ if (complete != null) {
for (ILabelUpdate update : complete) {
update.cancel();
}
- }
+ }
for (ILabelUpdate currentUpdate : fUpdatesInProgress) {
currentUpdate.cancel();
}
@@ -231,7 +231,7 @@ public class TreeModelLabelProvider extends ColumnLabelProvider
for (List<ILabelUpdate> updateList : fPendingUpdates.values()) {
for (ILabelUpdate update : updateList) {
update.cancel();
- }
+ }
}
fPendingUpdates.clear();
for (Image image : fImageCache.values()) {
@@ -250,7 +250,7 @@ public class TreeModelLabelProvider extends ColumnLabelProvider
}
private boolean isDisposed() {
- return fViewer == null;
+ return fViewer == null;
}
@Override
@@ -260,120 +260,120 @@ public class TreeModelLabelProvider extends ColumnLabelProvider
@Override
public boolean update(TreePath elementPath) {
- Assert.isTrue(fViewer.getDisplay().getThread() == Thread.currentThread());
+ Assert.isTrue(fViewer.getDisplay().getThread() == Thread.currentThread());
- cancelPathUpdates(elementPath);
+ cancelPathUpdates(elementPath);
String[] visibleColumns = fViewer.getVisibleColumns();
Object element = elementPath.getLastSegment();
IElementLabelProvider presentation = ViewerAdapterService.getLabelProvider(element);
if (presentation != null) {
List<ILabelUpdate> updates = fPendingUpdates.get(presentation);
- if (updates == null) {
+ if (updates == null) {
updates = new LinkedList<>();
- fPendingUpdates.put(presentation, updates);
- }
- updates.add(new LabelUpdate(fViewer.getInput(), elementPath, this, visibleColumns, fViewer.getPresentationContext()));
- fPendingUpdatesRunnable = new Runnable() {
- @Override
+ fPendingUpdates.put(presentation, updates);
+ }
+ updates.add(new LabelUpdate(fViewer.getInput(), elementPath, this, visibleColumns, fViewer.getPresentationContext()));
+ fPendingUpdatesRunnable = new Runnable() {
+ @Override
public void run() {
- if (isDisposed()) {
+ if (isDisposed()) {
return;
}
- startRequests(this);
- }
- };
- fViewer.getDisplay().asyncExec(fPendingUpdatesRunnable);
+ startRequests(this);
+ }
+ };
+ fViewer.getDisplay().asyncExec(fPendingUpdatesRunnable);
return true;
} else {
- return false;
+ return false;
}
}
/**
- * Cancel any outstanding updates that are running for this element.
+ * Cancel any outstanding updates that are running for this element.
* @param elementPath Element to cancel updates for.
- */
- private void cancelPathUpdates(TreePath elementPath) {
- Assert.isTrue(fViewer.getDisplay().getThread() == Thread.currentThread());
+ */
+ private void cancelPathUpdates(TreePath elementPath) {
+ Assert.isTrue(fViewer.getDisplay().getThread() == Thread.currentThread());
for (ILabelUpdate currentUpdate : fUpdatesInProgress) {
- if (elementPath.equals(currentUpdate.getElementPath())) {
- currentUpdate.cancel();
- }
- }
- }
-
- /**
- * Sets the element's display information in the viewer.
- *
- * @param path Element path.
- * @param numColumns Number of columns in the data.
- * @param labels Array of labels. The array cannot to be
- * <code>null</code>, but values within the array may be.
- * @param images Array of image descriptors, may be <code>null</code>.
- * @param fontDatas Array of fond data objects, may be <code>null</code>.
- * @param foregrounds Array of RGB values for foreground colors, may be
- * <code>null</code>.
- * @param backgrounds Array of RGB values for background colors, may be
- * <code>null</code>.
- * @param checked Whether given item should be checked.
- * @param grayed Whether given item's checkbox should be grayed.
- */
- void setElementData(TreePath path, int numColumns, String[] labels, ImageDescriptor[] images,
- FontData[] fontDatas, RGB[] foregrounds, RGB[] backgrounds, boolean checked, boolean grayed)
- {
- fViewer.setElementData(path, numColumns, labels, images, fontDatas, foregrounds, backgrounds);
- fViewer.setElementChecked(path, checked, grayed);
- }
+ if (elementPath.equals(currentUpdate.getElementPath())) {
+ currentUpdate.cancel();
+ }
+ }
+ }
+
+ /**
+ * Sets the element's display information in the viewer.
+ *
+ * @param path Element path.
+ * @param numColumns Number of columns in the data.
+ * @param labels Array of labels. The array cannot to be
+ * <code>null</code>, but values within the array may be.
+ * @param images Array of image descriptors, may be <code>null</code>.
+ * @param fontDatas Array of fond data objects, may be <code>null</code>.
+ * @param foregrounds Array of RGB values for foreground colors, may be
+ * <code>null</code>.
+ * @param backgrounds Array of RGB values for background colors, may be
+ * <code>null</code>.
+ * @param checked Whether given item should be checked.
+ * @param grayed Whether given item's checkbox should be grayed.
+ */
+ void setElementData(TreePath path, int numColumns, String[] labels, ImageDescriptor[] images,
+ FontData[] fontDatas, RGB[] foregrounds, RGB[] backgrounds, boolean checked, boolean grayed)
+ {
+ fViewer.setElementData(path, numColumns, labels, images, fontDatas, foregrounds, backgrounds);
+ fViewer.setElementChecked(path, checked, grayed);
+ }
private void startRequests(Runnable runnable) {
- if (runnable != fPendingUpdatesRunnable) {
- return;
- }
- if (!fPendingUpdates.isEmpty()) {
+ if (runnable != fPendingUpdatesRunnable) {
+ return;
+ }
+ if (!fPendingUpdates.isEmpty()) {
List<ILabelUpdate> list = null;
for (Entry<IElementLabelProvider, List<ILabelUpdate>> entry : fPendingUpdates.entrySet()) {
list = entry.getValue();
for (ILabelUpdate update : list) {
updateStarted(update);
- }
+ }
entry.getKey().update(list.toArray(new ILabelUpdate[list.size()]));
- }
- }
- fPendingUpdates.clear();
- fPendingUpdatesRunnable = null;
+ }
+ }
+ fPendingUpdates.clear();
+ fPendingUpdatesRunnable = null;
}
- /**
- * Cancels all running updates for the given element. If seachFullPath is true,
- * all updates will be canceled which have the given element anywhere in their
- * patch.
- * @param element element to search for.
- * @param searchFullPath flag whether to look for the element in the full path
- * of the update
- */
- private void cancelElementUpdates(Object element, boolean searchFullPath) {
+ /**
+ * Cancels all running updates for the given element. If seachFullPath is true,
+ * all updates will be canceled which have the given element anywhere in their
+ * patch.
+ * @param element element to search for.
+ * @param searchFullPath flag whether to look for the element in the full path
+ * of the update
+ */
+ private void cancelElementUpdates(Object element, boolean searchFullPath) {
for (ILabelUpdate currentUpdate : fUpdatesInProgress) {
- if (searchFullPath) {
- if (element.equals(fViewer.getInput())) {
- currentUpdate.cancel();
- } else {
- TreePath updatePath = currentUpdate.getElementPath();
- for (int i = 0; i < updatePath.getSegmentCount(); i++) {
- if (element.equals(updatePath.getSegment(i))) {
- currentUpdate.cancel();
- break; // Exit the for loop, stay in the while loop
- }
- }
- }
- } else {
- if (element.equals(currentUpdate.getElement())) {
- currentUpdate.cancel();
- }
- }
- }
- }
+ if (searchFullPath) {
+ if (element.equals(fViewer.getInput())) {
+ currentUpdate.cancel();
+ } else {
+ TreePath updatePath = currentUpdate.getElementPath();
+ for (int i = 0; i < updatePath.getSegmentCount(); i++) {
+ if (element.equals(updatePath.getSegment(i))) {
+ currentUpdate.cancel();
+ break; // Exit the for loop, stay in the while loop
+ }
+ }
+ }
+ } else {
+ if (element.equals(currentUpdate.getElement())) {
+ currentUpdate.cancel();
+ }
+ }
+ }
+ }
/**
* Returns the presentation context for this label provider.
@@ -384,13 +384,13 @@ public class TreeModelLabelProvider extends ColumnLabelProvider
return fViewer.getPresentationContext();
}
- /**
- * A label update is complete.
- *
- * @param update Update that is to be completed.
- */
- synchronized void complete(ILabelUpdate update) {
- if (fViewer == null) {
+ /**
+ * A label update is complete.
+ *
+ * @param update Update that is to be completed.
+ */
+ synchronized void complete(ILabelUpdate update) {
+ if (fViewer == null) {
return;
}
@@ -411,11 +411,11 @@ public class TreeModelLabelProvider extends ColumnLabelProvider
} else {
((LabelUpdate) itrUpdate).performUpdate();
}
- }
+ }
});
}
fComplete.add(update);
- }
+ }
@Override
public void addLabelUpdateListener(ILabelUpdateListener listener) {
@@ -433,7 +433,7 @@ public class TreeModelLabelProvider extends ColumnLabelProvider
* @param update Update that was started
*/
void updateStarted(ILabelUpdate update) {
- Assert.isTrue(fViewer.getDisplay().getThread() == Thread.currentThread());
+ Assert.isTrue(fViewer.getDisplay().getThread() == Thread.currentThread());
boolean begin = fUpdatesInProgress.isEmpty();
fUpdatesInProgress.add(update);
@@ -444,8 +444,8 @@ public class TreeModelLabelProvider extends ColumnLabelProvider
}
notifyUpdate(TreeModelContentProvider.UPDATE_SEQUENCE_BEGINS, null);
}
- if (DebugUIPlugin.DEBUG_UPDATE_SEQUENCE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
- DebugUIPlugin.trace("\tBEGIN - " + update); //$NON-NLS-1$
+ if (DebugUIPlugin.DEBUG_UPDATE_SEQUENCE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
+ DebugUIPlugin.trace("\tBEGIN - " + update); //$NON-NLS-1$
}
notifyUpdate(TreeModelContentProvider.UPDATE_BEGINS, update);
}
@@ -458,13 +458,13 @@ public class TreeModelLabelProvider extends ColumnLabelProvider
void updateComplete(ILabelUpdate update) {
fUpdatesInProgress.remove(update);
- if (DebugUIPlugin.DEBUG_UPDATE_SEQUENCE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
- DebugUIPlugin.trace("\tEND - " + update); //$NON-NLS-1$
+ if (DebugUIPlugin.DEBUG_UPDATE_SEQUENCE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
+ DebugUIPlugin.trace("\tEND - " + update); //$NON-NLS-1$
}
notifyUpdate(TreeModelContentProvider.UPDATE_COMPLETE, update);
if (fUpdatesInProgress.isEmpty()) {
- if (DebugUIPlugin.DEBUG_UPDATE_SEQUENCE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
- DebugUIPlugin.trace("LABEL SEQUENCE ENDS"); //$NON-NLS-1$
+ if (DebugUIPlugin.DEBUG_UPDATE_SEQUENCE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) {
+ DebugUIPlugin.trace("LABEL SEQUENCE ENDS"); //$NON-NLS-1$
}
notifyUpdate(TreeModelContentProvider.UPDATE_SEQUENCE_COMPLETE, null);
}
@@ -505,7 +505,7 @@ public class TreeModelLabelProvider extends ColumnLabelProvider
@Override
public void modelChanged(IModelDelta delta, IModelProxy proxy) {
- delta.accept(fCancelPendingUpdatesVisitor);
- }
+ delta.accept(fCancelPendingUpdatesVisitor);
+ }
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerAdapterService.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerAdapterService.java
index ad74f09e2..293f64366 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerAdapterService.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerAdapterService.java
@@ -38,45 +38,45 @@ import org.eclipse.jface.viewers.IStructuredSelection;
public class ViewerAdapterService {
- /**
- * Returns the content provider for the given element or
- * <code>null</code> if none.
- *
- * @param element element to retrieve adapter for
- * @return content provider or <code>null</code>
- */
- public static IElementContentProvider getContentProvider(Object element) {
- return (IElementContentProvider)getAdapter(element, IElementContentProvider.class);
- }
+ /**
+ * Returns the content provider for the given element or
+ * <code>null</code> if none.
+ *
+ * @param element element to retrieve adapter for
+ * @return content provider or <code>null</code>
+ */
+ public static IElementContentProvider getContentProvider(Object element) {
+ return (IElementContentProvider)getAdapter(element, IElementContentProvider.class);
+ }
- /**
- * Returns the label provider for the given element or
- * <code>null</code> if none.
- *
- * @param element element to retrieve adapter for
- * @return label provider or <code>null</code>
- */
- public static IElementLabelProvider getLabelProvider(Object element) {
- IElementLabelProvider lp = (IElementLabelProvider)getAdapter(element, IElementLabelProvider.class);
- if (lp == null && element instanceof String) {
- // there are no adapters registered for Strings
- return new DebugElementAdapterFactory().getAdapter(element, IElementLabelProvider.class);
- }
- return lp;
- }
+ /**
+ * Returns the label provider for the given element or
+ * <code>null</code> if none.
+ *
+ * @param element element to retrieve adapter for
+ * @return label provider or <code>null</code>
+ */
+ public static IElementLabelProvider getLabelProvider(Object element) {
+ IElementLabelProvider lp = (IElementLabelProvider)getAdapter(element, IElementLabelProvider.class);
+ if (lp == null && element instanceof String) {
+ // there are no adapters registered for Strings
+ return new DebugElementAdapterFactory().getAdapter(element, IElementLabelProvider.class);
+ }
+ return lp;
+ }
- /**
- * Returns the column presentation factory for the given element or <code>null</code>.
- *
- * @param element element to retrieve adapter for
- * @return column presentation factory of <code>null</code>
- */
- public static IColumnPresentationFactory getColumnPresentationFactory(Object element) {
- return (IColumnPresentationFactory)getAdapter(element, IColumnPresentationFactory.class);
- }
+ /**
+ * Returns the column presentation factory for the given element or <code>null</code>.
+ *
+ * @param element element to retrieve adapter for
+ * @return column presentation factory of <code>null</code>
+ */
+ public static IColumnPresentationFactory getColumnPresentationFactory(Object element) {
+ return (IColumnPresentationFactory)getAdapter(element, IColumnPresentationFactory.class);
+ }
/**
- * Returns the model proxy factory for the given element or
+ * Returns the model proxy factory for the given element or
* <code>null</code> if none.
*
* @param element element to retrieve adapter for
@@ -87,15 +87,15 @@ public class ViewerAdapterService {
}
/**
- * Returns the model proxy factory v.2 for the given element or
- * <code>null</code> if none.
- *
- * @param element element to retrieve adapter for
- * @return model proxy factory or <code>null</code>
- */
- public static IModelProxyFactory2 getModelProxyFactory2(Object element) {
- return (IModelProxyFactory2)getAdapter(element, IModelProxyFactory2.class);
- }
+ * Returns the model proxy factory v.2 for the given element or
+ * <code>null</code> if none.
+ *
+ * @param element element to retrieve adapter for
+ * @return model proxy factory or <code>null</code>
+ */
+ public static IModelProxyFactory2 getModelProxyFactory2(Object element) {
+ return (IModelProxyFactory2)getAdapter(element, IModelProxyFactory2.class);
+ }
/**
* Returns the memento provider for the given element or
@@ -108,15 +108,15 @@ public class ViewerAdapterService {
return (IElementMementoProvider)getAdapter(element, IElementMementoProvider.class);
}
- /**
- * Returns the element editor for the given element or <code>null</code>.
- *
- * @param element element to retrieve adapter for
- * @return element editor or <code>null</code>
- */
- public static IElementEditor getElementEditor(Object element) {
- return (IElementEditor)getAdapter(element, IElementEditor.class);
- }
+ /**
+ * Returns the element editor for the given element or <code>null</code>.
+ *
+ * @param element element to retrieve adapter for
+ * @return element editor or <code>null</code>
+ */
+ public static IElementEditor getElementEditor(Object element) {
+ return (IElementEditor)getAdapter(element, IElementEditor.class);
+ }
/**
* Creates and returns the selection policy associated with the given selection
@@ -138,16 +138,16 @@ public class ViewerAdapterService {
return null;
}
- /**
- * Returns the viewer input provider for the given element or
- * <code>null</code> if none.
- *
- * @param element element to retrieve adapter for
- * @return viewer input provider or <code>null</code>
- */
- public static IViewerInputProvider getInputProvider(Object element) {
- return (IViewerInputProvider)getAdapter(element, IViewerInputProvider.class);
- }
+ /**
+ * Returns the viewer input provider for the given element or
+ * <code>null</code> if none.
+ *
+ * @param element element to retrieve adapter for
+ * @return viewer input provider or <code>null</code>
+ */
+ public static IViewerInputProvider getInputProvider(Object element) {
+ return (IViewerInputProvider)getAdapter(element, IViewerInputProvider.class);
+ }
/**
* Returns an adapter of the specified type for the given object or <code>null</code>
@@ -158,6 +158,6 @@ public class ViewerAdapterService {
* @return adapter or <code>null</code>
*/
private static Object getAdapter(Object element, Class<?> type) {
- return DebugPlugin.getAdapter(element, type);
+ return DebugPlugin.getAdapter(element, type);
}
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerInputUpdate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerInputUpdate.java
index 77ac587fd..60336ac97 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerInputUpdate.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerInputUpdate.java
@@ -33,90 +33,90 @@ import org.eclipse.ui.progress.WorkbenchJob;
*/
public class ViewerInputUpdate extends Request implements IViewerInputUpdate {
- /**
- * Presentation context
- */
- private IPresentationContext fContext;
-
- /**
- * New viewer input
- */
- private Object fSource;
-
- /**
- * Whether this update is done
- */
- private boolean fDone;
-
- /**
- * Viewer input to use
- */
- private Object fInputElement;
-
- /**
- * Viewer input at the time the request was made
- */
- private Object fViewerInput;
-
- /**
- * Client making request
- */
- private IViewerInputRequestor fRequestor;
-
- /**
- * When <code>done()</code> is called, the viewer must be informed that the update is complete in the UI thread.
- */
- protected WorkbenchJob fViewerInputUpdateJob = new WorkbenchJob("Asynchronous viewer input update") { //$NON-NLS-1$
- @Override
+ /**
+ * Presentation context
+ */
+ private IPresentationContext fContext;
+
+ /**
+ * New viewer input
+ */
+ private Object fSource;
+
+ /**
+ * Whether this update is done
+ */
+ private boolean fDone;
+
+ /**
+ * Viewer input to use
+ */
+ private Object fInputElement;
+
+ /**
+ * Viewer input at the time the request was made
+ */
+ private Object fViewerInput;
+
+ /**
+ * Client making request
+ */
+ private IViewerInputRequestor fRequestor;
+
+ /**
+ * When <code>done()</code> is called, the viewer must be informed that the update is complete in the UI thread.
+ */
+ protected WorkbenchJob fViewerInputUpdateJob = new WorkbenchJob("Asynchronous viewer input update") { //$NON-NLS-1$
+ @Override
public IStatus runInUIThread(IProgressMonitor monitor) {
- if (ViewerInputUpdate.this.isCanceled()){
- return Status.CANCEL_STATUS;
- }
- fRequestor.viewerInputComplete(ViewerInputUpdate.this);
- return Status.OK_STATUS;
- }
- };
-
- /**
- * Constructs a viewer input update request.
- *
- * @param context presentation context
- * @param viewerInput viewer input at the time the request was made
- * @param requestor client making the request
- * @param source source from which to derive a viewer input
- */
- public ViewerInputUpdate(IPresentationContext context, Object viewerInput, IViewerInputRequestor requestor, Object source){
- fContext = context;
- fSource = source;
- fRequestor = requestor;
- fViewerInputUpdateJob.setSystem(true);
- fViewerInput = viewerInput;
- }
+ if (ViewerInputUpdate.this.isCanceled()){
+ return Status.CANCEL_STATUS;
+ }
+ fRequestor.viewerInputComplete(ViewerInputUpdate.this);
+ return Status.OK_STATUS;
+ }
+ };
+
+ /**
+ * Constructs a viewer input update request.
+ *
+ * @param context presentation context
+ * @param viewerInput viewer input at the time the request was made
+ * @param requestor client making the request
+ * @param source source from which to derive a viewer input
+ */
+ public ViewerInputUpdate(IPresentationContext context, Object viewerInput, IViewerInputRequestor requestor, Object source){
+ fContext = context;
+ fSource = source;
+ fRequestor = requestor;
+ fViewerInputUpdateJob.setSystem(true);
+ fViewerInput = viewerInput;
+ }
@Override
public IPresentationContext getPresentationContext() {
return fContext;
}
- @Override
+ @Override
public final void done() {
- synchronized (this) {
- if (isDone()) {
- return;
- }
- fDone = true;
+ synchronized (this) {
+ if (isDone()) {
+ return;
+ }
+ fDone = true;
}
- fViewerInputUpdateJob.schedule();
+ fViewerInputUpdateJob.schedule();
}
- /**
- * Returns whether this request is done yet.
- *
- * @return whether this request is done yet
- */
- protected synchronized boolean isDone() {
- return fDone;
- }
+ /**
+ * Returns whether this request is done yet.
+ *
+ * @return whether this request is done yet
+ */
+ protected synchronized boolean isDone() {
+ return fDone;
+ }
@Override
public Object getElement() {
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerStateTracker.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerStateTracker.java
index 4fb884148..4ddb63f31 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerStateTracker.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerStateTracker.java
@@ -77,208 +77,208 @@ import org.eclipse.ui.XMLMemento;
*/
class ViewerStateTracker {
- // State update type constants used in notifying listeners
- static final int STATE_SAVE_SEQUENCE_BEGINS = 4;
- static final int STATE_SAVE_SEQUENCE_COMPLETE = 5;
- static final int STATE_RESTORE_SEQUENCE_BEGINS = 6;
- static final int STATE_RESTORE_SEQUENCE_COMPLETE = 7;
-
- /**
- * Dummy marker element used in the state delta. The marker indicates that a
- * given element in the pending state delta has been removed. It replaces
- * the original element so that it may optionally be garbage collected.
- */
- private final static String ELEMENT_REMOVED = "ELEMENT_REMOVED"; //$NON-NLS-1$
-
- /**
- * Collector of memento encoding requests.
- */
- interface IElementMementoCollector {
-
- /**
- * Adds the request to this manager.
- *
- * @param request to add
- */
- void addRequest(ElementMementoRequest request);
-
- /**
- * Notification the request is complete.
- *
- * @param request that was completed
- */
- void requestComplete(ElementMementoRequest request);
-
- /**
- * Process the queued requests. Accepts no more new requests.
- */
- void processReqeusts();
-
- /**
- * Cancels the requests in progress.
- */
- void cancel();
- }
-
- /**
- * LRU cache for viewer states
- */
+ // State update type constants used in notifying listeners
+ static final int STATE_SAVE_SEQUENCE_BEGINS = 4;
+ static final int STATE_SAVE_SEQUENCE_COMPLETE = 5;
+ static final int STATE_RESTORE_SEQUENCE_BEGINS = 6;
+ static final int STATE_RESTORE_SEQUENCE_COMPLETE = 7;
+
+ /**
+ * Dummy marker element used in the state delta. The marker indicates that a
+ * given element in the pending state delta has been removed. It replaces
+ * the original element so that it may optionally be garbage collected.
+ */
+ private final static String ELEMENT_REMOVED = "ELEMENT_REMOVED"; //$NON-NLS-1$
+
+ /**
+ * Collector of memento encoding requests.
+ */
+ interface IElementMementoCollector {
+
+ /**
+ * Adds the request to this manager.
+ *
+ * @param request to add
+ */
+ void addRequest(ElementMementoRequest request);
+
+ /**
+ * Notification the request is complete.
+ *
+ * @param request that was completed
+ */
+ void requestComplete(ElementMementoRequest request);
+
+ /**
+ * Process the queued requests. Accepts no more new requests.
+ */
+ void processReqeusts();
+
+ /**
+ * Cancels the requests in progress.
+ */
+ void cancel();
+ }
+
+ /**
+ * LRU cache for viewer states
+ */
class LRUMap<K, V> extends LinkedHashMap<K, V> {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
- private int fMaxSize;
+ private int fMaxSize;
- LRUMap(int maxSize) {
- super();
- fMaxSize = maxSize;
- }
+ LRUMap(int maxSize) {
+ super();
+ fMaxSize = maxSize;
+ }
- @Override
+ @Override
protected boolean removeEldestEntry(Entry<K, V> eldest) {
- return size() > fMaxSize;
- }
- }
-
- /**
- * Content provider that is using this state tracker.
- */
- private TreeModelContentProvider fContentProvider;
-
- ViewerStateTracker(TreeModelContentProvider contentProvider) {
- fContentProvider = contentProvider;
- }
-
- /**
- * Map of viewer states keyed by viewer input mementos
- */
+ return size() > fMaxSize;
+ }
+ }
+
+ /**
+ * Content provider that is using this state tracker.
+ */
+ private TreeModelContentProvider fContentProvider;
+
+ ViewerStateTracker(TreeModelContentProvider contentProvider) {
+ fContentProvider = contentProvider;
+ }
+
+ /**
+ * Map of viewer states keyed by viewer input mementos
+ */
private Map<String, ModelDelta> fViewerStates = new LRUMap<>(20);
- /**
- * Pending viewer state to be restored
- */
- private ModelDelta fPendingState = null;
+ /**
+ * Pending viewer state to be restored
+ */
+ private ModelDelta fPendingState = null;
- /**
- * Flag indicating that the content provider is performing
- * state restore operations.
- */
- private boolean fInStateRestore = false;
+ /**
+ * Flag indicating that the content provider is performing
+ * state restore operations.
+ */
+ private boolean fInStateRestore = false;
- /**
- * State update listeners
- */
+ /**
+ * State update listeners
+ */
private ListenerList<IStateUpdateListener> fStateUpdateListeners = new ListenerList<>();
- /**
- * Postpone restoring REVEAL element until the current updates are complete.
- * See bug 324100
- */
- protected PendingRevealDelta fPendingSetTopItem = null;
+ /**
+ * Postpone restoring REVEAL element until the current updates are complete.
+ * See bug 324100
+ */
+ protected PendingRevealDelta fPendingSetTopItem = null;
- /**
- * Set of IMementoManager's that are currently saving state
- */
+ /**
+ * Set of IMementoManager's that are currently saving state
+ */
private Set<IElementMementoCollector> fPendingStateSaves = new HashSet<>();
- /**
- * Used to queue a viewer input for state restore
- */
- private Object fQueuedRestore = null;
+ /**
+ * Used to queue a viewer input for state restore
+ */
+ private Object fQueuedRestore = null;
- /**
- * Object used to key compare requests in map.
- */
- private static class CompareRequestKey {
+ /**
+ * Object used to key compare requests in map.
+ */
+ private static class CompareRequestKey {
- CompareRequestKey(TreePath path, IModelDelta delta) {
- fPath = path;
- fDelta = delta;
- }
+ CompareRequestKey(TreePath path, IModelDelta delta) {
+ fPath = path;
+ fDelta = delta;
+ }
- TreePath fPath;
- IModelDelta fDelta;
+ TreePath fPath;
+ IModelDelta fDelta;
- @Override
+ @Override
public boolean equals(Object obj) {
- if (obj instanceof CompareRequestKey) {
- CompareRequestKey key = (CompareRequestKey) obj;
- return key.fDelta.equals(fDelta) && key.fPath.equals(fPath);
- }
- return false;
- }
-
- @Override
+ if (obj instanceof CompareRequestKey) {
+ CompareRequestKey key = (CompareRequestKey) obj;
+ return key.fDelta.equals(fDelta) && key.fPath.equals(fPath);
+ }
+ return false;
+ }
+
+ @Override
public int hashCode() {
- return fDelta.hashCode() + fPath.hashCode();
- }
- }
+ return fDelta.hashCode() + fPath.hashCode();
+ }
+ }
- /**
- * Compare requests that are currently running.
- */
+ /**
+ * Compare requests that are currently running.
+ */
private Map<CompareRequestKey, ElementCompareRequest> fCompareRequestsInProgress = new LinkedHashMap<>();
- /**
- * Cancels pending updates.
- */
- void dispose() {
- Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
+ /**
+ * Cancels pending updates.
+ */
+ void dispose() {
+ Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
for (IElementMementoCollector emc : fPendingStateSaves) {
emc.cancel();
- }
- fStateUpdateListeners.clear();
+ }
+ fStateUpdateListeners.clear();
for (ElementCompareRequest ecr : fCompareRequestsInProgress.values()) {
ecr.cancel();
- }
- fCompareRequestsInProgress.clear();
-
- if (fPendingSetTopItem != null) {
- fPendingSetTopItem.dispose();
- }
- }
-
- /**
- * Restores viewer state for the given input
- *
- * @param input
- * viewer input
- */
- private void startRestoreViewerState(final Object input) {
- Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
-
- fPendingState = null;
- final IElementMementoProvider defaultProvider = ViewerAdapterService.getMementoProvider(input);
- if (defaultProvider != null) {
- // build a model delta representing expansion and selection state
- final ModelDelta delta = new ModelDelta(input, IModelDelta.NO_CHANGE);
- final XMLMemento inputMemento = XMLMemento.createWriteRoot("VIEWER_INPUT_MEMENTO"); //$NON-NLS-1$
- final IElementMementoCollector manager = new IElementMementoCollector() {
-
- private IElementMementoRequest fRequest;
-
- @Override
+ }
+ fCompareRequestsInProgress.clear();
+
+ if (fPendingSetTopItem != null) {
+ fPendingSetTopItem.dispose();
+ }
+ }
+
+ /**
+ * Restores viewer state for the given input
+ *
+ * @param input
+ * viewer input
+ */
+ private void startRestoreViewerState(final Object input) {
+ Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
+
+ fPendingState = null;
+ final IElementMementoProvider defaultProvider = ViewerAdapterService.getMementoProvider(input);
+ if (defaultProvider != null) {
+ // build a model delta representing expansion and selection state
+ final ModelDelta delta = new ModelDelta(input, IModelDelta.NO_CHANGE);
+ final XMLMemento inputMemento = XMLMemento.createWriteRoot("VIEWER_INPUT_MEMENTO"); //$NON-NLS-1$
+ final IElementMementoCollector manager = new IElementMementoCollector() {
+
+ private IElementMementoRequest fRequest;
+
+ @Override
public void requestComplete(ElementMementoRequest request) {
- if (fContentProvider.isDisposed()) {
+ if (fContentProvider.isDisposed()) {
return;
}
- notifyStateUpdate(input, TreeModelContentProvider.UPDATE_COMPLETE, request);
-
- if (!request.isCanceled() && (request.getStatus() == null || request.getStatus().isOK())) {
- XMLMemento keyMemento = (XMLMemento) delta.getElement();
- StringWriter writer = new StringWriter();
- try {
- keyMemento.save(writer);
- final String keyMementoString = writer.toString();
- ModelDelta stateDelta = fViewerStates.get(keyMementoString);
- if (stateDelta != null) {
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("STATE RESTORE INPUT COMARE ENDED : " + fRequest + " - MATCHING STATE FOUND"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- // Process start of restore in an async cycle because we may still be inside inputChanged()
- // call. I.e. the "input.equals(fContentProvider.getViewer().getInput())" test may fail.
+ notifyStateUpdate(input, TreeModelContentProvider.UPDATE_COMPLETE, request);
+
+ if (!request.isCanceled() && (request.getStatus() == null || request.getStatus().isOK())) {
+ XMLMemento keyMemento = (XMLMemento) delta.getElement();
+ StringWriter writer = new StringWriter();
+ try {
+ keyMemento.save(writer);
+ final String keyMementoString = writer.toString();
+ ModelDelta stateDelta = fViewerStates.get(keyMementoString);
+ if (stateDelta != null) {
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("STATE RESTORE INPUT COMARE ENDED : " + fRequest + " - MATCHING STATE FOUND"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ // Process start of restore in an async cycle because we may still be inside inputChanged()
+ // call. I.e. the "input.equals(fContentProvider.getViewer().getInput())" test may fail.
fContentProvider.getViewer().getDisplay().asyncExec(() -> {
if (!fContentProvider.isDisposed()
&& input.equals(fContentProvider.getViewer().getInput())) {
@@ -303,85 +303,85 @@ class ViewerStateTracker {
}
}
});
- } else {
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("STATE RESTORE INPUT COMARE ENDED : " + fRequest + " - NO MATCHING STATE"); //$NON-NLS-1$ //$NON-NLS-2$
- }
- }
- } catch (IOException e) {
- DebugUIPlugin.log(e);
- }
- } else {
- notifyStateUpdate(input, STATE_RESTORE_SEQUENCE_BEGINS, null);
- }
- }
-
- @Override
+ } else {
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("STATE RESTORE INPUT COMARE ENDED : " + fRequest + " - NO MATCHING STATE"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+ } catch (IOException e) {
+ DebugUIPlugin.log(e);
+ }
+ } else {
+ notifyStateUpdate(input, STATE_RESTORE_SEQUENCE_BEGINS, null);
+ }
+ }
+
+ @Override
public void processReqeusts() {
- notifyStateUpdate(input, STATE_RESTORE_SEQUENCE_BEGINS, null);
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("STATE RESTORE INPUT COMARE BEGIN : " + fRequest); //$NON-NLS-1$
- }
- notifyStateUpdate(input, TreeModelContentProvider.UPDATE_BEGINS, fRequest);
- defaultProvider.encodeElements(new IElementMementoRequest[] { fRequest });
- }
-
- @Override
+ notifyStateUpdate(input, STATE_RESTORE_SEQUENCE_BEGINS, null);
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("STATE RESTORE INPUT COMARE BEGIN : " + fRequest); //$NON-NLS-1$
+ }
+ notifyStateUpdate(input, TreeModelContentProvider.UPDATE_BEGINS, fRequest);
+ defaultProvider.encodeElements(new IElementMementoRequest[] { fRequest });
+ }
+
+ @Override
public void addRequest(ElementMementoRequest req) {
- fRequest = req;
- }
+ fRequest = req;
+ }
- @Override
+ @Override
public void cancel() {
- // not used
- }
-
- };
- manager.addRequest(
- new ElementMementoRequest(fContentProvider, fContentProvider.getViewer().getInput(), manager,
- delta.getElement(), fContentProvider.getViewerTreePath(delta), inputMemento, delta));
- manager.processReqeusts();
- } else {
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("STATE RESTORE: No input memento provider"); //$NON-NLS-1$
- }
- }
- }
-
- /**
- * Appends the state of the given subtree to the current pending delta.
- * @param path Path to subtree to restore.
- */
- void appendToPendingStateDelta(final TreePath path) {
- if (fContentProvider.getViewer() == null)
+ // not used
+ }
+
+ };
+ manager.addRequest(
+ new ElementMementoRequest(fContentProvider, fContentProvider.getViewer().getInput(), manager,
+ delta.getElement(), fContentProvider.getViewerTreePath(delta), inputMemento, delta));
+ manager.processReqeusts();
+ } else {
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("STATE RESTORE: No input memento provider"); //$NON-NLS-1$
+ }
+ }
+ }
+
+ /**
+ * Appends the state of the given subtree to the current pending delta.
+ * @param path Path to subtree to restore.
+ */
+ void appendToPendingStateDelta(final TreePath path) {
+ if (fContentProvider.getViewer() == null)
{
return; // Not initialized yet.
}
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("STATE APPEND BEGIN: " + path.getLastSegment()); //$NON-NLS-1$
- }
-
- // build a model delta representing expansion and selection state
- final ModelDelta appendDeltaRoot = new ModelDelta(fContentProvider.getViewer().getInput(), IModelDelta.NO_CHANGE);
- ModelDelta delta = appendDeltaRoot;
- for (int i = 0; i < path.getSegmentCount(); i++) {
- delta = delta.addNode(path.getSegment(i), IModelDelta.NO_CHANGE);
- }
-
- if (!fContentProvider.getViewer().saveElementState(path, delta, IModelDelta.COLLAPSE | IModelDelta.EXPAND | IModelDelta.SELECT)) {
- // Path to save the state was not found or there was no
- // (expansion) state to save! Abort.
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("STATE APPEND CANCEL: Element " + path.getLastSegment() + " not found."); //$NON-NLS-1$ //$NON-NLS-2$
- }
- return;
- }
-
- // Append a marker CONTENT flag to all the delta nodes that contain the
- // EXPAND node. These
- // markers are used by the restore logic to know when a delta node can
- // be removed.
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("STATE APPEND BEGIN: " + path.getLastSegment()); //$NON-NLS-1$
+ }
+
+ // build a model delta representing expansion and selection state
+ final ModelDelta appendDeltaRoot = new ModelDelta(fContentProvider.getViewer().getInput(), IModelDelta.NO_CHANGE);
+ ModelDelta delta = appendDeltaRoot;
+ for (int i = 0; i < path.getSegmentCount(); i++) {
+ delta = delta.addNode(path.getSegment(i), IModelDelta.NO_CHANGE);
+ }
+
+ if (!fContentProvider.getViewer().saveElementState(path, delta, IModelDelta.COLLAPSE | IModelDelta.EXPAND | IModelDelta.SELECT)) {
+ // Path to save the state was not found or there was no
+ // (expansion) state to save! Abort.
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("STATE APPEND CANCEL: Element " + path.getLastSegment() + " not found."); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ return;
+ }
+
+ // Append a marker CONTENT flag to all the delta nodes that contain the
+ // EXPAND node. These
+ // markers are used by the restore logic to know when a delta node can
+ // be removed.
delta.accept((d, depth) -> {
if ((d.getFlags() & IModelDelta.EXPAND) != 0) {
((ModelDelta) d).setFlags(d.getFlags() | IModelDelta.CONTENT);
@@ -389,21 +389,21 @@ class ViewerStateTracker {
return true;
});
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("\tAPPEND DELTA: " + appendDeltaRoot); //$NON-NLS-1$
- }
-
- if (fPendingState != null) {
- // If the restore for the current input was never completed,
- // preserve
- // that restore along with the restore that was completed.
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("\tAPPEND OUTSTANDING RESTORE: " + fPendingState); //$NON-NLS-1$
- }
-
- // If the append delta is generated for a sub-tree, copy the pending delta
- // attributes into the pending delta.
- if (path.getSegmentCount() > 0) {
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("\tAPPEND DELTA: " + appendDeltaRoot); //$NON-NLS-1$
+ }
+
+ if (fPendingState != null) {
+ // If the restore for the current input was never completed,
+ // preserve
+ // that restore along with the restore that was completed.
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("\tAPPEND OUTSTANDING RESTORE: " + fPendingState); //$NON-NLS-1$
+ }
+
+ // If the append delta is generated for a sub-tree, copy the pending delta
+ // attributes into the pending delta.
+ if (path.getSegmentCount() > 0) {
fPendingState.accept((pendingDeltaNode, depth) -> {
TreePath pendingDeltaPath = fContentProvider.getViewerTreePath(pendingDeltaNode);
if (path.startsWith(pendingDeltaPath, null)) {
@@ -415,9 +415,9 @@ class ViewerStateTracker {
}
return false;
});
- }
+ }
- // Copy the pending state into the new appended state.
+ // Copy the pending state into the new appended state.
fPendingState.accept((pendingDeltaNode, depth) -> {
// Skip the top element
if (pendingDeltaNode.getParentDelta() == null) {
@@ -455,80 +455,80 @@ class ViewerStateTracker {
return pendingDeltaNode.getChildCount() > 0;
}
});
- }
-
- if (appendDeltaRoot.getChildDeltas().length > 0) {
- // Set the new delta root as the pending state delta.
- if (fPendingState == null) {
- notifyStateUpdate(appendDeltaRoot.getElement(), STATE_RESTORE_SEQUENCE_BEGINS, null);
- }
- fPendingState = appendDeltaRoot;
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("STATE APPEND COMPLETE " + fPendingState); //$NON-NLS-1$
- }
- } else {
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("STATE APPEND CANCELED: No Data"); //$NON-NLS-1$
- }
- }
- }
-
- /**
- * Saves the viewer's state for the previous input. * @param oldInput
- * @param input the {@link ModelDelta} input
- */
- protected void saveViewerState(Object input) {
+ }
+
+ if (appendDeltaRoot.getChildDeltas().length > 0) {
+ // Set the new delta root as the pending state delta.
+ if (fPendingState == null) {
+ notifyStateUpdate(appendDeltaRoot.getElement(), STATE_RESTORE_SEQUENCE_BEGINS, null);
+ }
+ fPendingState = appendDeltaRoot;
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("STATE APPEND COMPLETE " + fPendingState); //$NON-NLS-1$
+ }
+ } else {
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("STATE APPEND CANCELED: No Data"); //$NON-NLS-1$
+ }
+ }
+ }
+
+ /**
+ * Saves the viewer's state for the previous input. * @param oldInput
+ * @param input the {@link ModelDelta} input
+ */
+ protected void saveViewerState(Object input) {
for (Iterator<ElementCompareRequest> itr = fCompareRequestsInProgress.values().iterator(); itr.hasNext();) {
- itr.next().cancel();
- itr.remove();
- }
-
- IElementMementoProvider stateProvider = ViewerAdapterService.getMementoProvider(input);
- if (stateProvider != null) {
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("STATE SAVE BEGIN: " + input); //$NON-NLS-1$
- }
-
- // build a model delta representing expansion and selection state
- final ModelDelta saveDeltaRoot = new ModelDelta(input, IModelDelta.NO_CHANGE);
- buildViewerState(saveDeltaRoot);
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("\tSAVE DELTA FROM VIEW:\n" + saveDeltaRoot); //$NON-NLS-1$
- }
-
- // check if pending restore reveal
- if (fPendingSetTopItem != null) {
- // set back the pending reveal flag
- ModelDelta revealDelta = fPendingSetTopItem.getDelta();
- revealDelta.setFlags(revealDelta.getFlags() | IModelDelta.REVEAL);
-
- fPendingSetTopItem.dispose();
-
- ModelDelta saveDeltaNode = findSubDeltaParent(saveDeltaRoot, revealDelta);
- if (saveDeltaNode != null) {
- clearRevealFlag(saveDeltaRoot);
- ModelDelta child = saveDeltaNode.getChildDelta(revealDelta.getElement(), revealDelta.getIndex());
- if (child != null) {
- child.setFlags(child.getFlags() | IModelDelta.REVEAL);
- } else {
- // the node should be added if not found
- saveDeltaNode.setChildCount(revealDelta.getParentDelta().getChildCount());
- copyIntoDelta(revealDelta, saveDeltaNode);
- }
- } else {
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("\tSKIPPED: " + revealDelta.getElement()); //$NON-NLS-1$
- }
- }
- }
-
- if (fPendingState != null) {
- // If the restore for the current input was never completed,
- // preserve
- // that restore along with the restore that was completed.
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("\tSAVE OUTSTANDING RESTORE: " + fPendingState); //$NON-NLS-1$
- }
+ itr.next().cancel();
+ itr.remove();
+ }
+
+ IElementMementoProvider stateProvider = ViewerAdapterService.getMementoProvider(input);
+ if (stateProvider != null) {
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("STATE SAVE BEGIN: " + input); //$NON-NLS-1$
+ }
+
+ // build a model delta representing expansion and selection state
+ final ModelDelta saveDeltaRoot = new ModelDelta(input, IModelDelta.NO_CHANGE);
+ buildViewerState(saveDeltaRoot);
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("\tSAVE DELTA FROM VIEW:\n" + saveDeltaRoot); //$NON-NLS-1$
+ }
+
+ // check if pending restore reveal
+ if (fPendingSetTopItem != null) {
+ // set back the pending reveal flag
+ ModelDelta revealDelta = fPendingSetTopItem.getDelta();
+ revealDelta.setFlags(revealDelta.getFlags() | IModelDelta.REVEAL);
+
+ fPendingSetTopItem.dispose();
+
+ ModelDelta saveDeltaNode = findSubDeltaParent(saveDeltaRoot, revealDelta);
+ if (saveDeltaNode != null) {
+ clearRevealFlag(saveDeltaRoot);
+ ModelDelta child = saveDeltaNode.getChildDelta(revealDelta.getElement(), revealDelta.getIndex());
+ if (child != null) {
+ child.setFlags(child.getFlags() | IModelDelta.REVEAL);
+ } else {
+ // the node should be added if not found
+ saveDeltaNode.setChildCount(revealDelta.getParentDelta().getChildCount());
+ copyIntoDelta(revealDelta, saveDeltaNode);
+ }
+ } else {
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("\tSKIPPED: " + revealDelta.getElement()); //$NON-NLS-1$
+ }
+ }
+ }
+
+ if (fPendingState != null) {
+ // If the restore for the current input was never completed,
+ // preserve
+ // that restore along with the restore that was completed.
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("\tSAVE OUTSTANDING RESTORE: " + fPendingState); //$NON-NLS-1$
+ }
IModelDeltaVisitor pendingStateVisitor = (pendingDeltaNode, depth) -> {
// Ignore the top element.
@@ -577,184 +577,184 @@ class ViewerStateTracker {
return pendingDeltaNode.getChildCount() > 0;
}
};
- fPendingState.accept(pendingStateVisitor);
- }
-
- if (saveDeltaRoot.getChildDeltas().length > 0) {
- // encode delta with mementos in place of elements, in non-UI
- // thread
- encodeDelta(saveDeltaRoot, stateProvider);
- } else {
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("STATE SAVE CANCELED, NO DATA"); //$NON-NLS-1$
- }
- }
- }
- }
-
- private void clearRevealFlag(ModelDelta saveRootDelta) {
+ fPendingState.accept(pendingStateVisitor);
+ }
+
+ if (saveDeltaRoot.getChildDeltas().length > 0) {
+ // encode delta with mementos in place of elements, in non-UI
+ // thread
+ encodeDelta(saveDeltaRoot, stateProvider);
+ } else {
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("STATE SAVE CANCELED, NO DATA"); //$NON-NLS-1$
+ }
+ }
+ }
+ }
+
+ private void clearRevealFlag(ModelDelta saveRootDelta) {
IModelDeltaVisitor clearDeltaVisitor = (delta, depth) -> {
if ((delta.getFlags() & IModelDelta.REVEAL) != 0) {
((ModelDelta) delta).setFlags(delta.getFlags() & ~IModelDelta.REVEAL);
}
return true;
};
- saveRootDelta.accept(clearDeltaVisitor);
- }
+ saveRootDelta.accept(clearDeltaVisitor);
+ }
- private ModelDelta findSubDeltaParent(ModelDelta destinationDeltaRoot, IModelDelta subDelta) {
- // Create a path of elements to the sub-delta.
+ private ModelDelta findSubDeltaParent(ModelDelta destinationDeltaRoot, IModelDelta subDelta) {
+ // Create a path of elements to the sub-delta.
LinkedList<IModelDelta> deltaPath = new LinkedList<>();
- IModelDelta delta = subDelta;
- while (delta.getParentDelta() != null) {
- delta = delta.getParentDelta();
- deltaPath.addFirst(delta);
- }
-
- // For each element in the path of the sub-delta, find the corresponding
- // element in the destination delta
+ IModelDelta delta = subDelta;
+ while (delta.getParentDelta() != null) {
+ delta = delta.getParentDelta();
+ deltaPath.addFirst(delta);
+ }
+
+ // For each element in the path of the sub-delta, find the corresponding
+ // element in the destination delta
Iterator<IModelDelta> itr = deltaPath.iterator();
- // Skip the root element
- itr.next();
- ModelDelta saveDelta = destinationDeltaRoot;
- while (saveDelta != null && itr.hasNext()) {
- IModelDelta itrDelta = itr.next();
- saveDelta = saveDelta.getChildDelta(itrDelta.getElement(), itrDelta.getIndex());
- }
- return saveDelta;
- }
-
- private ModelDelta findDeltaForPath(ModelDelta root, TreePath path) {
- ModelDelta delta = root;
- for (int i = 0; i < path.getSegmentCount(); i++) {
- delta = delta.getChildDelta(path.getSegment(i));
- if (delta == null) {
- return null;
- }
- }
- return delta;
- }
-
- private boolean isDeltaInParent(IModelDelta delta, ModelDelta destParent) {
- return destParent.getChildDelta(delta.getElement(), delta.getIndex()) != null;
- }
-
- private void copyIntoDelta(IModelDelta delta, ModelDelta destParent) {
- ModelDelta newDelta = destParent.addNode(delta.getElement(), delta.getIndex(), delta.getFlags(), delta
- .getChildCount());
- for (int i = 0; i < delta.getChildDeltas().length; i++) {
- copyIntoDelta(delta.getChildDeltas()[i], newDelta);
- }
- }
-
- /**
- * Encodes delta elements into mementos using the given provider.
- * @param rootDelta the {@link ModelDelta} to encode
- * @param defaultProvider the default provider to use when processing the given delta
- *
- */
- protected void encodeDelta(final ModelDelta rootDelta, final IElementMementoProvider defaultProvider) {
- final Object input = rootDelta.getElement();
- final XMLMemento inputMemento = XMLMemento.createWriteRoot("VIEWER_INPUT_MEMENTO"); //$NON-NLS-1$
- final XMLMemento childrenMemento = XMLMemento.createWriteRoot("CHILDREN_MEMENTO"); //$NON-NLS-1$
- final IElementMementoCollector manager = new IElementMementoCollector() {
-
- /**
- * list of memento fRequests
- */
+ // Skip the root element
+ itr.next();
+ ModelDelta saveDelta = destinationDeltaRoot;
+ while (saveDelta != null && itr.hasNext()) {
+ IModelDelta itrDelta = itr.next();
+ saveDelta = saveDelta.getChildDelta(itrDelta.getElement(), itrDelta.getIndex());
+ }
+ return saveDelta;
+ }
+
+ private ModelDelta findDeltaForPath(ModelDelta root, TreePath path) {
+ ModelDelta delta = root;
+ for (int i = 0; i < path.getSegmentCount(); i++) {
+ delta = delta.getChildDelta(path.getSegment(i));
+ if (delta == null) {
+ return null;
+ }
+ }
+ return delta;
+ }
+
+ private boolean isDeltaInParent(IModelDelta delta, ModelDelta destParent) {
+ return destParent.getChildDelta(delta.getElement(), delta.getIndex()) != null;
+ }
+
+ private void copyIntoDelta(IModelDelta delta, ModelDelta destParent) {
+ ModelDelta newDelta = destParent.addNode(delta.getElement(), delta.getIndex(), delta.getFlags(), delta
+ .getChildCount());
+ for (int i = 0; i < delta.getChildDeltas().length; i++) {
+ copyIntoDelta(delta.getChildDeltas()[i], newDelta);
+ }
+ }
+
+ /**
+ * Encodes delta elements into mementos using the given provider.
+ * @param rootDelta the {@link ModelDelta} to encode
+ * @param defaultProvider the default provider to use when processing the given delta
+ *
+ */
+ protected void encodeDelta(final ModelDelta rootDelta, final IElementMementoProvider defaultProvider) {
+ final Object input = rootDelta.getElement();
+ final XMLMemento inputMemento = XMLMemento.createWriteRoot("VIEWER_INPUT_MEMENTO"); //$NON-NLS-1$
+ final XMLMemento childrenMemento = XMLMemento.createWriteRoot("CHILDREN_MEMENTO"); //$NON-NLS-1$
+ final IElementMementoCollector manager = new IElementMementoCollector() {
+
+ /**
+ * list of memento fRequests
+ */
private List<IElementMementoRequest> fRequests = new ArrayList<>();
- /**
- * Flag indicating whether the encoding of delta has been canceled.
- */
- private boolean fCanceled = false;
+ /**
+ * Flag indicating whether the encoding of delta has been canceled.
+ */
+ private boolean fCanceled = false;
- @Override
+ @Override
public void requestComplete(ElementMementoRequest request) {
- Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
-
- notifyStateUpdate(input, TreeModelContentProvider.UPDATE_COMPLETE, request);
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("\tSTATE END: " + request); //$NON-NLS-1$
- }
-
- if (!request.isCanceled() && (request.getStatus() == null || request.getStatus().isOK())) {
- boolean requestsComplted = false;
- if (!fCanceled) {
- fRequests.remove(request);
- requestsComplted = fRequests.isEmpty();
- }
- if (requestsComplted) {
- XMLMemento keyMemento = (XMLMemento) rootDelta.getElement();
- StringWriter writer = new StringWriter();
- try {
- keyMemento.save(writer);
- fViewerStates.put(writer.toString(), rootDelta);
- } catch (IOException e) {
- DebugUIPlugin.log(e);
- }
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("STATE SAVE COMPLETED: " + rootDelta); //$NON-NLS-1$
- }
- stateSaveComplete(input, this);
- }
- } else {
- cancel();
- }
- }
-
- @Override
+ Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
+
+ notifyStateUpdate(input, TreeModelContentProvider.UPDATE_COMPLETE, request);
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("\tSTATE END: " + request); //$NON-NLS-1$
+ }
+
+ if (!request.isCanceled() && (request.getStatus() == null || request.getStatus().isOK())) {
+ boolean requestsComplted = false;
+ if (!fCanceled) {
+ fRequests.remove(request);
+ requestsComplted = fRequests.isEmpty();
+ }
+ if (requestsComplted) {
+ XMLMemento keyMemento = (XMLMemento) rootDelta.getElement();
+ StringWriter writer = new StringWriter();
+ try {
+ keyMemento.save(writer);
+ fViewerStates.put(writer.toString(), rootDelta);
+ } catch (IOException e) {
+ DebugUIPlugin.log(e);
+ }
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("STATE SAVE COMPLETED: " + rootDelta); //$NON-NLS-1$
+ }
+ stateSaveComplete(input, this);
+ }
+ } else {
+ cancel();
+ }
+ }
+
+ @Override
public void cancel() {
- Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
+ Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
- if (fCanceled) {
- return;
- }
+ if (fCanceled) {
+ return;
+ }
- fCanceled = true;
+ fCanceled = true;
for (IElementMementoRequest req : fRequests) {
- req.cancel();
- }
- fRequests.clear();
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("STATE SAVE ABORTED: " + rootDelta.getElement()); //$NON-NLS-1$
- }
- stateSaveComplete(input, this);
- }
-
- @Override
+ req.cancel();
+ }
+ fRequests.clear();
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("STATE SAVE ABORTED: " + rootDelta.getElement()); //$NON-NLS-1$
+ }
+ stateSaveComplete(input, this);
+ }
+
+ @Override
public void processReqeusts() {
- Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
+ Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
Map<IElementMementoProvider, List<IElementMementoRequest>> providers = new HashMap<>();
for (IElementMementoRequest request : fRequests) {
- notifyStateUpdate(input, TreeModelContentProvider.UPDATE_BEGINS, request);
- IElementMementoProvider provider = ViewerAdapterService.getMementoProvider(request.getElement());
- if (provider == null) {
- provider = defaultProvider;
- }
+ notifyStateUpdate(input, TreeModelContentProvider.UPDATE_BEGINS, request);
+ IElementMementoProvider provider = ViewerAdapterService.getMementoProvider(request.getElement());
+ if (provider == null) {
+ provider = defaultProvider;
+ }
List<IElementMementoRequest> reqs = providers.get(provider);
- if (reqs == null) {
+ if (reqs == null) {
reqs = new ArrayList<>();
- providers.put(provider, reqs);
- }
- reqs.add(request);
- }
+ providers.put(provider, reqs);
+ }
+ reqs.add(request);
+ }
for (Entry<IElementMementoProvider, List<IElementMementoRequest>> entry : providers.entrySet()) {
- IElementMementoProvider provider = entry.getKey();
+ IElementMementoProvider provider = entry.getKey();
List<IElementMementoRequest> reqs = entry.getValue();
provider.encodeElements(reqs.toArray(new IElementMementoRequest[reqs.size()]));
- }
- }
+ }
+ }
- @Override
+ @Override
public void addRequest(ElementMementoRequest request) {
- Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
+ Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
- fRequests.add(request);
- }
+ fRequests.add(request);
+ }
- };
+ };
IModelDeltaVisitor visitor = (delta, depth) -> {
// Add the CONTENT flag to all nodes with an EXPAND flag.
// During restoring, this flag is used as a marker indicating
@@ -778,94 +778,94 @@ class ViewerStateTracker {
}
return true;
};
- rootDelta.accept(visitor);
- stateSaveStarted(input, manager);
- manager.processReqeusts();
- }
-
- /**
- * Called when a state save is starting.
- * @param input the {@link ModelDelta} input
- * @param manager the manager to notify
- */
- private void stateSaveStarted(Object input, IElementMementoCollector manager) {
- Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
-
- notifyStateUpdate(input, STATE_SAVE_SEQUENCE_BEGINS, null);
- fPendingStateSaves.add(manager);
- }
-
- /**
- * Called when a state save is complete.
- * @param input the {@link ModelDelta} input
- * @param manager the manager to notify
- */
- private void stateSaveComplete(Object input, IElementMementoCollector manager) {
- Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
-
- notifyStateUpdate(input, STATE_SAVE_SEQUENCE_COMPLETE, null);
- fPendingStateSaves.remove(manager);
- if (fQueuedRestore != null) {
- Object temp = fQueuedRestore;
- fQueuedRestore = null;
- restoreViewerState(temp);
- }
- }
-
- /**
- * Returns whether any state saving is in progress.
- *
- * @return whether any state saving is in progress
- */
- private boolean isSavingState() {
- Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
-
- return !fPendingStateSaves.isEmpty();
- }
-
- /**
- * Restores the viewer state unless a save is taking place. If a save is
- * taking place, the restore is queued.
- *
- * @param input
- * viewer input
- */
- protected void restoreViewerState(final Object input) {
- Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
-
- fPendingState = null;
- if (isSavingState()) {
- fQueuedRestore = input;
- } else {
- startRestoreViewerState(input);
- }
- }
-
-
- public void cancelRestore(final TreePath path, final int flags) {
- if (fInStateRestore) {
- // If we are currently processing pending state already, ignore
- // cancelRestore requests. These requests may be triggered in the viewer
- // by changes to the tree state (Bug 295585).
- return;
- }
-
- if ((flags & IModelDelta.REVEAL) != 0 && fPendingSetTopItem != null) {
- fPendingSetTopItem.dispose();
- return;
- }
-
- // Nothing else to do
- if (fPendingState == null) {
- return;
- }
-
- if ((flags & (IModelDelta.SELECT | IModelDelta.REVEAL)) != 0) {
- // If we're canceling reveal and this is waiting for updates to complete
- // then just cancel it and return
-
- // If we're canceling select or reveal, cancel it for all of pending deltas
- final int mask = flags & (IModelDelta.SELECT | IModelDelta.REVEAL);
+ rootDelta.accept(visitor);
+ stateSaveStarted(input, manager);
+ manager.processReqeusts();
+ }
+
+ /**
+ * Called when a state save is starting.
+ * @param input the {@link ModelDelta} input
+ * @param manager the manager to notify
+ */
+ private void stateSaveStarted(Object input, IElementMementoCollector manager) {
+ Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
+
+ notifyStateUpdate(input, STATE_SAVE_SEQUENCE_BEGINS, null);
+ fPendingStateSaves.add(manager);
+ }
+
+ /**
+ * Called when a state save is complete.
+ * @param input the {@link ModelDelta} input
+ * @param manager the manager to notify
+ */
+ private void stateSaveComplete(Object input, IElementMementoCollector manager) {
+ Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
+
+ notifyStateUpdate(input, STATE_SAVE_SEQUENCE_COMPLETE, null);
+ fPendingStateSaves.remove(manager);
+ if (fQueuedRestore != null) {
+ Object temp = fQueuedRestore;
+ fQueuedRestore = null;
+ restoreViewerState(temp);
+ }
+ }
+
+ /**
+ * Returns whether any state saving is in progress.
+ *
+ * @return whether any state saving is in progress
+ */
+ private boolean isSavingState() {
+ Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
+
+ return !fPendingStateSaves.isEmpty();
+ }
+
+ /**
+ * Restores the viewer state unless a save is taking place. If a save is
+ * taking place, the restore is queued.
+ *
+ * @param input
+ * viewer input
+ */
+ protected void restoreViewerState(final Object input) {
+ Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
+
+ fPendingState = null;
+ if (isSavingState()) {
+ fQueuedRestore = input;
+ } else {
+ startRestoreViewerState(input);
+ }
+ }
+
+
+ public void cancelRestore(final TreePath path, final int flags) {
+ if (fInStateRestore) {
+ // If we are currently processing pending state already, ignore
+ // cancelRestore requests. These requests may be triggered in the viewer
+ // by changes to the tree state (Bug 295585).
+ return;
+ }
+
+ if ((flags & IModelDelta.REVEAL) != 0 && fPendingSetTopItem != null) {
+ fPendingSetTopItem.dispose();
+ return;
+ }
+
+ // Nothing else to do
+ if (fPendingState == null) {
+ return;
+ }
+
+ if ((flags & (IModelDelta.SELECT | IModelDelta.REVEAL)) != 0) {
+ // If we're canceling reveal and this is waiting for updates to complete
+ // then just cancel it and return
+
+ // If we're canceling select or reveal, cancel it for all of pending deltas
+ final int mask = flags & (IModelDelta.SELECT | IModelDelta.REVEAL);
fPendingState.accept((delta, depth) -> {
int deltaFlags = delta.getFlags();
int newFlags = deltaFlags & ~mask;
@@ -879,10 +879,10 @@ class ViewerStateTracker {
((ModelDelta) delta).setFlags(newFlags);
return true;
});
- }
- if ((flags & ~(IModelDelta.SELECT | IModelDelta.REVEAL)) != 0) {
- final int mask = flags & ~(IModelDelta.SELECT | IModelDelta.REVEAL);
- // For other flags (EXPAND/COLLAPSE), cancel only from the matching path.
+ }
+ if ((flags & ~(IModelDelta.SELECT | IModelDelta.REVEAL)) != 0) {
+ final int mask = flags & ~(IModelDelta.SELECT | IModelDelta.REVEAL);
+ // For other flags (EXPAND/COLLAPSE), cancel only from the matching path.
fPendingState.accept((delta, depth) -> {
if (depth < path.getSegmentCount()) {
// Descend until we reach a matching depth.
@@ -926,30 +926,30 @@ class ViewerStateTracker {
return true;
}
});
- }
- }
-
-
- /**
- * Perform any restoration required for the given tree path.
- * <p>
- * This method is called after every viewer update completion to continue
- * restoring the expansion state that was previously saved.
- *
- * @param path the tree path to update
- * @param modelIndex the index in the current model
- * @param knowsHasChildren if the content provider knows it has children already
- * @param knowsChildCount if the content provider knows the current child count already
- * @param checkChildrenRealized if any realized children should be checked or not
- */
- void restorePendingStateOnUpdate(final TreePath path, final int modelIndex, final boolean knowsHasChildren,
- final boolean knowsChildCount, final boolean checkChildrenRealized)
- {
- Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
-
- if (fPendingState == null) {
- return;
- }
+ }
+ }
+
+
+ /**
+ * Perform any restoration required for the given tree path.
+ * <p>
+ * This method is called after every viewer update completion to continue
+ * restoring the expansion state that was previously saved.
+ *
+ * @param path the tree path to update
+ * @param modelIndex the index in the current model
+ * @param knowsHasChildren if the content provider knows it has children already
+ * @param knowsChildCount if the content provider knows the current child count already
+ * @param checkChildrenRealized if any realized children should be checked or not
+ */
+ void restorePendingStateOnUpdate(final TreePath path, final int modelIndex, final boolean knowsHasChildren,
+ final boolean knowsChildCount, final boolean checkChildrenRealized)
+ {
+ Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
+
+ if (fPendingState == null) {
+ return;
+ }
IModelDeltaVisitor visitor = (delta, depth) -> {
@@ -1000,81 +1000,81 @@ class ViewerStateTracker {
return element.equals(potentialMatch);
};
- try {
- fInStateRestore = true;
- fPendingState.accept(visitor);
- }
- finally {
- fInStateRestore = false;
- }
- checkIfRestoreComplete();
- }
-
- /**
- * Checks whether restoring pending state is already complete.
- */
- void checkIfRestoreComplete() {
- Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
-
- if (fPendingState == null) {
- return;
- }
-
- /**
- * Used to determine when restoration delta has been processed
- */
- class CheckState implements IModelDeltaVisitor {
- private boolean complete = true;
-
- @Override
+ try {
+ fInStateRestore = true;
+ fPendingState.accept(visitor);
+ }
+ finally {
+ fInStateRestore = false;
+ }
+ checkIfRestoreComplete();
+ }
+
+ /**
+ * Checks whether restoring pending state is already complete.
+ */
+ void checkIfRestoreComplete() {
+ Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
+
+ if (fPendingState == null) {
+ return;
+ }
+
+ /**
+ * Used to determine when restoration delta has been processed
+ */
+ class CheckState implements IModelDeltaVisitor {
+ private boolean complete = true;
+
+ @Override
public boolean visit(IModelDelta delta, int depth) {
- // Filter out the CONTENT flags from the delta flags, the content
- // flag is only used as a marker indicating that all the sub-elements
- // of a given delta have been retrieved.
- int flags = (delta.getFlags() & ~IModelDelta.CONTENT);
-
- if (flags != IModelDelta.NO_CHANGE) {
- IModelDelta parentDelta = delta.getParentDelta();
- // Remove the delta if :
- // - The parent delta has no more flags on it (the content flag is removed as well),
- // which means that parent element's children have been completely exposed.
- // - There are no more pending updates for the element.
- // - If element is a memento, there are no state requests pending.
- if (parentDelta != null && parentDelta.getFlags() == IModelDelta.NO_CHANGE) {
- TreePath deltaPath = fContentProvider.getViewerTreePath(delta);
- if ( !fContentProvider.areElementUpdatesPending(deltaPath) &&
- (!(delta.getElement() instanceof IMemento) || !areMementoUpdatesPending(delta)) )
- {
- removeDelta(delta);
- return false;
- }
- }
-
- if (flags != IModelDelta.REVEAL || (delta.getElement() instanceof IMemento)) {
- complete = false;
- return false;
- }
- }
- return true;
- }
-
- public boolean isComplete() {
- return complete;
- }
-
- private boolean areMementoUpdatesPending(IModelDelta delta) {
+ // Filter out the CONTENT flags from the delta flags, the content
+ // flag is only used as a marker indicating that all the sub-elements
+ // of a given delta have been retrieved.
+ int flags = (delta.getFlags() & ~IModelDelta.CONTENT);
+
+ if (flags != IModelDelta.NO_CHANGE) {
+ IModelDelta parentDelta = delta.getParentDelta();
+ // Remove the delta if :
+ // - The parent delta has no more flags on it (the content flag is removed as well),
+ // which means that parent element's children have been completely exposed.
+ // - There are no more pending updates for the element.
+ // - If element is a memento, there are no state requests pending.
+ if (parentDelta != null && parentDelta.getFlags() == IModelDelta.NO_CHANGE) {
+ TreePath deltaPath = fContentProvider.getViewerTreePath(delta);
+ if ( !fContentProvider.areElementUpdatesPending(deltaPath) &&
+ (!(delta.getElement() instanceof IMemento) || !areMementoUpdatesPending(delta)) )
+ {
+ removeDelta(delta);
+ return false;
+ }
+ }
+
+ if (flags != IModelDelta.REVEAL || (delta.getElement() instanceof IMemento)) {
+ complete = false;
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public boolean isComplete() {
+ return complete;
+ }
+
+ private boolean areMementoUpdatesPending(IModelDelta delta) {
for (CompareRequestKey key : fCompareRequestsInProgress.keySet()) {
- if (delta.getElement().equals(key.fDelta.getElement())) {
- return true;
- }
- }
- return false;
- }
-
- private void removeDelta(IModelDelta delta) {
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("\tRESTORE REMOVED: " + delta.getElement()); //$NON-NLS-1$
- }
+ if (delta.getElement().equals(key.fDelta.getElement())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void removeDelta(IModelDelta delta) {
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("\tRESTORE REMOVED: " + delta.getElement()); //$NON-NLS-1$
+ }
delta.accept((_visitorDelta, depth) -> {
ModelDelta visitorDelta = (ModelDelta) _visitorDelta;
@@ -1083,285 +1083,285 @@ class ViewerStateTracker {
return true;
});
- }
- }
-
- CheckState state = new CheckState();
- fPendingState.accept(state);
- if (state.isComplete()) {
- // notify restore complete if REVEAL was restored also, otherwise
- // postpone until then.
- if (fPendingSetTopItem == null) {
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("STATE RESTORE COMPELTE: " + fPendingState); //$NON-NLS-1$
- }
-
- notifyStateUpdate(fPendingState.getElement(), STATE_RESTORE_SEQUENCE_COMPLETE, null);
- }
-
- fPendingState = null;
- }
- }
-
- /**
- * Restores the pending state in the given delta node. This method is called
- * once the state tracker has found the element which matches the element in
- * the given delta node.
- * @param delta the {@link ModelDelta} to restore from
- * @param knowsHasChildren if the content provider has computed its children
- * @param knowsChildCount if the content provider has already computed the child count
- * @param checkChildrenRealized if any realized children should be checked
- */
- void restorePendingStateNode(final ModelDelta delta, boolean knowsHasChildren, boolean knowsChildCount, boolean checkChildrenRealized) {
- final TreePath treePath = fContentProvider.getViewerTreePath(delta);
- final IInternalTreeModelViewer viewer = fContentProvider.getViewer();
-
- // Attempt to expand the node only if the children are known.
- if (knowsHasChildren) {
- if ((delta.getFlags() & IModelDelta.EXPAND) != 0) {
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("\tRESTORE EXPAND: " + treePath.getLastSegment()); //$NON-NLS-1$
- }
- viewer.expandToLevel(treePath, 1);
- delta.setFlags(delta.getFlags() & ~IModelDelta.EXPAND);
- }
- if ((delta.getFlags() & IModelDelta.COLLAPSE) != 0) {
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("\tRESTORE COLLAPSE: " + treePath.getLastSegment()); //$NON-NLS-1$
- }
- // Check auto-expand before collapsing an element (bug 335734)
- int autoexpand = fContentProvider.getViewer().getAutoExpandLevel();
- if (autoexpand != ITreeModelViewer.ALL_LEVELS && autoexpand < (treePath.getSegmentCount() + 1)) {
- fContentProvider.getViewer().setExpandedState(treePath, false);
- }
- delta.setFlags(delta.getFlags() & ~IModelDelta.COLLAPSE);
- }
- }
-
- if ((delta.getFlags() & IModelDelta.SELECT) != 0) {
- delta.setFlags(delta.getFlags() & ~IModelDelta.SELECT);
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("\tRESTORE SELECT: " + treePath.getLastSegment()); //$NON-NLS-1$
- }
- ITreeSelection currentSelection = (ITreeSelection)viewer.getSelection();
- if (currentSelection == null || currentSelection.isEmpty()) {
- viewer.setSelection(new TreeSelection(treePath), false, false);
- } else {
- TreePath[] currentPaths = currentSelection.getPaths();
- boolean pathInSelection = false;
- for (int i = 0; i < currentPaths.length; i++) {
- if (currentPaths[i].equals(treePath)) {
- pathInSelection = true;
- break;
- }
- }
- // Only set the selection if the element is not yet in
- // selection. Otherwise the setSelection() call will
- // update selection listeners needlessly.
- if (!pathInSelection) {
- TreePath[] newPaths = new TreePath[currentPaths.length + 1];
- System.arraycopy(currentPaths, 0, newPaths, 0, currentPaths.length);
- newPaths[newPaths.length - 1] = treePath;
- viewer.setSelection(new TreeSelection(newPaths), false, false);
- }
- }
- }
-
- if ((delta.getFlags() & IModelDelta.REVEAL) != 0) {
- delta.setFlags(delta.getFlags() & ~IModelDelta.REVEAL);
- // Look for the reveal flag in the child deltas. If
- // A child delta has the reveal flag, do not set the
- // top element yet.
- boolean setTopItem = true;
- IModelDelta[] childDeltas = delta.getChildDeltas();
- for (int i = 0; i < childDeltas.length; i++) {
- IModelDelta childDelta = childDeltas[i];
- int modelIndex = childDelta.getIndex();
- if (modelIndex >= 0 && (childDelta.getFlags() & IModelDelta.REVEAL) != 0) {
- setTopItem = false;
- }
- }
-
- if (setTopItem) {
- Assert.isTrue(fPendingSetTopItem == null);
-
- fPendingSetTopItem = new PendingRevealDelta(treePath, delta);
- viewer.addViewerUpdateListener(fPendingSetTopItem);
- }
- }
-
- // If we know the child count of the element, look for the reveal
- // flag in the child deltas. For the children with reveal flag start
- // a new update.
- // If the child delta's index is out of range, strip the reveal flag
- // since it is no longer applicable.
- if (knowsChildCount) {
- int childCount = viewer.getChildCount(treePath);
- if (childCount >= 0) {
- ModelDelta[] childDeltas = (ModelDelta[])delta.getChildDeltas();
- for (int i = 0; i < childDeltas.length; i++) {
- ModelDelta childDelta = childDeltas[i];
- int modelIndex = childDelta.getIndex();
- if (modelIndex >= 0 && (childDelta.getFlags() & IModelDelta.REVEAL) != 0) {
- if (modelIndex < childCount) {
- fContentProvider.doUpdateElement(treePath, modelIndex);
- } else {
- childDelta.setFlags(childDelta.getFlags() & ~IModelDelta.REVEAL);
- }
- }
- }
- }
- }
-
- // Some children of this element were just updated. If all its
- // children are now realized, clear out any elements that still
- // have flags, because they represent elements that were removed.
- if ((checkChildrenRealized &&
- !fContentProvider.areChildrenUpdatesPending(treePath) &&
- fContentProvider.getViewer().getElementChildrenRealized(treePath)) ||
- (knowsHasChildren && !viewer.getHasChildren(treePath)) )
- {
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("\tRESTORE CONTENT: " + treePath.getLastSegment()); //$NON-NLS-1$
- }
- delta.setFlags(delta.getFlags() & ~IModelDelta.CONTENT);
- }
- }
-
- /**
- * Utility that reveals the saved top item in the viewer. It listens for
- * all content updates to complete in order to avoid having the desired top item
- * scroll out as view content is filled in.
- * <br>
- * Revealing some elements can trigger expanding some of elements
- * that have been just revealed. Therefore, we have to check one
- * more time after the new triggered updates are completed if we
- * have to set again the top index
- */
- private class PendingRevealDelta implements IViewerUpdateListener {
-
- private final TreePath fPathToReveal;
- private final ModelDelta fRevealDelta;
-
- PendingRevealDelta(TreePath pathToReveal, ModelDelta revealDelta) {
- fPathToReveal = pathToReveal;
- fRevealDelta = revealDelta;
- }
-
- /**
- * Counter that tracks how many time the viewer updates were completed.
- */
- private int fCounter = 0;
- private Object fModelInput = fPendingState.getElement();
-
- @Override
+ }
+ }
+
+ CheckState state = new CheckState();
+ fPendingState.accept(state);
+ if (state.isComplete()) {
+ // notify restore complete if REVEAL was restored also, otherwise
+ // postpone until then.
+ if (fPendingSetTopItem == null) {
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("STATE RESTORE COMPELTE: " + fPendingState); //$NON-NLS-1$
+ }
+
+ notifyStateUpdate(fPendingState.getElement(), STATE_RESTORE_SEQUENCE_COMPLETE, null);
+ }
+
+ fPendingState = null;
+ }
+ }
+
+ /**
+ * Restores the pending state in the given delta node. This method is called
+ * once the state tracker has found the element which matches the element in
+ * the given delta node.
+ * @param delta the {@link ModelDelta} to restore from
+ * @param knowsHasChildren if the content provider has computed its children
+ * @param knowsChildCount if the content provider has already computed the child count
+ * @param checkChildrenRealized if any realized children should be checked
+ */
+ void restorePendingStateNode(final ModelDelta delta, boolean knowsHasChildren, boolean knowsChildCount, boolean checkChildrenRealized) {
+ final TreePath treePath = fContentProvider.getViewerTreePath(delta);
+ final IInternalTreeModelViewer viewer = fContentProvider.getViewer();
+
+ // Attempt to expand the node only if the children are known.
+ if (knowsHasChildren) {
+ if ((delta.getFlags() & IModelDelta.EXPAND) != 0) {
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("\tRESTORE EXPAND: " + treePath.getLastSegment()); //$NON-NLS-1$
+ }
+ viewer.expandToLevel(treePath, 1);
+ delta.setFlags(delta.getFlags() & ~IModelDelta.EXPAND);
+ }
+ if ((delta.getFlags() & IModelDelta.COLLAPSE) != 0) {
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("\tRESTORE COLLAPSE: " + treePath.getLastSegment()); //$NON-NLS-1$
+ }
+ // Check auto-expand before collapsing an element (bug 335734)
+ int autoexpand = fContentProvider.getViewer().getAutoExpandLevel();
+ if (autoexpand != ITreeModelViewer.ALL_LEVELS && autoexpand < (treePath.getSegmentCount() + 1)) {
+ fContentProvider.getViewer().setExpandedState(treePath, false);
+ }
+ delta.setFlags(delta.getFlags() & ~IModelDelta.COLLAPSE);
+ }
+ }
+
+ if ((delta.getFlags() & IModelDelta.SELECT) != 0) {
+ delta.setFlags(delta.getFlags() & ~IModelDelta.SELECT);
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("\tRESTORE SELECT: " + treePath.getLastSegment()); //$NON-NLS-1$
+ }
+ ITreeSelection currentSelection = (ITreeSelection)viewer.getSelection();
+ if (currentSelection == null || currentSelection.isEmpty()) {
+ viewer.setSelection(new TreeSelection(treePath), false, false);
+ } else {
+ TreePath[] currentPaths = currentSelection.getPaths();
+ boolean pathInSelection = false;
+ for (int i = 0; i < currentPaths.length; i++) {
+ if (currentPaths[i].equals(treePath)) {
+ pathInSelection = true;
+ break;
+ }
+ }
+ // Only set the selection if the element is not yet in
+ // selection. Otherwise the setSelection() call will
+ // update selection listeners needlessly.
+ if (!pathInSelection) {
+ TreePath[] newPaths = new TreePath[currentPaths.length + 1];
+ System.arraycopy(currentPaths, 0, newPaths, 0, currentPaths.length);
+ newPaths[newPaths.length - 1] = treePath;
+ viewer.setSelection(new TreeSelection(newPaths), false, false);
+ }
+ }
+ }
+
+ if ((delta.getFlags() & IModelDelta.REVEAL) != 0) {
+ delta.setFlags(delta.getFlags() & ~IModelDelta.REVEAL);
+ // Look for the reveal flag in the child deltas. If
+ // A child delta has the reveal flag, do not set the
+ // top element yet.
+ boolean setTopItem = true;
+ IModelDelta[] childDeltas = delta.getChildDeltas();
+ for (int i = 0; i < childDeltas.length; i++) {
+ IModelDelta childDelta = childDeltas[i];
+ int modelIndex = childDelta.getIndex();
+ if (modelIndex >= 0 && (childDelta.getFlags() & IModelDelta.REVEAL) != 0) {
+ setTopItem = false;
+ }
+ }
+
+ if (setTopItem) {
+ Assert.isTrue(fPendingSetTopItem == null);
+
+ fPendingSetTopItem = new PendingRevealDelta(treePath, delta);
+ viewer.addViewerUpdateListener(fPendingSetTopItem);
+ }
+ }
+
+ // If we know the child count of the element, look for the reveal
+ // flag in the child deltas. For the children with reveal flag start
+ // a new update.
+ // If the child delta's index is out of range, strip the reveal flag
+ // since it is no longer applicable.
+ if (knowsChildCount) {
+ int childCount = viewer.getChildCount(treePath);
+ if (childCount >= 0) {
+ ModelDelta[] childDeltas = (ModelDelta[])delta.getChildDeltas();
+ for (int i = 0; i < childDeltas.length; i++) {
+ ModelDelta childDelta = childDeltas[i];
+ int modelIndex = childDelta.getIndex();
+ if (modelIndex >= 0 && (childDelta.getFlags() & IModelDelta.REVEAL) != 0) {
+ if (modelIndex < childCount) {
+ fContentProvider.doUpdateElement(treePath, modelIndex);
+ } else {
+ childDelta.setFlags(childDelta.getFlags() & ~IModelDelta.REVEAL);
+ }
+ }
+ }
+ }
+ }
+
+ // Some children of this element were just updated. If all its
+ // children are now realized, clear out any elements that still
+ // have flags, because they represent elements that were removed.
+ if ((checkChildrenRealized &&
+ !fContentProvider.areChildrenUpdatesPending(treePath) &&
+ fContentProvider.getViewer().getElementChildrenRealized(treePath)) ||
+ (knowsHasChildren && !viewer.getHasChildren(treePath)) )
+ {
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("\tRESTORE CONTENT: " + treePath.getLastSegment()); //$NON-NLS-1$
+ }
+ delta.setFlags(delta.getFlags() & ~IModelDelta.CONTENT);
+ }
+ }
+
+ /**
+ * Utility that reveals the saved top item in the viewer. It listens for
+ * all content updates to complete in order to avoid having the desired top item
+ * scroll out as view content is filled in.
+ * <br>
+ * Revealing some elements can trigger expanding some of elements
+ * that have been just revealed. Therefore, we have to check one
+ * more time after the new triggered updates are completed if we
+ * have to set again the top index
+ */
+ private class PendingRevealDelta implements IViewerUpdateListener {
+
+ private final TreePath fPathToReveal;
+ private final ModelDelta fRevealDelta;
+
+ PendingRevealDelta(TreePath pathToReveal, ModelDelta revealDelta) {
+ fPathToReveal = pathToReveal;
+ fRevealDelta = revealDelta;
+ }
+
+ /**
+ * Counter that tracks how many time the viewer updates were completed.
+ */
+ private int fCounter = 0;
+ private Object fModelInput = fPendingState.getElement();
+
+ @Override
public void viewerUpdatesComplete() {
- Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
-
- IInternalTreeModelViewer viewer = fContentProvider.getViewer();
- if (viewer == null || fPendingSetTopItem != this) {
- return;
- }
-
- TreePath topPath = viewer.getTopElementPath();
- if (!fPathToReveal.equals(topPath)) {
- TreePath parentPath = fPathToReveal.getParentPath();
- int index = viewer.findElementIndex(parentPath, fPathToReveal.getLastSegment());
- if (index >= 0) {
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("\tRESTORE REVEAL: " + fPathToReveal.getLastSegment()); //$NON-NLS-1$
- }
- viewer.reveal(parentPath, index);
-
- }
- }
-
- fCounter++;
- // in case the pending state was already set to null, we assume that
- // all others elements are restored, so we don't expect that REVEAL will
- // trigger other updates
- if (fCounter > 1 || fPendingState == null) {
- dispose();
- }
- }
-
- @Override
+ Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
+
+ IInternalTreeModelViewer viewer = fContentProvider.getViewer();
+ if (viewer == null || fPendingSetTopItem != this) {
+ return;
+ }
+
+ TreePath topPath = viewer.getTopElementPath();
+ if (!fPathToReveal.equals(topPath)) {
+ TreePath parentPath = fPathToReveal.getParentPath();
+ int index = viewer.findElementIndex(parentPath, fPathToReveal.getLastSegment());
+ if (index >= 0) {
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("\tRESTORE REVEAL: " + fPathToReveal.getLastSegment()); //$NON-NLS-1$
+ }
+ viewer.reveal(parentPath, index);
+
+ }
+ }
+
+ fCounter++;
+ // in case the pending state was already set to null, we assume that
+ // all others elements are restored, so we don't expect that REVEAL will
+ // trigger other updates
+ if (fCounter > 1 || fPendingState == null) {
+ dispose();
+ }
+ }
+
+ @Override
public void viewerUpdatesBegin() {}
- @Override
+ @Override
public void updateStarted(IViewerUpdate update) {}
- @Override
+ @Override
public void updateComplete(IViewerUpdate update) {}
- /**
- * Returns delta that is used to reveal the item.
- * @return delta to be revealed.
- */
- public ModelDelta getDelta() {
- return fRevealDelta;
- }
-
- /**
- * Resets the item
- */
- public void dispose() {
- // top item is set
- fPendingSetTopItem = null;
-
- IInternalTreeModelViewer viewer = fContentProvider.getViewer();
- if (viewer == null) {
+ /**
+ * Returns delta that is used to reveal the item.
+ * @return delta to be revealed.
+ */
+ public ModelDelta getDelta() {
+ return fRevealDelta;
+ }
+
+ /**
+ * Resets the item
+ */
+ public void dispose() {
+ // top item is set
+ fPendingSetTopItem = null;
+
+ IInternalTreeModelViewer viewer = fContentProvider.getViewer();
+ if (viewer == null) {
return;
}
- // remove myself as viewer update listener
- viewer.removeViewerUpdateListener(this);
-
- if (fPendingState == null) {
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("STATE RESTORE COMPELTE: " + fPendingState); //$NON-NLS-1$
- }
- notifyStateUpdate(fModelInput, STATE_RESTORE_SEQUENCE_COMPLETE, null);
- } else {
- checkIfRestoreComplete();
- }
- }
-
- }
-
- /**
- * Restore selection/expansion based on items already in the viewer
- * @param delta the {@link ModelDelta} to restore from
- */
- protected void doInitialRestore(ModelDelta delta) {
- // Find the reveal delta and mark nodes on its path
- // to reveal as elements are updated.
- markRevealDelta(delta);
-
- // Restore visible items.
- // Note (Pawel Piech): the initial list of items is normally
- // empty, so in most cases the code below does not do anything.
- // Instead doRestore() is called when various updates complete.
- int count = fContentProvider.getViewer().getChildCount(TreePath.EMPTY);
- for (int i = 0; i < count; i++) {
- Object data = fContentProvider.getViewer().getChildElement(TreePath.EMPTY, i);
- if (data != null) {
- restorePendingStateOnUpdate(new TreePath(new Object[]{data}), i, false, false, false);
- }
- }
-
- }
-
- /**
- * Finds the delta with the reveal flag, then it walks up this
- * delta and marks all the parents of it with the reveal flag.
- * These flags are then used by the restore logic to restore
- * and reveal all the nodes leading up to the element that should
- * be ultimately at the top.
- * @param rootDelta Delta to search
- * @return The node just under the rootDelta which contains
- * the reveal flag. <code>null</code> if no reveal flag was found.
- */
- private ModelDelta markRevealDelta(ModelDelta rootDelta) {
- final ModelDelta[] revealDelta = new ModelDelta[1];
+ // remove myself as viewer update listener
+ viewer.removeViewerUpdateListener(this);
+
+ if (fPendingState == null) {
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("STATE RESTORE COMPELTE: " + fPendingState); //$NON-NLS-1$
+ }
+ notifyStateUpdate(fModelInput, STATE_RESTORE_SEQUENCE_COMPLETE, null);
+ } else {
+ checkIfRestoreComplete();
+ }
+ }
+
+ }
+
+ /**
+ * Restore selection/expansion based on items already in the viewer
+ * @param delta the {@link ModelDelta} to restore from
+ */
+ protected void doInitialRestore(ModelDelta delta) {
+ // Find the reveal delta and mark nodes on its path
+ // to reveal as elements are updated.
+ markRevealDelta(delta);
+
+ // Restore visible items.
+ // Note (Pawel Piech): the initial list of items is normally
+ // empty, so in most cases the code below does not do anything.
+ // Instead doRestore() is called when various updates complete.
+ int count = fContentProvider.getViewer().getChildCount(TreePath.EMPTY);
+ for (int i = 0; i < count; i++) {
+ Object data = fContentProvider.getViewer().getChildElement(TreePath.EMPTY, i);
+ if (data != null) {
+ restorePendingStateOnUpdate(new TreePath(new Object[]{data}), i, false, false, false);
+ }
+ }
+
+ }
+
+ /**
+ * Finds the delta with the reveal flag, then it walks up this
+ * delta and marks all the parents of it with the reveal flag.
+ * These flags are then used by the restore logic to restore
+ * and reveal all the nodes leading up to the element that should
+ * be ultimately at the top.
+ * @param rootDelta Delta to search
+ * @return The node just under the rootDelta which contains
+ * the reveal flag. <code>null</code> if no reveal flag was found.
+ */
+ private ModelDelta markRevealDelta(ModelDelta rootDelta) {
+ final ModelDelta[] revealDelta = new ModelDelta[1];
IModelDeltaVisitor visitor = (delta, depth) -> {
if ((delta.getFlags() & IModelDelta.REVEAL) != 0) {
revealDelta[0] = (ModelDelta) delta;
@@ -1370,106 +1370,106 @@ class ViewerStateTracker {
return revealDelta[0] == null;
};
- rootDelta.accept(visitor);
- if (revealDelta[0] != null) {
- ModelDelta parentDelta = (ModelDelta)revealDelta[0].getParentDelta();
- while(parentDelta.getParentDelta() != null) {
- revealDelta[0] = parentDelta;
- revealDelta[0].setFlags(revealDelta[0].getFlags() | IModelDelta.REVEAL);
- parentDelta = (ModelDelta)parentDelta.getParentDelta();
- }
- }
- return revealDelta[0];
- }
-
- /**
- * Builds a delta with the given root delta for expansion/selection state.
- *
- * @param delta
- * root delta
- */
- private void buildViewerState(ModelDelta delta) {
- IInternalTreeModelViewer viewer = fContentProvider.getViewer();
- viewer.saveElementState(TreeModelContentProvider.EMPTY_TREE_PATH, delta, IModelDelta.SELECT | IModelDelta.EXPAND);
-
- // Add memento for top item if it is mapped to an element. The reveal memento
- // is in its own path to avoid requesting unnecessary data when restoring it.
- TreePath topElementPath = viewer.getTopElementPath();
- if (topElementPath != null) {
- ModelDelta parentDelta = delta;
- TreePath parentPath = TreeModelContentProvider.EMPTY_TREE_PATH;
- for (int i = 0; i < topElementPath.getSegmentCount(); i++) {
- Object element = topElementPath.getSegment(i);
- int index = viewer.findElementIndex(parentPath, element);
- ModelDelta childDelta = parentDelta.getChildDelta(element);
- if (childDelta == null) {
- parentDelta = parentDelta.addNode(element, index, IModelDelta.NO_CHANGE);
- } else {
- parentDelta = childDelta;
- }
- parentPath = parentPath.createChildPath(element);
- }
- parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.REVEAL);
- }
- }
-
- /**
- * Cancels any outstanding compare requests for given element and its children.
- * @param path Path of element to cancel updates for.
- */
- void cancelStateSubtreeUpdates(TreePath path) {
+ rootDelta.accept(visitor);
+ if (revealDelta[0] != null) {
+ ModelDelta parentDelta = (ModelDelta)revealDelta[0].getParentDelta();
+ while(parentDelta.getParentDelta() != null) {
+ revealDelta[0] = parentDelta;
+ revealDelta[0].setFlags(revealDelta[0].getFlags() | IModelDelta.REVEAL);
+ parentDelta = (ModelDelta)parentDelta.getParentDelta();
+ }
+ }
+ return revealDelta[0];
+ }
+
+ /**
+ * Builds a delta with the given root delta for expansion/selection state.
+ *
+ * @param delta
+ * root delta
+ */
+ private void buildViewerState(ModelDelta delta) {
+ IInternalTreeModelViewer viewer = fContentProvider.getViewer();
+ viewer.saveElementState(TreeModelContentProvider.EMPTY_TREE_PATH, delta, IModelDelta.SELECT | IModelDelta.EXPAND);
+
+ // Add memento for top item if it is mapped to an element. The reveal memento
+ // is in its own path to avoid requesting unnecessary data when restoring it.
+ TreePath topElementPath = viewer.getTopElementPath();
+ if (topElementPath != null) {
+ ModelDelta parentDelta = delta;
+ TreePath parentPath = TreeModelContentProvider.EMPTY_TREE_PATH;
+ for (int i = 0; i < topElementPath.getSegmentCount(); i++) {
+ Object element = topElementPath.getSegment(i);
+ int index = viewer.findElementIndex(parentPath, element);
+ ModelDelta childDelta = parentDelta.getChildDelta(element);
+ if (childDelta == null) {
+ parentDelta = parentDelta.addNode(element, index, IModelDelta.NO_CHANGE);
+ } else {
+ parentDelta = childDelta;
+ }
+ parentPath = parentPath.createChildPath(element);
+ }
+ parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.REVEAL);
+ }
+ }
+
+ /**
+ * Cancels any outstanding compare requests for given element and its children.
+ * @param path Path of element to cancel updates for.
+ */
+ void cancelStateSubtreeUpdates(TreePath path) {
for (Iterator<CompareRequestKey> itr = fCompareRequestsInProgress.keySet().iterator(); itr.hasNext();) {
CompareRequestKey key = itr.next();
- if (key.fPath.startsWith(path, null)) {
- ElementCompareRequest compareRequest = fCompareRequestsInProgress.get(key);
- compareRequest.cancel();
- itr.remove();
- }
- }
- }
-
- void compareFinished(ElementCompareRequest request, ModelDelta delta) {
- notifyStateUpdate(request.getViewerInput(), TreeModelContentProvider.UPDATE_COMPLETE, request);
- if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
- DebugUIPlugin.trace("\tSTATE END: " + request + " = " + false); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- fCompareRequestsInProgress.remove(new CompareRequestKey(request.getElementPath(), delta));
- if (!request.isCanceled()) {
- if (request.isEqual()) {
- delta.setElement(request.getElement());
- restorePendingStateNode(delta, request.knowsHasChildren(), request.knowChildCount(), request.checkChildrenRealized());
- } else if (request.getModelIndex() != -1) {
- // Comparison failed.
- // Check if the delta has a reveal flag, and if its index
- // matches the index of the element that it was compared
- // against. If this is the case, strip the reveal flag from
- // the delta as it is most likely not applicable anymore.
- if ((delta.getFlags() & IModelDelta.REVEAL) != 0 && delta.getIndex() == request.getModelIndex()) {
- delta.setFlags(delta.getFlags() & ~IModelDelta.REVEAL);
- }
- }
- }
- checkIfRestoreComplete();
- }
-
-
- void addStateUpdateListener(IStateUpdateListener listener) {
- fStateUpdateListeners.add(listener);
- }
-
- void removeStateUpdateListener(IStateUpdateListener listener) {
- fStateUpdateListeners.remove(listener);
- }
-
- void notifyStateUpdate(final Object input, final int type, final IViewerUpdate update) {
- if (!fStateUpdateListeners.isEmpty()) {
+ if (key.fPath.startsWith(path, null)) {
+ ElementCompareRequest compareRequest = fCompareRequestsInProgress.get(key);
+ compareRequest.cancel();
+ itr.remove();
+ }
+ }
+ }
+
+ void compareFinished(ElementCompareRequest request, ModelDelta delta) {
+ notifyStateUpdate(request.getViewerInput(), TreeModelContentProvider.UPDATE_COMPLETE, request);
+ if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
+ DebugUIPlugin.trace("\tSTATE END: " + request + " = " + false); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ fCompareRequestsInProgress.remove(new CompareRequestKey(request.getElementPath(), delta));
+ if (!request.isCanceled()) {
+ if (request.isEqual()) {
+ delta.setElement(request.getElement());
+ restorePendingStateNode(delta, request.knowsHasChildren(), request.knowChildCount(), request.checkChildrenRealized());
+ } else if (request.getModelIndex() != -1) {
+ // Comparison failed.
+ // Check if the delta has a reveal flag, and if its index
+ // matches the index of the element that it was compared
+ // against. If this is the case, strip the reveal flag from
+ // the delta as it is most likely not applicable anymore.
+ if ((delta.getFlags() & IModelDelta.REVEAL) != 0 && delta.getIndex() == request.getModelIndex()) {
+ delta.setFlags(delta.getFlags() & ~IModelDelta.REVEAL);
+ }
+ }
+ }
+ checkIfRestoreComplete();
+ }
+
+
+ void addStateUpdateListener(IStateUpdateListener listener) {
+ fStateUpdateListeners.add(listener);
+ }
+
+ void removeStateUpdateListener(IStateUpdateListener listener) {
+ fStateUpdateListeners.remove(listener);
+ }
+
+ void notifyStateUpdate(final Object input, final int type, final IViewerUpdate update) {
+ if (!fStateUpdateListeners.isEmpty()) {
for (IStateUpdateListener iStateUpdateListener : fStateUpdateListeners) {
final IStateUpdateListener listener = iStateUpdateListener;
- SafeRunner.run(new ISafeRunnable() {
- @Override
+ SafeRunner.run(new ISafeRunnable() {
+ @Override
public void run() throws Exception {
- switch (type) {
+ switch (type) {
case STATE_SAVE_SEQUENCE_BEGINS:
listener.stateSaveUpdatesBegin(input);
break;
@@ -1490,15 +1490,15 @@ class ViewerStateTracker {
break;
default:
break;
- }
- }
+ }
+ }
- @Override
+ @Override
public void handleException(Throwable exception) {
- DebugUIPlugin.log(exception);
- }
- });
- }
- }
- }
+ DebugUIPlugin.log(exception);
+ }
+ });
+ }
+ }
+ }
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerUpdateMonitor.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerUpdateMonitor.java
index 8be777195..cf706ed4a 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerUpdateMonitor.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerUpdateMonitor.java
@@ -47,111 +47,111 @@ public abstract class ViewerUpdateMonitor extends Request implements IViewerUpda
*/
private IElementContentProvider fElementContentProvider;
- /**
- * Whether this request's 'done' method has been called.
- */
- private boolean fDone = false;
-
- /**
- * Whether this request has been started
- */
- private boolean fStarted = false;
-
- /**
- * Viewer input at the time the request was made
- */
- private Object fViewerInput = null;
-
- /**
- * Whether this update has been delegated to another content provider
- * @since 3.4
- */
- private boolean fIsDelegated = false;
-
- /**
- * Presentation context
- */
- private IPresentationContext fContext;
-
- /**
- * Constructs an update for the given content provider
- *
- * @param contentProvider content provider
- * @param viewerInput Viewer input for update
- * @param elementPath path to associated model element - empty for root element
- * @param element associated model element
- * @param elementContentProvider Content provider for this update.
- * @param context Presentation contest for this update
- */
- public ViewerUpdateMonitor(TreeModelContentProvider contentProvider, Object viewerInput, TreePath elementPath, Object element, IElementContentProvider elementContentProvider, IPresentationContext context) {
- fContext = context;
+ /**
+ * Whether this request's 'done' method has been called.
+ */
+ private boolean fDone = false;
+
+ /**
+ * Whether this request has been started
+ */
+ private boolean fStarted = false;
+
+ /**
+ * Viewer input at the time the request was made
+ */
+ private Object fViewerInput = null;
+
+ /**
+ * Whether this update has been delegated to another content provider
+ * @since 3.4
+ */
+ private boolean fIsDelegated = false;
+
+ /**
+ * Presentation context
+ */
+ private IPresentationContext fContext;
+
+ /**
+ * Constructs an update for the given content provider
+ *
+ * @param contentProvider content provider
+ * @param viewerInput Viewer input for update
+ * @param elementPath path to associated model element - empty for root element
+ * @param element associated model element
+ * @param elementContentProvider Content provider for this update.
+ * @param context Presentation contest for this update
+ */
+ public ViewerUpdateMonitor(TreeModelContentProvider contentProvider, Object viewerInput, TreePath elementPath, Object element, IElementContentProvider elementContentProvider, IPresentationContext context) {
+ fContext = context;
// Bug 380288: Catch and log a race condition where the viewer input is null.
- if (viewerInput == null) {
- DebugUIPlugin.log(new NullPointerException("Input to viewer update should not be null")); //$NON-NLS-1$
- }
- fViewerInput = viewerInput;
- fElementContentProvider = elementContentProvider;
- fContentProvider = contentProvider;
- fElement = element;
- fElementPath = elementPath;
- }
-
- /**
- * Returns the scheduling rule for viewer update job.
- *
- * @return rule or <code>null</code>
- */
- protected ISchedulingRule getUpdateSchedulingRule() {
- return AsynchronousSchedulingRuleFactory.getDefault().newSerialPerObjectRule(getContentProvider());
- }
-
- /**
- * Returns the model content provider this update is being performed for.
- *
- * @return the model content provider this update is being performed for
- */
- protected TreeModelContentProvider getContentProvider() {
- return fContentProvider;
- }
-
- /**
- * Returns the element content provider to use for this request
- *
- * @return element content provider
- */
- protected IElementContentProvider getElementContentProvider() {
- return fElementContentProvider;
- }
-
- @Override
+ if (viewerInput == null) {
+ DebugUIPlugin.log(new NullPointerException("Input to viewer update should not be null")); //$NON-NLS-1$
+ }
+ fViewerInput = viewerInput;
+ fElementContentProvider = elementContentProvider;
+ fContentProvider = contentProvider;
+ fElement = element;
+ fElementPath = elementPath;
+ }
+
+ /**
+ * Returns the scheduling rule for viewer update job.
+ *
+ * @return rule or <code>null</code>
+ */
+ protected ISchedulingRule getUpdateSchedulingRule() {
+ return AsynchronousSchedulingRuleFactory.getDefault().newSerialPerObjectRule(getContentProvider());
+ }
+
+ /**
+ * Returns the model content provider this update is being performed for.
+ *
+ * @return the model content provider this update is being performed for
+ */
+ protected TreeModelContentProvider getContentProvider() {
+ return fContentProvider;
+ }
+
+ /**
+ * Returns the element content provider to use for this request
+ *
+ * @return element content provider
+ */
+ protected IElementContentProvider getElementContentProvider() {
+ return fElementContentProvider;
+ }
+
+ @Override
public final void done() {
- synchronized (this) {
- if (isDone()) {
- return;
- }
- fDone = true;
+ synchronized (this) {
+ if (isDone()) {
+ return;
+ }
+ fDone = true;
}
- scheduleViewerUpdate();
+ scheduleViewerUpdate();
}
- /**
- * Returns whether this request is done yet.
- *
- * @return True if this update is done.
- */
- protected synchronized boolean isDone() {
- return fDone;
- }
+ /**
+ * Returns whether this request is done yet.
+ *
+ * @return True if this update is done.
+ */
+ protected synchronized boolean isDone() {
+ return fDone;
+ }
- protected void scheduleViewerUpdate() {
- getContentProvider().scheduleViewerUpdate(this);
- }
+ protected void scheduleViewerUpdate() {
+ getContentProvider().scheduleViewerUpdate(this);
+ }
- /**
+ /**
* Notification this update has been completed and should now be applied to
* this update's viewer. This method is called in the UI thread.
*/
- protected abstract void performUpdate();
+ protected abstract void performUpdate();
@Override
public IPresentationContext getPresentationContext() {
@@ -183,7 +183,7 @@ public abstract class ViewerUpdateMonitor extends Request implements IViewerUpda
* @param path Element path to check.
* @return True if this update contains the given update path.
*
- * @since 3.6
+ * @since 3.6
*/
abstract boolean containsUpdate(TreePath path);
@@ -252,15 +252,15 @@ public abstract class ViewerUpdateMonitor extends Request implements IViewerUpda
@Override
public boolean equals(Object obj) {
- if (obj instanceof ViewerUpdateMonitor) {
- return doEquals((ViewerUpdateMonitor)obj);
- }
- return false;
+ if (obj instanceof ViewerUpdateMonitor) {
+ return doEquals((ViewerUpdateMonitor)obj);
+ }
+ return false;
}
@Override
public int hashCode() {
- return doHashCode();
+ return doHashCode();
}
/**
@@ -268,34 +268,34 @@ public abstract class ViewerUpdateMonitor extends Request implements IViewerUpda
* the same type of update and its updating the same elements.
* @param update Update to compare to.
* @return True if the given update is equals
- * @since 3.8
+ * @since 3.8
*/
abstract protected boolean doEquals(ViewerUpdateMonitor update);
/**
* Calculates the hash code of the given update using the same parameters as doEquals().
* @return Update's hash code.
- * @since 3.8
+ * @since 3.8
+ */
+ abstract protected int doHashCode();
+
+ /**
+ * Executes the given runnable in the UI thread. If method is called in
+ * UI thread, then runnable is executed immediately, otherwise it's executed
+ * using <code>Display.asyncExec()</code>. Runnable is not executed if update is
+ * canceled or content provider is disposed.
+ * @since 3.8
*/
- abstract protected int doHashCode();
-
- /**
- * Executes the given runnable in the UI thread. If method is called in
- * UI thread, then runnable is executed immediately, otherwise it's executed
- * using <code>Display.asyncExec()</code>. Runnable is not executed if update is
- * canceled or content provider is disposed.
- * @since 3.8
- */
protected void execInDisplayThread(Runnable runnable) {
- ITreeModelViewer viewer = getContentProvider().getViewer();
- if (viewer != null && !isCanceled()) {
- Display display = viewer.getDisplay();
- if (Thread.currentThread() == display.getThread()) {
- runnable.run();
- } else {
- display.asyncExec(runnable);
- }
- }
+ ITreeModelViewer viewer = getContentProvider().getViewer();
+ if (viewer != null && !isCanceled()) {
+ Display display = viewer.getDisplay();
+ if (Thread.currentThread() == display.getThread()) {
+ runnable.run();
+ } else {
+ display.asyncExec(runnable);
+ }
+ }
}
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualCopyToClipboardActionDelegate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualCopyToClipboardActionDelegate.java
index 2425e4e3c..cdc5dfd0b 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualCopyToClipboardActionDelegate.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualCopyToClipboardActionDelegate.java
@@ -65,50 +65,50 @@ public class VirtualCopyToClipboardActionDelegate extends AbstractDebugActionDel
private class VirtualViewerListener implements ILabelUpdateListener, IVirtualItemListener {
VirtualTreeModelViewer fVirtualViewer;
- IProgressMonitor fProgressMonitor;
- int fSelectionRootDepth;
+ IProgressMonitor fProgressMonitor;
+ int fSelectionRootDepth;
Set<VirtualItem> fItemsToUpdate;
- @Override
+ @Override
public void labelUpdateStarted(ILabelUpdate update) {}
- @Override
+ @Override
public void labelUpdateComplete(ILabelUpdate update) {
- VirtualItem updatedItem = fVirtualViewer.findItem(update.getElementPath());
- if (fItemsToUpdate.remove(updatedItem)) {
- incrementProgress(1);
- }
- }
- @Override
+ VirtualItem updatedItem = fVirtualViewer.findItem(update.getElementPath());
+ if (fItemsToUpdate.remove(updatedItem)) {
+ incrementProgress(1);
+ }
+ }
+ @Override
public void labelUpdatesBegin() {
- }
- @Override
+ }
+ @Override
public void labelUpdatesComplete() {
- }
+ }
- @Override
+ @Override
public void revealed(VirtualItem item) {
- }
+ }
- @Override
+ @Override
public void disposed(VirtualItem item) {
- if (fItemsToUpdate.remove(item)) {
- incrementProgress(1);
- }
- }
-
- private void incrementProgress(int count) {
- IProgressMonitor pm;
- synchronized (VirtualCopyToClipboardActionDelegate.this) {
- pm = fProgressMonitor;
- }
- if (pm != null) {
- pm.worked(count);
- if (fItemsToUpdate.isEmpty()) {
- pm.done();
- }
- }
- }
- }
+ if (fItemsToUpdate.remove(item)) {
+ incrementProgress(1);
+ }
+ }
+
+ private void incrementProgress(int count) {
+ IProgressMonitor pm;
+ synchronized (VirtualCopyToClipboardActionDelegate.this) {
+ pm = fProgressMonitor;
+ }
+ if (pm != null) {
+ pm.worked(count);
+ if (fItemsToUpdate.isEmpty()) {
+ pm.done();
+ }
+ }
+ }
+ }
/**
* @see AbstractDebugActionDelegate#initialize(IAction, ISelection)
@@ -176,76 +176,76 @@ public class VirtualCopyToClipboardActionDelegate extends AbstractDebugActionDel
Set<VirtualItem> fItemsToCopy = Collections.EMPTY_SET;
Set<VirtualItem> fItemsToValidate = Collections.EMPTY_SET;
- @Override
+ @Override
public boolean isItemVisible(VirtualItem item) {
- return fItemsToValidate.contains(item);
- }
+ return fItemsToValidate.contains(item);
+ }
- @Override
+ @Override
public void showItem(VirtualItem item) {
- }
+ }
void setItemsToCopy(Set<VirtualItem> itemsToCopy) {
- fItemsToCopy = itemsToCopy;
+ fItemsToCopy = itemsToCopy;
fItemsToValidate = new HashSet<>();
for (VirtualItem itemToCopy : itemsToCopy) {
- while (itemToCopy != null) {
- fItemsToValidate.add(itemToCopy);
- itemToCopy = itemToCopy.getParent();
- }
- }
- }
+ while (itemToCopy != null) {
+ fItemsToValidate.add(itemToCopy);
+ itemToCopy = itemToCopy.getParent();
+ }
+ }
+ }
}
private VirtualTreeModelViewer initVirtualViewer(TreeModelViewer clientViewer, VirtualViewerListener listener, ItemsToCopyVirtualItemValidator validator) {
- Object input = clientViewer.getInput();
- ModelDelta stateDelta = new ModelDelta(input, IModelDelta.NO_CHANGE);
- clientViewer.saveElementState(TreePath.EMPTY, stateDelta, IModelDelta.EXPAND);
- VirtualTreeModelViewer virtualViewer = new VirtualTreeModelViewer(
- clientViewer.getDisplay(),
- SWT.VIRTUAL,
- clientViewer.getPresentationContext(),
- validator);
- virtualViewer.setFilters(clientViewer.getFilters());
- virtualViewer.addLabelUpdateListener(listener);
- virtualViewer.getTree().addItemListener(listener);
- String[] columns = clientViewer.getPresentationContext().getColumns();
- virtualViewer.setInput(input);
- if (virtualViewer.canToggleColumns()) {
- virtualViewer.setShowColumns(clientViewer.isShowColumns());
- virtualViewer.setVisibleColumns(columns);
- }
- virtualViewer.updateViewer(stateDelta);
-
- // Parse selected items from client viewer and add them to the virtual viewer selection.
- listener.fSelectionRootDepth = Integer.MAX_VALUE;
- TreeItem[] selection = getSelectedItems(clientViewer);
+ Object input = clientViewer.getInput();
+ ModelDelta stateDelta = new ModelDelta(input, IModelDelta.NO_CHANGE);
+ clientViewer.saveElementState(TreePath.EMPTY, stateDelta, IModelDelta.EXPAND);
+ VirtualTreeModelViewer virtualViewer = new VirtualTreeModelViewer(
+ clientViewer.getDisplay(),
+ SWT.VIRTUAL,
+ clientViewer.getPresentationContext(),
+ validator);
+ virtualViewer.setFilters(clientViewer.getFilters());
+ virtualViewer.addLabelUpdateListener(listener);
+ virtualViewer.getTree().addItemListener(listener);
+ String[] columns = clientViewer.getPresentationContext().getColumns();
+ virtualViewer.setInput(input);
+ if (virtualViewer.canToggleColumns()) {
+ virtualViewer.setShowColumns(clientViewer.isShowColumns());
+ virtualViewer.setVisibleColumns(columns);
+ }
+ virtualViewer.updateViewer(stateDelta);
+
+ // Parse selected items from client viewer and add them to the virtual viewer selection.
+ listener.fSelectionRootDepth = Integer.MAX_VALUE;
+ TreeItem[] selection = getSelectedItems(clientViewer);
Set<VirtualItem> vSelection = new HashSet<>(selection.length * 4 / 3);
- for (int i = 0; i < selection.length; i++) {
- TreePath parentPath = fClientViewer.getTreePathFromItem(selection[i].getParentItem());
- listener.fSelectionRootDepth = Math.min(parentPath.getSegmentCount() + 1, listener.fSelectionRootDepth);
- VirtualItem parentVItem = virtualViewer.findItem(parentPath);
- if (parentVItem != null) {
- int index = -1;
- TreeItem parentItem = selection[i].getParentItem();
- if (parentItem != null) {
- index = parentItem.indexOf(selection[i]);
- } else {
- Tree parentTree = selection[i].getParent();
- index = parentTree.indexOf(selection[i]);
- }
- index = ((ITreeModelContentProvider)clientViewer.getContentProvider()).viewToModelIndex(parentPath, index);
- vSelection.add( parentVItem.getItem(new Index(index)) );
- }
- }
- validator.setItemsToCopy(vSelection);
+ for (int i = 0; i < selection.length; i++) {
+ TreePath parentPath = fClientViewer.getTreePathFromItem(selection[i].getParentItem());
+ listener.fSelectionRootDepth = Math.min(parentPath.getSegmentCount() + 1, listener.fSelectionRootDepth);
+ VirtualItem parentVItem = virtualViewer.findItem(parentPath);
+ if (parentVItem != null) {
+ int index = -1;
+ TreeItem parentItem = selection[i].getParentItem();
+ if (parentItem != null) {
+ index = parentItem.indexOf(selection[i]);
+ } else {
+ Tree parentTree = selection[i].getParent();
+ index = parentTree.indexOf(selection[i]);
+ }
+ index = ((ITreeModelContentProvider)clientViewer.getContentProvider()).viewToModelIndex(parentPath, index);
+ vSelection.add( parentVItem.getItem(new Index(index)) );
+ }
+ }
+ validator.setItemsToCopy(vSelection);
listener.fItemsToUpdate = new HashSet<>(vSelection);
- virtualViewer.getTree().validate();
- return virtualViewer;
+ virtualViewer.getTree().validate();
+ return virtualViewer;
}
protected TreeItem[] getSelectedItems(TreeModelViewer clientViewer) {
- return clientViewer.getTree().getSelection();
+ return clientViewer.getTree().getSelection();
}
/**
@@ -254,9 +254,9 @@ public class VirtualCopyToClipboardActionDelegate extends AbstractDebugActionDel
*/
@Override
public void run(final IAction action) {
- if (fClientViewer.getSelection().isEmpty()) {
- return;
- }
+ if (fClientViewer.getSelection().isEmpty()) {
+ return;
+ }
final VirtualViewerListener listener = new VirtualViewerListener();
ItemsToCopyVirtualItemValidator validator = new ItemsToCopyVirtualItemValidator();
@@ -270,17 +270,17 @@ public class VirtualCopyToClipboardActionDelegate extends AbstractDebugActionDel
IRunnableWithProgress runnable = new IRunnableWithProgress() {
@Override
public void run(final IProgressMonitor m) throws InvocationTargetException, InterruptedException {
- synchronized(listener) {
- listener.fProgressMonitor = m;
- listener.fProgressMonitor.beginTask(DebugUIPlugin.removeAccelerators(getAction().getText()), listener.fItemsToUpdate.size());
- }
-
- while (!listener.fItemsToUpdate.isEmpty() && !listener.fProgressMonitor.isCanceled()) {
- Thread.sleep(1);
- }
- synchronized(listener) {
- listener.fProgressMonitor = null;
- }
+ synchronized(listener) {
+ listener.fProgressMonitor = m;
+ listener.fProgressMonitor.beginTask(DebugUIPlugin.removeAccelerators(getAction().getText()), listener.fItemsToUpdate.size());
+ }
+
+ while (!listener.fItemsToUpdate.isEmpty() && !listener.fProgressMonitor.isCanceled()) {
+ Thread.sleep(1);
+ }
+ synchronized(listener) {
+ listener.fProgressMonitor = null;
+ }
}
};
try {
@@ -293,24 +293,24 @@ public class VirtualCopyToClipboardActionDelegate extends AbstractDebugActionDel
}
if (!monitor.isCanceled()) {
- copySelectionToClipboard(virtualViewer, validator.fItemsToCopy, listener.fSelectionRootDepth);
+ copySelectionToClipboard(virtualViewer, validator.fItemsToCopy, listener.fSelectionRootDepth);
}
- virtualViewer.removeLabelUpdateListener(listener);
- virtualViewer.getTree().removeItemListener(listener);
+ virtualViewer.removeLabelUpdateListener(listener);
+ virtualViewer.getTree().removeItemListener(listener);
virtualViewer.dispose();
}
private void copySelectionToClipboard(VirtualTreeModelViewer virtualViewer, Set<VirtualItem> itemsToCopy, int selectionRootDepth) {
- StringBuffer buffer = new StringBuffer();
- writeItemToBuffer (virtualViewer.getTree(), itemsToCopy, buffer, -selectionRootDepth);
- writeBufferToClipboard(buffer);
+ StringBuffer buffer = new StringBuffer();
+ writeItemToBuffer (virtualViewer.getTree(), itemsToCopy, buffer, -selectionRootDepth);
+ writeBufferToClipboard(buffer);
}
protected void writeItemToBuffer(VirtualItem item, Set<VirtualItem> itemsToCopy, StringBuffer buffer, int indent) {
- if (itemsToCopy.contains(item)) {
- append(item, buffer, indent);
- }
+ if (itemsToCopy.contains(item)) {
+ append(item, buffer, indent);
+ }
VirtualItem[] children = item.getItems();
if (children != null) {
for (int i = 0; i < children.length; i++) {
@@ -324,8 +324,8 @@ public class VirtualCopyToClipboardActionDelegate extends AbstractDebugActionDel
return;
}
- TextTransfer plainTextTransfer = TextTransfer.getInstance();
- Clipboard clipboard= new Clipboard(fClientViewer.getControl().getDisplay());
+ TextTransfer plainTextTransfer = TextTransfer.getInstance();
+ Clipboard clipboard= new Clipboard(fClientViewer.getControl().getDisplay());
try {
clipboard.setContents(
new String[]{buffer.toString()},
@@ -338,7 +338,7 @@ public class VirtualCopyToClipboardActionDelegate extends AbstractDebugActionDel
writeBufferToClipboard(buffer);
}
} finally {
- clipboard.dispose();
+ clipboard.dispose();
}
}
@@ -359,11 +359,11 @@ public class VirtualCopyToClipboardActionDelegate extends AbstractDebugActionDel
@Override
protected boolean getEnableStateForSelection(IStructuredSelection selection) {
- if (selection.isEmpty()) {
- return true;
- } else {
- return super.getEnableStateForSelection(selection);
- }
+ if (selection.isEmpty()) {
+ return true;
+ } else {
+ return super.getEnableStateForSelection(selection);
+ }
}
@Override
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualFindAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualFindAction.java
index ba26f4622..8a9d49627 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualFindAction.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualFindAction.java
@@ -62,69 +62,69 @@ import com.ibm.icu.text.MessageFormat;
*/
public class VirtualFindAction extends Action implements IUpdate {
- private TreeModelViewer fClientViewer;
+ private TreeModelViewer fClientViewer;
private class VirtualViewerListener implements IViewerUpdateListener, ILabelUpdateListener {
- private boolean fViewerUpdatesComplete = false;
- private boolean fLabelUpdatesComplete = false;
- private IProgressMonitor fProgressMonitor;
- private int fRemainingUpdatesCount = 0;
+ private boolean fViewerUpdatesComplete = false;
+ private boolean fLabelUpdatesComplete = false;
+ private IProgressMonitor fProgressMonitor;
+ private int fRemainingUpdatesCount = 0;
- @Override
+ @Override
public void labelUpdateStarted(ILabelUpdate update) {}
- @Override
+ @Override
public void labelUpdateComplete(ILabelUpdate update) {
- incrementProgress(1);
- }
- @Override
+ incrementProgress(1);
+ }
+ @Override
public void labelUpdatesBegin() {
- fLabelUpdatesComplete = false;
- }
- @Override
+ fLabelUpdatesComplete = false;
+ }
+ @Override
public void labelUpdatesComplete() {
- fLabelUpdatesComplete = true;
- completeProgress();
- }
+ fLabelUpdatesComplete = true;
+ completeProgress();
+ }
- @Override
+ @Override
public void updateStarted(IViewerUpdate update) {}
- @Override
+ @Override
public void updateComplete(IViewerUpdate update) {
- if (update instanceof IChildrenUpdate) {
- incrementProgress(((IChildrenUpdate)update).getLength());
- }
- }
- @Override
+ if (update instanceof IChildrenUpdate) {
+ incrementProgress(((IChildrenUpdate)update).getLength());
+ }
+ }
+ @Override
public void viewerUpdatesBegin() {
- fViewerUpdatesComplete = false;
- }
- @Override
+ fViewerUpdatesComplete = false;
+ }
+ @Override
public void viewerUpdatesComplete() {
- fViewerUpdatesComplete = true;
- completeProgress();
- }
-
- private void completeProgress() {
- IProgressMonitor pm;
- synchronized (this) {
- pm = fProgressMonitor;
- }
- if (pm != null && fLabelUpdatesComplete && fViewerUpdatesComplete) {
- pm.done();
- }
- }
-
- private void incrementProgress(int count) {
- IProgressMonitor pm;
- synchronized (this) {
- pm = fProgressMonitor;
- fRemainingUpdatesCount -= count;
- }
- if (pm != null && fLabelUpdatesComplete && fViewerUpdatesComplete) {
- pm.worked(count);
- }
- }
+ fViewerUpdatesComplete = true;
+ completeProgress();
+ }
+
+ private void completeProgress() {
+ IProgressMonitor pm;
+ synchronized (this) {
+ pm = fProgressMonitor;
+ }
+ if (pm != null && fLabelUpdatesComplete && fViewerUpdatesComplete) {
+ pm.done();
+ }
+ }
+
+ private void incrementProgress(int count) {
+ IProgressMonitor pm;
+ synchronized (this) {
+ pm = fProgressMonitor;
+ fRemainingUpdatesCount -= count;
+ }
+ if (pm != null && fLabelUpdatesComplete && fViewerUpdatesComplete) {
+ pm.worked(count);
+ }
+ }
}
@@ -133,26 +133,26 @@ public class VirtualFindAction extends Action implements IUpdate {
private Map<VirtualItem, String> fTextCache = new HashMap<>();
public FindLabelProvider(VirtualTreeModelViewer viewer, List<VirtualItem> items) {
- fVirtualViewer = viewer;
- for (int i = 0; i < items.size(); i++) {
- VirtualItem item = items.get(i);
- fTextCache.put(item, fVirtualViewer.getText(item, 0));
- }
+ fVirtualViewer = viewer;
+ for (int i = 0; i < items.size(); i++) {
+ VirtualItem item = items.get(i);
+ fTextCache.put(item, fVirtualViewer.getText(item, 0));
+ }
}
@Override
public Image getImage(Object element) {
- return fVirtualViewer.getImage((VirtualItem) element, 0);
+ return fVirtualViewer.getImage((VirtualItem) element, 0);
}
@Override
public String getText(Object element) {
- return fTextCache.get(element);
+ return fTextCache.get(element);
}
}
public VirtualFindAction(TreeModelViewer viewer) {
- fClientViewer = viewer;
+ fClientViewer = viewer;
setText(ActionMessages.FindAction_0);
setId(DebugUIPlugin.getUniqueIdentifier() + ".FindElementAction"); //$NON-NLS-1$
@@ -162,31 +162,31 @@ public class VirtualFindAction extends Action implements IUpdate {
}
private VirtualTreeModelViewer initVirtualViewer(TreeModelViewer clientViewer, VirtualViewerListener listener) {
- Object input = clientViewer.getInput();
- ModelDelta stateDelta = new ModelDelta(input, IModelDelta.NO_CHANGE);
- clientViewer.saveElementState(TreePath.EMPTY, stateDelta, IModelDelta.EXPAND);
- listener.fRemainingUpdatesCount = calcUpdatesCount(stateDelta);
- VirtualTreeModelViewer fVirtualViewer = new VirtualTreeModelViewer(
- clientViewer.getDisplay(),
- SWT.NONE,
- clientViewer.getPresentationContext());
- fVirtualViewer.setFilters(clientViewer.getFilters());
- fVirtualViewer.addViewerUpdateListener(listener);
- fVirtualViewer.addLabelUpdateListener(listener);
- String[] columns = clientViewer.getPresentationContext().getColumns();
- fVirtualViewer.setInput(input);
- if (fVirtualViewer.canToggleColumns()) {
- fVirtualViewer.setShowColumns(clientViewer.isShowColumns());
- fVirtualViewer.setVisibleColumns(columns);
- }
- fVirtualViewer.updateViewer(stateDelta);
- return fVirtualViewer;
+ Object input = clientViewer.getInput();
+ ModelDelta stateDelta = new ModelDelta(input, IModelDelta.NO_CHANGE);
+ clientViewer.saveElementState(TreePath.EMPTY, stateDelta, IModelDelta.EXPAND);
+ listener.fRemainingUpdatesCount = calcUpdatesCount(stateDelta);
+ VirtualTreeModelViewer fVirtualViewer = new VirtualTreeModelViewer(
+ clientViewer.getDisplay(),
+ SWT.NONE,
+ clientViewer.getPresentationContext());
+ fVirtualViewer.setFilters(clientViewer.getFilters());
+ fVirtualViewer.addViewerUpdateListener(listener);
+ fVirtualViewer.addLabelUpdateListener(listener);
+ String[] columns = clientViewer.getPresentationContext().getColumns();
+ fVirtualViewer.setInput(input);
+ if (fVirtualViewer.canToggleColumns()) {
+ fVirtualViewer.setShowColumns(clientViewer.isShowColumns());
+ fVirtualViewer.setVisibleColumns(columns);
+ }
+ fVirtualViewer.updateViewer(stateDelta);
+ return fVirtualViewer;
}
@Override
public void run() {
- final VirtualViewerListener listener = new VirtualViewerListener();
- VirtualTreeModelViewer virtualViewer = initVirtualViewer(fClientViewer, listener);
+ final VirtualViewerListener listener = new VirtualViewerListener();
+ VirtualTreeModelViewer virtualViewer = initVirtualViewer(fClientViewer, listener);
ProgressMonitorDialog dialog = new TimeTriggeredProgressMonitorDialog(fClientViewer.getControl().getShell(), 500);
final IProgressMonitor monitor = dialog.getProgressMonitor();
@@ -194,23 +194,23 @@ public class VirtualFindAction extends Action implements IUpdate {
try {
dialog.run(
- true, true,
- new IRunnableWithProgress() {
- @Override
+ true, true,
+ new IRunnableWithProgress() {
+ @Override
public void run(final IProgressMonitor m) throws InvocationTargetException, InterruptedException {
- synchronized(listener) {
- listener.fProgressMonitor = m;
- listener.fProgressMonitor.beginTask(DebugUIPlugin.removeAccelerators(getText()), listener.fRemainingUpdatesCount);
- }
-
- while ((!listener.fLabelUpdatesComplete || !listener.fViewerUpdatesComplete) && !listener.fProgressMonitor.isCanceled()) {
- Thread.sleep(1);
- }
- synchronized(listener) {
- listener.fProgressMonitor = null;
- }
- }
- });
+ synchronized(listener) {
+ listener.fProgressMonitor = m;
+ listener.fProgressMonitor.beginTask(DebugUIPlugin.removeAccelerators(getText()), listener.fRemainingUpdatesCount);
+ }
+
+ while ((!listener.fLabelUpdatesComplete || !listener.fViewerUpdatesComplete) && !listener.fProgressMonitor.isCanceled()) {
+ Thread.sleep(1);
+ }
+ synchronized(listener) {
+ listener.fProgressMonitor = null;
+ }
+ }
+ });
} catch (InvocationTargetException e) {
DebugUIPlugin.log(e);
return;
@@ -225,30 +225,30 @@ public class VirtualFindAction extends Action implements IUpdate {
FindLabelProvider labelProvider = new FindLabelProvider(virtualViewer, list);
VirtualItem result = performFind(list, labelProvider);
if (result != null) {
- setSelectionToClient(virtualViewer, labelProvider, result);
+ setSelectionToClient(virtualViewer, labelProvider, result);
}
}
- virtualViewer.removeLabelUpdateListener(listener);
- virtualViewer.removeViewerUpdateListener(listener);
- virtualViewer.dispose();
+ virtualViewer.removeLabelUpdateListener(listener);
+ virtualViewer.removeViewerUpdateListener(listener);
+ virtualViewer.dispose();
}
private int calcUpdatesCount(IModelDelta stateDelta) {
- final int[] count = new int[] {0};
- stateDelta.accept( new IModelDeltaVisitor() {
- @Override
+ final int[] count = new int[] {0};
+ stateDelta.accept( new IModelDeltaVisitor() {
+ @Override
public boolean visit(IModelDelta delta, int depth) {
- if ((delta.getFlags() & IModelDelta.EXPAND) != 0) {
- count[0] += delta.getChildCount();
- return true;
- }
- return false;
- }
- });
-
- // Double it to account for separate element and label update ticks.
- return count[0] * 2;
+ if ((delta.getFlags() & IModelDelta.EXPAND) != 0) {
+ count[0] += delta.getChildCount();
+ return true;
+ }
+ return false;
+ }
+ });
+
+ // Double it to account for separate element and label update ticks.
+ return count[0] * 2;
}
private void collectAllChildren(VirtualItem element, List<VirtualItem> collect) {
@@ -265,52 +265,52 @@ public class VirtualFindAction extends Action implements IUpdate {
protected VirtualItem performFind(List<VirtualItem> items, FindLabelProvider labelProvider) {
FindElementDialog dialog = new FindElementDialog(
- fClientViewer.getControl().getShell(),
- labelProvider,
- items.toArray());
+ fClientViewer.getControl().getShell(),
+ labelProvider,
+ items.toArray());
dialog.setTitle(ActionMessages.FindDialog_3);
dialog.setMessage(ActionMessages.FindDialog_1);
if (dialog.open() == Window.OK) {
Object[] elements = dialog.getResult();
if (elements.length == 1) {
- return (VirtualItem)elements[0];
+ return (VirtualItem)elements[0];
}
}
return null;
}
protected void setSelectionToClient(VirtualTreeModelViewer virtualViewer, ILabelProvider labelProvider, VirtualItem findItem) {
- virtualViewer.getTree().setSelection(new VirtualItem[] { findItem } );
- ModelDelta stateDelta = new ModelDelta(virtualViewer.getInput(), IModelDelta.NO_CHANGE);
- virtualViewer.saveElementState(TreePath.EMPTY, stateDelta, IModelDelta.SELECT);
- // Set the force flag to all select delta in order to override model's selection policy.
- stateDelta.accept(new IModelDeltaVisitor() {
- @Override
+ virtualViewer.getTree().setSelection(new VirtualItem[] { findItem } );
+ ModelDelta stateDelta = new ModelDelta(virtualViewer.getInput(), IModelDelta.NO_CHANGE);
+ virtualViewer.saveElementState(TreePath.EMPTY, stateDelta, IModelDelta.SELECT);
+ // Set the force flag to all select delta in order to override model's selection policy.
+ stateDelta.accept(new IModelDeltaVisitor() {
+ @Override
public boolean visit(IModelDelta delta, int depth) {
- if ((delta.getFlags() & IModelDelta.SELECT) != 0) {
- ((ModelDelta)delta).setFlags(delta.getFlags() | IModelDelta.FORCE);
- }
- return true;
- }
- });
- fClientViewer.updateViewer(stateDelta);
-
- ISelection selection = fClientViewer.getSelection();
- if (!selection.isEmpty() &&
- selection instanceof IStructuredSelection &&
- ((IStructuredSelection)selection).getFirstElement().equals(findItem.getData()) ) {
- } else {
- DebugUIPlugin.errorDialog(
- fClientViewer.getControl().getShell(),
- ActionMessages.VirtualFindAction_0,
+ if ((delta.getFlags() & IModelDelta.SELECT) != 0) {
+ ((ModelDelta)delta).setFlags(delta.getFlags() | IModelDelta.FORCE);
+ }
+ return true;
+ }
+ });
+ fClientViewer.updateViewer(stateDelta);
+
+ ISelection selection = fClientViewer.getSelection();
+ if (!selection.isEmpty() &&
+ selection instanceof IStructuredSelection &&
+ ((IStructuredSelection)selection).getFirstElement().equals(findItem.getData()) ) {
+ } else {
+ DebugUIPlugin.errorDialog(
+ fClientViewer.getControl().getShell(),
+ ActionMessages.VirtualFindAction_0,
MessageFormat.format(ActionMessages.VirtualFindAction_1, new Object[] { labelProvider.getText(findItem) }),
- new Status(IStatus.ERROR, DebugUIPlugin.getUniqueIdentifier(), ActionMessages.VirtualFindAction_1));
- }
+ new Status(IStatus.ERROR, DebugUIPlugin.getUniqueIdentifier(), ActionMessages.VirtualFindAction_1));
+ }
}
@Override
public void update() {
- setEnabled( fClientViewer.getInput() != null && fClientViewer.getChildCount(TreePath.EMPTY) > 0 );
+ setEnabled( fClientViewer.getInput() != null && fClientViewer.getChildCount(TreePath.EMPTY) > 0 );
}
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ICheckUpdate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ICheckUpdate.java
index 4be545f67..14afa964f 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ICheckUpdate.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ICheckUpdate.java
@@ -22,18 +22,18 @@ package org.eclipse.debug.internal.ui.viewers.model.provisional;
*/
public interface ICheckUpdate extends ILabelUpdate {
- /**
- * Property of the presentation context which indicates that the viewer
- * has the check box style.
- */
- String PROP_CHECK = "org.eclipse.debug.ui.check"; //$NON-NLS-1$
+ /**
+ * Property of the presentation context which indicates that the viewer
+ * has the check box style.
+ */
+ String PROP_CHECK = "org.eclipse.debug.ui.check"; //$NON-NLS-1$
- /**
- * Sets the check state of the tree node.
- *
- * @param checked Whether element should be checked.
- * @param grayed Whether element should be grayed out.
- */
- void setChecked(boolean checked, boolean grayed);
+ /**
+ * Sets the check state of the tree node.
+ *
+ * @param checked Whether element should be checked.
+ * @param grayed Whether element should be grayed out.
+ */
+ void setChecked(boolean checked, boolean grayed);
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ICheckboxModelProxy.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ICheckboxModelProxy.java
index c85c55220..d8c9f3c99 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ICheckboxModelProxy.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ICheckboxModelProxy.java
@@ -26,22 +26,22 @@ import org.eclipse.jface.viewers.TreePath;
*/
public interface ICheckboxModelProxy {
- /**
- * Notifies the receiver that the given element has had its
- * checked state modified in the viewer.
- * <p>
- * This method is called in the UI thread. Clients that execute long running operations or
- * communicate with a potentially unreliable or blocking model should run those operations
- * asynchronously.
- * </p>
- *
- * @param context Presentation context in which the element was updated.
- * @param viewerInput The root element of the viewer where the check
- * selection took place.
- * @param path Path of the element that had its checked state changed
- * @param checked The new checked state of the element
- * @return false if the check state should not change
- */
- boolean setChecked(IPresentationContext context, Object viewerInput, TreePath path, boolean checked);
+ /**
+ * Notifies the receiver that the given element has had its
+ * checked state modified in the viewer.
+ * <p>
+ * This method is called in the UI thread. Clients that execute long running operations or
+ * communicate with a potentially unreliable or blocking model should run those operations
+ * asynchronously.
+ * </p>
+ *
+ * @param context Presentation context in which the element was updated.
+ * @param viewerInput The root element of the viewer where the check
+ * selection took place.
+ * @param path Path of the element that had its checked state changed
+ * @param checked The new checked state of the element
+ * @return false if the check state should not change
+ */
+ boolean setChecked(IPresentationContext context, Object viewerInput, TreePath path, boolean checked);
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IElementContentProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IElementContentProvider.java
index 67c0b8bbf..6d43b485a 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IElementContentProvider.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IElementContentProvider.java
@@ -42,7 +42,7 @@ public interface IElementContentProvider {
*
* @param updates Each update specifies children to update and stores results.
* The update array is guaranteed to have at least one element, and for
- * all updates to have the same presentation context.
+ * all updates to have the same presentation context.
*/
void update(IChildrenUpdate[] updates);
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IElementMementoProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IElementMementoProvider.java
index 8ab79d3ad..93bbd0c0e 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IElementMementoProvider.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IElementMementoProvider.java
@@ -35,7 +35,7 @@ public interface IElementMementoProvider {
*
* @param requests Specifies elements and provides memento stores.
* The requests array is guaranteed to have at least one element, and for
- * all requests to have the same presentation context.
+ * all requests to have the same presentation context.
*/
void encodeElements(IElementMementoRequest[] requests);
@@ -44,7 +44,7 @@ public interface IElementMementoProvider {
*
* @param requests Specifies each element and previously created memento.
* The requests array is guaranteed to have at least one element, and for
- * all requests to have the same presentation context.
+ * all requests to have the same presentation context.
*/
void compareElements(IElementCompareRequest[] requests);
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ILabelUpdate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ILabelUpdate.java
index cee30bef4..351a5db90 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ILabelUpdate.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ILabelUpdate.java
@@ -41,37 +41,37 @@ public interface ILabelUpdate extends IViewerUpdate {
* @param text to set to viewer
* @param columnIndex column index (0 when no columns)
*/
- void setLabel(String text, int columnIndex);
+ void setLabel(String text, int columnIndex);
- /**
- * Sets the font of the label.
- *
- * @param fontData to set to viewer
- * @param columnIndex column index (0 when no columns)
- */
- void setFontData(FontData fontData, int columnIndex);
+ /**
+ * Sets the font of the label.
+ *
+ * @param fontData to set to viewer
+ * @param columnIndex column index (0 when no columns)
+ */
+ void setFontData(FontData fontData, int columnIndex);
- /**
- * Sets the image of the label.
- *
- * @param image to set to viewer
- * @param columnIndex column index (0 when no columns)
- */
- void setImageDescriptor(ImageDescriptor image, int columnIndex);
+ /**
+ * Sets the image of the label.
+ *
+ * @param image to set to viewer
+ * @param columnIndex column index (0 when no columns)
+ */
+ void setImageDescriptor(ImageDescriptor image, int columnIndex);
- /**
- * Sets the foreground color of the label.
- *
- * @param foreground to set to viewer
- * @param columnIndex column index (0 when no columns)
- */
- void setForeground(RGB foreground, int columnIndex);
+ /**
+ * Sets the foreground color of the label.
+ *
+ * @param foreground to set to viewer
+ * @param columnIndex column index (0 when no columns)
+ */
+ void setForeground(RGB foreground, int columnIndex);
- /**
- * Sets the background color of the label.
- *
- * @param background to set to viewer
- * @param columnIndex column index (0 when no columns)
- */
- void setBackground(RGB background, int columnIndex);
+ /**
+ * Sets the background color of the label.
+ *
+ * @param background to set to viewer
+ * @param columnIndex column index (0 when no columns)
+ */
+ void setBackground(RGB background, int columnIndex);
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelProxy.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelProxy.java
index 975081ff1..5fd7ca553 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelProxy.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelProxy.java
@@ -69,8 +69,8 @@ public interface IModelProxy {
* This method is called by the asynchronous viewer framework and should not
* be called by clients.
* </p>
- * @param viewer viewer
- * @see IModelProxy2#initialize(ITreeModelViewer)
+ * @param viewer viewer
+ * @see IModelProxy2#initialize(ITreeModelViewer)
* @since 3.3
*/
void installed(Viewer viewer);
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelProxy2.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelProxy2.java
index c6eb135ab..eaeccfd63 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelProxy2.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelProxy2.java
@@ -26,20 +26,20 @@ import org.eclipse.jface.viewers.Viewer;
*/
public interface IModelProxy2 extends IModelProxy {
- /**
- * Initialize model proxy with given tree model viewer. This method is
- * called on the viewer's Display thread and is guaranteed to be called
- * before the dispose() method is called on the same proxy. The default
- * implementation of this method calls {@link #init(IPresentationContext)}
- * and {@link #installed(Viewer)} asynchornously and not in the Display
- * thread.
- * <p>
- * This method is called by the asynchronous viewer framework and should
- * not be called by clients.
- * </p>
- * @param viewer Viewer that is installing this model proxy.
- *
- */
- void initialize(ITreeModelViewer viewer);
+ /**
+ * Initialize model proxy with given tree model viewer. This method is
+ * called on the viewer's Display thread and is guaranteed to be called
+ * before the dispose() method is called on the same proxy. The default
+ * implementation of this method calls {@link #init(IPresentationContext)}
+ * and {@link #installed(Viewer)} asynchornously and not in the Display
+ * thread.
+ * <p>
+ * This method is called by the asynchronous viewer framework and should
+ * not be called by clients.
+ * </p>
+ * @param viewer Viewer that is installing this model proxy.
+ *
+ */
+ void initialize(ITreeModelViewer viewer);
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelSelectionPolicy.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelSelectionPolicy.java
index 9107eecc9..cf846b64f 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelSelectionPolicy.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IModelSelectionPolicy.java
@@ -85,5 +85,5 @@ public interface IModelSelectionPolicy {
* the selection after the update, or <code>null</code> if none
* @return new selection or <code>null</code> if none
*/
- ISelection replaceInvalidSelection(ISelection invalidSelection, ISelection newSelection);
+ ISelection replaceInvalidSelection(ISelection invalidSelection, ISelection newSelection);
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IPresentationContext.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IPresentationContext.java
index 4cc72bfe2..bc411b429 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IPresentationContext.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IPresentationContext.java
@@ -44,91 +44,91 @@ public interface IPresentationContext {
*/
String PROPERTY_DISPOSED = "PROPERTY_DISPOSED"; //$NON-NLS-1$
- /**
- * Returns identifiers of the visible columns in the order
- * labels should be provided, or <code>null</code> if columns
- * are not being displayed. Label providers use this
- * information.
- *
- * @return visible column identifiers or <code>null</code>
- * @see IColumnPresentation
- */
- String[] getColumns();
+ /**
+ * Returns identifiers of the visible columns in the order
+ * labels should be provided, or <code>null</code> if columns
+ * are not being displayed. Label providers use this
+ * information.
+ *
+ * @return visible column identifiers or <code>null</code>
+ * @see IColumnPresentation
+ */
+ String[] getColumns();
- /**
- * Registers the given listener for property change notification.
- *
- * @param listener property listener
- */
- void addPropertyChangeListener(IPropertyChangeListener listener);
+ /**
+ * Registers the given listener for property change notification.
+ *
+ * @param listener property listener
+ */
+ void addPropertyChangeListener(IPropertyChangeListener listener);
- /**
- * Unregisters the given listener from property change notification.
- *
- * @param listener property listener.
- */
- void removePropertyChangeListener(IPropertyChangeListener listener);
+ /**
+ * Unregisters the given listener from property change notification.
+ *
+ * @param listener property listener.
+ */
+ void removePropertyChangeListener(IPropertyChangeListener listener);
- /**
- * Returns the id of this presentation context. Usually this is the id of
- * the associated part. However, when no part is associated with this context,
- * the id may exist on its own. Allows for a context that is not tied to a part.
- *
- * @return id
- * @since 3.3
- */
- String getId();
+ /**
+ * Returns the id of this presentation context. Usually this is the id of
+ * the associated part. However, when no part is associated with this context,
+ * the id may exist on its own. Allows for a context that is not tied to a part.
+ *
+ * @return id
+ * @since 3.3
+ */
+ String getId();
- /**
- * Sets the specified property and notifies listeners of changes.
- *
- * @param property property name
- * @param value property value
- */
- void setProperty(String property, Object value);
+ /**
+ * Sets the specified property and notifies listeners of changes.
+ *
+ * @param property property name
+ * @param value property value
+ */
+ void setProperty(String property, Object value);
- /**
- * Returns the property with the specified name or <code>null</code>
- * if none.
- *
- * @param property property name
- * @return property value or <code>null</code>
- */
- Object getProperty(String property);
+ /**
+ * Returns the property with the specified name or <code>null</code>
+ * if none.
+ *
+ * @param property property name
+ * @return property value or <code>null</code>
+ */
+ Object getProperty(String property);
- /**
- * Disposes this presentation context. Called by the framework
- * when the associated viewer is disposed.
- */
- void dispose();
+ /**
+ * Disposes this presentation context. Called by the framework
+ * when the associated viewer is disposed.
+ */
+ void dispose();
- /**
- * Returns all keys of properties currently set in this context,
- * possibly an empty collection
- *
- * @return keys of all current properties
- * @since 3.4
- */
- String[] getProperties();
+ /**
+ * Returns all keys of properties currently set in this context,
+ * possibly an empty collection
+ *
+ * @return keys of all current properties
+ * @since 3.4
+ */
+ String[] getProperties();
- /**
- * Returns the part that this presentation context is associated with.
- * May return <code>null</code> if the presentation is not associated
- * with a part.
- *
- * @return IWorkbenchPart or <code>null</code>
- * @since 3.6
- */
- IWorkbenchPart getPart();
+ /**
+ * Returns the part that this presentation context is associated with.
+ * May return <code>null</code> if the presentation is not associated
+ * with a part.
+ *
+ * @return IWorkbenchPart or <code>null</code>
+ * @since 3.6
+ */
+ IWorkbenchPart getPart();
- /**
- * Returns the window that this presentation context is associated with.
- * May return <code>null</code> if the presentation is not associated
- * with a window.
- *
- * @return IWorkbenchWindow or <code>null</code>
- * @since 3.6
- */
- IWorkbenchWindow getWindow();
+ /**
+ * Returns the window that this presentation context is associated with.
+ * May return <code>null</code> if the presentation is not associated
+ * with a window.
+ *
+ * @return IWorkbenchWindow or <code>null</code>
+ * @since 3.6
+ */
+ IWorkbenchWindow getWindow();
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IStateUpdateListener.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IStateUpdateListener.java
index 198b97a0e..fddacb5cd 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IStateUpdateListener.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IStateUpdateListener.java
@@ -32,30 +32,30 @@ public interface IStateUpdateListener {
* Notification that viewer updates are complete. Corresponds to
* a <code>viewerUpdatesBegin()</code> notification.
*
- * @param input Input object for the state operation.
+ * @param input Input object for the state operation.
*/
void stateSaveUpdatesComplete(Object input);
/**
- * Notification that a sequence of viewer updates are starting.
- *
- * @param input Input object for the state operation.
- */
- void stateRestoreUpdatesBegin(Object input);
+ * Notification that a sequence of viewer updates are starting.
+ *
+ * @param input Input object for the state operation.
+ */
+ void stateRestoreUpdatesBegin(Object input);
- /**
- * Notification that viewer updates are complete. Corresponds to
- * a <code>viewerUpdatesBegin()</code> notification.
- *
- * @param input Input object for the state operation.
- */
- void stateRestoreUpdatesComplete(Object input);
+ /**
+ * Notification that viewer updates are complete. Corresponds to
+ * a <code>viewerUpdatesBegin()</code> notification.
+ *
+ * @param input Input object for the state operation.
+ */
+ void stateRestoreUpdatesComplete(Object input);
/**
* Notification that a specific update has started within
* a sequence of updates.
*
- * @param input Input object for the state operation.
+ * @param input Input object for the state operation.
* @param update update
*/
void stateUpdateStarted(Object input, IViewerUpdate update);
@@ -64,7 +64,7 @@ public interface IStateUpdateListener {
* Notification that a specific update has completed within a
* sequence of updates.
*
- * @param input Input object for the state operation.
+ * @param input Input object for the state operation.
* @param update update
*/
void stateUpdateComplete(Object input, IViewerUpdate update);
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IStatusMonitor.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IStatusMonitor.java
index 6e63beb16..5c7b18f74 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IStatusMonitor.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IStatusMonitor.java
@@ -42,20 +42,20 @@ import org.eclipse.core.runtime.IStatus;
*/
public interface IStatusMonitor extends IProgressMonitor {
- /**
- * Sets the status for a request, possibly <code>null</code>.
- * When a request fails, the status indicates why the request failed.
- * A <code>null</code> status is considered to be successful.
- *
- * @param status request status
- */
- void setStatus(IStatus status);
+ /**
+ * Sets the status for a request, possibly <code>null</code>.
+ * When a request fails, the status indicates why the request failed.
+ * A <code>null</code> status is considered to be successful.
+ *
+ * @param status request status
+ */
+ void setStatus(IStatus status);
- /**
- * Returns the status of this request, or <code>null</code>.
- *
- * @return request status - <code>null</code> is equivalent
- * to an OK status
- */
- IStatus getStatus();
+ /**
+ * Returns the status of this request, or <code>null</code>.
+ *
+ * @return request status - <code>null</code> is equivalent
+ * to an OK status
+ */
+ IStatus getStatus();
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ITreeModelViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ITreeModelViewer.java
index 8c0dc9887..b7ba38a9a 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ITreeModelViewer.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ITreeModelViewer.java
@@ -31,251 +31,251 @@ import org.eclipse.swt.widgets.Display;
*/
public interface ITreeModelViewer extends ISelectionProvider {
- /**
- * Constant indicating that all levels of the tree should be expanded or
- * collapsed.
- *
- * @see #setAutoExpandLevel(int)
- * @see #getAutoExpandLevel()
- */
- int ALL_LEVELS = -1;
+ /**
+ * Constant indicating that all levels of the tree should be expanded or
+ * collapsed.
+ *
+ * @see #setAutoExpandLevel(int)
+ * @see #getAutoExpandLevel()
+ */
+ int ALL_LEVELS = -1;
- /**
- * Returns the Display object that this viewer is in. The
- * display object can be used by clients to access the display thread
- * to call the viewer methods.
- *
- * @return The display.
- */
- Display getDisplay();
+ /**
+ * Returns the Display object that this viewer is in. The
+ * display object can be used by clients to access the display thread
+ * to call the viewer methods.
+ *
+ * @return The display.
+ */
+ Display getDisplay();
- /**
- * Returns this viewer's presentation context.
- *
- * @return presentation context
- */
- IPresentationContext getPresentationContext();
+ /**
+ * Returns this viewer's presentation context.
+ *
+ * @return presentation context
+ */
+ IPresentationContext getPresentationContext();
- /**
- * Returns the current input of this viewer, or <code>null</code>
- * if none. The viewer's input provides the "model" for the viewer's
- * content.
- *
- * @return Input object
- */
- Object getInput();
+ /**
+ * Returns the current input of this viewer, or <code>null</code>
+ * if none. The viewer's input provides the "model" for the viewer's
+ * content.
+ *
+ * @return Input object
+ */
+ Object getInput();
- /**
- * Sets the input of this viewer. Setting the input resets the
- * viewer's contents and triggers an update starting at the input
- * element.
- *
- * @param object Input element, or <code>null</code> if none.
- */
- void setInput(Object object);
+ /**
+ * Sets the input of this viewer. Setting the input resets the
+ * viewer's contents and triggers an update starting at the input
+ * element.
+ *
+ * @param object Input element, or <code>null</code> if none.
+ */
+ void setInput(Object object);
- /**
- * Returns the current selection in viewer.
- *
- * @return selection object
- */
- @Override ISelection getSelection();
+ /**
+ * Returns the current selection in viewer.
+ *
+ * @return selection object
+ */
+ @Override ISelection getSelection();
- /**
- * Sets a new selection for this viewer and optionally makes it visible.
- * The selection is not set if the model selection policy overrides the
- * attempt to set the selection.
- *
- * @param selection the new selection
- * @param reveal <code>true</code> if the selection is to be made
- * visible, and <code>false</code> otherwise
- * @param force <code>true</code> if the selection should override the
- * model selection policy
- */
- void setSelection(ISelection selection, boolean reveal, boolean force);
+ /**
+ * Sets a new selection for this viewer and optionally makes it visible.
+ * The selection is not set if the model selection policy overrides the
+ * attempt to set the selection.
+ *
+ * @param selection the new selection
+ * @param reveal <code>true</code> if the selection is to be made
+ * visible, and <code>false</code> otherwise
+ * @param force <code>true</code> if the selection should override the
+ * model selection policy
+ */
+ void setSelection(ISelection selection, boolean reveal, boolean force);
- /**
- * Attempts to set the selection for this viewer and optionally makes it visible.
- * The selection is not set if the model selection policy overrides the
- * attempt to set the selection.
- *
- * @param selection the new selection
- * @param reveal whether to make the selection visible after successfully setting
- * the selection
- * @param force whether to force the selection (override the model selection policy)
- * @return <code>true</code> if the selection was set and <code>false</code> if the
- * model selection policy overrides the selection attempt
- */
- boolean trySelection(ISelection selection, boolean reveal, boolean force);
+ /**
+ * Attempts to set the selection for this viewer and optionally makes it visible.
+ * The selection is not set if the model selection policy overrides the
+ * attempt to set the selection.
+ *
+ * @param selection the new selection
+ * @param reveal whether to make the selection visible after successfully setting
+ * the selection
+ * @param force whether to force the selection (override the model selection policy)
+ * @return <code>true</code> if the selection was set and <code>false</code> if the
+ * model selection policy overrides the selection attempt
+ */
+ boolean trySelection(ISelection selection, boolean reveal, boolean force);
- /**
- * Returns the auto-expand level.
- *
- * @return non-negative level, or <code>ALL_LEVELS</code> if all levels of
- * the tree are expanded automatically
- * @see #setAutoExpandLevel
- */
- int getAutoExpandLevel();
+ /**
+ * Returns the auto-expand level.
+ *
+ * @return non-negative level, or <code>ALL_LEVELS</code> if all levels of
+ * the tree are expanded automatically
+ * @see #setAutoExpandLevel
+ */
+ int getAutoExpandLevel();
- /**
- * Sets the auto-expand level to be used when the input of the viewer is set
- * using {@link #setInput(Object)}. The value 0 means that there is no
- * auto-expand; 1 means that the invisible root element is expanded (since
- * most concrete implementations do not show the root element, there is usually
- * no practical difference between using the values 0 and 1); 2 means that
- * top-level elements are expanded, but not their children; 3 means that
- * top-level elements are expanded, and their children, but not
- * grandchildren; and so on.
- * <p>
- * The value <code>ALL_LEVELS</code> means that all subtrees should be
- * expanded.
- * </p>
- *
- * @param level
- * non-negative level, or <code>ALL_LEVELS</code> to expand all
- * levels of the tree
- */
- void setAutoExpandLevel(int level);
+ /**
+ * Sets the auto-expand level to be used when the input of the viewer is set
+ * using {@link #setInput(Object)}. The value 0 means that there is no
+ * auto-expand; 1 means that the invisible root element is expanded (since
+ * most concrete implementations do not show the root element, there is usually
+ * no practical difference between using the values 0 and 1); 2 means that
+ * top-level elements are expanded, but not their children; 3 means that
+ * top-level elements are expanded, and their children, but not
+ * grandchildren; and so on.
+ * <p>
+ * The value <code>ALL_LEVELS</code> means that all subtrees should be
+ * expanded.
+ * </p>
+ *
+ * @param level
+ * non-negative level, or <code>ALL_LEVELS</code> to expand all
+ * levels of the tree
+ */
+ void setAutoExpandLevel(int level);
- /**
- * Returns the label data for the given element and for the given column,
- * Returns <code>null</code> if the given element is not found or is not
- * materialized in the virtual viewer. Clients may listen to label update
- * events to be notified when element labels are updated.
- *
- * @param path Path of the element.
- * @param columnId ID of the column for which to return the label data.
- * @return Label object containing the label information. Can be
- * <code>null</code> if the given element is not found or is not
- * materialized in the virtual viewer.
- */
- ViewerLabel getElementLabel(TreePath path, String columnId);
+ /**
+ * Returns the label data for the given element and for the given column,
+ * Returns <code>null</code> if the given element is not found or is not
+ * materialized in the virtual viewer. Clients may listen to label update
+ * events to be notified when element labels are updated.
+ *
+ * @param path Path of the element.
+ * @param columnId ID of the column for which to return the label data.
+ * @return Label object containing the label information. Can be
+ * <code>null</code> if the given element is not found or is not
+ * materialized in the virtual viewer.
+ */
+ ViewerLabel getElementLabel(TreePath path, String columnId);
- /**
- * Registers the specified listener for view update notifications.
- *
- * @param listener Listener to add
- */
- void addViewerUpdateListener(IViewerUpdateListener listener);
+ /**
+ * Registers the specified listener for view update notifications.
+ *
+ * @param listener Listener to add
+ */
+ void addViewerUpdateListener(IViewerUpdateListener listener);
- /**
- * Removes the specified listener from update notifications.
- *
- * @param listener Listener to remove
- */
- void removeViewerUpdateListener(IViewerUpdateListener listener);
+ /**
+ * Removes the specified listener from update notifications.
+ *
+ * @param listener Listener to remove
+ */
+ void removeViewerUpdateListener(IViewerUpdateListener listener);
- /**
- * Registers the specified listener for state update notifications.
- *
- * @param listener Listener to add
- */
- void addStateUpdateListener(IStateUpdateListener listener);
+ /**
+ * Registers the specified listener for state update notifications.
+ *
+ * @param listener Listener to add
+ */
+ void addStateUpdateListener(IStateUpdateListener listener);
- /**
- * Removes the specified listener from state update notifications.
- *
- * @param listener Listener to remove
- */
- void removeStateUpdateListener(IStateUpdateListener listener);
+ /**
+ * Removes the specified listener from state update notifications.
+ *
+ * @param listener Listener to remove
+ */
+ void removeStateUpdateListener(IStateUpdateListener listener);
- /**
- * Registers the specified listener for view label update notifications.
- *
- * @param listener Listener to add
- */
- void addLabelUpdateListener(ILabelUpdateListener listener);
+ /**
+ * Registers the specified listener for view label update notifications.
+ *
+ * @param listener Listener to add
+ */
+ void addLabelUpdateListener(ILabelUpdateListener listener);
- /**
- * Removes the specified listener from view label update notifications.
- *
- * @param listener Listener to remove
- */
- void removeLabelUpdateListener(ILabelUpdateListener listener);
+ /**
+ * Removes the specified listener from view label update notifications.
+ *
+ * @param listener Listener to remove
+ */
+ void removeLabelUpdateListener(ILabelUpdateListener listener);
- /**
- * Registers the given listener for model delta notification.
- * This listener is called immediately after the viewer processes
- * the delta.
- *
- * @param listener Listener to add
- */
- void addModelChangedListener(IModelChangedListener listener);
+ /**
+ * Registers the given listener for model delta notification.
+ * This listener is called immediately after the viewer processes
+ * the delta.
+ *
+ * @param listener Listener to add
+ */
+ void addModelChangedListener(IModelChangedListener listener);
- /**
- * Removes the given listener from model delta notification.
- *
- * @param listener Listener to remove
- */
- void removeModelChangedListener(IModelChangedListener listener);
+ /**
+ * Removes the given listener from model delta notification.
+ *
+ * @param listener Listener to remove
+ */
+ void removeModelChangedListener(IModelChangedListener listener);
- /**
- * Writes state information into a delta for the sub-tree at the given
- * path. It adds delta nodes and IModelDelta.EXPAND and IModelDelta.SELECT
- * as it parses the sub-tree.
- *
- * @param path Path where to start saving the state.
- * @param delta The delta where the state is to be saved.
- * @param flagsToSave The flags to preserve during the state save. The
- * supported flags are <code>IModelDelta.SELECT</code>,
- * <code>IModelDelta.EXPAND</code>, <code>IModelDelta.COLLAPSE</code>.
- * @return Returns whether the state was saved for the given path. Will
- * return <code>false</code> if an element at the given path cannot
- * be found.
- */
- boolean saveElementState(TreePath path, ModelDelta delta, int flagsToSave);
+ /**
+ * Writes state information into a delta for the sub-tree at the given
+ * path. It adds delta nodes and IModelDelta.EXPAND and IModelDelta.SELECT
+ * as it parses the sub-tree.
+ *
+ * @param path Path where to start saving the state.
+ * @param delta The delta where the state is to be saved.
+ * @param flagsToSave The flags to preserve during the state save. The
+ * supported flags are <code>IModelDelta.SELECT</code>,
+ * <code>IModelDelta.EXPAND</code>, <code>IModelDelta.COLLAPSE</code>.
+ * @return Returns whether the state was saved for the given path. Will
+ * return <code>false</code> if an element at the given path cannot
+ * be found.
+ */
+ boolean saveElementState(TreePath path, ModelDelta delta, int flagsToSave);
- /**
- * Causes the viewer to process the given delta as if it came from a
- * model proxy. This method is intended to be used to restore state
- * saved using {@link #saveElementState(TreePath, ModelDelta, int)}.
- *
- * @param delta Delta to process.
- */
- void updateViewer(IModelDelta delta);
+ /**
+ * Causes the viewer to process the given delta as if it came from a
+ * model proxy. This method is intended to be used to restore state
+ * saved using {@link #saveElementState(TreePath, ModelDelta, int)}.
+ *
+ * @param delta Delta to process.
+ */
+ void updateViewer(IModelDelta delta);
- /**
- * Triggers an update of the given element and its children. If
- * multiple instances of the given element are found in the tree,
- * they will all be updated.
- *
- * @param element Element to update.
- */
- void refresh(Object element);
+ /**
+ * Triggers an update of the given element and its children. If
+ * multiple instances of the given element are found in the tree,
+ * they will all be updated.
+ *
+ * @param element Element to update.
+ */
+ void refresh(Object element);
- /**
- * Triggers a full update of all the elements in the tree.
- */
- void refresh();
+ /**
+ * Triggers a full update of all the elements in the tree.
+ */
+ void refresh();
- /**
- * Returns the paths at which the given element is found realized in viewer
- * or an empty array if not found.
- *
- * @param element Element to find.
- * @return Array of paths for given element.
- */
- TreePath[] getElementPaths(Object element);
+ /**
+ * Returns the paths at which the given element is found realized in viewer
+ * or an empty array if not found.
+ *
+ * @param element Element to find.
+ * @return Array of paths for given element.
+ */
+ TreePath[] getElementPaths(Object element);
- /**
- * Returns filters currently configured in viewer.
- *
- * @return filter array in viewer.
- */
- ViewerFilter[] getFilters();
+ /**
+ * Returns filters currently configured in viewer.
+ *
+ * @return filter array in viewer.
+ */
+ ViewerFilter[] getFilters();
- /**
- * Add a new filter to use in viewer.
- *
- * @param filter Filter to add.
- */
- void addFilter(ViewerFilter filter);
+ /**
+ * Add a new filter to use in viewer.
+ *
+ * @param filter Filter to add.
+ */
+ void addFilter(ViewerFilter filter);
- /**
- * Sets viewer filters to the filters in array.
- *
- * @param filters New filter array to use.
- */
+ /**
+ * Sets viewer filters to the filters in array.
+ *
+ * @param filters New filter array to use.
+ */
void setFilters(ViewerFilter... filters);
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IViewerUpdate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IViewerUpdate.java
index a7141a47e..dda5ce605 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IViewerUpdate.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IViewerUpdate.java
@@ -31,27 +31,27 @@ public interface IViewerUpdate extends IRequest {
*/
IPresentationContext getPresentationContext();
- /**
- * Returns the model element associated with this request.
- *
- * @return associated model element
- */
- Object getElement();
+ /**
+ * Returns the model element associated with this request.
+ *
+ * @return associated model element
+ */
+ Object getElement();
- /**
- * Returns the viewer tree path to the model element associated with this
- * request. An empty path indicates a root element.
- *
- * @return tree path, possibly empty
- */
- TreePath getElementPath();
+ /**
+ * Returns the viewer tree path to the model element associated with this
+ * request. An empty path indicates a root element.
+ *
+ * @return tree path, possibly empty
+ */
+ TreePath getElementPath();
- /**
- * Returns the element that was the viewer input at the time the
- * request was made, possibly <code>null</code>.
- *
- * @return viewer input element, possibly <code>null</code>
- * @since 3.4
- */
- Object getViewerInput();
+ /**
+ * Returns the element that was the viewer input at the time the
+ * request was made, possibly <code>null</code>.
+ *
+ * @return viewer input element, possibly <code>null</code>
+ * @since 3.4
+ */
+ Object getViewerInput();
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IVirtualItemListener.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IVirtualItemListener.java
index 41d449be7..bee1e2b4c 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IVirtualItemListener.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IVirtualItemListener.java
@@ -22,20 +22,20 @@ package org.eclipse.debug.internal.ui.viewers.model.provisional;
*/
public interface IVirtualItemListener {
- /**
- * Called when the item has been shown in the virtual viewer's
- * view-port. This indicates to the viewer that it should check
- * the item's status and request needed data.
- *
- * @param item The item that was revealed.
- */
- void revealed(VirtualItem item);
+ /**
+ * Called when the item has been shown in the virtual viewer's
+ * view-port. This indicates to the viewer that it should check
+ * the item's status and request needed data.
+ *
+ * @param item The item that was revealed.
+ */
+ void revealed(VirtualItem item);
- /**
- * Called when an item is disposed. It tells the viewer to
- * clean up any remaining mappings and cached data of this item.
- *
- * @param item The itam that was disposed.
- */
- void disposed(VirtualItem item);
+ /**
+ * Called when an item is disposed. It tells the viewer to
+ * clean up any remaining mappings and cached data of this item.
+ *
+ * @param item The itam that was disposed.
+ */
+ void disposed(VirtualItem item);
} \ No newline at end of file
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IVirtualItemValidator.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IVirtualItemValidator.java
index d0054865b..981a842e0 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IVirtualItemValidator.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/IVirtualItemValidator.java
@@ -23,19 +23,19 @@ package org.eclipse.debug.internal.ui.viewers.model.provisional;
*/
public interface IVirtualItemValidator {
- /**
- * Allows the validator to determine whether the given item is to be deemed
- * visible in the virtual tree.
- *
- * @param item Item to be tested.
- * @return returns true if the item should be considered visible.
- */
- boolean isItemVisible(VirtualItem item);
+ /**
+ * Allows the validator to determine whether the given item is to be deemed
+ * visible in the virtual tree.
+ *
+ * @param item Item to be tested.
+ * @return returns true if the item should be considered visible.
+ */
+ boolean isItemVisible(VirtualItem item);
- /**
- * Indicates that the viewer requested to reveal the given item in viewer.
- *
- * @param item Item to show.
- */
- void showItem(VirtualItem item);
+ /**
+ * Indicates that the viewer requested to reveal the given item in viewer.
+ *
+ * @param item Item to show.
+ */
+ void showItem(VirtualItem item);
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ModelDelta.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ModelDelta.java
index 369307a8f..cb147026e 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ModelDelta.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ModelDelta.java
@@ -64,8 +64,8 @@ public class ModelDelta implements IModelDelta {
*/
public ModelDelta(Object element, Object replacement, int flags) {
this(element, flags);
- fReplacement = replacement;
- }
+ fReplacement = replacement;
+ }
/**
* Constructs a new delta for the given element to be inserted at
@@ -75,10 +75,10 @@ public class ModelDelta implements IModelDelta {
* @param index insertion position
* @param flags change flags
*/
- public ModelDelta(Object element, int index, int flags) {
+ public ModelDelta(Object element, int index, int flags) {
this(element, flags);
- fIndex = index;
- }
+ fIndex = index;
+ }
/**
* Constructs a new delta for the given element at the specified index
@@ -89,12 +89,12 @@ public class ModelDelta implements IModelDelta {
* @param flags change flags
* @param childCount number of children this node has
*/
- public ModelDelta(Object element, int index, int flags, int childCount) {
+ public ModelDelta(Object element, int index, int flags, int childCount) {
this(element, index, flags);
- fChildCount = childCount;
- }
+ fChildCount = childCount;
+ }
- @Override
+ @Override
public Object getElement() {
return fElement;
}
@@ -126,74 +126,74 @@ public class ModelDelta implements IModelDelta {
* @return corresponding delta node, or <code>null</code>
*/
public ModelDelta getChildDelta(Object element) {
- if (fNodesMap == null) {
- mapNodes();
- }
- Object nodeOrNodes = fNodesMap.get(element);
- if (nodeOrNodes instanceof ModelDelta) {
- return (ModelDelta)nodeOrNodes;
- } else if (nodeOrNodes instanceof ModelDelta[]) {
- return ((ModelDelta[])nodeOrNodes)[0];
- }
- return null;
+ if (fNodesMap == null) {
+ mapNodes();
+ }
+ Object nodeOrNodes = fNodesMap.get(element);
+ if (nodeOrNodes instanceof ModelDelta) {
+ return (ModelDelta)nodeOrNodes;
+ } else if (nodeOrNodes instanceof ModelDelta[]) {
+ return ((ModelDelta[])nodeOrNodes)[0];
+ }
+ return null;
}
/**
- * Returns the child delta for the given element and index, or <code>null</code> if none.
- *
- * @param element Element of the child delta to find
- * @param index Index of the child delta to find.
- * @return corresponding delta node, or <code>null</code>
- *
- * @since 3.8
- */
- public ModelDelta getChildDelta(Object element, int index) {
- if (fNodesMap == null) {
- mapNodes();
- }
- Object nodeOrNodes = fNodesMap.get(element);
- if (nodeOrNodes instanceof ModelDelta) {
- ModelDelta node = (ModelDelta)nodeOrNodes;
- if (index == node.getIndex()) {
- return node;
- }
- } else if (nodeOrNodes instanceof ModelDelta[]) {
- ModelDelta[] nodes = (ModelDelta[])nodeOrNodes;
- for (int i = 0; i < nodes.length; i++) {
- if (index == nodes[i].getIndex()) {
- return nodes[i];
- }
- }
- }
- return null;
- }
+ * Returns the child delta for the given element and index, or <code>null</code> if none.
+ *
+ * @param element Element of the child delta to find
+ * @param index Index of the child delta to find.
+ * @return corresponding delta node, or <code>null</code>
+ *
+ * @since 3.8
+ */
+ public ModelDelta getChildDelta(Object element, int index) {
+ if (fNodesMap == null) {
+ mapNodes();
+ }
+ Object nodeOrNodes = fNodesMap.get(element);
+ if (nodeOrNodes instanceof ModelDelta) {
+ ModelDelta node = (ModelDelta)nodeOrNodes;
+ if (index == node.getIndex()) {
+ return node;
+ }
+ } else if (nodeOrNodes instanceof ModelDelta[]) {
+ ModelDelta[] nodes = (ModelDelta[])nodeOrNodes;
+ for (int i = 0; i < nodes.length; i++) {
+ if (index == nodes[i].getIndex()) {
+ return nodes[i];
+ }
+ }
+ }
+ return null;
+ }
private void mapNodes() {
- if (fNodesList == null) {
+ if (fNodesList == null) {
fNodesMap = new HashMap<>(1);
- return;
- }
- // Create a map with capacity for all child nodes.
+ return;
+ }
+ // Create a map with capacity for all child nodes.
fNodesMap = new HashMap<>(fNodesList.size() * 4 / 3);
- for (int i = 0; i < fNodesList.size(); i++) {
- mapNode( fNodesList.get(i) );
- }
+ for (int i = 0; i < fNodesList.size(); i++) {
+ mapNode( fNodesList.get(i) );
+ }
}
private void mapNode(ModelDelta node) {
- Object oldValue = fNodesMap.put(node.getElement(), node);
- if (oldValue instanceof ModelDelta) {
- // Edge case: already a node for given element was added.
- ModelDelta[] nodes = new ModelDelta[] { (ModelDelta)oldValue, node };
- fNodesMap.put(node.getElement(), nodes);
- } else if (oldValue instanceof ModelDelta[]) {
- // Even more remote case: multiple delta nodes for the same element were already added
- ModelDelta[] oldNodes = (ModelDelta[])oldValue;
- ModelDelta[] newNodes = new ModelDelta[oldNodes.length + 1];
- System.arraycopy(oldNodes, 0, newNodes, 0, oldNodes.length);
- newNodes[newNodes.length - 1] = node;
- fNodesMap.put(node.getElement(), newNodes);
- }
+ Object oldValue = fNodesMap.put(node.getElement(), node);
+ if (oldValue instanceof ModelDelta) {
+ // Edge case: already a node for given element was added.
+ ModelDelta[] nodes = new ModelDelta[] { (ModelDelta)oldValue, node };
+ fNodesMap.put(node.getElement(), nodes);
+ } else if (oldValue instanceof ModelDelta[]) {
+ // Even more remote case: multiple delta nodes for the same element were already added
+ ModelDelta[] oldNodes = (ModelDelta[])oldValue;
+ ModelDelta[] newNodes = new ModelDelta[oldNodes.length + 1];
+ System.arraycopy(oldNodes, 0, newNodes, 0, oldNodes.length);
+ newNodes[newNodes.length - 1] = node;
+ fNodesMap.put(node.getElement(), newNodes);
+ }
}
@@ -207,51 +207,51 @@ public class ModelDelta implements IModelDelta {
* @param flags change flags
* @return newly created child delta
*/
- public ModelDelta addNode(Object element, Object replacement, int flags) {
- ModelDelta node = new ModelDelta(element, replacement, flags);
- node.setParent(this);
- addDelta(node);
- return node;
- }
-
- /**
- * Adds a child delta to this delta to insert the specified element at
- * the given index, and returns the newly created child delta.
- *
- * @param element child element in insert
- * @param index index of insertion
- * @param flags change flags
- * @return newly created child delta
- */
- public ModelDelta addNode(Object element, int index, int flags) {
- ModelDelta node = new ModelDelta(element, index, flags);
- node.setParent(this);
- addDelta(node);
- return node;
- }
-
- /**
- * Adds a child delta to this delta at the specified index with the
- * given number of children, and returns the newly created child delta.
- *
- * @param element child element in insert
- * @param index index of the element relative to parent
- * @param flags change flags
- * @param numChildren the number of children the element has
- * @return newly created child delta
- */
- public ModelDelta addNode(Object element, int index, int flags, int numChildren) {
- ModelDelta node = new ModelDelta(element, index, flags, numChildren);
- node.setParent(this);
- addDelta(node);
- return node;
- }
-
- /**
- * Sets the parent delta of this delta
- *
- * @param node parent delta
- */
+ public ModelDelta addNode(Object element, Object replacement, int flags) {
+ ModelDelta node = new ModelDelta(element, replacement, flags);
+ node.setParent(this);
+ addDelta(node);
+ return node;
+ }
+
+ /**
+ * Adds a child delta to this delta to insert the specified element at
+ * the given index, and returns the newly created child delta.
+ *
+ * @param element child element in insert
+ * @param index index of insertion
+ * @param flags change flags
+ * @return newly created child delta
+ */
+ public ModelDelta addNode(Object element, int index, int flags) {
+ ModelDelta node = new ModelDelta(element, index, flags);
+ node.setParent(this);
+ addDelta(node);
+ return node;
+ }
+
+ /**
+ * Adds a child delta to this delta at the specified index with the
+ * given number of children, and returns the newly created child delta.
+ *
+ * @param element child element in insert
+ * @param index index of the element relative to parent
+ * @param flags change flags
+ * @param numChildren the number of children the element has
+ * @return newly created child delta
+ */
+ public ModelDelta addNode(Object element, int index, int flags, int numChildren) {
+ ModelDelta node = new ModelDelta(element, index, flags, numChildren);
+ node.setParent(this);
+ addDelta(node);
+ return node;
+ }
+
+ /**
+ * Sets the parent delta of this delta
+ *
+ * @param node parent delta
+ */
void setParent(ModelDelta node) {
fParent = node;
}
@@ -261,21 +261,21 @@ public class ModelDelta implements IModelDelta {
return fParent;
}
- @Override
+ @Override
public Object getReplacementElement() {
- return fReplacement;
- }
+ return fReplacement;
+ }
- @Override
+ @Override
public int getIndex() {
- return fIndex;
- }
+ return fIndex;
+ }
@Override
public IModelDelta[] getChildDeltas() {
- if (fNodes == null) {
- fNodes = fNodesList.toArray(new ModelDelta[fNodesList.size()]);
- }
+ if (fNodes == null) {
+ fNodes = fNodesList.toArray(new ModelDelta[fNodesList.size()]);
+ }
return fNodes;
}
@@ -283,11 +283,11 @@ public class ModelDelta implements IModelDelta {
if (fNodesList == null) {
fNodesList = new ArrayList<>(4);
}
- fNodesList.add(delta);
- fNodes = null;
- if (fNodesMap != null) {
- mapNode(delta);
- }
+ fNodesList.add(delta);
+ fNodes = null;
+ if (fNodesMap != null) {
+ mapNode(delta);
+ }
}
@Override
@@ -300,11 +300,11 @@ public class ModelDelta implements IModelDelta {
}
private void appendDetail(String indent, StringBuffer buf, IModelDelta delta) {
- buf.append(indent);
+ buf.append(indent);
buf.append("Element: "); //$NON-NLS-1$
buf.append(delta.getElement());
buf.append('\n');
- buf.append(indent);
+ buf.append(indent);
buf.append(" Flags: "); //$NON-NLS-1$
int flags = delta.getFlags();
if (flags == 0) {
@@ -316,9 +316,9 @@ public class ModelDelta implements IModelDelta {
if ((flags & IModelDelta.CONTENT) > 0) {
buf.append("CONTENT | "); //$NON-NLS-1$
}
- if ((flags & IModelDelta.COLLAPSE) > 0) {
- buf.append("COLLAPSE | "); //$NON-NLS-1$
- }
+ if ((flags & IModelDelta.COLLAPSE) > 0) {
+ buf.append("COLLAPSE | "); //$NON-NLS-1$
+ }
if ((flags & IModelDelta.EXPAND) > 0) {
buf.append("EXPAND | "); //$NON-NLS-1$
}
@@ -344,15 +344,15 @@ public class ModelDelta implements IModelDelta {
buf.append("UNINSTALL | "); //$NON-NLS-1$
}
if ((flags & IModelDelta.REVEAL) > 0) {
- buf.append("REVEAL | "); //$NON-NLS-1$
- }
- if ((flags & IModelDelta.FORCE) > 0) {
- buf.append("FORCE | "); //$NON-NLS-1$
- }
+ buf.append("REVEAL | "); //$NON-NLS-1$
+ }
+ if ((flags & IModelDelta.FORCE) > 0) {
+ buf.append("FORCE | "); //$NON-NLS-1$
+ }
}
buf.append('\n');
- buf.append(indent);
+ buf.append(indent);
buf.append(" Index: "); //$NON-NLS-1$
buf.append(delta.getIndex());
buf.append(" Child Count: "); //$NON-NLS-1$
@@ -401,23 +401,23 @@ public class ModelDelta implements IModelDelta {
fFlags = flags;
}
- /**
- * Sets this delta's index
- *
- * @param index new index to set
- * @since 3.6
- */
- public void setIndex(int index) {
- fIndex = index;
- }
+ /**
+ * Sets this delta's index
+ *
+ * @param index new index to set
+ * @since 3.6
+ */
+ public void setIndex(int index) {
+ fIndex = index;
+ }
/**
- * Sets this delta's child count.
- *
- * @param count new child count to set
- */
- public void setChildCount(int count) {
- fChildCount = count;
- }
+ * Sets this delta's child count.
+ *
+ * @param count new child count to set
+ */
+ public void setChildCount(int count) {
+ fChildCount = count;
+ }
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/PresentationContext.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/PresentationContext.java
index 6cf38ac23..7fed0f718 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/PresentationContext.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/PresentationContext.java
@@ -40,63 +40,63 @@ import org.eclipse.ui.PlatformUI;
*/
public class PresentationContext implements IPresentationContext {
- private static final String PRESENTATION_CONTEXT_PROPERTIES = "PRESENTATION_CONTEXT_PROPERTIES"; //$NON-NLS-1$
- private static final String BOOLEAN = "BOOLEAN"; //$NON-NLS-1$
- private static final String STRING = "STRING"; //$NON-NLS-1$
- private static final String INTEGER = "INTEGER"; //$NON-NLS-1$
- private static final String PERSISTABLE = "PERSISTABLE"; //$NON-NLS-1$
+ private static final String PRESENTATION_CONTEXT_PROPERTIES = "PRESENTATION_CONTEXT_PROPERTIES"; //$NON-NLS-1$
+ private static final String BOOLEAN = "BOOLEAN"; //$NON-NLS-1$
+ private static final String STRING = "STRING"; //$NON-NLS-1$
+ private static final String INTEGER = "INTEGER"; //$NON-NLS-1$
+ private static final String PERSISTABLE = "PERSISTABLE"; //$NON-NLS-1$
- final private String fId;
+ final private String fId;
final private ListenerList<IPropertyChangeListener> fListeners = new ListenerList<>();
final private Map<String, Object> fProperties = new HashMap<>();
- private IWorkbenchWindow fWindow;
- private IWorkbenchPart fPart;
-
- /**
- * Constructs a presentation context for the given id.
- *
- * @param id presentation context id
- */
- public PresentationContext(String id) {
- this (id, null, null);
- }
-
- /**
- * Constructs a presentation context for the given id and window.
- *
- * @param id presentation context id
- * @param window presentation context window, may be <code>null</code>
- */
- public PresentationContext(String id, IWorkbenchWindow window) {
- this (id, window, null);
- }
-
- /**
- * Constructs a presentation context for the given id and part.
- * The presentation context window is derived from the part.
- *
- * @param id presentation context id
- * @param part presentation context part, may be <code>null</code>
- */
- public PresentationContext(String id, IWorkbenchPart part) {
- this (id, part == null ? null : part.getSite().getWorkbenchWindow(), part);
- }
-
- /**
- * Constructs a presentation context for the given id and part.
- * The presentation context id and window are derived from the part.
- *
- * @param part presentation context part, can NOT be <code>null</code>
- */
- public PresentationContext(IWorkbenchPart part) {
- this (part.getSite().getId(), part.getSite().getWorkbenchWindow(), part);
- }
-
- private PresentationContext(String id, IWorkbenchWindow window, IWorkbenchPart part) {
- fId = id;
- fWindow = window;
- fPart = part;
- }
+ private IWorkbenchWindow fWindow;
+ private IWorkbenchPart fPart;
+
+ /**
+ * Constructs a presentation context for the given id.
+ *
+ * @param id presentation context id
+ */
+ public PresentationContext(String id) {
+ this (id, null, null);
+ }
+
+ /**
+ * Constructs a presentation context for the given id and window.
+ *
+ * @param id presentation context id
+ * @param window presentation context window, may be <code>null</code>
+ */
+ public PresentationContext(String id, IWorkbenchWindow window) {
+ this (id, window, null);
+ }
+
+ /**
+ * Constructs a presentation context for the given id and part.
+ * The presentation context window is derived from the part.
+ *
+ * @param id presentation context id
+ * @param part presentation context part, may be <code>null</code>
+ */
+ public PresentationContext(String id, IWorkbenchPart part) {
+ this (id, part == null ? null : part.getSite().getWorkbenchWindow(), part);
+ }
+
+ /**
+ * Constructs a presentation context for the given id and part.
+ * The presentation context id and window are derived from the part.
+ *
+ * @param part presentation context part, can NOT be <code>null</code>
+ */
+ public PresentationContext(IWorkbenchPart part) {
+ this (part.getSite().getId(), part.getSite().getWorkbenchWindow(), part);
+ }
+
+ private PresentationContext(String id, IWorkbenchWindow window, IWorkbenchPart part) {
+ fId = id;
+ fWindow = window;
+ fPart = part;
+ }
@Override
public String[] getColumns() {
@@ -136,8 +136,8 @@ public class PresentationContext implements IPresentationContext {
@Override
public void dispose() {
- fProperties.clear();
- setProperty(PROPERTY_DISPOSED, Boolean.TRUE);
+ fProperties.clear();
+ setProperty(PROPERTY_DISPOSED, Boolean.TRUE);
fListeners.clear();
// Free the reference to fWindow (Bug 321658).
fWindow = null;
@@ -168,18 +168,18 @@ public class PresentationContext implements IPresentationContext {
@Override
public void setProperty(String property, Object value) {
- Object oldValue = null;
- boolean propertySet = false;
+ Object oldValue = null;
+ boolean propertySet = false;
synchronized (fProperties) {
oldValue = fProperties.get(property);
if (!isEqual(oldValue, value)) {
- propertySet = true;
+ propertySet = true;
fProperties.put(property, value);
}
}
if (propertySet) {
- firePropertyChange(property, oldValue, value);
+ firePropertyChange(property, oldValue, value);
}
}
@@ -188,46 +188,46 @@ public class PresentationContext implements IPresentationContext {
* @param memento Memento to restore from.
*/
public void initProperties(IMemento memento) {
- IMemento presentationMemento = null;
-
- IMemento[] mementos = memento.getChildren(PRESENTATION_CONTEXT_PROPERTIES);
- for (int i = 0; i < mementos.length; i++) {
- if (getId().equals(mementos[i].getID())) {
- presentationMemento = mementos[i];
- break;
- }
- }
-
- if (presentationMemento != null) {
- IMemento[] stringProperties = presentationMemento.getChildren(STRING);
- for (int i = 0; i < stringProperties.length; i++) {
- fProperties.put(stringProperties[i].getID(), stringProperties[i].getString(STRING));
- }
-
- IMemento[] integerMementos = presentationMemento.getChildren(INTEGER);
- for (int i = 0; i < integerMementos.length; i++) {
- fProperties.put(integerMementos[i].getID(), integerMementos[i].getInteger(INTEGER));
- }
-
- IMemento[] booleanMementos = presentationMemento.getChildren(BOOLEAN);
- for (int i = 0; i < booleanMementos.length; i++) {
- fProperties.put(booleanMementos[i].getID(), booleanMementos[i].getBoolean(BOOLEAN));
- }
-
- IMemento[] persistableMementos = presentationMemento.getChildren(PERSISTABLE);
- for (int i = 0; i < persistableMementos.length; i++) {
- String factoryID = persistableMementos[i].getString(PERSISTABLE);
- if (factoryID != null) {
- IElementFactory factory = PlatformUI.getWorkbench().getElementFactory(factoryID);
- if (factory != null) {
- Object element = factory.createElement(persistableMementos[i]);
- if (element != null) {
- fProperties.put(persistableMementos[i].getID(), element);
- }
- }
- }
- }
- }
+ IMemento presentationMemento = null;
+
+ IMemento[] mementos = memento.getChildren(PRESENTATION_CONTEXT_PROPERTIES);
+ for (int i = 0; i < mementos.length; i++) {
+ if (getId().equals(mementos[i].getID())) {
+ presentationMemento = mementos[i];
+ break;
+ }
+ }
+
+ if (presentationMemento != null) {
+ IMemento[] stringProperties = presentationMemento.getChildren(STRING);
+ for (int i = 0; i < stringProperties.length; i++) {
+ fProperties.put(stringProperties[i].getID(), stringProperties[i].getString(STRING));
+ }
+
+ IMemento[] integerMementos = presentationMemento.getChildren(INTEGER);
+ for (int i = 0; i < integerMementos.length; i++) {
+ fProperties.put(integerMementos[i].getID(), integerMementos[i].getInteger(INTEGER));
+ }
+
+ IMemento[] booleanMementos = presentationMemento.getChildren(BOOLEAN);
+ for (int i = 0; i < booleanMementos.length; i++) {
+ fProperties.put(booleanMementos[i].getID(), booleanMementos[i].getBoolean(BOOLEAN));
+ }
+
+ IMemento[] persistableMementos = presentationMemento.getChildren(PERSISTABLE);
+ for (int i = 0; i < persistableMementos.length; i++) {
+ String factoryID = persistableMementos[i].getString(PERSISTABLE);
+ if (factoryID != null) {
+ IElementFactory factory = PlatformUI.getWorkbench().getElementFactory(factoryID);
+ if (factory != null) {
+ Object element = factory.createElement(persistableMementos[i]);
+ if (element != null) {
+ fProperties.put(persistableMementos[i].getID(), element);
+ }
+ }
+ }
+ }
+ }
}
/**
@@ -235,27 +235,27 @@ public class PresentationContext implements IPresentationContext {
* @param memento Memento to save to.
*/
public void saveProperites(IMemento memento) {
- if (fProperties.isEmpty()) {
- return;
- }
- IMemento properties = memento.createChild(PRESENTATION_CONTEXT_PROPERTIES, getId());
+ if (fProperties.isEmpty()) {
+ return;
+ }
+ IMemento properties = memento.createChild(PRESENTATION_CONTEXT_PROPERTIES, getId());
for (Entry<String, Object> entry : fProperties.entrySet()) {
- if (entry.getValue() instanceof String) {
- IMemento value = properties.createChild(STRING, entry.getKey());
- value.putString(STRING, (String)entry.getValue());
- } else if (entry.getValue() instanceof Integer) {
- IMemento value = properties.createChild(INTEGER, entry.getKey());
- value.putInteger(INTEGER, ((Integer)entry.getValue()).intValue());
- } else if (entry.getValue() instanceof Boolean) {
- IMemento value = properties.createChild(BOOLEAN, entry.getKey());
- value.putBoolean(BOOLEAN, ((Boolean)entry.getValue()).booleanValue());
- } else if (entry.getValue() instanceof IPersistableElement) {
- IPersistableElement persistable = (IPersistableElement)entry.getValue();
- IMemento value = properties.createChild(PERSISTABLE, entry.getKey());
- value.putString(PERSISTABLE, persistable.getFactoryId());
- persistable.saveState(value);
- }
- }
+ if (entry.getValue() instanceof String) {
+ IMemento value = properties.createChild(STRING, entry.getKey());
+ value.putString(STRING, (String)entry.getValue());
+ } else if (entry.getValue() instanceof Integer) {
+ IMemento value = properties.createChild(INTEGER, entry.getKey());
+ value.putInteger(INTEGER, ((Integer)entry.getValue()).intValue());
+ } else if (entry.getValue() instanceof Boolean) {
+ IMemento value = properties.createChild(BOOLEAN, entry.getKey());
+ value.putBoolean(BOOLEAN, ((Boolean)entry.getValue()).booleanValue());
+ } else if (entry.getValue() instanceof IPersistableElement) {
+ IPersistableElement persistable = (IPersistableElement)entry.getValue();
+ IMemento value = properties.createChild(PERSISTABLE, entry.getKey());
+ value.putString(PERSISTABLE, persistable.getFactoryId());
+ persistable.saveState(value);
+ }
+ }
}
private boolean isEqual(Object a, Object b) {
@@ -273,15 +273,15 @@ public class PresentationContext implements IPresentationContext {
}
}
- @Override
+ @Override
public IWorkbenchPart getPart() {
- return fPart;
- }
+ return fPart;
+ }
- @Override
+ @Override
public IWorkbenchWindow getWindow() {
- return fWindow;
- }
+ return fWindow;
+ }
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/TreeModelViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/TreeModelViewer.java
index eb6492cd3..a1a498ecb 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/TreeModelViewer.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/TreeModelViewer.java
@@ -128,7 +128,7 @@ public class TreeModelViewer extends InternalTreeModelViewer {
/**
* Initializes viewer state from the memento
*
- * @param memento the {@link IMemento} to read from
+ * @param memento the {@link IMemento} to read from
*/
@Override
public void initState(IMemento memento) {
@@ -138,16 +138,16 @@ public class TreeModelViewer extends InternalTreeModelViewer {
/**
* Save viewer state into the given memento.
*
- * @param memento the {@link IMemento} to save to
+ * @param memento the {@link IMemento} to save to
*/
@Override
public void saveState(IMemento memento) {
super.saveState(memento);
}
- /**
- * @return Returns true if columns are being displayed currently.
- */
+ /**
+ * @return Returns true if columns are being displayed currently.
+ */
@Override
public boolean isShowColumns() {
return super.isShowColumns();
@@ -187,8 +187,8 @@ public class TreeModelViewer extends InternalTreeModelViewer {
super.setVisibleColumns(ids);
}
- @Override
+ @Override
public ViewerLabel getElementLabel(TreePath path, String columnId) {
- return super.getElementLabel(path, columnId);
- }
+ return super.getElementLabel(path, columnId);
+ }
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/TreeModelViewerFilter.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/TreeModelViewerFilter.java
index f48408a7b..54153c113 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/TreeModelViewerFilter.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/TreeModelViewerFilter.java
@@ -30,12 +30,12 @@ import org.eclipse.jface.viewers.ViewerFilter;
*/
abstract public class TreeModelViewerFilter extends ViewerFilter {
- /**
- * Determines whether the filter applies to the given parent element.
- * @return Returns true if the viewer should use the given filter on the
- * given element.
- * @param viewer The viewer that is using this filter to select elements.
- * @param parentElement Parent element to check filter for.
- */
- abstract public boolean isApplicable(ITreeModelViewer viewer, Object parentElement);
+ /**
+ * Determines whether the filter applies to the given parent element.
+ * @return Returns true if the viewer should use the given filter on the
+ * given element.
+ * @param viewer The viewer that is using this filter to select elements.
+ * @param parentElement Parent element to check filter for.
+ */
+ abstract public boolean isApplicable(ITreeModelViewer viewer, Object parentElement);
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ViewerInputService.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ViewerInputService.java
index 51e385737..a52928877 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ViewerInputService.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ViewerInputService.java
@@ -28,18 +28,18 @@ import org.eclipse.debug.internal.ui.viewers.model.ViewerInputUpdate;
*/
public class ViewerInputService {
- /**
- * An input object which will yield a null input element.
- *
- * @since 3.6
- */
- public final static Object NULL_INPUT = new IViewerInputProvider() {
- @Override
+ /**
+ * An input object which will yield a null input element.
+ *
+ * @since 3.6
+ */
+ public final static Object NULL_INPUT = new IViewerInputProvider() {
+ @Override
public void update(IViewerInputUpdate update) {
- update.setInputElement(null);
- update.done();
- }
- };
+ update.setInputElement(null);
+ update.done();
+ }
+ };
// previous update request, cancelled when a new request comes in
private IViewerInputUpdate fPendingUpdate = null;
@@ -63,7 +63,7 @@ public class ViewerInputService {
/**
* Constructs a viewer input service for the given requester and presentation context.
*
- * @param viewer for which inputs are required
+ * @param viewer for which inputs are required
* @param requestor client requesting viewer inputs
*/
public ViewerInputService(ITreeModelViewer viewer, IViewerInputRequestor requestor) {
@@ -90,7 +90,7 @@ public class ViewerInputService {
}
if (provdier == null) {
fPendingUpdate.setInputElement(source);
- fPendingUpdate.done();
+ fPendingUpdate.done();
} else {
provdier.update(fPendingUpdate);
}
@@ -100,9 +100,9 @@ public class ViewerInputService {
* Disposes this viewer input service, canceling any pending jobs.
*/
public synchronized void dispose() {
- if (fPendingUpdate != null) {
- fPendingUpdate.cancel();
- fPendingUpdate = null;
- }
+ if (fPendingUpdate != null) {
+ fPendingUpdate.cancel();
+ fPendingUpdate = null;
+ }
}
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/VirtualItem.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/VirtualItem.java
index 0c817a971..0115e8b0a 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/VirtualItem.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/VirtualItem.java
@@ -31,534 +31,534 @@ import org.eclipse.debug.internal.core.IInternalDebugCoreConstants;
*/
public class VirtualItem {
- // Data keys for display attributes of an item.
- public static String LABEL_KEY = "LABEL_KEY"; //$NON-NLS-1$
- public static String IMAGE_KEY = "IMAGE_KEY"; //$NON-NLS-1$
- public static String FONT_KEY = "FONT_KEY"; //$NON-NLS-1$
- public static String FOREGROUND_KEY = "FOREGROUND_KEY"; //$NON-NLS-1$
- public static String BACKGROUND_KEY = "BACKGROUND_KEY"; //$NON-NLS-1$
-
- public static String ELEMENT_DATA_KEY = "element"; //$NON-NLS-1$
-
- /**
- * Index object of a tree item. It allows the indexes to be modified
- * as items are inserted and removed.
- */
+ // Data keys for display attributes of an item.
+ public static String LABEL_KEY = "LABEL_KEY"; //$NON-NLS-1$
+ public static String IMAGE_KEY = "IMAGE_KEY"; //$NON-NLS-1$
+ public static String FONT_KEY = "FONT_KEY"; //$NON-NLS-1$
+ public static String FOREGROUND_KEY = "FOREGROUND_KEY"; //$NON-NLS-1$
+ public static String BACKGROUND_KEY = "BACKGROUND_KEY"; //$NON-NLS-1$
+
+ public static String ELEMENT_DATA_KEY = "element"; //$NON-NLS-1$
+
+ /**
+ * Index object of a tree item. It allows the indexes to be modified
+ * as items are inserted and removed.
+ */
public static class Index implements Comparable<Object> {
- private Integer fIndexValue;
+ private Integer fIndexValue;
- public Index(int index) {
- fIndexValue = Integer.valueOf(index);
- }
+ public Index(int index) {
+ fIndexValue = Integer.valueOf(index);
+ }
- @Override
+ @Override
public boolean equals(Object obj) {
- return obj instanceof Index && ((Index)obj).fIndexValue.equals(fIndexValue);
- }
+ return obj instanceof Index && ((Index)obj).fIndexValue.equals(fIndexValue);
+ }
- @Override
+ @Override
public int hashCode() {
- return fIndexValue.hashCode();
- }
+ return fIndexValue.hashCode();
+ }
- public void increment() {
- fIndexValue = Integer.valueOf(fIndexValue.intValue() + 1);
- }
+ public void increment() {
+ fIndexValue = Integer.valueOf(fIndexValue.intValue() + 1);
+ }
- public void decrement() {
- fIndexValue = Integer.valueOf(fIndexValue.intValue() - 1);
- }
+ public void decrement() {
+ fIndexValue = Integer.valueOf(fIndexValue.intValue() - 1);
+ }
- public int intValue() {
- return fIndexValue.intValue();
- }
+ public int intValue() {
+ return fIndexValue.intValue();
+ }
- @Override
+ @Override
public int compareTo(Object obj) {
- return obj instanceof Index ? fIndexValue.compareTo(((Index)obj).fIndexValue) : 0;
- }
+ return obj instanceof Index ? fIndexValue.compareTo(((Index)obj).fIndexValue) : 0;
+ }
- @Override
+ @Override
public String toString() {
- return fIndexValue.toString();
- }
- }
-
- /**
- * Parent items of this item.
- */
- final private VirtualItem fParent;
-
- /**
- * The index of this item.
- */
- final private Index fIndex;
-
- /**
- * Map of child items. The key to the map is the item's index, which
- * must be the same object instance as the index in the item. The tree map
- * keeps the items sorted while allowing indexes (keys) to be modified as
- * child items are inserted and removed.
- */
+ return fIndexValue.toString();
+ }
+ }
+
+ /**
+ * Parent items of this item.
+ */
+ final private VirtualItem fParent;
+
+ /**
+ * The index of this item.
+ */
+ final private Index fIndex;
+
+ /**
+ * Map of child items. The key to the map is the item's index, which
+ * must be the same object instance as the index in the item. The tree map
+ * keeps the items sorted while allowing indexes (keys) to be modified as
+ * child items are inserted and removed.
+ */
private Map<Index, VirtualItem> fItems = new TreeMap<>();
- /**
- * Flag indicating whether this item has child items.
- */
- private boolean fHasItems = false;
-
- /**
- * Indicates that this item has been expanded. It should only
- * be set to <code>true</code> if fHasItems is <code>true</code>.
- */
- private boolean fExpanded = false;
-
- /**
- * The count of child items. <code>-1</code> indicates that the count
- * is not known.
- */
- private int fItemCount = -1;
-
- /**
- * The data held by this item. It includes the element as well as the item
- * display attributes.
- */
+ /**
+ * Flag indicating whether this item has child items.
+ */
+ private boolean fHasItems = false;
+
+ /**
+ * Indicates that this item has been expanded. It should only
+ * be set to <code>true</code> if fHasItems is <code>true</code>.
+ */
+ private boolean fExpanded = false;
+
+ /**
+ * The count of child items. <code>-1</code> indicates that the count
+ * is not known.
+ */
+ private int fItemCount = -1;
+
+ /**
+ * The data held by this item. It includes the element as well as the item
+ * display attributes.
+ */
private Map<String, Object> fData = new HashMap<>(1);
- /**
- * Flag indicating that the item needs to have it's label updated.
- */
- private boolean fNeedsLabelUpdate = true;
-
- /**
- * Flag indicating that the item's count needs to be updated.
- */
- private boolean fNeedsCountUpdate = true;
-
- /**
- * Flag indicating that the item's element needs to be updated.
- */
- private boolean fNeedsDataUpdate = true;
-
- /**
- * Indicates that this item has been disposed.
- */
- private boolean fDisposed = false;
-
-
- /**
- * Virtual item constructor.
- * @param parent parent virtual item
- * @param index index of the item in the parent
- */
- public VirtualItem(VirtualItem parent, Index index) {
- fParent = parent;
- fIndex = index;
- }
-
- /**
- * Clears the child item at the given index.
- * @param index index of item to clear.
- */
- public void clear(Index index) {
- VirtualItem item = fItems.remove(index);
- if (item != null) {
- item.dispose();
- }
- }
-
- /**
- * Clears all child items.
- *
- * @since 3.9
- */
- public void clearAll() {
- fData.clear();
+ /**
+ * Flag indicating that the item needs to have it's label updated.
+ */
+ private boolean fNeedsLabelUpdate = true;
+
+ /**
+ * Flag indicating that the item's count needs to be updated.
+ */
+ private boolean fNeedsCountUpdate = true;
+
+ /**
+ * Flag indicating that the item's element needs to be updated.
+ */
+ private boolean fNeedsDataUpdate = true;
+
+ /**
+ * Indicates that this item has been disposed.
+ */
+ private boolean fDisposed = false;
+
+
+ /**
+ * Virtual item constructor.
+ * @param parent parent virtual item
+ * @param index index of the item in the parent
+ */
+ public VirtualItem(VirtualItem parent, Index index) {
+ fParent = parent;
+ fIndex = index;
+ }
+
+ /**
+ * Clears the child item at the given index.
+ * @param index index of item to clear.
+ */
+ public void clear(Index index) {
+ VirtualItem item = fItems.remove(index);
+ if (item != null) {
+ item.dispose();
+ }
+ }
+
+ /**
+ * Clears all child items.
+ *
+ * @since 3.9
+ */
+ public void clearAll() {
+ fData.clear();
for (VirtualItem item : fItems.values()) {
item.dispose();
- }
- fItems.clear();
- }
- /**
- * Returns the parent item.
- * @return parent item.
- */
- public VirtualItem getParent() {
- return fParent;
- }
-
- /**
- * @return Returns the index of this item.
- */
- public Index getIndex() {
- return fIndex;
- }
-
- /**
- * Finds the given item in the child items of this element.
- * @param element Data object of the item to be found.
- * @return Item if found, <code>null</code> if not.
- */
- public VirtualItem findItem(Object element) {
+ }
+ fItems.clear();
+ }
+ /**
+ * Returns the parent item.
+ * @return parent item.
+ */
+ public VirtualItem getParent() {
+ return fParent;
+ }
+
+ /**
+ * @return Returns the index of this item.
+ */
+ public Index getIndex() {
+ return fIndex;
+ }
+
+ /**
+ * Finds the given item in the child items of this element.
+ * @param element Data object of the item to be found.
+ * @return Item if found, <code>null</code> if not.
+ */
+ public VirtualItem findItem(Object element) {
for (VirtualItem item : fItems.values()) {
Object nextData = item.getData();
- if ( (element != null && element.equals(nextData)) || (element == null && nextData == null) ) {
+ if ( (element != null && element.equals(nextData)) || (element == null && nextData == null) ) {
return item;
- }
- }
- return null;
- }
-
- /**
- * @return Returns whether the data element of this item is stale.
- */
- public boolean needsDataUpdate() {
- return fNeedsDataUpdate;
- }
-
- /**
- * Marks the item as having a stale data item.
- */
- public void setNeedsDataUpdate() {
- fNeedsDataUpdate = true;
- }
-
- /**
- * Clears the stale status of the item's data element.
- */
- public void clearNeedsDataUpdate() {
- fNeedsDataUpdate = false;
- }
-
- /**
- * @return Returns whether the item has stale item count.
- */
- public boolean needsCountUpdate() {
- return fNeedsCountUpdate;
- }
-
- /**
- * Marks the item as having a stale child count.
- */
- public void setNeedsCountUpdate() {
- fNeedsCountUpdate = true;
- fItemCount = -1;
- }
-
- /**
- * Clears the stale status of the item's child count.
- */
- public void clearNeedsCountUpdate() {
- fNeedsCountUpdate = false;
- }
-
- /**
- * @return Returns whether the item has stale label.
- */
- public boolean needsLabelUpdate() {
- return fNeedsLabelUpdate;
- }
-
- /**
- * Marks the item as having a stale label data.
- */
- public void setNeedsLabelUpdate() {
- fNeedsLabelUpdate = true;
- }
-
- /**
- * Clears the stale status of the item's label.
- */
- public void clearNeedsLabelUpdate() {
- fNeedsLabelUpdate = false;
- }
-
- /**
- * @return Returns whether the item has been disposed.
- */
- public boolean isDisposed() {
- return fDisposed;
- }
-
- /**
- * Disposes the item.
- */
- public void dispose() {
- clearAll();
-
- fDisposed = true;
- findTree().fireItemDisposed(this);
- }
-
- /**
- * @param key Key to retrieve data for.
- * @return Returns item data corresponding to given key.
- */
- public Object getData (String key) {
- return fData.get(key);
- }
-
- /**
- * Sets given data element for given key.
- * @param key Key for data.
- * @param data Data value.
- */
- public void setData(String key, Object data) {
- fData.put(key, data);
- }
-
- /**
- * Sets the item's data element.
- * @param data Item's new element.
- */
- public void setData(Object data) {
- fData.put(ELEMENT_DATA_KEY, data);
- }
-
- /**
- * @return Returns item's data element.
- */
- public Object getData () {
- return fData.get(ELEMENT_DATA_KEY);
- }
-
- /**
- * Marks the given item as expanded or collapsed.
- * @param expanded If true, item will be marked as expanded.
- */
- public void setExpanded(boolean expanded) {
- if (fExpanded == expanded) {
- return;
- }
- fExpanded = expanded;
-
- if (fExpanded && getItemCount() == -1) {
- setNeedsCountUpdate();
- }
-
-
- Assert.isTrue(!fExpanded || hasItems());
-
- // If collapsed, make sure that all the children are collapsed as well.
- if (!fExpanded) {
+ }
+ }
+ return null;
+ }
+
+ /**
+ * @return Returns whether the data element of this item is stale.
+ */
+ public boolean needsDataUpdate() {
+ return fNeedsDataUpdate;
+ }
+
+ /**
+ * Marks the item as having a stale data item.
+ */
+ public void setNeedsDataUpdate() {
+ fNeedsDataUpdate = true;
+ }
+
+ /**
+ * Clears the stale status of the item's data element.
+ */
+ public void clearNeedsDataUpdate() {
+ fNeedsDataUpdate = false;
+ }
+
+ /**
+ * @return Returns whether the item has stale item count.
+ */
+ public boolean needsCountUpdate() {
+ return fNeedsCountUpdate;
+ }
+
+ /**
+ * Marks the item as having a stale child count.
+ */
+ public void setNeedsCountUpdate() {
+ fNeedsCountUpdate = true;
+ fItemCount = -1;
+ }
+
+ /**
+ * Clears the stale status of the item's child count.
+ */
+ public void clearNeedsCountUpdate() {
+ fNeedsCountUpdate = false;
+ }
+
+ /**
+ * @return Returns whether the item has stale label.
+ */
+ public boolean needsLabelUpdate() {
+ return fNeedsLabelUpdate;
+ }
+
+ /**
+ * Marks the item as having a stale label data.
+ */
+ public void setNeedsLabelUpdate() {
+ fNeedsLabelUpdate = true;
+ }
+
+ /**
+ * Clears the stale status of the item's label.
+ */
+ public void clearNeedsLabelUpdate() {
+ fNeedsLabelUpdate = false;
+ }
+
+ /**
+ * @return Returns whether the item has been disposed.
+ */
+ public boolean isDisposed() {
+ return fDisposed;
+ }
+
+ /**
+ * Disposes the item.
+ */
+ public void dispose() {
+ clearAll();
+
+ fDisposed = true;
+ findTree().fireItemDisposed(this);
+ }
+
+ /**
+ * @param key Key to retrieve data for.
+ * @return Returns item data corresponding to given key.
+ */
+ public Object getData (String key) {
+ return fData.get(key);
+ }
+
+ /**
+ * Sets given data element for given key.
+ * @param key Key for data.
+ * @param data Data value.
+ */
+ public void setData(String key, Object data) {
+ fData.put(key, data);
+ }
+
+ /**
+ * Sets the item's data element.
+ * @param data Item's new element.
+ */
+ public void setData(Object data) {
+ fData.put(ELEMENT_DATA_KEY, data);
+ }
+
+ /**
+ * @return Returns item's data element.
+ */
+ public Object getData () {
+ return fData.get(ELEMENT_DATA_KEY);
+ }
+
+ /**
+ * Marks the given item as expanded or collapsed.
+ * @param expanded If true, item will be marked as expanded.
+ */
+ public void setExpanded(boolean expanded) {
+ if (fExpanded == expanded) {
+ return;
+ }
+ fExpanded = expanded;
+
+ if (fExpanded && getItemCount() == -1) {
+ setNeedsCountUpdate();
+ }
+
+
+ Assert.isTrue(!fExpanded || hasItems());
+
+ // If collapsed, make sure that all the children are collapsed as well.
+ if (!fExpanded) {
for (VirtualItem item : fItems.values()) {
item.setExpanded(expanded);
- }
- }
- }
-
- /**
- * @return Returns item's expanded state.
- */
- public boolean getExpanded() {
- return fExpanded;
- }
-
- /**
- * Sets the flag indicating whether item has child items.
- * @param hasChildren Set to true if child has items.
- */
- public void setHasItems(boolean hasChildren) {
- fHasItems = hasChildren;
- if (!fHasItems) {
- if (getItemCount() != 0) {
- setItemCount(0);
- }
- } else if (getItemCount() == 0) {
- setItemCount(-1);
- }
- }
-
- /**
- * @return Returns true if item has child items.
- */
- public boolean hasItems() {
- return fHasItems;
- }
-
- /**
- * Sets the item's child count.
- * @param count Child count.
- */
- public void setItemCount(int count) {
- fItemCount = count;
+ }
+ }
+ }
+
+ /**
+ * @return Returns item's expanded state.
+ */
+ public boolean getExpanded() {
+ return fExpanded;
+ }
+
+ /**
+ * Sets the flag indicating whether item has child items.
+ * @param hasChildren Set to true if child has items.
+ */
+ public void setHasItems(boolean hasChildren) {
+ fHasItems = hasChildren;
+ if (!fHasItems) {
+ if (getItemCount() != 0) {
+ setItemCount(0);
+ }
+ } else if (getItemCount() == 0) {
+ setItemCount(-1);
+ }
+ }
+
+ /**
+ * @return Returns true if item has child items.
+ */
+ public boolean hasItems() {
+ return fHasItems;
+ }
+
+ /**
+ * Sets the item's child count.
+ * @param count Child count.
+ */
+ public void setItemCount(int count) {
+ fItemCount = count;
for (Iterator<Entry<Index, VirtualItem>> itr = fItems.entrySet().iterator(); itr.hasNext();) {
Entry<Index, VirtualItem> entry = itr.next();
- int index = entry.getKey().intValue();
- if (index >= count) {
- VirtualItem item = entry.getValue();
- item.dispose();
- itr.remove();
- }
- }
- if (fItemCount == 0) {
- if (hasItems()) {
- setHasItems(false);
- }
- if (getExpanded()) {
- setExpanded(false);
- }
- } else {
- if (!hasItems()) {
- setHasItems(true);
- }
- }
- }
-
- /**
- * @return Returns item's child count.
- */
- public int getItemCount() {
- return fItemCount;
- }
-
- /**
- * Returns the child item at given index. Child item is created if needed.
- *
- * @param index Index of the child item.
- * @return Child item.
- */
- public VirtualItem getItem(Index index) {
- ensureItems();
-
- VirtualItem item = fItems.get(index);
- if (item == null) {
- item = new VirtualItem(this, index);
- fItems.put(index, item);
- }
- return item;
- }
-
- /**
- * @return Returns true if any of the child items need a data update.
- */
- public boolean childrenNeedDataUpdate() {
- if (getItemCount() == 0) {
- return false;
- }
- if (fItems == null || fItems.size() != fItemCount) {
- return true;
- }
+ int index = entry.getKey().intValue();
+ if (index >= count) {
+ VirtualItem item = entry.getValue();
+ item.dispose();
+ itr.remove();
+ }
+ }
+ if (fItemCount == 0) {
+ if (hasItems()) {
+ setHasItems(false);
+ }
+ if (getExpanded()) {
+ setExpanded(false);
+ }
+ } else {
+ if (!hasItems()) {
+ setHasItems(true);
+ }
+ }
+ }
+
+ /**
+ * @return Returns item's child count.
+ */
+ public int getItemCount() {
+ return fItemCount;
+ }
+
+ /**
+ * Returns the child item at given index. Child item is created if needed.
+ *
+ * @param index Index of the child item.
+ * @return Child item.
+ */
+ public VirtualItem getItem(Index index) {
+ ensureItems();
+
+ VirtualItem item = fItems.get(index);
+ if (item == null) {
+ item = new VirtualItem(this, index);
+ fItems.put(index, item);
+ }
+ return item;
+ }
+
+ /**
+ * @return Returns true if any of the child items need a data update.
+ */
+ public boolean childrenNeedDataUpdate() {
+ if (getItemCount() == 0) {
+ return false;
+ }
+ if (fItems == null || fItems.size() != fItemCount) {
+ return true;
+ }
for (VirtualItem child : fItems.values()) {
- if (child.needsDataUpdate()) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Returns an array of current child items. The returned array contains
- * only the items that have been created. It may not contain as many items as the
- * item count.
- *
- * @return Child items array.
- */
- public VirtualItem[] getItems() {
- return fItems.values().toArray(new VirtualItem[fItems.size()]);
- }
-
- /**
- * Adds a child item at the given index position.
- * @param position The index position to inser the new item at.
- * @return Returns the added item.
- */
- public VirtualItem addItem(int position) {
- if (!fHasItems) {
- fHasItems = true;
- }
- if (fItemCount < 0) {
- fItemCount = 0;
- }
-
- // Increment all items with an index higher than the given position.
- fItemCount++;
- ensureItems();
+ if (child.needsDataUpdate()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns an array of current child items. The returned array contains
+ * only the items that have been created. It may not contain as many items as the
+ * item count.
+ *
+ * @return Child items array.
+ */
+ public VirtualItem[] getItems() {
+ return fItems.values().toArray(new VirtualItem[fItems.size()]);
+ }
+
+ /**
+ * Adds a child item at the given index position.
+ * @param position The index position to inser the new item at.
+ * @return Returns the added item.
+ */
+ public VirtualItem addItem(int position) {
+ if (!fHasItems) {
+ fHasItems = true;
+ }
+ if (fItemCount < 0) {
+ fItemCount = 0;
+ }
+
+ // Increment all items with an index higher than the given position.
+ fItemCount++;
+ ensureItems();
for (Index childIndex : fItems.keySet()) {
- if (childIndex.intValue() >= position) {
- childIndex.increment();
- }
- }
-
- // Note: the same index object used to create the item has to
- // be used as the key into the map.
- Index childIndex = new Index(position);
- VirtualItem newChild = new VirtualItem(this, childIndex);
- fItems.put(childIndex, newChild);
- return newChild;
- }
-
- /**
- * Removes the item at the given index.
- * @param position Index of the item to remove.
- */
- public void remove(Index position) {
- fItemCount--;
- if (fItemCount < 0) {
- fHasItems = false;
- }
-
- ensureItems();
-
- VirtualItem removedItem = null;
+ if (childIndex.intValue() >= position) {
+ childIndex.increment();
+ }
+ }
+
+ // Note: the same index object used to create the item has to
+ // be used as the key into the map.
+ Index childIndex = new Index(position);
+ VirtualItem newChild = new VirtualItem(this, childIndex);
+ fItems.put(childIndex, newChild);
+ return newChild;
+ }
+
+ /**
+ * Removes the item at the given index.
+ * @param position Index of the item to remove.
+ */
+ public void remove(Index position) {
+ fItemCount--;
+ if (fItemCount < 0) {
+ fHasItems = false;
+ }
+
+ ensureItems();
+
+ VirtualItem removedItem = null;
for (Iterator<Entry<Index, VirtualItem>> itr = fItems.entrySet().iterator(); itr.hasNext();) {
Entry<Index, VirtualItem> entry = itr.next();
- Index childIndex = entry.getKey();
- if (childIndex.intValue() > position.intValue()) {
- childIndex.decrement();
- } else if (childIndex.intValue() == position.intValue()) {
- removedItem = entry.getValue();
- removedItem.dispose();
- itr.remove();
- }
- }
- }
-
- private void ensureItems() {
- if (fItems == null) {
+ Index childIndex = entry.getKey();
+ if (childIndex.intValue() > position.intValue()) {
+ childIndex.decrement();
+ } else if (childIndex.intValue() == position.intValue()) {
+ removedItem = entry.getValue();
+ removedItem.dispose();
+ itr.remove();
+ }
+ }
+ }
+
+ private void ensureItems() {
+ if (fItems == null) {
fItems = new HashMap<>(Math.max(1, Math.min(fItemCount, 16)));
- }
- }
-
- private VirtualTree findTree() {
- VirtualItem item = this;
- while (!(item instanceof VirtualTree)) {
- item = item.fParent;
- }
- return (VirtualTree)item;
- }
-
- @Override
+ }
+ }
+
+ private VirtualTree findTree() {
+ VirtualItem item = this;
+ while (!(item instanceof VirtualTree)) {
+ item = item.fParent;
+ }
+ return (VirtualTree)item;
+ }
+
+ @Override
public String toString() {
- StringBuffer buffer = new StringBuffer();
- toStringItem(buffer, IInternalDebugCoreConstants.EMPTY_STRING);
- return buffer.toString();
- }
-
- void toStringItem(StringBuffer buffer, String indent) {
- buffer.append(indent);
- buffer.append(toStringElement());
- buffer.append("\n"); //$NON-NLS-1$
- indent = indent + " "; //$NON-NLS-1$
- for (int i = 0; i < fItemCount; i++) {
- VirtualItem item = fItems.get(new Index(i));
- if (item != null) {
- item.toStringItem(buffer, indent);
- } else {
- buffer.append("<no item>\n"); //$NON-NLS-1$
- }
- }
- }
-
- private String toStringElement() {
- String[] label = (String[])fData.get(LABEL_KEY);
- if (label != null && label.length != 0) {
- return label[0];
- }
- Object data = fData.get(ELEMENT_DATA_KEY);
- if (data != null) {
- return data.toString();
- }
- return "<no data>"; //$NON-NLS-1$
- }
+ StringBuffer buffer = new StringBuffer();
+ toStringItem(buffer, IInternalDebugCoreConstants.EMPTY_STRING);
+ return buffer.toString();
+ }
+
+ void toStringItem(StringBuffer buffer, String indent) {
+ buffer.append(indent);
+ buffer.append(toStringElement());
+ buffer.append("\n"); //$NON-NLS-1$
+ indent = indent + " "; //$NON-NLS-1$
+ for (int i = 0; i < fItemCount; i++) {
+ VirtualItem item = fItems.get(new Index(i));
+ if (item != null) {
+ item.toStringItem(buffer, indent);
+ } else {
+ buffer.append("<no item>\n"); //$NON-NLS-1$
+ }
+ }
+ }
+
+ private String toStringElement() {
+ String[] label = (String[])fData.get(LABEL_KEY);
+ if (label != null && label.length != 0) {
+ return label[0];
+ }
+ Object data = fData.get(ELEMENT_DATA_KEY);
+ if (data != null) {
+ return data.toString();
+ }
+ return "<no data>"; //$NON-NLS-1$
+ }
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/VirtualTree.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/VirtualTree.java
index 6eca256f3..3395b071e 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/VirtualTree.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/VirtualTree.java
@@ -29,193 +29,193 @@ import org.eclipse.swt.SWT;
*/
public class VirtualTree extends VirtualItem {
- /**
- * Lazy virtual tree does not retrieve elements or labels,
- * except for the selected elements.
- */
- private boolean fLazy;
+ /**
+ * Lazy virtual tree does not retrieve elements or labels,
+ * except for the selected elements.
+ */
+ private boolean fLazy;
- private IVirtualItemValidator fValidator;
+ private IVirtualItemValidator fValidator;
- private class SelectedItemValidator implements IVirtualItemValidator {
- @Override
+ private class SelectedItemValidator implements IVirtualItemValidator {
+ @Override
public boolean isItemVisible(VirtualItem item) {
- // visible items. For now only mark the selected items as visible.
- for (int i = 0; i < fSelection.length; i++) {
- VirtualItem selectionItem = fSelection[i];
- while (selectionItem != null) {
- if (item.equals(selectionItem)) {
- return true;
- }
- selectionItem = selectionItem.getParent();
- }
- }
- return false;
- }
-
- @Override
+ // visible items. For now only mark the selected items as visible.
+ for (int i = 0; i < fSelection.length; i++) {
+ VirtualItem selectionItem = fSelection[i];
+ while (selectionItem != null) {
+ if (item.equals(selectionItem)) {
+ return true;
+ }
+ selectionItem = selectionItem.getParent();
+ }
+ }
+ return false;
+ }
+
+ @Override
public void showItem(VirtualItem item) {
- }
- }
+ }
+ }
- /**
- * Set of listeners of the virtual tree.
- */
+ /**
+ * Set of listeners of the virtual tree.
+ */
private Set<IVirtualItemListener> fVirtualItemListeners = new HashSet<>(1);
- /**
- * The currently selected items. This array contains only
- * the leaf items which are selected.
- */
- private VirtualItem[] fSelection = new VirtualItem[0];
-
- /**
- * Constructs the virtual tree with the given style and validator.
- *
- * @param style The style flag. Only SWT.VIRTUAL flag is used.
- * @param validator Item validator used to determine item visibility.
- */
- public VirtualTree(int style, IVirtualItemValidator validator) {
- super(null, new VirtualItem.Index(0));
- fLazy = (style & SWT.VIRTUAL) != 0;
- if (fLazy && validator == null) {
- fValidator = new SelectedItemValidator();
- } else {
- fValidator = validator;
- }
- clearNeedsLabelUpdate();
- clearNeedsDataUpdate();
- }
-
- /**
- * Disposes the virtual tree.
- */
- @Override
+ /**
+ * The currently selected items. This array contains only
+ * the leaf items which are selected.
+ */
+ private VirtualItem[] fSelection = new VirtualItem[0];
+
+ /**
+ * Constructs the virtual tree with the given style and validator.
+ *
+ * @param style The style flag. Only SWT.VIRTUAL flag is used.
+ * @param validator Item validator used to determine item visibility.
+ */
+ public VirtualTree(int style, IVirtualItemValidator validator) {
+ super(null, new VirtualItem.Index(0));
+ fLazy = (style & SWT.VIRTUAL) != 0;
+ if (fLazy && validator == null) {
+ fValidator = new SelectedItemValidator();
+ } else {
+ fValidator = validator;
+ }
+ clearNeedsLabelUpdate();
+ clearNeedsDataUpdate();
+ }
+
+ /**
+ * Disposes the virtual tree.
+ */
+ @Override
public void dispose() {
- super.dispose();
- fVirtualItemListeners.clear();
- }
+ super.dispose();
+ fVirtualItemListeners.clear();
+ }
- @Override
+ @Override
public void setNeedsCountUpdate() {
- super.setNeedsCountUpdate();
- clearNeedsLabelUpdate();
- clearNeedsDataUpdate();
- }
+ super.setNeedsCountUpdate();
+ clearNeedsLabelUpdate();
+ clearNeedsDataUpdate();
+ }
- @Override
+ @Override
public void setNeedsLabelUpdate() {
- // no-op
- }
+ // no-op
+ }
- @Override
+ @Override
public void setData(String key, Object data) {
- super.setData(key, data);
- if (data == null) {
- clearNeedsDataUpdate();
- }
- }
-
- /**
- * Adds a listener for when virtual items are revealed in the view.
- * @param listener Listener to add to list of listeners.
- */
- public void addItemListener(IVirtualItemListener listener) {
- fVirtualItemListeners.add(listener);
- }
-
- public void removeItemListener(IVirtualItemListener listener) {
- fVirtualItemListeners.remove(listener);
- }
-
- public VirtualItem[] getSelection() {
- return fSelection;
- }
-
- public void setSelection(VirtualItem[] items) {
- fSelection = items;
- }
-
- public void showItem(VirtualItem item) {
- if (fValidator != null) {
- fValidator.showItem(item);
- }
- }
-
- public void fireItemDisposed(VirtualItem item) {
+ super.setData(key, data);
+ if (data == null) {
+ clearNeedsDataUpdate();
+ }
+ }
+
+ /**
+ * Adds a listener for when virtual items are revealed in the view.
+ * @param listener Listener to add to list of listeners.
+ */
+ public void addItemListener(IVirtualItemListener listener) {
+ fVirtualItemListeners.add(listener);
+ }
+
+ public void removeItemListener(IVirtualItemListener listener) {
+ fVirtualItemListeners.remove(listener);
+ }
+
+ public VirtualItem[] getSelection() {
+ return fSelection;
+ }
+
+ public void setSelection(VirtualItem[] items) {
+ fSelection = items;
+ }
+
+ public void showItem(VirtualItem item) {
+ if (fValidator != null) {
+ fValidator.showItem(item);
+ }
+ }
+
+ public void fireItemDisposed(VirtualItem item) {
for (IVirtualItemListener listener : fVirtualItemListeners) {
listener.disposed(item);
- }
- }
+ }
+ }
- public void fireItemRevealed(VirtualItem item) {
+ public void fireItemRevealed(VirtualItem item) {
for (IVirtualItemListener listener : fVirtualItemListeners) {
listener.revealed(item);
- }
- }
+ }
+ }
- @Override
+ @Override
public void setData(Object data) {
- super.setData(data);
- // The root item always has children as long as the input is non-null,
- // so that it should be expanded.
- setHasItems(data != null);
- }
+ super.setData(data);
+ // The root item always has children as long as the input is non-null,
+ // so that it should be expanded.
+ setHasItems(data != null);
+ }
- @Override
+ @Override
public void setHasItems(boolean hasChildren) {
- super.setHasItems(hasChildren);
- // The root item is always expanded as long as it has children.
- if (hasChildren) {
- setExpanded(true);
- }
- }
-
- /**
- * Returns whether the given item is considered visible by the tree as
- * determined by its virtual item validator.
- *
- * @param item Item to check.
- * @return true if items is vislble.
- * @see IVirtualItemValidator
- */
- public boolean isItemVisible(VirtualItem item) {
- if (fLazy) {
- return fValidator.isItemVisible(item);
- }
- return true;
- }
-
- /**
- * Validates the entire tree.
- */
- public void validate() {
- validate(VirtualTree.this);
- }
-
- /**
- * Validates the item and its children, identifying children which were
- * revealed and need to be updated.
- *
- * @param item The item which to validate.
- */
- public void validate(VirtualItem item) {
- if (item.needsDataUpdate()) {
- if (isItemVisible(item)) {
- fireItemRevealed(item);
- }
- } else if (item.getData() != null) {
- if ( item.needsLabelUpdate() || (item.needsCountUpdate() && item.hasItems() && item.getExpanded()) ) {
- if (isItemVisible(item)) {
- fireItemRevealed(item);
- }
- }
-
- if (item.getData() != null && item.getItemCount() > 0 && item.getExpanded()) {
- for (int i = 0; i < item.getItemCount(); i++) {
- validate(item.getItem(new Index(i)));
- }
- }
- }
- }
+ super.setHasItems(hasChildren);
+ // The root item is always expanded as long as it has children.
+ if (hasChildren) {
+ setExpanded(true);
+ }
+ }
+
+ /**
+ * Returns whether the given item is considered visible by the tree as
+ * determined by its virtual item validator.
+ *
+ * @param item Item to check.
+ * @return true if items is vislble.
+ * @see IVirtualItemValidator
+ */
+ public boolean isItemVisible(VirtualItem item) {
+ if (fLazy) {
+ return fValidator.isItemVisible(item);
+ }
+ return true;
+ }
+
+ /**
+ * Validates the entire tree.
+ */
+ public void validate() {
+ validate(VirtualTree.this);
+ }
+
+ /**
+ * Validates the item and its children, identifying children which were
+ * revealed and need to be updated.
+ *
+ * @param item The item which to validate.
+ */
+ public void validate(VirtualItem item) {
+ if (item.needsDataUpdate()) {
+ if (isItemVisible(item)) {
+ fireItemRevealed(item);
+ }
+ } else if (item.getData() != null) {
+ if ( item.needsLabelUpdate() || (item.needsCountUpdate() && item.hasItems() && item.getExpanded()) ) {
+ if (isItemVisible(item)) {
+ fireItemRevealed(item);
+ }
+ }
+
+ if (item.getData() != null && item.getItemCount() > 0 && item.getExpanded()) {
+ for (int i = 0; i < item.getItemCount(); i++) {
+ validate(item.getItem(new Index(i)));
+ }
+ }
+ }
+ }
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/VirtualTreeModelViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/VirtualTreeModelViewer.java
index c822846f8..1913181ba 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/VirtualTreeModelViewer.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/VirtualTreeModelViewer.java
@@ -39,187 +39,187 @@ import org.eclipse.ui.IMemento;
public class VirtualTreeModelViewer extends InternalVirtualTreeModelViewer {
- /**
- * Creates a virtual tree model viewer.
- * @param display Display used by the viewer to call the data providers
- * on the UI thread.
- * @param style Stlye flags.
- * @param context Viewer's presentation context.
- */
- public VirtualTreeModelViewer(Display display, int style, IPresentationContext context) {
- super(display, style, context, null);
- }
-
- /**
- * Creates a virtual tree model viewer.
- * @param display Display used by the viewer to call the data providers
- * on the UI thread.
- * @param style style flags.
- * @param context Viewer's presentation context.
- * @param validator Optional validator that is used to determine which items should be
- * considered visible when SWT.VIRTUAL style is used. If <code>null</code> then the
- * standard validator is used that updates only the selected items.
- *
- * @since 3.8
- */
- public VirtualTreeModelViewer(Display display, int style, IPresentationContext context, IVirtualItemValidator validator) {
- super(display, style, context, validator);
- }
-
- /**
- * Returns this viewer's presentation context.
- *
- * @return presentation context
- */
- @Override
+ /**
+ * Creates a virtual tree model viewer.
+ * @param display Display used by the viewer to call the data providers
+ * on the UI thread.
+ * @param style Stlye flags.
+ * @param context Viewer's presentation context.
+ */
+ public VirtualTreeModelViewer(Display display, int style, IPresentationContext context) {
+ super(display, style, context, null);
+ }
+
+ /**
+ * Creates a virtual tree model viewer.
+ * @param display Display used by the viewer to call the data providers
+ * on the UI thread.
+ * @param style style flags.
+ * @param context Viewer's presentation context.
+ * @param validator Optional validator that is used to determine which items should be
+ * considered visible when SWT.VIRTUAL style is used. If <code>null</code> then the
+ * standard validator is used that updates only the selected items.
+ *
+ * @since 3.8
+ */
+ public VirtualTreeModelViewer(Display display, int style, IPresentationContext context, IVirtualItemValidator validator) {
+ super(display, style, context, validator);
+ }
+
+ /**
+ * Returns this viewer's presentation context.
+ *
+ * @return presentation context
+ */
+ @Override
public IPresentationContext getPresentationContext() {
- return super.getPresentationContext();
- }
-
- /**
- * Registers the given listener for model delta notification.
- *
- * @param listener model delta listener
- */
- @Override
+ return super.getPresentationContext();
+ }
+
+ /**
+ * Registers the given listener for model delta notification.
+ *
+ * @param listener model delta listener
+ */
+ @Override
public void addModelChangedListener(IModelChangedListener listener) {
- super.addModelChangedListener(listener);
- }
-
- /**
- * Unregisters the given listener from model delta notification.
- *
- * @param listener model delta listener
- */
- @Override
+ super.addModelChangedListener(listener);
+ }
+
+ /**
+ * Unregisters the given listener from model delta notification.
+ *
+ * @param listener model delta listener
+ */
+ @Override
public void removeModelChangedListener(IModelChangedListener listener) {
- super.removeModelChangedListener(listener);
- }
-
- /**
- * Registers the specified listener for view update notifications.
- *
- * @param listener listener
- */
- @Override
+ super.removeModelChangedListener(listener);
+ }
+
+ /**
+ * Registers the specified listener for view update notifications.
+ *
+ * @param listener listener
+ */
+ @Override
public void addViewerUpdateListener(IViewerUpdateListener listener) {
- super.addViewerUpdateListener(listener);
- }
-
- /**
- * Removes the specified listener from update notifications.
- *
- * @param listener listener
- */
- @Override
+ super.addViewerUpdateListener(listener);
+ }
+
+ /**
+ * Removes the specified listener from update notifications.
+ *
+ * @param listener listener
+ */
+ @Override
public void removeViewerUpdateListener(IViewerUpdateListener listener) {
- super.removeViewerUpdateListener(listener);
- }
-
- /**
- * Returns whether columns can be toggled on/off for this viewer's current
- * input element.
- *
- * @return whether columns can be toggled on/off
- */
- @Override
+ super.removeViewerUpdateListener(listener);
+ }
+
+ /**
+ * Returns whether columns can be toggled on/off for this viewer's current
+ * input element.
+ *
+ * @return whether columns can be toggled on/off
+ */
+ @Override
public boolean canToggleColumns() {
- return super.canToggleColumns();
- }
-
- /**
- * Returns the current column presentation for this viewer, or <code>null</code>
- * if none.
- *
- * @return column presentation or <code>null</code>
- */
- @Override
+ return super.canToggleColumns();
+ }
+
+ /**
+ * Returns the current column presentation for this viewer, or <code>null</code>
+ * if none.
+ *
+ * @return column presentation or <code>null</code>
+ */
+ @Override
public IColumnPresentation getColumnPresentation() {
- return super.getColumnPresentation();
- }
-
- /**
- * Returns identifiers of the visible columns in this viewer, or <code>null</code>
- * if there are currently no columns.
- *
- * @return visible columns identifiers or <code>null</code>
- */
- @Override
+ return super.getColumnPresentation();
+ }
+
+ /**
+ * Returns identifiers of the visible columns in this viewer, or <code>null</code>
+ * if there are currently no columns.
+ *
+ * @return visible columns identifiers or <code>null</code>
+ */
+ @Override
public String[] getVisibleColumns() {
- return super.getVisibleColumns();
- }
-
- /**
- * Initializes viewer state from the memento
- *
- * @param memento the {@link IMemento} to read from
- */
- @Override
+ return super.getVisibleColumns();
+ }
+
+ /**
+ * Initializes viewer state from the memento
+ *
+ * @param memento the {@link IMemento} to read from
+ */
+ @Override
public void initState(IMemento memento) {
- super.initState(memento);
- }
-
- /**
- * Save viewer state into the given memento.
- *
- * @param memento the {@link IMemento} to save to
- */
- @Override
+ super.initState(memento);
+ }
+
+ /**
+ * Save viewer state into the given memento.
+ *
+ * @param memento the {@link IMemento} to save to
+ */
+ @Override
public void saveState(IMemento memento) {
- super.saveState(memento);
- }
+ super.saveState(memento);
+ }
- /**
- * @return Returns true if columns are being displayed currently.
- */
- @Override
+ /**
+ * @return Returns true if columns are being displayed currently.
+ */
+ @Override
public boolean isShowColumns() {
- return super.isShowColumns();
- }
-
- /**
- * Toggles columns on/off for the current column presentation, if any.
- *
- * @param show whether to show columns if the current input supports
- * columns
- */
- @Override
+ return super.isShowColumns();
+ }
+
+ /**
+ * Toggles columns on/off for the current column presentation, if any.
+ *
+ * @param show whether to show columns if the current input supports
+ * columns
+ */
+ @Override
public void setShowColumns(boolean show) {
- super.setShowColumns(show);
- }
-
- /**
- * Sets the visible columns for this viewer. Id's correspond to
- * column identifiers from a column presentation. Use <code>null</code>
- * or an empty collection to display default columns for the current
- * column presentation. Only affects the current column presentation.
- *
- * @param ids column identifiers or <code>null</code>
- */
- @Override
+ super.setShowColumns(show);
+ }
+
+ /**
+ * Sets the visible columns for this viewer. Id's correspond to
+ * column identifiers from a column presentation. Use <code>null</code>
+ * or an empty collection to display default columns for the current
+ * column presentation. Only affects the current column presentation.
+ *
+ * @param ids column identifiers or <code>null</code>
+ */
+ @Override
public void setVisibleColumns(String[] ids) {
- super.setVisibleColumns(ids);
- }
+ super.setVisibleColumns(ids);
+ }
- @Override
+ @Override
public void updateViewer(IModelDelta delta) {
- super.updateViewer(delta);
- }
+ super.updateViewer(delta);
+ }
- @Override
+ @Override
public ViewerLabel getElementLabel(TreePath path, String columnId) {
- return super.getElementLabel(path, columnId);
- }
+ return super.getElementLabel(path, columnId);
+ }
- @Override
+ @Override
public VirtualItem[] findItems(Object elementOrTreePath) {
- return super.findItems(elementOrTreePath);
- }
+ return super.findItems(elementOrTreePath);
+ }
- @Override
+ @Override
public VirtualItem findItem(TreePath path) {
- return super.findItem(path);
- }
+ return super.findItem(path);
+ }

Back to the top