/*******************************************************************************
* 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.
*******************************************************************************/
package de.tub.tfs.henshin.tggeditor.editparts.rule;
import java.util.List;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.henshin.model.Attribute;
import org.eclipse.emf.henshin.model.AttributeCondition;
import org.eclipse.emf.henshin.model.HenshinPackage;
import org.eclipse.gef.DragTracker;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartListener;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.Request;
import org.eclipse.gef.RootEditPart;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.requests.ChangeBoundsRequest;
import org.eclipse.jface.viewers.ICellEditorValidator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import de.tub.tfs.henshin.tgg.TAttribute;
import de.tub.tfs.henshin.tgg.TggPackage;
import de.tub.tfs.henshin.tgg.interpreter.util.RuleUtil;
import de.tub.tfs.henshin.tggeditor.editparts.graphical.TNodeObjectEditPart;
import de.tub.tfs.henshin.tggeditor.editpolicies.graphical.AttributeComponentEditPolicy;
import de.tub.tfs.muvitor.gef.directedit.IDirectEditPart.IGraphicalDirectEditPart;
import de.tub.tfs.muvitor.gef.editparts.AdapterGraphicalEditPart;
public class AttributeConditionGraphicalEditPart extends AdapterGraphicalEditPart<AttributeCondition> implements IGraphicalDirectEditPart {
/** The text. */
protected Label text = new Label("");
/** The model element of the figure */
protected AttributeCondition attributeCondition;
protected int MAXLENGTH=50;
/**
* Instantiates a new attribute edit part.
*
* @param model the model
*/
public AttributeConditionGraphicalEditPart(AttributeCondition model) {
super(model);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure()
*/
@Override
protected IFigure createFigure() {
setName();
attributeCondition = getCastedModel();
return text;
}
/* (non-Javadoc)
* @see muvitorkit.gef.editparts.AdapterGraphicalEditPart#performDirectEdit()
*/
@Override
protected void performDirectEdit() {
super.performDirectEdit();
}
/*
* (non-Javadoc)
*
* @see muvitorkit.gef.editparts.AdapterGraphicalEditPart#notifyChanged(org.eclipse.emf.common.notify.Notification)
*/
@Override
protected void notifyChanged(Notification notification) {
final int featureId = notification.getFeatureID(HenshinPackage.class);
switch (featureId) {
case -1:
case HenshinPackage.ATTRIBUTE_CONDITION__CONDITION_TEXT:
text.setText(getName());
refreshVisuals();
break;
}
}
/* (non-Javadoc)
* @see de.tub.tfs.muvitor.gef.editparts.AdapterGraphicalEditPart#performRequest(org.eclipse.gef.Request)
*/
@Override
public void performRequest(Request request) {
// TODO Auto-generated method stub
super.performRequest(request);
}
/* (non-Javadoc)
* @see org.eclipse.gef.editparts.AbstractEditPart#understandsRequest(org.eclipse.gef.Request)
*/
@Override
public boolean understandsRequest(Request req) {
if (req instanceof ChangeBoundsRequest) return false;
return super.understandsRequest(req);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#registerVisuals()
*/
@Override
protected void refreshVisuals() {
setName();
if(getParent()!=null)
((TNodeObjectEditPart)getParent()).getFigure().repaint();
super.refreshVisuals();
}
/*
* (non-Javadoc)
* @see muvitorkit.gef.directedit.IDirectEditPart.IGraphicalDirectEditPart#getValueLabelTextBounds()
*/
@Override
public Rectangle getValueLabelTextBounds() {
return text.getTextBounds();
}
/*
* (non-Javadoc)
* @see muvitorkit.gef.directedit.IDirectEditPart#getDirectEditFeatureID()
*/
@Override
public int getDirectEditFeatureID() {
return HenshinPackage.ATTRIBUTE_CONDITION__CONDITION_TEXT;
}
/**
* Gets the name.
*
* @return the name
*/
protected String getName(){
String s=getCastedModel().getConditionText();
return s;
}
@Override
protected void createEditPolicies() {
installEditPolicy(EditPolicy.COMPONENT_ROLE, new AttributeComponentEditPolicy());
}
@Override
public ICellEditorValidator getDirectEditValidator() {
return null;
}
@Override
public void updateValueDisplay(String value) {
setName();
}
protected void setName() {
AttributeCondition attribute = getCastedModel();
String attributeString = "";
attributeString += autoShorten(attribute.getConditionText());
text.setText(attributeString);
//text.setLabelAlignment(Label.LEFT);
}
private String autoShorten(String value) {
if(value.length()>MAXLENGTH)
value=value.substring(0, MAXLENGTH-3) + "...";
return value;
}
@Override
protected void performOpen() {
//super.performOpen();
}
/**
* Updates attribute marker.
*/
protected void updateMarker() {
}
}