blob: 59afd4e0adc09c0540374a1061c5344039213041 [file] [log] [blame]
/*******************************************************************************
* <copyright>
*
* Copyright (c) 2005, 2010 SAP AG.
* 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:
* SAP AG - initial API, implementation and documentation
*
* </copyright>
*
*******************************************************************************/
package org.eclipse.graphiti.examples.tutorial.features;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.context.IDirectEditingContext;
import org.eclipse.graphiti.features.impl.AbstractDirectEditingFeature;
import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm;
import org.eclipse.graphiti.mm.algorithms.Text;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.mm.pictograms.Shape;
public class TutorialDirectEditEClassFeature extends AbstractDirectEditingFeature {
public TutorialDirectEditEClassFeature(IFeatureProvider fp) {
super(fp);
}
public int getEditingType() {
// there are several possible editor-types supported:
// text-field, checkbox, color-chooser, combobox, ...
return TYPE_TEXT;
}
@Override
public boolean canDirectEdit(IDirectEditingContext context) {
PictogramElement pe = context.getPictogramElement();
Object bo = getBusinessObjectForPictogramElement(pe);
GraphicsAlgorithm ga = context.getGraphicsAlgorithm();
// support direct editing, if it is a EClass, and the user clicked
// directly on the text and not somewhere else in the rectangle
if (bo instanceof EClass && ga instanceof Text) {
// EClass eClass = (EClass) bo;
// additionally the flag isFrozen must be false
// return !eClass.isFrozen();
return true;
}
// direct editing not supported in all other cases
return false;
}
public String getInitialValue(IDirectEditingContext context) {
// return the current name of the EClass
PictogramElement pe = context.getPictogramElement();
EClass eClass = (EClass) getBusinessObjectForPictogramElement(pe);
return eClass.getName();
}
@Override
public String checkValueValid(String value, IDirectEditingContext context) {
if (value.length() < 1)
return "Please enter any text as class name."; //$NON-NLS-1$
if (value.contains(" ")) //$NON-NLS-1$
return "Spaces are not allowed in class names."; //$NON-NLS-1$
if (value.contains("\n")) //$NON-NLS-1$
return "Line breakes are not allowed in class names."; //$NON-NLS-1$
// null means, that the value is valid
return null;
}
public void setValue(String value, IDirectEditingContext context) {
// set the new name for the EClass
PictogramElement pe = context.getPictogramElement();
EClass eClass = (EClass) getBusinessObjectForPictogramElement(pe);
eClass.setName(value);
// Explicitly update the shape to display the new value in the diagram
// Note, that this might not be necessary in future versions of Graphiti
// (currently in discussion)
// we know, that pe is the Shape of the Text, so its container is the
// main shape of the EClass
updatePictogramElement(((Shape) pe).getContainer());
}
}