/**
*
*/
package de.urszeidler.shr5.runtime.ui.views;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.MenuItem;
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.part.ViewPart;
import org.eclipse.wb.swt.ResourceManager;
import org.eclipse.wb.swt.SWTResourceManager;
import de.urszeidler.eclipse.shr5.gameplay.CombatTurn;
import de.urszeidler.eclipse.shr5.gameplay.ComplexAction;
import de.urszeidler.eclipse.shr5.gameplay.FreeAction;
import de.urszeidler.eclipse.shr5.gameplay.GameplayFactory;
import de.urszeidler.eclipse.shr5.gameplay.InitativePass;
import de.urszeidler.eclipse.shr5.gameplay.PhaseCmd;
import de.urszeidler.eclipse.shr5.gameplay.SemanticAction;
import de.urszeidler.eclipse.shr5.gameplay.SemanticType;
import de.urszeidler.eclipse.shr5.gameplay.SetExtendetData;
import de.urszeidler.eclipse.shr5.gameplay.SimpleAction;
import de.urszeidler.eclipse.shr5.gameplay.SkillTestCmd;
import de.urszeidler.eclipse.shr5.gameplay.util.GameplayTools;
import de.urszeidler.eclipse.shr5.runtime.ExtendetData;
import de.urszeidler.eclipse.shr5.runtime.RuntimeCharacter;
import de.urszeidler.eclipse.shr5.runtime.RuntimeFactory;
import de.urszeidler.eclipse.shr5.runtime.RuntimePackage;
import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil;
import de.urszeidler.shr5.ecp.service.CombatViewer;
import de.urszeidler.shr5.ecp.service.ScriptService;
import de.urszeidler.shr5.ecp.util.DropdownSelectionListener;
import de.urszeidler.shr5.runtime.ui.widgets.BasicActionPanelWidget;
import de.urszeidler.shr5.runtime.ui.widgets.CombatTurnList;
/**
* @author urs
*/
public class CombatTurnView extends ViewPart implements CombatViewer {
public class HandlungsContenProvider implements IContentProvider, ITreeContentProvider {
public HandlungsContenProvider(CombatTurn kampfrunde) {
}
@Override
public void dispose() {
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
rootContentProvider.inputChanged(viewer, oldInput, newInput);
}
@Override
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof CombatTurn) {
CombatTurn kr = (CombatTurn)parentElement;
EList<InitativePass> phasen = kr.getActionPhases();
return phasen.toArray();
} else
return rootContentProvider.getChildren(parentElement);
}
@Override
public Object getParent(Object element) {
if (element instanceof PhaseCmd) {
return combatTurn;
}
return rootContentProvider.getChildren(element);
}
@Override
public boolean hasChildren(Object element) {
if (element instanceof CombatTurn) {
CombatTurn kr = (CombatTurn)element;
EList<InitativePass> phasen = kr.getActionPhases();
return phasen.size() > 0;
}
return rootContentProvider.hasChildren(element);
}
@Override
public Object[] getElements(Object inputElement) {
return getChildren(inputElement);
}
}
public class SimpleActionDropdownSelectionListener extends DropdownSelectionListener<SimpleAction> {
private InitativePass iniPass;
public SimpleActionDropdownSelectionListener(ToolItem dropdown, InitativePass iniPass) {
super(dropdown);
this.iniPass = iniPass;
// menuManager.setRemoveAllWhenShown(true);
}
public void add(String item, final SimpleAction simpleAction) {
MenuItem menuItem = new MenuItem(menu, SWT.NONE);
menuItem.setText(item);
menuItem.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
// InitativePass initativePass = combatTurn.getCurrentTurn();
simpleAction.setSubject(iniPass.getSubject());
GameplayTools.insertSimpleAction(iniPass, simpleAction);
// if (complexAction.equals(SET_LEFT_HAND)) {
// InitativePass initativePass = combatTurn.getCurrentTurn();
// SetFeatureCommand featureCommand = ShadowrunEditingTools.changeItem(initativePass.getSubject(),
// RuntimePackage.Literals.RUNTIME_CHARACTER__LEFT_HAND, getSite().getShell());
// SimpleAction simpleAction = GameplayTools.getSimpleAction(initativePass);
// simpleAction.getSubCommands().add(featureCommand);
// }
}
});
}
}
public class FreeActionDropdownSelectionListner extends DropdownSelectionListener<FreeAction> {
public FreeActionDropdownSelectionListner(ToolItem dropdown) {
super(dropdown);
}
@Override
public void add(String item, final FreeAction action) {
MenuItem menuItem = new MenuItem(menu, SWT.NONE);
menuItem.setText(item);
if (action == null)
menuItem.setEnabled(false);
menuItem.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
// MenuItem selected = (MenuItem) event.widget;
InitativePass initativePass = combatTurn.getCurrentTurn();
action.setSubject(initativePass.getSubject());
initativePass.setFreeAction(action);
// dropdown.setText(selected.getText());
}
});
}
}
public class ComplexActionDropdownSelectionListener extends DropdownSelectionListener<ComplexAction> {
public ComplexActionDropdownSelectionListener(ToolItem dropdown) {
super(dropdown);
}
@Override
public void add(String item, final ComplexAction complexAction) {
MenuItem menuItem = new MenuItem(menu, SWT.NONE);
menuItem.setText(item);
if (complexAction == null)
menuItem.setEnabled(false);
menuItem.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
// MenuItem selected = (MenuItem) event.widget;
InitativePass initativePass = combatTurn.getCurrentTurn();
complexAction.setSubject(initativePass.getSubject());
initativePass.setAction(complexAction);
// dropdown.setText(selected.getText());
}
});
}
// public void widgetSelected(SelectionEvent event) {
// if (event.detail == SWT.ARROW) {
// ToolItem item = (ToolItem)event.widget;
// Rectangle rect = item.getBounds();
// Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y));
// menu.setLocation(pt.x, pt.y + rect.height);
// menu.setVisible(true);
// } else {
// System.out.println(dropdown.getText() + " Pressed");
// }
// }
}
private AdapterFactoryItemDelegator itemDelegator;
private LabelProvider labelProvider;
private CombatTurn combatTurn;
private ComposedAdapterFactory adapterFactory;
private AdapterFactoryContentProvider rootContentProvider;
private AdapterFactoryContentProvider actionListContentProvider;
public static final String ID = "de.urszeidler.test.CombatTurnnView"; //$NON-NLS-1$
private SashForm top_1;
private Composite composite_bottom = null;
private BasicActionPanelWidget basicActionPanel = null;
private CombatTurnList combatTurnList;
private ScriptService scriptService;
private ToolItem tltmD;
private ToolItem tltmSimple;
private ToolItem tltmS;
public CombatTurnView() {
super();
adapterFactory = AdapterFactoryUtil.getInstance().getAdapterFactory();
itemDelegator = new AdapterFactoryItemDelegator(adapterFactory);
rootContentProvider = new AdapterFactoryContentProvider(adapterFactory);
actionListContentProvider = new AdapterFactoryContentProvider(adapterFactory);
labelProvider = new LabelProvider() {
@Override
public String getText(Object object) {
return itemDelegator.getText(object);
}
@Override
public Image getImage(Object object) {
if (object instanceof InitativePass) {
InitativePass phc = (InitativePass)object;
if (phc.getSubject() == null)
return null;
return ExtendedImageRegistry.getInstance().getImage(itemDelegator.getImage(phc.getSubject().getCharacter()));
}
return ExtendedImageRegistry.getInstance().getImage(itemDelegator.getImage(object));
}
};
}
/*
* (non-Javadoc)
* @see
* org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets
* .Composite)
*/
@Override
public void createPartControl(Composite arg0) {
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 1;
top_1 = new SashForm(arg0, SWT.NONE);
top_1.setLayout(gridLayout);
GridData gridData = new GridData();
gridData.horizontalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
gridData.verticalAlignment = GridData.FILL;
top_1.setOrientation(SWT.VERTICAL);
createBasicActionPanel();
createComposite_bottom();
basicActionPanel.getActionPanel().getTreeViewer().setContentProvider(new SimpleListContenProvider(actionListContentProvider));
basicActionPanel.getActionPanel().getTreeViewer().setLabelProvider(labelProvider);
}
protected void executeCurrentCommand() {
if (combatTurn != null && combatTurn.getCurrentTurn() != null) {
combatTurn.doTurn();
setInitativePass(combatTurn.getCurrentTurn());
}
}
/**
* initalise the actionTreeviewer
*
* @param personaHandlung2
*/
private void setInitativePass(InitativePass personaHandlung2) {
basicActionPanel.setPhase(combatTurn.getCurrentTurn());
if (personaHandlung2 == null)
return;
basicActionPanel.getActionPanel().getTreeViewer().setInput(personaHandlung2);
basicActionPanel.getActionPanel().refreshToolbar();
ToolBar toolBar = basicActionPanel.getActionPanel().getToolBar();
createToolbarItems(toolBar, personaHandlung2);
toolBar.getParent().layout(true);
}
/*
* (non-Javadoc) Method declared on IViewPart.
*/
public void init(IViewSite site) throws PartInitException {
super.init(site);
scriptService = (ScriptService)site.getService(ScriptService.class);
scriptService.registerCombatViewer(this);
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.part.WorkbenchPart#setFocus()
*/
@Override
public void setFocus() {
}
// private void createMenuManager(){
//
// menuManager = new MenuManager();
//
//
// MenuManager menuManagerSimpleActions = new MenuManager();
// menuManagerSimpleActions.add(new Action("change") {
// @Override
// public void run() {
// InitativePass initativePass = combatTurn.getCurrentTurn();
// SetFeatureCommand featureCommand = ShadowrunEditingTools.changeItem(initativePass.getSubject(),
// RuntimePackage.Literals.RUNTIME_CHARACTER__LEFT_HAND, getSite().getShell());
// SimpleAction simpleAction = GameplayTools.getSimpleAction(initativePass);
// simpleAction.getSubCommands().add(featureCommand);
// }
// @Override
// public boolean isEnabled() {
// return super.isEnabled();
// }
// });
//
// }
/**
* This method initializes composite_bottom
*/
private void createComposite_bottom() {
GridData gridData1 = new GridData();
gridData1.horizontalAlignment = GridData.FILL;
gridData1.grabExcessHorizontalSpace = true;
gridData1.grabExcessVerticalSpace = true;
gridData1.verticalAlignment = GridData.FILL;
composite_bottom = new Composite(top_1, SWT.NONE);
composite_bottom.setLayout(new GridLayout());
ScrolledComposite scrolledComposite = new ScrolledComposite(composite_bottom, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
scrolledComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
scrolledComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
combatTurnList = new CombatTurnList(scrolledComposite, SWT.NONE);
scrolledComposite.setContent(combatTurnList);
top_1.setWeights(new int[]{ 210, 210 });
}
@Override
public void dispose() {
super.dispose();
}
/**
* This method initializes basicActionPanel
*/
private void createBasicActionPanel() {
GridData gridData = new GridData();
gridData.horizontalAlignment = GridData.FILL;
gridData.verticalAlignment = GridData.CENTER;
basicActionPanel = new BasicActionPanelWidget(top_1, SWT.NONE);
basicActionPanel.getActionPanel().getTreeViewer().setAutoExpandLevel(TreeViewer.ALL_LEVELS);
basicActionPanel.setLayoutData(gridData);
ToolBar toolBar = basicActionPanel.getActionPanel().getToolBar();
createToolbarItems(toolBar, null);
}
/**
* @param toolBar
* @param iniPass
*/
protected void createToolbarItems(ToolBar toolBar, final InitativePass iniPass) {
RuntimeCharacter character = null;
if(iniPass!=null)
character = iniPass.getSubject();
tltmD = new ToolItem(toolBar, SWT.NONE);
tltmD.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
executeCurrentCommand();
}
});
tltmD.setImage(ResourceManager.getPluginImage("de.urszeidler.shr5.ecp", "images/execute-command.png")); //$NON-NLS-1$ //$NON-NLS-2$
tltmD.setToolTipText(Messages.CombatTurnView_tooltip_execute);
{
tltmS = new ToolItem(toolBar, SWT.DROP_DOWN);
tltmS.setText(Messages.CombatTurnView_text_complex_action);
ComplexActionDropdownSelectionListener listenerOne = new ComplexActionDropdownSelectionListener(tltmS);
SkillTestCmd skillTestCmd = GameplayFactory.eINSTANCE.createSkillTestCmd();
// skillTestCmd.setSubject(initativePass.getSubject());
ComplexAction complexAction = GameplayFactory.eINSTANCE.createComplexAction();
complexAction.getSubCommands().add(skillTestCmd);
listenerOne.add(Messages.CombatTurnView_text_skill_test, complexAction);
SkillTestCmd skillTestCmd1 = GameplayFactory.eINSTANCE.createOpposedSkillTestCmd();
// skillTestCmd.setSubject(initativePass.getSubject());
ComplexAction complexAction1 = GameplayFactory.eINSTANCE.createComplexAction();
complexAction1.getSubCommands().add(skillTestCmd1);
listenerOne.add(Messages.CombatTurnView_text_opposed_skill_test, complexAction1);
// listenerOne.add("Cast Spell", null);
// listenerOne.add("Charge Attack", null);
// listenerOne.add("Astral Projection", null);
// listenerOne.add("oppsed");
tltmS.addSelectionListener(listenerOne);
}
{
tltmSimple = new ToolItem(toolBar, SWT.DROP_DOWN);
tltmSimple.setText(Messages.CombatTurnView_text_simpleAction);
SimpleActionDropdownSelectionListener listenerOne = new SimpleActionDropdownSelectionListener(tltmSimple, iniPass);
SimpleAction simpleAction = GameplayFactory.eINSTANCE.createSimpleAction();
listenerOne.add("1", simpleAction); //$NON-NLS-1$
tltmSimple.addSelectionListener(listenerOne);
}
{
ToolItem tltmFree = new ToolItem(toolBar, SWT.DROP_DOWN);
tltmFree.setText(Messages.CombatTurnView_text_free_action);
FreeActionDropdownSelectionListner listenerOne = new FreeActionDropdownSelectionListner(tltmFree);
FreeAction freeAction = GameplayFactory.eINSTANCE.createFreeAction();
SemanticAction semanticAction = GameplayFactory.eINSTANCE.createSemanticAction();
semanticAction.setType(SemanticType.TALK);
freeAction.getSubCommands().add(semanticAction);
listenerOne.add(Messages.CombatTurnView_text_say_action, freeAction);
freeAction = GameplayFactory.eINSTANCE.createFreeAction();
semanticAction = GameplayFactory.eINSTANCE.createSemanticAction();
semanticAction.setType(SemanticType.TALK);
freeAction.getSubCommands().add(semanticAction);
listenerOne.add(Messages.CombatTurnView_text_gestrure_action, freeAction);
// tltmFree.addSelectionListener(listenerOne);
freeAction = GameplayFactory.eINSTANCE.createFreeAction();
SetExtendetData setExtendetData = GameplayFactory.eINSTANCE.createSetExtendetData();
setExtendetData.setDataAware(character);
ExtendetData data = RuntimeFactory.eINSTANCE.createExtendetData();
data.setEObject(character);
data.setEFeature(RuntimePackage.Literals.NAHKAMP_MODIFIKATIONEN__CHARACTER_PRONE);
setExtendetData.setData(data);
setExtendetData.setValue(true);
freeAction.getSubCommands().add(setExtendetData);
listenerOne.add(Messages.CombatTurnView_text_drop_prone_action, freeAction);
freeAction = GameplayFactory.eINSTANCE.createFreeAction();
listenerOne.add(Messages.CombatTurnView_text_kneel_action, freeAction);
tltmFree.addSelectionListener(listenerOne);
}
}
@Override
public void setCombatTurn(CombatTurn kr) {
combatTurn = kr;
combatTurnList.setCombatTurn(kr);
setInitativePass(kr.getCurrentTurn());
}
}