/*******************************************************************************
* 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 java.util.HashMap;
import java.util.Map;
import org.eclipse.core.databinding.observable.Observables;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.nebula.widgets.grid.Grid;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.part.ViewPart;
import com.rcpcompany.uibindings.Constants;
import com.rcpcompany.uibindings.UIBindingsEMFObservables;
import com.rcpcompany.uibindings.grid.AbstractGridCell;
import com.rcpcompany.uibindings.grid.IGridBinding;
import com.rcpcompany.uibindings.grid.IGridCell;
import com.rcpcompany.uibindings.grid.IGridModel;
import com.rcpcompany.uibindings.grid.SimpleGridModel;
import com.rcpcompany.uibindings.tests.shop.Order;
import com.rcpcompany.uibindings.tests.shop.OrderItem;
import com.rcpcompany.uibindings.tests.shop.Shop;
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.IFormCreator;
/**
* The "Orders versus Shop Items" view.
*
* @author Tonny Madsen, The RCP Company
*/
public class OrdersShopItemsGridView extends ViewPart {
private IFormCreator myForm;
@Override
public void createPartControl(Composite parent) {
final Shop shop = ShopFactory.eINSTANCE.getShop(EditingDomainUtils.getEditingDomain());
myForm = IFormCreator.Factory.createScrolledForm(shop, parent, "Orders versus Shop Items");
final Grid g = new Grid(myForm.addComposite(true, true), SWT.NONE);
final IGridModel model = new SimpleGridModel(UIBindingsEMFObservables.observeList(myForm.getContext()
.getEditingDomain(), shop, ShopPackage.Literals.SHOP__SHOP_ITEMS),
UIBindingsEMFObservables.observeList(myForm.getContext().getEditingDomain(), shop,
ShopPackage.Literals.SHOP__ORDERS)) {
@Override
public IGridCell getCell(Object columnID, Object rowID) {
return new Cell(columnID, rowID);
}
};
IGridBinding.Factory.createGrid(myForm.getContext(), g, model);
myForm.finish();
IBindingContextSelectionProvider.Factory.adapt(myForm.getContext(), getSite());
IDnDSupport.Factory.installOn(myForm.getContext());
}
@Override
public void setFocus() {
myForm.setFocus();
}
/**
* Cell implementation for the grid model.
*/
protected class Cell extends AbstractGridCell<ShopItem, Order> {
public Cell(Object columnID, Object rowID) {
super(columnID, rowID);
}
@Override
public Map<String, Object> getArguments() {
switch (getCellType()) {
case COLUMN_HEADER:
return null;
case ROW_HEADER:
final Map<String, Object> map = new HashMap<String, Object>();
map.put(Constants.ARG_FEATURE_NAME, ShopPackage.Literals.ORDER__NO.getName());
return map;
case DATA:
final Map<String, Object> dataMap = new HashMap<String, Object>();
// dataMap.put(Constants.ARG_READONLY, true);
return dataMap;
default:
break;
}
return null;
}
@Override
public IObservableValue getValue() {
switch (getCellType()) {
case COLUMN_HEADER:
return Observables.constantObservableValue(getColumnItem(), getColumnItem().eClass());
case ROW_HEADER:
return Observables.constantObservableValue(getRowItem(), getRowItem().eClass());
case DATA:
// Both myItem and myCustomer non-null!!!
// TODO: make this dynamic with new IOV
for (final OrderItem oi : getRowItem().getItems()) {
if (oi.getItem() == getColumnItem())
return UIBindingsEMFObservables.observeValue(null, myForm.getContext().getEditingDomain(), oi,
ShopPackage.Literals.ORDER_ITEM__COUNT);
}
return Observables.constantObservableValue(SWTObservables.getRealm(Display.getCurrent()), null,
String.class);
default:
break;
}
return null;
}
@Override
public void dispose() {
// TODO Auto-generated method stub
}
}
}