|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Re: TreeViewer setInput error [message #662300 is a reply to message #662294] |
Wed, 30 March 2011 07:25 |
Thomas Schindl Messages: 6651 Registered: July 2009 |
Senior Member |
|
|
> import java.util.Set;
>
> import org.eclipse.core.databinding.observable.IObservable;
> import org.eclipse.core.databinding.observable.Realm;
> import org.eclipse.core.databinding.observable.list.IObservableList ;
> import org.eclipse.core.databinding.observable.map.IMapChangeListen er;
> import org.eclipse.core.databinding.observable.map.IObservableMap;
> import org.eclipse.core.databinding.observable.map.MapChangeEvent;
> import org.eclipse.core.databinding.observable.masterdetail.IObserv ableFactory;
> import org.eclipse.core.databinding.observable.set.IObservableSet;
> import org.eclipse.emf.databinding.EMFProperties;
> import org.eclipse.emf.databinding.FeaturePath;
> import org.eclipse.emf.databinding.IEMFListProperty;
> import org.eclipse.jface.databinding.swt.SWTObservables;
> import org.eclipse.jface.databinding.viewers.ObservableListTreeCont entProvider;
> import org.eclipse.jface.databinding.viewers.TreeStructureAdvisor;
> import org.eclipse.jface.viewers.LabelProviderChangedEvent;
> import org.eclipse.jface.viewers.StyledCellLabelProvider;
> import org.eclipse.jface.viewers.StyledString;
> import org.eclipse.jface.viewers.TreeViewer;
> import org.eclipse.jface.viewers.ViewerCell;
> import org.eclipse.swt.SWT;
> import org.eclipse.swt.layout.FillLayout;
> import org.eclipse.swt.widgets.Composite;
> import org.eclipse.swt.widgets.Display;
> import org.eclipse.swt.widgets.Shell;
>
> import wtpdb.WtpdbFactory;
> import wtpdb.WtpdbPackage;
> import wtpdb.p6group;
> import wtpdb.p6item;
> import wtpdb.wtpbase;
>
>
> public class TestApp {
>
> private TreeViewer init(Composite parent, wtpbase wtpBaseMain) {
> TreeViewer viewer = new TreeViewer(parent);
> ObservableListTreeContentProvider cp = new ObservableListTreeContentProvider(
> new TreeFactoryImpl(), new TreeStructureAdvisorImpl());
> viewer.setContentProvider(cp);
>
> IObservableSet set = cp.getKnownElements();
>
> IObservableMap[] map = new IObservableMap[1];
> map[0] = EMFProperties.value(WtpdbPackage.Literals.P6GROUP__NAME)
> .observeDetail(set);
> /*map[1] = EMFProperties.value(
> FeaturePath.fromList(WtpdbPackage.Literals.P6GROUP__ITEMS,
> WtpdbPackage.Literals.P6ITEM__NAME)).observeDetail(set);
> map[2] = EMFProperties.value(
> FeaturePath.fromList(WtpdbPackage.Literals.P6GROUP__ITEMS,
> WtpdbPackage.Literals.P6ITEM__MEASURE)).observeDetail(
> set);
> map[3] = EMFProperties.value(
> FeaturePath.fromList(WtpdbPackage.Literals.P6GROUP__ITEMS,
> WtpdbPackage.Literals.P6ITEM__LIMIT))
> .observeDetail(set);
> map[4] = EMFProperties.value(
> FeaturePath.fromList(WtpdbPackage.Literals.P6GROUP__ITEMS,
> WtpdbPackage.Literals.P6ITEM__TAXRATE)).observeDetail(
> set);*/
>
> viewer.setLabelProvider(new TreeLabelProviderImpl(map));
>
> IEMFListProperty groups = EMFProperties
> .list(WtpdbPackage.Literals.WTPBASE__GROUPS);
> viewer.setInput(groups.observe(wtpBaseMain));
>
> return viewer;
>
> }
>
> public static void main(String[] args) {
> final Display d = new Display();
> Realm.runWithDefault(SWTObservables.getRealm(d), new Runnable() {
>
> @Override
> public void run() {
> Shell s = new Shell();
> s.setLayout(new FillLayout());
>
> TestApp t = new TestApp();
> wtpbase wtpBaseMain = WtpdbFactory.eINSTANCE.createwtpbase();
> p6group g = WtpdbFactory.eINSTANCE.createp6group();
> g.setName("Bla Bla");
> wtpBaseMain.getGroups().add(g);
> t.init(s, wtpBaseMain);
>
> s.open();
>
> while( ! s.isDisposed() ) {
> if( ! d.readAndDispatch() ) {
> d.sleep();
> }
> }
> }
> });
>
> d.dispose();
> }
>
>
>
> private static class TreeFactoryImpl implements IObservableFactory {
>
> private IEMFListProperty multi = EMFProperties
> .multiList(WtpdbPackage.Literals.P6GROUP__ITEMS);
>
> @Override
> public IObservable createObservable(final Object target) {
> if (target instanceof IObservableList) {
> return (IObservable) target;
> } else if (target instanceof p6group) {
> return multi.observe(target);
> }
> return null;
> }
>
> }
>
> private static class TreeStructureAdvisorImpl extends TreeStructureAdvisor {
> /*
> * @Override public Object getParent(Object element) { if(element
> * instanceof p6item) return ((p6item)element) }
> */
>
> @Override
> public Boolean hasChildren(Object element) {
> if (element instanceof p6group
> && ((p6group) element).getItems().size() > 0) {
> return Boolean.TRUE;
> }
> return super.hasChildren(element);
> }
> }
>
> private class TreeLabelProviderImpl extends StyledCellLabelProvider {
> private IMapChangeListener mapChangeListener = new IMapChangeListener() {
> public void handleMapChange(MapChangeEvent event) {
> Set<?> affectedElements = event.diff.getChangedKeys();
> if (!affectedElements.isEmpty()) {
> LabelProviderChangedEvent newEvent = new LabelProviderChangedEvent(
> TreeLabelProviderImpl.this,
> affectedElements.toArray());
> fireLabelProviderChanged(newEvent);
> }
> }
> };
>
> public TreeLabelProviderImpl(IObservableMap... attributeMaps) {
> for (int i = 0; i < attributeMaps.length; i++) {
> attributeMaps[i].addMapChangeListener(mapChangeListener);
> }
> }
>
> @Override
> public String getToolTipText(Object element) {
> return "#dummy#";
> }
>
> @Override
> public void update(ViewerCell cell) {
> if (cell.getElement() instanceof p6group) {
> p6group group = (p6group) cell.getElement();
>
> StyledString styledString = new StyledString(
> group.getName() != null ? group.getName() : "noname",
> null);
> String decoration = " (" + group.getItems().size() + " Items)";
> styledString.append(decoration, StyledString.COUNTER_STYLER);
> cell.setText(styledString.getString());
> // cell.setImage(groupImage);
> cell.setStyleRanges(styledString.getStyleRanges());
> } else if (cell.getElement() instanceof p6item) {
> p6item item = ((p6item) cell.getElement());
> String value = "*noname*";
> if (item != null) {
> value = item.getName() + " | " + item.getMeasure() + " | "
> + item.getLimit() + " | " + item.getTaxrate();
> }
> StyledString styledString = new StyledString(value, null);
> cell.setText(styledString.getString());
> cell.setForeground(cell.getControl().getDisplay()
> .getSystemColor(SWT.COLOR_DARK_GRAY));
> // cell.setImage(groupItemImage);
> cell.setStyleRanges(styledString.getStyleRanges());
> }
> }
> }
> }
Am 30.03.11 00:14, schrieb Alex:
> Sorry, i can't see attached code :(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|