/******************************************************************************* * Copyright (c) 2006-2013 The RCP Company 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: * The RCP Company - initial API and implementation *******************************************************************************/ package com.rcpcompany.uibindings.shop.views; import org.eclipse.core.databinding.observable.IObservable; import org.eclipse.core.databinding.observable.Observables; import org.eclipse.core.databinding.observable.list.IObservableList; import org.eclipse.core.databinding.observable.list.WritableList; import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory; import org.eclipse.emf.ecore.EcorePackage; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.ui.part.ViewPart; import com.rcpcompany.uibindings.IBindingContext; import com.rcpcompany.uibindings.IColumnBinding; import com.rcpcompany.uibindings.IViewerBinding; import com.rcpcompany.uibindings.SpecialBinding; import com.rcpcompany.uibindings.UIBindingsEMFObservables; import com.rcpcompany.uibindings.moao.IMOAOPackage; import com.rcpcompany.uibindings.tests.shop.Contact; import com.rcpcompany.uibindings.tests.shop.Shop; import com.rcpcompany.uibindings.tests.shop.ShopFactory; import com.rcpcompany.uibindings.tests.shop.ShopPackage; import com.rcpcompany.uibindings.utils.EditingDomainUtils; import com.rcpcompany.uibindings.utils.IBindingContextSelectionProvider; import com.rcpcompany.uibindings.utils.IDnDSupport; public class ShopTreeView extends ViewPart { private Tree myTree; private TreeColumn myTreeColumn; private TreeColumn myNameColumn; private IBindingContext myContext; private IViewerBinding myTreeBinding; private IColumnBinding myTreeColumnBinding; private IColumnBinding myNameColumnBinding; @Override public void createPartControl(Composite parent) { myContext = IBindingContext.Factory.createContext(parent); myTree = new Tree(parent, SWT.SINGLE | SWT.FULL_SELECTION); myTree.setHeaderVisible(true); myTreeColumn = new TreeColumn(myTree, SWT.LEAD); myTreeColumn.setWidth(300); myNameColumn = new TreeColumn(myTree, SWT.LEAD); myNameColumn.setText("Detail"); myNameColumn.setWidth(100); final IObservableList list = WritableList.withElementType(ShopPackage.Literals.SHOP); list.add(ShopFactory.eINSTANCE.getShop(EditingDomainUtils.getEditingDomain())); myTreeBinding = myContext.addViewer().viewer(myTree).model(list); myTreeColumnBinding = myTreeBinding.addColumn().column(myTreeColumn).model(SpecialBinding.TREE_ITEM); final IObservableFactory factory = new IObservableFactory() { @Override public IObservable createObservable(Object target) { if (target instanceof Shop) { final Shop shop = (Shop) target; return UIBindingsEMFObservables.observeValue(shop, IMOAOPackage.Literals.NAMED_OBJECT__NAME); } if (target instanceof Contact) { final Contact c = (Contact) target; return UIBindingsEMFObservables.observeValue(c, ShopPackage.Literals.CONTACT__COUNTRY); } return Observables.constantObservableValue("", EcorePackage.Literals.ESTRING); } }; myNameColumnBinding = myTreeBinding.addColumn().column(myNameColumn).dynamic() .model(factory, EcorePackage.Literals.EJAVA_OBJECT); myContext.finish(); IBindingContextSelectionProvider.Factory.adapt(myContext, getSite()); IDnDSupport.Factory.installOn(myContext); } @Override public void setFocus() { myTree.setFocus(); } }