/*******************************************************************************
* MontiCore Language Workbench
* Copyright (c) 2015, 2016, MontiCore, All rights reserved.
*
* This project is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3.0 of the License, or (at your option) any later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this project. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
package de.monticore.genericgraphics.controller.editparts;
import java.util.Observable;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.GraphicalEditPart;
import de.monticore.genericgraphics.model.graphics.IShapeViewElement;
import de.monticore.genericgraphics.model.graphics.IViewElement;
import de.monticore.genericgraphics.model.graphics.ViewElementFactory;
/**
* <p>
* Adds the handling of {@link IViewElement IViewElements} to the
* {@link AbstractMCGraphicalEditPart}.
* </p>
* <ul>
* <li>getter and setter for {@link IViewElement}</li>
* <li>Registration of this {@link EditPart} as a Listener for the
* {@link IViewElement}</li>
* <li>{@link AbstractMCShapeEditPart#update(Observable, Object)}:<br>
* call <code>refreshVisuals()</code></li>
* </ul>
*
* @author Tim Enger
*/
public abstract class AbstractMCShapeEditPart extends AbstractMCGraphicalEditPart implements IMCShapeEditPart {
private IShapeViewElement ve;
@Override
public IShapeViewElement createViewElement() {
return ViewElementFactory.createShapeViewElement(getIdentifier(), 0, 0, -1, -1);
}
@Override
public IShapeViewElement getViewElement() {
if (ve == null) {
IShapeViewElement newVE = createViewElement();
setViewElement(newVE);
}
return ve;
}
@Override
public void setViewElement(IViewElement ve) {
if (!(ve instanceof IShapeViewElement)) {
return;
}
if (this.ve != null) {
this.ve.deleteObserver(this);
}
this.ve = (IShapeViewElement) ve;
this.ve.addObserver(this);
}
@Override
public void activate() {
if (getViewElement() != null) {
getViewElement().addObserver(this);
}
super.activate();
}
@Override
public void deactivate() {
if (getViewElement() != null) {
getViewElement().deleteObserver(this);
}
super.deactivate();
}
@Override
public void update(Observable o, Object arg) {
refreshVisuals();
}
@Override
protected void refreshVisuals() {
GraphicalEditPart parent = (GraphicalEditPart) getParent();
IShapeViewElement ve = getViewElement();
parent.setLayoutConstraint(this, getFigure(), new Rectangle(ve.getX(), ve.getY(), ve.getWidth(), ve.getHeight()));
super.refreshVisuals();
}
}