/** * Copyright (c) 2011 committers of YAKINDU and others. * 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: * committers of YAKINDU - initial API and implementation * */ package org.yakindu.sct.ui.editor.editparts; import static org.yakindu.base.base.BasePackage.Literals.DOCUMENTED_ELEMENT__DOCUMENTATION; import static org.yakindu.sct.model.sgraph.SGraphPackage.Literals.SPECIFICATION_ELEMENT__SPECIFICATION; import org.eclipse.draw2d.Label; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.Handle; import org.eclipse.gef.handles.AbstractHandle; import org.eclipse.gef.tools.DirectEditManager; import org.eclipse.gmf.runtime.diagram.ui.editpolicies.NonResizableLabelEditPolicy; import org.eclipse.gmf.runtime.diagram.ui.tools.DragEditPartsTrackerEx; import org.eclipse.gmf.runtime.diagram.ui.tools.TextDirectEditManager; import org.eclipse.gmf.runtime.notation.StringValueStyle; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.swt.SWT; import org.yakindu.base.base.BasePackage; import org.yakindu.base.xtext.utils.gmf.directedit.IXtextAwareEditPart; import org.yakindu.sct.model.sgraph.SGraphPackage; import org.yakindu.sct.model.sgraph.Transition; import org.yakindu.sct.ui.editor.commands.ToggleShowDocumentationCommand; import org.yakindu.sct.ui.editor.editparts.SpecificationElementEditPart.MultilineTextCellEditor; import org.yakindu.sct.ui.editor.policies.ContextSensitiveHelpPolicy; import org.yakindu.sct.ui.editor.policies.TransitionExpressionComponentEditPolicy; import org.yakindu.sct.ui.editor.utils.GMFNotationUtil; import org.yakindu.sct.ui.editor.utils.HelpContextIds; /** * * @author andreas muelder - Initial contribution and API * */ public class TransitionExpressionEditPart extends PlugableExternalXtextLabelEditPart implements IXtextAwareEditPart { public TransitionExpressionEditPart(View view) { super(view, Transition.class.getName()); } @Override protected DirectEditManager createDirectEditManager() { if (getAttribute() == BasePackage.Literals.DOCUMENTED_ELEMENT__DOCUMENTATION) return new TextDirectEditManager(this, MultilineTextCellEditor.class, TextDirectEditManager.getTextCellEditorLocator(this)); return super.createDirectEditManager(); } @Override protected void createDefaultEditPolicies() { super.createDefaultEditPolicies(); installEditPolicy(EditPolicy.COMPONENT_ROLE, new TransitionExpressionComponentEditPolicy()); installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new ContextSensitiveHelpPolicy( HelpContextIds.SC_PROPERTIES_TRANSITION_EXPRESSION)); // BUGFIX: // https://code.google.com/a/eclipselabs.org/p/yakindu/issues/detail?id=26 installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, new NonResizableLabelEditPolicy() { @Override protected void replaceHandleDragEditPartsTracker(Handle handle) { if (handle instanceof AbstractHandle) { AbstractHandle h = (AbstractHandle) handle; h.setDragTracker(new DragEditPartsTrackerEx(getHost()) { protected boolean isMove() { return true; }; }); } } }); } @Override protected int getEditorStyles() { return SWT.MULTI | SWT.WRAP; } @Override public Transition resolveSemanticElement() { return (Transition) super.resolveSemanticElement(); } @Override protected void refreshVisuals() { super.refreshVisuals(); updateTooltip(); } protected void updateTooltip() { String documentation = (String) resolveSemanticElement().eGet(DOCUMENTED_ELEMENT__DOCUMENTATION); if (getAttribute() == DOCUMENTED_ELEMENT__DOCUMENTATION) documentation = (String) resolveSemanticElement().eGet(SPECIFICATION_ELEMENT__SPECIFICATION); if (documentation != null && !documentation.isEmpty()) getFigure().setToolTip(new Label(documentation)); } public EAttribute getAttribute() { StringValueStyle featureStyle = GMFNotationUtil.getStringValueStyle(getPrimaryView(), ToggleShowDocumentationCommand.FEATURE_TO_SHOW); if (featureStyle == null) { return SGraphPackage.Literals.SPECIFICATION_ELEMENT__SPECIFICATION; } String feature = featureStyle.getStringValue(); if (feature.equals(BasePackage.Literals.DOCUMENTED_ELEMENT__DOCUMENTATION.getName())) { return BasePackage.Literals.DOCUMENTED_ELEMENT__DOCUMENTATION; } return SGraphPackage.Literals.SPECIFICATION_ELEMENT__SPECIFICATION; } }