package de.urszeidler.shr5.ecp.editor.pages; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.swt.SWT; 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.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.Section; import de.urszeidler.eclipse.shr5.AbstaktFernKampfwaffe; import de.urszeidler.eclipse.shr5.AbstaktWaffe; import de.urszeidler.eclipse.shr5.Fokus; import de.urszeidler.eclipse.shr5.Granate; import de.urszeidler.eclipse.shr5.Menge; import de.urszeidler.eclipse.shr5.Nahkampfwaffe; import de.urszeidler.eclipse.shr5.Projektilwaffe; import de.urszeidler.eclipse.shr5.Shr5Factory; import de.urszeidler.eclipse.shr5.Shr5Package; import de.urszeidler.eclipse.shr5.Wurfwaffe; import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil; import de.urszeidler.emf.commons.ui.util.EmfFormBuilder.ReferenceManager; import de.urszeidler.shr5.ecp.editor.widgets.BeschreibbarWidget; /** * Manages {@link Projektilwaffe} and {@link Wurfwaffe} {@link Nahkampfwaffe} and also if it is a {@link Fokus}. * * @author urs */ public class FernkampfwaffePage extends AbstractShr5Page<AbstaktWaffe> { private AbstaktWaffe object; private EditingDomain editingDomain; private DataBindingContext m_bindingContext; /** * Create the form page. * * @param id * @param title */ public FernkampfwaffePage(String id, String title) { super(id, title); } /** * 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 FernkampfwaffePage(FormEditor editor, String id, String title) { super(editor, id, title); this.object = Shr5Factory.eINSTANCE.createProjektilwaffe(); } /** * The main constructor. * * @param editor * @param id * @param title * @param object * @param editingDomain * @param manager */ public FernkampfwaffePage(FormEditor editor, String id, String title, AbstaktWaffe 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) { FormToolkit toolkit = managedForm.getToolkit(); ScrolledForm form = managedForm.getForm(); form.setText(AdapterFactoryUtil.getInstance().getLabelProvider().getText(object)); Composite body = form.getBody(); toolkit.decorateFormHeading(form.getForm()); toolkit.paintBordersFor(body); addFillToolbar(form.getToolBarManager(), object, form.getShell()); form.getToolBarManager().update(true); managedForm.getForm().getBody().setLayout(new GridLayout(1, false)); BeschreibbarWidget beschreibbarWidget = new BeschreibbarWidget(managedForm.getForm().getBody(), SWT.NONE, object, toolkit, editingDomain); GridData gd_beschreibbarWidget = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1); beschreibbarWidget.setLayoutData(gd_beschreibbarWidget); managedForm.getToolkit().adapt(beschreibbarWidget); managedForm.getToolkit().paintBordersFor(beschreibbarWidget); Group grpFernkampfwaffe = new Group(managedForm.getForm().getBody(), SWT.NONE); grpFernkampfwaffe.setLayout(new GridLayout(15, false)); grpFernkampfwaffe.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); // grpFernkampfwaffe.setText(Messages.ObjectPage_rangedweapon); grpFernkampfwaffe.setText(labelprovider.getText(object.eClass())); managedForm.getToolkit().adapt(grpFernkampfwaffe); managedForm.getToolkit().paintBordersFor(grpFernkampfwaffe); Composite composite = new Composite(managedForm.getForm().getBody(), SWT.NONE); composite.setLayout(new FillLayout(SWT.HORIZONTAL)); composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); managedForm.getToolkit().adapt(composite); managedForm.getToolkit().paintBordersFor(composite); Group grpWert = new Group(composite, SWT.NONE); grpWert.setText(Messages.ObjectPage_price); managedForm.getToolkit().adapt(grpWert); managedForm.getToolkit().paintBordersFor(grpWert); grpWert.setLayout(new GridLayout(9, false)); Group grpQuelle = new Group(composite, SWT.NONE); grpQuelle.setText(Messages.ObjectPage_source); managedForm.getToolkit().adapt(grpQuelle); managedForm.getToolkit().paintBordersFor(grpQuelle); grpQuelle.setLayout(new GridLayout(6, false)); Section sctnRuntime = managedForm.getToolkit().createSection(managedForm.getForm().getBody(), Section.TWISTIE | Section.TITLE_BAR); sctnRuntime.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); managedForm.getToolkit().paintBordersFor(sctnRuntime); sctnRuntime.setText(Messages.GegenstandPage_sctnRuntime_text); Composite composite_runtime = managedForm.getToolkit().createComposite(sctnRuntime, SWT.NONE); managedForm.getToolkit().paintBordersFor(composite_runtime); sctnRuntime.setClient(composite_runtime); composite_runtime.setLayout(new GridLayout(6, false)); m_bindingContext = initDataBindings(); createFormBuilder(managedForm); if (object instanceof Nahkampfwaffe) { emfFormBuilder.addTextEntry(Shr5Package.Literals.NAHKAMPFWAFFE__REICHWEITE, grpFernkampfwaffe); emfFormBuilder.addTextEntry(Shr5Package.Literals.ABSTAKT_WAFFE__PRAEZISION, grpFernkampfwaffe); emfFormBuilder.addTextEntry(Shr5Package.Literals.ABSTAKT_WAFFE__SCHADENSCODE, grpFernkampfwaffe); emfFormBuilder.addTextEntry(Shr5Package.Literals.ABSTAKT_WAFFE__SCHADES_TYP, grpFernkampfwaffe); emfFormBuilder.addTextEntry(Shr5Package.Literals.ABSTAKT_WAFFE__DURCHSCHLAGS_KRAFT, grpFernkampfwaffe); } else if (object instanceof AbstaktFernKampfwaffe){ emfFormBuilder.addTextEntry(Shr5Package.Literals.ABSTAKT_FERN_KAMPFWAFFE__REICHWEITE, grpFernkampfwaffe); emfFormBuilder.addTextEntry(Shr5Package.Literals.ABSTAKT_WAFFE__PRAEZISION, grpFernkampfwaffe); emfFormBuilder.addTextEntry(Shr5Package.Literals.ABSTAKT_WAFFE__SCHADENSCODE, grpFernkampfwaffe); emfFormBuilder.addTextEntry(Shr5Package.Literals.ABSTAKT_WAFFE__SCHADES_TYP, grpFernkampfwaffe); emfFormBuilder.addTextEntry(Shr5Package.Literals.ABSTAKT_WAFFE__DURCHSCHLAGS_KRAFT, grpFernkampfwaffe); } if (object instanceof Menge) { emfFormBuilder.addTextEntry(Shr5Package.Literals.MENGE__ANZAHL, grpFernkampfwaffe); emfFormBuilder.addTextEntry(Shr5Package.Literals.MENGE__PRO_ANZAHL, grpFernkampfwaffe); } if (object instanceof Granate) { emfFormBuilder.addTextEntry(Shr5Package.Literals.ABTRAKT_GRANATE__BLAST, grpFernkampfwaffe); emfFormBuilder.addTextEntry(Shr5Package.Literals.ABTRAKT_GRANATE__CHEMICAL, grpFernkampfwaffe); } // could be also a focus if (object instanceof Fokus) { emfFormBuilder.addTextEntry(Shr5Package.Literals.MAGISCHE_STUFE__STUFE, grpFernkampfwaffe); emfFormBuilder.addTextEntry(Shr5Package.Literals.FOKUS__BINDUNGSKOSTEN, grpFernkampfwaffe); } emfFormBuilder.addTextEntry(Shr5Package.Literals.ANWENDBAR__FERTIGKEIT, composite_runtime); emfFormBuilder.addTextEntry(Shr5Package.Literals.ANWENDBAR__SPEZIALISIERUNG, composite_runtime); addWertFeatures(grpWert); addSourceFeature(grpQuelle); emfFormBuilder.buildinComposite(m_bindingContext, managedForm.getForm().getBody(), object); managedForm.reflow(true); } protected DataBindingContext initDataBindings() { DataBindingContext bindingContext = new DataBindingContext(); // return bindingContext; } @Override protected EditingDomain getEditingDomain() { return editingDomain; } }