diff options
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java')
-rw-r--r-- | org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java | 632 |
1 files changed, 0 insertions, 632 deletions
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 deleted file mode 100644 index abd200ebc..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java +++ /dev/null @@ -1,632 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2009 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * Wind River Systems - Fix for viewer state save/restore [188704] - * Pawel Piech (Wind River) - added support for a virtual tree model viewer (Bug 242489) - *******************************************************************************/ -package org.eclipse.debug.internal.ui.viewers.model; - -import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider; -import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; -import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDeltaVisitor; -import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; -import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; -import org.eclipse.jface.viewers.TreePath; -import org.eclipse.jface.viewers.TreeSelection; - -/** - * Content provider for a virtual tree. - * - * @since 3.3 - */ -public class TreeModelContentProvider extends ModelContentProvider implements ITreeModelContentProvider { - - /** - * Re-filters any filtered children of the given parent element. - * - * @param path parent element - */ - protected void refilterChildren(TreePath path) { - if (getViewer() != null) { - int[] filteredChildren = getFilteredChildren(path); - if (filteredChildren != null) { - for (int i = 0; i < filteredChildren.length; i++) { - doUpdateElement(path, filteredChildren[i]); - } - } - } - } - - protected synchronized void doUpdateChildCount(TreePath path) { - Object element = getElement(path); - IElementContentProvider contentAdapter = ViewerAdapterService.getContentProvider(element); - if (contentAdapter != null) { - ChildrenCountUpdate request = new ChildrenCountUpdate(this, getViewer().getInput(), path, element, contentAdapter, getPresentationContext()); - schedule(request); - } - } - - protected synchronized void doUpdateElement(TreePath parentPath, int modelIndex) { - Object parent = getElement(parentPath); - IElementContentProvider contentAdapter = ViewerAdapterService.getContentProvider(parent); - if (contentAdapter != null) { - ChildrenUpdate request = new ChildrenUpdate(this, getViewer().getInput(), parentPath, parent, modelIndex, contentAdapter, getPresentationContext()); - schedule(request); - } - } - - protected synchronized void doUpdateHasChildren(TreePath path) { - Object element = getElement(path); - IElementContentProvider contentAdapter = ViewerAdapterService.getContentProvider(element); - if (contentAdapter != null) { - HasChildrenUpdate request = new HasChildrenUpdate(this, getViewer().getInput(), path, element, contentAdapter, getPresentationContext()); - schedule(request); - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.viewers.model.provisional.viewers.ModelContentProvider#getPresentationContext() - */ - protected IPresentationContext getPresentationContext() { - return ((ITreeModelViewer)getViewer()).getPresentationContext(); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.viewers.model.provisional.viewers.ModelContentProvider#handleAdd(org.eclipse.debug.internal.ui.viewers.provisional.IModelDelta) - */ - protected void handleAdd(IModelDelta delta) { - IModelDelta parentDelta = delta.getParentDelta(); - 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(); - } - if (shouldFilter(parentPath, element)) { - addFilteredIndex(parentPath, modelIndex, element); - if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("[filtered] handleAdd(" + delta.getElement() + ") > modelIndex: " + modelIndex); //$NON-NLS-1$ //$NON-NLS-2$ - } - // it was filtered so the child count does not change - } else { - if (isFiltered(parentPath, modelIndex)) { - clearFilteredChild(parentPath, modelIndex); - } - int viewCount = modelToViewChildCount(parentPath, count); - if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("handleAdd(" + delta.getElement() + ") viewIndex: " + viewCount + " modelIndex: " + modelIndex); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - getViewer().setChildCount(parentPath, viewCount); - getViewer().autoExpand(parentPath); - int viewIndex = modelToViewIndex(parentPath, modelIndex); - getViewer().replace(parentPath, viewIndex, element); - TreePath childPath = parentPath.createChildPath(element); - updateHasChildren(childPath); - doRestore(childPath, modelIndex, false, false, false); - } - } else { - if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("handleAdd(" + delta.getElement() + ")"); //$NON-NLS-1$ //$NON-NLS-2$ - } - doUpdateChildCount(getViewerTreePath(delta.getParentDelta())); - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.viewers.model.provisional.viewers.ModelContentProvider#handleContent(org.eclipse.debug.internal.ui.viewers.provisional.IModelDelta) - */ - 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())) { - return; - } - } - TreePath treePath = getViewerTreePath(delta); - cancelSubtreeUpdates(treePath); - appendToPendingStateDelta(treePath); - getViewer().refresh(getElement(treePath)); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.viewers.model.ModelContentProvider#handleCollapse(org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta) - */ - protected void handleCollapse(IModelDelta delta) { - TreePath elementPath = getViewerTreePath(delta); - getViewer().setExpandedState(elementPath, false); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.viewers.model.provisional.viewers.ModelContentProvider#handleExpand(org.eclipse.debug.internal.ui.viewers.provisional.IModelDelta) - */ - protected void handleExpand(IModelDelta delta) { - // expand each parent, then this node - IModelDelta parentDelta = delta.getParentDelta(); - if (parentDelta != null) { - if ((parentDelta.getFlags() & IModelDelta.EXPAND) == 0) { - handleExpand(parentDelta); - } - expand(delta); - } else { - int childCount = delta.getChildCount(); - TreePath elementPath = getViewerTreePath(delta); - if (childCount > 0) { - int viewCount = modelToViewChildCount(elementPath, childCount); - if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("[expand] setChildCount(" + delta.getElement() + ", (model) " + childCount + " (view) " + viewCount); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - getViewer().setChildCount(elementPath, viewCount); - } - } - } - - protected void expand(IModelDelta delta) { - int childCount = delta.getChildCount(); - int modelIndex = delta.getIndex(); - ITreeModelContentProviderTarget treeViewer = getViewer(); - TreePath elementPath = getViewerTreePath(delta); - if (modelIndex >= 0) { - TreePath parentPath = elementPath.getParentPath(); - if (parentPath == null) { - parentPath = TreePath.EMPTY; - } - int viewIndex = modelToViewIndex(parentPath, modelIndex); - if (viewIndex >= 0) { - if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("[expand] replace(" + delta.getParentDelta().getElement() + ", (model) " + modelIndex + " (view) " + viewIndex + ", " + delta.getElement()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - } - treeViewer.replace(parentPath, viewIndex, delta.getElement()); - } else { - // Element is filtered - if no longer filtered, insert the element - viewIndex = unfilterElement(parentPath, delta.getElement(), modelIndex); - if (viewIndex < 0) { - // insert did not complete - return; - } - } - } - if (childCount > 0) { - int viewCount = modelToViewChildCount(elementPath, childCount); - if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("[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); - } - } - } - - /** - * Inserts the given child element of the specified parent into the tree if the element - * should *no* longer be filtered. Returns the view index of the newly inserted element - * or -1 if not inserted. - * - * @param parentPath viewer tree path to parent element - * @param element element to insert - * @param modelIndex index of the element in the model - * @return - */ - protected int unfilterElement(TreePath parentPath, Object element, int modelIndex) { - // Element is filtered - if no longer filtered, insert the element - if (shouldFilter(parentPath, element)) { - if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("[unfilter] abort unfilter element: " + element + ", (model) " + modelIndex); //$NON-NLS-1$ //$NON-NLS-2$ - } - // still filtered, stop - return -1; - } - // clear the filter an insert the element - clearFilteredChild(parentPath, modelIndex); - int viewIndex = modelToViewIndex(parentPath, modelIndex); - if (viewIndex >= 0) { - if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("[unfilter] insert(" + parentPath.getLastSegment() + ", (model) " + modelIndex + " (view) " + viewIndex + ", " + element); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - } - getViewer().insert(parentPath, element, viewIndex); - return viewIndex; - } else { - // still filtered - should not happen - return -1; - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.viewers.model.provisional.viewers.ModelContentProvider#handleInsert(org.eclipse.debug.internal.ui.viewers.provisional.IModelDelta) - */ - protected void handleInsert(IModelDelta delta) { - // TODO: filters - getViewer().insert(getViewerTreePath(delta.getParentDelta()), delta.getElement(), delta.getIndex()); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.viewers.model.provisional.viewers.ModelContentProvider#handleRemove(org.eclipse.debug.internal.ui.viewers.provisional.IModelDelta) - */ - protected void handleRemove(IModelDelta delta) { - if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("handleRemove(" + delta.getElement() + ")"); //$NON-NLS-1$ //$NON-NLS-2$ - } - IModelDelta parentDelta = delta.getParentDelta(); - ITreeModelContentProviderTarget treeViewer = getViewer(); - TreePath parentPath = getViewerTreePath(parentDelta); - Object element = delta.getElement(); - if (removeElementFromFilters(parentPath, element)) { - // element was filtered - done - return; - } - int viewIndex = -1; - int modelIndex = delta.getIndex(); - 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); - } - } else { - viewIndex = modelToViewIndex(parentPath, modelIndex); - } - if (modelIndex >= 0) { - // found the element - if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println(" - (found) remove(" + parentPath.getLastSegment() + ", viewIndex: " + viewIndex + " modelIndex: " + modelIndex); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - rescheduleUpdates(parentPath, modelIndex); - getViewer().remove(parentPath, viewIndex); - removeElementFromFilters(parentPath, modelIndex); - return; - } - if (unmappedIndex >= 0) { - // did not find the element, but found an unmapped item. - // remove the unmapped item in it's place and update filters - if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println(" - (not found) remove(" + parentPath.getLastSegment() + ", viewIndex: " + viewIndex + " modelIndex: " + modelIndex + " unmapped index: " + unmappedIndex); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - } - modelIndex = viewToModelIndex(parentPath, unmappedIndex); - rescheduleUpdates(parentPath, modelIndex); - getViewer().remove(parentPath, unmappedIndex); - removeElementFromFilters(parentPath, modelIndex); - return; - } - int modelCount = parentDelta.getChildCount(); - if (itemCount >= 0 && modelCount >= 0) { - if (modelToViewChildCount(parentPath, modelCount) == itemCount) { - // item count matches the parent's child count, don't do anything - return; - } - } - // failing that, refresh the parent to properly update for non-visible/unmapped children - // and update filtered indexes - if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println(" - (not found) remove/refresh(" + delta.getElement()); //$NON-NLS-1$ - } - getViewer().remove(getViewerTreePath(delta)); - clearFilters(parentPath); - getViewer().refresh(parentDelta.getElement()); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.viewers.model.provisional.viewers.ModelContentProvider#handleReplace(org.eclipse.debug.internal.ui.viewers.provisional.IModelDelta) - */ - protected void handleReplace(IModelDelta delta) { - TreePath parentPath = getViewerTreePath(delta.getParentDelta()); - getViewer().replace(parentPath, delta.getIndex(), delta.getElement()); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.viewers.model.provisional.viewers.ModelContentProvider#handleSelect(org.eclipse.debug.internal.ui.viewers.provisional.IModelDelta) - */ - protected void handleSelect(IModelDelta delta) { - int modelIndex = delta.getIndex(); - ITreeModelContentProviderTarget treeViewer = getViewer(); - if (modelIndex >= 0) { - IModelDelta parentDelta = delta.getParentDelta(); - TreePath parentPath = getViewerTreePath(parentDelta); - int viewIndex = modelToViewIndex(parentPath, modelIndex); - if (viewIndex >= 0) { - // when viewIndex < 0, the element has been filtered - so we should not try to replace - int modelCount = parentDelta.getChildCount(); - if (modelCount > 0) { - int viewCount = modelToViewChildCount(parentPath, modelCount); - if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("[select] setChildCount(" + parentDelta.getElement() + ", (model) " + parentDelta.getChildCount() + " (view) " + viewCount ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - treeViewer.setChildCount(parentPath, viewCount); - } - if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("[select] replace(" + parentDelta.getElement() + ", (model) " + modelIndex + " (view) " + viewIndex + ", " + delta.getElement()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - } - treeViewer.replace(parentPath, viewIndex, delta.getElement()); - } - } - treeViewer.setSelection(new TreeSelection(getViewerTreePath(delta)), false, (delta.getFlags() & IModelDelta.FORCE) != 0); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.viewers.model.provisional.viewers.ModelContentProvider#handleState(org.eclipse.debug.internal.ui.viewers.provisional.IModelDelta) - */ - protected void handleState(IModelDelta delta) { - getViewer().update(delta.getElement()); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.viewers.model.ModelContentProvider#handleReveal(org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta) - */ - protected void handleReveal(IModelDelta delta) { - IModelDelta parentDelta = delta.getParentDelta(); - if (parentDelta != null) { - handleExpand(parentDelta); - reveal(delta); - } - } - - protected void reveal(IModelDelta delta) { - int modelIndex = delta.getIndex(); - ITreeModelContentProviderTarget treeViewer = getViewer(); - TreePath elementPath = getViewerTreePath(delta); - if (modelIndex >= 0) { - TreePath parentPath = elementPath.getParentPath(); - if (parentPath == null) { - parentPath = TreePath.EMPTY; - } - int viewIndex = modelToViewIndex(parentPath, modelIndex); - if (viewIndex >= 0) { - if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("[reveal] replace(" + delta.getParentDelta().getElement() + ", (model) " + modelIndex + " (view) " + viewIndex + ", " + delta.getElement()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - } - treeViewer.replace(parentPath, viewIndex, delta.getElement()); - } else { - // Element is filtered - insert if filter state changed - viewIndex = unfilterElement(parentPath, delta.getElement(), modelIndex); - if (viewIndex < 0) { - // insert did not complete - return; - } - } - - // only move tree based on force flag and selection policy - if ((delta.getFlags() & IModelDelta.FORCE) != 0 || - treeViewer.overrideSelection(treeViewer.getSelection(), new TreeSelection(elementPath))) - { - treeViewer.reveal(parentPath, viewIndex); - } - } - } - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.viewers.model.provisional.viewers.ModelContentProvider#buildViewerState(org.eclipse.debug.internal.ui.viewers.provisional.ModelDelta) - */ - protected void buildViewerState(ModelDelta delta) { - ITreeModelContentProviderTarget viewer = getViewer(); - viewer.saveElementState(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. - if (viewer.getInput() != null) { - TreePath topElementPath = viewer.getTopElementPath(); - if (topElementPath != null) { - ModelDelta parentDelta = delta; - TreePath parentPath = 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); - } - } - } - - - /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.viewers.model.provisional.viewers.ModelContentProvider#doInitialRestore() - */ - 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 = getViewer().getChildCount(TreePath.EMPTY); - for (int i = 0; i < count; i++) { - Object data = getViewer().getChildElement(TreePath.EMPTY, i); - if (data != null) { - doRestore(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. - * @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 = new IModelDeltaVisitor() { - public boolean visit(IModelDelta delta, int depth) { - if ( (delta.getFlags() & IModelDelta.REVEAL) != 0) { - revealDelta[0] = (ModelDelta)delta; - } - // Keep recursing only if we haven't found our delta yet. - 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]; - } - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.ILazyTreePathContentProvider#getParents(java.lang.Object) - */ - public TreePath[] getParents(Object element) { - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.ILazyTreePathContentProvider#updateChildCount(org.eclipse.jface.viewers.TreePath, int) - */ - public synchronized void updateChildCount(TreePath treePath, int currentChildCount) { - if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("updateChildCount(" + getElement(treePath) + ", " + currentChildCount + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - refilterChildren(treePath); - //re-filter children when asked to update the child count for an element (i.e. - // when refreshing, see if filtered children are still filtered) - doUpdateChildCount(treePath); - } - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.ILazyTreePathContentProvider#updateElement(org.eclipse.jface.viewers.TreePath, int) - */ - public synchronized void updateElement(TreePath parentPath, int viewIndex) { - int modelIndex = viewToModelIndex(parentPath, viewIndex); - if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("updateElement("+ getElement(parentPath) + ", " + viewIndex + ") > modelIndex = " + modelIndex); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - doUpdateElement(parentPath, modelIndex); - } - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.ILazyTreePathContentProvider#updateHasChildren(org.eclipse.jface.viewers.TreePath) - */ - public synchronized void updateHasChildren(TreePath path) { - if (DEBUG_CONTENT_PROVIDER && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("updateHasChildren(" + getElement(path)); //$NON-NLS-1$ - } - doUpdateHasChildren(path); - } - - /** - * @param delta - */ - void doRestore(ModelDelta delta, boolean knowsHasChildren, boolean knowsChildCount, boolean checkChildrenRealized) { - TreePath treePath = getViewerTreePath(delta); - ITreeModelContentProviderTarget viewer = getViewer(); - - // Attempt to expand the node only if the children are known. - if (knowsHasChildren) { - if ((delta.getFlags() & IModelDelta.EXPAND) != 0) { - if (DEBUG_STATE_SAVE_RESTORE && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("\tRESTORE EXPAND: " + treePath.getLastSegment()); //$NON-NLS-1$ - } - viewer.expandToLevel(treePath, 1); - delta.setFlags(delta.getFlags() & ~IModelDelta.EXPAND); - } - if ((delta.getFlags() & IModelDelta.COLLAPSE) != 0) { - if (DEBUG_STATE_SAVE_RESTORE && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("\tRESTORE COLLAPSE: " + treePath.getLastSegment()); //$NON-NLS-1$ - } - getViewer().setExpandedState(treePath, false); - delta.setFlags(delta.getFlags() & ~IModelDelta.COLLAPSE); - } - } - if ((delta.getFlags() & IModelDelta.SELECT) != 0) { - viewer.setSelection(new TreeSelection(treePath), false, false); - delta.setFlags(delta.getFlags() & ~IModelDelta.SELECT); - } - 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) { - TreePath parentPath = treePath.getParentPath(); - int index = viewer.findElementIndex(parentPath, treePath.getLastSegment()); - if (index >= 0) { - if (DEBUG_STATE_SAVE_RESTORE && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("\tRESTORE REVEAL: " + treePath.getLastSegment()); //$NON-NLS-1$ - } - viewer.reveal(parentPath, index); - } - } - } - - // 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) { - 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 && getElementChildrenRealized(treePath)) || - (knowsHasChildren && !viewer.getHasChildren(treePath)) ) - { - if (DEBUG_STATE_SAVE_RESTORE && (DEBUG_PRESENTATION_ID == null || DEBUG_PRESENTATION_ID.equals(getPresentationContext().getId()))) { - System.out.println("\tRESTORE CONTENT: " + treePath.getLastSegment()); //$NON-NLS-1$ - } - delta.setFlags(delta.getFlags() & ~IModelDelta.CONTENT); - } - - checkIfRestoreComplete(); - } - -} |