/** * */ package de.urszeidler.shr5.runtime.ui.editor.pages; import java.util.Map.Entry; import java.util.Set; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.UpdateValueStrategy; import org.eclipse.core.databinding.conversion.IConverter; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.emf.databinding.EMFObservables; import org.eclipse.emf.databinding.EMFUpdateValueStrategy; import org.eclipse.emf.databinding.FeaturePath; import org.eclipse.emf.databinding.edit.EMFEditProperties; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator; import org.eclipse.emf.edit.provider.ComposedAdapterFactory; import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory; import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory; import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.databinding.swt.ISWTObservableValue; import org.eclipse.jface.databinding.swt.IWidgetValueProperty; import org.eclipse.jface.databinding.swt.WidgetProperties; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; 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.Label; import org.eclipse.swt.widgets.ToolBar; 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.ui.forms.widgets.TableWrapData; import org.eclipse.ui.forms.widgets.TableWrapLayout; import de.urszeidler.eclipse.shr5.AbstraktPersona; import de.urszeidler.eclipse.shr5.KoerperPersona; import de.urszeidler.eclipse.shr5.Shr5Package; import de.urszeidler.eclipse.shr5.gameplay.util.GameplayAdapterFactory; import de.urszeidler.eclipse.shr5.runtime.ExtendetData; import de.urszeidler.eclipse.shr5.runtime.RuntimeCharacter; import de.urszeidler.eclipse.shr5.runtime.RuntimeFactory; import de.urszeidler.eclipse.shr5.runtime.RuntimePackage; import de.urszeidler.eclipse.shr5.runtime.RuntimePackage.Literals; import de.urszeidler.eclipse.shr5.runtime.util.RuntimeAdapterFactory; import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil; import de.urszeidler.eclipse.shr5Management.Shr5managementPackage; import de.urszeidler.eclipse.shr5Management.util.Shr5managementAdapterFactory; import de.urszeidler.emf.commons.ui.util.EmfFormBuilder.ReferenceManager; import de.urszeidler.shr5.ecp.binding.PathToImageConverter; import de.urszeidler.shr5.ecp.editor.actions.OpenCharacterByRuntimeEditorAction; import de.urszeidler.shr5.ecp.editor.pages.AbstractShr5Page; import de.urszeidler.shr5.ecp.editor.pages.Messages; import de.urszeidler.shr5.ecp.editor.widgets.PersonaUIToolkit; import de.urszeidler.shr5.runtime.ui.widgets.DamageStateValueProperty; import de.urszeidler.shr5.runtime.ui.widgets.StateMonitorWidget; import de.urszeidler.shr5.runtime.ui.widgets.StateMonitorWidget.MonitorType; /** * @author urs */ public class RuntimeCharacterPage extends AbstractShr5Page<RuntimeCharacter> { private RuntimeCharacter object; private EditingDomain editingDomain; private DataBindingContext m_bindingContext; private Label lblName; private Label lblImage; private StateMonitorWidget stateMonitorWidgetPhysical; private StateMonitorWidget stateMonitorWidgetMental; private StateMonitorWidget stateMonitorWidgetOverDead; private AdapterFactoryContentProvider actionListContentProvider; private ComposedAdapterFactory adapterFactory; private AdapterFactoryItemDelegator itemDelegator; private StateMonitorWidget stateMonitorWidgetUsedEdge; // private Text formText; /** * Create the form page. * * @param editor * @param id * @param title * @wbp.parser.constructor * @wbp.eval.method.parameter id "Some id" * @wbp.eval.method.parameter title "Some title" */ public RuntimeCharacterPage(FormEditor editor, String id, String title) { super(editor, id, title); this.object = RuntimeFactory.eINSTANCE.createRuntimeCharacter(); } public RuntimeCharacterPage(FormEditor editor, String id, String title, RuntimeCharacter object, EditingDomain editingDomain, ReferenceManager manager) { super(editor, id, title, manager); this.object = object; this.editingDomain = editingDomain; } /** * Create contents of the form. * * @param managedForm */ @Override protected void createFormContent(IManagedForm managedForm) { adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE); adapterFactory.addAdapterFactory(new GameplayAdapterFactory()); adapterFactory.addAdapterFactory(new RuntimeAdapterFactory()); adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory()); // adapterFactory.addAdapterFactory(new ExtendedShadowrunAdapterFactory()); adapterFactory.addAdapterFactory(new Shr5managementAdapterFactory()); adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory()); itemDelegator = new AdapterFactoryItemDelegator(adapterFactory); actionListContentProvider = new AdapterFactoryContentProvider(adapterFactory); FormToolkit toolkit = managedForm.getToolkit(); ScrolledForm form = managedForm.getForm(); Composite body = form.getBody(); toolkit.decorateFormHeading(form.getForm()); toolkit.paintBordersFor(body); form.getToolBarManager().add(new OpenCharacterByRuntimeEditorAction(object)); form.getToolBarManager().update(true); LabelProvider labelProvider = AdapterFactoryUtil.getInstance().getLabelProvider(); form.setText(labelProvider.getText(object)); { managedForm.getForm().getBody().setLayout(new TableWrapLayout()); } Composite composite = managedForm.getToolkit().createComposite(managedForm.getForm().getBody(), SWT.NONE); composite.setLayout(new GridLayout(2, false)); composite.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1)); managedForm.getToolkit().paintBordersFor(composite); lblImage = managedForm.getToolkit().createLabel(composite, "image", SWT.NONE); GridData gd_lblImage = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_lblImage.heightHint = 32; gd_lblImage.widthHint = 32; lblImage.setLayoutData(gd_lblImage); lblName = managedForm.getToolkit().createLabel(composite, "name", SWT.NONE); Composite composite_1 = managedForm.getToolkit().createComposite(managedForm.getForm().getBody(), SWT.NONE); composite_1.setLayoutData(new TableWrapData(TableWrapData.FILL, TableWrapData.TOP, 1, 1)); managedForm.getToolkit().paintBordersFor(composite_1); { TableWrapLayout twl_composite_1 = new TableWrapLayout(); composite_1.setLayout(twl_composite_1); } Composite composite_4 = new Composite(composite_1, SWT.NONE); composite_4.setLayout(new GridLayout(4, false)); composite_4.setLayoutData(new TableWrapData(TableWrapData.FILL, TableWrapData.TOP, 1, 1)); managedForm.getToolkit().adapt(composite_4); managedForm.getToolkit().paintBordersFor(composite_4); Group grpKrperlicheAttribute = new Group(composite_4, SWT.NONE); grpKrperlicheAttribute.setText(Messages.AbstraktPersonaPage_Body); grpKrperlicheAttribute.setToolTipText(Messages.AbstraktPersonaPage_Body_Attributes); grpKrperlicheAttribute.setLayout(new GridLayout(4, false)); grpKrperlicheAttribute.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); toolkit.adapt(grpKrperlicheAttribute); toolkit.paintBordersFor(grpKrperlicheAttribute); Group grpGeistigeAttribute = new Group(composite_4, SWT.NONE); grpGeistigeAttribute.setText(Messages.AbstraktPersonaPage_Mental); grpGeistigeAttribute.setToolTipText(Messages.AbstraktPersonaPage_Mental_Attributes); grpGeistigeAttribute.setLayout(new GridLayout(4, false)); grpGeistigeAttribute.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); toolkit.adapt(grpGeistigeAttribute); toolkit.paintBordersFor(grpGeistigeAttribute); Group grpSpezielleAttribute = new Group(composite_4, SWT.NONE); grpSpezielleAttribute.setText(Messages.AbstraktPersonaPage_Special); grpSpezielleAttribute.setToolTipText(Messages.AbstraktPersonaPage_Special_Attributes); grpSpezielleAttribute.setLayout(new GridLayout(4, false)); grpSpezielleAttribute.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); toolkit.adapt(grpSpezielleAttribute); toolkit.paintBordersFor(grpSpezielleAttribute); Group compositelimits = new Group(composite_4, SWT.NONE); compositelimits.setText(Messages.AbstraktPersonaPage_Limits); compositelimits.setToolTipText(Messages.AbstraktPersonaPage_The_Limits); compositelimits.setLayout(new GridLayout(4, false)); compositelimits.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); toolkit.adapt(compositelimits); toolkit.paintBordersFor(compositelimits); Composite composite_3 = managedForm.getToolkit().createComposite(composite_1, SWT.NONE); composite_3.setLayout(new GridLayout(3, false)); composite_3.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1)); managedForm.getToolkit().paintBordersFor(composite_3); Composite monitor = new Composite(managedForm.getForm().getBody(), SWT.NONE); monitor.setLayout(new GridLayout(5, false)); monitor.setLayoutData(new TableWrapData(TableWrapData.FILL, TableWrapData.TOP, 1, 1)); managedForm.getToolkit().adapt(monitor); managedForm.getToolkit().paintBordersFor(monitor); Group grpPhysical = new Group(monitor, SWT.NONE); grpPhysical.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, false, 1, 1)); grpPhysical.setText(Messages.RuntimeCharacterPage_physical_monitor); managedForm.getToolkit().adapt(grpPhysical); managedForm.getToolkit().paintBordersFor(grpPhysical); grpPhysical.setLayout(new FillLayout(SWT.HORIZONTAL)); stateMonitorWidgetPhysical = new StateMonitorWidget(grpPhysical, SWT.NONE); stateMonitorWidgetPhysical.setType(MonitorType.physical); managedForm.getToolkit().paintBordersFor(stateMonitorWidgetPhysical); Group grpMental = new Group(monitor, SWT.NONE); grpMental.setLayout(new FillLayout(SWT.HORIZONTAL)); grpMental.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, false, 1, 1)); grpMental.setText(Messages.RuntimeCharacterPage_mental_monitor); managedForm.getToolkit().adapt(grpMental); managedForm.getToolkit().paintBordersFor(grpMental); stateMonitorWidgetMental = new StateMonitorWidget(grpMental, SWT.NONE); stateMonitorWidgetMental.setType(MonitorType.mental); managedForm.getToolkit().paintBordersFor(stateMonitorWidgetMental); Group grpOverDead = new Group(monitor, SWT.NONE); grpOverDead.setLayout(new FillLayout(SWT.HORIZONTAL)); grpOverDead.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, false, 1, 1)); grpOverDead.setText(Messages.RuntimeCharacterPage_over_monitor); managedForm.getToolkit().adapt(grpOverDead); managedForm.getToolkit().paintBordersFor(grpOverDead); stateMonitorWidgetOverDead = new StateMonitorWidget(grpOverDead, SWT.NONE, 3, false); stateMonitorWidgetOverDead.setType(MonitorType.overflow); managedForm.getToolkit().paintBordersFor(stateMonitorWidgetOverDead); Group grpUsedEdge = new Group(monitor, SWT.NONE); grpUsedEdge.setLayout(new FillLayout(SWT.HORIZONTAL)); grpUsedEdge.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, false, 1, 1)); grpUsedEdge.setText(Messages.RuntimeCharacterPage_edge_monitor); managedForm.getToolkit().adapt(grpUsedEdge); managedForm.getToolkit().paintBordersFor(grpUsedEdge); stateMonitorWidgetUsedEdge = new StateMonitorWidget(grpUsedEdge, SWT.NONE, 3, false); stateMonitorWidgetUsedEdge.setType(MonitorType.edge); managedForm.getToolkit().paintBordersFor(stateMonitorWidgetUsedEdge); if (object != null && object.getCharacter() != null && object.getCharacter().getPersona() != null) { AbstraktPersona persona2 = object.getCharacter().getPersona(); KoerperPersona koerperPersona = (KoerperPersona)persona2; stateMonitorWidgetMental.setMaxConditions(koerperPersona.getZustandGeistigMax()); stateMonitorWidgetPhysical.setMaxConditions(koerperPersona.getZustandKoerperlichMax()); stateMonitorWidgetOverDead.setMaxConditions(koerperPersona.getZustandGrenze()); stateMonitorWidgetUsedEdge.setMaxConditions(koerperPersona.getEdge()); } Group grpState = new Group(monitor, SWT.NONE); grpState.setLayout(new GridLayout(3, false)); grpState.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, false, 1, 1)); grpState.setText(Messages.RuntimeCharacterPage_state); managedForm.getToolkit().adapt(grpState); managedForm.getToolkit().paintBordersFor(grpState); ToolBarManager extendetDataToolbar = new ToolBarManager(SWT.HORIZONTAL); Set<Entry<ExtendetData, Object>> entrySet = object.getExtendetData().entrySet(); for (Entry<ExtendetData, Object> entry : entrySet) { ExtendetData key = entry.getKey(); if (key.getEObject() != null) { extendetDataToolbar.add(new Action(labelProvider.getText(key.getEObject()) + Messages.RuntimeCharacterPage_7 + labelProvider.getText(key.getEFeature()) + Messages.RuntimeCharacterPage_8 + entry.getValue()) { }); } } ToolBar toolbar = extendetDataToolbar.createControl(managedForm.getForm().getBody()); managedForm.getToolkit().adapt(toolbar); managedForm.getToolkit().paintBordersFor(toolbar); // formText = managedForm.getToolkit().createText(managedForm.getForm().getBody(), "",SWT.MULTI); // formText.setEditable(false); // TableWrapData twd_formText = new TableWrapData(TableWrapData.FILL, TableWrapData.FILL_GRAB, 5, 1); // twd_formText.heightHint = 74; // formText.setLayoutData(twd_formText); Composite composite_2 = new Composite(managedForm.getForm().getBody(), SWT.NONE); TableWrapData twd_composite_2 = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB, 1, 1); twd_composite_2.heightHint = 142; composite_2.setLayoutData(twd_composite_2); managedForm.getToolkit().adapt(composite_2); managedForm.getToolkit().paintBordersFor(composite_2); composite_2.setLayout(new GridLayout(1, false)); m_bindingContext = initDataBindings(); createFormBuilder(managedForm); GridData controlGridData = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 3); controlGridData.heightHint = 150; emfFormBuilder.addTextEntry(RuntimePackage.Literals.RUNTIME_CHARACTER__IN_USE, composite_3, controlGridData); emfFormBuilder.addSeperatorEntry(composite_3); emfFormBuilder.addTextEntry(RuntimePackage.Literals.RUNTIME_CHARACTER__ARMOR, composite_3); emfFormBuilder.addTextEntry(RuntimePackage.Literals.RUNTIME_CHARACTER__LEFT_HAND, composite_3); emfFormBuilder.addTextEntry(RuntimePackage.Literals.RUNTIME_CHARACTER__RIGHT_HAND, composite_3); // emfFormBuilder.addSeperatorEntry(composite_3); emfFormBuilder.addTextEntry(RuntimePackage.Literals.RUNTIME_CHARACTER__USED_EDGE, grpState); emfFormBuilder.addTextEntry(RuntimePackage.Literals.PHYICAL_STATE__ZUSTAND, grpState); PersonaUIToolkit personaUIToolkit = new PersonaUIToolkit(m_bindingContext, null, object.getCharacter(), editingDomain, toolkit); personaUIToolkit.createKoerperlicheAttributesRO(grpKrperlicheAttribute); personaUIToolkit.createGeistigeAttributesRO(grpGeistigeAttribute); personaUIToolkit.createSpezielleAttributesRO(grpSpezielleAttribute); personaUIToolkit.createLimits(compositelimits); emfFormBuilder.buildinComposite(m_bindingContext, managedForm.getForm().getBody(), object); managedForm.reflow(true); } @Override protected EditingDomain getEditingDomain() { return editingDomain; } protected DataBindingContext initDataBindings() { DataBindingContext bindingContext = new DataBindingContext(); // IObservableValue observeTextLblNameObserveWidget = WidgetProperties.text().observe(lblName); IObservableValue objectNameObserveValue = EMFEditProperties.value( editingDomain, FeaturePath.fromList(Literals.RUNTIME_CHARACTER__CHARACTER, Shr5managementPackage.Literals.MANAGED_CHARACTER__PERSONA, Shr5Package.Literals.BESCHREIBBAR__NAME)).observe(object); bindingContext.bindValue(observeTextLblNameObserveWidget, objectNameObserveValue, new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER), new EMFUpdateValueStrategy()); // // IObservableValue observeTextObserveWidget = WidgetProperties.text().observe(formText); // IObservableValue objectExtendetObserveValue = EMFEditProperties.value( // editingDomain, // FeaturePath.fromList(Literals.EXTENDET_DATA_AWARE__EXTENDET_DATA)).observe(object); // bindingContext.bindValue(observeTextObserveWidget, objectExtendetObserveValue, new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER), // new EMFUpdateValueStrategy(){ // @Override // public Object convert(Object value) { // return value.toString(); // //return super.convert(value); // } // // }); // IWidgetValueProperty image = WidgetProperties.image(); ISWTObservableValue observedImage = image.observe(lblImage); IObservableValue observeValue = EMFEditProperties.value( editingDomain, FeaturePath.fromList(Literals.RUNTIME_CHARACTER__CHARACTER, Shr5managementPackage.Literals.MANAGED_CHARACTER__PERSONA, Shr5Package.Literals.BESCHREIBBAR__IMAGE)).observe(object); IConverter converter = null; converter = new PathToImageConverter(String.class, Image.class, 32); UpdateValueStrategy toModel = new UpdateValueStrategy(); UpdateValueStrategy toWidget = new UpdateValueStrategy().setConverter(converter); bindingContext.bindValue(observedImage, observeValue, toModel, toWidget); // if (stateMonitorWidgetMental != null) { ISWTObservableValue observe = new DamageStateValueProperty().observe(stateMonitorWidgetMental); IObservableValue observeValue1 = EMFObservables.observeValue(bindingContext.getValidationRealm(), object, RuntimePackage.Literals.PHYICAL_STATE__MENTAL_DAMAGE); bindingContext.bindValue(observe, observeValue1, new EMFUpdateValueStrategy(), new EMFUpdateValueStrategy()); } if (stateMonitorWidgetPhysical != null) { ISWTObservableValue observe = new DamageStateValueProperty().observe(stateMonitorWidgetPhysical); IObservableValue observeValue1 = EMFObservables.observeValue(bindingContext.getValidationRealm(), object, RuntimePackage.Literals.PHYICAL_STATE__PHYSICAL_DAMAGE); bindingContext.bindValue(observe, observeValue1, new EMFUpdateValueStrategy(), new EMFUpdateValueStrategy()); } if (stateMonitorWidgetOverDead != null) { ISWTObservableValue observe = new DamageStateValueProperty().observe(stateMonitorWidgetOverDead); IObservableValue observeValue1 = EMFObservables.observeValue(bindingContext.getValidationRealm(), object, RuntimePackage.Literals.PHYICAL_STATE__OVER_DEAD); bindingContext.bindValue(observe, observeValue1, new EMFUpdateValueStrategy(), new EMFUpdateValueStrategy()); } if (stateMonitorWidgetUsedEdge != null) { ISWTObservableValue observe = new DamageStateValueProperty().observe(stateMonitorWidgetUsedEdge); IObservableValue observeValue1 = EMFObservables.observeValue(bindingContext.getValidationRealm(), object, RuntimePackage.Literals.RUNTIME_CHARACTER__USED_EDGE); bindingContext.bindValue(observe, observeValue1, new EMFUpdateValueStrategy(), new EMFUpdateValueStrategy()); } return bindingContext; } }