/** * */ package de.urszeidler.shr5.ecp.editor.pages.generator; import java.util.List; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.UpdateValueStrategy; 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.edit.EMFEditObservables; import org.eclipse.emf.ecore.util.Diagnostician; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.jface.databinding.swt.WidgetProperties; 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.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.AbstraktPersona; import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil; import de.urszeidler.eclipse.shr5Management.FreeStyleGenerator; import de.urszeidler.eclipse.shr5Management.GeneratorState; import de.urszeidler.eclipse.shr5Management.ManagedCharacter; import de.urszeidler.eclipse.shr5Management.Shr5managementFactory; import de.urszeidler.eclipse.shr5Management.Shr5managementPackage; import de.urszeidler.eclipse.shr5Management.Shr5managementPackage.Literals; import de.urszeidler.emf.commons.ui.util.EmfFormBuilder.ReferenceManager; import de.urszeidler.shr5.ecp.editor.pages.Messages; /** * @author urs */ public class FreeStyleGeneratorPage extends AbstractGeneratorPage { private FreeStyleGenerator object; private EditingDomain editingDomain; private DataBindingContext m_bindingContext; private Button btnPlayerButton; private ToolItem tltmNewItem; private ToolItem tltmCommit; private ToolItem restItem; private ToolItem tltmChoose; private Section sctnChoose; private Section sctnCreate; // private DiagnosticComposite diagnosticComposite; private Label lblInstruction; public FreeStyleGeneratorPage(FormEditor editor, String id, String title) { super(editor, id, title); } /** * The main constructor. * * @param editor * @param id * @param title * @param object * @param editingDomain * @param manager */ public FreeStyleGeneratorPage(FormEditor editor, String id, String title, FreeStyleGenerator 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); managedForm.getForm().setEnabled(object.getState() != GeneratorState.COMMITED); 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.FreeStyleGeneratorPage_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.setToolTipText(Messages.GeneratorPage_Step_Tree_tooltip); tltmCommit.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/btn_3.png")); //$NON-NLS-1$ //$NON-NLS-2$ restItem = new ToolItem(toolBar, SWT.NONE); restItem.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { resetCharacter(object); } }); restItem.setText(Messages.GeneratorPage_reset); restItem.setToolTipText(Messages.GeneratorPage_Reset_tooltip); restItem.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/btn_4.png")); //$NON-NLS-1$ //$NON-NLS-2$ Group 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 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); Composite grpAuswahl = new Composite(sctnChoose, SWT.NONE); sctnChoose.setClient(grpAuswahl); grpAuswahl.setLayout(new GridLayout(2, false)); managedForm.getToolkit().adapt(grpAuswahl); managedForm.getToolkit().paintBordersFor(grpAuswahl); Composite grpTyp = new Composite(grpAuswahl, SWT.NONE); managedForm.getToolkit().adapt(grpTyp); managedForm.getToolkit().paintBordersFor(grpTyp); grpTyp.setLayout(new GridLayout(1, false)); btnPlayerButton = new Button(grpTyp, SWT.RADIO); btnPlayerButton.setSelection(true); managedForm.getToolkit().adapt(btnPlayerButton, true, true); btnPlayerButton.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 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 composite_3 = managedForm.getToolkit().createComposite(sctnCreate, SWT.NONE); managedForm.getToolkit().paintBordersFor(composite_3); sctnCreate.setClient(composite_3); composite_3.setLayout(new GridLayout(3, false)); // Group grpValidation = new Group(managedForm.getForm().getBody(), SWT.NONE); // grpValidation.setLayout(new FillLayout(SWT.HORIZONTAL)); // GridData gd_grpValidation = new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1); // gd_grpValidation.heightHint = 150; // grpValidation.setLayoutData(gd_grpValidation); // grpValidation.setText(Messages.GeneratorPage_Validation); // managedForm.getToolkit().adapt(grpValidation); // managedForm.getToolkit().paintBordersFor(grpValidation); // // diagnosticComposite = new DiagnosticComposite(grpValidation, SWT.NONE); // diagnosticComposite.setSeverityMask(Diagnostic.ERROR | Diagnostic.INFO | Diagnostic.WARNING); // diagnosticComposite.setShowRootDiagnostic(false); // diagnosticComposite.initialize(null); // managedForm.getToolkit().adapt(diagnosticComposite); // managedForm.getToolkit().paintBordersFor(diagnosticComposite); m_bindingContext = initDataBindings(); // -------------- createFormBuilder(managedForm); 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.addTextEntry(Shr5managementPackage.Literals.FREE_STYLE_GENERATOR__SELECTED_TYPE, compositePrio); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.FREE_STYLE_GENERATOR__SELECTED_SPECIES, compositePrio); emfFormBuilder.addSeperatorEntry(compositePrio); emfFormBuilder.addTextEntry(Shr5managementPackage.Literals.FREE_STYLE_GENERATOR__SELECTED_PERSONA, compositePrio); emfFormBuilder.buildinComposite(m_bindingContext, managedForm.getForm().getBody(), object); managedForm.reflow(true); if (!object.eAdapters().contains(this)) object.eAdapters().add(this); if (object.getCharacter() != null && object.getCharacter().getPersona() != null && object.getState() != GeneratorState.COMMITED) { addPersonaPage(object.getCharacter()); } validateChange(); } /** * Commit the character. */ protected void commitCharacter() { if (!openDefaultCommitMessageDialog()) return; object.setState(GeneratorState.COMMITED); // SetCommand.create(getEditingDomain(), object, Shr5managementPackage.Literals.CHARACTER_GENERATOR__STATE, GeneratorState.COMMITED); moveGeneratorToCharacterCommit(object); validateChange(); } // /** // * // */ // protected void moveGeneratorToCharacterCommit() { // CompoundCommand command = new CompoundCommand(); // command.append(SetCommand.create(getEditingDomain(), object, Shr5managementPackage.Literals.CHARACTER_GENERATOR__STATE, // GeneratorState.COMMITED)); // command.append(SetCommand.create(getEditingDomain(), object.getCharacter(), Shr5managementPackage.Literals.MANAGED_CHARACTER__GENERATOR_SRC, // object)); // // getEditingDomain().getCommandStack().execute(command); // } protected void createManagedCharacter() { AbstraktPersona selectedPersona = object.getSelectedPersona(); if (selectedPersona != null) { ManagedCharacter playerCharacter; if (btnPlayerButton.getSelection()) playerCharacter = Shr5managementFactory.eINSTANCE.createPlayerCharacter(); else playerCharacter = Shr5managementFactory.eINSTANCE.createNonPlayerCharacter(); AbstraktPersona persona = EcoreUtil.copy(selectedPersona); playerCharacter.setPersona(persona); persona.setName(object.getCharacterName()); object.setState(GeneratorState.PERSONA_CREATED); object.getSelectedGroup().getMembers().add(playerCharacter); object.setCharacter(playerCharacter); } else { createManagedCharacter(object.getSelectedType(), object.getSelectedSpecies(), btnPlayerButton.getSelection(), object); } addPersonaPage(object.getCharacter()); validateChange(); } /** * Validates the changes. */ @Override 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); List<Diagnostic> children = validate.getChildren(); for (Diagnostic diagnostic : children) { updateGeneratorState(diagnostic, object); } if (object.getSelectedPersona() == null && object.getSelectedType() == null && object.getSelectedSpecies() == null) object.setState(GeneratorState.NEW); else if ((object.getSelectedType() != null && object.getSelectedSpecies() != null) && (object.getSelectedPersona() != null)) object.setState(GeneratorState.NEW); else if ((object.getSelectedType() == null || object.getSelectedSpecies() == null) && (object.getSelectedPersona() == null)) object.setState(GeneratorState.NEW); 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); validationService.updateValidation(object, validate); } @Override protected boolean notificationIsRequierd(Notification notification) { return true; } @Override protected EditingDomain getEditingDomain() { return editingDomain; } @Override public void dispose() { if (object != null) object.eAdapters().remove(this); super.dispose(); } protected DataBindingContext initDataBindings() { DataBindingContext bindingContext = new DataBindingContext(); // IObservableValue observeTextLblInstructionObserveWidget = WidgetProperties.text().observe(lblInstruction); IObservableValue objectCurrentInstructionObserveValue = EMFEditObservables.observeValue(editingDomain, object, Literals.CHARACTER_GENERATOR__CURRENT_INSTRUCTION); bindingContext.bindValue(observeTextLblInstructionObserveWidget, objectCurrentInstructionObserveValue, new UpdateValueStrategy( UpdateValueStrategy.POLICY_NEVER), null); // return bindingContext; } }