/******************************************************************************* * 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.list.IObservableList; import org.eclipse.core.databinding.observable.list.WritableList; import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.core.databinding.observable.value.WritableValue; import org.eclipse.emf.databinding.EMFObservables; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EcorePackage; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.ui.part.ViewPart; import com.rcpcompany.uibindings.Constants; import com.rcpcompany.uibindings.IBindingContext; import com.rcpcompany.uibindings.IColumnBinding; import com.rcpcompany.uibindings.IValueBinding; import com.rcpcompany.uibindings.observables.CountObservableValue; import com.rcpcompany.uibindings.tests.shop.ShopFactory; import com.rcpcompany.uibindings.tests.shop.ShopItem; 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; import com.rcpcompany.uibindings.utils.IFormChooser; import com.rcpcompany.uibindings.utils.IFormChooserCreator; import com.rcpcompany.uibindings.utils.IFormCreator; import com.rcpcompany.uibindings.utils.ITableCreator; /** * The inventory view. * * @author Tonny Madsen, The RCP Company */ public class InventoryView extends ViewPart { private Table myTable; private IFormCreator myForm; @Override public void createPartControl(Composite parent) { myForm = IFormCreator.Factory.createScrolledForm( ShopFactory.eINSTANCE.getShop(EditingDomainUtils.getEditingDomain()), parent, "Inventory"); final ITableCreator table = myForm.addTableCreator(ShopPackage.Literals.SHOP__SHOP_ITEMS, true, ITableCreator.FILTER | ITableCreator.RESIZE); table.addColumn("name(w=20em)"); table.addColumn("forSale(w=2em)"); table.addColumn("group(w=10em)"); table.addColumn("price(w=10em)"); table.addColumn("properties{name='type': value}(w=10em,label='Type')"); final IFormCreator pSection = myForm.addSection("Properties", table.getBinding().getSingleSelection()); final ITableCreator pTable = pSection.addTableCreator(ShopPackage.Literals.SHOP_ITEM__PROPERTIES, true, ITableCreator.FILTER | ITableCreator.RESIZE); pTable.addColumn("name(w=20em)"); pTable.addColumn("value(w=20em)"); final IObservableFactory usesFactory = new IObservableFactory() { @Override public IObservable createObservable(Object target) { final ShopItem si = (ShopItem) target; return new CountObservableValue(EMFObservables.observeList(si, ShopPackage.Literals.SHOP_ITEM__ORDER_ITEMS)); } }; final IColumnBinding orders = table.addColumn("__NONE__(w=10em,a=r,label='Orders')") .model(usesFactory, EcorePackage.Literals.EINT).readonly(); // table.addColumn("information(w=16em,ww=200)").dynamic(); myForm.addField(orders.getColumnVisibility(), SWT.NONE).label("Show Orders"); final IFormCreator detailsForm = myForm.addSection("Details", table.getBinding().getSingleSelection()); detailsForm.addObjectMessages(); detailsForm.addField("name(w=20em)"); detailsForm.addField("forSale(w=4em)"); detailsForm.addField("group(w=10em)"); detailsForm.addField("price(w=10em)"); // final IValueBinding advPriceBinding = UIBXtextUtils.createEditorBinding(detailsForm, // "advancedPrice", // getXTextInjectorModule()); // final Composite c = (Composite) advPriceBinding.getControl(); // final TableWrapData layoutData = (TableWrapData) c.getLayoutData(); detailsForm.addField("properties{name='type': value}(w=10em,label='Type')"); final IObservableList list = WritableList.withElementType(EClass.class); list.add(ShopPackage.Literals.SHOP_ITEM_DESCRIPTION); list.add(ShopPackage.Literals.SHOP_ITEM_URL); final IValueBinding discriminant = detailsForm.addField("information") .arg(Constants.ARG_PREFERRED_CONTROL, CCombo.class.getName()).type("eobjectCreator").validValues(list); final IFormChooser chooser = myForm.addFormChooser(discriminant); chooser.addFormEClass(ShopPackage.Literals.SHOP_ITEM_DESCRIPTION, new IFormChooserCreator() { @Override public void createForm(IBindingContext context, IObservableValue discriminant, Composite parent) { final IFormCreator sub = detailsForm.subForm(parent); final IObservableValue subValue = new WritableValue(discriminant.getValue(), ShopPackage.Literals.SHOP_ITEM_DESCRIPTION); sub.addField(subValue, "description"); sub.finish(); } }); chooser.addFormEClass(ShopPackage.Literals.SHOP_ITEM_URL, new IFormChooserCreator() { @Override public void createForm(IBindingContext context, IObservableValue discriminant, Composite parent) { final IFormCreator sub = myForm.subForm(parent); final IObservableValue subValue = new WritableValue(discriminant.getValue(), ShopPackage.Literals.SHOP_ITEM_URL); sub.addField(subValue, "url(label='URL')"); sub.finish(); } }); myForm.finish(); IBindingContextSelectionProvider.Factory.adapt(myForm.getContext(), getSite()); IDnDSupport.Factory.installOn(myForm.getContext()); } @Override public void setFocus() { myForm.setFocus(); } }