/******************************************************************************* * Copyright (c) 2010-2015 Henshin developers. 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: * TU Berlin, University of Luxembourg, SES S.A. *******************************************************************************/ /** * GraphPaletteRoot.java * created on 11.02.2012 19:23:18 */ package de.tub.tfs.henshin.editor.ui.graph; import java.util.List; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.henshin.model.Attribute; import org.eclipse.emf.henshin.model.Edge; import org.eclipse.emf.henshin.model.Graph; import org.eclipse.emf.henshin.model.Module; import org.eclipse.emf.henshin.model.Node; import org.eclipse.gef.palette.PaletteGroup; import org.eclipse.gef.palette.PaletteStack; import org.eclipse.gef.palette.ToolEntry; import org.eclipse.gef.tools.CreationTool; import de.tub.tfs.henshin.editor.actions.graph.tools.AttributeCreationTool; import de.tub.tfs.henshin.editor.actions.graph.tools.EdgeCreationTool; import de.tub.tfs.henshin.editor.actions.graph.tools.NodeCreationTool; import de.tub.tfs.henshin.editor.interfaces.Constants; import de.tub.tfs.henshin.editor.interfaces.Messages; import de.tub.tfs.henshin.editor.model.ModelCreationFactory; import de.tub.tfs.henshin.editor.util.ModelUtil; import de.tub.tfs.henshin.editor.util.NodeTypes; import de.tub.tfs.henshin.editor.util.ResourceUtil; import de.tub.tfs.muvitor.gef.palette.MuvitorPaletteRoot; /** * @author huuloi * */ public class GraphPaletteRoot extends MuvitorPaletteRoot { /** The graph tools. */ protected PaletteGroup graphTools; /** The rest. */ protected PaletteGroup rest; private Module transformationSystem; public GraphPaletteRoot(Graph graph) { this(ModelUtil.getModelRoot(graph, Module.class), graph); } public GraphPaletteRoot(Module transformationSystem) { this(transformationSystem, null); } public GraphPaletteRoot(Module transformationSystem, Graph graph) { this.transformationSystem = transformationSystem; addToolEntry(defaultPaletteGroup, Messages.NODE, Messages.CREATE_NODE, new ModelCreationFactory(Node.class), ResourceUtil.ICONS.NODE.descr(Constants.SIZE_18), ResourceUtil.ICONS.NODE.descr(Constants.SIZE_25), NodeCreationTool.class); graphTools = createGraphPalette(); add(1, graphTools); rest = new PaletteGroup(Messages.CONTROLS); add(rest); addToolEntry(rest, Messages.ATTRIBUTE, Messages.CREATE_ATTRIBUTE, new ModelCreationFactory(Attribute.class), ResourceUtil.ICONS.ATTRIBUTE.descr(Constants.SIZE_16), ResourceUtil.ICONS.ATTRIBUTE.descr(Constants.SIZE_20), AttributeCreationTool.class); addToolEntry(rest, Messages.EDGE, Messages.CREATE_EDGE, new ModelCreationFactory( Edge.class), ResourceUtil.ICONS.EDGE.descr(Constants.SIZE_18), ResourceUtil.ICONS.EDGE.descr(Constants.SIZE_20), EdgeCreationTool.class); } /** * Creates the graph palette. * * @return the palette group */ private PaletteGroup createGraphPalette() { PaletteGroup graphToolsGroup = new PaletteGroup(Messages.CONTROLS); for (EPackage ePackage : transformationSystem.getImports()) { final PaletteStack marqueeStack = new PaletteStack(Messages.EMPTY, Messages.EMPTY, null); //$NON-NLS-1$ for (EClass eClass : getNodeTypesOfEPackage(ePackage)) { final ToolEntry entry = new ToolEntry(eClass.getName(), Messages.CREATE + Messages.SPACE + eClass.getName(), ResourceUtil.ICONS.NODE.descr(Constants.SIZE_18), ResourceUtil.ICONS.NODE.descr(Constants.SIZE_25), CreationTool.class) { }; entry.setToolProperty(CreationTool.PROPERTY_CREATION_FACTORY, new ModelCreationFactory(Node.class, eClass)); entry.setUserModificationPermission(PERMISSION_NO_MODIFICATION); marqueeStack.add(entry); } graphToolsGroup.add(marqueeStack); } return graphToolsGroup; } /** * Gets the node types of e package. * * @param ePackage * the e package * @return the node types of e package */ protected List<EClass> getNodeTypesOfEPackage(EPackage ePackage) { return NodeTypes.getNodeTypesOfEPackage(ePackage, false); } /** * Refresh graph tools group. */ public void refreshGraphToolsGroup() { PaletteGroup tempGraphTools = createGraphPalette(); remove(graphTools); graphTools = tempGraphTools; add(1, graphTools); } }