package de.urszeidler.shr5.runtime.ui.views;
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.conversion.Converter;
import org.eclipse.core.databinding.conversion.IConverter;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.list.IObservableList;
import org.eclipse.core.databinding.observable.list.WritableList;
import org.eclipse.core.databinding.observable.map.IObservableMap;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.databinding.observable.value.WritableValue;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.databinding.EMFObservables;
import org.eclipse.emf.databinding.EMFUpdateValueStrategy;
import org.eclipse.emf.databinding.edit.EMFEditObservables;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.util.EContentAdapter;
import org.eclipse.emf.ecp.core.ECPProject;
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.ui.provider.ExtendedImageRegistry;
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.databinding.viewers.ObservableListContentProvider;
import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.jface.window.ToolTip;
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.ScrolledComposite;
import org.eclipse.swt.custom.StyledText;
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.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.WorkbenchException;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Hyperlink;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.forms.widgets.TableWrapData;
import org.eclipse.ui.forms.widgets.TableWrapLayout;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.wb.swt.ResourceManager;
import de.urszeidler.eclipse.shr5.Shr5Package;
import de.urszeidler.eclipse.shr5.Shr5Package.Literals;
import de.urszeidler.eclipse.shr5.gameplay.CombatTurn;
import de.urszeidler.eclipse.shr5.gameplay.Command;
import de.urszeidler.eclipse.shr5.gameplay.CommandWrapper;
import de.urszeidler.eclipse.shr5.gameplay.ComplexAction;
import de.urszeidler.eclipse.shr5.gameplay.DamageTest;
import de.urszeidler.eclipse.shr5.gameplay.DefensTestCmd;
import de.urszeidler.eclipse.shr5.gameplay.ExecutionProtocol;
import de.urszeidler.eclipse.shr5.gameplay.ExecutionStack;
import de.urszeidler.eclipse.shr5.gameplay.FreeAction;
import de.urszeidler.eclipse.shr5.gameplay.GameplayFactory;
import de.urszeidler.eclipse.shr5.gameplay.GameplayPackage;
import de.urszeidler.eclipse.shr5.gameplay.InitativePass;
import de.urszeidler.eclipse.shr5.gameplay.InterruptAction;
import de.urszeidler.eclipse.shr5.gameplay.MeeleAttackCmd;
import de.urszeidler.eclipse.shr5.gameplay.OpposedSkillTestCmd;
import de.urszeidler.eclipse.shr5.gameplay.RangedAttackCmd;
import de.urszeidler.eclipse.shr5.gameplay.SemanticAction;
import de.urszeidler.eclipse.shr5.gameplay.SetExtendetData;
import de.urszeidler.eclipse.shr5.gameplay.SetFeatureCommand;
import de.urszeidler.eclipse.shr5.gameplay.SimpleAction;
import de.urszeidler.eclipse.shr5.gameplay.SkillTestCmd;
import de.urszeidler.eclipse.shr5.gameplay.SubjectCommand;
import de.urszeidler.eclipse.shr5.gameplay.util.CommandCallback;
import de.urszeidler.eclipse.shr5.gameplay.util.GameplayTools;
import de.urszeidler.eclipse.shr5.runtime.RuntimeCharacter;
import de.urszeidler.eclipse.shr5.runtime.RuntimePackage;
import de.urszeidler.eclipse.shr5.runtime.Team;
import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil;
import de.urszeidler.eclipse.shr5Management.Sex;
import de.urszeidler.emf.commons.ui.dialogs.OwnChooseDialog;
import de.urszeidler.emf.commons.ui.util.DefaultReferenceManager;
import de.urszeidler.shr5.ecp.Activator;
import de.urszeidler.shr5.ecp.binding.PathToImageConverter;
import de.urszeidler.shr5.ecp.dialogs.FeatureEditorDialogWert;
import de.urszeidler.shr5.ecp.dialogs.FeatureEditorDialogWert.DialogType;
import de.urszeidler.shr5.ecp.service.ScriptService;
import de.urszeidler.shr5.ecp.service.ScriptViewer;
import de.urszeidler.shr5.ecp.util.DefaultLabelProvider;
import de.urszeidler.shr5.ecp.util.DesktopApi;
import de.urszeidler.shr5.ecp.util.GenericHyperlinkAdapter;
import de.urszeidler.shr5.ecp.util.ShadowrunEditingTools;
import de.urszeidler.shr5.runtime.ui.dialogs.CheckInitative;
import de.urszeidler.shr5.runtime.ui.dialogs.DamageProbeFinishedDialog;
import de.urszeidler.shr5.runtime.ui.dialogs.ProbeDialog;
import de.urszeidler.shr5.runtime.ui.dialogs.ProbeDialog.ProbeExecutionState;
import de.urszeidler.shr5.runtime.ui.dialogs.TimetrackingDialog;
import de.urszeidler.shr5.scripting.Handout;
import de.urszeidler.shr5.scripting.HandoutType;
import de.urszeidler.shr5.scripting.Placement;
import de.urszeidler.shr5.scripting.Script;
import de.urszeidler.shr5.scripting.ScriptHistory;
import de.urszeidler.shr5.scripting.ScriptingFactory;
import de.urszeidler.shr5.scripting.ScriptingPackage;
public class RuntimeScriptView extends ViewPart implements ScriptViewer, CommandCallback {
private final class TimeTracker extends Job {
private boolean isTimetracking;
private TimeTracker(String name) {
super(name);
}
@Override
protected IStatus run(IProgressMonitor monitor) {
if (!isTimetracking)
return Status.OK_STATUS;
int delay = 1000;
if (timeTrackFactor > 1)
delay = (int)((1 / timeTrackFactor) * 1000L);
schedule(delay);
Placement plac = (Placement)placement1;// .getValue();
if (plac != null)
if (plac.getActualDate() != null)
plac.setActualDate(new Date((long)(plac.getActualDate().getTime() + (delay * timeTrackFactor))));
return Status.OK_STATUS;
}
}
private Adapter adapter = new EContentAdapter() {
@SuppressWarnings("unchecked")
public void notifyChanged(Notification notification) {
super.notifyChanged(notification);
Object notifier = notification.getNotifier();
Object feature = notification.getFeature();
if (notifier instanceof CommandWrapper || notifier instanceof ComplexAction || notifier instanceof SimpleAction
|| notifier instanceof FreeAction || notifier instanceof ScriptHistory || notifier instanceof ExecutionProtocol
|| notifier instanceof ExecutionStack)
return;
if (notifier instanceof RuntimeCharacter) {
RuntimeCharacter rc = (RuntimeCharacter)notifier;
if (RuntimePackage.Literals.PHYICAL_STATE__ZUSTAND.equals(feature)) {
String message = String.format("%tT >> %s is %s", placement1.getActualDate(), labelProvider.getText(rc),
ShadowrunEditingTools.toEEnumName(rc.getZustand(), rc, (EAttribute)feature));
printedProtocol.add(0, message);
}
} else if (notifier instanceof CombatTurn) {
CombatTurn ct = (CombatTurn)notifier;
if (GameplayPackage.Literals.COMBAT_TURN__CURRENT_TURN.equals(feature)) {
if (ct.getCurrentTurn() == null)
return;
String message = String.format(Messages.RuntimeScriptView_protocol_combat_turn_start_info, labelProvider.getText(ct
.getCurrentTurn().getSubject()), ct.getCurrentTurn().getSubject().getCharacter().getSex() == Sex.FEMALE
? Messages.RuntimeScriptView_sex_femal : Messages.RuntimeScriptView_sex_mal, ct.getCurrentTurn().getTurn(), ct
.getCurrentTurn().getPhase());
scriptService.sendMessage(ct.getCurrentTurn().getSubject(), message);
printedProtocol.add(0, message);
} else if (GameplayPackage.Literals.COMMAND__EXECUTING.equals(feature))
if (ct.isExecuted())
printedProtocol.add(0, String.format(Messages.RuntimeScriptView_protocol_combat_turn_end, ct.getDate(), ct.getSequence()));
else
printedProtocol.add(0, String.format(Messages.RuntimeScriptView_protocol_combatturn_start, ct.getDate(), ct.getSequence()));
return;
} else if (notifier instanceof InitativePass) {
InitativePass ip = (InitativePass)notifier;
if (GameplayPackage.Literals.COMMAND__EXECUTED.equals(feature))
if (ip.isExecuted()) {
TreeIterator<EObject> eAllContents = ip.eAllContents();
if (!eAllContents.hasNext())
printedProtocol.add(0,
String.format(Messages.RuntimeScriptView_protocol_pass, ip.getDate(), labelProvider.getText(ip.getSubject())));
for (Iterator<EObject> iterator = ip.eAllContents(); iterator.hasNext();) {
EObject eo = iterator.next();
if (eo instanceof ComplexAction || eo instanceof SimpleAction || eo instanceof FreeAction)
continue;
if (eo instanceof Command) {
Command cmd = (Command)eo;
String text = printCommand(cmd);
printedProtocol.add(0, text);
}
}
return;
} // else if (GameplayPackage.Literals.COMMAND__EXECUTING.equals(feature))
// if (ip.isExecuting()) {
// printedProtocol.add(
// 0,
// String.format("%s has %s %d turn at %d phase", labelProvider.getText(ip.getSubject()), ip.getSubject()
// .getCharacter().getSex() == Sex.FEMALE ? "her" : "his", ip.getPhase(), ip.getTurn()));
// }
}
if (GameplayPackage.Literals.COMMAND__EXECUTED.equals(feature)) {
if (notifier instanceof InterruptAction) {
InterruptAction ia = (InterruptAction)notifier;
if (ia.isExecuted()) {
String text = printCommand(ia);
printedProtocol.add(0, text);
return;
}
}
if (notifier.equals(commandStack.getCurrentCommand())) {
Command notifier1 = (Command)notifier;
if (notifier1.isExecuted() && !notifier1.isHidden()) {
String text = printCommand(notifier1);
printedProtocol.add(0, text);
}
}
}
}
};
static class ViewColumnViewerToolTipSupport extends ColumnViewerToolTipSupport {
protected ViewColumnViewerToolTipSupport(ColumnViewer viewer, int style, boolean manualActivation) {
super(viewer, style, manualActivation);
}
@Override
protected Composite createViewerToolTipContentArea(Event event, ViewerCell cell, Composite parent) {
final Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new RowLayout(SWT.VERTICAL));
// Text text = new Text(composite, SWT.SINGLE);
// text.setText(getText(event));
// text.setSize(100, 60);
// DateTime calendar = new DateTime(composite, SWT.CALENDAR);
// calendar.setEnabled(false);
// calendar.setSize(100, 100);
// composite.pack();
return composite;
}
public static final void enableFor(final ColumnViewer viewer) {
new ViewColumnViewerToolTipSupport(viewer, ToolTip.NO_RECREATE, false);
}
}
protected DataBindingContext m_bindingContext;
public static final String ID = "de.urszeidler.shr5.runtime.ui.views.RuntimeScriptView"; //$NON-NLS-1$
protected static final String COMBAT_PERSPECTIVE = "de.urszeidler.shr5.product.application.CombatPerspective"; //$NON-NLS-1$
protected static final String RUNTIME_PERSPECTIVE = "de.urszeidler.shr5.product.application.RuntimePerspective"; //$NON-NLS-1$
private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
private Placement placement1 = ScriptingFactory.eINSTANCE.createPlacement();
private WritableValue placement = new WritableValue(); // ScriptingFactory.eINSTANCE.createPlacement();
// protected boolean isTimetracking;
private TimeTracker timeTrackJob;
private double timeTrackFactor = 1;
private Label lblName;
private StyledText styledText;
private StyledText styledText_1;
private StyledText styledText_2;
// private Action startCombatAction;
// private Action switchPlacementAction;
// private Action startTimetrackingAction;
private ComposedAdapterFactory adapterFactory;
private AdapterFactoryItemDelegator itemDelegator;
// private AdapterFactoryContentProvider rootContentProvider;
// private AdapterFactoryContentProvider actionListContentProvider;
private LabelProvider labelProvider;
private CDateTime dateTime_1;
private CDateTime dateTime;
private ScriptService scriptService;
// private Script script;
// private WritableValue selectedCharacter = new WritableValue();
private ExecutionStack commandStack;
// private ExecutionProtocol protocol1;
private WritableValue history = new WritableValue();
private WritableValue protocol = new WritableValue();
private WritableList characters = new WritableList();
// private WritableList printedProtocol = new WritableList();
private TableViewer characterViewer;
private TableViewer treeViewer_commandProtokoll;
private TableViewer treeViewer_Commands;
// private Action executeAction;
private Label lblDesc;
private Label lblImg;
private Section sctnActionSection;
private Section sctnBackground;
private Section sctnTimeTracking;
private Section sctnInTheirFace;
private Section sctnDebugging;
private Label lblDatetimelong;
private IObservableList printedProtocol;
private Table tree;
private Composite composite_16;
private Composite composite_handout;
private Section sctnHandouts;
public RuntimeScriptView() {
adapterFactory = AdapterFactoryUtil.getInstance().getAdapterFactory();
itemDelegator = new AdapterFactoryItemDelegator(adapterFactory);
// actionListContentProvider = new AdapterFactoryContentProvider(adapterFactory);
labelProvider = new LabelProvider() {
@Override
public Image getImage(Object element) {
return ExtendedImageRegistry.getInstance().getImage(itemDelegator.getImage(element));
}
@Override
public String getText(Object object) {
return itemDelegator.getText(object);
}
};
timeTrackJob = new TimeTracker("timetrack"); //$NON-NLS-1$
timeTrackJob.setSystem(true);
}
/*
* (non-Javadoc) Method declared on IViewPart.
*/
public void init(IViewSite site) throws PartInitException {
super.init(site);
scriptService = (ScriptService)site.getService(ScriptService.class);
scriptService.registerScriptViewer(this);
placement1 = scriptService.getPlacement();
placement.setValue(placement1);
}
/**
* Create contents of the view part.
*
* @param parent
*/
@Override
public void createPartControl(Composite parent) {
ScrolledComposite scrolledComposite = new ScrolledComposite(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
formToolkit.adapt(scrolledComposite);
formToolkit.paintBordersFor(scrolledComposite);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
Composite composite = formToolkit.createComposite(scrolledComposite, SWT.NONE);
formToolkit.paintBordersFor(composite);
{
TableWrapLayout twl_composite = new TableWrapLayout();
twl_composite.makeColumnsEqualWidth = true;
composite.setLayout(twl_composite);
}
Composite composite_1 = formToolkit.createComposite(composite, SWT.BORDER);
composite_1.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
formToolkit.paintBordersFor(composite_1);
{
TableWrapLayout twl_composite_1 = new TableWrapLayout();
twl_composite_1.numColumns = 2;
composite_1.setLayout(twl_composite_1);
}
lblImg = formToolkit.createLabel(composite_1, "", SWT.NONE); //$NON-NLS-1$
lblImg.setLayoutData(new TableWrapData(TableWrapData.RIGHT, TableWrapData.MIDDLE, 2, 1));
// lblImg.setBounds(0, 0, 32, 32);
lblImg.setSize(96, 96);
lblImg.setText(" "); //$NON-NLS-1$
lblImg.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/interrupt-1.png")); //$NON-NLS-1$ //$NON-NLS-2$
lblName = formToolkit.createLabel(composite_1, "New Label", SWT.NONE); //$NON-NLS-1$
lblName.setLayoutData(new TableWrapData(TableWrapData.FILL, TableWrapData.MIDDLE, 1, 1));
lblName.setSize(96, 96);
lblDesc = new Label(composite_1, SWT.NONE);
lblDesc.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
formToolkit.adapt(lblDesc, true, true);
lblDesc.setText("desc"); //$NON-NLS-1$
// new Label(composite_1, SWT.NONE);
// ----
Composite composite_7 = formToolkit.createComposite(composite, SWT.NONE);
composite_7.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 3, 1));
formToolkit.paintBordersFor(composite_7);
{
TableWrapLayout twl_composite_7 = new TableWrapLayout();
twl_composite_7.numColumns = 1;
composite_7.setLayout(twl_composite_7);
}
sctnActionSection = formToolkit.createSection(composite_7, Section.TWISTIE | Section.TITLE_BAR);
sctnActionSection.setDescription(Messages.RuntimeScriptView_section_action_desc);
sctnActionSection.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
formToolkit.paintBordersFor(sctnActionSection);
sctnActionSection.setText(Messages.RuntimeScriptView_section_action);
sctnActionSection.setExpanded(true);
Composite composite_11 = formToolkit.createComposite(sctnActionSection, SWT.NONE);
formToolkit.paintBordersFor(composite_11);
sctnActionSection.setClient(composite_11);
composite_11.setLayout(new GridLayout(3, false));
Composite composite_13 = new Composite(composite_11, SWT.NONE);
GridData gd_composite_13 = new GridData(SWT.LEFT, SWT.FILL, false, false, 1, 1);
gd_composite_13.heightHint = 128;
gd_composite_13.widthHint = 200;
composite_13.setLayoutData(gd_composite_13);
formToolkit.adapt(composite_13);
formToolkit.paintBordersFor(composite_13);
composite_13.setLayout(new TableColumnLayout());
characterViewer = new TableViewer(composite_13, SWT.BORDER | SWT.MULTI);
ViewColumnViewerToolTipSupport.enableFor(characterViewer);
// characterViewer.addSelectionChangedListener(new ISelectionChangedListener() {
//
// @Override
// public void selectionChanged(SelectionChangedEvent event) {
// // ISelection selection = treeViewer.getSelection();
// // EObject firstEObject = ShadowrunEditingTools.extractFirstEObject(selection);
//
// // RuntimeCharacter value = (RuntimeCharacter)firstEObject;
// // List<EClass> commands = GameplayTools.getCharacterCommands();// createCharacterCommands(value);
// // treeViewer_Commands.setInput(commands);
//
// }
// });
final Table characterTable = characterViewer.getTable();
characterTable.addMouseListener(new MouseAdapter() {
@Override
public void mouseDoubleClick(MouseEvent e) {
ISelection selection = characterViewer.getSelection();
ShadowrunEditingTools.openEditorForFirstSelection(selection);
}
});
formToolkit.paintBordersFor(characterTable);
Composite composite_12 = new Composite(composite_11, SWT.NONE);
GridData gd_composite_12 = new GridData(SWT.LEFT, SWT.FILL, false, false, 1, 1);
gd_composite_12.heightHint = 128;
gd_composite_12.widthHint = 200;
composite_12.setLayoutData(gd_composite_12);
composite_12.setLayout(new TableColumnLayout());
// gd_composite_12.widthHint = 196;
// composite_12.setLayoutData(gd_composite_12);
formToolkit.adapt(composite_12);
formToolkit.paintBordersFor(composite_12);
treeViewer_Commands = new TableViewer(composite_12, SWT.BORDER | SWT.FULL_SELECTION);
Table tree_2 = treeViewer_Commands.getTable();
GridData gd_tree_2 = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1);
gd_tree_2.heightHint = 128;
// gd_tree_2.widthHint = 196;
tree_2.setLayoutData(gd_tree_2);
treeViewer_Commands.setContentProvider(ArrayContentProvider.getInstance());// new SimpleListContenProvider(actionListContentProvider));
treeViewer_Commands.setLabelProvider(new DefaultLabelProvider());
List<EClass> commands = GameplayTools.getCharacterCommands();// createCharacterCommands(value);
treeViewer_Commands.setInput(commands);
formToolkit.paintBordersFor(tree_2);
Composite composite_15 = formToolkit.createComposite(composite_11, SWT.NONE);
composite_15.setLayout(new FillLayout(SWT.HORIZONTAL));
composite_15.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));
formToolkit.paintBordersFor(composite_15);
ToolBar toolBar = new ToolBar(composite_15, SWT.BORDER | SWT.FLAT | SWT.RIGHT | SWT.VERTICAL);
formToolkit.adapt(toolBar);
formToolkit.paintBordersFor(toolBar);
final ToolItem tltmTimeTrackingItem = new ToolItem(toolBar, SWT.NONE);
tltmTimeTrackingItem.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if (timeTrackJob.isTimetracking) {
timeTrackJob.isTimetracking = false;
tltmTimeTrackingItem.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/time-tracking.png")); //$NON-NLS-1$ //$NON-NLS-2$
tltmTimeTrackingItem.setText(Messages.RuntimeScriptView_time_tracking_action_start);
} else {
TimetrackingDialog timetrackingDialog = new TimetrackingDialog(getSite().getShell(), timeTrackFactor);
if (timetrackingDialog.open() == Dialog.CANCEL)
return;
timeTrackFactor = timetrackingDialog.getFactor();
timeTrackJob.isTimetracking = true;
timeTrackJob.schedule();
tltmTimeTrackingItem.setText(Messages.RuntimeScriptView_time_tracking_action_stop);
tltmTimeTrackingItem.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/time-tracking-off.png")); //$NON-NLS-1$ //$NON-NLS-2$
}
}
});
tltmTimeTrackingItem.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/time-tracking.png")); //$NON-NLS-1$ //$NON-NLS-2$
tltmTimeTrackingItem.setText(Messages.RuntimeScriptView_time_tracking_action_start);
ToolItem tltmStartcombatturn = new ToolItem(toolBar, SWT.NONE);
tltmStartcombatturn.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/start-combat.png")); //$NON-NLS-1$ //$NON-NLS-2$
tltmStartcombatturn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
startCombatTurn();
}
});
tltmStartcombatturn.setText(Messages.RuntimeScriptView_startCombatTurn_action);
ToolItem tltmExecuteaction = new ToolItem(toolBar, SWT.NONE);
tltmExecuteaction.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/execute-command.png")); //$NON-NLS-1$ //$NON-NLS-2$
tltmExecuteaction.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
ISelection selection = treeViewer_Commands.getSelection();
EClass eObject = (EClass)ShadowrunEditingTools.extractFirstEObject(selection);
if (eObject != null) {
IStructuredSelection iStructuredSelection = (IStructuredSelection)characterViewer.getSelection();
for (Iterator<?> iterator = iStructuredSelection.iterator(); iterator.hasNext();) {
RuntimeCharacter rc = (RuntimeCharacter)iterator.next();
SubjectCommand command = (SubjectCommand)GameplayFactory.eINSTANCE.create(eObject);
command.setSubject(rc);
scriptService.executeCommand(command);// (Command)eObject);
}
// if (iStructuredSelection.size() == 1) {
// SubjectCommand command = (SubjectCommand)GameplayFactory.eINSTANCE.create(eObject);
// command.setSubject((RuntimeCharacter)ShadowrunEditingTools.extractFirstEObject(characterViewer.getSelection()));
// scriptService.executeCommand(command);// (Command)eObject);
// }
}
}
});
tltmExecuteaction.setText(Messages.RuntimeScriptView_execute_action);
ToolItem tltmSendMessage = new ToolItem(toolBar, SWT.NONE);
tltmSendMessage.setToolTipText(Messages.RuntimeScriptView_tltmSendMessage_toolTipText);
tltmSendMessage.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/talk.png"));
tltmSendMessage.setText(Messages.RuntimeScriptView_tltmSendMessage_text);
tltmSendMessage.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
EObject eObject = ShadowrunEditingTools.extractFirstEObject(characterViewer.getSelection());
if (eObject instanceof RuntimeCharacter) {
RuntimeCharacter character = (RuntimeCharacter)eObject;
InputDialog inputDialog = new InputDialog(getSite().getShell(), "Send a message", "Send a message to "
+ labelProvider.getText(character), "a message", null);
if (inputDialog.open() == Dialog.OK) {
scriptService.sendMessage(character, inputDialog.getValue());
}
}
}
});
ToolItem tltmSwitchplacement = new ToolItem(toolBar, SWT.NONE);
tltmSwitchplacement.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/switch-placement.png")); //$NON-NLS-1$ //$NON-NLS-2$
tltmSwitchplacement.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
switchPlacement();
}
});
tltmSwitchplacement.setText(Messages.RuntimeScriptView_switch_action);
lblDatetimelong = formToolkit.createLabel(composite_11, "", SWT.NONE); //$NON-NLS-1$
lblDatetimelong.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
new Label(composite_11, SWT.NONE);
Composite composite_8 = formToolkit.createComposite(composite, SWT.NONE);
composite_8.setLayout(new GridLayout(2, false));
composite_8.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 4, 1));
formToolkit.paintBordersFor(composite_8);
Composite composite_9 = formToolkit.createComposite(composite_8, SWT.NONE);
{
TableWrapLayout twl_composite_9 = new TableWrapLayout();
twl_composite_9.topMargin = 0;
twl_composite_9.makeColumnsEqualWidth = true;
composite_9.setLayout(twl_composite_9);
}
GridData gd_composite_9 = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1);
gd_composite_9.widthHint = 223;
composite_9.setLayoutData(gd_composite_9);
formToolkit.paintBordersFor(composite_9);
sctnBackground = formToolkit.createSection(composite_9, Section.TWISTIE | Section.TITLE_BAR);
sctnBackground.setLayoutData(new TableWrapData(TableWrapData.FILL, TableWrapData.MIDDLE, 1, 1));
sctnBackground.setSize(1183, 116);
formToolkit.paintBordersFor(sctnBackground);
sctnBackground.setText(Messages.RuntimeScriptView_section_background);
sctnBackground.setExpanded(true);
Composite composite_2 = formToolkit.createComposite(sctnBackground, SWT.NONE);
formToolkit.paintBordersFor(composite_2);
sctnBackground.setClient(composite_2);
composite_2.setLayout(new GridLayout(1, false));
styledText = new StyledText(composite_2, SWT.READ_ONLY | SWT.WRAP);
GridData gd_styledText = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
gd_styledText.minimumHeight = 80;
styledText.setLayoutData(gd_styledText);
formToolkit.adapt(styledText);
formToolkit.paintBordersFor(styledText);
Composite composite_10 = formToolkit.createComposite(composite_8, SWT.NONE);
composite_10.setLayout(new FillLayout(SWT.HORIZONTAL));
composite_10.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
formToolkit.paintBordersFor(composite_10);
sctnTimeTracking = formToolkit.createSection(composite_10, Section.TWISTIE | Section.TITLE_BAR);
sctnTimeTracking.setDescription(Messages.RuntimeScriptView_section_timetracking_description);
formToolkit.paintBordersFor(sctnTimeTracking);
sctnTimeTracking.setText(Messages.RuntimeScriptView_section_timetracking);
sctnTimeTracking.setExpanded(true);
Composite composite_5 = formToolkit.createComposite(sctnTimeTracking, SWT.NONE);
formToolkit.paintBordersFor(composite_5);
sctnTimeTracking.setClient(composite_5);
composite_5.setLayout(new GridLayout(1, false));
dateTime = new CDateTime(composite_5, CDT.SPINNER | CDT.COMPACT | CDT.DATE_LONG);
dateTime.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
formToolkit.adapt(dateTime);
formToolkit.paintBordersFor(dateTime);
new Label(composite_5, SWT.NONE);
dateTime_1 = new CDateTime(composite_5, CDT.BORDER | CDT.SPINNER | CDT.CLOCK_24_HOUR | CDT.COMPACT | CDT.SIMPLE | CDT.TIME_MEDIUM) {
};
dateTime_1.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
formToolkit.adapt(dateTime_1);
formToolkit.paintBordersFor(dateTime_1);
Composite composite_6 = formToolkit.createComposite(composite_5, SWT.NONE);
composite_6.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));
composite_6.setLayout(new GridLayout(1, false));
formToolkit.paintBordersFor(composite_6);
sctnInTheirFace = formToolkit.createSection(composite_9, Section.TWISTIE | Section.TITLE_BAR);
sctnInTheirFace.setLayoutData(new TableWrapData(TableWrapData.FILL, TableWrapData.TOP, 1, 1));
formToolkit.paintBordersFor(sctnInTheirFace);
sctnInTheirFace.setText(Messages.RuntimeScriptView_section_in_their_face);
sctnInTheirFace.setExpanded(true);
Composite composite_3 = formToolkit.createComposite(sctnInTheirFace, SWT.NONE);
formToolkit.paintBordersFor(composite_3);
sctnInTheirFace.setClient(composite_3);
composite_3.setLayout(new GridLayout(1, false));
styledText_1 = new StyledText(composite_3, SWT.READ_ONLY | SWT.WRAP);
GridData gd_styledText_1 = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
gd_styledText_1.minimumHeight = 80;
gd_styledText_1.widthHint = 120;
styledText_1.setLayoutData(gd_styledText_1);
styledText_1.setEditable(false);
styledText_1.setAlwaysShowScrollBars(false);
formToolkit.adapt(styledText_1);
formToolkit.paintBordersFor(styledText_1);
sctnDebugging = formToolkit.createSection(composite_9, Section.TWISTIE | Section.TITLE_BAR);
sctnDebugging.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
sctnInTheirFace.setLayoutData(new TableWrapData(TableWrapData.FILL, TableWrapData.TOP, 1, 1));
formToolkit.paintBordersFor(sctnInTheirFace);
sctnDebugging.setText(Messages.RuntimeScriptView_section_debugging);
sctnDebugging.setExpanded(true);
Composite composite_4 = formToolkit.createComposite(sctnDebugging, SWT.NONE);
formToolkit.paintBordersFor(composite_4);
sctnDebugging.setClient(composite_4);
composite_4.setLayout(new GridLayout(1, false));
styledText_2 = new StyledText(composite_4, SWT.READ_ONLY | SWT.WRAP);
GridData gd_styledText_2 = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
gd_styledText_2.minimumHeight = 80;
gd_styledText_2.widthHint = 120;
styledText_2.setLayoutData(gd_styledText_2);
styledText_2.setEditable(false);
styledText_2.setAlwaysShowScrollBars(false);
formToolkit.adapt(styledText_2);
formToolkit.paintBordersFor(styledText_2);
sctnHandouts = formToolkit.createSection(composite_9, Section.TWISTIE | Section.TITLE_BAR);
sctnHandouts.setLayoutData(new TableWrapData(TableWrapData.FILL, TableWrapData.TOP, 1, 1));
formToolkit.paintBordersFor(sctnHandouts);
sctnHandouts.setText(Messages.RuntimeScriptView_sctnHandouts_text);
sctnHandouts.setExpanded(true);
composite_16 = formToolkit.createComposite(sctnHandouts, SWT.NONE);
formToolkit.adapt(composite_16);
formToolkit.paintBordersFor(composite_16);
sctnHandouts.setClient(composite_16);
composite_16.setLayout(new FillLayout(SWT.HORIZONTAL));
composite_handout = new Composite(composite_16, SWT.NONE);
formToolkit.adapt(composite_handout);
formToolkit.paintBordersFor(composite_handout);
composite_handout.setLayout(new GridLayout(1, false));
Section sctnProtocol = formToolkit.createSection(composite, Section.EXPANDED | Section.TWISTIE | Section.TITLE_BAR);
TableWrapData twd_sctnProtocol = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB, 1, 1);
twd_sctnProtocol.heightHint = 218;
sctnProtocol.setLayoutData(twd_sctnProtocol);
formToolkit.paintBordersFor(sctnProtocol);
sctnProtocol.setText(Messages.RuntimeScriptView_section_protocol);
Composite composite_14 = new Composite(sctnProtocol, SWT.NONE);
sctnProtocol.setClient(composite_14);
formToolkit.adapt(composite_14);
formToolkit.paintBordersFor(composite_14);
composite_14.setLayout(new FillLayout(SWT.HORIZONTAL));
// Composite composite_14 = formToolkit.createComposite(composite, SWT.NONE);
// composite_14.setLayout(new FillLayout(SWT.HORIZONTAL));
// TableWrapData twd_composite_14 = new TableWrapData(TableWrapData.FILL, TableWrapData.FILL, 1, 1);
// twd_composite_14.heightHint = 239;
// composite_14.setLayoutData(twd_composite_14);
// formToolkit.paintBordersFor(composite_14);
treeViewer_commandProtokoll = new TableViewer(composite_14, SWT.BORDER);
tree = treeViewer_commandProtokoll.getTable();
tree.setHeaderVisible(false);
formToolkit.paintBordersFor(tree);
composite.pack(true);
scrolledComposite.setContent(composite);
scrolledComposite.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
m_bindingContext = initDataBindings1();
}
@Override
public void dispose() {
placement.dispose();
protocol.dispose();
characters.dispose();
super.dispose();
}
@Override
public void setFocus() {
// Set the focus
}
@Override
public void setPlacement(Placement placement) {
this.placement1 = placement;
Script script2 = placement.getScript();
this.placement.setValue(placement1);
if (placement1.getActualDate() == null)
placement1.setActualDate(placement1.getStartDate());
characters.clear();
EList<Team> teams = placement.getTeams();
Team player = script2.getPlayer();
characters.addAll(player.getMembers());
for (Team team : teams) {
characters.addAll(team.getMembers());
}
buildHandouts();
sctnActionSection.setExpanded(true);
sctnBackground.setExpanded(true);
sctnDebugging.setExpanded(false);
sctnInTheirFace.setExpanded(false);
sctnTimeTracking.setEnabled(true);
}
private void buildHandouts() {
composite_handout.dispose();
composite_handout = new Composite(composite_16, SWT.NONE);
formToolkit.adapt(composite_handout);
formToolkit.paintBordersFor(composite_handout);
composite_handout.setLayout(new GridLayout(1, false));
EList<Handout> handouts = placement1.getHandouts();
for (Handout handout : handouts) {
Hyperlink hprlnkNewHyperlink = formToolkit.createHyperlink(composite_handout,
handout.getName() != null ? handout.getName() : handout.getUrl(), SWT.NONE);
formToolkit.paintBordersFor(hprlnkNewHyperlink);
hprlnkNewHyperlink.addHyperlinkListener(new GenericHyperlinkAdapter<Handout>(handout) {
@Override
public void linkActivated(HyperlinkEvent e) {
try {
if (object.getType() == HandoutType.WEBPAGE){
URI uri = new URI(object.getUrl());
DesktopApi.browse(uri);
} else {
File file = new File(object.getUrl());
DesktopApi.open(file);
}
} catch (URISyntaxException e1) {
e1.printStackTrace();
}
}
});
}
composite_handout.layout(true, true);
composite_16.getParent().layout(true,true);
sctnHandouts.setExpanded(false);
sctnHandouts.setExpanded(true);
}
@Override
public void setScript(Script script) {
commandStack = script.getHistory().getCommandStack();
protocol.setValue(commandStack.getProtocol());
history.setValue(script.getHistory());
if (!script.eAdapters().contains(adapter))
script.eAdapters().add(adapter);
}
@Override
public void sendMessage(RuntimeCharacter character, String message) {
// don't send messages to our self
}
protected DataBindingContext initDataBindings1() {
DataBindingContext bindingContext = new DataBindingContext();
Realm realm = Realm.getDefault();
ECPProject defaultEcpProject = Activator.getDefault().getDefaultEcpProject();
EditingDomain editingDomain = defaultEcpProject.getEditingDomain();
//
IWidgetValueProperty image = WidgetProperties.image();
ISWTObservableValue observedImage = image.observe(lblImg);
IObservableValue observeValue = EMFObservables.observeDetailValue(realm, placement, Shr5Package.Literals.BESCHREIBBAR__IMAGE);
IConverter converter = null;
converter = new PathToImageConverter(String.class, Image.class, 48);
UpdateValueStrategy toModel = new UpdateValueStrategy();
UpdateValueStrategy toWidget = new UpdateValueStrategy().setConverter(converter);
bindingContext.bindValue(observedImage, observeValue, toModel, toWidget);
//
//
IObservableValue observeTextLblDescObserveWidget = WidgetProperties.text().observe(lblDesc);
IObservableValue placement1BeschreibungObserveValue = EMFObservables
.observeDetailValue(realm, placement, Literals.BESCHREIBBAR__BESCHREIBUNG);
bindingContext.bindValue(observeTextLblDescObserveWidget, placement1BeschreibungObserveValue, new UpdateValueStrategy(
UpdateValueStrategy.POLICY_NEVER), new EMFUpdateValueStrategy());
//
IObservableValue observeTextLblNameObserveWidget = WidgetProperties.text().observe(lblName);
IObservableValue placementNameObserveValue = EMFObservables.observeDetailValue(realm, placement, Literals.BESCHREIBBAR__NAME);
bindingContext.bindValue(observeTextLblNameObserveWidget, placementNameObserveValue,
new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER), new EMFUpdateValueStrategy());
//
IObservableValue observeTextStyledTextObserveWidget = WidgetProperties.text(SWT.Modify).observe(styledText);
IObservableValue placementBackgroundObserveValue = EMFObservables.observeDetailValue(realm, placement,
ScriptingPackage.Literals.PLACEMENT__BACKGROUND);
bindingContext.bindValue(observeTextStyledTextObserveWidget, placementBackgroundObserveValue, new UpdateValueStrategy(
UpdateValueStrategy.POLICY_NEVER), new EMFUpdateValueStrategy());
//
IObservableValue observeTextStyledText_1ObserveWidget = WidgetProperties.text(SWT.Modify).observe(styledText_1);
IObservableValue placementInTheirFaceObserveValue = EMFObservables.observeDetailValue(realm, placement,
ScriptingPackage.Literals.PLACEMENT__IN_THEIR_FACE);
bindingContext.bindValue(observeTextStyledText_1ObserveWidget, placementInTheirFaceObserveValue, new UpdateValueStrategy(
UpdateValueStrategy.POLICY_NEVER), new EMFUpdateValueStrategy());
//
IObservableValue observeTextStyledText_2ObserveWidget = WidgetProperties.text(SWT.Modify).observe(styledText_2);
IObservableValue placementDebuggingObserveValue = EMFObservables.observeDetailValue(realm, placement,
ScriptingPackage.Literals.PLACEMENT__DEBUGGING);
bindingContext.bindValue(observeTextStyledText_2ObserveWidget, placementDebuggingObserveValue, new UpdateValueStrategy(
UpdateValueStrategy.POLICY_NEVER), new EMFUpdateValueStrategy());
//
IObservableValue observeDateTimeObserveWidget = WidgetProperties.text().observe(lblDatetimelong);
IObservableValue observeDetailValue = EMFObservables.observeDetailValue(realm, placement, ScriptingPackage.Literals.TIME_FRAME__ACTUAL_DATE);
EMFUpdateValueStrategy modelToTarget = new EMFUpdateValueStrategy();
final DateFormat dateTimeInstance = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.SHORT);
modelToTarget.setConverter(new Converter(Date.class, String.class) {
@Override
public Object convert(Object fromObject) {
return dateTimeInstance.format(fromObject);
}
});
bindingContext.bindValue(observeDateTimeObserveWidget, observeDetailValue, null, modelToTarget);
//
IObservableValue observeLocationDatewidgetObserveWidget = new CDateTimeObservableValue(dateTime_1);
IObservableValue currentChangeDateObserveValue = EMFObservables.observeDetailValue(realm, placement,
ScriptingPackage.Literals.TIME_FRAME__ACTUAL_DATE);
bindingContext.bindValue(observeLocationDatewidgetObserveWidget, currentChangeDateObserveValue, null, null);
//
//
IObservableValue observeLocationDatewidgetObserveWidget1 = new CDateTimeObservableValue(dateTime);
IObservableValue currentChangeDateObserveValue1 = EMFObservables.observeDetailValue(realm, placement,
ScriptingPackage.Literals.TIME_FRAME__ACTUAL_DATE);
bindingContext.bindValue(observeLocationDatewidgetObserveWidget1, currentChangeDateObserveValue1, null, null);
//
printedProtocol = EMFEditObservables.observeDetailList(realm, editingDomain, history,
ScriptingPackage.Literals.SCRIPT_HISTORY__WRITTEN_PROTOKOL);
// IEMFEditListProperty list = EMFEditProperties.list(editingDomain, ScriptingPackage.Literals.SCRIPT_HISTORY__WRITTEN_PROTOKOL);
// printedProtocol = list.observe(observeDetailValue2);
//
ObservableListContentProvider listProtocolProvider = new ObservableListContentProvider();
treeViewer_commandProtokoll.setContentProvider(listProtocolProvider);
treeViewer_commandProtokoll.setInput(printedProtocol);
treeViewer_commandProtokoll.setLabelProvider(labelProvider);
//
ObservableListContentProvider listContentProvider = new ObservableListContentProvider();
IObservableMap[] observeMaps = EMFObservables.observeMaps(listContentProvider.getKnownElements(),
new EStructuralFeature[]{ RuntimePackage.Literals.RUNTIME_CHARACTER__CHARACTER });
characterViewer.setLabelProvider(new ObservableMapLabelProvider(observeMaps) {
@Override
public String getColumnText(Object element, int columnIndex) {
if (columnIndex == 0) {
return labelProvider.getText(element);
}
return super.getColumnText(element, columnIndex);
}
@Override
public Image getColumnImage(Object element, int columnIndex) {
if (columnIndex == 0) {
return labelProvider.getImage(element);
}
return super.getColumnImage(element, columnIndex);
}
@Override
public Image getImage(Object element) {
return labelProvider.getImage(element);
}
@Override
public String getText(Object element) {
return labelProvider.getText(element);
}
});
characterViewer.setContentProvider(listContentProvider);
characterViewer.setInput(characters);
//
return bindingContext;
}
@Override
public CommandCallback getCmdCallback() {
return this;
}
@SuppressWarnings("unchecked")
protected void startCombatTurn() {
timeTrackJob.isTimetracking = false;
CombatTurn combatTurn = GameplayFactory.eINSTANCE.createCombatTurn();
combatTurn.setDate(placement1.getActualDate());
combatTurn.setCmdCallback(RuntimeScriptView.this);
List<Object> choiceOfValues = new ArrayList<Object>();
EList<Team> teams = placement1.getTeams();
for (Team team : teams) {
choiceOfValues.addAll(team.getMembers());
}
if (placement1.getScript() != null)
choiceOfValues.addAll(placement1.getScript().getPlayer().getMembers());
FeatureEditorDialogWert dialogWert = new FeatureEditorDialogWert(getSite().getShell(), labelProvider, combatTurn,
GameplayPackage.Literals.COMBAT_TURN__COMBATANTS, Messages.RuntimeScriptView_dialog_select_combatans_titel, choiceOfValues,
combatTurn, DialogType.simple);
if (dialogWert.open() == Dialog.OK)
combatTurn.getCombatants().addAll((Collection<? extends RuntimeCharacter>)dialogWert.getResult());
else
return;
sctnActionSection.setExpanded(false);
try {
PlatformUI.getWorkbench().showPerspective(COMBAT_PERSPECTIVE, PlatformUI.getWorkbench().getActiveWorkbenchWindow());
} catch (WorkbenchException e) {
Activator.logError(e);
}
scriptService.setCombatTurn(combatTurn);
}
/**
* Start a new combat turn with the given characters.
*
* @param combatants
*/
protected void contiueCombatTurn(Collection<? extends RuntimeCharacter> combatants) {
timeTrackJob.isTimetracking = false;
CombatTurn combatTurn = GameplayFactory.eINSTANCE.createCombatTurn();
combatTurn.setDate(placement1.getActualDate());
combatTurn.setCmdCallback(RuntimeScriptView.this);
combatTurn.getCombatants().addAll(combatants);
scriptService.setCombatTurn(combatTurn);
}
/**
* Returns a formated history line.
*
* @param cmd
* @return
*/
private String printCommand(Command cmd) {
return String.format(Messages.RuntimeScriptView_protocol_basic_command, cmd.getDate(), labelProvider.getText(cmd),
ShadowrunEditingTools.command2String(cmd));
}
@SuppressWarnings("unchecked")
private void switchPlacement() {
EList<Placement> nextPlacements = placement1.getNextPlacements();
OwnChooseDialog dialog = new OwnChooseDialog(getSite().getShell(), nextPlacements.toArray(new Object[]{}),
Messages.RuntimeScriptView_choose_placement_dialog_titel, Messages.RuntimeScriptView_choose_placement_dialog_message);
dialog.setLabelProvider(labelProvider);
int open = dialog.open();
if (open == Dialog.OK) {
Object[] result = dialog.getResult();
if (result.length > 0) {
Placement eo = (Placement)result[0];
SetFeatureCommand command = GameplayFactory.eINSTANCE.createSetFeatureCommand();
command.setDate(placement1.getActualDate());
scriptService.setPlacement(eo);
printedProtocol.add(0,
String.format(Messages.RuntimeScriptView_protocol_switch_placement, placement1.getActualDate(), labelProvider.getText(eo)));
}
}
}
@Override
public void beforeExecute(Command cmd, EStructuralFeature... eStructuralFeatures) {
if (cmd instanceof SemanticAction) {
return;
}
ProbeDialog d = new ProbeDialog(getSite().getShell(), cmd, labelProvider, itemDelegator, new DefaultReferenceManager(itemDelegator),
Messages.RuntimeScriptView_probedialog_titel_before_execute, ProbeExecutionState.beforeExecute, eStructuralFeatures);
d.open();
}
@Override
public void beforeSubcommands(Command cmd, EStructuralFeature... eStructuralFeatures) {
ProbeDialog d = new ProbeDialog(getSite().getShell(), cmd, labelProvider, itemDelegator, new DefaultReferenceManager(itemDelegator),
Messages.RuntimeScriptView_probedialog_titel_before_subcommand, ProbeExecutionState.beforeSubcommands, eStructuralFeatures);
d.open();
}
@Override
public boolean prepareCommand(Command cmd, EStructuralFeature... eStructuralFeatures) {
if (cmd instanceof CommandWrapper || cmd instanceof SemanticAction || cmd instanceof SimpleAction )//)
return false;
if (cmd instanceof CombatTurn) {
CombatTurn ct = (CombatTurn)cmd;
int open = new CheckInitative(getSite().getShell(), ct).open();
return open==Dialog.OK;// true;
} else if (cmd instanceof MeeleAttackCmd) {
MeeleAttackCmd mc = (MeeleAttackCmd)cmd;
if (mc.getSubject() != null && mc.getWeapon() != null && mc.getSkill() != null && mc.getObject() != null)
return true;
ProbeDialog genericEObjectDialog = new ProbeDialog(getSite().getShell(), cmd, labelProvider, itemDelegator, new DefaultReferenceManager(
itemDelegator), Messages.RuntimeScriptView_probedialog_titel_prepare_command, ProbeExecutionState.prepare,
GameplayPackage.Literals.SUBJECT_COMMAND__SUBJECT, GameplayPackage.Literals.MEELE_ATTACK_CMD__WEAPON,
GameplayPackage.Literals.SKILL_TEST_CMD__SKILL, GameplayPackage.Literals.OPPOSED_SKILL_TEST_CMD__OBJECT,
GameplayPackage.Literals.PROBE_COMMAND__MODS, GameplayPackage.Literals.PROBE__PUSH_THE_LIMIT);
if (genericEObjectDialog.open() == Dialog.CANCEL) {
return false;
}
return true;
} else if (cmd instanceof RangedAttackCmd) {
RangedAttackCmd rc = (RangedAttackCmd)cmd;
// if (rc.getSubject() != null && rc.getWeapon() != null && rc.getSkill() != null && rc.getObject() != null)
// return;
ProbeDialog genericEObjectDialog = new ProbeDialog(getSite().getShell(), cmd, labelProvider, itemDelegator, new DefaultReferenceManager(
itemDelegator), Messages.RuntimeScriptView_probedialog_titel_prepare_command, ProbeExecutionState.prepare, eStructuralFeatures);
// GameplayPackage.Literals.SUBJECT_COMMAND__SUBJECT,
// GameplayPackage.Literals.RANGED_ATTACK_CMD__WEAPON, GameplayPackage.Literals.RANGED_ATTACK_CMD__RANGE,
// GameplayPackage.Literals.SKILL_TEST_CMD__SKILL, GameplayPackage.Literals.OPPOSED_SKILL_TEST_CMD__OBJECT,
// GameplayPackage.Literals.PROBE_COMMAND__MODS);
int open = genericEObjectDialog.open();
return open==Dialog.OK;
} else if (cmd instanceof DamageTest) {
ProbeDialog genericEObjectDialog = new ProbeDialog(getSite().getShell(), cmd, labelProvider, itemDelegator, new DefaultReferenceManager(
itemDelegator), Messages.RuntimeScriptView_probedialog_titel_prepare_command, ProbeExecutionState.prepare,
GameplayPackage.Literals.SUBJECT_COMMAND__SUBJECT, GameplayPackage.Literals.DAMAGE_TEST__DAMAGE,
GameplayPackage.Literals.DAMAGE_TEST__DV, GameplayPackage.Literals.PROBE_COMMAND__MODS,
GameplayPackage.Literals.PROBE__PUSH_THE_LIMIT);
int open = genericEObjectDialog.open();
return open==Dialog.OK;
} else if (cmd instanceof DefensTestCmd) {
ProbeDialog genericEObjectDialog = new ProbeDialog(getSite().getShell(), cmd, labelProvider, itemDelegator, new DefaultReferenceManager(
itemDelegator), Messages.RuntimeScriptView_probedialog_titel_prepare_command, ProbeExecutionState.prepare,
GameplayPackage.Literals.SUBJECT_COMMAND__SUBJECT, GameplayPackage.Literals.DEFENS_TEST_CMD__ATTACKERS_HITS,
GameplayPackage.Literals.PROBE_COMMAND__MODS, GameplayPackage.Literals.PROBE__PUSH_THE_LIMIT);
int open = genericEObjectDialog.open();
return open==Dialog.OK;
} else if (cmd instanceof SetFeatureCommand) {
// SetFeatureCommand sf = (SetFeatureCommand)cmd;
// ProbeDialog d = new ProbeDialog(getSite().getShell(), cmd, labelProvider, itemDelegator, new DefaultReferenceManager(itemDelegator),
// "prepare", ProbeExecutionState.prepare,eStructuralFeatures);
// d.open();
return true;
} else if (cmd instanceof SetExtendetData) {
// SetExtendetData new_name = (SetExtendetData)cmd;
return true;
} else if (cmd instanceof OpposedSkillTestCmd) {
} else if (cmd instanceof SkillTestCmd) {
ProbeDialog d = new ProbeDialog(getSite().getShell(), cmd, labelProvider, itemDelegator, new DefaultReferenceManager(itemDelegator),
Messages.RuntimeScriptView_probedialog_titel_prepare_command, ProbeExecutionState.prepare,
GameplayPackage.Literals.SUBJECT_COMMAND__SUBJECT, GameplayPackage.Literals.SKILL_TEST_CMD__SKILL,
GameplayPackage.Literals.PROBE__LIMIT, GameplayPackage.Literals.SUCCES_TEST__THRESHOLDS,
GameplayPackage.Literals.PROBE_COMMAND__MODS, GameplayPackage.Literals.PROBE__PUSH_THE_LIMIT,
GameplayPackage.Literals.COMMAND__HIDDEN);
int open = d.open();
return open==Dialog.OK;
}
ProbeDialog d = new ProbeDialog(getSite().getShell(), cmd, labelProvider, itemDelegator, new DefaultReferenceManager(itemDelegator),
Messages.RuntimeScriptView_probedialog_titel_prepare_command, ProbeExecutionState.prepare, eStructuralFeatures);
int open = d.open();
return open==Dialog.OK;
// GenericEObjectDialog genericEObjectDialog = new GenericEObjectDialog(getSite().getShell(), cmd, itemDelegator, labelProvider,
// new DefaultReferenceManager(itemDelegator));
// // GenericEObjectDialog genericEObjectDialog = new GenericEObjectDialog(getSite().getShell(), cmd, itemDelegator, labelProvider,
// // new DefaultReferenceManager(itemDelegator));
// genericEObjectDialog.open();
}
@Override
public void afterCommand(Command cmd, EStructuralFeature... eStructuralFeatures) {
if (cmd instanceof CommandWrapper)
return;
if (cmd instanceof CombatTurn) {
CombatTurn ct = (CombatTurn)cmd;
((Placement)placement.getValue()).setActualDate(new Date(ct.getDate().getTime() + 3000));
if (MessageDialog.openQuestion(getSite().getShell(), Messages.RuntimeScriptView_continue_combat_dialog_titel,
Messages.RuntimeScriptView_continue_combat_dialog_message)) {
EList<RuntimeCharacter> combatants = ct.getCombatants();
contiueCombatTurn(combatants);
} else {
try {
PlatformUI.getWorkbench().showPerspective(RUNTIME_PERSPECTIVE, PlatformUI.getWorkbench().getActiveWorkbenchWindow());
} catch (WorkbenchException e) {
Activator.logError(e);
}
}
return;
} else if (cmd instanceof DamageTest) {
new DamageProbeFinishedDialog(getSite().getShell(), cmd, labelProvider).open();
return;
} else if (cmd instanceof SetFeatureCommand) {
SetFeatureCommand sf = (SetFeatureCommand)cmd;
ProbeDialog d = new ProbeDialog(getSite().getShell(), cmd, labelProvider, itemDelegator, new DefaultReferenceManager(itemDelegator),
Messages.RuntimeScriptView_probedialog_titel_prepare_command, ProbeExecutionState.prepare, eStructuralFeatures);
d.open();
}
// ProbeFinishedDialog probeFinishedDialog = new ProbeFinishedDialog(getSite().getShell(), cmd, labelProvider);
// probeFinishedDialog.open();
ProbeDialog d = new ProbeDialog(getSite().getShell(), cmd, labelProvider, itemDelegator, new DefaultReferenceManager(itemDelegator),
Messages.RuntimeScriptView_probedialog_titel_finished_command, ProbeExecutionState.afterExecute);
d.open();
// GenericEObjectDialog genericEObjectDialog = new GenericEObjectDialog(getSite().getShell(), cmd, itemDelegator, labelProvider,
// new DefaultReferenceManager(itemDelegator));
// genericEObjectDialog.open();
}
}