/******************************************************************************* * Copyright (c) 2008 Hallvard Traetteberg. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Hallvard Traetteberg - initial API and implementation ******************************************************************************/ package no.playtrd.runtime.editor; import java.util.List; import no.hal.scxml.scxmlxt.util.ScxmlxtAdapterFactory; import no.playtrd.runtime.AbstractRuntime; import no.playtrd.runtime.Runtime; import no.playtrd.v10.playtrd.Game; import org.eclipse.core.runtime.Status; import org.eclipse.e4.tm.ui.EditorPartModelContext; import org.eclipse.e4.tm.ui.ModelContext; import org.eclipse.e4.tm.ui.TmPartStyle; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.presentation.EcoreEditor; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.URIConverter; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IEditorInput; public class RuntimeEditorApplication extends EcoreEditor { private Runtime runtime; private Runtime getRuntime() { if (runtime == null) { runtime = new Runtime(this); } return runtime; } private TmPartStyle partStyle; protected Composite createPageContainer(Composite parent) { partStyle = new TmPartStyle.SashStyle(); partStyle.createPageContainer(parent); partStyle.addTmComposite(getRuntime()); return partStyle.getTreeParent(); } protected void initializeEditingDomain() { super.initializeEditingDomain(); } public void createPages() { getRuntime(); super.createPages(); adapterFactory.insertAdapterFactory(new ScxmlxtAdapterFactory()); selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider.FontProvider(adapterFactory, selectionViewer)); loadToolkitModel(); // selectionViewer.setLabelProvider(new TmLabelProvider((ILabelProvider)selectionViewer.getLabelProvider())); // ((Control)model).setDataObject(resource.getContents().get(0)); getContainer().getDisplay().asyncExec(new Runnable() { public void run() { getRuntime().start(); } }); } private Game<?> game; public Game<?> getGame() { if (game == null && getEditingDomain() != null) { game = AbstractRuntime.getEObject(editingDomain.getResourceSet(), Game.class, Status.OK); } return game; } public void dispose() { if (runtime != null) { getRuntime().stop(); } super.dispose(); } private EditorPartModelContext modelContext; protected ModelContext getModelContext() { if (modelContext == null) { modelContext = new EditorPartModelContext(this); } return modelContext; } public Object getAdapter(@SuppressWarnings("rawtypes") Class key) { if (key.equals(EditingDomain.class)) { return getEditingDomain(); } else if (key.equals(URIConverter.class)) { return getEditingDomain().getResourceSet().getURIConverter(); } else if (key.equals(Game.class)) { return getGame(); } else if (key.equals(ResourceSet.class)) { return getEditingDomain().getResourceSet(); } else if (key.equals(Composite.class)) { return getContainer(); } else if (IEditorInput.class.isAssignableFrom(key) && key.isInstance(getEditorInput())) { return getEditorInput(); } else if (key.equals(TmPartStyle.class)) { return partStyle; } else if (key.equals(ModelContext.class)) { return getModelContext(); } Object o = getRuntime().getAdapter(key); if (o != null) { return o; } return super.getAdapter(key); } public final static String TM_FILE_EXTENSION = "tm"; private void loadToolkitModel() { ResourceSet resSet = getEditingDomain().getResourceSet(); List<Resource> resources = resSet.getResources(); Resource tmResource = null; for (Resource res: resources.toArray(new Resource[resources.size()])) { URI uri = res.getURI(); URI tmUri = uri.trimFileExtension().appendFileExtension(TM_FILE_EXTENSION); if (resSet.getURIConverter().exists(tmUri, null)) { try { tmResource = resSet.getResource(tmUri, true); break; } catch (RuntimeException re) { } } } System.out.println("Loaded " + tmResource); } }