# HG changeset patch # User Frank Benoit # Date 1218885715 -7200 # Node ID 5f508f32246491e04afdd6b950f6cecb76aa5570 # Parent 7c4b76583cb88c525882491438753b81f450d1c9 more JFace examples diff -r 7c4b76583cb8 -r 5f508f322464 jface/snippets/viewers/Snippet019TableViewerAddRemoveColumnsWithEditingNewAPI.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jface/snippets/viewers/Snippet019TableViewerAddRemoveColumnsWithEditingNewAPI.d Sat Aug 16 13:21:55 2008 +0200 @@ -0,0 +1,334 @@ +/******************************************************************************* + * 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.Snippet019TableViewerAddRemoveColumnsWithEditingNewAPI; + + +import dwtx.jface.action.Action; +import dwtx.jface.action.IMenuListener; +import dwtx.jface.action.IMenuManager; +import dwtx.jface.action.MenuManager; +import dwtx.jface.internal.ConfigureColumnsDialog; +import dwtx.jface.viewers.CellEditor; +import dwtx.jface.viewers.ColumnLabelProvider; +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.window.SameShellProvider; +import dwt.DWT; +import dwt.events.MouseAdapter; +import dwt.events.MouseEvent; +import dwt.layout.FillLayout; +import dwt.widgets.Display; +import dwt.widgets.Shell; +import dwt.dwthelper.utils; +import dwtx.jface.window.IShellProvider; + +/** + * Explore the new API added in 3.3 and see how easily you can create reusable + * components + * + * @author Tom Schindl + * @since 3.2 + */ +public class Snippet019TableViewerAddRemoveColumnsWithEditingNewAPI { + + 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; + } + } + + private class MyContentProvider : IStructuredContentProvider { + + public Object[] getElements(Object inputElement) { + return arrayFromObject!(Person)( inputElement ); + } + + public void dispose() { + } + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + + } + + } + + + + private class GivenNameLabelProvider : ColumnLabelProvider { + public String getText(Object element) { + return (cast(Person) element).givenname; + } + } + + private class GivenNameEditing : EditingSupport { + private TextCellEditor cellEditor; + + public this(TableViewer viewer) { + super(viewer); + cellEditor = new TextCellEditor(viewer.getTable()); + } + + protected bool canEdit(Object element) { + return true; + } + + protected CellEditor getCellEditor(Object element) { + return cellEditor; + } + + protected Object getValue(Object element) { + return stringcast((cast(Person) element).givenname); + } + + protected void setValue(Object element, Object value) { + (cast(Person) element).givenname = stringcast(value); + getViewer().update(element, null); + } + } + + private class SurNameLabelProvider : ColumnLabelProvider { + public String getText(Object element) { + return (cast(Person) element).surname; + } + } + + private class SurNameEditing : EditingSupport { + private TextCellEditor cellEditor; + + public this( TableViewer viewer ) { + super(viewer); + cellEditor = new TextCellEditor(viewer.getTable()); + } + + protected bool canEdit(Object element) { + return true; + } + + protected CellEditor getCellEditor(Object element) { + return cellEditor; + } + + protected Object getValue(Object element) { + return stringcast((cast(Person) element).surname); + } + + protected void setValue(Object element, Object value) { + (cast(Person) element).surname = stringcast(value); + getViewer().update(element, null); + } + } + + private class EmailLabelProvider : ColumnLabelProvider { + public String getText(Object element) { + return (cast(Person) element).email; + } + } + + private class EmailEditing : EditingSupport { + private TextCellEditor cellEditor; + + public this( TableViewer viewer ) { + super(viewer); + cellEditor = new TextCellEditor(viewer.getTable()); + } + + protected bool canEdit(Object element) { + return true; + } + + protected CellEditor getCellEditor(Object element) { + return cellEditor; + } + + protected Object getValue(Object element) { + return stringcast((cast(Person) element).email); + } + + protected void setValue(Object element, Object value) { + (cast(Person) element).email = stringcast(value); + getViewer().update(element, null); + } + } + + private int activeColumn = -1; + + private TableViewerColumn column; + TableViewer v; + public this(Shell shell) { + v = new TableViewer(shell, DWT.BORDER + | DWT.FULL_SELECTION); + + TableViewerColumn column = new TableViewerColumn(v,DWT.NONE); + column.setLabelProvider(new GivenNameLabelProvider()); + column.setEditingSupport(new GivenNameEditing(v)); + + column.getColumn().setWidth(200); + column.getColumn().setText("Givenname"); + column.getColumn().setMoveable(true); + + column = new TableViewerColumn(v,DWT.NONE); + column.setLabelProvider(new SurNameLabelProvider()); + column.setEditingSupport(new SurNameEditing(v)); + column.getColumn().setWidth(200); + column.getColumn().setText("Surname"); + column.getColumn().setMoveable(true); + + Person[] model = createModel(); + + v.setContentProvider(new MyContentProvider()); + v.setInput(new ArrayWrapperObject(model)); + v.getTable().setLinesVisible(true); + v.getTable().setHeaderVisible(true); + + addMenu(); + triggerColumnSelectedColumn(); + } + + private void triggerColumnSelectedColumn() { + v.getTable().addMouseListener(new class() MouseAdapter { + + public void mouseDown(MouseEvent e) { + int x = 0; + for (int i = 0; i < v.getTable().getColumnCount(); i++) { + x += v.getTable().getColumn(i).getWidth(); + if (e.x <= x) { + activeColumn = i; + break; + } + } + } + + }); + } + + private void removeEmailColumn() { + column.getColumn().dispose(); + v.refresh(); + } + + private void addEmailColumn(int columnIndex) { + column = new TableViewerColumn(v, DWT.NONE, columnIndex); + column.setLabelProvider(new EmailLabelProvider()); + column.setEditingSupport(new EmailEditing(v)); + column.getColumn().setText("E-Mail"); + column.getColumn().setResizable(false); + + v.refresh(); + + column.getColumn().setWidth(200); + + } + + private Action insertEmailBefore; + private Action insertEmailAfter; + private Action removeEmail; + private Action configureColumns; + + private void addMenu() { + MenuManager mgr = new MenuManager(); + + insertEmailBefore = new class("Insert E-Mail before") Action { + this(String name){ super(name); } + public void run() { + addEmailColumn(activeColumn); + } + }; + + insertEmailAfter = new class("Insert E-Mail after") Action { + this(String name){ super(name); } + public void run() { + addEmailColumn(activeColumn + 1); + } + }; + + removeEmail = new class("Remove E-Mail") Action { + this(String name){ super(name); } + public void run() { + removeEmailColumn(); + } + }; + + configureColumns = new class("Configure Columns...") Action { + this(String name){ super(name); } + public void run() { + // Note: the following is not API! + (new ConfigureColumnsDialog(cast(IShellProvider)new SameShellProvider(v.getControl()), v.getTable())).open(); + } + }; + + mgr.setRemoveAllWhenShown(true); + mgr.addMenuListener(new class() IMenuListener { + + public void menuAboutToShow(IMenuManager manager) { + if (v.getTable().getColumnCount() == 2) { + manager.add(insertEmailBefore); + manager.add(insertEmailAfter); + } else { + manager.add(removeEmail); + } + manager.add(configureColumns); + } + + }); + + v.getControl().setMenu(mgr.createContextMenu(v.getControl())); + } + + private Person[] createModel() { + Person[] persons = new Person[3]; + persons[0] = new Person("Tom", "Schindl", "tom.schindl@bestsolution.at"); + persons[1] = new Person("Boris", "Bokowski", + "boris_bokowski@ca.ibm.com"); + persons[2] = new Person("Tod", "Creasey", "tod_creasey@ca.ibm.com"); + + return persons; + } + + /** + * @param args + */ + public static void main(String[] args) { + Display display = new Display(); + + Shell shell = new Shell(display); + shell.setLayout(new FillLayout()); + new Snippet019TableViewerAddRemoveColumnsWithEditingNewAPI(shell); + shell.open(); + + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) + display.sleep(); + } + + display.dispose(); + + } + +} + +void main(){ + Snippet019TableViewerAddRemoveColumnsWithEditingNewAPI.main(null); +} + + diff -r 7c4b76583cb8 -r 5f508f322464 jface/user/Decoration.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jface/user/Decoration.d Sat Aug 16 13:21:55 2008 +0200 @@ -0,0 +1,148 @@ +module user.Decoration; + +import tango.util.log.Trace; + +import dwt.dwthelper.utils; +import dwt.DWT; + +import dwt.layout.GridLayout; +import dwt.layout.GridData; + +import dwt.graphics.Image; + +import dwt.widgets.Text; +import dwt.widgets.Control; +import dwt.widgets.Composite; +import dwt.widgets.Group; +import dwt.widgets.Display; +import dwt.widgets.Shell; +import dwt.widgets.Listener; +import dwt.widgets.Event; + +import dwtx.jface.bindings.keys.KeyStroke; + +import dwtx.jface.dialogs.TitleAreaDialog; +import dwtx.jface.dialogs.IDialogConstants; +import dwtx.jface.dialogs.IMessageProvider; +import dwtx.jface.dialogs.Dialog; +import dwtx.jface.resource.JFaceResources; + +import dwtx.jface.fieldassist.FieldDecorationRegistry; +import dwtx.jface.fieldassist.FieldDecoration; +import dwtx.jface.fieldassist.DecoratedField; +import dwtx.jface.fieldassist.TextControlCreator; +import dwtx.jface.fieldassist.ContentProposalAdapter; +import dwtx.jface.fieldassist.TextContentAdapter; +import dwtx.jface.fieldassist.SimpleContentProposalProvider; +import dwtx.jface.fieldassist.IContentProposal; + +import dwtx.jface.viewers.ILabelProvider; +import dwtx.jface.viewers.ILabelProviderListener; + +version(JIVE) import jive.stacktrace; + +class MyDialog : TitleAreaDialog { + + private DecoratedField textField; + private uint step; + private FieldDecoration[] decos; + + this( Shell parent ){ + super(parent); + } + protected Control createContents(Composite parent) { + Control contents = super.createContents(parent); + setTitle("Show Decoration"); + setMessage("Type into the text field to change the decoration", IMessageProvider.INFORMATION); + return contents; + } + protected Control createDialogArea(Composite parent) { + + Composite comp = new Composite(parent, DWT.NONE); + + comp.setLayoutData(new GridData(GridData.FILL_BOTH)); + + comp.setLayout(new GridLayout(1, false)); + + + auto registry = FieldDecorationRegistry.getDefault(); + decos ~= registry.getFieldDecoration(FieldDecorationRegistry.DEC_CONTENT_PROPOSAL ); + decos ~= registry.getFieldDecoration(FieldDecorationRegistry.DEC_ERROR ); + decos ~= registry.getFieldDecoration(FieldDecorationRegistry.DEC_ERROR_QUICKFIX ); + decos ~= registry.getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION ); + decos ~= registry.getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED ); + decos ~= registry.getFieldDecoration(FieldDecorationRegistry.DEC_WARNING ); + decos ~= null; + + with( textField = new DecoratedField(comp, DWT.BORDER, new TextControlCreator())){ + addFieldDecoration( decos[0], DWT.TOP | DWT.LEFT, false); + + getLayoutControl().setLayoutData( new GridData( + GridData.FILL_HORIZONTAL ) ); + + auto text = cast(Text)getControl(); + assert(text); + text.addListener(DWT.Verify, dgListener(&handleVerify)); + } + Text text; + with( text = new Text( comp, DWT.BORDER )){ + auto gd = new GridData( GridData.FILL, GridData.VERTICAL_ALIGN_CENTER, true, false ); + gd.horizontalIndent = registry.getMaximumDecorationWidth(); + setLayoutData( gd ); + setText( "without Decoration" ); + + } + ContentProposalAdapter adapter = new ContentProposalAdapter( + text, + new TextContentAdapter(), + new SimpleContentProposalProvider([ + "The very first proposal"[], + "second proposal", + "and a last one"]), + KeyStroke.getInstance(DWT.CTRL, ' '), + null); + adapter.setLabelProvider( new class ILabelProvider { + uint idx; + Image getImage(Object element){ + idx++; + switch(idx % 4){ + case 0: return JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_INFO); + case 1: return JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_WARNING); + case 2: return JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_ERROR); + case 3: return JFaceResources.getImage(Dialog.DLG_IMG_HELP); + default: return null; + } + } + String getText(Object element){ + return (cast(IContentProposal)element).getContent(); + } + void addListener(ILabelProviderListener listener){} + void dispose(){} + bool isLabelProperty(Object element, String property){ return true; } + void removeListener(ILabelProviderListener listener){} + }); + return comp; + } + private void handleVerify(Event e){ + FieldDecoration deco; + deco = decos[ step % decos.length ]; + if( deco ){ + textField.hideDecoration(deco); + } + step++; + deco = decos[ step % decos.length ]; + if( deco ){ + textField.addFieldDecoration( deco, DWT.TOP | DWT.LEFT, false); + } + } + protected void createButtonsForButtonBar(Composite parent) { + createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); + } +} + + +void main(){ + auto d = new Display(); + (new MyDialog(null)).open(); +} + diff -r 7c4b76583cb8 -r 5f508f322464 jface/user/PopUp.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jface/user/PopUp.d Sat Aug 16 13:21:55 2008 +0200 @@ -0,0 +1,85 @@ +module user.PopUp; +import tango.util.log.Trace; + +import dwt.dwthelper.utils; +import dwt.DWT; + +import dwt.layout.GridLayout; +import dwt.layout.GridData; + +import dwt.graphics.Image; + +import dwt.widgets.Text; +import dwt.widgets.Control; +import dwt.widgets.Composite; +import dwt.widgets.Group; +import dwt.widgets.Display; +import dwt.widgets.Shell; +import dwt.widgets.Listener; +import dwt.widgets.Event; +import dwt.widgets.Button; + +import dwtx.jface.dialogs.PopupDialog; + +import dwtx.jface.window.ApplicationWindow; + +class App : ApplicationWindow { + + this(){ + super(null); + setBlockOnOpen(true); + } + protected override Control createContents(Composite parent) { + Composite comp = cast(Composite)super.createContents(parent); + getShell().setText("Test PopupDialog"); + + comp.setLayout(new GridLayout(1, false)); + + + auto btn = new Button( comp, DWT.PUSH ); + btn.addListener( DWT.Selection, dgListener( & doBtn1 )); + btn.setText( "Btn 1" ); + return comp; + } + void doBtn1( Event e ){ + Trace.formatln( "btn1"); + auto pu = new PopupDialog( + getShell(), + PopupDialog.HOVER_SHELLSTYLE , + true, + true, + true, + true, + true, + "Title", + "Info line..."); + pu.open(); + } + void doBtn2( Event e ){ + Trace.formatln( "btn1"); + auto pu = new PopupDialog( + getShell(), + PopupDialog.HOVER_SHELLSTYLE, + false, + true, + true, + true, + true, + "Title", + "Text\non the other line..."); + pu.open(); + } + +} + + + +void main(){ + auto d = new Display(); + auto app = new App(); + app.open(); +} + + + +