# HG changeset patch # User Frank Benoit # Date 1218199221 -7200 # Node ID 161f7698cfb8dd1d7164c0a4bd9431f1cc47b2f4 # Parent 7248e4c09c4f0a9ec88fcbc978580ce3c2a8b9d0 Moved jface snippets to viewers subpackage, there are more with conflicting numbers for other packages diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/Snippet001TableViewer.d --- a/jface/snippets/Snippet001TableViewer.d Thu Aug 07 23:04:04 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,110 +0,0 @@ -/******************************************************************************* - * 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 - * Port to the D programming language: - * wbaxter at gmail dot com - *******************************************************************************/ - -module jface.snippets.Snippet001TableViewer; - -import dwtx.jface.viewers.IStructuredContentProvider; -import dwtx.jface.viewers.LabelProvider; -import dwtx.jface.viewers.TableViewer; -import dwtx.jface.viewers.Viewer; -import dwt.layout.FillLayout; -import dwt.widgets.Display; -import dwt.widgets.Shell; -import dwt.DWT; - -import dwt.dwthelper.utils; - -import tango.util.Convert; -import dwtx.dwtxhelper.Collection; - -/** - * A simple TableViewer to demonstrate usage - * - * @author Tom Schindl - * - */ -public class Snippet001TableViewer { - private class MyContentProvider : IStructuredContentProvider { - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) - */ - public Object[] getElements(Object inputElement) { - return (cast(ArrayList)inputElement).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) { - - } - - } - - public class MyModel { - public int counter; - - public this(int counter) { - this.counter = counter; - } - - public String toString() { - return "Item " ~ to!(char[])(this.counter); - } - } - - public this(Shell shell) { - final TableViewer v = new TableViewer(shell); - v.setLabelProvider(new LabelProvider()); - v.setContentProvider(new MyContentProvider()); - ArrayList model = createModel(); - v.setInput(model); - v.getTable().setLinesVisible(true); - } - - private ArrayList createModel() { - ArrayList elements = new ArrayList(10); - - for( int i = 0; i < 10; i++ ) { - elements.add( new MyModel(i)); - } - - return elements; - } - -} - -void main() -{ - Display display = new Display (); - Shell shell = new Shell(display); - shell.setLayout(new FillLayout()); - new Snippet001TableViewer(shell); - shell.open (); - - while (!shell.isDisposed ()) { - if (!display.readAndDispatch ()) display.sleep (); - } - - display.dispose (); - -} - diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/Snippet002TreeViewer.d --- a/jface/snippets/Snippet002TreeViewer.d Thu Aug 07 23:04:04 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,146 +0,0 @@ -/******************************************************************************* - * 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 - * Port to the D programming language: - * wbaxter at gmail dot com - *******************************************************************************/ - -module jface.snippets.Snippet002TreeViewer; - -import dwt.DWT; -import dwtx.jface.viewers.ITreeContentProvider; -import dwtx.jface.viewers.LabelProvider; -import dwtx.jface.viewers.TreeViewer; -import dwtx.jface.viewers.Viewer; -import dwt.layout.FillLayout; -import dwt.widgets.Display; -import dwt.widgets.Shell; - -import dwt.dwthelper.utils; - -import tango.util.Convert; - -/** - * A simple TreeViewer to demonstrate usage - * - * @author Tom Schindl - * - */ -class Snippet002TreeViewer { - private class MyContentProvider : ITreeContentProvider { - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) - */ - public Object[] getElements(Object inputElement) { - return (cast(MyModel)inputElement).child/*.dup*/; - } - - /* (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 is null) { - return null; - } - - return (cast(MyModel)element).parent; - } - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object) - */ - public bool hasChildren(Object element) { - return (cast(MyModel)element).child.length > 0; - } - - } - - public class MyModel { - public MyModel parent; - public MyModel[] child; - public int counter; - - public this(int counter, MyModel parent) { - this.parent = parent; - this.counter = counter; - } - - public String toString() { - String rv = "Item "; - if( parent !is null ) { - rv = parent.toString() ~ "."; - } - - rv ~= to!(char[])(counter); - - return rv; - } - } - - public this(Shell shell) { - TreeViewer v = new TreeViewer(shell); - v.setLabelProvider(new LabelProvider()); - 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 ~= tmp; - for( int j = 1; j < i; j++ ) { - tmp.child ~= new MyModel(j,tmp); - } - } - - return root; - } - -} - - -void main() { - Display display = new Display (); - Shell shell = new Shell(display); - shell.setLayout(new FillLayout()); - new Snippet002TreeViewer(shell); - shell.open (); - - while (!shell.isDisposed ()) { - if (!display.readAndDispatch ()) display.sleep (); - } - - display.dispose (); -} diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/Snippet004HideSelection.d --- a/jface/snippets/Snippet004HideSelection.d Thu Aug 07 23:04:04 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,127 +0,0 @@ -/******************************************************************************* - * 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 - * Port to the D programming language: - * wbaxter at gmail dot com - *******************************************************************************/ - -module jface.snippets.Snippet004HideSelection; - -import dwtx.jface.viewers.IStructuredContentProvider; -import dwtx.jface.viewers.LabelProvider; -import dwtx.jface.viewers.StructuredSelection; -import dwtx.jface.viewers.TableViewer; -import dwtx.jface.viewers.Viewer; -import dwt.DWT; -import dwt.events.MouseAdapter; -import dwt.events.MouseEvent; -import dwt.graphics.Point; -import dwt.layout.FillLayout; -import dwt.widgets.Display; -import dwt.widgets.Shell; - -import dwt.dwthelper.utils; -import dwtx.dwtxhelper.Collection; - -import tango.util.Convert; - -/** - * Snippet that hides the selection when nothing is selected. - * - * @author Tom Schindl - * - */ -public class Snippet004HideSelection { - private class MyContentProvider : IStructuredContentProvider { - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) - */ - public Object[] getElements(Object inputElement) { - return (cast(ArrayList)inputElement).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) { - - } - } - - public class MyModel { - public int counter; - - public this(int counter) { - this.counter = counter; - } - - public String toString() { - return "Item " ~ to!(char[])(this.counter); - } - } - - public this(Shell shell) { - final TableViewer v = new TableViewer(shell,DWT.BORDER|DWT.FULL_SELECTION); - v.setLabelProvider(new LabelProvider()); - v.setContentProvider(new MyContentProvider()); - ArrayList model = createModel(); - v.setInput(model); - v.getTable().setLinesVisible(true); - v.getTable().addMouseListener(new class(v) MouseAdapter { - private TableViewer v; - this(TableViewer v_) { - this.v = v_; - } - - /* (non-Javadoc) - * @see org.eclipse.swt.events.MouseAdapter#mouseDown(org.eclipse.swt.events.MouseEvent) - */ - public void mouseDown(MouseEvent e) { - if( v.getTable().getItem(new Point(e.x,e.y)) is null ) { - v.setSelection(new StructuredSelection()); - } - } - - }); - } - - private ArrayList createModel() { - ArrayList elements = new ArrayList(10); - for( int i = 0; i < 10; i++ ) { - elements.add( new MyModel(i)); - } - - return elements; - } - -} - -static void main() { - Display display = new Display (); - Shell shell = new Shell(display); - shell.setLayout(new FillLayout()); - new Snippet004HideSelection(shell); - shell.open (); - - while (!shell.isDisposed ()) { - if (!display.readAndDispatch ()) display.sleep (); - } - - display.dispose (); - -} - diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/Snippet005TreeCustomMenu.d --- a/jface/snippets/Snippet005TreeCustomMenu.d Thu Aug 07 23:04:04 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,183 +0,0 @@ -/******************************************************************************* - * 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 - * Port to the D programming language: - * wbaxter at gmail dot com - *******************************************************************************/ - -module jface.snippets.Snippet005TreeCustomMenu; - -import dwtx.jface.action.Action; -import dwtx.jface.action.IMenuListener; -import dwtx.jface.action.IMenuManager; -import dwtx.jface.action.MenuManager; -import dwtx.jface.viewers.IStructuredSelection; -import dwtx.jface.viewers.ITreeContentProvider; -import dwtx.jface.viewers.LabelProvider; -import dwtx.jface.viewers.TreeViewer; -import dwtx.jface.viewers.Viewer; -import dwt.layout.FillLayout; -import dwt.widgets.Display; -import dwt.widgets.Shell; -import dwt.DWT; - -import dwt.dwthelper.utils; - -import tango.util.Convert; -import tango.io.Stdout; - -/** - * Customized context menu based on TreeItem-Selection - * - * @author Tom Schindl - * - */ -public class Snippet005TreeCustomMenu { - private class MyContentProvider : ITreeContentProvider { - - public Object[] getElements(Object inputElement) { - return (cast(MyModel) inputElement).child; - } - - /* (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 is null) { - return null; - } - - return (cast(MyModel) element).parent; - } - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object) - */ - public bool hasChildren(Object element) { - return (cast(MyModel) element).child.length > 0; - } - - } - - public class MyModel { - public MyModel parent; - - public MyModel[] child; - - public int counter; - - public this(int counter, MyModel parent) { - this.parent = parent; - this.counter = counter; - } - - public String toString() { - String rv = "Item "; - if (parent !is null) { - rv = parent.toString() ~ "."; - } - - rv ~= to!(char[])(counter); - - return rv; - } - } - - public this(Shell shell) { - final TreeViewer v = new TreeViewer(shell); - v.setLabelProvider(new LabelProvider()); - v.setContentProvider(new MyContentProvider()); - v.setInput(createModel()); - - final Action a = new class Action {}; - final MenuManager mgr = new MenuManager(); - mgr.setRemoveAllWhenShown(true); - - class MyMenuListener : IMenuListener { - TreeViewer v; - Action a; - MenuManager mgr; - - this(TreeViewer v_, Action a_, MenuManager mgr_) { - this.v = v_; this.a = a_; this.mgr = mgr_; - } - - /* (non-Javadoc) - * @see org.eclipse.jface.action.IMenuListener#menuAboutToShow(org.eclipse.jface.action.IMenuManager) - */ - public void menuAboutToShow(IMenuManager manager) { - IStructuredSelection selection = cast(IStructuredSelection) v - .getSelection(); - if (!selection.isEmpty()) { - a.setText("Action for " - ~ (cast(MyModel) selection.getFirstElement()) - .toString()); - mgr.add(a); - } - } - } - - mgr.addMenuListener(new MyMenuListener(v,a,mgr)); - v.getControl().setMenu(mgr.createContextMenu(v.getControl())); - } - - 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 ~= tmp; - for (int j = 1; j < i; j++) { - tmp.child ~= new MyModel(j, tmp); - } - } - - return root; - } - -} - -void main() { - Display display = new Display(); - Shell shell = new Shell(display); - shell.setLayout(new FillLayout()); - new Snippet005TreeCustomMenu(shell); - shell.open(); - - while (!shell.isDisposed()) { - if (!display.readAndDispatch()) - display.sleep(); - } - - display.dispose(); -} diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/Snippet006TableMultiLineCells.d --- a/jface/snippets/Snippet006TableMultiLineCells.d Thu Aug 07 23:04:04 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,255 +0,0 @@ -/******************************************************************************* -* Copyright (c) 2005, 2007 IBM Corporation and others. -* All rights reserved. This program and the accompanying materials -* are made available under the terms of the Eclipse Public License v1.0 -* which accompanies this distribution, and is available at -* http://www.eclipse.org/legal/epl-v10.html -* -* Contributors: -* IBM Corporation - initial API and implementation -* Port to the D programming language: -* yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ ) -*******************************************************************************/ -module jface.snippets.Snippet006TableMultiLineCells; - - -// http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/Snippet006TableMultiLineCells.java?view=markup - -import dwtx.jface.resource.JFaceResources; -import dwtx.jface.viewers.ColumnPixelData; -import dwtx.jface.viewers.IStructuredContentProvider; -import dwtx.jface.viewers.OwnerDrawLabelProvider; -import dwtx.jface.viewers.StructuredSelection; -import dwtx.jface.viewers.TableLayout; -import dwtx.jface.viewers.Viewer; -import dwtx.jface.viewers.TableViewer; -import dwt.DWT; -import dwt.graphics.Font; -import dwt.graphics.Point; -import dwt.layout.GridData; -import dwt.layout.GridLayout; -import dwt.widgets.Composite; -import dwt.widgets.Display; -import dwt.widgets.Event; -import dwt.widgets.Shell; -import dwt.widgets.TableColumn; - -import dwt.dwthelper.utils; -version(JIVE){ - import jive.stacktrace; -} - -void main(String[] args) { - (new Snippet006TableMultiLineCells()).main(args); -} - -public class Snippet006TableMultiLineCells { - - public static void main(String[] args) { - - Display display = new Display(); - Shell shell = new Shell(display, DWT.CLOSE|DWT.RESIZE); - shell.setSize(400, 400); - shell.setLayout(new GridLayout()); - - Snippet006TableMultiLineCells example = new Snippet006TableMultiLineCells(); - example.createPartControl(shell); - - shell.open(); - - while (!shell.isDisposed()) { - if (!display.readAndDispatch()) - display.sleep(); - } - display.dispose(); - } - - class LineEntry { - - String line; - int columnWidth; - - /** - * Create a new instance of the receiver with name text constrained to a - * column of width. - * - * @param text - * @param width - */ - this(String text, int width) { - line = text; - columnWidth = width; - } - - /** - * Get the height of the event. - * - * @param index - * @return int - */ - public int getHeight(Event event) { - event.gc.setLineWidth(columnWidth); - return event.gc.textExtent(line).y; - } - - /** - * Get the width of the event. - * - * @param index - * @return - */ - public int getWidth(Event event) { - - return columnWidth; - } - - /** - * Get the font we are using. - * - * @return Font - */ - protected Font getFont() { - return JFaceResources.getFont(JFaceResources.HEADER_FONT); - } - - /** - * @param event - */ - public void draw(Event event) { - event.gc.drawText(line, event.x, event.y); - - } - } - - private TableViewer viewer; - - private LineEntry[] entries; - - public this() { - String[] lines = [ - "This day is called the feast of Crispian:", - "He that outlives this day, \n and comes safe home,", - "Will stand a tip-toe when the day is named,", - "And rouse him at the name of Crispian.", - "He that shall live this day,\n and see old age,", - "Will yearly on the vigil feast his neighbours,", - "And say 'To-morrow is Saint Crispian:'", - "Then will he strip his sleeve and show his scars.", - "And say 'These wounds I had on Crispin's day.'", - "Old men forget:\n yet all shall be forgot,", - "But he'll remember with advantages", - "What feats he did that day:\n then shall our names.", - "Familiar in his mouth as household words", - "Harry the king, Bedford and Exeter,", - "Warwick and Talbot,\n Salisbury and Gloucester,", - "Be in their flowing cups freshly remember'd.", - "This story shall the good man teach his son;", - "And Crispin Crispian shall ne'er go by,", - "From this day to the ending of the world,", - "But we in it shall be remember'd;", - "We few,\n we happy few,\n we band of brothers;", - "For he to-day that sheds his blood with me", - "Shall be my brother;\n be he ne'er so vile,", - "This day shall gentle his condition:", - "And gentlemen in England now a-bed", - "Shall think themselves accursed they were not here,", - "And hold their manhoods cheap whiles any speaks", - "That fought with us upon Saint Crispin's day." ]; - - entries = new LineEntry[lines.length]; - for (int i = 0; i < lines.length; i++) { - entries[i] = new LineEntry(lines[i], 35); - } - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(dwt.widgets.Composite) - */ - public void createPartControl(Composite parent) { - viewer = new TableViewer(parent, DWT.FULL_SELECTION); - - viewer.setContentProvider(new class() IStructuredContentProvider { - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.IContentProvider#dispose() - */ - public void dispose() { - } - - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) - */ - public Object[] getElements(Object inputElement) { - return entries; - } - - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.IContentProvider#inputChanged(dwtx.jface.viewers.Viewer, - * java.lang.Object, java.lang.Object) - */ - public void inputChanged(dwtx.jface.viewers.Viewer.Viewer viewer, Object oldInput, Object newInput) { - } - }); - createColumns(); - - viewer.setLabelProvider(new class OwnerDrawLabelProvider { - /* (non-Javadoc) - * @see dwtx.jface.viewers.OwnerDrawLabelProvider#measure(dwt.widgets.Event, java.lang.Object) - */ - protected void measure(Event event, Object element) { - LineEntry line = cast(LineEntry) element; - Point size = event.gc.textExtent(line.line); - event.width = viewer.getTable().getColumn(event.index).getWidth(); - int lines = (event.width > 0 ? (size.x / event.width + 1) : 1); - event.height = size.y * lines; - } - - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.OwnerDrawLabelProvider#paint(dwt.widgets.Event, - * java.lang.Object) - */ - protected void paint(Event event, Object element) { - - LineEntry entry = cast(LineEntry) element; - event.gc.drawText(entry.line, event.x, event.y, true); - } - }); - viewer.setInput(this); - - GridData data = new GridData(GridData.GRAB_HORIZONTAL - | GridData.GRAB_VERTICAL | GridData.FILL_BOTH); - - viewer.getControl().setLayoutData(data); - OwnerDrawLabelProvider.setUpOwnerDraw(viewer); - - viewer.setSelection(new StructuredSelection(entries[1])); - } - - /** - * Create the columns to be used in the tree. - */ - private void createColumns() { - TableLayout layout = new TableLayout(); - viewer.getTable().setLayout(layout); - viewer.getTable().setHeaderVisible(true); - viewer.getTable().setLinesVisible(true); - - TableColumn tc = new TableColumn(viewer.getTable(), DWT.NONE, 0); - layout.addColumnData(new ColumnPixelData(350)); - tc.setText("Lines"); - - } - - public void setFocus() { - } -} - diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/Snippet007FullSelection.d --- a/jface/snippets/Snippet007FullSelection.d Thu Aug 07 23:04:04 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,163 +0,0 @@ -/******************************************************************************* - * 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 - *******************************************************************************/ - -module jface.snippets.Snippet007FullSelection; - -import dwtx.jface.viewers.CellEditor; -import dwtx.jface.viewers.ICellModifier; -import dwtx.jface.viewers.IStructuredContentProvider; -import dwtx.jface.viewers.LabelProvider; -import dwtx.jface.viewers.TableViewer; -import dwtx.jface.viewers.TextCellEditor; -import dwtx.jface.viewers.Viewer; -import dwt.DWT; -import dwt.graphics.Color; -import dwt.graphics.GC; -import dwt.graphics.Point; -import dwt.graphics.Rectangle; -import dwt.layout.FillLayout; -import dwt.widgets.Display; -import dwt.widgets.Event; -import dwt.widgets.Listener; -import dwt.widgets.Shell; -import dwt.widgets.TableColumn; -import dwt.widgets.TableItem; - -import dwt.dwthelper.utils; - -import tango.util.Convert; -import dwtx.dwtxhelper.Collection; - -/** - * TableViewer: Hide full selection - * - * @author Tom Schindl - * - */ -public class Snippet007FullSelection { - - private class MyContentProvider : IStructuredContentProvider { - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) - */ - public Object[] getElements(Object inputElement) { - return (cast(ArrayList)inputElement).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) { - - } - - } - - public class MyModel { - public int counter; - - public this(int counter) { - this.counter = counter; - } - - public String toString() { - return "Item " ~ to!(char[])(this.counter); - } - } - - public this(Shell shell) { - final TableViewer v = new TableViewer(shell,DWT.BORDER|DWT.FULL_SELECTION); - v.setLabelProvider(new LabelProvider()); - v.setContentProvider(new MyContentProvider()); - v.setCellModifier(new class(v) ICellModifier { - TableViewer v; - this(TableViewer v_) { this.v=v_; } - - public bool canModify(Object element, String property) { - return true; - } - - public Object getValue(Object element, String property) { - return new ArrayWrapperString( to!(char[])((cast(MyModel)element).counter) ); - } - - public void modify(Object element, String property, Object value) { - auto item = cast(TableItem)element; - auto valuestr = cast(ArrayWrapperString)value; - (cast(MyModel)item.getData()).counter = to!(int)(valuestr.array); - v.update(item.getData(), null); - } - - }); - v.setColumnProperties(["column1", "column2" ]); - v.setCellEditors([ new TextCellEditor(v.getTable()),new TextCellEditor(v.getTable()) ]); - - TableColumn column = new TableColumn(v.getTable(),DWT.NONE); - column.setWidth(100); - column.setText("Column 1"); - - column = new TableColumn(v.getTable(),DWT.NONE); - column.setWidth(100); - column.setText("Column 2"); - - ArrayList model = createModel(); - v.setInput(model); - v.getTable().setLinesVisible(true); - v.getTable().setHeaderVisible(true); - - v.getTable().addListener(DWT.EraseItem, new class Listener { - - /* (non-Javadoc) - * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event) - */ - public void handleEvent(Event event) { - event.detail &= ~DWT.SELECTED; - } - }); - - } - - private ArrayList createModel() { - auto elements = new ArrayList(10); - - for( int i = 0; i < 10; i++ ) { - elements.add( new MyModel(i)); - } - - return elements; - } - -} - - -void main() { - Display display = new Display (); - Shell shell = new Shell(display); - shell.setLayout(new FillLayout()); - new Snippet007FullSelection(shell); - shell.open (); - - while (!shell.isDisposed ()) { - if (!display.readAndDispatch ()) display.sleep (); - } - - display.dispose (); - -} - diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/Snippet010OwnerDraw.d --- a/jface/snippets/Snippet010OwnerDraw.d Thu Aug 07 23:04:04 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,434 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2008 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * oliver.schaefer@mbtech-services.com - Fix for Bug 225051 [Snippets] Snippet010OwnerDraw - Wrong german flag - * Port to the D programming language: - * yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ ) - *******************************************************************************/ -module jface.snippets.Snippet010OwnerDraw.d; - -import dwtx.jface.resource.JFaceResources; -import dwtx.jface.viewers.Viewer; -import dwtx.jface.viewers.ColumnPixelData; -import dwtx.jface.viewers.IStructuredContentProvider; -import dwtx.jface.viewers.OwnerDrawLabelProvider; -import dwtx.jface.viewers.StructuredSelection; -import dwtx.jface.viewers.TableLayout; -import dwtx.jface.viewers.TableViewer; -import dwt.DWT; -import dwt.graphics.Rectangle; -import dwt.graphics.TextLayout; -import dwt.graphics.TextStyle; -import dwt.layout.GridData; -import dwt.layout.GridLayout; -import dwt.widgets.Composite; -import dwt.widgets.Display; -import dwt.widgets.Event; -import dwt.widgets.Shell; -import dwt.widgets.TableColumn; - -import dwt.dwthelper.utils; - -void main(String[] args) { - Snippet010OwnerDraw.main(args); -} - -public class Snippet010OwnerDraw { - - public static void main(String[] args) { - - Display display = new Display(); - Shell shell = new Shell(display, DWT.CLOSE); - shell.setSize(400, 400); - shell.setLayout(new GridLayout()); - - Snippet010OwnerDraw example = new Snippet010OwnerDraw(); - example.createPartControl(shell); - - shell.open(); - - while (!shell.isDisposed ()) { - if (!display.readAndDispatch ()) display.sleep (); - } - display.dispose(); - } - - private static int COLUMN_COUNT = 3; - - class CountryEntry { - - String name; - - String cupYear; - - private String baseName; - - /** - * Create a new instance of the receiver. - * - * @param countryName - * @param worldCupYear - */ - this(String countryName, String englishName, String worldCupYear) { - name = countryName; - cupYear = worldCupYear; - baseName = englishName; - } - - /** - * @param index - * @return - */ - public int getHeight(Event event) { - switch (event.index) { - case 0: - return event.gc.textExtent(name).y; - case 1: - return 50; - case 2: - return event.gc.textExtent(cupYear).y; - default: - return 10; - } - } - - /** - * @param index - * @return - */ - public int getWidth(Event event) { - - switch (event.index) { - case 0: - return event.gc.textExtent(getDisplayString().toString()).x + 4; - - case 1: - return 200; - - case 2: - return event.gc.textExtent(cupYear).x + 5; - - default: - return 10; - } - } - - /** - * Draw the flag in bounds. - * - * @param event - */ - protected void drawFlag(Event event) { - event.gc.setBackground(viewer.getControl().getDisplay() - .getSystemColor(DWT.COLOR_BLUE)); - - Rectangle bounds = event.getBounds(); - bounds.width += 100; - event.gc.fillRectangle(bounds); - } - - /** - * Draw the cup year - * - * @param event - */ - private void drawCupYear(Event event) { - event.gc.drawText(cupYear, event.x, event.y); - - } - - /** - * Draw the name of the receiver. - * - * @param event - */ - protected void drawName(Event event) { - - StringBuffer buffer = getDisplayString(); - - Display display = viewer.getControl().getDisplay(); - TextLayout layout = new TextLayout(display); - layout.setText(buffer.toString()); - - TextStyle plain = new TextStyle(JFaceResources - .getFont(JFaceResources.DEFAULT_FONT), display - .getSystemColor(DWT.COLOR_LIST_FOREGROUND), display - .getSystemColor(DWT.COLOR_LIST_BACKGROUND)); - - TextStyle italic = new TextStyle(JFaceResources.getFontRegistry() - .getItalic(JFaceResources.DEFAULT_FONT), display - .getSystemColor(DWT.COLOR_BLUE), display - .getSystemColor(DWT.COLOR_LIST_BACKGROUND)); - - layout.setStyle(plain, 0, name.length - 1); - layout.setStyle(italic, name.length, buffer.length - 1); - - layout.draw(event.gc, event.x, event.y); - - } - - /** - * @return - */ - private StringBuffer getDisplayString() { - StringBuffer buffer = new StringBuffer(); - buffer.append(name); - buffer.append(" ("); - buffer.append(baseName); - buffer.append(")"); - return buffer; - } - - /** - * @param event - */ - public void draw(Event event) { - - switch (event.index) { - case 0: - drawName(event); - break; - case 1: - drawFlag(event); - break; - case 2: - drawCupYear(event); - break; - - default: - break; - } - - } - } - - private class GermanyEntry : CountryEntry { - - this() { - super("Deutschland", "Germany", "1954 1974 1990"); - } - - /* - * (non-Javadoc) - * - * @see dwtx.jface.tests.viewers.OwnerDrawExample.CountryEntry#drawFlag(dwt.widgets.Event) - */ - protected void drawFlag(Event event) { - - Rectangle bounds = event.getBounds(); - bounds.width += 100; - int stripeHeight = bounds.height / 3; - Rectangle stripe = new Rectangle(bounds.x, bounds.y, bounds.width, - stripeHeight); - - event.gc.setBackground(viewer.getControl().getDisplay() - .getSystemColor(DWT.COLOR_BLACK)); - event.gc.fillRectangle(stripe); - - stripe.y += stripeHeight; - - event.gc.setBackground(viewer.getControl().getDisplay() - .getSystemColor(DWT.COLOR_RED)); - event.gc.fillRectangle(stripe); - - stripe.y += stripeHeight; - - event.gc.setBackground(viewer.getControl().getDisplay() - .getSystemColor(DWT.COLOR_YELLOW)); - event.gc.fillRectangle(stripe); - - } - - } - - private class AustriaEntry : CountryEntry { - - this() { - super("\u00D6sterreich", "Austria", "TBD"); - } - - /* - * (non-Javadoc) - * - * @see dwtx.jface.tests.viewers.OwnerDrawExample.CountryEntry#drawFlag(dwt.widgets.Event) - */ - protected void drawFlag(Event event) { - - Rectangle bounds = event.getBounds(); - bounds.width += 100; - int stripeHeight = bounds.height / 3; - Rectangle stripe = new Rectangle(bounds.x, bounds.y, bounds.width, - stripeHeight); - - event.gc.setBackground(viewer.getControl().getDisplay() - .getSystemColor(DWT.COLOR_RED)); - event.gc.fillRectangle(stripe); - - stripe.y += stripeHeight; - - event.gc.setBackground(viewer.getControl().getDisplay() - .getSystemColor(DWT.COLOR_WHITE)); - event.gc.fillRectangle(stripe); - - stripe.y += stripeHeight; - - event.gc.setBackground(viewer.getControl().getDisplay() - .getSystemColor(DWT.COLOR_RED)); - event.gc.fillRectangle(stripe); - - } - } - - private class EnglandEntry : CountryEntry { - this() { - super("Blighty", "England", "1966"); - } - - /* - * (non-Javadoc) - * - * @see dwtx.jface.tests.viewers.OwnerDrawExample.CountryEntry#drawFlag(dwt.widgets.Event) - */ - protected void drawFlag(Event event) { - - Rectangle bounds = event.getBounds(); - bounds.width += 100; - - event.gc.setBackground(viewer.getControl().getDisplay() - .getSystemColor(DWT.COLOR_RED)); - event.gc.fillRectangle(new Rectangle(bounds.width / 2 + bounds.x - - 5, bounds.y, 10, bounds.height)); - event.gc.fillRectangle(new Rectangle(bounds.x, bounds.height / 2 - + bounds.y - 5, bounds.width, 10)); - - } - } - - private TableViewer viewer; - - private CountryEntry[] entries; - - public this() { - entries = new CountryEntry[3]; - entries[0] = new AustriaEntry(); - entries[1] = new GermanyEntry(); - entries[2] = new EnglandEntry(); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(dwt.widgets.Composite) - */ - public void createPartControl(Composite parent) { - viewer = new TableViewer(parent, DWT.FULL_SELECTION); - - viewer.setContentProvider(new class() IStructuredContentProvider { - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.IContentProvider#dispose() - */ - public void dispose() { - }; - - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) - */ - public Object[] getElements(Object inputElement) { - return (cast(Snippet010OwnerDraw) inputElement).entries; - }; - - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.IContentProvider#inputChanged(dwtx.jface.viewers.Viewer, - * java.lang.Object, java.lang.Object) - */ - public void inputChanged(Viewer viewer, - Object oldInput, Object newInput) { - } - - }); - createColumns(); - - viewer.setLabelProvider(new class() OwnerDrawLabelProvider { - - - protected void measure(Event event, Object element) { - CountryEntry country = cast(CountryEntry) element; - - event.setBounds(new Rectangle(event.x, event.y, country.getWidth(event), - country.getHeight(event))); - - } - - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.OwnerDrawLabelProvider#paint(dwt.widgets.Event, - * java.lang.Object) - */ - protected void paint(Event event, Object element) { - CountryEntry entry = cast(CountryEntry) element; - entry.draw(event); - - } - }); - - OwnerDrawLabelProvider.setUpOwnerDraw(viewer); - viewer.setInput(this); - GridData data = new GridData(GridData.GRAB_HORIZONTAL - | GridData.GRAB_VERTICAL | GridData.FILL_BOTH); - - viewer.getControl().setLayoutData(data); - - viewer.setSelection(new StructuredSelection(entries[1])); - } - - /** - * Create the columns to be used in the tree. - */ - private void createColumns() { - TableLayout layout = new TableLayout(); - viewer.getTable().setLayout(layout); - viewer.getTable().setHeaderVisible(true); - viewer.getTable().setLinesVisible(true); - - for (int i = 0; i < COLUMN_COUNT; i++) { - TableColumn tc = new TableColumn(viewer.getTable(), DWT.NONE, i); - layout.addColumnData(new ColumnPixelData(100)); - tc.setText(getTitleFor(i)); - } - ; - } - - /** - * @param i - * @return - */ - private String getTitleFor(int i) { - switch (i) { - case 0: - return "Name"; - case 1: - return "Flag"; - case 2: - return "World Cup Year"; - } - return "Unknown"; - } - - public void setFocus() { - - } - -} diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/Snippet014TreeViewerNoMandatoryLabelProvider.d --- a/jface/snippets/Snippet014TreeViewerNoMandatoryLabelProvider.d Thu Aug 07 23:04:04 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,228 +0,0 @@ -/******************************************************************************* - * 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 - * Port to the D programming language: - * yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ ) - *******************************************************************************/ - -module jface.snippets.Snippet014TreeViewerNoMandatoryLabelProvider; - - -import dwtx.jface.resource.FontRegistry; -import dwtx.jface.viewers.ITableColorProvider; -import dwtx.jface.viewers.ITableFontProvider; -import dwtx.jface.viewers.ITableLabelProvider; -import dwtx.jface.viewers.ITreeContentProvider; -import dwtx.jface.viewers.LabelProvider; -import dwtx.jface.viewers.TreeViewer; -import dwtx.jface.viewers.Viewer; -import dwt.DWT; -import dwt.graphics.Color; -import dwt.graphics.Font; -import dwt.graphics.Image; -import dwt.layout.FillLayout; -import dwt.widgets.Display; -import dwt.widgets.Shell; -import dwt.widgets.TreeColumn; - -import dwt.dwthelper.utils; - -import tango.util.Convert; -import tango.util.container.LinkedList; - -version(JIVE) import jive.stacktrace; - - -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(); -} - -/** - * A simple TreeViewer to demonstrate usage - * - * @author Tom Schindl - * - */ -public class Snippet014TreeViewerNoMandatoryLabelProvider { - alias LinkedList!(MyModel) ArrayList; - - private class MyContentProvider : ITreeContentProvider { - - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) - */ - public Object[] getElements(Object inputElement) { - return (cast(MyModel) inputElement).child.toArray(); - } - - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.IContentProvider#dispose() - */ - public void dispose() { - - } - - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.IContentProvider#inputChanged(dwtx.jface.viewers.Viewer, - * java.lang.Object, java.lang.Object) - */ - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - - } - - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object) - */ - public Object[] getChildren(Object parentElement) { - return getElements(parentElement); - } - - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.ITreeContentProvider#getParent(java.lang.Object) - */ - public Object getParent(Object element) { - if (element is null) { - return null; - } - - return (cast(MyModel) element).parent; - } - - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object) - */ - public bool hasChildren(Object element) { - return (cast(MyModel) element).child.size() > 0; - } - - } - - public class MyModel { - public MyModel parent; - - public ArrayList child; - - public int counter; - - public this(int counter, MyModel parent) { - this.parent = parent; - this.counter = counter; - child = new ArrayList(); - } - - public String toString() { - String rv = "Item "; - if (parent !is null) { - rv = parent.toString() ~ "."; - } - - rv ~= to!(String)(counter); - - return rv; - } - } - - public class MyLabelProvider : LabelProvider, - ITableLabelProvider, ITableFontProvider, ITableColorProvider { - FontRegistry registry; - this() - { - registry = new FontRegistry(); - } - - public Image getColumnImage(Object element, int columnIndex) { - return null; - } - - public String getColumnText(Object element, int columnIndex) { - return "Column " ~ to!(String)(columnIndex) ~ " => " ~ element.toString(); - } - - public Font getFont(Object element, int columnIndex) { - if ((cast(MyModel) element).counter % 2 == 0) { - return registry.getBold(Display.getCurrent().getSystemFont() - .getFontData()[0].getName()); - } - return null; - } - - public Color getBackground(Object element, int columnIndex) { - if ((cast(MyModel) element).counter % 2 == 0) { - return Display.getCurrent().getSystemColor(DWT.COLOR_RED); - } - return null; - } - - public Color getForeground(Object element, int columnIndex) { - if ((cast(MyModel) element).counter % 2 == 1) { - return Display.getCurrent().getSystemColor(DWT.COLOR_RED); - } - return null; - } - - } - - public this(Shell shell) { - final TreeViewer v = new TreeViewer(shell); - - TreeColumn column = new TreeColumn(v.getTree(),DWT.NONE); - column.setWidth(200); - column.setText("Column 1"); - - column = new TreeColumn(v.getTree(),DWT.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; - } - - -} diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/Snippet016TableLayout.d --- a/jface/snippets/Snippet016TableLayout.d Thu Aug 07 23:04:04 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,156 +0,0 @@ -/******************************************************************************* - * 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 - * Port to the D programming language: - * yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ ) - *******************************************************************************/ - -module jface.snippets.Snippet016TableLayout; - - -import dwtx.jface.layout.TableColumnLayout; -import dwtx.jface.viewers.ColumnWeightData; -import dwtx.jface.viewers.IStructuredContentProvider; -import dwtx.jface.viewers.ITableLabelProvider; -import dwtx.jface.viewers.LabelProvider; -import dwtx.jface.viewers.TableViewer; -import dwtx.jface.viewers.Viewer; -import dwt.DWT; -import dwt.graphics.Image; -import dwt.layout.FillLayout; -import dwt.widgets.Composite; -import dwt.widgets.Display; -import dwt.widgets.Shell; -import dwt.widgets.Table; -import dwt.widgets.TableColumn; - -import dwt.dwthelper.utils; - -import tango.util.Convert; -/** - * @param args - */ -void main(String[] args) { - Display display = new Display(); - Shell shell = new Shell(display); - //shell.setSize(400, 150); - shell.setLayout(new FillLayout()); - - new Snippet016TableLayout(shell); - shell.open(); - - while (!shell.isDisposed()) { - if (!display.readAndDispatch()) - display.sleep(); - } - - display.dispose(); - -} - -/** - * A simple TableViewer to demonstrate usage - * - * @author Tom Schindl - * @since 3.3M3 - */ -public class Snippet016TableLayout { - private class MyContentProvider : IStructuredContentProvider { - - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) - */ - public Object[] getElements(Object inputElement) { - return (cast(ArrayWrapperObject) inputElement).array; - } - - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.IContentProvider#dispose() - */ - public void dispose() { - - } - - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.IContentProvider#inputChanged(dwtx.jface.viewers.Viewer, - * java.lang.Object, java.lang.Object) - */ - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - - } - - } - - private class MyLabelProvider : LabelProvider, ITableLabelProvider { - - public Image getColumnImage(Object element, int columnIndex) { - return null; - } - - public String getColumnText(Object element, int columnIndex) { - return to!(char[])(columnIndex) ~ " - " ~ element.toString(); - } - - } - - public class MyModel { - public int counter; - - public this(int counter) { - this.counter = counter; - } - - public String toString() { - return "Item " ~ to!(char[])(this.counter); - } - } - - public this(Composite comp) { - final TableViewer v = new TableViewer(new Table(comp, DWT.BORDER)); - v.setLabelProvider(new MyLabelProvider()); - v.setContentProvider(new MyContentProvider()); - v.getTable().setHeaderVisible(true); - - TableColumnLayout ad = new TableColumnLayout(); - comp.setLayout(ad); - - TableColumn column = new TableColumn(v.getTable(), DWT.NONE); - column.setText("Column 1"); - column.setMoveable(true); - ad.setColumnData(column, new ColumnWeightData(90, 290)); - - column = new TableColumn(v.getTable(), DWT.NONE); - column.setText("Column 2"); - column.setMoveable(true); - ad.setColumnData(column, new ColumnWeightData(10, 200)); - - MyModel[] model = createModel(); - v.setInput(new ArrayWrapperObject(model)); - v.getTable().setLinesVisible(true); - } - - private MyModel[] createModel() { - MyModel[] elements = new MyModel[10]; - - for (int i = 0; i < 10; i++) { - elements[i] = new MyModel(i); - } - - return elements; - } - - - -} diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/Snippet026TreeViewerTabEditing.d --- a/jface/snippets/Snippet026TreeViewerTabEditing.d Thu Aug 07 23:04:04 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,295 +0,0 @@ -/******************************************************************************* - * 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 - * Port to the D programming language: - * yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ ) - *******************************************************************************/ - -module jface.snippets.Snippet026TreeViewerTabEditing; - - -import dwtx.jface.viewers.CellEditor; -import dwtx.jface.viewers.ColumnLabelProvider; -import dwtx.jface.viewers.ColumnViewerEditor; -import dwtx.jface.viewers.ColumnViewer; -import dwtx.jface.viewers.ColumnViewerEditorActivationStrategy; -import dwtx.jface.viewers.EditingSupport; -import dwtx.jface.viewers.ColumnViewerEditorActivationEvent; -import dwtx.jface.viewers.FocusCellOwnerDrawHighlighter; -import dwtx.jface.viewers.ITreeContentProvider; -import dwtx.jface.viewers.TextCellEditor; -import dwtx.jface.viewers.TreePath; -import dwtx.jface.viewers.TreeViewerFocusCellManager; -import dwtx.jface.viewers.TreeViewerEditor; -import dwtx.jface.viewers.TreeViewer; -import dwtx.jface.viewers.TreeViewerColumn; -import dwtx.jface.viewers.Viewer; -import dwt.DWT; -import dwt.events.SelectionEvent; -import dwt.events.SelectionListener; -import dwt.layout.FillLayout; -import dwt.widgets.Button; -import dwt.widgets.Display; -import dwt.widgets.Shell; - -import dwt.dwthelper.utils; -import dwtx.dwtxhelper.Collection; - -import tango.util.Convert; - -version(JIVE) import jive.stacktrace; - - -void main(String[] args) { - Display display = new Display(); - Shell shell = new Shell(display); - shell.setLayout(new FillLayout()); - new Snippet026TreeViewerTabEditing(shell); - shell.open(); - - while (!shell.isDisposed()) { - if (!display.readAndDispatch()) - display.sleep(); - } - - display.dispose(); -} - -/** - * A simple TreeViewer to demonstrate usage - * - * @author Tom Schindl - * - */ -public class Snippet026TreeViewerTabEditing { - public this(Shell shell) { - Button b = new Button(shell,DWT.PUSH); - b.setText("Remove column"); - final TreeViewer v = new TreeViewer(shell, DWT.BORDER - | DWT.FULL_SELECTION); - v.getTree().setLinesVisible(true); - v.getTree().setHeaderVisible(true); - b.addSelectionListener(new class(v) SelectionListener { - TreeViewer v; - this(TreeViewer v_) - { - this.v = v_; - } - public void widgetDefaultSelected(SelectionEvent e) { - - } - - public void widgetSelected(SelectionEvent e) { - v.getTree().getColumn(1).dispose(); - } - - }); - - TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager(v,new FocusCellOwnerDrawHighlighter(v)); - ColumnViewerEditorActivationStrategy actSupport = new class(v) ColumnViewerEditorActivationStrategy { - this(ColumnViewer v_) - { - super(v_); - } - protected bool isEditorActivationEvent( - ColumnViewerEditorActivationEvent event) { - return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL - || event.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION - || (event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED && event.keyCode == DWT.CR) - || event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC; - } - }; - - TreeViewerEditor.create(v, focusCellManager, actSupport, ColumnViewerEditor.TABBING_HORIZONTAL - | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR - | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION); - - final TextCellEditor textCellEditor = new TextCellEditor(v.getTree()); - - TreeViewerColumn column = new TreeViewerColumn(v, DWT.NONE); - column.getColumn().setWidth(200); - column.getColumn().setMoveable(true); - column.getColumn().setText("Column 1"); - column.setLabelProvider(new class() ColumnLabelProvider { - - public String getText(Object element) { - return "Column 1 => " ~ element.toString(); - } - - }); - column.setEditingSupport(new class(v) EditingSupport { - this(ColumnViewer v_) - { - super(v_); - } - protected bool canEdit(Object element) { - return false; - } - - protected CellEditor getCellEditor(Object element) { - return textCellEditor; - } - - protected Object getValue(Object element) { - return stringcast( (to!(String)((cast(MyModel) element).counter)) ); - } - - protected void setValue(Object element, Object value) { - (cast(MyModel) element).counter = Integer.parseInt(value.toString()); - v.update(element, null); - } - }); - - column = new TreeViewerColumn(v, DWT.NONE); - column.getColumn().setWidth(200); - column.getColumn().setMoveable(true); - column.getColumn().setText("Column 2"); - column.setLabelProvider(new class() ColumnLabelProvider { - - public String getText(Object element) { - return "Column 2 => " ~ element.toString(); - } - - }); - column.setEditingSupport(new class(v) EditingSupport { - this(ColumnViewer v_) - { - super(v_); - } - protected bool canEdit(Object element) { - return true; - } - - protected CellEditor getCellEditor(Object element) { - return textCellEditor; - } - - protected Object getValue(Object element) { - return stringcast( to!(String)((cast(MyModel) element).counter) ); - } - - protected void setValue(Object element, Object value) { - (cast(MyModel) element).counter = Integer.parseInt(value.toString()); - v.update(element, null); - } - }); - - column = new TreeViewerColumn(v, DWT.NONE); - column.getColumn().setWidth(200); - column.getColumn().setMoveable(true); - column.getColumn().setText("Column 3"); - column.setLabelProvider(new class() ColumnLabelProvider { - public String getText(Object element) { - return "Column 3 => " ~ element.toString(); - } - - }); - column.setEditingSupport(new class(v) EditingSupport { - this(ColumnViewer v_) - { - super(v_); - } - protected bool canEdit(Object element) { - return true; - } - - protected CellEditor getCellEditor(Object element) { - return textCellEditor; - } - - protected Object getValue(Object element) { - return stringcast( to!(String)((cast(MyModel) element).counter) ); - } - - protected void setValue(Object element, Object value) { - (cast(MyModel) element).counter = Integer.parseInt(value.toString()); - v.update(element, null); - } - }); - - v.setContentProvider(new MyContentProvider()); - - v.setInput(createModel()); - } - - private MyModel createModel() { - - MyModel root = new MyModel(0, null); - root.counter = 0; - - MyModel tmp; - MyModel subItem; - for (int i = 1; i < 10; i++) { - tmp = new MyModel(i, root); - root.child.add(tmp); - for (int j = 1; j < i; j++) { - subItem = new MyModel(j, tmp); - subItem.child.add(new MyModel(j * 100, subItem)); - tmp.child.add(subItem); - } - } - - return root; - } - - private class MyContentProvider : ITreeContentProvider { - - public Object[] getElements(Object inputElement) { - return (cast(MyModel) inputElement).child.toArray(); - } - - public void dispose() { - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - - public Object[] getChildren(Object parentElement) { - return getElements(parentElement); - } - - public Object getParent(Object element) { - if (element is null) { - return null; - } - return (cast(MyModel) element).parent; - } - - public bool hasChildren(Object element) { - return (cast(MyModel) element).child.size() > 0; - } - - } - - public class MyModel { - public MyModel parent; - - public ArrayList child; - - public int counter; - - public this(int counter, MyModel parent) { - this.parent = parent; - this.counter = counter; - child = new ArrayList(); - } - - public String toString() { - String rv = "Item "; - if (parent !is null) { - rv = parent.toString() ~ "."; - } - - rv ~= to!(String)(counter); - - return rv; - } - } - -} diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/Snippet031TableViewerCustomTooltipsMultiSelection.d --- a/jface/snippets/Snippet031TableViewerCustomTooltipsMultiSelection.d Thu Aug 07 23:04:04 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,310 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 Adam Neal 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: - * Adam Neal - initial API and implementation - * Port to the D programming language: - * yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ ) - *******************************************************************************/ - -module jface.snippets.Snippet031TableViewerCustomTooltipsMultiSelection; - -// http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/Snippet031TableViewerCustomTooltipsMultiSelection.java?view=markup - -import dwtx.dwtxhelper.Collection; -import tango.util.Convert; - -import dwtx.jface.viewers.ArrayContentProvider; -import dwtx.jface.viewers.ILabelProviderListener; -import dwtx.jface.viewers.ITableLabelProvider; -import dwtx.jface.viewers.TableViewer; -import dwt.DWT; -import dwt.graphics.Image; -import dwt.graphics.Point; -import dwt.graphics.Rectangle; -import dwt.layout.FillLayout; -import dwt.widgets.Display; -import dwt.widgets.Event; -import dwt.widgets.Label; -import dwt.widgets.Listener; -import dwt.widgets.Shell; -import dwt.widgets.Table; -import dwt.widgets.TableColumn; -import dwt.widgets.TableItem; -import dwt.dwthelper.System; -import dwt.widgets.Listener; - -alias char[] String; -void main(String[] args) -{ - Snippet031TableViewerCustomTooltipsMultiSelection.main(args); -} - -/** - * A simple TableViewer to demonstrate how custom tooltips could be created easily while preserving - * the multiple selection. - * - * This is a modified example taken from Tom Schindl's Snippet023TreeViewerCustomTooltips.java - * - * This code is for users pre 3.3 others could use newly added tooltip support in {@link CellLabelProvider} - * @author Adam Neal - * - */ -public class Snippet031TableViewerCustomTooltipsMultiSelection { - public class MyLableProvider : ITableLabelProvider { - - public Image getColumnImage(Object element, int columnIndex) { - return null; - } - - public String getColumnText(Object element, int columnIndex) { - //if (element instanceof MyModel) { - switch (columnIndex) { - case 0: return (cast(MyModel)element).col1; - case 1: return (cast(MyModel)element).col2; - } - //} - - return ""; - } - - public void addListener(ILabelProviderListener listener) { - /* Ignore */ - } - - public void dispose() { - /* Ignore */ - } - - public bool isLabelProperty(Object element, String property) { - return false; - } - - public void removeListener(ILabelProviderListener listener) { - /* Ignore */ - } - - } - - - - public this(Shell shell) { - - - final Table table = new Table(shell, DWT.H_SCROLL | DWT.V_SCROLL | DWT.MULTI | DWT.FULL_SELECTION); - table.setHeaderVisible(true); - table.setLinesVisible(true); - - final TableViewer v = new TableViewer(table); - TableColumn tableColumn1 = new TableColumn(table, DWT.NONE); - TableColumn tableColumn2 = new TableColumn(table, DWT.NONE); - - String column1 = "Column 1", column2 = "Column 2"; - /* Setup the table columns */ - tableColumn1.setText(column1); - tableColumn2.setText(column2); - tableColumn1.pack(); - tableColumn2.pack(); - - v.setColumnProperties([ column1, column2 ]); - v.setLabelProvider(new MyLableProvider()); - v.setContentProvider(new ArrayContentProvider!(MyModel)); - v.setInput(createModel()); - - tooltipLabelListener = new TooltipLabelListener(); - - /** - * The listener that gets added to the table. This listener is responsible for creating the tooltips - * when hovering over a cell item. This listener will listen for the following events: - *
  • DWT.KeyDown - to remove the tooltip
  • - *
  • DWT.Dispose - to remove the tooltip
  • - *
  • DWT.MouseMove - to remove the tooltip
  • - *
  • DWT.MouseHover - to set the tooltip
  • - */ - - Listener tableListener = dgListener(&handleTableListener, table); - - table.addListener (DWT.Dispose, tableListener); - table.addListener (DWT.KeyDown, tableListener); - table.addListener (DWT.MouseMove, tableListener); - table.addListener (DWT.MouseHover, tableListener); - } - - void handleTableListener(Event event, Table table) - { - Shell tooltip = null; - Label label = null; - - /* - * (non-Javadoc) - * @see dwt.widgets.Listener#handleEvent(dwt.widgets.Event) - */ - switch (event.type) { - case DWT.KeyDown: - case DWT.Dispose: - case DWT.MouseMove: { - if (tooltip is null) break; - tooltip.dispose (); - tooltip = null; - label = null; - break; - } - case DWT.MouseHover: { - Point coords = new Point(event.x, event.y); - TableItem item = table.getItem(coords); - if (item !is null) { - int columnCount = table.getColumnCount(); - for (int columnIndex = 0; columnIndex < columnCount; columnIndex++) { - if (item.getBounds(columnIndex).contains(coords)) { - /* Dispose of the old tooltip (if one exists */ - if (tooltip !is null && !tooltip.isDisposed ()) tooltip.dispose (); - - /* Create a new Tooltip */ - tooltip = new Shell (table.getShell(), DWT.ON_TOP | DWT.NO_FOCUS | DWT.TOOL); - tooltip.setBackground (table.getDisplay().getSystemColor (DWT.COLOR_INFO_BACKGROUND)); - FillLayout layout = new FillLayout (); - layout.marginWidth = 2; - tooltip.setLayout (layout); - label = new Label (tooltip, DWT.NONE); - label.setForeground (table.getDisplay().getSystemColor (DWT.COLOR_INFO_FOREGROUND)); - label.setBackground (table.getDisplay().getSystemColor (DWT.COLOR_INFO_BACKGROUND)); - - /* Store the TableItem with the label so we can pass the mouse event later */ - label.setData ("_TableItem_", item); - - /* Set the tooltip text */ - label.setText("Tooltip: " ~ to!(char[])(item.getData()) ~ " : " ~ to!(char[])(columnIndex)); - - /* Setup Listeners to remove the tooltip and transfer the received mouse events */ - label.addListener (DWT.MouseExit, tooltipLabelListener); - label.addListener (DWT.MouseDown, tooltipLabelListener); - - /* Set the size and position of the tooltip */ - Point size = tooltip.computeSize (DWT.DEFAULT, DWT.DEFAULT); - Rectangle rect = item.getBounds (columnIndex); - Point pt = table.toDisplay (rect.x, rect.y); - tooltip.setBounds (pt.x, pt.y, size.x, size.y); - - /* Show it */ - tooltip.setVisible (true); - break; - } - } - } - } - } - } - - /** - * This listener is added to the tooltip so that it can either dispose itself if the mouse - * exits the tooltip or so it can pass the selection event through to the table. - */ - final TooltipLabelListener tooltipLabelListener; - final class TooltipLabelListener : Listener { - private bool isCTRLDown(Event e) { - return (e.stateMask & DWT.CTRL) != 0; - } - /* - * (non-Javadoc) - * @see dwt.widgets.Listener#handleEvent(dwt.widgets.Event) - */ - public void handleEvent (Event event) { - Label label = cast(Label)event.widget; - Shell shell = label.getShell (); - switch (event.type) { - case DWT.MouseDown: /* Handle a user Click */ - /* Extract our Data */ - Event e = new Event (); - e.item = cast(TableItem) label.getData ("_TableItem_"); - Table table = (cast(TableItem) e.item).getParent(); - - /* Construct the new Selection[] to show */ - TableItem [] newSelection = null; - if (isCTRLDown(event)) { - /* We have 2 scenario's. - * 1) We are selecting an already selected element - so remove it from the selected indices - * 2) We are selecting a non-selected element - so add it to the selected indices - */ - TableItem[] sel = table.getSelection(); - for (int i = 0; i < sel.length; ++i) { - //if (e.item.equals(sel[i])) { - if (e.item is sel[i]) { - // We are de-selecting this element - newSelection = new TableItem[sel.length - 1]; - System.arraycopy(sel, 0, newSelection, 0, i); - System.arraycopy(sel, i+1, newSelection, i, sel.length - i - 1); - break; - } - } - - /* - * If we haven't created the newSelection[] yet, than we are adding the newly selected element - * into the list of selected indicies - */ - if (newSelection is null) { - newSelection = new TableItem[sel.length + 1]; - System.arraycopy(sel, 0, newSelection, 0, sel.length); - newSelection[sel.length] = cast(TableItem) e.item; - } - - } else { - /* CTRL is not down, so we simply select the single element */ - newSelection = [ cast(TableItem) e.item ]; - } - /* Set the new selection of the table and notify the listeners */ - table.setSelection (newSelection); - table.notifyListeners (DWT.Selection, e); - - /* Remove the Tooltip */ - shell.dispose (); - table.setFocus(); - break; - case DWT.MouseExit: - shell.dispose (); - break; - } - } - } - - - private ArrayList createModel() { - ArrayList list = new ArrayList; - list.add(new MyModel("A", "B")); - list.add(new MyModel("C", "D")); - list.add(new MyModel("E", "F")); - return list; - } - - public static void main(String[] args) { - Display display = new Display(); - Shell shell = new Shell(display); - shell.setLayout(new FillLayout()); - new Snippet031TableViewerCustomTooltipsMultiSelection(shell); - shell.open(); - - while (!shell.isDisposed()) { - if (!display.readAndDispatch()) - display.sleep(); - } - - display.dispose(); - } -} - -public class MyModel { - public String col1, col2; - - public this(String c1, String c2) { - col1 = c1; - col2 = c2; - } - - public String toString() { - return col1 ~ col2; - } -} - diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/Snippet040TableViewerSorting.d --- a/jface/snippets/Snippet040TableViewerSorting.d Thu Aug 07 23:04:04 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,310 +0,0 @@ -/******************************************************************************* - * 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 - * Port to the D programming language: - * yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ ) - *******************************************************************************/ -module jface.snippets.Snippet040TableViewerSorting; - -// http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/Snippet040TableViewerSorting.java?view=markup - -import dwtx.jface.viewers.CellEditor; -import dwtx.jface.viewers.ColumnLabelProvider; -import dwtx.jface.viewers.ColumnViewer; -import dwtx.jface.viewers.EditingSupport; -import dwtx.jface.viewers.IStructuredContentProvider; -import dwtx.jface.viewers.TableViewer; -import dwtx.jface.viewers.TableViewerColumn; -import dwtx.jface.viewers.TextCellEditor; -import dwtx.jface.viewers.Viewer; -import dwtx.jface.viewers.ViewerComparator; -import dwt.DWT; -import dwt.events.SelectionAdapter; -import dwt.events.SelectionEvent; -import dwt.layout.FillLayout; -import dwt.widgets.Display; -import dwt.widgets.Shell; -import dwt.dwthelper.utils; - -/** - * Example usage of ViewerComparator in tables to allow sorting - * - * @author Tom Schindl - * - */ - -void main(String[] args) { - Snippet040TableViewerSorting.main(args); -} - - private class MyContentProvider : IStructuredContentProvider { - - public Object[] getElements(Object inputElement) { - return (cast(ArrayWrapperT!(Person)) inputElement).array; - } - - public void dispose() { - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - - } - - public class Person { - public String givenname; - public String surname; - public String email; - - public this(String givenname, String surname, String email) { - this.givenname = givenname; - this.surname = surname; - this.email = email; - } - - } - - protected abstract class AbstractEditingSupport : EditingSupport { - private TextCellEditor editor; - - public this(TableViewer viewer) { - super(viewer); - this.editor = new TextCellEditor(viewer.getTable()); - } - - protected bool canEdit(Object element) { - return true; - } - - protected CellEditor getCellEditor(Object element) { - return editor; - } - - protected void setValue(Object element, Object value) { - doSetValue(element, value); - getViewer().update(element, null); - } - - protected abstract void doSetValue(Object element, Object value); - } - - private abstract class ColumnViewerSorter : ViewerComparator { - public static final int ASC = 1; - - public static final int NONE = 0; - - public static final int DESC = -1; - - private int direction = 0; - - private TableViewerColumn column; - - private ColumnViewer viewer; - - public this(ColumnViewer viewer_, TableViewerColumn column_) { - this.column = column_; - this.viewer = viewer_; - this.column.getColumn().addSelectionListener(new class() SelectionAdapter { - public void widgetSelected(SelectionEvent e) { - this.outer.widgetSelected(e); - } - }); - } - - private void widgetSelected(SelectionEvent e){ - if( viewer.getComparator() !is null ) { - if( viewer.getComparator() is this ) { - int tdirection = direction; - - if( tdirection is ASC ) { - setSorter(this, DESC); - } else if( tdirection is DESC ) { - setSorter(this, NONE); - } - } else { - setSorter(this, ASC); - } - } else { - setSorter(this, ASC); - } - } - public void setSorter(ColumnViewerSorter sorter, int direction) { - if( direction is NONE ) { - column.getColumn().getParent().setSortColumn(null); - column.getColumn().getParent().setSortDirection(DWT.NONE); - viewer.setComparator(null); - } else { - column.getColumn().getParent().setSortColumn(column.getColumn()); - sorter.direction = direction; - - if( direction is ASC ) { - column.getColumn().getParent().setSortDirection(DWT.DOWN); - } else { - column.getColumn().getParent().setSortDirection(DWT.UP); - } - - if( viewer.getComparator() is sorter ) { - viewer.refresh(); - } else { - viewer.setComparator(sorter); - } - - } - } - - public int compare(Viewer viewer, Object e1, Object e2) { - return direction * doCompare(viewer, e1, e2); - } - - protected abstract int doCompare(Viewer viewer, Object e1, Object e2); - } - -public class Snippet040TableViewerSorting { - - - public this(Shell shell) { - TableViewer v = new TableViewer(shell, DWT.BORDER | DWT.FULL_SELECTION); - v.setContentProvider(new MyContentProvider()); - - TableViewerColumn column = new TableViewerColumn(v, DWT.NONE); - column.getColumn().setWidth(200); - column.getColumn().setText("Givenname"); - column.getColumn().setMoveable(true); - column.setLabelProvider(new class() ColumnLabelProvider { - public String getText(Object element) { - return (cast(Person) element).givenname; - } - }); - - column.setEditingSupport(new class(v) AbstractEditingSupport { - public this(TableViewer t ){ - super(t); - } - protected Object getValue(Object element) { - return new ArrayWrapperString((cast(Person) element).givenname); - } - protected void doSetValue(Object element, Object value) { - (cast(Person) element).givenname = stringcast(value); - } - }); - - ColumnViewerSorter cSorter = new class(v,column) ColumnViewerSorter { - this(TableViewer t, TableViewerColumn c ){ - super(t,c); - } - protected int doCompare(Viewer viewer, Object e1, Object e2) { - Person p1 = cast(Person) e1; - Person p2 = cast(Person) e2; - return p1.givenname.compareToIgnoreCase(p2.givenname); - } - }; - - column = new TableViewerColumn(v, DWT.NONE); - column.getColumn().setWidth(200); - column.getColumn().setText("Surname"); - column.getColumn().setMoveable(true); - column.setLabelProvider(new class() ColumnLabelProvider { - public String getText(Object element) { - return (cast(Person) element).surname; - } - }); - - column.setEditingSupport(new class(v) AbstractEditingSupport { - this(TableViewer t ){ - super(t); - } - protected Object getValue(Object element) { - return stringcast((cast(Person) element).surname); - } - protected void doSetValue(Object element, Object value) { - (cast(Person) element).surname = stringcast(value); - } - }); - - new class(v,column) ColumnViewerSorter { - this(TableViewer t, TableViewerColumn c ){ - super(t,c); - } - protected int doCompare(Viewer viewer, Object e1, Object e2) { - Person p1 = cast(Person) e1; - Person p2 = cast(Person) e2; - return p1.surname.compareToIgnoreCase(p2.surname); - } - }; - - column = new TableViewerColumn(v, DWT.NONE); - column.getColumn().setWidth(200); - column.getColumn().setText("E-Mail"); - column.getColumn().setMoveable(true); - column.setLabelProvider(new class() ColumnLabelProvider { - public String getText(Object element) { - return (cast(Person) element).email; - } - }); - - column.setEditingSupport(new class(v) AbstractEditingSupport { - this(TableViewer t ){ - super(t); - } - protected Object getValue(Object element) { - return stringcast((cast(Person) element).email); - } - protected void doSetValue(Object element, Object value) { - (cast(Person) element).email = stringcast(value); - } - }); - new class(v,column) ColumnViewerSorter { - this(TableViewer t, TableViewerColumn c ){ - super(t,c); - } - protected int doCompare(Viewer viewer, Object e1, Object e2) { - Person p1 = cast(Person) e1; - Person p2 = cast(Person) e2; - return p1.email.compareToIgnoreCase(p2.email); - } - }; - - Person[] model = createModel(); - v.setInput( new ArrayWrapperT!(Person)(model)); - v.getTable().setLinesVisible(true); - v.getTable().setHeaderVisible(true); - cSorter.setSorter(cSorter, ColumnViewerSorter.ASC); - } - - private Person[] createModel() { - Person[] elements = new Person[4]; - elements[0] = new Person("Tom", "Schindl", - "tom.schindl@bestsolution.at"); - elements[1] = new Person("Boris", "Bokowski", - "Boris_Bokowski@ca.ibm.com"); - elements[2] = new Person("Tod", "Creasey", "Tod_Creasey@ca.ibm.com"); - elements[3] = new Person("Wayne", "Beaton", "wayne@eclipse.org"); - - return elements; - } - - /** - * @param args - */ - public static void main(String[] args) { - Display display = new Display(); - - Shell shell = new Shell(display); - shell.setLayout(new FillLayout()); - new Snippet040TableViewerSorting(shell); - shell.open(); - - while (!shell.isDisposed()) { - if (!display.readAndDispatch()) - display.sleep(); - } - display.dispose(); - } - -} diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/Snippet043NoColumnTreeViewerKeyboardEditing.d --- a/jface/snippets/Snippet043NoColumnTreeViewerKeyboardEditing.d Thu Aug 07 23:04:04 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,222 +0,0 @@ -/******************************************************************************* - * 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 - * Port to the D programming language: - * yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ ) - *******************************************************************************/ - -module dwtx.jface.snippets.Snippet043NoColumnTreeViewerKeyboardEditing; - -import dwtx.jface.viewers.CellEditor; -import dwtx.jface.viewers.ColumnViewerEditor; -import dwtx.jface.viewers.ColumnViewer; -import dwtx.jface.viewers.ColumnViewerEditorActivationStrategy; -import dwtx.jface.viewers.ColumnViewerEditorActivationEvent; -import dwtx.jface.viewers.FocusCellOwnerDrawHighlighter; -import dwtx.jface.viewers.ICellModifier; -import dwtx.jface.viewers.ITreeContentProvider; -import dwtx.jface.viewers.TextCellEditor; -import dwtx.jface.viewers.TreePath; -import dwtx.jface.viewers.TreeViewerFocusCellManager; -import dwtx.jface.viewers.TreeViewerEditor; -import dwtx.jface.viewers.TreeViewer; -import dwtx.jface.viewers.Viewer; -import dwt.DWT; -import dwt.events.SelectionEvent; -import dwt.events.SelectionListener; -import dwt.layout.FillLayout; -import dwt.widgets.Button; -import dwt.widgets.Display; -import dwt.widgets.Item; -import dwt.widgets.Shell; - -import dwt.dwthelper.utils; - -import tango.util.Convert; -import tango.util.container.LinkedList; - -version(JIVE) import jive.stacktrace; - - -void main(String[] args) { - Display display = new Display(); - Shell shell = new Shell(display); - shell.setLayout(new FillLayout()); - new Snippet043NoColumnTreeViewerKeyboardEditing(shell); - shell.open(); - - while (!shell.isDisposed()) { - if (!display.readAndDispatch()) - display.sleep(); - } - - display.dispose(); -} - -/** - * Demonstrates how to use keyboard-editing support in a TreeViewer with no column - * - * @author Tom Schindl - * - */ -public class Snippet043NoColumnTreeViewerKeyboardEditing { - alias LinkedList!(MyModel) ArrayList; - public this(Shell shell) { - Button b = new Button(shell, DWT.PUSH); - b.setText("BBB"); - final TreeViewer v = new TreeViewer(shell, DWT.BORDER - | DWT.FULL_SELECTION); - b.addSelectionListener(new class(v) SelectionListener { - TreeViewer v; - this(TreeViewer v_) - { - this.v = v_; - } - - public void widgetDefaultSelected(SelectionEvent e) { - - } - - public void widgetSelected(SelectionEvent e) { - MyModel root = cast(MyModel) v.getInput(); - TreePath path = new TreePath([ root, root.child.get(1), - (cast(MyModel) root.child.get(1)).child.get(0)] ); - v.editElement(path, 0); - } - - }); - - v.setCellEditors([ new TextCellEditor(v.getTree()) ]); - v.setColumnProperties(["col1"]); - v.setCellModifier(new class(v) ICellModifier { - TreeViewer v; - this(TreeViewer v_) - { - this.v = v_; - } - public bool canModify(Object element, String property) { - return true; - } - - public Object getValue(Object element, String property) { - return stringcast( to!(String)((cast(MyModel) element).counter) ~ "" ); - } - - public void modify(Object element, String property, Object value) { - element = (cast(Item) element).getData(); - (cast(MyModel) element).counter = Integer.parseInt(value.toString()); - v.update(element, null); - } - - }); - - TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager( - v, new FocusCellOwnerDrawHighlighter(v)); - ColumnViewerEditorActivationStrategy actSupport = new class(v) ColumnViewerEditorActivationStrategy { - this(ColumnViewer v) - { - super(v); - } - protected bool isEditorActivationEvent( - ColumnViewerEditorActivationEvent event) { - return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL - || event.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION - || (event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED && event.keyCode == DWT.CR) - || event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC; - } - }; - - TreeViewerEditor.create(v, focusCellManager, actSupport, - ColumnViewerEditor.TABBING_HORIZONTAL - | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR - | ColumnViewerEditor.TABBING_VERTICAL - | ColumnViewerEditor.KEYBOARD_ACTIVATION); - - v.setContentProvider(new MyContentProvider()); - - v.setInput(createModel()); - } - - private MyModel createModel() { - - MyModel root = new MyModel(0, null); - root.counter = 0; - - MyModel tmp; - MyModel subItem; - for (int i = 1; i < 10; i++) { - tmp = new MyModel(i, root); - root.child.add(tmp); - for (int j = 1; j < i; j++) { - subItem = new MyModel(j, tmp); - subItem.child.add(new MyModel(j * 100, subItem)); - tmp.child.add(subItem); - } - } - - return root; - } - - - - private class MyContentProvider : ITreeContentProvider { - - public Object[] getElements(Object inputElement) { - return (cast(MyModel) inputElement).child.toArray(); - } - - public void dispose() { - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - - public Object[] getChildren(Object parentElement) { - return getElements(parentElement); - } - - public Object getParent(Object element) { - if (element is null) { - return null; - } - return (cast(MyModel) element).parent; - } - - public bool hasChildren(Object element) { - return (cast(MyModel) element).child.size() > 0; - } - - } - - public class MyModel { - public MyModel parent; - - public ArrayList child; - - public int counter; - - public this(int counter_, MyModel parent_) { - this.parent = parent_; - this.counter = counter_; - child = new ArrayList(); - } - - public String toString() { - String rv = "Item "; - if (parent !is null) { - rv = parent.toString() ~ "."; - } - - rv ~= to!(String)(counter); - - return rv; - } - } - -} diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/Snippet047VirtualLazyTreeViewer.d --- a/jface/snippets/Snippet047VirtualLazyTreeViewer.d Thu Aug 07 23:04:04 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,186 +0,0 @@ -/******************************************************************************* - * 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 - * Port to the D programming language: - * yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ ) - *******************************************************************************/ - -module jface.snippets.Snippet047VirtualLazyTreeViewer; - -import dwtx.jface.viewers.ILazyTreeContentProvider; -import dwtx.jface.viewers.LabelProvider; -import dwtx.jface.viewers.TreeViewer; -import dwtx.jface.viewers.Viewer; -import dwt.DWT; -import dwt.layout.FillLayout; -import dwt.widgets.Display; -import dwt.widgets.Shell; - -import dwt.dwthelper.utils; - -import tango.util.Convert; -import tango.util.container.LinkedList; - -version(JIVE) import jive.stacktrace; - - -/** - * @param args - */ -void main(String[] args) { - Display display = new Display(); - Shell shell = new Shell(display); - shell.setLayout(new FillLayout()); - new Snippet047VirtualLazyTreeViewer(shell); - shell.open(); - - while (!shell.isDisposed()) { - if (!display.readAndDispatch()) - display.sleep(); - } - - display.dispose(); - -} - -/** - * A simple TreeViewer to demonstrate usage of an ILazyContentProvider. - * - */ -public class Snippet047VirtualLazyTreeViewer { - alias ArrayWrapperT!(IntermediateNode) ArrayWrapperIntermediateNode; - alias ArrayWrapperT!(LeafNode) ArrayWrapperLeafNode; - - private class MyContentProvider : ILazyTreeContentProvider { - private TreeViewer viewer; - private IntermediateNode[] elements; - - public this(TreeViewer viewer) { - this.viewer = viewer; - } - - public void dispose() { - - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - if(cast(ArrayWrapperIntermediateNode) newInput) - this.elements = (cast(ArrayWrapperIntermediateNode) newInput).array; - } - - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.ILazyTreeContentProvider#getParent(java.lang.Object) - */ - public Object getParent(Object element) { - if (cast(LeafNode)element) - return (cast(LeafNode) element).parent; - return new ArrayWrapperIntermediateNode(elements); - } - - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.ILazyTreeContentProvider#updateChildCount(java.lang.Object, - * int) - */ - public void updateChildCount(Object element, int currentChildCount) { - - int length = 0; - if (cast(IntermediateNode)element) { - IntermediateNode node = cast(IntermediateNode) element; - length = node.children.length; - } - /// TODO: fix me access violation here - if(element !is null && elements !is null && (cast(ArrayWrapperIntermediateNode)element) && (cast(ArrayWrapperIntermediateNode)element).array is elements) - length = elements.length; - viewer.setChildCount(element, length); - } - - /* - * (non-Javadoc) - * - * @see dwtx.jface.viewers.ILazyTreeContentProvider#updateElement(java.lang.Object, - * int) - */ - public void updateElement(Object parent, int index) { - - Object element; - if (cast(IntermediateNode)parent) - element = (cast(IntermediateNode) parent).children[index]; - - else - element = elements[index]; - viewer.replace(parent, index, element); - updateChildCount(element, -1); - - } - - } - - public class LeafNode { - public int counter; - public IntermediateNode parent; - - public this(int counter, IntermediateNode parent) { - this.counter = counter; - this.parent = parent; - } - - public String toString() { - return "Leaf " ~ to!(String)(this.counter); - } - } - - public class IntermediateNode { - public int counter; - public LeafNode[] children; - - public this(int counter) { - this.counter = counter; - children = new LeafNode[0]; - } - - public String toString() { - return "Node " ~ to!(String)(this.counter); - } - - public void generateChildren(int i) { - children = new LeafNode[i]; - for (int j = 0; j < i; j++) { - children[j] = new LeafNode(j, this); - } - - } - } - - public this(Shell shell) { - final TreeViewer v = new TreeViewer(shell, DWT.VIRTUAL | DWT.BORDER); - v.setLabelProvider(new LabelProvider()); - v.setContentProvider(new MyContentProvider(v)); - v.setUseHashlookup(true); - IntermediateNode[] model = createModel(); - v.setInput(new ArrayWrapperIntermediateNode(model)); - v.getTree().setItemCount(model.length); - - } - - private IntermediateNode[] createModel() { - IntermediateNode[] elements = new IntermediateNode[10]; - - for (int i = 0; i < 10; i++) { - elements[i] = new IntermediateNode(i); - elements[i].generateChildren(1000); - } - - return elements; - } - -} diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/viewers/Snippet001TableViewer.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jface/snippets/viewers/Snippet001TableViewer.d Fri Aug 08 14:40:21 2008 +0200 @@ -0,0 +1,110 @@ +/******************************************************************************* + * 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 + * Port to the D programming language: + * wbaxter at gmail dot com + *******************************************************************************/ + +module snippets.viewers.Snippet001TableViewer; + +import dwtx.jface.viewers.IStructuredContentProvider; +import dwtx.jface.viewers.LabelProvider; +import dwtx.jface.viewers.TableViewer; +import dwtx.jface.viewers.Viewer; +import dwt.layout.FillLayout; +import dwt.widgets.Display; +import dwt.widgets.Shell; +import dwt.DWT; + +import dwt.dwthelper.utils; + +import tango.util.Convert; +import dwtx.dwtxhelper.Collection; + +/** + * A simple TableViewer to demonstrate usage + * + * @author Tom Schindl + * + */ +public class Snippet001TableViewer { + private class MyContentProvider : IStructuredContentProvider { + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) + */ + public Object[] getElements(Object inputElement) { + return (cast(ArrayList)inputElement).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) { + + } + + } + + public class MyModel { + public int counter; + + public this(int counter) { + this.counter = counter; + } + + public String toString() { + return "Item " ~ to!(char[])(this.counter); + } + } + + public this(Shell shell) { + final TableViewer v = new TableViewer(shell); + v.setLabelProvider(new LabelProvider()); + v.setContentProvider(new MyContentProvider()); + ArrayList model = createModel(); + v.setInput(model); + v.getTable().setLinesVisible(true); + } + + private ArrayList createModel() { + ArrayList elements = new ArrayList(10); + + for( int i = 0; i < 10; i++ ) { + elements.add( new MyModel(i)); + } + + return elements; + } + +} + +void main() +{ + Display display = new Display (); + Shell shell = new Shell(display); + shell.setLayout(new FillLayout()); + new Snippet001TableViewer(shell); + shell.open (); + + while (!shell.isDisposed ()) { + if (!display.readAndDispatch ()) display.sleep (); + } + + display.dispose (); + +} + diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/viewers/Snippet002TreeViewer.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jface/snippets/viewers/Snippet002TreeViewer.d Fri Aug 08 14:40:21 2008 +0200 @@ -0,0 +1,146 @@ +/******************************************************************************* + * 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 + * Port to the D programming language: + * wbaxter at gmail dot com + *******************************************************************************/ + +module snippets.viewers.Snippet002TreeViewer; + +import dwt.DWT; +import dwtx.jface.viewers.ITreeContentProvider; +import dwtx.jface.viewers.LabelProvider; +import dwtx.jface.viewers.TreeViewer; +import dwtx.jface.viewers.Viewer; +import dwt.layout.FillLayout; +import dwt.widgets.Display; +import dwt.widgets.Shell; + +import dwt.dwthelper.utils; + +import tango.util.Convert; + +/** + * A simple TreeViewer to demonstrate usage + * + * @author Tom Schindl + * + */ +class Snippet002TreeViewer { + private class MyContentProvider : ITreeContentProvider { + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) + */ + public Object[] getElements(Object inputElement) { + return (cast(MyModel)inputElement).child/*.dup*/; + } + + /* (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 is null) { + return null; + } + + return (cast(MyModel)element).parent; + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object) + */ + public bool hasChildren(Object element) { + return (cast(MyModel)element).child.length > 0; + } + + } + + public class MyModel { + public MyModel parent; + public MyModel[] child; + public int counter; + + public this(int counter, MyModel parent) { + this.parent = parent; + this.counter = counter; + } + + public String toString() { + String rv = "Item "; + if( parent !is null ) { + rv = parent.toString() ~ "."; + } + + rv ~= to!(char[])(counter); + + return rv; + } + } + + public this(Shell shell) { + TreeViewer v = new TreeViewer(shell); + v.setLabelProvider(new LabelProvider()); + 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 ~= tmp; + for( int j = 1; j < i; j++ ) { + tmp.child ~= new MyModel(j,tmp); + } + } + + return root; + } + +} + + +void main() { + Display display = new Display (); + Shell shell = new Shell(display); + shell.setLayout(new FillLayout()); + new Snippet002TreeViewer(shell); + shell.open (); + + while (!shell.isDisposed ()) { + if (!display.readAndDispatch ()) display.sleep (); + } + + display.dispose (); +} diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/viewers/Snippet004HideSelection.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jface/snippets/viewers/Snippet004HideSelection.d Fri Aug 08 14:40:21 2008 +0200 @@ -0,0 +1,127 @@ +/******************************************************************************* + * 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 + * Port to the D programming language: + * wbaxter at gmail dot com + *******************************************************************************/ + +module snippets.viewers.Snippet004HideSelection; + +import dwtx.jface.viewers.IStructuredContentProvider; +import dwtx.jface.viewers.LabelProvider; +import dwtx.jface.viewers.StructuredSelection; +import dwtx.jface.viewers.TableViewer; +import dwtx.jface.viewers.Viewer; +import dwt.DWT; +import dwt.events.MouseAdapter; +import dwt.events.MouseEvent; +import dwt.graphics.Point; +import dwt.layout.FillLayout; +import dwt.widgets.Display; +import dwt.widgets.Shell; + +import dwt.dwthelper.utils; +import dwtx.dwtxhelper.Collection; + +import tango.util.Convert; + +/** + * Snippet that hides the selection when nothing is selected. + * + * @author Tom Schindl + * + */ +public class Snippet004HideSelection { + private class MyContentProvider : IStructuredContentProvider { + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) + */ + public Object[] getElements(Object inputElement) { + return (cast(ArrayList)inputElement).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) { + + } + } + + public class MyModel { + public int counter; + + public this(int counter) { + this.counter = counter; + } + + public String toString() { + return "Item " ~ to!(char[])(this.counter); + } + } + + public this(Shell shell) { + final TableViewer v = new TableViewer(shell,DWT.BORDER|DWT.FULL_SELECTION); + v.setLabelProvider(new LabelProvider()); + v.setContentProvider(new MyContentProvider()); + ArrayList model = createModel(); + v.setInput(model); + v.getTable().setLinesVisible(true); + v.getTable().addMouseListener(new class(v) MouseAdapter { + private TableViewer v; + this(TableViewer v_) { + this.v = v_; + } + + /* (non-Javadoc) + * @see org.eclipse.swt.events.MouseAdapter#mouseDown(org.eclipse.swt.events.MouseEvent) + */ + public void mouseDown(MouseEvent e) { + if( v.getTable().getItem(new Point(e.x,e.y)) is null ) { + v.setSelection(new StructuredSelection()); + } + } + + }); + } + + private ArrayList createModel() { + ArrayList elements = new ArrayList(10); + for( int i = 0; i < 10; i++ ) { + elements.add( new MyModel(i)); + } + + return elements; + } + +} + +static void main() { + Display display = new Display (); + Shell shell = new Shell(display); + shell.setLayout(new FillLayout()); + new Snippet004HideSelection(shell); + shell.open (); + + while (!shell.isDisposed ()) { + if (!display.readAndDispatch ()) display.sleep (); + } + + display.dispose (); + +} + diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/viewers/Snippet005TreeCustomMenu.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jface/snippets/viewers/Snippet005TreeCustomMenu.d Fri Aug 08 14:40:21 2008 +0200 @@ -0,0 +1,183 @@ +/******************************************************************************* + * 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 + * Port to the D programming language: + * wbaxter at gmail dot com + *******************************************************************************/ + +module snippets.viewers.Snippet005TreeCustomMenu; + +import dwtx.jface.action.Action; +import dwtx.jface.action.IMenuListener; +import dwtx.jface.action.IMenuManager; +import dwtx.jface.action.MenuManager; +import dwtx.jface.viewers.IStructuredSelection; +import dwtx.jface.viewers.ITreeContentProvider; +import dwtx.jface.viewers.LabelProvider; +import dwtx.jface.viewers.TreeViewer; +import dwtx.jface.viewers.Viewer; +import dwt.layout.FillLayout; +import dwt.widgets.Display; +import dwt.widgets.Shell; +import dwt.DWT; + +import dwt.dwthelper.utils; + +import tango.util.Convert; +import tango.io.Stdout; + +/** + * Customized context menu based on TreeItem-Selection + * + * @author Tom Schindl + * + */ +public class Snippet005TreeCustomMenu { + private class MyContentProvider : ITreeContentProvider { + + public Object[] getElements(Object inputElement) { + return (cast(MyModel) inputElement).child; + } + + /* (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 is null) { + return null; + } + + return (cast(MyModel) element).parent; + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object) + */ + public bool hasChildren(Object element) { + return (cast(MyModel) element).child.length > 0; + } + + } + + public class MyModel { + public MyModel parent; + + public MyModel[] child; + + public int counter; + + public this(int counter, MyModel parent) { + this.parent = parent; + this.counter = counter; + } + + public String toString() { + String rv = "Item "; + if (parent !is null) { + rv = parent.toString() ~ "."; + } + + rv ~= to!(char[])(counter); + + return rv; + } + } + + public this(Shell shell) { + final TreeViewer v = new TreeViewer(shell); + v.setLabelProvider(new LabelProvider()); + v.setContentProvider(new MyContentProvider()); + v.setInput(createModel()); + + final Action a = new class Action {}; + final MenuManager mgr = new MenuManager(); + mgr.setRemoveAllWhenShown(true); + + class MyMenuListener : IMenuListener { + TreeViewer v; + Action a; + MenuManager mgr; + + this(TreeViewer v_, Action a_, MenuManager mgr_) { + this.v = v_; this.a = a_; this.mgr = mgr_; + } + + /* (non-Javadoc) + * @see org.eclipse.jface.action.IMenuListener#menuAboutToShow(org.eclipse.jface.action.IMenuManager) + */ + public void menuAboutToShow(IMenuManager manager) { + IStructuredSelection selection = cast(IStructuredSelection) v + .getSelection(); + if (!selection.isEmpty()) { + a.setText("Action for " + ~ (cast(MyModel) selection.getFirstElement()) + .toString()); + mgr.add(a); + } + } + } + + mgr.addMenuListener(new MyMenuListener(v,a,mgr)); + v.getControl().setMenu(mgr.createContextMenu(v.getControl())); + } + + 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 ~= tmp; + for (int j = 1; j < i; j++) { + tmp.child ~= new MyModel(j, tmp); + } + } + + return root; + } + +} + +void main() { + Display display = new Display(); + Shell shell = new Shell(display); + shell.setLayout(new FillLayout()); + new Snippet005TreeCustomMenu(shell); + shell.open(); + + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) + display.sleep(); + } + + display.dispose(); +} diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/viewers/Snippet006TableMultiLineCells.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jface/snippets/viewers/Snippet006TableMultiLineCells.d Fri Aug 08 14:40:21 2008 +0200 @@ -0,0 +1,255 @@ +/******************************************************************************* +* Copyright (c) 2005, 2007 IBM Corporation and others. +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v1.0 +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v10.html +* +* Contributors: +* IBM Corporation - initial API and implementation +* Port to the D programming language: +* yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ ) +*******************************************************************************/ +module snippets.viewers.Snippet006TableMultiLineCells; + + +// http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/Snippet006TableMultiLineCells.java?view=markup + +import dwtx.jface.resource.JFaceResources; +import dwtx.jface.viewers.ColumnPixelData; +import dwtx.jface.viewers.IStructuredContentProvider; +import dwtx.jface.viewers.OwnerDrawLabelProvider; +import dwtx.jface.viewers.StructuredSelection; +import dwtx.jface.viewers.TableLayout; +import dwtx.jface.viewers.Viewer; +import dwtx.jface.viewers.TableViewer; +import dwt.DWT; +import dwt.graphics.Font; +import dwt.graphics.Point; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Composite; +import dwt.widgets.Display; +import dwt.widgets.Event; +import dwt.widgets.Shell; +import dwt.widgets.TableColumn; + +import dwt.dwthelper.utils; +version(JIVE){ + import jive.stacktrace; +} + +void main(String[] args) { + (new Snippet006TableMultiLineCells()).main(args); +} + +public class Snippet006TableMultiLineCells { + + public static void main(String[] args) { + + Display display = new Display(); + Shell shell = new Shell(display, DWT.CLOSE|DWT.RESIZE); + shell.setSize(400, 400); + shell.setLayout(new GridLayout()); + + Snippet006TableMultiLineCells example = new Snippet006TableMultiLineCells(); + example.createPartControl(shell); + + shell.open(); + + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) + display.sleep(); + } + display.dispose(); + } + + class LineEntry { + + String line; + int columnWidth; + + /** + * Create a new instance of the receiver with name text constrained to a + * column of width. + * + * @param text + * @param width + */ + this(String text, int width) { + line = text; + columnWidth = width; + } + + /** + * Get the height of the event. + * + * @param index + * @return int + */ + public int getHeight(Event event) { + event.gc.setLineWidth(columnWidth); + return event.gc.textExtent(line).y; + } + + /** + * Get the width of the event. + * + * @param index + * @return + */ + public int getWidth(Event event) { + + return columnWidth; + } + + /** + * Get the font we are using. + * + * @return Font + */ + protected Font getFont() { + return JFaceResources.getFont(JFaceResources.HEADER_FONT); + } + + /** + * @param event + */ + public void draw(Event event) { + event.gc.drawText(line, event.x, event.y); + + } + } + + private TableViewer viewer; + + private LineEntry[] entries; + + public this() { + String[] lines = [ + "This day is called the feast of Crispian:", + "He that outlives this day, \n and comes safe home,", + "Will stand a tip-toe when the day is named,", + "And rouse him at the name of Crispian.", + "He that shall live this day,\n and see old age,", + "Will yearly on the vigil feast his neighbours,", + "And say 'To-morrow is Saint Crispian:'", + "Then will he strip his sleeve and show his scars.", + "And say 'These wounds I had on Crispin's day.'", + "Old men forget:\n yet all shall be forgot,", + "But he'll remember with advantages", + "What feats he did that day:\n then shall our names.", + "Familiar in his mouth as household words", + "Harry the king, Bedford and Exeter,", + "Warwick and Talbot,\n Salisbury and Gloucester,", + "Be in their flowing cups freshly remember'd.", + "This story shall the good man teach his son;", + "And Crispin Crispian shall ne'er go by,", + "From this day to the ending of the world,", + "But we in it shall be remember'd;", + "We few,\n we happy few,\n we band of brothers;", + "For he to-day that sheds his blood with me", + "Shall be my brother;\n be he ne'er so vile,", + "This day shall gentle his condition:", + "And gentlemen in England now a-bed", + "Shall think themselves accursed they were not here,", + "And hold their manhoods cheap whiles any speaks", + "That fought with us upon Saint Crispin's day." ]; + + entries = new LineEntry[lines.length]; + for (int i = 0; i < lines.length; i++) { + entries[i] = new LineEntry(lines[i], 35); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(dwt.widgets.Composite) + */ + public void createPartControl(Composite parent) { + viewer = new TableViewer(parent, DWT.FULL_SELECTION); + + viewer.setContentProvider(new class() IStructuredContentProvider { + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.IContentProvider#dispose() + */ + public void dispose() { + } + + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) + */ + public Object[] getElements(Object inputElement) { + return entries; + } + + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.IContentProvider#inputChanged(dwtx.jface.viewers.Viewer, + * java.lang.Object, java.lang.Object) + */ + public void inputChanged(dwtx.jface.viewers.Viewer.Viewer viewer, Object oldInput, Object newInput) { + } + }); + createColumns(); + + viewer.setLabelProvider(new class OwnerDrawLabelProvider { + /* (non-Javadoc) + * @see dwtx.jface.viewers.OwnerDrawLabelProvider#measure(dwt.widgets.Event, java.lang.Object) + */ + protected void measure(Event event, Object element) { + LineEntry line = cast(LineEntry) element; + Point size = event.gc.textExtent(line.line); + event.width = viewer.getTable().getColumn(event.index).getWidth(); + int lines = (event.width > 0 ? (size.x / event.width + 1) : 1); + event.height = size.y * lines; + } + + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.OwnerDrawLabelProvider#paint(dwt.widgets.Event, + * java.lang.Object) + */ + protected void paint(Event event, Object element) { + + LineEntry entry = cast(LineEntry) element; + event.gc.drawText(entry.line, event.x, event.y, true); + } + }); + viewer.setInput(this); + + GridData data = new GridData(GridData.GRAB_HORIZONTAL + | GridData.GRAB_VERTICAL | GridData.FILL_BOTH); + + viewer.getControl().setLayoutData(data); + OwnerDrawLabelProvider.setUpOwnerDraw(viewer); + + viewer.setSelection(new StructuredSelection(entries[1])); + } + + /** + * Create the columns to be used in the tree. + */ + private void createColumns() { + TableLayout layout = new TableLayout(); + viewer.getTable().setLayout(layout); + viewer.getTable().setHeaderVisible(true); + viewer.getTable().setLinesVisible(true); + + TableColumn tc = new TableColumn(viewer.getTable(), DWT.NONE, 0); + layout.addColumnData(new ColumnPixelData(350)); + tc.setText("Lines"); + + } + + public void setFocus() { + } +} + diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/viewers/Snippet007FullSelection.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jface/snippets/viewers/Snippet007FullSelection.d Fri Aug 08 14:40:21 2008 +0200 @@ -0,0 +1,163 @@ +/******************************************************************************* + * 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 + *******************************************************************************/ + +module snippets.viewers.Snippet007FullSelection; + +import dwtx.jface.viewers.CellEditor; +import dwtx.jface.viewers.ICellModifier; +import dwtx.jface.viewers.IStructuredContentProvider; +import dwtx.jface.viewers.LabelProvider; +import dwtx.jface.viewers.TableViewer; +import dwtx.jface.viewers.TextCellEditor; +import dwtx.jface.viewers.Viewer; +import dwt.DWT; +import dwt.graphics.Color; +import dwt.graphics.GC; +import dwt.graphics.Point; +import dwt.graphics.Rectangle; +import dwt.layout.FillLayout; +import dwt.widgets.Display; +import dwt.widgets.Event; +import dwt.widgets.Listener; +import dwt.widgets.Shell; +import dwt.widgets.TableColumn; +import dwt.widgets.TableItem; + +import dwt.dwthelper.utils; + +import tango.util.Convert; +import dwtx.dwtxhelper.Collection; + +/** + * TableViewer: Hide full selection + * + * @author Tom Schindl + * + */ +public class Snippet007FullSelection { + + private class MyContentProvider : IStructuredContentProvider { + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) + */ + public Object[] getElements(Object inputElement) { + return (cast(ArrayList)inputElement).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) { + + } + + } + + public class MyModel { + public int counter; + + public this(int counter) { + this.counter = counter; + } + + public String toString() { + return "Item " ~ to!(char[])(this.counter); + } + } + + public this(Shell shell) { + final TableViewer v = new TableViewer(shell,DWT.BORDER|DWT.FULL_SELECTION); + v.setLabelProvider(new LabelProvider()); + v.setContentProvider(new MyContentProvider()); + v.setCellModifier(new class(v) ICellModifier { + TableViewer v; + this(TableViewer v_) { this.v=v_; } + + public bool canModify(Object element, String property) { + return true; + } + + public Object getValue(Object element, String property) { + return new ArrayWrapperString( to!(char[])((cast(MyModel)element).counter) ); + } + + public void modify(Object element, String property, Object value) { + auto item = cast(TableItem)element; + auto valuestr = cast(ArrayWrapperString)value; + (cast(MyModel)item.getData()).counter = to!(int)(valuestr.array); + v.update(item.getData(), null); + } + + }); + v.setColumnProperties(["column1", "column2" ]); + v.setCellEditors([ new TextCellEditor(v.getTable()),new TextCellEditor(v.getTable()) ]); + + TableColumn column = new TableColumn(v.getTable(),DWT.NONE); + column.setWidth(100); + column.setText("Column 1"); + + column = new TableColumn(v.getTable(),DWT.NONE); + column.setWidth(100); + column.setText("Column 2"); + + ArrayList model = createModel(); + v.setInput(model); + v.getTable().setLinesVisible(true); + v.getTable().setHeaderVisible(true); + + v.getTable().addListener(DWT.EraseItem, new class Listener { + + /* (non-Javadoc) + * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event) + */ + public void handleEvent(Event event) { + event.detail &= ~DWT.SELECTED; + } + }); + + } + + private ArrayList createModel() { + auto elements = new ArrayList(10); + + for( int i = 0; i < 10; i++ ) { + elements.add( new MyModel(i)); + } + + return elements; + } + +} + + +void main() { + Display display = new Display (); + Shell shell = new Shell(display); + shell.setLayout(new FillLayout()); + new Snippet007FullSelection(shell); + shell.open (); + + while (!shell.isDisposed ()) { + if (!display.readAndDispatch ()) display.sleep (); + } + + display.dispose (); + +} + diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/viewers/Snippet010OwnerDraw.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jface/snippets/viewers/Snippet010OwnerDraw.d Fri Aug 08 14:40:21 2008 +0200 @@ -0,0 +1,434 @@ +/******************************************************************************* + * Copyright (c) 2006, 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * oliver.schaefer@mbtech-services.com - Fix for Bug 225051 [Snippets] Snippet010OwnerDraw - Wrong german flag + * Port to the D programming language: + * yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ ) + *******************************************************************************/ +module snippets.viewers.Snippet010OwnerDraw.d; + +import dwtx.jface.resource.JFaceResources; +import dwtx.jface.viewers.Viewer; +import dwtx.jface.viewers.ColumnPixelData; +import dwtx.jface.viewers.IStructuredContentProvider; +import dwtx.jface.viewers.OwnerDrawLabelProvider; +import dwtx.jface.viewers.StructuredSelection; +import dwtx.jface.viewers.TableLayout; +import dwtx.jface.viewers.TableViewer; +import dwt.DWT; +import dwt.graphics.Rectangle; +import dwt.graphics.TextLayout; +import dwt.graphics.TextStyle; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Composite; +import dwt.widgets.Display; +import dwt.widgets.Event; +import dwt.widgets.Shell; +import dwt.widgets.TableColumn; + +import dwt.dwthelper.utils; + +void main(String[] args) { + Snippet010OwnerDraw.main(args); +} + +public class Snippet010OwnerDraw { + + public static void main(String[] args) { + + Display display = new Display(); + Shell shell = new Shell(display, DWT.CLOSE); + shell.setSize(400, 400); + shell.setLayout(new GridLayout()); + + Snippet010OwnerDraw example = new Snippet010OwnerDraw(); + example.createPartControl(shell); + + shell.open(); + + while (!shell.isDisposed ()) { + if (!display.readAndDispatch ()) display.sleep (); + } + display.dispose(); + } + + private static int COLUMN_COUNT = 3; + + class CountryEntry { + + String name; + + String cupYear; + + private String baseName; + + /** + * Create a new instance of the receiver. + * + * @param countryName + * @param worldCupYear + */ + this(String countryName, String englishName, String worldCupYear) { + name = countryName; + cupYear = worldCupYear; + baseName = englishName; + } + + /** + * @param index + * @return + */ + public int getHeight(Event event) { + switch (event.index) { + case 0: + return event.gc.textExtent(name).y; + case 1: + return 50; + case 2: + return event.gc.textExtent(cupYear).y; + default: + return 10; + } + } + + /** + * @param index + * @return + */ + public int getWidth(Event event) { + + switch (event.index) { + case 0: + return event.gc.textExtent(getDisplayString().toString()).x + 4; + + case 1: + return 200; + + case 2: + return event.gc.textExtent(cupYear).x + 5; + + default: + return 10; + } + } + + /** + * Draw the flag in bounds. + * + * @param event + */ + protected void drawFlag(Event event) { + event.gc.setBackground(viewer.getControl().getDisplay() + .getSystemColor(DWT.COLOR_BLUE)); + + Rectangle bounds = event.getBounds(); + bounds.width += 100; + event.gc.fillRectangle(bounds); + } + + /** + * Draw the cup year + * + * @param event + */ + private void drawCupYear(Event event) { + event.gc.drawText(cupYear, event.x, event.y); + + } + + /** + * Draw the name of the receiver. + * + * @param event + */ + protected void drawName(Event event) { + + StringBuffer buffer = getDisplayString(); + + Display display = viewer.getControl().getDisplay(); + TextLayout layout = new TextLayout(display); + layout.setText(buffer.toString()); + + TextStyle plain = new TextStyle(JFaceResources + .getFont(JFaceResources.DEFAULT_FONT), display + .getSystemColor(DWT.COLOR_LIST_FOREGROUND), display + .getSystemColor(DWT.COLOR_LIST_BACKGROUND)); + + TextStyle italic = new TextStyle(JFaceResources.getFontRegistry() + .getItalic(JFaceResources.DEFAULT_FONT), display + .getSystemColor(DWT.COLOR_BLUE), display + .getSystemColor(DWT.COLOR_LIST_BACKGROUND)); + + layout.setStyle(plain, 0, name.length - 1); + layout.setStyle(italic, name.length, buffer.length - 1); + + layout.draw(event.gc, event.x, event.y); + + } + + /** + * @return + */ + private StringBuffer getDisplayString() { + StringBuffer buffer = new StringBuffer(); + buffer.append(name); + buffer.append(" ("); + buffer.append(baseName); + buffer.append(")"); + return buffer; + } + + /** + * @param event + */ + public void draw(Event event) { + + switch (event.index) { + case 0: + drawName(event); + break; + case 1: + drawFlag(event); + break; + case 2: + drawCupYear(event); + break; + + default: + break; + } + + } + } + + private class GermanyEntry : CountryEntry { + + this() { + super("Deutschland", "Germany", "1954 1974 1990"); + } + + /* + * (non-Javadoc) + * + * @see dwtx.jface.tests.viewers.OwnerDrawExample.CountryEntry#drawFlag(dwt.widgets.Event) + */ + protected void drawFlag(Event event) { + + Rectangle bounds = event.getBounds(); + bounds.width += 100; + int stripeHeight = bounds.height / 3; + Rectangle stripe = new Rectangle(bounds.x, bounds.y, bounds.width, + stripeHeight); + + event.gc.setBackground(viewer.getControl().getDisplay() + .getSystemColor(DWT.COLOR_BLACK)); + event.gc.fillRectangle(stripe); + + stripe.y += stripeHeight; + + event.gc.setBackground(viewer.getControl().getDisplay() + .getSystemColor(DWT.COLOR_RED)); + event.gc.fillRectangle(stripe); + + stripe.y += stripeHeight; + + event.gc.setBackground(viewer.getControl().getDisplay() + .getSystemColor(DWT.COLOR_YELLOW)); + event.gc.fillRectangle(stripe); + + } + + } + + private class AustriaEntry : CountryEntry { + + this() { + super("\u00D6sterreich", "Austria", "TBD"); + } + + /* + * (non-Javadoc) + * + * @see dwtx.jface.tests.viewers.OwnerDrawExample.CountryEntry#drawFlag(dwt.widgets.Event) + */ + protected void drawFlag(Event event) { + + Rectangle bounds = event.getBounds(); + bounds.width += 100; + int stripeHeight = bounds.height / 3; + Rectangle stripe = new Rectangle(bounds.x, bounds.y, bounds.width, + stripeHeight); + + event.gc.setBackground(viewer.getControl().getDisplay() + .getSystemColor(DWT.COLOR_RED)); + event.gc.fillRectangle(stripe); + + stripe.y += stripeHeight; + + event.gc.setBackground(viewer.getControl().getDisplay() + .getSystemColor(DWT.COLOR_WHITE)); + event.gc.fillRectangle(stripe); + + stripe.y += stripeHeight; + + event.gc.setBackground(viewer.getControl().getDisplay() + .getSystemColor(DWT.COLOR_RED)); + event.gc.fillRectangle(stripe); + + } + } + + private class EnglandEntry : CountryEntry { + this() { + super("Blighty", "England", "1966"); + } + + /* + * (non-Javadoc) + * + * @see dwtx.jface.tests.viewers.OwnerDrawExample.CountryEntry#drawFlag(dwt.widgets.Event) + */ + protected void drawFlag(Event event) { + + Rectangle bounds = event.getBounds(); + bounds.width += 100; + + event.gc.setBackground(viewer.getControl().getDisplay() + .getSystemColor(DWT.COLOR_RED)); + event.gc.fillRectangle(new Rectangle(bounds.width / 2 + bounds.x + - 5, bounds.y, 10, bounds.height)); + event.gc.fillRectangle(new Rectangle(bounds.x, bounds.height / 2 + + bounds.y - 5, bounds.width, 10)); + + } + } + + private TableViewer viewer; + + private CountryEntry[] entries; + + public this() { + entries = new CountryEntry[3]; + entries[0] = new AustriaEntry(); + entries[1] = new GermanyEntry(); + entries[2] = new EnglandEntry(); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(dwt.widgets.Composite) + */ + public void createPartControl(Composite parent) { + viewer = new TableViewer(parent, DWT.FULL_SELECTION); + + viewer.setContentProvider(new class() IStructuredContentProvider { + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.IContentProvider#dispose() + */ + public void dispose() { + }; + + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) + */ + public Object[] getElements(Object inputElement) { + return (cast(Snippet010OwnerDraw) inputElement).entries; + }; + + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.IContentProvider#inputChanged(dwtx.jface.viewers.Viewer, + * java.lang.Object, java.lang.Object) + */ + public void inputChanged(Viewer viewer, + Object oldInput, Object newInput) { + } + + }); + createColumns(); + + viewer.setLabelProvider(new class() OwnerDrawLabelProvider { + + + protected void measure(Event event, Object element) { + CountryEntry country = cast(CountryEntry) element; + + event.setBounds(new Rectangle(event.x, event.y, country.getWidth(event), + country.getHeight(event))); + + } + + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.OwnerDrawLabelProvider#paint(dwt.widgets.Event, + * java.lang.Object) + */ + protected void paint(Event event, Object element) { + CountryEntry entry = cast(CountryEntry) element; + entry.draw(event); + + } + }); + + OwnerDrawLabelProvider.setUpOwnerDraw(viewer); + viewer.setInput(this); + GridData data = new GridData(GridData.GRAB_HORIZONTAL + | GridData.GRAB_VERTICAL | GridData.FILL_BOTH); + + viewer.getControl().setLayoutData(data); + + viewer.setSelection(new StructuredSelection(entries[1])); + } + + /** + * Create the columns to be used in the tree. + */ + private void createColumns() { + TableLayout layout = new TableLayout(); + viewer.getTable().setLayout(layout); + viewer.getTable().setHeaderVisible(true); + viewer.getTable().setLinesVisible(true); + + for (int i = 0; i < COLUMN_COUNT; i++) { + TableColumn tc = new TableColumn(viewer.getTable(), DWT.NONE, i); + layout.addColumnData(new ColumnPixelData(100)); + tc.setText(getTitleFor(i)); + } + ; + } + + /** + * @param i + * @return + */ + private String getTitleFor(int i) { + switch (i) { + case 0: + return "Name"; + case 1: + return "Flag"; + case 2: + return "World Cup Year"; + } + return "Unknown"; + } + + public void setFocus() { + + } + +} diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/viewers/Snippet014TreeViewerNoMandatoryLabelProvider.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jface/snippets/viewers/Snippet014TreeViewerNoMandatoryLabelProvider.d Fri Aug 08 14:40:21 2008 +0200 @@ -0,0 +1,228 @@ +/******************************************************************************* + * 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 + * Port to the D programming language: + * yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ ) + *******************************************************************************/ + +module snippets.viewers.Snippet014TreeViewerNoMandatoryLabelProvider; + + +import dwtx.jface.resource.FontRegistry; +import dwtx.jface.viewers.ITableColorProvider; +import dwtx.jface.viewers.ITableFontProvider; +import dwtx.jface.viewers.ITableLabelProvider; +import dwtx.jface.viewers.ITreeContentProvider; +import dwtx.jface.viewers.LabelProvider; +import dwtx.jface.viewers.TreeViewer; +import dwtx.jface.viewers.Viewer; +import dwt.DWT; +import dwt.graphics.Color; +import dwt.graphics.Font; +import dwt.graphics.Image; +import dwt.layout.FillLayout; +import dwt.widgets.Display; +import dwt.widgets.Shell; +import dwt.widgets.TreeColumn; + +import dwt.dwthelper.utils; + +import tango.util.Convert; +import tango.util.container.LinkedList; + +version(JIVE) import jive.stacktrace; + + +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(); +} + +/** + * A simple TreeViewer to demonstrate usage + * + * @author Tom Schindl + * + */ +public class Snippet014TreeViewerNoMandatoryLabelProvider { + alias LinkedList!(MyModel) ArrayList; + + private class MyContentProvider : ITreeContentProvider { + + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) + */ + public Object[] getElements(Object inputElement) { + return (cast(MyModel) inputElement).child.toArray(); + } + + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.IContentProvider#dispose() + */ + public void dispose() { + + } + + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.IContentProvider#inputChanged(dwtx.jface.viewers.Viewer, + * java.lang.Object, java.lang.Object) + */ + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + + } + + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object) + */ + public Object[] getChildren(Object parentElement) { + return getElements(parentElement); + } + + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.ITreeContentProvider#getParent(java.lang.Object) + */ + public Object getParent(Object element) { + if (element is null) { + return null; + } + + return (cast(MyModel) element).parent; + } + + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object) + */ + public bool hasChildren(Object element) { + return (cast(MyModel) element).child.size() > 0; + } + + } + + public class MyModel { + public MyModel parent; + + public ArrayList child; + + public int counter; + + public this(int counter, MyModel parent) { + this.parent = parent; + this.counter = counter; + child = new ArrayList(); + } + + public String toString() { + String rv = "Item "; + if (parent !is null) { + rv = parent.toString() ~ "."; + } + + rv ~= to!(String)(counter); + + return rv; + } + } + + public class MyLabelProvider : LabelProvider, + ITableLabelProvider, ITableFontProvider, ITableColorProvider { + FontRegistry registry; + this() + { + registry = new FontRegistry(); + } + + public Image getColumnImage(Object element, int columnIndex) { + return null; + } + + public String getColumnText(Object element, int columnIndex) { + return "Column " ~ to!(String)(columnIndex) ~ " => " ~ element.toString(); + } + + public Font getFont(Object element, int columnIndex) { + if ((cast(MyModel) element).counter % 2 == 0) { + return registry.getBold(Display.getCurrent().getSystemFont() + .getFontData()[0].getName()); + } + return null; + } + + public Color getBackground(Object element, int columnIndex) { + if ((cast(MyModel) element).counter % 2 == 0) { + return Display.getCurrent().getSystemColor(DWT.COLOR_RED); + } + return null; + } + + public Color getForeground(Object element, int columnIndex) { + if ((cast(MyModel) element).counter % 2 == 1) { + return Display.getCurrent().getSystemColor(DWT.COLOR_RED); + } + return null; + } + + } + + public this(Shell shell) { + final TreeViewer v = new TreeViewer(shell); + + TreeColumn column = new TreeColumn(v.getTree(),DWT.NONE); + column.setWidth(200); + column.setText("Column 1"); + + column = new TreeColumn(v.getTree(),DWT.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; + } + + +} diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/viewers/Snippet016TableLayout.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jface/snippets/viewers/Snippet016TableLayout.d Fri Aug 08 14:40:21 2008 +0200 @@ -0,0 +1,156 @@ +/******************************************************************************* + * 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 + * Port to the D programming language: + * yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ ) + *******************************************************************************/ + +module snippets.viewers.Snippet016TableLayout; + + +import dwtx.jface.layout.TableColumnLayout; +import dwtx.jface.viewers.ColumnWeightData; +import dwtx.jface.viewers.IStructuredContentProvider; +import dwtx.jface.viewers.ITableLabelProvider; +import dwtx.jface.viewers.LabelProvider; +import dwtx.jface.viewers.TableViewer; +import dwtx.jface.viewers.Viewer; +import dwt.DWT; +import dwt.graphics.Image; +import dwt.layout.FillLayout; +import dwt.widgets.Composite; +import dwt.widgets.Display; +import dwt.widgets.Shell; +import dwt.widgets.Table; +import dwt.widgets.TableColumn; + +import dwt.dwthelper.utils; + +import tango.util.Convert; +/** + * @param args + */ +void main(String[] args) { + Display display = new Display(); + Shell shell = new Shell(display); + //shell.setSize(400, 150); + shell.setLayout(new FillLayout()); + + new Snippet016TableLayout(shell); + shell.open(); + + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) + display.sleep(); + } + + display.dispose(); + +} + +/** + * A simple TableViewer to demonstrate usage + * + * @author Tom Schindl + * @since 3.3M3 + */ +public class Snippet016TableLayout { + private class MyContentProvider : IStructuredContentProvider { + + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) + */ + public Object[] getElements(Object inputElement) { + return (cast(ArrayWrapperObject) inputElement).array; + } + + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.IContentProvider#dispose() + */ + public void dispose() { + + } + + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.IContentProvider#inputChanged(dwtx.jface.viewers.Viewer, + * java.lang.Object, java.lang.Object) + */ + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + + } + + } + + private class MyLabelProvider : LabelProvider, ITableLabelProvider { + + public Image getColumnImage(Object element, int columnIndex) { + return null; + } + + public String getColumnText(Object element, int columnIndex) { + return to!(char[])(columnIndex) ~ " - " ~ element.toString(); + } + + } + + public class MyModel { + public int counter; + + public this(int counter) { + this.counter = counter; + } + + public String toString() { + return "Item " ~ to!(char[])(this.counter); + } + } + + public this(Composite comp) { + final TableViewer v = new TableViewer(new Table(comp, DWT.BORDER)); + v.setLabelProvider(new MyLabelProvider()); + v.setContentProvider(new MyContentProvider()); + v.getTable().setHeaderVisible(true); + + TableColumnLayout ad = new TableColumnLayout(); + comp.setLayout(ad); + + TableColumn column = new TableColumn(v.getTable(), DWT.NONE); + column.setText("Column 1"); + column.setMoveable(true); + ad.setColumnData(column, new ColumnWeightData(90, 290)); + + column = new TableColumn(v.getTable(), DWT.NONE); + column.setText("Column 2"); + column.setMoveable(true); + ad.setColumnData(column, new ColumnWeightData(10, 200)); + + MyModel[] model = createModel(); + v.setInput(new ArrayWrapperObject(model)); + v.getTable().setLinesVisible(true); + } + + private MyModel[] createModel() { + MyModel[] elements = new MyModel[10]; + + for (int i = 0; i < 10; i++) { + elements[i] = new MyModel(i); + } + + return elements; + } + + + +} diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/viewers/Snippet026TreeViewerTabEditing.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jface/snippets/viewers/Snippet026TreeViewerTabEditing.d Fri Aug 08 14:40:21 2008 +0200 @@ -0,0 +1,295 @@ +/******************************************************************************* + * 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 + * Port to the D programming language: + * yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ ) + *******************************************************************************/ + +module snippets.viewers.Snippet026TreeViewerTabEditing; + + +import dwtx.jface.viewers.CellEditor; +import dwtx.jface.viewers.ColumnLabelProvider; +import dwtx.jface.viewers.ColumnViewerEditor; +import dwtx.jface.viewers.ColumnViewer; +import dwtx.jface.viewers.ColumnViewerEditorActivationStrategy; +import dwtx.jface.viewers.EditingSupport; +import dwtx.jface.viewers.ColumnViewerEditorActivationEvent; +import dwtx.jface.viewers.FocusCellOwnerDrawHighlighter; +import dwtx.jface.viewers.ITreeContentProvider; +import dwtx.jface.viewers.TextCellEditor; +import dwtx.jface.viewers.TreePath; +import dwtx.jface.viewers.TreeViewerFocusCellManager; +import dwtx.jface.viewers.TreeViewerEditor; +import dwtx.jface.viewers.TreeViewer; +import dwtx.jface.viewers.TreeViewerColumn; +import dwtx.jface.viewers.Viewer; +import dwt.DWT; +import dwt.events.SelectionEvent; +import dwt.events.SelectionListener; +import dwt.layout.FillLayout; +import dwt.widgets.Button; +import dwt.widgets.Display; +import dwt.widgets.Shell; + +import dwt.dwthelper.utils; +import dwtx.dwtxhelper.Collection; + +import tango.util.Convert; + +version(JIVE) import jive.stacktrace; + + +void main(String[] args) { + Display display = new Display(); + Shell shell = new Shell(display); + shell.setLayout(new FillLayout()); + new Snippet026TreeViewerTabEditing(shell); + shell.open(); + + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) + display.sleep(); + } + + display.dispose(); +} + +/** + * A simple TreeViewer to demonstrate usage + * + * @author Tom Schindl + * + */ +public class Snippet026TreeViewerTabEditing { + public this(Shell shell) { + Button b = new Button(shell,DWT.PUSH); + b.setText("Remove column"); + final TreeViewer v = new TreeViewer(shell, DWT.BORDER + | DWT.FULL_SELECTION); + v.getTree().setLinesVisible(true); + v.getTree().setHeaderVisible(true); + b.addSelectionListener(new class(v) SelectionListener { + TreeViewer v; + this(TreeViewer v_) + { + this.v = v_; + } + public void widgetDefaultSelected(SelectionEvent e) { + + } + + public void widgetSelected(SelectionEvent e) { + v.getTree().getColumn(1).dispose(); + } + + }); + + TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager(v,new FocusCellOwnerDrawHighlighter(v)); + ColumnViewerEditorActivationStrategy actSupport = new class(v) ColumnViewerEditorActivationStrategy { + this(ColumnViewer v_) + { + super(v_); + } + protected bool isEditorActivationEvent( + ColumnViewerEditorActivationEvent event) { + return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL + || event.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION + || (event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED && event.keyCode == DWT.CR) + || event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC; + } + }; + + TreeViewerEditor.create(v, focusCellManager, actSupport, ColumnViewerEditor.TABBING_HORIZONTAL + | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR + | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION); + + final TextCellEditor textCellEditor = new TextCellEditor(v.getTree()); + + TreeViewerColumn column = new TreeViewerColumn(v, DWT.NONE); + column.getColumn().setWidth(200); + column.getColumn().setMoveable(true); + column.getColumn().setText("Column 1"); + column.setLabelProvider(new class() ColumnLabelProvider { + + public String getText(Object element) { + return "Column 1 => " ~ element.toString(); + } + + }); + column.setEditingSupport(new class(v) EditingSupport { + this(ColumnViewer v_) + { + super(v_); + } + protected bool canEdit(Object element) { + return false; + } + + protected CellEditor getCellEditor(Object element) { + return textCellEditor; + } + + protected Object getValue(Object element) { + return stringcast( (to!(String)((cast(MyModel) element).counter)) ); + } + + protected void setValue(Object element, Object value) { + (cast(MyModel) element).counter = Integer.parseInt(value.toString()); + v.update(element, null); + } + }); + + column = new TreeViewerColumn(v, DWT.NONE); + column.getColumn().setWidth(200); + column.getColumn().setMoveable(true); + column.getColumn().setText("Column 2"); + column.setLabelProvider(new class() ColumnLabelProvider { + + public String getText(Object element) { + return "Column 2 => " ~ element.toString(); + } + + }); + column.setEditingSupport(new class(v) EditingSupport { + this(ColumnViewer v_) + { + super(v_); + } + protected bool canEdit(Object element) { + return true; + } + + protected CellEditor getCellEditor(Object element) { + return textCellEditor; + } + + protected Object getValue(Object element) { + return stringcast( to!(String)((cast(MyModel) element).counter) ); + } + + protected void setValue(Object element, Object value) { + (cast(MyModel) element).counter = Integer.parseInt(value.toString()); + v.update(element, null); + } + }); + + column = new TreeViewerColumn(v, DWT.NONE); + column.getColumn().setWidth(200); + column.getColumn().setMoveable(true); + column.getColumn().setText("Column 3"); + column.setLabelProvider(new class() ColumnLabelProvider { + public String getText(Object element) { + return "Column 3 => " ~ element.toString(); + } + + }); + column.setEditingSupport(new class(v) EditingSupport { + this(ColumnViewer v_) + { + super(v_); + } + protected bool canEdit(Object element) { + return true; + } + + protected CellEditor getCellEditor(Object element) { + return textCellEditor; + } + + protected Object getValue(Object element) { + return stringcast( to!(String)((cast(MyModel) element).counter) ); + } + + protected void setValue(Object element, Object value) { + (cast(MyModel) element).counter = Integer.parseInt(value.toString()); + v.update(element, null); + } + }); + + v.setContentProvider(new MyContentProvider()); + + v.setInput(createModel()); + } + + private MyModel createModel() { + + MyModel root = new MyModel(0, null); + root.counter = 0; + + MyModel tmp; + MyModel subItem; + for (int i = 1; i < 10; i++) { + tmp = new MyModel(i, root); + root.child.add(tmp); + for (int j = 1; j < i; j++) { + subItem = new MyModel(j, tmp); + subItem.child.add(new MyModel(j * 100, subItem)); + tmp.child.add(subItem); + } + } + + return root; + } + + private class MyContentProvider : ITreeContentProvider { + + public Object[] getElements(Object inputElement) { + return (cast(MyModel) inputElement).child.toArray(); + } + + public void dispose() { + } + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + } + + public Object[] getChildren(Object parentElement) { + return getElements(parentElement); + } + + public Object getParent(Object element) { + if (element is null) { + return null; + } + return (cast(MyModel) element).parent; + } + + public bool hasChildren(Object element) { + return (cast(MyModel) element).child.size() > 0; + } + + } + + public class MyModel { + public MyModel parent; + + public ArrayList child; + + public int counter; + + public this(int counter, MyModel parent) { + this.parent = parent; + this.counter = counter; + child = new ArrayList(); + } + + public String toString() { + String rv = "Item "; + if (parent !is null) { + rv = parent.toString() ~ "."; + } + + rv ~= to!(String)(counter); + + return rv; + } + } + +} diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/viewers/Snippet031TableViewerCustomTooltipsMultiSelection.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jface/snippets/viewers/Snippet031TableViewerCustomTooltipsMultiSelection.d Fri Aug 08 14:40:21 2008 +0200 @@ -0,0 +1,310 @@ +/******************************************************************************* + * Copyright (c) 2007 Adam Neal 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: + * Adam Neal - initial API and implementation + * Port to the D programming language: + * yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ ) + *******************************************************************************/ + +module snippets.viewers.Snippet031TableViewerCustomTooltipsMultiSelection; + +// http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/Snippet031TableViewerCustomTooltipsMultiSelection.java?view=markup + +import dwtx.dwtxhelper.Collection; +import tango.util.Convert; + +import dwtx.jface.viewers.ArrayContentProvider; +import dwtx.jface.viewers.ILabelProviderListener; +import dwtx.jface.viewers.ITableLabelProvider; +import dwtx.jface.viewers.TableViewer; +import dwt.DWT; +import dwt.graphics.Image; +import dwt.graphics.Point; +import dwt.graphics.Rectangle; +import dwt.layout.FillLayout; +import dwt.widgets.Display; +import dwt.widgets.Event; +import dwt.widgets.Label; +import dwt.widgets.Listener; +import dwt.widgets.Shell; +import dwt.widgets.Table; +import dwt.widgets.TableColumn; +import dwt.widgets.TableItem; +import dwt.dwthelper.System; +import dwt.widgets.Listener; + +alias char[] String; +void main(String[] args) +{ + Snippet031TableViewerCustomTooltipsMultiSelection.main(args); +} + +/** + * A simple TableViewer to demonstrate how custom tooltips could be created easily while preserving + * the multiple selection. + * + * This is a modified example taken from Tom Schindl's Snippet023TreeViewerCustomTooltips.java + * + * This code is for users pre 3.3 others could use newly added tooltip support in {@link CellLabelProvider} + * @author Adam Neal + * + */ +public class Snippet031TableViewerCustomTooltipsMultiSelection { + public class MyLableProvider : ITableLabelProvider { + + public Image getColumnImage(Object element, int columnIndex) { + return null; + } + + public String getColumnText(Object element, int columnIndex) { + //if (element instanceof MyModel) { + switch (columnIndex) { + case 0: return (cast(MyModel)element).col1; + case 1: return (cast(MyModel)element).col2; + } + //} + + return ""; + } + + public void addListener(ILabelProviderListener listener) { + /* Ignore */ + } + + public void dispose() { + /* Ignore */ + } + + public bool isLabelProperty(Object element, String property) { + return false; + } + + public void removeListener(ILabelProviderListener listener) { + /* Ignore */ + } + + } + + + + public this(Shell shell) { + + + final Table table = new Table(shell, DWT.H_SCROLL | DWT.V_SCROLL | DWT.MULTI | DWT.FULL_SELECTION); + table.setHeaderVisible(true); + table.setLinesVisible(true); + + final TableViewer v = new TableViewer(table); + TableColumn tableColumn1 = new TableColumn(table, DWT.NONE); + TableColumn tableColumn2 = new TableColumn(table, DWT.NONE); + + String column1 = "Column 1", column2 = "Column 2"; + /* Setup the table columns */ + tableColumn1.setText(column1); + tableColumn2.setText(column2); + tableColumn1.pack(); + tableColumn2.pack(); + + v.setColumnProperties([ column1, column2 ]); + v.setLabelProvider(new MyLableProvider()); + v.setContentProvider(new ArrayContentProvider!(MyModel)); + v.setInput(createModel()); + + tooltipLabelListener = new TooltipLabelListener(); + + /** + * The listener that gets added to the table. This listener is responsible for creating the tooltips + * when hovering over a cell item. This listener will listen for the following events: + *
  • DWT.KeyDown - to remove the tooltip
  • + *
  • DWT.Dispose - to remove the tooltip
  • + *
  • DWT.MouseMove - to remove the tooltip
  • + *
  • DWT.MouseHover - to set the tooltip
  • + */ + + Listener tableListener = dgListener(&handleTableListener, table); + + table.addListener (DWT.Dispose, tableListener); + table.addListener (DWT.KeyDown, tableListener); + table.addListener (DWT.MouseMove, tableListener); + table.addListener (DWT.MouseHover, tableListener); + } + + void handleTableListener(Event event, Table table) + { + Shell tooltip = null; + Label label = null; + + /* + * (non-Javadoc) + * @see dwt.widgets.Listener#handleEvent(dwt.widgets.Event) + */ + switch (event.type) { + case DWT.KeyDown: + case DWT.Dispose: + case DWT.MouseMove: { + if (tooltip is null) break; + tooltip.dispose (); + tooltip = null; + label = null; + break; + } + case DWT.MouseHover: { + Point coords = new Point(event.x, event.y); + TableItem item = table.getItem(coords); + if (item !is null) { + int columnCount = table.getColumnCount(); + for (int columnIndex = 0; columnIndex < columnCount; columnIndex++) { + if (item.getBounds(columnIndex).contains(coords)) { + /* Dispose of the old tooltip (if one exists */ + if (tooltip !is null && !tooltip.isDisposed ()) tooltip.dispose (); + + /* Create a new Tooltip */ + tooltip = new Shell (table.getShell(), DWT.ON_TOP | DWT.NO_FOCUS | DWT.TOOL); + tooltip.setBackground (table.getDisplay().getSystemColor (DWT.COLOR_INFO_BACKGROUND)); + FillLayout layout = new FillLayout (); + layout.marginWidth = 2; + tooltip.setLayout (layout); + label = new Label (tooltip, DWT.NONE); + label.setForeground (table.getDisplay().getSystemColor (DWT.COLOR_INFO_FOREGROUND)); + label.setBackground (table.getDisplay().getSystemColor (DWT.COLOR_INFO_BACKGROUND)); + + /* Store the TableItem with the label so we can pass the mouse event later */ + label.setData ("_TableItem_", item); + + /* Set the tooltip text */ + label.setText("Tooltip: " ~ to!(char[])(item.getData()) ~ " : " ~ to!(char[])(columnIndex)); + + /* Setup Listeners to remove the tooltip and transfer the received mouse events */ + label.addListener (DWT.MouseExit, tooltipLabelListener); + label.addListener (DWT.MouseDown, tooltipLabelListener); + + /* Set the size and position of the tooltip */ + Point size = tooltip.computeSize (DWT.DEFAULT, DWT.DEFAULT); + Rectangle rect = item.getBounds (columnIndex); + Point pt = table.toDisplay (rect.x, rect.y); + tooltip.setBounds (pt.x, pt.y, size.x, size.y); + + /* Show it */ + tooltip.setVisible (true); + break; + } + } + } + } + } + } + + /** + * This listener is added to the tooltip so that it can either dispose itself if the mouse + * exits the tooltip or so it can pass the selection event through to the table. + */ + final TooltipLabelListener tooltipLabelListener; + final class TooltipLabelListener : Listener { + private bool isCTRLDown(Event e) { + return (e.stateMask & DWT.CTRL) != 0; + } + /* + * (non-Javadoc) + * @see dwt.widgets.Listener#handleEvent(dwt.widgets.Event) + */ + public void handleEvent (Event event) { + Label label = cast(Label)event.widget; + Shell shell = label.getShell (); + switch (event.type) { + case DWT.MouseDown: /* Handle a user Click */ + /* Extract our Data */ + Event e = new Event (); + e.item = cast(TableItem) label.getData ("_TableItem_"); + Table table = (cast(TableItem) e.item).getParent(); + + /* Construct the new Selection[] to show */ + TableItem [] newSelection = null; + if (isCTRLDown(event)) { + /* We have 2 scenario's. + * 1) We are selecting an already selected element - so remove it from the selected indices + * 2) We are selecting a non-selected element - so add it to the selected indices + */ + TableItem[] sel = table.getSelection(); + for (int i = 0; i < sel.length; ++i) { + //if (e.item.equals(sel[i])) { + if (e.item is sel[i]) { + // We are de-selecting this element + newSelection = new TableItem[sel.length - 1]; + System.arraycopy(sel, 0, newSelection, 0, i); + System.arraycopy(sel, i+1, newSelection, i, sel.length - i - 1); + break; + } + } + + /* + * If we haven't created the newSelection[] yet, than we are adding the newly selected element + * into the list of selected indicies + */ + if (newSelection is null) { + newSelection = new TableItem[sel.length + 1]; + System.arraycopy(sel, 0, newSelection, 0, sel.length); + newSelection[sel.length] = cast(TableItem) e.item; + } + + } else { + /* CTRL is not down, so we simply select the single element */ + newSelection = [ cast(TableItem) e.item ]; + } + /* Set the new selection of the table and notify the listeners */ + table.setSelection (newSelection); + table.notifyListeners (DWT.Selection, e); + + /* Remove the Tooltip */ + shell.dispose (); + table.setFocus(); + break; + case DWT.MouseExit: + shell.dispose (); + break; + } + } + } + + + private ArrayList createModel() { + ArrayList list = new ArrayList; + list.add(new MyModel("A", "B")); + list.add(new MyModel("C", "D")); + list.add(new MyModel("E", "F")); + return list; + } + + public static void main(String[] args) { + Display display = new Display(); + Shell shell = new Shell(display); + shell.setLayout(new FillLayout()); + new Snippet031TableViewerCustomTooltipsMultiSelection(shell); + shell.open(); + + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) + display.sleep(); + } + + display.dispose(); + } +} + +public class MyModel { + public String col1, col2; + + public this(String c1, String c2) { + col1 = c1; + col2 = c2; + } + + public String toString() { + return col1 ~ col2; + } +} + diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/viewers/Snippet040TableViewerSorting.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jface/snippets/viewers/Snippet040TableViewerSorting.d Fri Aug 08 14:40:21 2008 +0200 @@ -0,0 +1,310 @@ +/******************************************************************************* + * 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 + * Port to the D programming language: + * yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ ) + *******************************************************************************/ +module snippets.viewers.Snippet040TableViewerSorting; + +// http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/Snippet040TableViewerSorting.java?view=markup + +import dwtx.jface.viewers.CellEditor; +import dwtx.jface.viewers.ColumnLabelProvider; +import dwtx.jface.viewers.ColumnViewer; +import dwtx.jface.viewers.EditingSupport; +import dwtx.jface.viewers.IStructuredContentProvider; +import dwtx.jface.viewers.TableViewer; +import dwtx.jface.viewers.TableViewerColumn; +import dwtx.jface.viewers.TextCellEditor; +import dwtx.jface.viewers.Viewer; +import dwtx.jface.viewers.ViewerComparator; +import dwt.DWT; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.layout.FillLayout; +import dwt.widgets.Display; +import dwt.widgets.Shell; +import dwt.dwthelper.utils; + +/** + * Example usage of ViewerComparator in tables to allow sorting + * + * @author Tom Schindl + * + */ + +void main(String[] args) { + Snippet040TableViewerSorting.main(args); +} + + private class MyContentProvider : IStructuredContentProvider { + + public Object[] getElements(Object inputElement) { + return (cast(ArrayWrapperT!(Person)) inputElement).array; + } + + public void dispose() { + } + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + } + + } + + public class Person { + public String givenname; + public String surname; + public String email; + + public this(String givenname, String surname, String email) { + this.givenname = givenname; + this.surname = surname; + this.email = email; + } + + } + + protected abstract class AbstractEditingSupport : EditingSupport { + private TextCellEditor editor; + + public this(TableViewer viewer) { + super(viewer); + this.editor = new TextCellEditor(viewer.getTable()); + } + + protected bool canEdit(Object element) { + return true; + } + + protected CellEditor getCellEditor(Object element) { + return editor; + } + + protected void setValue(Object element, Object value) { + doSetValue(element, value); + getViewer().update(element, null); + } + + protected abstract void doSetValue(Object element, Object value); + } + + private abstract class ColumnViewerSorter : ViewerComparator { + public static final int ASC = 1; + + public static final int NONE = 0; + + public static final int DESC = -1; + + private int direction = 0; + + private TableViewerColumn column; + + private ColumnViewer viewer; + + public this(ColumnViewer viewer_, TableViewerColumn column_) { + this.column = column_; + this.viewer = viewer_; + this.column.getColumn().addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + this.outer.widgetSelected(e); + } + }); + } + + private void widgetSelected(SelectionEvent e){ + if( viewer.getComparator() !is null ) { + if( viewer.getComparator() is this ) { + int tdirection = direction; + + if( tdirection is ASC ) { + setSorter(this, DESC); + } else if( tdirection is DESC ) { + setSorter(this, NONE); + } + } else { + setSorter(this, ASC); + } + } else { + setSorter(this, ASC); + } + } + public void setSorter(ColumnViewerSorter sorter, int direction) { + if( direction is NONE ) { + column.getColumn().getParent().setSortColumn(null); + column.getColumn().getParent().setSortDirection(DWT.NONE); + viewer.setComparator(null); + } else { + column.getColumn().getParent().setSortColumn(column.getColumn()); + sorter.direction = direction; + + if( direction is ASC ) { + column.getColumn().getParent().setSortDirection(DWT.DOWN); + } else { + column.getColumn().getParent().setSortDirection(DWT.UP); + } + + if( viewer.getComparator() is sorter ) { + viewer.refresh(); + } else { + viewer.setComparator(sorter); + } + + } + } + + public int compare(Viewer viewer, Object e1, Object e2) { + return direction * doCompare(viewer, e1, e2); + } + + protected abstract int doCompare(Viewer viewer, Object e1, Object e2); + } + +public class Snippet040TableViewerSorting { + + + public this(Shell shell) { + TableViewer v = new TableViewer(shell, DWT.BORDER | DWT.FULL_SELECTION); + v.setContentProvider(new MyContentProvider()); + + TableViewerColumn column = new TableViewerColumn(v, DWT.NONE); + column.getColumn().setWidth(200); + column.getColumn().setText("Givenname"); + column.getColumn().setMoveable(true); + column.setLabelProvider(new class() ColumnLabelProvider { + public String getText(Object element) { + return (cast(Person) element).givenname; + } + }); + + column.setEditingSupport(new class(v) AbstractEditingSupport { + public this(TableViewer t ){ + super(t); + } + protected Object getValue(Object element) { + return new ArrayWrapperString((cast(Person) element).givenname); + } + protected void doSetValue(Object element, Object value) { + (cast(Person) element).givenname = stringcast(value); + } + }); + + ColumnViewerSorter cSorter = new class(v,column) ColumnViewerSorter { + this(TableViewer t, TableViewerColumn c ){ + super(t,c); + } + protected int doCompare(Viewer viewer, Object e1, Object e2) { + Person p1 = cast(Person) e1; + Person p2 = cast(Person) e2; + return p1.givenname.compareToIgnoreCase(p2.givenname); + } + }; + + column = new TableViewerColumn(v, DWT.NONE); + column.getColumn().setWidth(200); + column.getColumn().setText("Surname"); + column.getColumn().setMoveable(true); + column.setLabelProvider(new class() ColumnLabelProvider { + public String getText(Object element) { + return (cast(Person) element).surname; + } + }); + + column.setEditingSupport(new class(v) AbstractEditingSupport { + this(TableViewer t ){ + super(t); + } + protected Object getValue(Object element) { + return stringcast((cast(Person) element).surname); + } + protected void doSetValue(Object element, Object value) { + (cast(Person) element).surname = stringcast(value); + } + }); + + new class(v,column) ColumnViewerSorter { + this(TableViewer t, TableViewerColumn c ){ + super(t,c); + } + protected int doCompare(Viewer viewer, Object e1, Object e2) { + Person p1 = cast(Person) e1; + Person p2 = cast(Person) e2; + return p1.surname.compareToIgnoreCase(p2.surname); + } + }; + + column = new TableViewerColumn(v, DWT.NONE); + column.getColumn().setWidth(200); + column.getColumn().setText("E-Mail"); + column.getColumn().setMoveable(true); + column.setLabelProvider(new class() ColumnLabelProvider { + public String getText(Object element) { + return (cast(Person) element).email; + } + }); + + column.setEditingSupport(new class(v) AbstractEditingSupport { + this(TableViewer t ){ + super(t); + } + protected Object getValue(Object element) { + return stringcast((cast(Person) element).email); + } + protected void doSetValue(Object element, Object value) { + (cast(Person) element).email = stringcast(value); + } + }); + new class(v,column) ColumnViewerSorter { + this(TableViewer t, TableViewerColumn c ){ + super(t,c); + } + protected int doCompare(Viewer viewer, Object e1, Object e2) { + Person p1 = cast(Person) e1; + Person p2 = cast(Person) e2; + return p1.email.compareToIgnoreCase(p2.email); + } + }; + + Person[] model = createModel(); + v.setInput( new ArrayWrapperT!(Person)(model)); + v.getTable().setLinesVisible(true); + v.getTable().setHeaderVisible(true); + cSorter.setSorter(cSorter, ColumnViewerSorter.ASC); + } + + private Person[] createModel() { + Person[] elements = new Person[4]; + elements[0] = new Person("Tom", "Schindl", + "tom.schindl@bestsolution.at"); + elements[1] = new Person("Boris", "Bokowski", + "Boris_Bokowski@ca.ibm.com"); + elements[2] = new Person("Tod", "Creasey", "Tod_Creasey@ca.ibm.com"); + elements[3] = new Person("Wayne", "Beaton", "wayne@eclipse.org"); + + return elements; + } + + /** + * @param args + */ + public static void main(String[] args) { + Display display = new Display(); + + Shell shell = new Shell(display); + shell.setLayout(new FillLayout()); + new Snippet040TableViewerSorting(shell); + shell.open(); + + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) + display.sleep(); + } + display.dispose(); + } + +} diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/viewers/Snippet043NoColumnTreeViewerKeyboardEditing.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jface/snippets/viewers/Snippet043NoColumnTreeViewerKeyboardEditing.d Fri Aug 08 14:40:21 2008 +0200 @@ -0,0 +1,222 @@ +/******************************************************************************* + * 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 + * Port to the D programming language: + * yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ ) + *******************************************************************************/ + +module snippets.viewers.Snippet043NoColumnTreeViewerKeyboardEditing; + +import dwtx.jface.viewers.CellEditor; +import dwtx.jface.viewers.ColumnViewerEditor; +import dwtx.jface.viewers.ColumnViewer; +import dwtx.jface.viewers.ColumnViewerEditorActivationStrategy; +import dwtx.jface.viewers.ColumnViewerEditorActivationEvent; +import dwtx.jface.viewers.FocusCellOwnerDrawHighlighter; +import dwtx.jface.viewers.ICellModifier; +import dwtx.jface.viewers.ITreeContentProvider; +import dwtx.jface.viewers.TextCellEditor; +import dwtx.jface.viewers.TreePath; +import dwtx.jface.viewers.TreeViewerFocusCellManager; +import dwtx.jface.viewers.TreeViewerEditor; +import dwtx.jface.viewers.TreeViewer; +import dwtx.jface.viewers.Viewer; +import dwt.DWT; +import dwt.events.SelectionEvent; +import dwt.events.SelectionListener; +import dwt.layout.FillLayout; +import dwt.widgets.Button; +import dwt.widgets.Display; +import dwt.widgets.Item; +import dwt.widgets.Shell; + +import dwt.dwthelper.utils; + +import tango.util.Convert; +import tango.util.container.LinkedList; + +version(JIVE) import jive.stacktrace; + + +void main(String[] args) { + Display display = new Display(); + Shell shell = new Shell(display); + shell.setLayout(new FillLayout()); + new Snippet043NoColumnTreeViewerKeyboardEditing(shell); + shell.open(); + + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) + display.sleep(); + } + + display.dispose(); +} + +/** + * Demonstrates how to use keyboard-editing support in a TreeViewer with no column + * + * @author Tom Schindl + * + */ +public class Snippet043NoColumnTreeViewerKeyboardEditing { + alias LinkedList!(MyModel) ArrayList; + public this(Shell shell) { + Button b = new Button(shell, DWT.PUSH); + b.setText("BBB"); + final TreeViewer v = new TreeViewer(shell, DWT.BORDER + | DWT.FULL_SELECTION); + b.addSelectionListener(new class(v) SelectionListener { + TreeViewer v; + this(TreeViewer v_) + { + this.v = v_; + } + + public void widgetDefaultSelected(SelectionEvent e) { + + } + + public void widgetSelected(SelectionEvent e) { + MyModel root = cast(MyModel) v.getInput(); + TreePath path = new TreePath([ root, root.child.get(1), + (cast(MyModel) root.child.get(1)).child.get(0)] ); + v.editElement(path, 0); + } + + }); + + v.setCellEditors([ new TextCellEditor(v.getTree()) ]); + v.setColumnProperties(["col1"]); + v.setCellModifier(new class(v) ICellModifier { + TreeViewer v; + this(TreeViewer v_) + { + this.v = v_; + } + public bool canModify(Object element, String property) { + return true; + } + + public Object getValue(Object element, String property) { + return stringcast( to!(String)((cast(MyModel) element).counter) ~ "" ); + } + + public void modify(Object element, String property, Object value) { + element = (cast(Item) element).getData(); + (cast(MyModel) element).counter = Integer.parseInt(value.toString()); + v.update(element, null); + } + + }); + + TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager( + v, new FocusCellOwnerDrawHighlighter(v)); + ColumnViewerEditorActivationStrategy actSupport = new class(v) ColumnViewerEditorActivationStrategy { + this(ColumnViewer v) + { + super(v); + } + protected bool isEditorActivationEvent( + ColumnViewerEditorActivationEvent event) { + return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL + || event.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION + || (event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED && event.keyCode == DWT.CR) + || event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC; + } + }; + + TreeViewerEditor.create(v, focusCellManager, actSupport, + ColumnViewerEditor.TABBING_HORIZONTAL + | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR + | ColumnViewerEditor.TABBING_VERTICAL + | ColumnViewerEditor.KEYBOARD_ACTIVATION); + + v.setContentProvider(new MyContentProvider()); + + v.setInput(createModel()); + } + + private MyModel createModel() { + + MyModel root = new MyModel(0, null); + root.counter = 0; + + MyModel tmp; + MyModel subItem; + for (int i = 1; i < 10; i++) { + tmp = new MyModel(i, root); + root.child.add(tmp); + for (int j = 1; j < i; j++) { + subItem = new MyModel(j, tmp); + subItem.child.add(new MyModel(j * 100, subItem)); + tmp.child.add(subItem); + } + } + + return root; + } + + + + private class MyContentProvider : ITreeContentProvider { + + public Object[] getElements(Object inputElement) { + return (cast(MyModel) inputElement).child.toArray(); + } + + public void dispose() { + } + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + } + + public Object[] getChildren(Object parentElement) { + return getElements(parentElement); + } + + public Object getParent(Object element) { + if (element is null) { + return null; + } + return (cast(MyModel) element).parent; + } + + public bool hasChildren(Object element) { + return (cast(MyModel) element).child.size() > 0; + } + + } + + public class MyModel { + public MyModel parent; + + public ArrayList child; + + public int counter; + + public this(int counter_, MyModel parent_) { + this.parent = parent_; + this.counter = counter_; + child = new ArrayList(); + } + + public String toString() { + String rv = "Item "; + if (parent !is null) { + rv = parent.toString() ~ "."; + } + + rv ~= to!(String)(counter); + + return rv; + } + } + +} diff -r 7248e4c09c4f -r 161f7698cfb8 jface/snippets/viewers/Snippet047VirtualLazyTreeViewer.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jface/snippets/viewers/Snippet047VirtualLazyTreeViewer.d Fri Aug 08 14:40:21 2008 +0200 @@ -0,0 +1,186 @@ +/******************************************************************************* + * 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 + * Port to the D programming language: + * yidabu at gmail dot com ( D China http://www.d-programming-language-china.org/ ) + *******************************************************************************/ + +module snippets.viewers.Snippet047VirtualLazyTreeViewer; + +import dwtx.jface.viewers.ILazyTreeContentProvider; +import dwtx.jface.viewers.LabelProvider; +import dwtx.jface.viewers.TreeViewer; +import dwtx.jface.viewers.Viewer; +import dwt.DWT; +import dwt.layout.FillLayout; +import dwt.widgets.Display; +import dwt.widgets.Shell; + +import dwt.dwthelper.utils; + +import tango.util.Convert; +import tango.util.container.LinkedList; + +version(JIVE) import jive.stacktrace; + + +/** + * @param args + */ +void main(String[] args) { + Display display = new Display(); + Shell shell = new Shell(display); + shell.setLayout(new FillLayout()); + new Snippet047VirtualLazyTreeViewer(shell); + shell.open(); + + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) + display.sleep(); + } + + display.dispose(); + +} + +/** + * A simple TreeViewer to demonstrate usage of an ILazyContentProvider. + * + */ +public class Snippet047VirtualLazyTreeViewer { + alias ArrayWrapperT!(IntermediateNode) ArrayWrapperIntermediateNode; + alias ArrayWrapperT!(LeafNode) ArrayWrapperLeafNode; + + private class MyContentProvider : ILazyTreeContentProvider { + private TreeViewer viewer; + private IntermediateNode[] elements; + + public this(TreeViewer viewer) { + this.viewer = viewer; + } + + public void dispose() { + + } + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + if(cast(ArrayWrapperIntermediateNode) newInput) + this.elements = (cast(ArrayWrapperIntermediateNode) newInput).array; + } + + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.ILazyTreeContentProvider#getParent(java.lang.Object) + */ + public Object getParent(Object element) { + if (cast(LeafNode)element) + return (cast(LeafNode) element).parent; + return new ArrayWrapperIntermediateNode(elements); + } + + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.ILazyTreeContentProvider#updateChildCount(java.lang.Object, + * int) + */ + public void updateChildCount(Object element, int currentChildCount) { + + int length = 0; + if (cast(IntermediateNode)element) { + IntermediateNode node = cast(IntermediateNode) element; + length = node.children.length; + } + /// TODO: fix me access violation here + if(element !is null && elements !is null && (cast(ArrayWrapperIntermediateNode)element) && (cast(ArrayWrapperIntermediateNode)element).array is elements) + length = elements.length; + viewer.setChildCount(element, length); + } + + /* + * (non-Javadoc) + * + * @see dwtx.jface.viewers.ILazyTreeContentProvider#updateElement(java.lang.Object, + * int) + */ + public void updateElement(Object parent, int index) { + + Object element; + if (cast(IntermediateNode)parent) + element = (cast(IntermediateNode) parent).children[index]; + + else + element = elements[index]; + viewer.replace(parent, index, element); + updateChildCount(element, -1); + + } + + } + + public class LeafNode { + public int counter; + public IntermediateNode parent; + + public this(int counter, IntermediateNode parent) { + this.counter = counter; + this.parent = parent; + } + + public String toString() { + return "Leaf " ~ to!(String)(this.counter); + } + } + + public class IntermediateNode { + public int counter; + public LeafNode[] children; + + public this(int counter) { + this.counter = counter; + children = new LeafNode[0]; + } + + public String toString() { + return "Node " ~ to!(String)(this.counter); + } + + public void generateChildren(int i) { + children = new LeafNode[i]; + for (int j = 0; j < i; j++) { + children[j] = new LeafNode(j, this); + } + + } + } + + public this(Shell shell) { + final TreeViewer v = new TreeViewer(shell, DWT.VIRTUAL | DWT.BORDER); + v.setLabelProvider(new LabelProvider()); + v.setContentProvider(new MyContentProvider(v)); + v.setUseHashlookup(true); + IntermediateNode[] model = createModel(); + v.setInput(new ArrayWrapperIntermediateNode(model)); + v.getTree().setItemCount(model.length); + + } + + private IntermediateNode[] createModel() { + IntermediateNode[] elements = new IntermediateNode[10]; + + for (int i = 0; i < 10; i++) { + elements[i] = new IntermediateNode(i); + elements[i].generateChildren(1000); + } + + return elements; + } + +}