/** * */ package de.urszeidler.shr5.ecp.editor.pages.generator; import java.util.HashSet; import java.util.List; import java.util.Set; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.UpdateValueStrategy; import org.eclipse.core.databinding.conversion.Converter; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.Diagnostic; import org.eclipse.emf.databinding.EMFUpdateValueStrategy; import org.eclipse.emf.databinding.edit.EMFEditObservables; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.util.Diagnostician; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.jface.databinding.swt.WidgetProperties; import org.eclipse.jface.fieldassist.ControlDecoration; 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.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Spinner; 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.ui.forms.widgets.Section; import org.eclipse.wb.swt.ResourceManager; import de.urszeidler.eclipse.shr5.BaseMagischePersona; import de.urszeidler.eclipse.shr5.Spezies; import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil; import de.urszeidler.eclipse.shr5Management.Adept; import de.urszeidler.eclipse.shr5Management.CharacterGenerator; import de.urszeidler.eclipse.shr5Management.GeneratorState; import de.urszeidler.eclipse.shr5Management.ManagedCharacter; import de.urszeidler.eclipse.shr5Management.MetaType; import de.urszeidler.eclipse.shr5Management.Shr5Generator; import de.urszeidler.eclipse.shr5Management.Shr5managementFactory; import de.urszeidler.eclipse.shr5Management.Shr5managementPackage; import de.urszeidler.eclipse.shr5Management.Shr5managementPackage.Literals; import de.urszeidler.eclipse.shr5Management.SpecialType; import de.urszeidler.eclipse.shr5Management.Technomancer; import de.urszeidler.eclipse.shr5Management.util.ShadowrunManagmentTools; import de.urszeidler.eclipse.shr5Management.util.Shr5managementValidator; import de.urszeidler.emf.commons.ui.util.EmfFormBuilder.ReferenceManager; import de.urszeidler.shr5.ecp.editor.actions.ActionM2TDialog; import de.urszeidler.shr5.ecp.editor.pages.Messages; import de.urszeidler.shr5.ecp.editor.widgets.AttributeGeneratorOption; import de.urszeidler.shr5.ecp.editor.widgets.MagicGeneratorOption; import de.urszeidler.shr5.ecp.editor.widgets.MetaTypGeneratorOption; import de.urszeidler.shr5.ecp.editor.widgets.ResourceGeneratorOption; import de.urszeidler.shr5.ecp.editor.widgets.SkillGeneratorOption; /** * @author urs */ public class Shr5GeneratorPage extends AbstractGeneratorPage { private static final String EMPTY = ""; //$NON-NLS-1$ private Shr5Generator object; private EditingDomain editingDomain; private DataBindingContext m_bindingContext; private Label lblPhasestate; private Spinner spinner; private ToolItem tltmNewItem; private Composite grpAuswahl; private Composite grpTyp; private Composite composite_group; private ToolItem tltmChoose; private ToolItem tltmCommit; private Button btnRadioButton; private Label lblKarmaSpend; private AttributeGeneratorOption attributeGeneratorOption; private Composite composite_3; private Group grpAttribute; private Group grpSkills; private Section sctnCreate; private SkillGeneratorOption skillGeneratorOption; private Group grpResourcen; private ResourceGeneratorOption resourceGeneratorOption; private Group grpMetatyp; private Group grpMagic; private MetaTypGeneratorOption metaTypGeneratorOption; private MagicGeneratorOption magicGeneratorOption; private Section sctnChoose; private Group grpOverview; private Composite composite_overview; private Label lblInstruction; private ControlDecoration controlDecorationAttributes; private ControlDecoration controlDecorationSkills; private ControlDecoration controlDecorationMagic; private ControlDecoration controlDecorationMetaTyp; private Label lblConnectionleft; private ControlDecoration controlDecorationResources; private ControlDecoration controlDecorationKarma; private Label lblConnectionPoints; private ControlDecoration controlDecorationConnections; // private DiagnosticComposite diagnosticComposite; // private Group grpValidation; // private Composite composite_2; private HashSet<String> changeSet; private boolean optionWidgetsCreated = false; private ToolItem restItem; /** * 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 Shr5GeneratorPage(FormEditor editor, String id, String title) { super(editor, id, title); object = Shr5managementFactory.eINSTANCE.createShr5Generator(); context = createValidationContext(); } /** * The main constructor. * * @param editor * @param id * @param title * @param object * @param editingDomain * @param manager */ public Shr5GeneratorPage(FormEditor editor, String id, String title, Shr5Generator object, EditingDomain editingDomain, ReferenceManager manager) { super(editor, id, title, manager); this.object = object; this.editingDomain = editingDomain; context = createValidationContext(); } /** * 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); form.getToolBarManager().add(new ActionM2TDialog(form.getShell(), object)); form.getToolBarManager().update(true); managedForm.getForm().getBody().setLayout(new GridLayout(1, false)); ToolBar toolBar = new ToolBar(managedForm.getForm().getBody(), SWT.FLAT | SWT.RIGHT | SWT.SHADOW_OUT); managedForm.getToolkit().adapt(toolBar); managedForm.getToolkit().paintBordersFor(toolBar); tltmChoose = new ToolItem(toolBar, SWT.NONE); tltmChoose.setText(Messages.GeneratorPage_Step_One); tltmChoose.setToolTipText(Messages.Shr5GeneratorPage_Step_One_tooltip); tltmChoose.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/btn_1.png")); //$NON-NLS-1$ //$NON-NLS-2$ tltmNewItem = new ToolItem(toolBar, SWT.NONE); tltmNewItem.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { createManagedCharacter(); } }); tltmNewItem.setText(Messages.GeneratorPage_Step_Two); tltmNewItem.setToolTipText(Messages.GeneratorPage_Step_Two_tooltip); tltmNewItem.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/btn_2.png")); //$NON-NLS-1$ //$NON-NLS-2$ tltmCommit = new ToolItem(toolBar, SWT.NONE); tltmCommit.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { commitCharacter(); } }); tltmCommit.setText(Messages.GeneratorPage_Step_Three); tltmCommit.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/btn_3.png")); //$NON-NLS-1$ //$NON-NLS-2$ tltmCommit.setToolTipText(Messages.GeneratorPage_Step_Tree_tooltip); restItem = new ToolItem(toolBar, SWT.NONE); restItem.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { resetCharacter(object); } }); restItem.setText(Messages.GeneratorPage_reset); restItem.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/btn_4.png")); //$NON-NLS-1$ //$NON-NLS-2$ restItem.setToolTipText(Messages.GeneratorPage_Reset_tooltip); grpOverview = new Group(managedForm.getForm().getBody(), SWT.NONE); grpOverview.setLayout(new GridLayout(1, false)); grpOverview.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1)); grpOverview.setText(Messages.GeneratorPage_overview); managedForm.getToolkit().adapt(grpOverview); managedForm.getToolkit().paintBordersFor(grpOverview); composite_overview = managedForm.getToolkit().createComposite(grpOverview, SWT.NONE); composite_overview.setLayout(new GridLayout(3, false)); composite_overview.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); managedForm.getToolkit().paintBordersFor(composite_overview); Composite composite_1 = managedForm.getToolkit().createComposite(grpOverview, SWT.NONE); composite_1.setLayout(new FillLayout(SWT.HORIZONTAL)); composite_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); managedForm.getToolkit().paintBordersFor(composite_1); lblInstruction = managedForm.getToolkit().createLabel(composite_1, "ttt", SWT.NONE); //$NON-NLS-1$ sctnChoose = managedForm.getToolkit().createSection(managedForm.getForm().getBody(), Section.TWISTIE | Section.TITLE_BAR); sctnChoose.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); managedForm.getToolkit().paintBordersFor(sctnChoose); sctnChoose.setText(Messages.GeneratorPage_Step_One); sctnChoose.setExpanded(true); grpAuswahl = new Composite(sctnChoose, SWT.NONE); sctnChoose.setClient(grpAuswahl); grpAuswahl.setLayout(new GridLayout(3, false)); managedForm.getToolkit().adapt(grpAuswahl); managedForm.getToolkit().paintBordersFor(grpAuswahl); grpTyp = new Composite(grpAuswahl, SWT.NONE); managedForm.getToolkit().adapt(grpTyp); managedForm.getToolkit().paintBordersFor(grpTyp); grpTyp.setLayout(new GridLayout(1, false)); btnRadioButton = new Button(grpTyp, SWT.RADIO); btnRadioButton.setSelection(true); managedForm.getToolkit().adapt(btnRadioButton, true, true); btnRadioButton.setText(Messages.GeneratorPage_player); Button btnRadioButton_1 = new Button(grpTyp, SWT.RADIO); managedForm.getToolkit().adapt(btnRadioButton_1, true, true); btnRadioButton_1.setText(Messages.GeneratorPage_non_player); Composite compositePrio = new Composite(grpAuswahl, SWT.NONE); compositePrio.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); compositePrio.setLayout(new GridLayout(3, false)); managedForm.getToolkit().adapt(compositePrio); managedForm.getToolkit().paintBordersFor(compositePrio); Composite compositeAllowedSource = new Composite(grpAuswahl, SWT.NONE); compositeAllowedSource.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); compositeAllowedSource.setLayout(new GridLayout(1, false)); managedForm.getToolkit().adapt(compositeAllowedSource); managedForm.getToolkit().paintBordersFor(compositeAllowedSource); composite_group = new Composite(grpAuswahl, SWT.NONE); composite_group.setLayout(new GridLayout(3, false)); composite_group.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); managedForm.getToolkit().adapt(composite_group); managedForm.getToolkit().paintBordersFor(composite_group); sctnCreate = managedForm.getToolkit().createSection(managedForm.getForm().getBody(), Section.TWISTIE | Section.TITLE_BAR); sctnCreate.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); managedForm.getToolkit().paintBordersFor(sctnCreate); sctnCreate.setText(Messages.GeneratorPage_Step_Two); sctnCreate.setExpanded(true); composite_3 = managedForm.getToolkit().createComposite(sctnCreate, SWT.NONE); managedForm.getToolkit().paintBordersFor(composite_3); sctnCreate.setClient(composite_3); composite_3.setLayout(new GridLayout(3, false)); Composite composite = new Composite(composite_3, SWT.NONE); composite.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1)); composite.setLayout(new GridLayout(3, false)); managedForm.getToolkit().adapt(composite); managedForm.getToolkit().paintBordersFor(composite); managedForm.getToolkit().createLabel(composite, Messages.GeneratorPage_phase, SWT.NONE); lblPhasestate = managedForm.getToolkit().createLabel(composite, "phase_State", SWT.NONE); //$NON-NLS-1$ GridData gd_lblPhasestate = new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1); gd_lblPhasestate.widthHint = 150; lblPhasestate.setLayoutData(gd_lblPhasestate); Label lblKarmaToResorcen = new Label(composite, SWT.NONE); managedForm.getToolkit().adapt(lblKarmaToResorcen, true, true); lblKarmaToResorcen.setText(Messages.GeneratorPage_karma2Resource); spinner = new Spinner(composite, SWT.BORDER); GridData gd_spinner = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_spinner.widthHint = 40; spinner.setLayoutData(gd_spinner); managedForm.getToolkit().adapt(spinner); managedForm.getToolkit().paintBordersFor(spinner); controlDecorationKarma = new ControlDecoration(spinner, SWT.LEFT | SWT.TOP); controlDecorationKarma.setDescriptionText("Some description"); //$NON-NLS-1$ lblKarmaSpend = new Label(composite, SWT.NONE); GridData gd_lblKarmaSpend = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_lblKarmaSpend.widthHint = 60; lblKarmaSpend.setLayoutData(gd_lblKarmaSpend); managedForm.getToolkit().adapt(lblKarmaSpend, true, true); lblKarmaSpend.setText("New Label"); //$NON-NLS-1$ managedForm.getToolkit().createLabel(composite, Messages.GeneratorPage_connections, SWT.NONE); lblConnectionPoints = managedForm.getToolkit().createLabel(composite, "New Label", SWT.NONE); //$NON-NLS-1$ GridData gd_lblConnectionPoints = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_lblConnectionPoints.widthHint = 40; lblConnectionPoints.setLayoutData(gd_lblConnectionPoints); controlDecorationConnections = new ControlDecoration(lblConnectionPoints, SWT.LEFT | SWT.TOP); controlDecorationConnections.setDescriptionText("Some description"); //$NON-NLS-1$ lblConnectionleft = managedForm.getToolkit().createLabel(composite, "connectionLeft", SWT.NONE); //$NON-NLS-1$ GridData gd_lblConnectionleft = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_lblConnectionleft.widthHint = 40; lblConnectionleft.setLayoutData(gd_lblConnectionleft); grpAttribute = new Group(composite_3, SWT.NONE); grpAttribute.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); grpAttribute.setText(Messages.GeneratorPage_Attribute); managedForm.getToolkit().adapt(grpAttribute); managedForm.getToolkit().paintBordersFor(grpAttribute); grpAttribute.setLayout(new FillLayout(SWT.HORIZONTAL)); controlDecorationAttributes = new ControlDecoration(grpAttribute, SWT.RIGHT | SWT.TOP); grpSkills = new Group(composite_3, SWT.NONE); grpSkills.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); grpSkills.setLayout(new FillLayout(SWT.HORIZONTAL)); grpSkills.setText(Messages.GeneratorPage_Skills); managedForm.getToolkit().adapt(grpSkills); managedForm.getToolkit().paintBordersFor(grpSkills); controlDecorationSkills = new ControlDecoration(grpSkills, SWT.RIGHT | SWT.TOP); grpMagic = new Group(composite_3, SWT.NONE); grpMagic.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); grpMagic.setLayout(new FillLayout(SWT.HORIZONTAL)); grpMagic.setText(Messages.GeneratorPage_Magic); managedForm.getToolkit().adapt(grpMagic); managedForm.getToolkit().paintBordersFor(grpMagic); controlDecorationMagic = new ControlDecoration(grpMagic, SWT.RIGHT | SWT.TOP); grpResourcen = new Group(composite_3, SWT.NONE); grpResourcen.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); grpResourcen.setText(Messages.GeneratorPage_Resources); managedForm.getToolkit().adapt(grpResourcen); managedForm.getToolkit().paintBordersFor(grpResourcen); grpResourcen.setLayout(new FillLayout(SWT.HORIZONTAL)); controlDecorationResources = new ControlDecoration(grpResourcen, SWT.RIGHT | SWT.TOP); grpMetatyp = new Group(composite_3, SWT.NONE); grpMetatyp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); grpMetatyp.setLayout(new FillLayout(SWT.HORIZONTAL)); grpMetatyp.setText(Messages.GeneratorPage_Metatype); managedForm.getToolkit().adapt(grpMetatyp); managedForm.getToolkit().paintBordersFor(grpMetatyp); controlDecorationMetaTyp = new ControlDecoration(grpMetatyp, SWT.RIGHT | SWT.TOP); new Label(composite_3, SWT.NONE); m_bindingContext = initDataBindings(); // ---------- ownBinding(m_bindingContext); createFormBuilder(managedForm); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.SHR5_GENERATOR__META_TYPE, compositePrio); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.SHR5_GENERATOR__ATTRIBUTE, compositePrio); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.SHR5_GENERATOR__MAGIC, compositePrio); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.SHR5_GENERATOR__SKILLS, compositePrio); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.SHR5_GENERATOR__RESOURCEN, compositePrio); GridData controlGridData = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 3); controlGridData.heightHint = 150; emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.SHR5_RULE_GENERATOR__ALLOWED_SOURCES, compositeAllowedSource, controlGridData); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.CHARACTER_GENERATOR__SELECTED_GROUP, composite_group); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.CHARACTER_GENERATOR__CHARACTER_NAME, composite_overview); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.CHARACTER_GENERATOR__GENERATOR, composite_overview); emfFormBuilder.buildinComposite(m_bindingContext, managedForm.getForm().getBody(), object); managedForm.reflow(true); if (!object.eAdapters().contains(this) && object.getState() != GeneratorState.COMMITED) object.eAdapters().add(this); if (object.getCharacter() != null && object.getCharacter().getPersona() != null && object.getState() != GeneratorState.COMMITED) { addPersonaPage(object.getCharacter()); } validateChange(); } @Override public void dispose() { if (object != null) object.eAdapters().remove(this); super.dispose(); } protected void resetCharacter(CharacterGenerator<?> object) { optionWidgetsCreated = false; super.resetCharacter(object); } /** * Commit the character. */ protected void commitCharacter() { final int calcResourcesLeft = ShadowrunManagmentTools.calcResourcesLeft(object); int startMoney = calcResourcesLeft; startMoney = lifeStyleToStartMoneyDialog(calcResourcesLeft, startMoney,object); if(startMoney==-1) return; moveGeneratorToCharacterCommit(object); // CompoundCommand command = new CompoundCommand(); // command.append(SetCommand.create(getEditingDomain(), object, Shr5managementPackage.Literals.CHARACTER_GENERATOR__STATE, // GeneratorState.COMMITED)); // command.append(SetCommand.create(getEditingDomain(), object, Shr5managementPackage.Literals.SHR5_GENERATOR__START_KARMA, // ShadowrunManagmentTools.calcKarmaLeft(object))); // command.append(SetCommand.create(getEditingDomain(), object, Shr5managementPackage.Literals.SHR5_GENERATOR__START_RESOURCES, startMoney)); // command.append(SetCommand.create(getEditingDomain(), object.getCharacter(), Shr5managementPackage.Literals.MANAGED_CHARACTER__GENERATOR_SRC, // object)); // // // getEditingDomain().getCommandStack().execute(command); validateChange(); } /** * Validates the changes and update the gui. */ protected void validateChange() { if (object.getState() == GeneratorState.COMMITED) { tltmNewItem.setEnabled(false); tltmChoose.setEnabled(false); tltmCommit.setEnabled(false); restItem.setEnabled(false); grpAuswahl.setEnabled(false); sctnCreate.setEnabled(false); return; } Diagnostic validate = Diagnostician.INSTANCE.validate(object, context); Set<Integer> newSet = new HashSet<Integer>(); HashSet<String> newChangeset = new HashSet<String>(); List<Diagnostic> children = validate.getChildren(); for (Diagnostic diagnostic : children) { if (Shr5managementValidator.DIAGNOSTIC_SOURCE.equals(diagnostic.getSource())) newSet.add(diagnostic.getCode()); newChangeset.add(diagnostic.getMessage()); updateGeneratorState(diagnostic, object); } if (newChangeset.equals(changeSet)) return; if (newSet.contains(Shr5managementValidator.SHR5_GENERATOR__HAS_CATEGORY_ONLY_ONCE)) { object.setState(GeneratorState.NEW); } else if (object.getCharacter() != null && object.getCharacter().getPersona() != null) { object.setState(GeneratorState.PERSONA_CREATED); } updateDecorators(newSet); changeSet = newChangeset; if (object.getState() == GeneratorState.PERSONA_CREATED) createOptionWidgets(); tltmNewItem.setEnabled(object.getState() == GeneratorState.READY_FOR_CREATION); tltmChoose.setEnabled(object.getState() == GeneratorState.NEW); tltmCommit.setEnabled(object.getState() == GeneratorState.PERSONA_CREATED && validate.getChildren().isEmpty()); sctnChoose.setExpanded(object.getState() == GeneratorState.NEW || object.getState() == GeneratorState.READY_FOR_CREATION); sctnCreate.setExpanded(object.getState() == GeneratorState.PERSONA_CREATED); grpAuswahl.setEnabled(object.getState() == GeneratorState.NEW || object.getState() == GeneratorState.READY_FOR_CREATION); restItem.setEnabled(object.getCharacter()!=null); validationService.updateValidation(object, validate); } /** * Update the decorators. * * @param newSet */ private void updateDecorators(Set<Integer> newSet) { updateDecorator(newSet, Shr5managementValidator.SHR5_GENERATOR__HAS_SPEND_ALL_SPECIAL_TYPE_POINTS, controlDecorationMagic, "Not all type points spend."); //$NON-NLS-1$ updateDecorator(newSet, Shr5managementValidator.SHR5_GENERATOR__HAS_SPEND_ALL_SPECIAL_POINTS, controlDecorationMetaTyp, "Not all special points spend."); //$NON-NLS-1$ updateDecorator(newSet, Shr5managementValidator.SHR5_GENERATOR__HAS_SPEND_ALL_SKILL_POINTS, controlDecorationSkills, "Not all skill spend."); //$NON-NLS-1$ updateDecorator(newSet, Shr5managementValidator.SHR5_GENERATOR__HAS_SPEND_ALL_KNOWLEGE_SKILL_POINTS, controlDecorationSkills, "Not all skill spend."); //$NON-NLS-1$ updateDecorator(newSet, Shr5managementValidator.SHR5_GENERATOR__HAS_SPEND_ALL_GROUP_POINTS, controlDecorationSkills, "Not all skill spend."); //$NON-NLS-1$ updateDecorator(newSet, Shr5managementValidator.SHR5_GENERATOR__HAS_SPEND_ALL_ATTRIBUTES_POINTS, controlDecorationAttributes, "Not all attributes spend."); //$NON-NLS-1$ updateDecorator(newSet, Shr5managementValidator.SHR5_GENERATOR__HAS_SPEND_ALL_RESOURCE_POINTS, controlDecorationResources, "Not all resource points spend."); //$NON-NLS-1$ updateDecorator(newSet, Shr5managementValidator.SHR5_GENERATOR__HAS_SPEND_ALL_CONNECTION_POINTS, controlDecorationConnections, "Not all Connection points spend."); //$NON-NLS-1$ } private void createManagedCharacter() { MetaType metaType = object.getMetaType(); SpecialType magic = object.getMagic(); EClass selectableType = magic.getSelectableTypes(); Spezies spezies = metaType.getChoosableTypes(); ManagedCharacter playerCharacter; boolean createPlayer = btnRadioButton.getSelection(); playerCharacter = createManagedCharacter(selectableType, spezies, createPlayer, object); if (magic instanceof Adept) { Adept a = (Adept)magic; ((BaseMagischePersona)playerCharacter.getPersona()).setMagieBasis(a.getMagic()); } else if (magic instanceof Technomancer) { Technomancer t = (Technomancer)magic; ((de.urszeidler.eclipse.shr5.Technomancer)playerCharacter.getPersona()).setResonanzBasis(t.getResonanz()); } addPersonaPage(playerCharacter); createOptionWidgets(); validateChange(); } /** * Creates the option widget lazy. */ private void createOptionWidgets() { if (object.getAttribute() == null || object.getCharacter() == null || optionWidgetsCreated) return; if (attributeGeneratorOption != null) attributeGeneratorOption.dispose(); attributeGeneratorOption = new AttributeGeneratorOption(grpAttribute, SWT.NONE, object.getAttribute(), object.getCharacter(), getManagedForm().getToolkit(), editingDomain); attributeGeneratorOption.layout(); if (skillGeneratorOption != null) skillGeneratorOption.dispose(); skillGeneratorOption = new SkillGeneratorOption(grpSkills, SWT.NONE, object.getSkills(), object.getCharacter(), getManagedForm().getToolkit(), editingDomain); skillGeneratorOption.layout(); if (resourceGeneratorOption != null) resourceGeneratorOption.dispose(); resourceGeneratorOption = new ResourceGeneratorOption(grpResourcen, SWT.NONE, object.getResourcen(), object.getCharacter(), getManagedForm() .getToolkit(), editingDomain, Literals.SHR5_GENERATOR__RESOURCE_SPEND); resourceGeneratorOption.layout(); if (metaTypGeneratorOption != null) metaTypGeneratorOption.dispose(); metaTypGeneratorOption = new MetaTypGeneratorOption(grpMetatyp, SWT.NONE, object.getMetaType(), object.getCharacter(), getManagedForm() .getToolkit(), editingDomain); metaTypGeneratorOption.layout(); if (magicGeneratorOption != null) magicGeneratorOption.dispose(); magicGeneratorOption = new MagicGeneratorOption(grpMagic, SWT.NONE, object.getMagic(), object.getCharacter(), getManagedForm().getToolkit(), editingDomain); magicGeneratorOption.layout(); grpAttribute.layout(true, true); grpSkills.layout(true, true); grpResourcen.layout(true, true); grpMetatyp.layout(true, true); grpMagic.layout(true, true); sctnCreate.setExpanded(true); optionWidgetsCreated = true; } private void ownBinding(DataBindingContext bindingContext) { IObservableValue observeTextLblKarmaSpendObserveWidget = WidgetProperties.text().observe(lblKarmaSpend); IObservableValue objectKarmaSpendObserveValue = EMFEditObservables.observeValue(editingDomain, object, Literals.SHR5_GENERATOR__KARMA_SPEND); EMFUpdateValueStrategy modelToTarget = new EMFUpdateValueStrategy(); modelToTarget.setConverter(new Converter(Integer.class, String.class) { @Override public Object convert(Object fromObject) { if (object.getGenerator() == null) return Messages.GeneratorPage_left1; return Messages.GeneratorPage_left + (ShadowrunManagmentTools.calcKarmaLeft(object) + EMPTY); } }); bindingContext.bindValue(observeTextLblKarmaSpendObserveWidget, objectKarmaSpendObserveValue, new UpdateValueStrategy( UpdateValueStrategy.POLICY_NEVER), modelToTarget); // ---- observeTextLblKarmaSpendObserveWidget = WidgetProperties.text().observe(lblConnectionleft); objectKarmaSpendObserveValue = EMFEditObservables.observeValue(editingDomain, object, Literals.SHR5_GENERATOR__CONNECTION_SPEND); modelToTarget = new EMFUpdateValueStrategy(); modelToTarget.setConverter(new Converter(Integer.class, String.class) { @Override public Object convert(Object fromObject) { if (object.getGenerator() == null || object.getCharacter() == null) return Messages.GeneratorPage_spend; return ShadowrunManagmentTools.calcConnectionsSpend(object.getCharacter()) + EMPTY; } }); bindingContext.bindValue(observeTextLblKarmaSpendObserveWidget, objectKarmaSpendObserveValue, new UpdateValueStrategy( UpdateValueStrategy.POLICY_NEVER), modelToTarget); // ---- observeTextLblKarmaSpendObserveWidget = WidgetProperties.text().observe(lblConnectionPoints); objectKarmaSpendObserveValue = EMFEditObservables.observeValue(editingDomain, object, Literals.SHR5_GENERATOR__CONNECTION_SPEND); modelToTarget = new EMFUpdateValueStrategy(); modelToTarget.setConverter(new Converter(Integer.class, String.class) { @Override public Object convert(Object fromObject) { if (object.getGenerator() == null || object.getCharacter() == null) return "---"; //$NON-NLS-1$ return EMPTY + ShadowrunManagmentTools.calcConnectionsPoints(object.getCharacter(), object.getGenerator()); } }); bindingContext.bindValue(observeTextLblKarmaSpendObserveWidget, objectKarmaSpendObserveValue, new UpdateValueStrategy( UpdateValueStrategy.POLICY_NEVER), modelToTarget); // ---- IObservableValue objectStateObserveValue = EMFEditObservables.observeValue(editingDomain, object, Literals.CHARACTER_GENERATOR__STATE); IObservableValue observeTextLblInstructionObserveWidget = WidgetProperties.text().observe(lblInstruction); modelToTarget = new EMFUpdateValueStrategy(); modelToTarget.setConverter(new Converter(Integer.class, String.class) { @Override public Object convert(Object fromObject) { return object.getCurrentInstruction(); } }); bindingContext.bindValue(observeTextLblInstructionObserveWidget, objectStateObserveValue, new UpdateValueStrategy( UpdateValueStrategy.POLICY_NEVER), modelToTarget); } @Override protected EditingDomain getEditingDomain() { return editingDomain; } /** * Some events we do not need. */ @Override protected boolean notificationIsRequierd(Notification notification) { Object feature = notification.getFeature(); if (Shr5managementPackage.Literals.SHR5_GENERATOR__KARMA_TO_RESOURCE.equals(feature)) return false; return true; } protected DataBindingContext initDataBindings() { DataBindingContext bindingContext = new DataBindingContext(); // IObservableValue observeSelectionSpinnerObserveWidget = WidgetProperties.selection().observe(spinner); IObservableValue objectKarmaToResourceObserveValue = EMFEditObservables.observeValue(editingDomain, object, Literals.SHR5_GENERATOR__KARMA_TO_RESOURCE); UpdateValueStrategy modelToTarget = new EMFUpdateValueStrategy(); bindingContext.bindValue(observeSelectionSpinnerObserveWidget, objectKarmaToResourceObserveValue, modelToTarget, modelToTarget); // IObservableValue observeTextLblPhasestateObserveWidget = WidgetProperties.text().observe(lblPhasestate); IObservableValue objectStateObserveValue = EMFEditObservables.observeValue(editingDomain, object, Literals.CHARACTER_GENERATOR__STATE); bindingContext.bindValue(observeTextLblPhasestateObserveWidget, objectStateObserveValue, new EMFUpdateValueStrategy(), new EMFUpdateValueStrategy()); // return bindingContext; } }