/*******************************************************************************
* Copyright (c) 2007-2009 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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
*
* Contributor:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.hibernate.ui.diagram.editors.parts;
import java.beans.PropertyChangeEvent;
import org.eclipse.draw2d.FocusBorder;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.Request;
import org.eclipse.gef.RequestConstants;
import org.jboss.tools.hibernate.ui.diagram.editors.figures.ComponentFigure;
import org.jboss.tools.hibernate.ui.diagram.editors.model.ComponentShape;
import org.jboss.tools.hibernate.ui.diagram.editors.model.ExpandableShape;
import org.jboss.tools.hibernate.ui.diagram.editors.model.BaseElement;
/**
*
* @author some modifications from Vitali
*/
public class ComponentShapeEditPart extends ExpandableShapeEditPart {
public ComponentFigure getComponentFigure() {
if (getFigure() instanceof ComponentFigure) {
return (ComponentFigure)getFigure();
}
return null;
}
/**
* @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure()
*/
@Override
protected IFigure createFigure() {
ComponentFigure figure = new ComponentFigure();
figure.createTitle(getOrmDiagram().getLabelProvider().getText(getElement()),
getOrmDiagram().getLabelProvider().getImage(getElement()), getColor(),
getOrmDiagram().getFontHeight());
figure.setBorder(new FocusBorder());
figure.setSize(-1, -1);
return figure;
}
/**
* @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#activate()
*/
@Override
public void activate() {
super.activate();
}
public ComponentShape getModelComponentShape() {
return (ComponentShape)getModel();
}
/**
* @see AbstractEditPart#performRequest(Request)
*/
@Override
public void performRequest(Request req) {
if (RequestConstants.REQ_OPEN.equals(req.getType())) {
ExpandableShape es = getModelExpandableShape();
if (es.isExpanded()) {
es.collapse();
} else {
es.expand();
}
} else {
super.performRequest(req);
}
}
/**
* @see java.beans.PropertyChangeListener#propertyChange(PropertyChangeEvent)
*/
@Override
public void propertyChange(PropertyChangeEvent evt) {
String prop = evt.getPropertyName();
if (ExpandableShape.EXPANDED.equals(prop)) {
boolean expanded = (Boolean)evt.getNewValue();
if (getComponentFigure() != null) {
getComponentFigure().setExpanded(expanded);
}
BaseElement parent = getModelParent();
if (parent.getParent() != null) {
// refresh only parent which has a parent! so we exclude OrmDiagram here
// refresh only basic properties
parent.refreshBasic();
}
getOrmDiagram().updateDirty(evt.getNewValue() != evt.getOldValue());
} else if (BaseElement.REFRESH.equals(prop)) {
if (getComponentFigure() != null) {
getComponentFigure().setExpanded(getModelExpandableShape().isExpanded());
}
super.propertyChange(evt);
} else {
super.propertyChange(evt);
}
refresh();
}
protected void refreshVisuals() {
Rectangle bounds = null;
if (getModel() instanceof ComponentShape) {
bounds = new Rectangle(new Point(0, 0), getFigure().getSize());
}
if (bounds != null) {
((GraphicalEditPart) getParent()).setLayoutConstraint(this, getFigure(), bounds);
}
}
}