I’ve talked a lot (1,2,3,4) lately about my progress on QxWT towards release 1.0.0.2. Now that all the codeing is done more or less I can restart working on my master plan:
Single APIing for Web and Desktop programing use Eclipse Libraries like Eclipse Databinding – In short UFaceKit
Having completed the SWT-Port more or less since some time, having portotype implementations for Qt and Swing (to check if the concept can be transfer easily to other Desktop-UI-Frameworks) the missing thing is a port for a Web-UI-Framework.
The problem is in the Web/GWT-UI space that GWT itself comes with a very restricted UI library missing important things like Table/TreeTables for example and one needs an external framework. I couldn’t find a framework that fully satisfied my needs (most important a clear, reliable license scheme allowing me to use it in commercial applications) so I started my work on QxWT and now that this framework enters in a stable phase I can once more shift sources back to UFaceKit.
To get to a first UFaceKit-Webport I have the following workitems:
- Done: Eclipse Databinding 3.5.2 for GWT – (no builds until Eclipse 3.5.2 itself is declared)
- In progress: UFaceKit-Viewers for QxWT-Structured-Controls – this gives automagically support for ufacekit-viewers-databinding because UFaceKit-Viewers are split in generic and widget-toolkit parts and ufacekit-viewers-databinding only talks to the generic part
- Not started: UFaceKit-Wrapper for QxWT – the thoughest thing might be to write write the native layouts
As the blog title suggests I’ve made good progress today and I can show off the first demo results from this work. The implementations are not finished yet but for people who are familiar with JFace-Viewers lines like the following might look familiar (beside the obvious Java5 features of UFaceKit-Viewers):
/**
* Combo Viewer Setup
*/
ComboViewer<Person, Collection<Person>> viewer = new ComboViewer<Person, Collection<Person>>();
viewer.setContentProvider(new CollectionContentProvider<Person>());
viewer.setLabelConverter(new LabelConverter<Person>() {
@Override
public String getText(Person element) {
return element.getFirstname() + ", " + element.getLastname();
}
});
Collection<Person> ps = new ArrayList<Person>();
for (int i = 0; i < 300; i++) {
ps.add(new Person("First " + i, "Last" + i, i));
}
viewer.setInput(ps);
/**
* TableViewerSetup
*/
TableViewer<Person, Collection<Person>> tableViewer = new TableViewer<Person, Collection<Person>>();
tableViewer.setContentProvider(new CollectionContentProvider<Person>());
TableViewerColumn<Person> col = new TableViewerColumn<Person>(tableViewer, "Firstname");
col.setLabelConverter(new LabelConverter<Person>() {
@Override
public String getText(Person element) {
return element.getFirstname();
}
});
// ...
Collection<Person> ps = new ArrayList<Person>();
for (int i = 0; i < 300; i++) {
ps.add(new Person("First " + i, "Last" + i, i));
}
tableViewer.setInput(ps);
/**
* TreeViewer setup
*/
TreeViewer<Person, Collection<Person>> viewer = new TreeViewer<Person, Collection<Person>>();
viewer.setLabelConverter(new LabelConverter<Person>() {
@Override
public String getText(Person element) {
return element.getLastname() + ", " + element.getFirstname() + " ("+ element.getAge() + " years)";
}
});
viewer.setContentProvider(new ITreeContentProvider<Person, Collection<Person>>() {
public Collection<Person> getChildren(Person parentElement) {
return parentElement.getChildren();
}
public Person getParent(Person element) {
return element.getParent();
}
public boolean hasChildren(Person element) {
return element.getChildren().size() > 0;
}
public void dispose() {
}
public Collection<Person> getElements(Collection<Person> inputElement) {
return inputElement;
}
public void inputChanged(IViewer<Person> viewer, Collection<Person> oldInput, Collection<Person> newInput) {
}
});
viewer.setInput(setupData());
I’d like to point out once more that UFaceKit is structured in a way that you can use all parts independently from each other. So if you are in need to a Databinding-Framework for GWT and a light weight Domain-Technology like UBean then you can use them, you only need Java5 ready viewers for SWT and Databinding integration, … all of them are useable standalone with minimal dependencies.
Beside that I’m still struggeling with setting up a build for the SWT-Port on the Eclipse-Servers so that people can start consume stuff from there but that’s a problem many small project suffer.
