jface.snippets.Snippet040 : CellEditor is forward referenced when looking for 'LayoutData'
yidabu
yidabu.spam at gmail.com
Sun May 18 23:08:55 PDT 2008
compile time error on port jface.snippets.Snippet040TableViewerSorting :
CellEditor.d(47): class dwtx.jface.viewers.CellEditor.CellEditor is forward referenced when looking for 'LayoutData'
ColumnViewerEditor.d(631): Error: no property 'LayoutData' for type 'dwtx.jface.viewers.CellEditor.CellEditor'
ColumnViewerEditor.d(631): Error: CellEditor.LayoutData is used as a type
ColumnViewerEditor.d(631): Error: cannot have parameter of type void
code:
/*******************************************************************************
* 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;
/**
* Example usage of ViewerComparator in tables to allow sorting
*
* @author Tom Schindl <tom.schindl at bestsolution.at>
*
*/
void main(String[] args)
{
Snippet040TableViewerSorting.main(args);
}
public class Snippet040TableViewerSorting {
private class MyContentProvider : IStructuredContentProvider {
public Object[] getElements(Object inputElement) {
return cast (Person[]) inputElement;
}
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 boolean 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);
}
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 {
protected Object getValue(Object element) {
return (cast(Person) element).givenname;
}
protected void doSetValue(Object element, Object value) {
(cast(Person) element).givenname = value.toString();
}
});
ColumnViewerSorter cSorter = new class(v,column) ColumnViewerSorter {
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 {
protected Object getValue(Object element) {
return (cast(Person) element).surname;
}
protected void doSetValue(Object element, Object value) {
(cast(Person) element).surname = value.toString();
}
});
new class(v,column) ColumnViewerSorter {
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 {
protected Object getValue(Object element) {
return (cast(Person) element).email;
}
protected void doSetValue(Object element, Object value) {
(cast(Person) element).email = value.toString();
}
});
new class(v,column) ColumnViewerSorter {
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(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 at bestsolution.at");
elements[1] = new Person("Boris", "Bokowski",
"Boris_Bokowski at ca.ibm.com");
elements[2] = new Person("Tod", "Creasey", "Tod_Creasey at ca.ibm.com");
elements[3] = new Person("Wayne", "Beaton", "wayne at eclipse.org");
return elements;
}
private static 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) {
if( this.viewer.getComparator() !is null ) {
if( this.viewer.getComparator() == this ) {
int tdirection = this.direction;
if( tdirection == ASC ) {
setSorter(this, DESC);
} else if( tdirection == DESC ) {
setSorter(this, NONE);
}
} else {
setSorter(this, ASC);
}
} else {
setSorter(this, ASC);
}
}
});
}
public void setSorter(ColumnViewerSorter sorter, int direction) {
if( direction == 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 == ASC ) {
column.getColumn().getParent().setSortDirection(DWT.DOWN);
} else {
column.getColumn().getParent().setSortDirection(DWT.UP);
}
if( viewer.getComparator() == 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);
}
/**
* @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();
}
}
--
yidabu <yidabu.spam at gmail.com>
http://www.dsource.org/projects/dwin
D 语言-中文(D Chinese):
http://www.d-programming-language-china.org/
http://bbs.d-programming-language-china.org/
http://dwin.d-programming-language-china.org/
http://scite4d.d-programming-language-china.org/
More information about the Digitalmars-d-dwt
mailing list