package de.urszeidler.shr5.ecp.editor.pages.character;
import java.util.Collection;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.wb.swt.ResourceManager;
import de.urszeidler.eclipse.shr5.AbstraktGegenstand;
import de.urszeidler.eclipse.shr5.AbstraktPersona;
import de.urszeidler.eclipse.shr5.Fahrzeug;
import de.urszeidler.eclipse.shr5.KoerperPersona;
import de.urszeidler.eclipse.shr5.Koerpermods;
import de.urszeidler.eclipse.shr5.Quelle;
import de.urszeidler.eclipse.shr5.Vertrag;
import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil;
import de.urszeidler.eclipse.shr5Management.ManagedCharacter;
import de.urszeidler.eclipse.shr5Management.Pack;
import de.urszeidler.eclipse.shr5Management.Shr5managementFactory;
import de.urszeidler.eclipse.shr5Management.Shr5managementPackage;
import de.urszeidler.emf.commons.ui.dialogs.OwnChooseDialog;
import de.urszeidler.emf.commons.ui.util.EmfFormBuilder.ReferenceManager;
import de.urszeidler.emf.commons.ui.util.NullObject;
import de.urszeidler.shr5.ecp.editor.ShrReferenceManager;
import de.urszeidler.shr5.ecp.editor.actions.ActionM2TDialog;
import de.urszeidler.shr5.ecp.editor.pages.AbstractShr5Page;
import de.urszeidler.shr5.ecp.editor.widgets.TreeTableWidget;
import de.urszeidler.shr5.ecp.util.ShadowrunEditingTools;
/**
* This is a basic generic page to display eObjects in an form with an
* emfformbilder.
*/
public class ManagedCharacterPage extends AbstractShr5Page<ManagedCharacter> {
private DataBindingContext m_bindingContext;
protected ManagedCharacter object;
protected EditingDomain editingDomain;
// protected ReferenceManager mananger;
// protected EmfFormBuilder emfFormBuilder;
public ManagedCharacterPage(String id, String title) {
super(id, title);
}
public ManagedCharacterPage(FormEditor editor, String id, String title) {
super(editor, id, title);
object = Shr5managementFactory.eINSTANCE.createPlayerCharacter();
}
/**
* This is the main constructor usable for the editor.
*
* @param editor
* @param id
* @param title
* @param object
* the object to display
* @param editingDomain
* the main edting domain
* @param manager
* the mananger for refrenece features
*/
public ManagedCharacterPage(FormEditor editor, String id, String title, ManagedCharacter object, EditingDomain editingDomain,
ReferenceManager manager) {
super(editor, id, title);
this.object = object;
this.editingDomain = editingDomain;
this.mananger = manager;
}
// @Override
// public void dispose() {
// if (emfFormBuilder != null)
// emfFormBuilder.dispose();
// super.dispose();
// }
// /**
// * Simple Factory method to create the formbuilder.
// *
// * @param managedForm
// */
// protected void createFormBuilder(IManagedForm managedForm) {
// emfFormBuilder = new EmfFormBuilder(managedForm.getToolkit(), AdapterFactoryUtil.getInstance().getItemDelegator(), AdapterFactoryUtil
// .getInstance().getLabelProvider(), editingDomain);
// emfFormBuilder.setManager(mananger);
// emfFormBuilder.setBorderStyle(SWT.NONE);
//
// }
/**
* Create contents of the form.
*
* @param managedForm
*/
@Override
protected void createFormContent(IManagedForm managedForm) {
FormToolkit toolkit = managedForm.getToolkit();
final ScrolledForm form = managedForm.getForm();
form.setText(AdapterFactoryUtil.getInstance().getLabelProvider().getText(object));
Composite body = form.getBody();
toolkit.decorateFormHeading(form.getForm());
form.getToolBarManager().add(new ActionM2TDialog(form.getShell(), object));
// form.getToolBarManager().add(new ExportObjectAction(form.getShell(), object));
form.getToolBarManager().update(true);
toolkit.paintBordersFor(body);
managedForm.getForm().getBody().setLayout(new GridLayout(1, false));
Group grpAllgemein = new Group(managedForm.getForm().getBody(), SWT.NONE);
grpAllgemein.setLayout(new GridLayout(2, true));
grpAllgemein.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
grpAllgemein.setText("Allgemein");
managedForm.getToolkit().adapt(grpAllgemein);
managedForm.getToolkit().paintBordersFor(grpAllgemein);
Composite composite_left = new Composite(grpAllgemein, SWT.NONE);
composite_left.setLayout(new GridLayout(3, false));
composite_left.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
managedForm.getToolkit().adapt(composite_left);
managedForm.getToolkit().paintBordersFor(composite_left);
Composite composite_right = new Composite(grpAllgemein, SWT.NONE);
composite_right.setLayout(new GridLayout(3, false));
composite_right.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));
managedForm.getToolkit().adapt(composite_right);
managedForm.getToolkit().paintBordersFor(composite_right);
Composite composite = new Composite(managedForm.getForm().getBody(), SWT.NONE);
composite.setLayout(new FillLayout(SWT.HORIZONTAL));
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
managedForm.getToolkit().adapt(composite);
managedForm.getToolkit().paintBordersFor(composite);
TreeTableWidget treeTableWidgetInventar = new TreeTableWidget(composite,
featureName(Shr5managementPackage.Literals.MANAGED_CHARACTER__INVENTAR), SWT.NONE, object,
Shr5managementPackage.Literals.MANAGED_CHARACTER__INVENTAR, toolkit, mananger, editingDomain, this,this);
managedForm.getToolkit().adapt(treeTableWidgetInventar);
managedForm.getToolkit().paintBordersFor(treeTableWidgetInventar);
// we use the toolbar for the packs to add
ToolBar optionalToolbar = treeTableWidgetInventar.getOptionalToolbar();
optionalToolbar.setVisible(true);
ToolItem toolItem = new ToolItem(optionalToolbar, SWT.PUSH);
toolItem.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/add_pack_action.gif"));
toolItem.setToolTipText("Adds a pack to the character.");
toolItem.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if (mananger instanceof ShrReferenceManager) {
ShrReferenceManager srm = (ShrReferenceManager)mananger;
Collection<EObject> collection = ItemPropertyDescriptor.getReachableObjectsOfType(object, Shr5managementPackage.Literals.PACK);
collection = srm.filterProvidedObjects(collection);
// collection = FluentIterable.from(collection).filter(
// Predicates.or(Predicates.instanceOf(AbstraktGegenstand.class), Predicates.instanceOf(Vertrag.class))).toList();
OwnChooseDialog dialog = new OwnChooseDialog(getEditorSite().getShell(), NullObject.toChoises(collection), "Select a pack", "");
dialog.setLabelProvider(AdapterFactoryUtil.getInstance().getLabelProvider());
// dialog.setContenProvider(new SimpleListContenProvider(new AdapterFactoryContentProvider(AdapterFactoryUtil.getInstance()
// .getAdapterFactory())));
int result = dialog.open();
if (result == Window.OK) {
Object[] list = dialog.getResult();
if (list != null && list.length == 1 && list[0] instanceof EObject) {
EObject eo = (EObject)list[0];
if (eo instanceof Pack) {
Pack p = (Pack)eo;
EList<Quelle> items = p.getItems();
for (Quelle item : items) {
EObject copy = ShrReferenceManager.copyWithParentId(item);
if (item instanceof AbstraktGegenstand) {
object.getInventar().add((AbstraktGegenstand)copy);
} else if (item instanceof Vertrag) {
object.getContracts().add((Vertrag)copy);
} else if (item instanceof Fahrzeug) {
object.getVehicels().add((Fahrzeug)copy);
} else if (item instanceof Koerpermods) {
AbstraktPersona persona = object.getPersona();
((KoerperPersona) persona).getKoerperMods().add((Koerpermods)copy);
}
}
}
}
}
}
}
});
Composite composite_1 = new Composite(composite, SWT.NONE);
managedForm.getToolkit().adapt(composite_1);
managedForm.getToolkit().paintBordersFor(composite_1);
composite_1.setLayout(new FillLayout(SWT.VERTICAL));
TreeTableWidget treeTableWidgetConnections = new TreeTableWidget(composite_1,
featureName(Shr5managementPackage.Literals.MANAGED_CHARACTER__CONNECTIONS), SWT.NONE, object,
Shr5managementPackage.Literals.MANAGED_CHARACTER__CONNECTIONS, toolkit, mananger, editingDomain, this,this);
managedForm.getToolkit().adapt(treeTableWidgetConnections);
managedForm.getToolkit().paintBordersFor(treeTableWidgetConnections);
TreeTableWidget treeTableWidget_1 = new TreeTableWidget(composite_1,
featureName(Shr5managementPackage.Literals.MANAGED_CHARACTER__CONTRACTS), SWT.NONE, object,
Shr5managementPackage.Literals.MANAGED_CHARACTER__CONTRACTS, toolkit, mananger, editingDomain, this,this);
managedForm.getToolkit().adapt(treeTableWidget_1);
managedForm.getToolkit().paintBordersFor(treeTableWidget_1);
TreeTableWidget treeTableWidget = new TreeTableWidget(composite_1, featureName(Shr5managementPackage.Literals.MANAGED_CHARACTER__VEHICELS),
SWT.NONE, object, Shr5managementPackage.Literals.MANAGED_CHARACTER__VEHICELS, toolkit, mananger, editingDomain, this,this);
managedForm.getToolkit().adapt(treeTableWidget);
managedForm.getToolkit().paintBordersFor(treeTableWidget);
m_bindingContext = initDataBindings();
// +++++
createFormBuilder(managedForm);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MANAGED_CHARACTER__SEX, composite_left);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MANAGED_CHARACTER__NATIVE_LANGUAGE, composite_left);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MANAGED_CHARACTER__CHOOSEN_LIFESTYLE, composite_left);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MANAGED_CHARACTER__DATEOFBIRTH, composite_left, new DateEntryFactory(toolkit));
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MANAGED_CHARACTER__KARMA_GAINT, composite_right, labelEntryFactory);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MANAGED_CHARACTER__CURRENT_KARMA, composite_right, labelEntryFactory);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MANAGED_CHARACTER__NOTORIETY, composite_right, labelEntryFactory);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MANAGED_CHARACTER__HEIGHT, composite_right);
emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.MANAGED_CHARACTER__WEIGHT, composite_right);
emfFormBuilder.buildinComposite(m_bindingContext, managedForm.getForm().getBody(), object);
managedForm.reflow(true);
}
private String featureName(EStructuralFeature feature) {
return ShadowrunEditingTools.toFeatureName(object, feature);
}
protected DataBindingContext initDataBindings() {
DataBindingContext bindingContext = new DataBindingContext();
//
return bindingContext;
}
// @Override
// public void doubleClick(DoubleClickEvent event) {
// ISelection selection = event.getSelection();
// ShadowrunEditingTools.openEditorForFirstSelection(selection);
// }
@Override
protected EditingDomain getEditingDomain() {
return editingDomain;
}
}