Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 126516 Details for
Bug 262266
[breadcrumb] In the Debug view breadcrumb drop-down add a mode to show only selected element's siblings.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Patch with fix.
20090223_262266.patch (text/plain), 57.15 KB, created by
Pawel Piech
on 2009-02-24 00:41:14 EST
(
hide
)
Description:
Patch with fix.
Filename:
MIME Type:
Creator:
Pawel Piech
Created:
2009-02-24 00:41:14 EST
Size:
57.15 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.debug.ui >Index: ui/org/eclipse/debug/internal/ui/views/memory/MemoryViewTreeViewer.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryViewTreeViewer.java,v >retrieving revision 1.3 >diff -u -r1.3 MemoryViewTreeViewer.java >--- ui/org/eclipse/debug/internal/ui/views/memory/MemoryViewTreeViewer.java 20 Dec 2006 16:57:14 -0000 1.3 >+++ ui/org/eclipse/debug/internal/ui/views/memory/MemoryViewTreeViewer.java 24 Feb 2009 05:31:57 -0000 >@@ -11,7 +11,7 @@ > > package org.eclipse.debug.internal.ui.views.memory; > >-import org.eclipse.debug.internal.ui.viewers.model.TreeModelContentProvider; >+import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProvider; > import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; > import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer; > import org.eclipse.swt.widgets.Composite; >@@ -40,7 +40,7 @@ > * (non-Javadoc) > * @see org.eclipse.debug.internal.ui.viewers.model.InternalTreeModelViewer#createContentProvider() > */ >- protected TreeModelContentProvider createContentProvider() { >+ protected ITreeModelContentProvider createContentProvider() { > return new MemoryViewTreeModelContentProvider(); > } > >Index: ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ModelDelta.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ModelDelta.java,v >retrieving revision 1.6 >diff -u -r1.6 ModelDelta.java >--- ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ModelDelta.java 24 Mar 2008 15:26:18 -0000 1.6 >+++ ui/org/eclipse/debug/internal/ui/viewers/model/provisional/ModelDelta.java 24 Feb 2009 05:31:57 -0000 >@@ -285,6 +285,9 @@ > if ((flags & IModelDelta.REVEAL) > 0) { > buf.append("REVEAL | "); //$NON-NLS-1$ > } >+ if ((flags & IModelDelta.FORCE) > 0) { >+ buf.append("FORCE | "); //$NON-NLS-1$ >+ } > > } > buf.append('\n'); >Index: ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java,v >retrieving revision 1.27 >diff -u -r1.27 InternalTreeModelViewer.java >--- ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java 23 Jan 2009 23:29:07 -0000 1.27 >+++ ui/org/eclipse/debug/internal/ui/viewers/model/InternalTreeModelViewer.java 24 Feb 2009 05:31:53 -0000 >@@ -41,10 +41,8 @@ > import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext; > import org.eclipse.jface.resource.ImageDescriptor; > import org.eclipse.jface.viewers.CellEditor; >-import org.eclipse.jface.viewers.IBaseLabelProvider; > import org.eclipse.jface.viewers.IBasicPropertyConstants; > import org.eclipse.jface.viewers.ICellModifier; >-import org.eclipse.jface.viewers.IContentProvider; > import org.eclipse.jface.viewers.ILazyTreePathContentProvider; > import org.eclipse.jface.viewers.ISelection; > import org.eclipse.jface.viewers.TreePath; >@@ -499,7 +497,7 @@ > update = null; > } > } else { >- int modelIndex = ((ModelContentProvider)getContentProvider()).viewToModelIndex(parentPath, i); >+ int modelIndex = ((ITreeModelContentProvider)getContentProvider()).viewToModelIndex(parentPath, i); > if (update == null) { > update = new VirtualChildrenUpdate(parentPath, this, model); > } else if ((modelIndex - prevModelIndex) > 1) { >@@ -544,7 +542,7 @@ > if (fLabel == null) { > return fItem.getImage(); > } else { >- return ((TreeModelLabelProvider)getLabelProvider()).getImage(fLabel.fImage); >+ return ((ITreeModelLabelProvider)getLabelProvider()).getImage(fLabel.fImage); > } > } > >@@ -800,7 +798,7 @@ > int start = update.getOffset(); > int end = start + update.getLength(); > for (int i = start; i < end; i++) { >- int viewIndex = ((ModelContentProvider)getContentProvider()).modelToViewIndex(parent, i); >+ int viewIndex = ((ITreeModelContentProvider)getContentProvider()).modelToViewIndex(parent, i); > VirtualElement proxy = children[viewIndex]; > if (proxy.fFiltered) { > fMonitor.worked(1); // don't need the label, this one is already done >@@ -888,10 +886,10 @@ > * @see org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate#setChild(java.lang.Object, int) > */ > public void setChild(Object child, int offset) { >- int viewIndex = ((ModelContentProvider)getContentProvider()).modelToViewIndex(getElementPath(), offset); >+ int viewIndex = ((ITreeModelContentProvider)getContentProvider()).modelToViewIndex(getElementPath(), offset); > VirtualElement virtualChild = getVirtualElement().fChildren[viewIndex]; > virtualChild.setElement(child); >- ModelContentProvider provider = (ModelContentProvider) getContentProvider(); >+ ITreeModelContentProvider provider = (ITreeModelContentProvider) getContentProvider(); > virtualChild.fFiltered = provider.shouldFilter(getElementPath(), child); > if (!virtualChild.fFiltered) { > virtualChild.retrieveChildren(getElementPath().createChildPath(child), fModel); >@@ -1004,14 +1002,14 @@ > setLabelProvider(createLabelProvider()); > > if ((style & SWT.POP_UP) != 0) { >- ((ModelContentProvider)getContentProvider()).setSuppressModelControlDeltas(true); >+ ((ITreeModelContentProvider)getContentProvider()).setSuppressModelControlDeltas(true); > } > } > > /** > * @return content provider for this tree viewer > */ >- protected TreeModelContentProvider createContentProvider() >+ protected ITreeModelContentProvider createContentProvider() > { > return new TreeModelContentProvider(); > } >@@ -1019,7 +1017,7 @@ > /** > * @return label provider for this tree viewer > */ >- protected TreeModelLabelProvider createLabelProvider() >+ protected ITreeModelLabelProvider createLabelProvider() > { > return new TreeModelLabelProvider(this); > } >@@ -1132,10 +1130,7 @@ > protected void unmapElement(Object element, Widget widget) { > if (fNotifyUnmap) { > // TODO: should we update the filter with the "new non-identical element"? >- IContentProvider provider = getContentProvider(); >- if (provider instanceof ModelContentProvider) { >- ((ModelContentProvider) provider).unmapPath((TreePath) widget.getData(TREE_PATH_KEY)); >- } >+ ((ITreeModelContentProvider) getContentProvider()).unmapPath((TreePath) widget.getData(TREE_PATH_KEY)); > } > super.unmapElement(element, widget); > } >@@ -1393,7 +1388,7 @@ > column.setWidth(1); > ImageDescriptor image = presentation.getImageDescriptor(id); > if (image != null) { >- column.setImage(((TreeModelLabelProvider)getLabelProvider()).getImage(image)); >+ column.setImage(((ITreeModelLabelProvider)getLabelProvider()).getImage(image)); > } > column.setData(id); > } >@@ -1687,7 +1682,7 @@ > * @param listener listener > */ > public void addViewerUpdateListener(IViewerUpdateListener listener) { >- ((ModelContentProvider)getContentProvider()).addViewerUpdateListener(listener); >+ ((ITreeModelContentProvider)getContentProvider()).addViewerUpdateListener(listener); > } > > /** >@@ -1696,7 +1691,7 @@ > * @param listener listener > */ > public void removeViewerUpdateListener(IViewerUpdateListener listener) { >- ModelContentProvider cp = (ModelContentProvider)getContentProvider(); >+ ITreeModelContentProvider cp = (ITreeModelContentProvider)getContentProvider(); > if (cp != null) { > cp.removeViewerUpdateListener(listener); > } >@@ -1708,7 +1703,7 @@ > * @param listener model delta listener > */ > public void addModelChangedListener(IModelChangedListener listener) { >- ((ModelContentProvider)getContentProvider()).addModelChangedListener(listener); >+ ((ITreeModelContentProvider)getContentProvider()).addModelChangedListener(listener); > } > > /** >@@ -1717,7 +1712,7 @@ > * @param listener model delta listener > */ > public void removeModelChangedListener(IModelChangedListener listener) { >- ModelContentProvider cp = (ModelContentProvider)getContentProvider(); >+ ITreeModelContentProvider cp = (ITreeModelContentProvider)getContentProvider(); > if (cp != null) { > cp.removeModelChangedListener(listener); > } >@@ -1736,7 +1731,7 @@ > return; > } > >- if ( !((TreeModelLabelProvider)getLabelProvider()).update(getTreePathFromItem(item)) ) { >+ if ( !((ITreeModelLabelProvider)getLabelProvider()).update(getTreePathFromItem(item)) ) { > if (element instanceof String) { > item.setData(PREV_LABEL_KEY, new String[] { (String)element } ); > } >@@ -1767,18 +1762,12 @@ > } > > public void addLabelUpdateListener(ILabelUpdateListener listener) { >- IBaseLabelProvider labelProvider = getLabelProvider(); >- if (labelProvider instanceof TreeModelLabelProvider) { >- ((TreeModelLabelProvider)labelProvider).addLabelUpdateListener(listener); >- } >+ ((ITreeModelLabelProvider)getLabelProvider()).addLabelUpdateListener(listener); > } > > public void removeLabelUpdateListener(ILabelUpdateListener listener) { > if (!getControl().isDisposed()) { >- IBaseLabelProvider labelProvider = getLabelProvider(); >- if (labelProvider instanceof TreeModelLabelProvider) { >- ((TreeModelLabelProvider)labelProvider).removeLabelUpdateListener(listener); >- } >+ ((ITreeModelLabelProvider)getLabelProvider()).removeLabelUpdateListener(listener); > } > } > >@@ -2017,7 +2006,7 @@ > } else { > Image[] images = new Image[imageDescriptors.length]; > for (int i = 0; i < imageDescriptors.length; i++) { >- images[i] = ((TreeModelLabelProvider)getLabelProvider()).getImage(imageDescriptors[i]); >+ images[i] = ((ITreeModelLabelProvider)getLabelProvider()).getImage(imageDescriptors[i]); > } > if (columnIds == null) { > item.setImage(images[0]); >@@ -2035,7 +2024,7 @@ > } else { > Color[] foregrounds = new Color[_foregrounds.length]; > for (int i = 0; i< foregrounds.length; i++) { >- foregrounds[i] = ((TreeModelLabelProvider)getLabelProvider()).getColor(_foregrounds[i]); >+ foregrounds[i] = ((ITreeModelLabelProvider)getLabelProvider()).getColor(_foregrounds[i]); > } > if (columnIds == null) { > item.setForeground(0,foregrounds[0]); >@@ -2055,7 +2044,7 @@ > } else { > Color[] backgrounds = new Color[_backgrounds.length]; > for (int i = 0; i< backgrounds.length; i++) { >- backgrounds[i] = ((TreeModelLabelProvider)getLabelProvider()).getColor(_backgrounds[i]); >+ backgrounds[i] = ((ITreeModelLabelProvider)getLabelProvider()).getColor(_backgrounds[i]); > } > if (columnIds == null) { > item.setBackground(0,backgrounds[0]); >@@ -2075,7 +2064,7 @@ > } else { > Font[] fonts = new Font[fontDatas.length]; > for (int i = 0; i < fontDatas.length; i++) { >- fonts[i] = ((TreeModelLabelProvider)getLabelProvider()).getFont(fontDatas[i]); >+ fonts[i] = ((ITreeModelLabelProvider)getLabelProvider()).getFont(fontDatas[i]); > } > if (columnIds == null) { > item.setFont(0,fonts[0]); >@@ -2191,12 +2180,14 @@ > TreeItem[] items = null; > Widget w = internalGetWidgetToSelect(path); > if (w instanceof Tree) { >- delta.setChildCount(((ModelContentProvider)getContentProvider()).viewToModelCount(path, tree.getItemCount())); >+ delta.setChildCount( >+ ((ITreeModelContentProvider)getContentProvider()).viewToModelCount(path, tree.getItemCount())); > delta.setFlags(delta.getFlags() | IModelDelta.EXPAND); > items = tree.getItems(); > } else if (w instanceof TreeItem) { > TreeItem item = (TreeItem)w; >- delta.setChildCount(((ModelContentProvider)getContentProvider()).viewToModelCount(path, item.getItemCount())); >+ delta.setChildCount( >+ ((ITreeModelContentProvider)getContentProvider()).viewToModelCount(path, item.getItemCount())); > if (item.getExpanded()) { > delta.setFlags(delta.getFlags() | IModelDelta.EXPAND); > } >@@ -2225,9 +2216,10 @@ > if (selected) { > flags = flags | IModelDelta.SELECT; > } >- int modelIndex = ((ModelContentProvider)getContentProvider()).viewToModelIndex(parentPath, index); >+ int modelIndex = ((ITreeModelContentProvider)getContentProvider()).viewToModelIndex(parentPath, index); > TreePath elementPath = parentPath.createChildPath(element); >- int numChildren = ((ModelContentProvider)getContentProvider()).viewToModelCount(elementPath, item.getItemCount()); >+ int numChildren = ((ITreeModelContentProvider)getContentProvider()). >+ viewToModelCount(elementPath, item.getItemCount()); > ModelDelta childDelta = delta.addNode(element, modelIndex, flags, numChildren); > if (expanded) { > TreeItem[] items = item.getItems(); >@@ -2240,6 +2232,6 @@ > } > > public void updateViewer(IModelDelta delta) { >- ((ModelContentProvider)getContentProvider()).updateNodes(new IModelDelta[] { delta }, true); >+ ((ITreeModelContentProvider)getContentProvider()).updateModel(delta); > } > } >Index: ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java,v >retrieving revision 1.1 >diff -u -r1.1 InternalVirtualTreeModelViewer.java >--- ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java 23 Jan 2009 23:29:07 -0000 1.1 >+++ ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java 24 Feb 2009 05:31:54 -0000 >@@ -180,7 +180,7 @@ > fLabelProvider = new TreeModelLabelProvider(this); > > if ((style & SWT.POP_UP) != 0) { >- ((ModelContentProvider)getContentProvider()).setSuppressModelControlDeltas(true); >+ ((ITreeModelContentProvider)getContentProvider()).setSuppressModelControlDeltas(true); > } > } > >@@ -368,11 +368,11 @@ > return -1; > } > >- private TreeModelLabelProvider getLabelProvider() { >+ private ITreeModelLabelProvider getLabelProvider() { > return fLabelProvider; > } > >- private TreeModelContentProvider getContentProvider() { >+ private ITreeModelContentProvider getContentProvider() { > return fContentProvider; > } > >@@ -1176,7 +1176,7 @@ > } > > public void removeViewerUpdateListener(IViewerUpdateListener listener) { >- ModelContentProvider cp = getContentProvider(); >+ ITreeModelContentProvider cp = getContentProvider(); > if (cp != null) { > cp.removeViewerUpdateListener(listener); > } >@@ -1187,7 +1187,7 @@ > } > > public void removeModelChangedListener(IModelChangedListener listener) { >- ModelContentProvider cp = getContentProvider(); >+ ITreeModelContentProvider cp = getContentProvider(); > if (cp != null) { > cp.removeModelChangedListener(listener); > } >Index: ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelLabelProvider.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelLabelProvider.java,v >retrieving revision 1.14 >diff -u -r1.14 TreeModelLabelProvider.java >--- ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelLabelProvider.java 23 Jan 2009 23:29:06 -0000 1.14 >+++ ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelLabelProvider.java 24 Feb 2009 05:31:57 -0000 >@@ -44,7 +44,7 @@ > /** > * @since 3.3 > */ >-public class TreeModelLabelProvider extends ColumnLabelProvider { >+public class TreeModelLabelProvider extends ColumnLabelProvider implements ITreeModelLabelProvider { > > private ITreeModelLabelProviderTarget fViewer; > private List fComplete; >@@ -115,7 +115,7 @@ > * @param descriptor image descriptor or <code>null</code> > * @return image or <code>null</code> > */ >- protected Image getImage(ImageDescriptor descriptor) { >+ public Image getImage(ImageDescriptor descriptor) { > if (descriptor == null) { > return null; > } >@@ -143,7 +143,7 @@ > * @param fontData font data or <code>null</code> > * @return font font or <code>null</code> > */ >- protected Font getFont(FontData fontData) { >+ public Font getFont(FontData fontData) { > if (fontData == null) { > return null; > } >@@ -162,7 +162,7 @@ > * @param rgb RGB or <code>null</code> > * @return color or <code>null</code> > */ >- protected Color getColor(RGB rgb) { >+ public Color getColor(RGB rgb) { > if (rgb == null) { > return null; > } >@@ -312,11 +312,11 @@ > } > } > >- void addLabelUpdateListener(ILabelUpdateListener listener) { >+ public void addLabelUpdateListener(ILabelUpdateListener listener) { > fLabelListeners.add(listener); > } > >- void removeLabelUpdateListener(ILabelUpdateListener listener) { >+ public void removeLabelUpdateListener(ILabelUpdateListener listener) { > fLabelListeners.remove(listener); > } > >Index: ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java,v >retrieving revision 1.36 >diff -u -r1.36 TreeModelContentProvider.java >--- ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java 13 Feb 2009 21:33:49 -0000 1.36 >+++ ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java 24 Feb 2009 05:31:57 -0000 >@@ -17,7 +17,6 @@ > 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.ILazyTreePathContentProvider; > import org.eclipse.jface.viewers.TreePath; > import org.eclipse.jface.viewers.TreeSelection; > >@@ -26,7 +25,7 @@ > * > * @since 3.3 > */ >-public class TreeModelContentProvider extends ModelContentProvider implements ILazyTreePathContentProvider { >+public class TreeModelContentProvider extends ModelContentProvider implements ITreeModelContentProvider { > > /** > * Re-filters any filtered children of the given parent element. >Index: ui/org/eclipse/debug/internal/ui/viewers/model/ModelContentProvider.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ModelContentProvider.java,v >retrieving revision 1.38 >diff -u -r1.38 ModelContentProvider.java >--- ui/org/eclipse/debug/internal/ui/viewers/model/ModelContentProvider.java 13 Feb 2009 21:33:48 -0000 1.38 >+++ ui/org/eclipse/debug/internal/ui/viewers/model/ModelContentProvider.java 24 Feb 2009 05:31:57 -0000 >@@ -881,7 +881,7 @@ > * > * @param suppress If <code>true</code> it turns on the suppress mode. > */ >- protected void setSuppressModelControlDeltas(boolean suppress) { >+ public void setSuppressModelControlDeltas(boolean suppress) { > fSuppressModelControlRequests = suppress; > } > >@@ -891,10 +891,14 @@ > * > * @return Returns <code>true</code> if in suppress mode. > */ >- protected boolean isSuppressModelControlDeltas() { >+ public boolean isSuppressModelControlDeltas() { > return fSuppressModelControlRequests; > } > >+ public void updateModel(IModelDelta delta) { >+ updateNodes(new IModelDelta[] { delta }, true); >+ } >+ > /** > * Updates the viewer with the following deltas. > * >@@ -1037,7 +1041,7 @@ > * @param index index of child element in model (raw) space > * @return index of child element in viewer (filtered) space or -1 if filtered > */ >- protected int modelToViewIndex(TreePath parentPath, int index) { >+ public int modelToViewIndex(TreePath parentPath, int index) { > return fTransform.modelToViewIndex(parentPath, index); > } > >@@ -1049,7 +1053,7 @@ > * @param count child count element in model (raw) space > * @return child count in viewer (filtered) space > */ >- protected int modelToViewChildCount(TreePath parentPath, int count) { >+ public int modelToViewChildCount(TreePath parentPath, int count) { > return fTransform.modelToViewCount(parentPath, count); > } > >@@ -1102,7 +1106,7 @@ > } > > /** >- * Returns whether the given element is filtered. >+ * Returns whether the given element is filtered. > * > * @param parentElementOrTreePath > * the parent element or path >@@ -1110,7 +1114,7 @@ > * the child element > * @return whether to filter the element > */ >- protected boolean shouldFilter(Object parentElementOrTreePath, Object element) { >+ public boolean shouldFilter(Object parentElementOrTreePath, Object element) { > ViewerFilter[] filters = fViewer.getFilters(); > if (filters.length > 0) { > for (int j = 0; j < filters.length; j++) { >@@ -1138,7 +1142,7 @@ > * > * @param path > */ >- protected void unmapPath(TreePath path) { >+ public void unmapPath(TreePath path) { > //System.out.println("Unmap " + path.getLastSegment()); > fTransform.clear(path); > cancelSubtreeUpdates(path); >@@ -1175,11 +1179,11 @@ > } > } > >- void addViewerUpdateListener(IViewerUpdateListener listener) { >+ public void addViewerUpdateListener(IViewerUpdateListener listener) { > fUpdateListeners.add(listener); > } > >- void removeViewerUpdateListener(IViewerUpdateListener listener) { >+ public void removeViewerUpdateListener(IViewerUpdateListener listener) { > fUpdateListeners.remove(listener); > } > >@@ -1413,7 +1417,7 @@ > * > * @param listener model delta listener > */ >- void addModelChangedListener(IModelChangedListener listener) { >+ public void addModelChangedListener(IModelChangedListener listener) { > fModelListeners.add(listener); > } > >@@ -1422,7 +1426,7 @@ > * > * @param listener model delta listener > */ >- void removeModelChangedListener(IModelChangedListener listener) { >+ public void removeModelChangedListener(IModelChangedListener listener) { > fModelListeners.remove(listener); > } > >Index: ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewBreadcrumb.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewBreadcrumb.java,v >retrieving revision 1.2 >diff -u -r1.2 LaunchViewBreadcrumb.java >--- ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewBreadcrumb.java 3 Feb 2009 22:26:04 -0000 1.2 >+++ ui/org/eclipse/debug/internal/ui/views/launch/LaunchViewBreadcrumb.java 24 Feb 2009 05:31:57 -0000 >@@ -18,8 +18,11 @@ > import org.eclipse.debug.internal.ui.viewers.breadcrumb.IBreadcrumbDropDownSite; > import org.eclipse.debug.internal.ui.viewers.breadcrumb.TreeViewerDropDown; > import org.eclipse.debug.internal.ui.viewers.model.ILabelUpdateListener; >+import org.eclipse.debug.internal.ui.viewers.model.SubTreeModelViewer; >+import org.eclipse.debug.internal.ui.viewers.model.TreeModelContentProvider; > import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate; > 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.ModelDelta; > import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer; > import org.eclipse.debug.ui.contexts.AbstractDebugContextProvider; >@@ -38,7 +41,6 @@ > import org.eclipse.jface.viewers.SelectionChangedEvent; > import org.eclipse.jface.viewers.StructuredSelection; > import org.eclipse.jface.viewers.TreePath; >-import org.eclipse.jface.viewers.TreeSelection; > import org.eclipse.jface.viewers.TreeViewer; > import org.eclipse.jface.viewers.Viewer; > import org.eclipse.jface.viewers.ViewerFilter; >@@ -353,15 +355,15 @@ > > TreeViewerDropDown dropDownTreeViewer = new TreeViewerDropDown() { > >- TreeModelViewer fDropDownViewer; >+ SubTreeModelViewer fDropDownViewer; > >- protected TreeViewer createTreeViewer(Composite composite, int style, TreePath path) { >- fDropDownViewer = new TreeModelViewer( >+ protected TreeViewer createTreeViewer(Composite composite, int style, final TreePath path) { >+ fDropDownViewer = new SubTreeModelViewer( > composite, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.VIRTUAL | SWT.POP_UP, > fTreeViewer.getPresentationContext()); > > Object launchViewInput = fTreeViewer.getInput(); >- fDropDownViewer.setInput(launchViewInput); >+ fDropDownViewer.setInput(launchViewInput, path.getParentPath()); > > ViewerFilter[] filters = fTreeViewer.getFilters(); > fDropDownViewer.setFilters(filters); >@@ -370,10 +372,6 @@ > fTreeViewer.saveElementState(TreePath.EMPTY, delta); > fDropDownViewer.updateViewer(delta); > >- if (path.getSegmentCount() != 0) { >- fDropDownViewer.setSelection(new TreeSelection(path), true, true); >- } >- > fDropDownViewer.addLabelUpdateListener(new ILabelUpdateListener() { > public void labelUpdateComplete(ILabelUpdate update) {} > public void labelUpdatesBegin() {} >@@ -393,11 +391,47 @@ > } > > protected void openElement(ISelection selection) { >+ if (fTreeViewer.getControl().isDisposed()) { >+ return; >+ } >+ > if (selection != null && (selection instanceof ITreeSelection) && !selection.isEmpty()) { >- ModelDelta delta = new ModelDelta(fDropDownViewer.getInput(), IModelDelta.NO_CHANGE); >+ // Create the path to the root element of the drop-down viewer. Need to calcualte >+ // indexes and counts for the delta in order for the selection from the drop-down >+ // viewer to work properly. >+ TreeModelContentProvider contentProvider = (TreeModelContentProvider)fTreeViewer.getContentProvider(); >+ TreePath path = TreePath.EMPTY; >+ int count = fTreeViewer.getChildCount(path); >+ count = contentProvider.viewToModelCount(path, count); >+ ModelDelta rootDelta = >+ new ModelDelta(fTreeViewer.getInput(), -1, IModelDelta.NO_CHANGE, count); >+ TreePath rootPath = fDropDownViewer.getRootPath(); >+ ModelDelta delta = rootDelta; >+ for (int i = 0; i < rootPath.getSegmentCount(); i++) { >+ Object element = rootPath.getSegment(i); >+ int index = fTreeViewer.findElementIndex(path, element); >+ index = contentProvider.viewToModelIndex(path, index); >+ path = path.createChildPath(element); >+ count = fTreeViewer.getChildCount(path); >+ count = contentProvider.viewToModelCount(path, count); >+ delta = delta.addNode(rootPath.getSegment(i), index, IModelDelta.NO_CHANGE, count); >+ } >+ >+ // Create the delta and save the drop-down viewer's state to it. > fDropDownViewer.saveElementState(TreePath.EMPTY, delta); >- fTreeViewer.updateViewer(delta); >- fTreeViewer.setSelection(selection, true, true); >+ >+ // Add the IModelDelta.FORCE flag to override the current selection in view. >+ rootDelta.accept(new IModelDeltaVisitor(){ >+ public boolean visit(IModelDelta paramDelta, int depth) { >+ if ((paramDelta.getFlags() & IModelDelta.SELECT) != 0) { >+ ((ModelDelta)paramDelta).setFlags(paramDelta.getFlags() | IModelDelta.FORCE); >+ } >+ return true; >+ } >+ }); >+ >+ // Save the state of the drop-down into the tree viewer. >+ fTreeViewer.updateViewer(rootDelta); > fViewer.setSelection(StructuredSelection.EMPTY); > site.close(); > } >Index: ui/org/eclipse/debug/internal/ui/viewers/model/SubTreeModelViewer.java >=================================================================== >RCS file: ui/org/eclipse/debug/internal/ui/viewers/model/SubTreeModelViewer.java >diff -N ui/org/eclipse/debug/internal/ui/viewers/model/SubTreeModelViewer.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ ui/org/eclipse/debug/internal/ui/viewers/model/SubTreeModelViewer.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,516 @@ >+/******************************************************************************* >+ * Copyright (c) 2009 Wind River Systems 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: >+ * Wind River Systems - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.debug.internal.ui.viewers.model; >+ >+import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelChangedListener; >+import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; >+import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; >+import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdateListener; >+import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; >+import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer; >+import org.eclipse.jface.resource.ImageDescriptor; >+import org.eclipse.jface.viewers.ColumnLabelProvider; >+import org.eclipse.jface.viewers.ILabelProviderListener; >+import org.eclipse.jface.viewers.ISelection; >+import org.eclipse.jface.viewers.TreePath; >+import org.eclipse.jface.viewers.Viewer; >+import org.eclipse.jface.viewers.ViewerFilter; >+import org.eclipse.jface.viewers.ViewerLabel; >+import org.eclipse.swt.graphics.Color; >+import org.eclipse.swt.graphics.Font; >+import org.eclipse.swt.graphics.FontData; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.swt.graphics.RGB; >+import org.eclipse.swt.widgets.Composite; >+import org.eclipse.swt.widgets.Control; >+import org.eclipse.swt.widgets.Display; >+ >+/** >+ * Specialized tree viewer which displays only sub-tree of a full model. >+ * >+ * @since 3.5 >+ */ >+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; >+ >+ /** >+ * 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 ITreeModelLabelProviderTarget, ITreeModelContentProviderTarget >+ { >+ public void reveal(TreePath path, int index) { >+ if (path.startsWith(fRootPath, null)) { >+ SubTreeModelViewer.this.reveal(createSubPath(path), index); >+ } >+ } >+ >+ 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); >+ } >+ } >+ >+ 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); >+ } >+ } >+ >+ 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); >+ } >+ } >+ >+ public void autoExpand(TreePath elementPath) { >+ // not supported >+ } >+ >+ 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); >+ } >+ } >+ >+ 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); >+ } >+ } >+ >+ 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); >+ } >+ } >+ >+ 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); >+ } >+ } >+ >+ 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); >+ } >+ } >+ >+ 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; >+ } >+ >+ public int getChildCount(TreePath path) { >+ if (path.startsWith(fRootPath, null)) { >+ return SubTreeModelViewer.this.getChildCount(createSubPath(path)); >+ } >+ return -1; >+ } >+ >+ public Object getChildElement(TreePath path, int index) { >+ if (path.startsWith(fRootPath, null)) { >+ return SubTreeModelViewer.this.getChildElement(createSubPath(path), index); >+ } >+ return null; >+ } >+ >+ public TreePath getTopElementPath() { >+ return createFullPath(SubTreeModelViewer.this.getTopElementPath()); >+ } >+ >+ public int findElementIndex(TreePath parentPath, Object element) { >+ if (parentPath.startsWith(fRootPath, null)) { >+ return SubTreeModelViewer.this.findElementIndex(createSubPath(parentPath), element); >+ } >+ return -1; >+ } >+ >+ 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); >+ } >+ } >+ >+ public Control getControl() { >+ return SubTreeModelViewer.this.getControl(); >+ } >+ >+ public Object getInput() { >+ return SubTreeModelViewer.this.getInput(); >+ } >+ >+ public ISelection getSelection() { >+ return SubTreeModelViewer.this.getSelection(); >+ } >+ >+ public void refresh() { >+ SubTreeModelViewer.this.refresh(); >+ } >+ >+ public void setInput(Object input) { >+ SubTreeModelViewer.this.setInput(input); >+ } >+ >+ public void setSelection(ISelection selection, boolean reveal) { >+ SubTreeModelViewer.this.setSelection(selection, reveal); >+ } >+ >+ public String[] getVisibleColumns() { >+ return SubTreeModelViewer.this.getVisibleColumns(); >+ } >+ >+ public void addLabelUpdateListener(ILabelUpdateListener listener) { >+ SubTreeModelViewer.this.addLabelUpdateListener(listener); >+ } >+ >+ public void addModelChangedListener(IModelChangedListener listener) { >+ SubTreeModelViewer.this.addModelChangedListener(listener); >+ } >+ >+ public void addViewerUpdateListener(IViewerUpdateListener listener) { >+ SubTreeModelViewer.this.addViewerUpdateListener(listener); >+ } >+ >+ public int getAutoExpandLevel() { >+ return SubTreeModelViewer.this.getAutoExpandLevel(); >+ } >+ >+ public Display getDisplay() { >+ return SubTreeModelViewer.this.getDisplay(); >+ } >+ >+ public ViewerLabel getElementLabel(TreePath path, String columnId) { >+ return SubTreeModelViewer.this.getElementLabel(path, columnId); >+ } >+ >+ public IPresentationContext getPresentationContext() { >+ return SubTreeModelViewer.this.getPresentationContext(); >+ } >+ >+ public void removeLabelUpdateListener(ILabelUpdateListener listener) { >+ SubTreeModelViewer.this.removeLabelUpdateListener(listener); >+ } >+ >+ public void removeModelChangedListener(IModelChangedListener listener) { >+ SubTreeModelViewer.this.removeModelChangedListener(listener); >+ } >+ >+ public void removeViewerUpdateListener(IViewerUpdateListener listener) { >+ SubTreeModelViewer.this.removeViewerUpdateListener(listener); >+ } >+ >+ public void saveElementState(TreePath path, ModelDelta delta) { >+ SubTreeModelViewer.this.saveElementState(path, delta); >+ } >+ >+ public void setAutoExpandLevel(int level) { >+ SubTreeModelViewer.this.setAutoExpandLevel(level); >+ } >+ >+ public void setSelection(ISelection selection, boolean reveal, boolean force) { >+ SubTreeModelViewer.this.setSelection(selection, reveal, force); >+ } >+ >+ public void updateViewer(IModelDelta delta) { >+ SubTreeModelViewer.this.updateViewer(delta); >+ } >+ >+ public ViewerFilter[] getFilters() { >+ return SubTreeModelViewer.this.getFilters(); >+ } >+ >+ public boolean overrideSelection(ISelection current, ISelection candidate) { >+ return SubTreeModelViewer.this.overrideSelection(current, candidate); >+ } >+ >+ public void refresh(Object element) { >+ SubTreeModelViewer.this.refresh(element); >+ } >+ >+ public void update(Object element) { >+ SubTreeModelViewer.this.update(element); >+ } >+ } >+ >+ >+ /** >+ * 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; >+ >+ public SubTreeModelContentProvider() { >+ fBaseProvider = new TreeModelContentProvider(); >+ } >+ >+ public void updateHasChildren(TreePath path) { >+ fBaseProvider.updateHasChildren(createFullPath(path)); >+ } >+ >+ public void updateChildCount(TreePath path, int currentChildCount) { >+ fBaseProvider.updateChildCount(createFullPath(path), currentChildCount); >+ } >+ >+ public void updateElement(TreePath parentPath, int viewIndex) { >+ fBaseProvider.updateElement(createFullPath(parentPath), viewIndex); >+ } >+ >+ public int viewToModelCount(TreePath parentPath, int count) { >+ return fBaseProvider.viewToModelCount(createFullPath(parentPath), count); >+ } >+ >+ public int viewToModelIndex(TreePath parentPath, int index) { >+ return fBaseProvider.viewToModelIndex(createFullPath(parentPath), index); >+ } >+ >+ public void addModelChangedListener(IModelChangedListener listener) { >+ fBaseProvider.addModelChangedListener(listener); >+ } >+ >+ public void addViewerUpdateListener(IViewerUpdateListener listener) { >+ fBaseProvider.addViewerUpdateListener(listener); >+ } >+ >+ public boolean isSuppressModelControlDeltas() { >+ return fBaseProvider.isSuppressModelControlDeltas(); >+ } >+ >+ public int modelToViewChildCount(TreePath parentPath, int count) { >+ return fBaseProvider.modelToViewChildCount(createFullPath(parentPath), count); >+ } >+ >+ public int modelToViewIndex(TreePath parentPath, int index) { >+ return fBaseProvider.modelToViewIndex(createFullPath(parentPath), index); >+ } >+ >+ public void removeModelChangedListener(IModelChangedListener listener) { >+ fBaseProvider.removeModelChangedListener(listener); >+ } >+ >+ public void removeViewerUpdateListener(IViewerUpdateListener listener) { >+ fBaseProvider.removeViewerUpdateListener(listener); >+ } >+ >+ public void setSuppressModelControlDeltas(boolean suppress) { >+ fBaseProvider.setSuppressModelControlDeltas(suppress); >+ } >+ >+ 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); >+ } >+ >+ } >+ >+ public void unmapPath(TreePath path) { >+ fBaseProvider.unmapPath(createFullPath(path)); >+ } >+ >+ public void updateModel(IModelDelta delta) { >+ fBaseProvider.updateModel(delta); >+ } >+ >+ public TreePath[] getParents(Object element) { >+ // Not used >+ return null; >+ } >+ >+ public void dispose() { >+ fBaseProvider.dispose(); >+ } >+ >+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { >+ fBaseProvider.inputChanged(fDelegatingViewer, oldInput, newInput); >+ } >+ } >+ >+ /** >+ * 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; >+ >+ public SubTreeModelLabelProvider(ITreeModelLabelProviderTarget viewer) { >+ fBaseProvider = new TreeModelLabelProvider(viewer); >+ } >+ >+ public boolean update(TreePath elementPath) { >+ return fBaseProvider.update( createFullPath(elementPath) ); >+ } >+ >+ public void addLabelUpdateListener(ILabelUpdateListener listener) { >+ fBaseProvider.addLabelUpdateListener(listener); >+ } >+ >+ public Color getColor(RGB rgb) { >+ return fBaseProvider.getColor(rgb); >+ } >+ >+ public Font getFont(FontData fontData) { >+ return fBaseProvider.getFont(fontData); >+ } >+ >+ public Image getImage(ImageDescriptor descriptor) { >+ return fBaseProvider.getImage(descriptor); >+ } >+ >+ public void removeLabelUpdateListener(ILabelUpdateListener listener) { >+ fBaseProvider.removeLabelUpdateListener(listener); >+ } >+ >+ public void addListener(ILabelProviderListener listener) { >+ fBaseProvider.addListener(listener); >+ } >+ >+ public void dispose() { >+ fBaseProvider.dispose(); >+ super.dispose(); >+ } >+ >+ public boolean isLabelProperty(Object element, String property) { >+ return fBaseProvider.isLabelProperty(element, property); >+ } >+ >+ public void removeListener(ILabelProviderListener listener) { >+ fBaseProvider.removeListener(listener); >+ } >+ } >+ >+ private TreePath createFullPath(TreePath subPath) { >+ 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 (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; >+ } >+ >+ protected ITreeModelContentProvider createContentProvider() { >+ return new SubTreeModelContentProvider(); >+ } >+ >+ protected ITreeModelLabelProvider createLabelProvider() { >+ return new SubTreeModelLabelProvider(getDelegatingViewer()); >+ } >+ >+ >+} >Index: ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelLabelProvider.java >=================================================================== >RCS file: ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelLabelProvider.java >diff -N ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelLabelProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelLabelProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,69 @@ >+/******************************************************************************* >+ * Copyright (c) 2009 Wind River Systems 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: >+ * Wind River Systems - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.debug.internal.ui.viewers.model; >+ >+import org.eclipse.jface.resource.ImageDescriptor; >+import org.eclipse.jface.viewers.IBaseLabelProvider; >+import org.eclipse.jface.viewers.TreePath; >+import org.eclipse.swt.graphics.Color; >+import org.eclipse.swt.graphics.Font; >+import org.eclipse.swt.graphics.FontData; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.swt.graphics.RGB; >+ >+/** >+ * {@link TreeModelViewer} label provider interface. In addition to >+ * implementing this interface, the label provider for the TreeModelViewer >+ * must also extend CellLabelProvider. >+ * >+ * @since 3.5 >+ */ >+public interface ITreeModelLabelProvider extends IBaseLabelProvider { >+ >+ public boolean update(TreePath elementPath); >+ >+ /** >+ * Registers the specified listener for view label update notifications. >+ */ >+ public void addLabelUpdateListener(ILabelUpdateListener listener); >+ >+ /** >+ * Removes the specified listener from view label update notifications. >+ */ >+ public 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> >+ */ >+ public 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> >+ */ >+ public 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> >+ */ >+ public Color getColor(RGB rgb); >+} >Index: ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelContentProvider.java >=================================================================== >RCS file: ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelContentProvider.java >diff -N ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelContentProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ ui/org/eclipse/debug/internal/ui/viewers/model/ITreeModelContentProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,130 @@ >+/******************************************************************************* >+ * Copyright (c) 2009 Wind River Systems 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: >+ * Wind River Systems - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.debug.internal.ui.viewers.model; >+ >+import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelChangedListener; >+import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; >+import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdateListener; >+import org.eclipse.jface.viewers.ILazyTreePathContentProvider; >+import org.eclipse.jface.viewers.TreePath; >+ >+/** >+ * {@link TreeModelViewer} content provider interface. >+ * >+ * @since 3.5 >+ */ >+public interface ITreeModelContentProvider extends ILazyTreePathContentProvider { >+ >+ /** >+ * 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 >+ */ >+ public 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 >+ */ >+ public 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 >+ */ >+ public int modelToViewIndex(TreePath parentPath, int index); >+ >+ /** >+ * 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 >+ */ >+ public boolean shouldFilter(Object parentElementOrTreePath, Object element); >+ >+ /** >+ * Notification the given element is being unmapped. >+ * >+ * @param path >+ */ >+ public void unmapPath(TreePath path); >+ >+ /** >+ * Turns on the mode which causes the model viewer to ignore SELECT, >+ * EXPAND, and COLLAPSE flags of {@link IModelDelta}. >+ * >+ * @param suppress If <code>true</code> it turns on the suppress mode. >+ */ >+ public void setSuppressModelControlDeltas(boolean suppress); >+ >+ /** >+ * Returns true if the viewer is currently in the mode to ignore SELECT, >+ * REVEAL, EXPAND, and COLLAPSE flags of {@link IModelDelta}. >+ * >+ * @return Returns <code>true</code> if in suppress mode. >+ */ >+ public boolean isSuppressModelControlDeltas(); >+ >+ /** >+ * 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 >+ */ >+ public int modelToViewChildCount(TreePath parentPath, int count); >+ >+ /** >+ * Registers the specified listener for view update notifications. >+ */ >+ public void addViewerUpdateListener(IViewerUpdateListener listener); >+ >+ /** >+ * Removes the specified listener from update notifications. >+ */ >+ public void removeViewerUpdateListener(IViewerUpdateListener listener); >+ >+ /** >+ * Registers the given listener for model delta notification. >+ * This listener is called immediately after the viewer processes >+ * the delta. >+ */ >+ public void addModelChangedListener(IModelChangedListener listener); >+ >+ /** >+ * Removes the given listener from model delta notification. >+ */ >+ public void removeModelChangedListener(IModelChangedListener 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. >+ */ >+ public void updateModel(IModelDelta delta); >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 262266
:
125925
| 126516 |
126590