package de.urszeidler.shr5.scripting.ui.wizards; import java.util.Iterator; import java.util.List; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.observable.list.WritableList; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.core.databinding.observable.value.WritableValue; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.databinding.swt.WidgetProperties; import org.eclipse.jface.databinding.viewers.ViewerProperties; import org.eclipse.jface.dialogs.IDialogPage; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.nebula.jface.cdatetime.CDateTimeObservableValue; import org.eclipse.nebula.widgets.cdatetime.CDT; import org.eclipse.nebula.widgets.cdatetime.CDateTime; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; 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.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Tree; import de.urszeidler.eclipse.shr5.runtime.RuntimeCharacter; import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil; import de.urszeidler.eclipse.shr5Management.ManagedCharacter; import de.urszeidler.shr5.ecp.util.List2TreeContentProvider; import de.urszeidler.shr5.ecp.util.ShadowrunEditingTools; import de.urszeidler.shr5.scripting.ui.Messages; public class CombatScriptWizardPage extends WizardPage { private DataBindingContext m_bindingContext; private List<EObject> scripts; private List<EObject> characters; // private List<RuntimeCharacter> runtimeCharacters; private WritableValue selectedScriptContainer = new WritableValue(); private WritableValue selectedScriptName = new WritableValue(); private WritableValue startDate = new WritableValue(); private WritableList runtimeCharacters = new WritableList(); // private ISelection selection; private Combo combo; private ComboViewer comboViewer; private Text txtScriptnametext; private TreeViewer treeViewer; private TreeViewer treeViewer_1; private CDateTime dateTime; /** * Constructor for SampleNewWizardPage. * * @param pageName * @wbp.parser.constructor */ public CombatScriptWizardPage() { super("CombatScriptWizardPage");//$NON-NLS-1$ setTitle("combat script wizard");//$NON-NLS-1$ setDescription("This wizard creates a new script for combat, select the enemy players, when the stript start select the player characters.");//$NON-NLS-1$ } public CombatScriptWizardPage(List<EObject> scripts, List<EObject> characters, WritableValue selectedScriptContainer, WritableValue selectedScriptName, WritableValue startCombatTurn, WritableList runtimeCharacters) { super("CombatScriptWizardPage");//$NON-NLS-1$ setTitle(Messages.CombatScriptWizardPage_titel); setDescription(Messages.CombatScriptWizardPage_description); this.scripts = scripts; this.characters = characters; this.selectedScriptContainer = selectedScriptContainer; this.selectedScriptName = selectedScriptName; this.startDate = startCombatTurn; this.runtimeCharacters = runtimeCharacters; } /** * @see IDialogPage#createControl(Composite) */ public void createControl(Composite parent) { Composite container = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); container.setLayout(layout); layout.numColumns = 2; layout.verticalSpacing = 9; Label label = new Label(container, SWT.NULL); label.setText(Messages.CombatScriptWizardPage_Container); comboViewer = new ComboViewer(container, SWT.NONE); combo = comboViewer.getCombo(); combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); Label lblScriptName = new Label(container, SWT.NONE); lblScriptName.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblScriptName.setText(Messages.CombatScriptWizardPage_scriptName); comboViewer.setLabelProvider(AdapterFactoryUtil.getInstance().getLabelProvider()); comboViewer.setContentProvider(ArrayContentProvider.getInstance()); comboViewer.setInput(scripts); txtScriptnametext = new Text(container, SWT.BORDER); txtScriptnametext.setText(Messages.CombatScriptWizardPage_defaultScriptName); txtScriptnametext.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); Label lblDate = new Label(container, SWT.NONE); lblDate.setText(Messages.CombatScriptWizardPage_lblDate_text); dateTime = new CDateTime(container, CDT.DROP_DOWN | CDT.DATE_LONG | CDT.TIME_MEDIUM); dateTime.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); Group grpEnemies = new Group(container, SWT.NONE); grpEnemies.setLayout(new FillLayout(SWT.HORIZONTAL)); grpEnemies.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1)); grpEnemies.setText(Messages.CombatScriptWizardPage_enemie_group); SashForm sashForm = new SashForm(grpEnemies, SWT.NONE); Composite composite = new Composite(sashForm, SWT.NONE); composite.setLayout(new GridLayout(2, false)); treeViewer_1 = new TreeViewer(composite, SWT.BORDER | SWT.MULTI); treeViewer_1.setLabelProvider(AdapterFactoryUtil.getInstance().getLabelProvider()); treeViewer_1.setContentProvider(new List2TreeContentProvider()); treeViewer_1.setInput(characters); Tree tree_1 = treeViewer_1.getTree(); tree_1.addMouseListener(new MouseAdapter() { @Override public void mouseDoubleClick(MouseEvent e) { addSelection(); } }); tree_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); Composite composite_1 = new Composite(composite, SWT.NONE); composite_1.setLayout(new GridLayout(1, false)); composite_1.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, false, false, 1, 1)); Button btnNewButton = new Button(composite_1, SWT.NONE); btnNewButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { addSelection(); } }); btnNewButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); btnNewButton.setSize(93, 29); btnNewButton.setText(Messages.CombatScriptWizardPage_add); Button btnNewButton_1 = new Button(composite_1, SWT.NONE); btnNewButton_1.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { removeSelection(); } }); btnNewButton_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); btnNewButton_1.setText(Messages.CombatScriptWizardPage_remove); treeViewer = new TreeViewer(sashForm, SWT.BORDER | SWT.MULTI); treeViewer.setLabelProvider(AdapterFactoryUtil.getInstance().getLabelProvider()); treeViewer.setContentProvider(new List2TreeContentProvider()); Tree tree = treeViewer.getTree(); sashForm.setWeights(new int[]{ 10, 8 }); m_bindingContext = initDataBindings(); treeViewer_1.setInput(characters); treeViewer.setInput(runtimeCharacters); setControl(container); dialogChanged(); } protected void removeSelection() { ISelection selection2 = treeViewer.getSelection(); if (selection2 instanceof IStructuredSelection) { IStructuredSelection is = (IStructuredSelection)selection2; for (Iterator<?> i = is.iterator(); i.hasNext();) { EObject eObject = (EObject)i.next(); runtimeCharacters.remove(eObject); } } treeViewer.setInput(runtimeCharacters); dialogChanged(); } protected void addSelection() { ISelection selection2 = treeViewer_1.getSelection(); if (selection2 instanceof IStructuredSelection) { IStructuredSelection is = (IStructuredSelection)selection2; for (Iterator<?> i = is.iterator(); i.hasNext();) { EObject eObject = (EObject)i.next(); if (eObject instanceof ManagedCharacter) { ManagedCharacter mc = (ManagedCharacter)eObject; RuntimeCharacter character = ShadowrunEditingTools.managedCharacter2RuntimeFunction().apply(mc); runtimeCharacters.add(character); } } } treeViewer.setInput(runtimeCharacters); dialogChanged(); } /** * Ensures that both text fields are set. */ private void dialogChanged() { StringBuffer buffer = new StringBuffer(); if (runtimeCharacters.isEmpty()) buffer.append(Messages.CombatScriptWizardPage_error1); if(selectedScriptName.getValue()==null || ((String)selectedScriptName.getValue()).isEmpty()) buffer.append(Messages.CombatScriptWizardPage_error2); if(selectedScriptContainer.getValue()==null) buffer.append(Messages.CombatScriptWizardPage_error3); String msg = buffer.toString(); if(msg.isEmpty()) updateStatus(null); else updateStatus(msg); } private void updateStatus(String message) { setErrorMessage(message); setPageComplete(message == null); } protected DataBindingContext initDataBindings() { DataBindingContext bindingContext = new DataBindingContext(); // IObservableValue observeSingleSelectionComboViewer = ViewerProperties.singleSelection().observe(comboViewer); bindingContext.bindValue(observeSingleSelectionComboViewer, selectedScriptContainer, null, null); // IObservableValue observeTextTxtScriptnametextObserveWidget = WidgetProperties.text(SWT.Modify).observeDelayed(200, txtScriptnametext); bindingContext.bindValue(observeTextTxtScriptnametextObserveWidget, selectedScriptName, null, null); // IObservableValue observeLocationDatewidgetObserveWidget1 = new CDateTimeObservableValue(dateTime); bindingContext.bindValue(observeLocationDatewidgetObserveWidget1, startDate, null, null); // return bindingContext; } }