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 56189 Details for
Bug 167323
[Viewers]Open AbstractTreeViewer for external widget implementors
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Open AbstractTreeViewer as much as need for subclassers
167323.patch (text/plain), 24.64 KB, created by
Thomas Schindl
on 2006-12-26 14:59:04 EST
(
hide
)
Description:
Open AbstractTreeViewer as much as need for subclassers
Filename:
MIME Type:
Creator:
Thomas Schindl
Created:
2006-12-26 14:59:04 EST
Size:
24.64 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jface >Index: src/org/eclipse/jface/viewers/TreeViewer.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jface/src/org/eclipse/jface/viewers/TreeViewer.java,v >retrieving revision 1.74 >diff -u -r1.74 TreeViewer.java >--- src/org/eclipse/jface/viewers/TreeViewer.java 13 Dec 2006 04:23:50 -0000 1.74 >+++ src/org/eclipse/jface/viewers/TreeViewer.java 26 Dec 2006 19:50:17 -0000 >@@ -13,7 +13,6 @@ > > package org.eclipse.jface.viewers; > >-import java.util.Iterator; > import java.util.List; > > import org.eclipse.jface.util.Policy; >@@ -128,39 +127,6 @@ > } > > /* >- * (non-Javadoc) Method declared in AbstractTreeViewer. >- */ >- protected void doUpdateItem(final Item item, Object element) { >- if (!(item instanceof TreeItem)) { >- return; >- } >- TreeItem treeItem = (TreeItem) item; >- if (treeItem.isDisposed()) { >- unmapElement(element, treeItem); >- return; >- } >- >- int columnCount = getTree().getColumnCount(); >- if (columnCount == 0)// If no columns are created then fake one >- columnCount = 1; >- >- for (int column = 0; column < columnCount; column++) { >- ViewerColumn columnViewer = getViewerColumn(column); >- columnViewer.refresh(updateCell(getViewerRowFromItem(treeItem), >- column)); >- >- // As it is possible for user code to run the event >- // loop check here. >- if (item.isDisposed()) { >- unmapElement(element, item); >- return; >- } >- >- } >- >- } >- >- /* > * (non-Javadoc) > * > * @see org.eclipse.jface.viewers.ColumnViewer#getColumnViewerOwner(int) >@@ -176,29 +142,6 @@ > return getTree().getColumn(columnIndex); > } > >- /** >- * Override to handle tree paths. >- * >- * @see org.eclipse.jface.viewers.StructuredViewer#buildLabel(org.eclipse.jface.viewers.ViewerLabel, >- * java.lang.Object) >- */ >- protected void buildLabel(ViewerLabel updateLabel, Object elementOrPath) { >- Object element; >- if (elementOrPath instanceof TreePath) { >- TreePath path = (TreePath) elementOrPath; >- IBaseLabelProvider provider = getLabelProvider(); >- if (provider instanceof ITreePathLabelProvider) { >- ITreePathLabelProvider pprov = (ITreePathLabelProvider) provider; >- buildLabel(updateLabel, path, pprov); >- return; >- } >- element = path.getLastSegment(); >- } else { >- element = elementOrPath; >- } >- super.buildLabel(updateLabel, element); >- } >- > /* > * (non-Javadoc) Method declared in AbstractTreeViewer. > */ >@@ -413,45 +356,6 @@ > getTree().setSelection(newItems); > } > >- /** >- * Returns <code>true</code> if the given list and array of items refer to >- * the same model elements. Order is unimportant. >- * >- * @param items >- * the list of items >- * @param current >- * the array of items >- * @return <code>true</code> if the refer to the same elements, >- * <code>false</code> otherwise >- * >- * @since 3.1 >- */ >- protected boolean isSameSelection(List items, Item[] current) { >- // If they are not the same size then they are not equivalent >- int n = items.size(); >- if (n != current.length) { >- return false; >- } >- >- CustomHashtable itemSet = newHashtable(n * 2 + 1); >- for (Iterator i = items.iterator(); i.hasNext();) { >- Item item = (Item) i.next(); >- Object element = item.getData(); >- itemSet.put(element, element); >- } >- >- // Go through the items of the current collection >- // If there is a mismatch return false >- for (int i = 0; i < current.length; i++) { >- if (current[i].getData() == null >- || !itemSet.containsKey(current[i].getData())) { >- return false; >- } >- } >- >- return true; >- } >- > /* > * (non-Javadoc) Method declared in AbstractTreeViewer. > */ >@@ -992,14 +896,6 @@ > ((ILazyTreeContentProvider) getContentProvider()).updateChildCount(item.getData(), currentChildCount); > } > } >- >- private boolean internalIsInputOrEmptyPath(final Object elementOrTreePath) { >- if (elementOrTreePath.equals(getInput())) >- return true; >- if (!(elementOrTreePath instanceof TreePath)) >- return false; >- return ((TreePath) elementOrTreePath).getSegmentCount() == 0; >- } > > protected void disassociate(Item item) { > if (contentProviderIsLazy) { >@@ -1009,4 +905,8 @@ > super.disassociate(item); > } > >+ protected int doGetColumnCount() { >+ return tree.getColumnCount(); >+ } >+ > } >Index: src/org/eclipse/jface/viewers/AbstractTreeViewer.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jface/src/org/eclipse/jface/viewers/AbstractTreeViewer.java,v >retrieving revision 1.106 >diff -u -r1.106 AbstractTreeViewer.java >--- src/org/eclipse/jface/viewers/AbstractTreeViewer.java 24 Nov 2006 13:09:36 -0000 1.106 >+++ src/org/eclipse/jface/viewers/AbstractTreeViewer.java 26 Dec 2006 19:50:15 -0000 >@@ -147,7 +147,7 @@ > * the element or tree path > * @return the items for that element > */ >- /* package */ Widget[] internalFindItems(Object parentElementOrTreePath) { >+ protected Widget[] internalFindItems(Object parentElementOrTreePath) { > Widget[] widgets = findItems(parentElementOrTreePath); > if (parentElementOrTreePath instanceof TreePath) { > TreePath path = (TreePath) parentElementOrTreePath; >@@ -871,8 +871,65 @@ > * @param element > * the element > */ >- protected abstract void doUpdateItem(Item item, Object element); >+ protected void doUpdateItem(final Item item, Object element) { >+ if (item.isDisposed()) { >+ unmapElement(element, item); >+ return; >+ } >+ >+ int columnCount = doGetColumnCount(); >+ if (columnCount == 0)// If no columns are created then fake one >+ columnCount = 1; >+ >+ for (int column = 0; column < columnCount; column++) { >+ ViewerColumn columnViewer = getViewerColumn(column); >+ columnViewer.refresh(updateCell(getViewerRowFromItem(item), >+ column)); >+ >+ // As it is possible for user code to run the event >+ // loop check here. >+ if (item.isDisposed()) { >+ unmapElement(element, item); >+ return; >+ } >+ >+ } >+ } >+ >+ /** >+ * Compares the current selection with the new one and if they are equal true is returned >+ * @param items the new selection items >+ * @param current the current selection >+ * @return <code>true</code> if both selections are the same >+ */ >+ protected boolean isSameSelection(List items, Item[] current) { >+ // If they are not the same size then they are not equivalent >+ int n = items.size(); >+ if (n != current.length) { >+ return false; >+ } >+ >+ CustomHashtable itemSet = newHashtable(n * 2 + 1); >+ for (Iterator i = items.iterator(); i.hasNext();) { >+ Item item = (Item) i.next(); >+ Object element = item.getData(); >+ itemSet.put(element, element); >+ } >+ >+ // Go through the items of the current collection >+ // If there is a mismatch return false >+ for (int i = 0; i < current.length; i++) { >+ if (current[i].getData() == null >+ || !itemSet.containsKey(current[i].getData())) { >+ return false; >+ } >+ } >+ >+ return true; >+ } > >+ >+ > /* (non-Javadoc) Method declared on StructuredViewer. */ > protected void doUpdateItem(Widget widget, Object element, boolean fullMap) { > if (widget instanceof Item) { >@@ -2824,4 +2881,49 @@ > protected AbstractViewerEditor createViewerEditor() { > return null; > } >+ >+ /** >+ * <p><b>Subclasses should overwrite only declared here because of API backwards compatility</b></p> >+ * @return the number of columns >+ */ >+ protected int doGetColumnCount() { >+ return 0; >+ } >+ >+ >+ /** >+ * Override to handle tree paths. >+ * >+ * @see org.eclipse.jface.viewers.StructuredViewer#buildLabel(org.eclipse.jface.viewers.ViewerLabel, >+ * java.lang.Object) >+ */ >+ protected void buildLabel(ViewerLabel updateLabel, Object elementOrPath) { >+ Object element; >+ if (elementOrPath instanceof TreePath) { >+ TreePath path = (TreePath) elementOrPath; >+ IBaseLabelProvider provider = getLabelProvider(); >+ if (provider instanceof ITreePathLabelProvider) { >+ ITreePathLabelProvider pprov = (ITreePathLabelProvider) provider; >+ buildLabel(updateLabel, path, pprov); >+ return; >+ } >+ element = path.getLastSegment(); >+ } else { >+ element = elementOrPath; >+ } >+ super.buildLabel(updateLabel, element); >+ } >+ >+ /** >+ * TODO Boris please comment on this >+ * @param elementOrTreePath >+ * @return <code>true</code> >+ */ >+ protected boolean internalIsInputOrEmptyPath(final Object elementOrTreePath) { >+ if (elementOrTreePath.equals(getInput())) >+ return true; >+ if (!(elementOrTreePath instanceof TreePath)) >+ return false; >+ return ((TreePath) elementOrTreePath).getSegmentCount() == 0; >+ } > } >#P org.eclipse.swt.nebula.snippets >Index: META-INF/MANIFEST.MF >=================================================================== >RCS file: /cvsroot/technology/org.eclipse.swt.nebula/org.eclipse.swt.nebula.snippets/META-INF/MANIFEST.MF,v >retrieving revision 1.2 >diff -u -r1.2 MANIFEST.MF >--- META-INF/MANIFEST.MF 5 Sep 2006 06:11:24 -0000 1.2 >+++ META-INF/MANIFEST.MF 26 Dec 2006 19:50:18 -0000 >@@ -5,6 +5,7 @@ > Bundle-Version: 1.0.0 > Bundle-Localization: plugin > Require-Bundle: org.eclipse.swt, >- org.eclipse.swt.nebula >+ org.eclipse.swt.nebula, >+ org.eclipse.swt.nebula.nebface > Export-Package: org.eclipse.swt.nebula.snippets.ctabletree, > org.eclipse.swt.nebula.snippets.grid >Index: src/org/eclipse/swt/nebula/snippets/nebface/Snippet014TreeViewerNoMandatoryLabelProvider.java >=================================================================== >RCS file: src/org/eclipse/swt/nebula/snippets/nebface/Snippet014TreeViewerNoMandatoryLabelProvider.java >diff -N src/org/eclipse/swt/nebula/snippets/nebface/Snippet014TreeViewerNoMandatoryLabelProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/swt/nebula/snippets/nebface/Snippet014TreeViewerNoMandatoryLabelProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,211 @@ >+/******************************************************************************* >+ * Copyright (c) 2006 Tom Schindl 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: >+ * Tom Schindl - initial API and implementation >+ *******************************************************************************/ >+ >+package org.eclipse.swt.nebula.snippets.nebface; >+ >+import java.util.ArrayList; >+ >+import org.eclipse.jface.resource.FontRegistry; >+import org.eclipse.jface.viewers.ITableColorProvider; >+import org.eclipse.jface.viewers.ITableFontProvider; >+import org.eclipse.jface.viewers.ITableLabelProvider; >+import org.eclipse.jface.viewers.ITreeContentProvider; >+import org.eclipse.jface.viewers.LabelProvider; >+import org.eclipse.jface.viewers.Viewer; >+import org.eclipse.swt.SWT; >+import org.eclipse.swt.graphics.Color; >+import org.eclipse.swt.graphics.Font; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.swt.layout.FillLayout; >+import org.eclipse.swt.nebula.nebface.viewers.GridTreeViewer; >+import org.eclipse.swt.nebula.widgets.grid.GridColumn; >+import org.eclipse.swt.widgets.Display; >+import org.eclipse.swt.widgets.Shell; >+ >+/** >+ * A simple TreeViewer to demonstrate usage >+ * >+ * @author Tom Schindl <tom.schindl@bestsolution.at> >+ * >+ */ >+public class Snippet014TreeViewerNoMandatoryLabelProvider { >+ private class MyContentProvider implements ITreeContentProvider { >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) >+ */ >+ public Object[] getElements(Object inputElement) { >+ return ((MyModel) inputElement).child.toArray(); >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see org.eclipse.jface.viewers.IContentProvider#dispose() >+ */ >+ public void dispose() { >+ >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, >+ * java.lang.Object, java.lang.Object) >+ */ >+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { >+ >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object) >+ */ >+ public Object[] getChildren(Object parentElement) { >+ return getElements(parentElement); >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object) >+ */ >+ public Object getParent(Object element) { >+ if (element == null) { >+ return null; >+ } >+ >+ return ((MyModel) element).parent; >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object) >+ */ >+ public boolean hasChildren(Object element) { >+ return ((MyModel) element).child.size() > 0; >+ } >+ >+ } >+ >+ public class MyModel { >+ public MyModel parent; >+ >+ public ArrayList child = new ArrayList(); >+ >+ public int counter; >+ >+ public MyModel(int counter, MyModel parent) { >+ this.parent = parent; >+ this.counter = counter; >+ } >+ >+ public String toString() { >+ String rv = "Item "; >+ if (parent != null) { >+ rv = parent.toString() + "."; >+ } >+ >+ rv += counter; >+ >+ return rv; >+ } >+ } >+ >+ public class MyLabelProvider extends LabelProvider implements >+ ITableLabelProvider, ITableFontProvider, ITableColorProvider { >+ FontRegistry registry = new FontRegistry(); >+ >+ public Image getColumnImage(Object element, int columnIndex) { >+ return null; >+ } >+ >+ public String getColumnText(Object element, int columnIndex) { >+ return "Column " + columnIndex + " => " + element.toString(); >+ } >+ >+ public Font getFont(Object element, int columnIndex) { >+ if (((MyModel) element).counter % 2 == 0) { >+ return registry.getBold(Display.getCurrent().getSystemFont() >+ .getFontData()[0].getName()); >+ } >+ return null; >+ } >+ >+ public Color getBackground(Object element, int columnIndex) { >+ if (((MyModel) element).counter % 2 == 0) { >+ return Display.getCurrent().getSystemColor(SWT.COLOR_RED); >+ } >+ return null; >+ } >+ >+ public Color getForeground(Object element, int columnIndex) { >+ if (((MyModel) element).counter % 2 == 1) { >+ return Display.getCurrent().getSystemColor(SWT.COLOR_RED); >+ } >+ return null; >+ } >+ >+ } >+ >+ public Snippet014TreeViewerNoMandatoryLabelProvider(Shell shell) { >+ final GridTreeViewer v = new GridTreeViewer(shell); >+ >+ GridColumn column = new GridColumn(v.getGrid(),SWT.NONE); >+ column.setWidth(200); >+ column.setText("Column 1"); >+ column.setTree(true); >+ >+ column = new GridColumn(v.getGrid(),SWT.NONE); >+ column.setWidth(200); >+ column.setText("Column 2"); >+ >+ v.setLabelProvider(new MyLabelProvider()); >+ v.setContentProvider(new MyContentProvider()); >+ v.setInput(createModel()); >+ } >+ >+ private MyModel createModel() { >+ >+ MyModel root = new MyModel(0, null); >+ root.counter = 0; >+ >+ MyModel tmp; >+ for (int i = 1; i < 10; i++) { >+ tmp = new MyModel(i, root); >+ root.child.add(tmp); >+ for (int j = 1; j < i; j++) { >+ tmp.child.add(new MyModel(j, tmp)); >+ } >+ } >+ >+ return root; >+ } >+ >+ public static void main(String[] args) { >+ Display display = new Display(); >+ Shell shell = new Shell(display); >+ shell.setLayout(new FillLayout()); >+ new Snippet014TreeViewerNoMandatoryLabelProvider(shell); >+ shell.open(); >+ >+ while (!shell.isDisposed()) { >+ if (!display.readAndDispatch()) >+ display.sleep(); >+ } >+ >+ display.dispose(); >+ } >+} >#P org.eclipse.swt.nebula.nebface >Index: META-INF/MANIFEST.MF >=================================================================== >RCS file: /cvsroot/technology/org.eclipse.swt.nebula/org.eclipse.swt.nebula.nebface/META-INF/MANIFEST.MF,v >retrieving revision 1.4 >diff -u -r1.4 MANIFEST.MF >--- META-INF/MANIFEST.MF 16 Oct 2006 13:41:17 -0000 1.4 >+++ META-INF/MANIFEST.MF 26 Dec 2006 19:50:19 -0000 >@@ -9,4 +9,5 @@ > org.eclipse.equinox.common;visibility:=reexport > Bundle-RequiredExecutionEnvironment: J2SE-1.4 > Export-Package: org.eclipse.swt.nebula.nebface.ctabletreeviewer, >- org.eclipse.swt.nebula.nebface.ctabletreeviewer.ccontainerviewer >+ org.eclipse.swt.nebula.nebface.ctabletreeviewer.ccontainerviewer, >+ org.eclipse.swt.nebula.nebface.viewers >Index: src/org/eclipse/swt/nebula/nebface/viewers/GridTreeViewer.java >=================================================================== >RCS file: src/org/eclipse/swt/nebula/nebface/viewers/GridTreeViewer.java >diff -N src/org/eclipse/swt/nebula/nebface/viewers/GridTreeViewer.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/swt/nebula/nebface/viewers/GridTreeViewer.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,287 @@ >+package org.eclipse.swt.nebula.nebface.viewers; >+ >+import java.util.List; >+ >+import org.eclipse.jface.viewers.AbstractTreeViewer; >+import org.eclipse.jface.viewers.AbstractViewerEditor; >+import org.eclipse.jface.viewers.StructuredSelection; >+import org.eclipse.jface.viewers.TreePath; >+import org.eclipse.jface.viewers.TreeSelection; >+import org.eclipse.jface.viewers.ViewerRow; >+import org.eclipse.jface.viewers.CellEditor.LayoutData; >+import org.eclipse.swt.SWT; >+import org.eclipse.swt.events.TreeListener; >+import org.eclipse.swt.graphics.Point; >+import org.eclipse.swt.nebula.widgets.grid.Grid; >+import org.eclipse.swt.nebula.widgets.grid.GridEditor; >+import org.eclipse.swt.nebula.widgets.grid.GridItem; >+import org.eclipse.swt.widgets.Composite; >+import org.eclipse.swt.widgets.Control; >+import org.eclipse.swt.widgets.Item; >+import org.eclipse.swt.widgets.Widget; >+ >+public class GridTreeViewer extends AbstractTreeViewer { >+ private Grid grid; >+ >+ private GridEditor gridEditor; >+ >+ /** >+ * Creates a tree viewer on a newly-created tree control under the given >+ * parent. The tree control is created using the SWT style bits >+ * <code>MULTI, H_SCROLL, V_SCROLL,</code> and <code>BORDER</code>. The >+ * viewer has no input, no content provider, a default label provider, no >+ * sorter, and no filters. >+ * >+ * @param parent >+ * the parent control >+ */ >+ public GridTreeViewer(Composite parent) { >+ this(parent, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); >+ } >+ >+ /** >+ * Creates a tree viewer on a newly-created tree control under the given >+ * parent. The tree control is created using the given SWT style bits. The >+ * viewer has no input, no content provider, a default label provider, no >+ * sorter, and no filters. >+ * >+ * @param parent >+ * the parent control >+ * @param style >+ * the SWT style bits used to create the tree. >+ */ >+ public GridTreeViewer(Composite parent, int style) { >+ this(new Grid(parent, style)); >+ } >+ >+ /** >+ * Creates a tree viewer on the given tree control. The viewer has no input, >+ * no content provider, a default label provider, no sorter, and no filters. >+ * >+ * @param tree >+ * the tree control >+ */ >+ public GridTreeViewer(Grid grid) { >+ super(); >+ this.grid = grid; >+ hookControl(grid); >+ gridEditor = new GridEditor(grid); >+ } >+ >+ >+ >+ protected void addTreeListener(Control control, TreeListener listener) { >+ ((Grid)control).addTreeListener(listener); >+ } >+ >+ protected Item[] getChildren(Widget o) { >+ if (o instanceof GridItem) { >+ return ((GridItem) o).getItems(); >+ } >+ if (o instanceof Grid) { >+ return ((Grid) o).getItems(); >+ } >+ return null; >+ } >+ >+ protected boolean getExpanded(Item item) { >+ return ((GridItem) item).isExpanded(); >+ } >+ >+ protected int getItemCount(Control control) { >+ return grid.getItemCount(); >+ } >+ >+ protected int getItemCount(Item item) { >+ return ((GridItem)item).getItems().length; >+ } >+ >+ protected Item[] getItems(Item item) { >+ return ((GridItem)item).getItems(); >+ } >+ >+ protected Item getParentItem(Item item) { >+ return ((GridItem)item).getParentItem(); >+ } >+ >+ protected Item[] getSelection(Control control) { >+ return grid.getSelection(); >+ } >+ >+ protected Item newItem(Widget parent, int flags, int ix) { >+ GridItem item; >+ >+ if (parent instanceof GridItem) { >+ item = (GridItem) createNewRowPart(getViewerRowFromItem(parent), >+ flags, ix).getItem(); >+ } else { >+ item = (GridItem) createNewRowPart(null, flags, ix).getItem(); >+ } >+ >+ return item; >+ } >+ >+ /** >+ * Create a new ViewerRow at rowIndex >+ * >+ * @param parent >+ * @param style >+ * @param rowIndex >+ * @return ViewerRow >+ */ >+ private ViewerRow createNewRowPart(ViewerRow parent, int style, int rowIndex) { >+ if (parent == null) { >+ if (rowIndex >= 0) { >+ return getViewerRowFromItem(new GridItem(grid, style, rowIndex)); >+ } >+ return getViewerRowFromItem(new GridItem(grid, style)); >+ } >+ >+ if (rowIndex >= 0) { >+ return getViewerRowFromItem(new GridItem((GridItem) parent.getItem(), >+ SWT.NONE, rowIndex)); >+ } >+ >+ return getViewerRowFromItem(new GridItem((GridItem) parent.getItem(), >+ SWT.NONE)); >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see org.eclipse.jface.viewers.ColumnViewer#getRowPartFromItem(org.eclipse.swt.widgets.Widget) >+ */ >+ protected ViewerRow getViewerRowFromItem(Widget item) { >+ ViewerRow part = (ViewerRow) item.getData(ViewerRow.ROWPART_KEY); >+ >+ if (part == null) { >+ part = new GridViewerRow(((GridItem) item)); >+ } >+ >+ return part; >+ } >+ >+ >+ protected void removeAll(Control control) { >+ grid.removeAll(); >+ } >+ >+ protected void setExpanded(Item item, boolean expand) { >+ ((GridItem)item).setExpanded(expand); >+ } >+ >+ protected void setSelection(List items) { >+ Item[] current = getSelection(grid); >+ >+ // Don't bother resetting the same selection >+ if (isSameSelection(items, current)) { >+ return; >+ } >+ >+ GridItem[] newItems = new GridItem[items.size()]; >+ items.toArray(newItems); >+ grid.setSelection(newItems); >+ } >+ >+ protected void showItem(Item item) { >+ grid.showItem((GridItem) item); >+ } >+ >+ public Control getControl() { >+ return grid; >+ } >+ >+ protected int doGetColumnCount() { >+ return grid.getColumnCount(); >+ } >+ >+ protected Item getChild(Widget widget, int index) { >+ if (widget instanceof GridItem) { >+ return ((GridItem) widget).getItem(index); >+ } >+ if (widget instanceof Grid) { >+ return grid.getItem(index); >+ } >+ return null; >+ } >+ >+ protected Item getItemAt(Point p) { >+ return grid.getItem(p); >+ } >+ >+ protected AbstractViewerEditor createViewerEditor() { >+ return new AbstractViewerEditor(this) { >+ >+ protected StructuredSelection createSelection(Object element) { >+ if (element instanceof TreePath) { >+ return new TreeSelection((TreePath) element, getComparer()); >+ } >+ >+ return new StructuredSelection(element); >+ } >+ >+ protected Item[] getSelection() { >+ return grid.getSelection(); >+ } >+ >+ protected void setEditor(Control w, Item item, int fColumnNumber) { >+ gridEditor.setEditor(w, (GridItem) item, fColumnNumber); >+ } >+ >+ protected void setLayoutData(LayoutData layoutData) { >+ gridEditor.grabHorizontal = layoutData.grabHorizontal; >+ gridEditor.horizontalAlignment = layoutData.horizontalAlignment; >+ gridEditor.minimumWidth = layoutData.minimumWidth; >+ } >+ >+ protected void showSelection() { >+ grid.showSelection(); >+ } >+ >+ }; >+ } >+ >+ public void remove(final Object parentOrTreePath, final int index) { >+ preservingSelection(new Runnable() { >+ public void run() { >+ if (internalIsInputOrEmptyPath(parentOrTreePath)) { >+ if (index < grid.getItemCount()) { >+ GridItem item = grid.getItem(index); >+ if (item.getData() != null) { >+ disassociate(item); >+ } >+ item.dispose(); >+ } >+ } else { >+ Widget[] parentItems = internalFindItems(parentOrTreePath); >+ for (int i = 0; i < parentItems.length; i++) { >+ GridItem parentItem = (GridItem) parentItems[i]; >+ if (index < parentItem.getItems().length) { >+ GridItem item = parentItem.getItem(index); >+ if (item.getData() != null) { >+ disassociate(item); >+ } >+ item.dispose(); >+ } >+ } >+ } >+ } >+ }); >+ } >+ >+ public Grid getGrid() { >+ return grid; >+ } >+ >+ protected Widget getColumnViewerOwner(int columnIndex) { >+ if (columnIndex < 0 || ( columnIndex > 0 && columnIndex >= grid.getColumnCount() ) ) { >+ return null; >+ } >+ >+ if (grid.getColumnCount() == 0)// Hang it off the table if it >+ return grid; >+ >+ return grid.getColumn(columnIndex); >+ } >+ >+}
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 167323
:
55569
|
56189
|
56880