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 84678 Details for
Bug 212071
GalleryTreeViewer
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.
Initial Implementation
GalleryTreeViewer.patch (text/plain), 30.20 KB, created by
Peter Centgraf
on 2007-12-06 17:39:47 EST
(
hide
)
Description:
Initial Implementation
Filename:
MIME Type:
Creator:
Peter Centgraf
Created:
2007-12-06 17:39:47 EST
Size:
30.20 KB
patch
obsolete
>Index: META-INF/MANIFEST.MF >=================================================================== >RCS file: /cvsroot/technology/org.eclipse.swt.nebula/org.eclipse.nebula.widgets.gallery/META-INF/MANIFEST.MF,v >retrieving revision 1.5 >diff -u -r1.5 MANIFEST.MF >--- META-INF/MANIFEST.MF 22 May 2007 17:01:47 -0000 1.5 >+++ META-INF/MANIFEST.MF 6 Dec 2007 22:33:49 -0000 >@@ -4,6 +4,7 @@ > Bundle-SymbolicName: org.eclipse.nebula.widgets.gallery > Bundle-Version: 1.0.0.qualifier > Bundle-RequiredExecutionEnvironment: J2SE-1.4 >-Require-Bundle: org.eclipse.swt >+Require-Bundle: org.eclipse.swt, >+ org.eclipse.jface;bundle-version="3.3.0";resolution:=optional > Export-Package: org.eclipse.nebula.widgets.gallery > Bundle-Vendor: Nicolas Richeton >Index: src/org/eclipse/nebula/jface/galleryviewer/GalleryTreeViewer.java >=================================================================== >RCS file: src/org/eclipse/nebula/jface/galleryviewer/GalleryTreeViewer.java >diff -N src/org/eclipse/nebula/jface/galleryviewer/GalleryTreeViewer.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/nebula/jface/galleryviewer/GalleryTreeViewer.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,488 @@ >+package org.eclipse.nebula.jface.galleryviewer; >+ >+ >+import java.util.Arrays; >+import java.util.Iterator; >+import java.util.LinkedList; >+import java.util.List; >+ >+import org.eclipse.jface.viewers.AbstractTreeViewer; >+import org.eclipse.jface.viewers.ColumnViewerEditor; >+import org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent; >+import org.eclipse.jface.viewers.IContentProvider; >+import org.eclipse.jface.viewers.IStructuredContentProvider; >+import org.eclipse.jface.viewers.ITreeContentProvider; >+import org.eclipse.jface.viewers.ITreePathContentProvider; >+import org.eclipse.jface.viewers.TreePath; >+import org.eclipse.jface.viewers.TreeSelection; >+import org.eclipse.jface.viewers.ViewerCell; >+import org.eclipse.jface.viewers.ViewerRow; >+import org.eclipse.nebula.widgets.gallery.DefaultGalleryGroupRenderer; >+import org.eclipse.nebula.widgets.gallery.DefaultGalleryItemRenderer; >+import org.eclipse.nebula.widgets.gallery.Gallery; >+import org.eclipse.nebula.widgets.gallery.GalleryItem; >+import org.eclipse.nebula.widgets.gallery.NoGroupRenderer; >+import org.eclipse.swt.SWT; >+import org.eclipse.swt.events.TreeListener; >+import org.eclipse.swt.graphics.Point; >+import org.eclipse.swt.widgets.Composite; >+import org.eclipse.swt.widgets.Control; >+import org.eclipse.swt.widgets.Item; >+import org.eclipse.swt.widgets.Widget; >+ >+/** >+ * @author pcentgraf >+ */ >+public class GalleryTreeViewer extends AbstractTreeViewer { >+ >+ protected Gallery gallery; >+ >+ /** >+ * true if we are inside a preservingSelection() call >+ */ >+ protected boolean preservingSelection; >+ >+ /** >+ * The row object reused >+ */ >+ private GalleryViewerRow cachedRow; >+ >+ /** >+ * Creates a gallery viewer on a newly-created gallery control under the given >+ * parent. The gallery control is created using the SWT style bits >+ * <code>MULTI, 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 GalleryTreeViewer(Composite parent) { >+ this(parent, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER); >+ } >+ >+ /** >+ * Creates a gallery viewer on a newly-created gallery control under the given >+ * parent. The gallery 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 gallery. >+ */ >+ public GalleryTreeViewer(Composite parent, int style) { >+ gallery = new Gallery(parent, style); >+ gallery.setGroupRenderer(new DefaultGalleryGroupRenderer()); >+ gallery.setItemRenderer(new DefaultGalleryItemRenderer()); >+ super.setAutoExpandLevel(ALL_LEVELS); >+ >+ hookControl(gallery); >+ } >+ >+ /** >+ * Creates a gallery viewer on the given gallery control. The viewer has no input, >+ * no content provider, a default label provider, no sorter, and no filters. >+ * >+ * @param gallery >+ * the gallery control >+ */ >+ public GalleryTreeViewer(Gallery gallery) { >+ super(); >+ this.gallery = gallery; >+ super.setAutoExpandLevel(ALL_LEVELS); >+ >+ hookControl(gallery); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.AbstractTreeViewer#addTreeListener(org.eclipse.swt.widgets.Control, org.eclipse.swt.events.TreeListener) >+ */ >+ @Override >+ protected void addTreeListener(Control control, TreeListener listener) { >+// ((Gallery) control).addTreeListener(listener); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.AbstractTreeViewer#getChild(org.eclipse.swt.widgets.Widget, >+ * int) >+ */ >+ protected Item getChild(Widget widget, int index) { >+ if (widget instanceof GalleryItem) { >+ return ((GalleryItem) widget).getItem(index); >+ } >+ if (widget instanceof Gallery) { >+ return ((Gallery) widget).getItem(index); >+ } >+ return null; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.AbstractTreeViewer#getChildren(org.eclipse.swt.widgets.Widget) >+ */ >+ @Override >+ protected Item[] getChildren(Widget widget) { >+ if (widget instanceof GalleryItem) { >+ return getItems((Item) widget); >+ } >+ if (widget instanceof Gallery) { >+ Gallery gallery = (Gallery) widget; >+ if (gallery.getItemCount() > 0) { >+ return gallery.getItems(); >+ } >+ else { >+ return new GalleryItem[0]; >+ } >+ } >+ return null; >+ } >+ >+ @Override >+ protected Widget getColumnViewerOwner(int columnIndex) { >+ if (columnIndex == 0) { >+ return getGallery(); >+ } >+ return null; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.AbstractTreeViewer#getExpanded(org.eclipse.swt.widgets.Item) >+ */ >+ @Override >+ protected boolean getExpanded(Item item) { >+ return ((GalleryItem)item).isExpanded(); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.AbstractTreeViewer#getItemCount(org.eclipse.swt.widgets.Control) >+ */ >+ @Override >+ protected int getItemCount(Control control) { >+ return ((Gallery)control).getItemCount(); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.AbstractTreeViewer#getItemCount(org.eclipse.swt.widgets.Item) >+ */ >+ @Override >+ protected int getItemCount(Item item) { >+ return ((GalleryItem)item).getItemCount(); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.AbstractTreeViewer#getItems(org.eclipse.swt.widgets.Item) >+ */ >+ @Override >+ protected Item[] getItems(Item item) { >+ GalleryItem gItem = (GalleryItem) item; >+ GalleryItem[] items = new GalleryItem[gItem.getItemCount()]; >+ for (int i = 0; i < items.length; i++) { >+ items[i] = gItem.getItem(i); >+ } >+ return items; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.AbstractTreeViewer#getParentItem(org.eclipse.swt.widgets.Item) >+ */ >+ @Override >+ protected Item getParentItem(Item item) { >+ return ((GalleryItem)item).getParentItem(); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.AbstractTreeViewer#getSelection(org.eclipse.swt.widgets.Control) >+ */ >+ @Override >+ protected Item[] getSelection(Control control) { >+ Item[] selection = ((Gallery)control).getSelection(); >+ if (selection == null) { >+ return new GalleryItem[0]; >+ } >+ else { >+ return selection; >+ } >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.AbstractTreeViewer#newItem(org.eclipse.swt.widgets.Widget, int, int) >+ */ >+ @Override >+ protected Item newItem(Widget parent, int style, int index) { >+ >+ GalleryItem item; >+ >+ if (parent instanceof GalleryItem) { >+ item = (GalleryItem) createNewRowPart(getViewerRowFromItem(parent), >+ style, index).getItem(); >+ } else { >+ item = (GalleryItem) createNewRowPart(null, style, index).getItem(); >+ } >+ >+ return item; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.AbstractTreeViewer#removeAll(org.eclipse.swt.widgets.Control) >+ */ >+ @Override >+ protected void removeAll(Control control) { >+ ((Gallery)control).clearAll(); >+ } >+ >+ @Override >+ public void setAutoExpandLevel(int level) { >+ throw new UnsupportedOperationException("Gallery must be fully expanded."); >+ } >+ >+ /** >+ * <p> >+ * Gallery expects contents to have exactly 2 levels of hierarchy, with groups >+ * as the root elements and image thumbnails as direct children of the groups. >+ * This method accepts ITreeContentProvider and ITreePathContentProvider as-is, and >+ * relies on the providers to return contents with the correct structure. >+ * </p> >+ * <p> >+ * This method also accepts IStructuredContentProvider and wraps it in a >+ * FlatTreeContentProvider with an empty string as the root node. If you need a >+ * different root node, construct your own FlatTreeContentProvider and pass it here. >+ * If you want the Gallery to suppress the collapsable group header, call >+ * </p> >+ * <code>getGallery().setGroupRenderer(new NoGroupRenderer());</code> >+ */ >+ public void setContentProvider(IContentProvider provider) { >+ if (provider instanceof IStructuredContentProvider >+ && !(provider instanceof ITreeContentProvider >+ || provider instanceof ITreePathContentProvider)) { >+ // Wrap a table-style contents with a single root node. >+ super.setContentProvider( >+ new FlatTreeContentProvider((IStructuredContentProvider) provider)); >+ } >+ else { >+ super.setContentProvider(provider); >+ } >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.AbstractTreeViewer#setExpanded(org.eclipse.swt.widgets.Item, boolean) >+ */ >+ @Override >+ protected void setExpanded(Item item, boolean expand) { >+ ((GalleryItem)item).setExpanded(expand); >+// if (contentProviderIsLazy) { >+// // force repaints to happen >+// getControl().update(); >+// } >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.AbstractTreeViewer#setSelection(java.util.List) >+ */ >+ @Override >+ protected void setSelection(List items) { >+ Item[] current = getSelection(getGallery()); >+ >+ // Don't bother resetting the same selection >+ if (isSameSelection(items, current)) { >+ return; >+ } >+ >+ GalleryItem[] newItems = new GalleryItem[items.size()]; >+ items.toArray(newItems); >+ getGallery().setSelection(newItems); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.AbstractTreeViewer#showItem(org.eclipse.swt.widgets.Item) >+ */ >+ @Override >+ protected void showItem(Item item) { >+ gallery.showItem((GalleryItem)item); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.Viewer#getControl() >+ */ >+ @Override >+ public Control getControl() { >+ return gallery; >+ } >+ >+ /** >+ * Returns this gallery viewer's gallery. >+ * >+ * @return the gallery control >+ */ >+ public Gallery getGallery() { >+ return gallery; >+ } >+ >+ @Override >+ protected Item getItemAt(Point point) { >+ return gallery.getItem(point); >+ } >+ >+ @Override >+ protected ColumnViewerEditor createViewerEditor() { >+ // TODO: implement editing support >+ return null; >+ } >+ >+ /** >+ * For a GalleryViewer with a gallery with the VIRTUAL style bit set, set the >+ * number of children of the given element or tree path. To set the number >+ * of children of the invisible root of the gallery, you can pass the input >+ * object or an empty tree path. >+ * >+ * @param elementOrTreePath >+ * the element, or tree path >+ * @param count >+ * >+ * @since 3.2 >+ */ >+ public void setChildCount(final Object elementOrTreePath, final int count) { >+// if (isBusy()) >+// return; >+ preservingSelection(new Runnable() { >+ public void run() { >+ if (internalIsInputOrEmptyPath(elementOrTreePath)) { >+ getGallery().setItemCount(count); >+ return; >+ } >+ Widget[] items = internalFindItems(elementOrTreePath); >+ for (int i = 0; i < items.length; i++) { >+ GalleryItem galleryItem = (GalleryItem) items[i]; >+ galleryItem.setItemCount(count); >+ } >+ } >+ }); >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see org.eclipse.jface.viewers.ColumnViewer#getRowPartFromItem(org.eclipse.swt.widgets.Widget) >+ */ >+ protected ViewerRow getViewerRowFromItem(Widget item) { >+ if( cachedRow == null ) { >+ cachedRow = new GalleryViewerRow((GalleryItem) item); >+ } else { >+ cachedRow.setItem((GalleryItem) item); >+ } >+ >+ return cachedRow; >+ } >+ >+ /** >+ * 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) { >+// // TODO: apply index >+// if (rowIndex >= 0) { >+// return getViewerRowFromItem(new GalleryItem(gallery, style, rowIndex)); >+// } >+ return getViewerRowFromItem(new GalleryItem(gallery, style)); >+ } >+ >+// // TODO: apply index >+// if (rowIndex >= 0) { >+// return getViewerRowFromItem(new GalleryItem((GalleryItem) parent.getItem(), >+// SWT.NONE, rowIndex)); >+// } >+ >+ return getViewerRowFromItem(new GalleryItem((GalleryItem) parent.getItem(), >+ SWT.NONE)); >+ } >+ >+ /** >+ * Removes the element at the specified index of the parent. The selection is updated if required. >+ * >+ * @param parentOrTreePath the parent element, the input element, or a tree path to the parent element >+ * @param index child index >+ * @since 3.3 >+ */ >+ public void remove(final Object parentOrTreePath, final int index) { >+// if (isBusy()) >+// return; >+ final List oldSelection = new LinkedList(Arrays >+ .asList(((TreeSelection) getSelection()).getPaths())); >+ preservingSelection(new Runnable() { >+ public void run() { >+ TreePath removedPath = null; >+ if (internalIsInputOrEmptyPath(parentOrTreePath)) { >+ Gallery gallery = (Gallery) getControl(); >+ if (index < gallery.getItemCount()) { >+ GalleryItem item = gallery.getItem(index); >+ if (item.getData() != null) { >+ removedPath = getTreePathFromItem(item); >+ disassociate(item); >+ } >+ item.dispose(); >+ } >+ } else { >+ Widget[] parentItems = internalFindItems(parentOrTreePath); >+ for (int i = 0; i < parentItems.length; i++) { >+ GalleryItem parentItem = (GalleryItem) parentItems[i]; >+ if (index < parentItem.getItemCount()) { >+ GalleryItem item = parentItem.getItem(index); >+ if (item.getData() != null) { >+ removedPath = getTreePathFromItem(item); >+ disassociate(item); >+ } >+ item.dispose(); >+ } >+ } >+ } >+ if (removedPath != null) { >+ boolean removed = false; >+ for (Iterator it = oldSelection.iterator(); it >+ .hasNext();) { >+ TreePath path = (TreePath) it.next(); >+ if (path.startsWith(removedPath, getComparer())) { >+ it.remove(); >+ removed = true; >+ } >+ } >+ if (removed) { >+ setSelection(new TreeSelection( >+ (TreePath[]) oldSelection >+ .toArray(new TreePath[oldSelection >+ .size()]), getComparer()), >+ false); >+ } >+ >+ } >+ } >+ }); >+ } >+ >+ public void editElement(Object element, int column) { >+ if( element instanceof TreePath ) { >+ setSelection(new TreeSelection((TreePath) element)); >+ GalleryItem[] items = gallery.getSelection(); >+ >+ if( items.length == 1 ) { >+ ViewerRow row = getViewerRowFromItem(items[0]); >+ >+ if (row != null) { >+ ViewerCell cell = row.getCell(column); >+ if (cell != null) { >+ getControl().setRedraw(false); >+ triggerEditorActivationEvent(new ColumnViewerEditorActivationEvent(cell)); >+ getControl().setRedraw(true); >+ } >+ } >+ } >+ } else { >+ super.editElement(element, column); >+ } >+ } >+ >+} >Index: src/org/eclipse/nebula/jface/galleryviewer/GalleryViewerTester.java >=================================================================== >RCS file: src/org/eclipse/nebula/jface/galleryviewer/GalleryViewerTester.java >diff -N src/org/eclipse/nebula/jface/galleryviewer/GalleryViewerTester.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/nebula/jface/galleryviewer/GalleryViewerTester.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,134 @@ >+package org.eclipse.nebula.jface.galleryviewer; >+ >+ >+import java.util.ArrayList; >+import java.util.Arrays; >+import java.util.Comparator; >+ >+import org.eclipse.jface.layout.GridDataFactory; >+import org.eclipse.jface.layout.GridLayoutFactory; >+import org.eclipse.jface.viewers.IStructuredContentProvider; >+import org.eclipse.jface.viewers.ITreeContentProvider; >+import org.eclipse.jface.viewers.LabelProvider; >+import org.eclipse.jface.viewers.Viewer; >+import org.eclipse.jface.viewers.ViewerComparator; >+import org.eclipse.jface.viewers.ViewerFilter; >+import org.eclipse.swt.SWT; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.swt.program.Program; >+import org.eclipse.swt.widgets.Display; >+import org.eclipse.swt.widgets.Shell; >+ >+/** >+ * Simple visual test harness for GalleryTreeViewer. >+ * >+ * @author pcentgraf >+ * @since Dec 5, 2007 >+ */ >+public class GalleryViewerTester { >+ >+ protected static class GalleryTestContentProvider >+ implements ITreeContentProvider { >+// implements IStructuredContentProvider { // Use this to test FlatTreeContentProvider >+ public static final int NUM_GROUPS = 10; >+ public static final int NUM_ITEMS = 20; >+ >+ String[] groups = new String[NUM_GROUPS]; >+ String[][] items = new String[NUM_GROUPS][NUM_ITEMS]; >+ >+ public GalleryTestContentProvider() { >+ for (int i = 0; i < NUM_GROUPS; i++) { >+ groups[i]= "Group "+(i+1); >+ for (int j = 0; j < NUM_ITEMS; j++) { >+ items[i][j] = "Item "+(j+1); >+ } >+ } >+ } >+ >+ public Object[] getChildren(Object parentElement) { >+ int idx = Arrays.asList(groups).indexOf(parentElement); >+ return items[idx]; >+ } >+ >+ public Object getParent(Object element) { >+ return null; >+ } >+ >+ public boolean hasChildren(Object element) { >+ return ((String)element).startsWith("Group"); >+ } >+ >+ public Object[] getElements(Object inputElement) { >+ return groups; >+ } >+ >+ public void dispose() { >+ } >+ >+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { >+ } >+ } >+ >+ protected static class GalleryTestLabelProvider extends LabelProvider { >+ protected static Image itemImage = >+ new Image(Display.getCurrent(), Program.findProgram("jpg").getImageData()); >+ >+ @Override >+ public Image getImage(Object element) { >+ return itemImage; >+ } >+ } >+ >+ protected static class OddNumbersFilter extends ViewerFilter { >+ @Override >+ public boolean select(Viewer viewer, Object parentElement, Object element) { >+ try { >+ String label = (String) element; >+ return (Integer.parseInt(label.substring(label.indexOf(' ')+1))%2 > 0); >+ } >+ catch (Exception e) { >+ return true; >+ } >+ } >+ } >+ >+ protected static final int WIDTH = 800; >+ protected static final int HEIGHT = 600; >+ protected Shell shell; >+ >+ public GalleryViewerTester() { >+ // Initialize the containing Shell >+ Display display = new Display(); >+ shell = new Shell(display); >+ shell.setSize(WIDTH, HEIGHT); >+ shell.setBackground(display.getSystemColor(SWT.COLOR_WHITE)); >+ GridLayoutFactory.fillDefaults().applyTo(shell); >+ >+ GalleryTreeViewer viewer = new GalleryTreeViewer(shell); >+ GridDataFactory.fillDefaults().grab(true, true).applyTo(viewer.getGallery()); >+ viewer.setContentProvider(new GalleryTestContentProvider()); >+ viewer.setLabelProvider(new GalleryTestLabelProvider()); >+ viewer.setComparator(new ViewerComparator()); >+ viewer.addFilter(new OddNumbersFilter()); >+ viewer.setInput(new Object()); >+ >+ // Show the Shell >+ shell.open(); >+ shell.layout(); >+ >+ // Run the event loop >+ while (!shell.isDisposed()) { >+ if (!display.readAndDispatch()) >+ display.sleep(); >+ } >+ display.dispose(); >+ } >+ >+ /** >+ * @param args >+ */ >+ public static void main(String[] args) { >+ new GalleryViewerTester(); >+ } >+ >+} >Index: src/org/eclipse/nebula/jface/galleryviewer/GalleryViewerRow.java >=================================================================== >RCS file: src/org/eclipse/nebula/jface/galleryviewer/GalleryViewerRow.java >diff -N src/org/eclipse/nebula/jface/galleryviewer/GalleryViewerRow.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/nebula/jface/galleryviewer/GalleryViewerRow.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,257 @@ >+package org.eclipse.nebula.jface.galleryviewer; >+ >+ >+import java.util.LinkedList; >+ >+import org.eclipse.jface.viewers.TreePath; >+import org.eclipse.jface.viewers.ViewerRow; >+import org.eclipse.nebula.widgets.gallery.GalleryItem; >+import org.eclipse.swt.graphics.Color; >+import org.eclipse.swt.graphics.Font; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.swt.graphics.Rectangle; >+import org.eclipse.swt.widgets.Control; >+import org.eclipse.swt.widgets.Widget; >+ >+/** >+ * ViewerRow adapter for the Nebula Gallery widget. >+ * >+ * @author pcentgraf >+ * @since Dec 5, 2007 >+ */ >+public class GalleryViewerRow extends ViewerRow { >+ >+ protected GalleryItem item; >+ >+ /** >+ * Constructs a ViewerRow adapter for a GalleryItem. >+ * >+ * @param item the GalleryItem to adapt >+ */ >+ public GalleryViewerRow(GalleryItem item) { >+ this.item = item; >+ } >+ >+ public void setItem(GalleryItem item) { >+ this.item = item; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ViewerRow#clone() >+ */ >+ @Override >+ public Object clone() { >+ return new GalleryViewerRow(item); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ViewerRow#getBackground(int) >+ */ >+ @Override >+ public Color getBackground(int columnIndex) { >+ // XXX: should this use getBackgroundColor() instead? >+ return item.getParent().getBackground(); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ViewerRow#getBounds() >+ */ >+ @Override >+ public Rectangle getBounds() { >+ return item.getBounds(); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ViewerRow#getBounds(int) >+ */ >+ @Override >+ public Rectangle getBounds(int columnIndex) { >+ return item.getBounds(); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ViewerRow#getColumnCount() >+ */ >+ @Override >+ public int getColumnCount() { >+ return 0; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ViewerRow#getControl() >+ */ >+ @Override >+ public Control getControl() { >+ return item.getParent(); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ViewerRow#getElement() >+ */ >+ @Override >+ public Object getElement() { >+ return item.getData(); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ViewerRow#getFont(int) >+ */ >+ @Override >+ public Font getFont(int columnIndex) { >+ return item.getParent().getFont(); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ViewerRow#getForeground(int) >+ */ >+ @Override >+ public Color getForeground(int columnIndex) { >+ return item.getParent().getForeground(); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ViewerRow#getImage(int) >+ */ >+ @Override >+ public Image getImage(int columnIndex) { >+ return item.getImage(); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ViewerRow#getItem() >+ */ >+ @Override >+ public Widget getItem() { >+ return item; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ViewerRow#getNeighbor(int, boolean) >+ */ >+ @Override >+ public ViewerRow getNeighbor(int direction, boolean sameLevel) { >+ if( direction == ViewerRow.ABOVE ) { >+ // TODO: handle grouping >+ return getRowAbove(); >+ } else if( direction == ViewerRow.BELOW ) { >+ // TODO: handle grouping >+ return getRowBelow(); >+ } else { >+ throw new IllegalArgumentException("Illegal value of direction argument."); //$NON-NLS-1$ >+ } >+ } >+ >+ protected ViewerRow getRowAbove() { >+ if (item.getParentItem() == null) { >+ int index = item.getParent().indexOf(item) - 1; >+ >+ if( index >= 0 ) { >+ return new GalleryViewerRow(item.getParent().getItem(index)); >+ } >+ } >+ else { >+ GalleryItem parentItem = item.getParentItem(); >+ int index = parentItem.indexOf(item) -1; >+ >+ if (index >= 0) { >+ return new GalleryViewerRow(parentItem.getItem(index)); >+ } >+ } >+ >+ return null; >+ } >+ >+ protected ViewerRow getRowBelow() { >+ if (item.getParentItem() == null) { >+ int index = item.getParent().indexOf(item) + 1; >+ >+ if( index < item.getParent().getItemCount() ) { >+ GalleryItem tmp = item.getParent().getItem(index); >+ if( tmp != null ) { >+ return new GalleryViewerRow(tmp); >+ } >+ } >+ } >+ else { >+ GalleryItem parentItem = item.getParentItem(); >+ int index = parentItem.indexOf(item) +1; >+ >+ if (index < parentItem.getItemCount()) { >+ GalleryItem tmp = parentItem.getItem(index); >+ if( tmp != null ) { >+ return new GalleryViewerRow(tmp); >+ } >+ } >+ } >+ >+ return null; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ViewerRow#getText(int) >+ */ >+ @Override >+ public String getText(int columnIndex) { >+ return item.getText(); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ViewerRow#getTreePath() >+ */ >+ @Override >+ public TreePath getTreePath() { >+ LinkedList<Object> path = new LinkedList<Object>(); >+ path.add(item.getData()); >+ >+ GalleryItem curItem = item; >+ while (curItem.getParentItem() != null) { >+ path.addFirst(curItem.getParentItem().getData()); >+ curItem = curItem.getParentItem(); >+ } >+ return new TreePath(path.toArray()); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ViewerRow#setBackground(int, org.eclipse.swt.graphics.Color) >+ */ >+ @Override >+ public void setBackground(int columnIndex, Color color) { >+ // TODO: support item-by-item visual changes >+// item.setBackground(color); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ViewerRow#setFont(int, org.eclipse.swt.graphics.Font) >+ */ >+ @Override >+ public void setFont(int columnIndex, Font font) { >+ // TODO: support item-by-item visual changes >+// item.setFont(font); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ViewerRow#setForeground(int, org.eclipse.swt.graphics.Color) >+ */ >+ @Override >+ public void setForeground(int columnIndex, Color color) { >+ // TODO: support item-by-item visual changes >+// item.setForeground(color); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ViewerRow#setImage(int, org.eclipse.swt.graphics.Image) >+ */ >+ @Override >+ public void setImage(int columnIndex, Image image) { >+ item.setImage(image); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ViewerRow#setText(int, java.lang.String) >+ */ >+ @Override >+ public void setText(int columnIndex, String text) { >+ item.setText(text); >+ } >+ >+} >Index: src/org/eclipse/nebula/jface/galleryviewer/FlatTreeContentProvider.java >=================================================================== >RCS file: src/org/eclipse/nebula/jface/galleryviewer/FlatTreeContentProvider.java >diff -N src/org/eclipse/nebula/jface/galleryviewer/FlatTreeContentProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/nebula/jface/galleryviewer/FlatTreeContentProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,94 @@ >+package org.eclipse.nebula.jface.galleryviewer; >+ >+ >+import org.eclipse.jface.viewers.IStructuredContentProvider; >+import org.eclipse.jface.viewers.ITreeContentProvider; >+import org.eclipse.jface.viewers.Viewer; >+ >+/** >+ * Adaptor that converts an {@link IStructuredContentProvider} into an >+ * {@link ITreeContentProvider} that places the nested contents inside >+ * a single root node. >+ * >+ * @author pcentgraf >+ * @since Dec 6, 2007 >+ */ >+public class FlatTreeContentProvider implements ITreeContentProvider { >+ >+ protected final Object rootNode; >+ protected final IStructuredContentProvider provider; >+ protected final Object[] roots; >+ >+ /** >+ * Adapts an {@link IStructuredContentProvider} into an {@link ITreeContentProvider} >+ * that places the nested contents inside a single root node. >+ * >+ * @param provider the {@link IStructuredContentProvider} to adapt >+ */ >+ public FlatTreeContentProvider(IStructuredContentProvider provider) { >+ this(provider, ""); >+ } >+ >+ /** >+ * Adapts an {@link IStructuredContentProvider} into an {@link ITreeContentProvider} >+ * that places the nested contents inside the given root node. >+ * >+ * @param provider the {@link IStructuredContentProvider} to adapt >+ * @param the single root node for the tree >+ */ >+ public FlatTreeContentProvider(IStructuredContentProvider provider, Object rootNode) { >+ this.provider = provider; >+ this.rootNode = rootNode; >+ >+ roots = new Object[] {rootNode}; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object) >+ */ >+ public Object getParent(Object element) { >+ if (element == rootNode) { >+ return null; >+ } >+ else { >+ return rootNode; >+ } >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object) >+ */ >+ public boolean hasChildren(Object element) { >+ return element == rootNode; >+ } >+ >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) >+ */ >+ public Object[] getElements(Object inputElement) { >+ return roots; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object) >+ */ >+ public Object[] getChildren(Object parentElement) { >+ return provider.getElements(parentElement); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.jface.viewers.IContentProvider#dispose() >+ */ >+ public void dispose() { >+ provider.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) { >+ provider.inputChanged(viewer, oldInput, newInput); >+ } >+ >+}
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 Raw
Flags:
nicolas.richeton
:
iplog+
Actions:
View
Attachments on
bug 212071
: 84678 |
84766
|
87569
|
87570