/**
*
*/
package org.jboss.tools.smooks.gef.tree.editparts;
import java.beans.PropertyChangeEvent;
import java.util.List;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.gef.DragTracker;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.Request;
import org.eclipse.gef.requests.SelectionRequest;
import org.eclipse.gef.tools.ConnectionDragCreationTool;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.IEditorPart;
import org.jboss.tools.smooks.configuration.SmooksConfigurationActivator;
import org.jboss.tools.smooks.configuration.editors.GraphicsConstants;
import org.jboss.tools.smooks.editor.ISmooksModelProvider;
import org.jboss.tools.smooks.gef.tree.editpolicy.FigureHighlightEditPolicy;
import org.jboss.tools.smooks.gef.tree.editpolicy.TreeNodeGraphicalNodeEditPolicy;
import org.jboss.tools.smooks.gef.tree.figures.DragLinkFigure;
import org.jboss.tools.smooks.gef.tree.figures.IMoveableModel;
import org.jboss.tools.smooks.gef.tree.figures.TreeContainerFigure;
import org.jboss.tools.smooks.gef.tree.figures.TreeFigureExpansionEvent;
import org.jboss.tools.smooks.gef.tree.model.TreeContainerModel;
import org.jboss.tools.smooks.gef.tree.model.TreeNodeModel;
import org.jboss.tools.smooks.graphical.editors.model.IValidatableModel;
/**
* @author DartPeng
*
*/
public class TreeContainerEditPart extends TreeNodeEditPart {
public TreeContainerEditPart() {
super();
childrenLoaded = true;
}
@Override
protected IFigure createFigure() {
return new TreeContainerFigure((TreeContainerModel) getModel());
}
protected String getLabelText() {
TreeContainerModel model = (TreeContainerModel) getModel();
String text = model.getText();
return text;
}
protected void refreshVisuals() {
TreeContainerModel model = (TreeContainerModel) getModel();
String text = getLabelText();
if (text != null && model.isHeaderVisable() && getFigure() instanceof TreeContainerFigure) {
TreeContainerFigure figure = (TreeContainerFigure) getFigure();
Image i = model.getImage();
Label tooltip = null;
int serverity = model.getSeverity();
String message = getSeverityMessage(model);
if (serverity == IValidatableModel.NONE) {
i = model.getImage();
}
if (serverity == IValidatableModel.ERROR) {
i = SmooksConfigurationActivator.getDefault().getImageRegistry().get(GraphicsConstants.IMAGE_ERROR);
tooltip = errorLabel;
tooltip.setText(message);
}
if (serverity == IValidatableModel.WARNING) {
i = SmooksConfigurationActivator.getDefault().getImageRegistry().get(GraphicsConstants.IMAGE_WARNING);
tooltip = warningLabel;
tooltip.setText(message);
}
if (i != null) {
figure.setIcon(i);
}
figure.setText(text);
figure.setToolTip(tooltip);
}
boolean isSource = this.isSourceLinkNodeEditPart();
if (!isSource) {
IFigure figure = getFigure();
if (figure instanceof TreeContainerFigure) {
// ((TreeContainerFigure)
// figure).setHeaderColor(ColorConstants.orange);
}
}
Point location = model.getLocation();
Dimension size = getFigure().getPreferredSize();
try {
((GraphicalEditPart) this.getParent()).setLayoutConstraint(this, this.getFigure(), new Rectangle(location,
size));
IFigure figure = getFigure().getParent();
figure.repaint();
} catch (Exception e) {
e.printStackTrace();
}
}
public IFigure getContentPane() {
if (getFigure() instanceof TreeContainerFigure) {
TreeContainerFigure t = (TreeContainerFigure) getFigure();
return t.getContentFigure();
} else {
return getFigure();
}
}
public TreeContainerEditPart getTreeContainerEditPart() {
return this;
}
public boolean isSourceLinkNodeEditPart() {
Object model = getModel();
if (model != null && model instanceof TreeContainerModel) {
return ((TreeContainerModel) model).isSourceLinkNode();
}
return false;
}
public void propertyChange(PropertyChangeEvent evt) {
super.propertyChange(evt);
if (IMoveableModel.PRO_BOUNDS_CHANGED.equals(evt.getPropertyName())) {
refreshVisuals();
DefaultEditDomain domain = (DefaultEditDomain) getViewer().getEditDomain();
IEditorPart editor = domain.getEditorPart();
ISmooksModelProvider modelProvider = (ISmooksModelProvider) editor.getAdapter(ISmooksModelProvider.class);
if (modelProvider != null && getModel() instanceof IMoveableModel) {
// Rectangle rect = ((IMoveableModel) getModel()).getBounds();
// recordBounds(graph, rect);
}
}
}
@Override
protected void createEditPolicies() {
this.installEditPolicy(EditPolicy.NODE_ROLE, new TreeNodeGraphicalNodeEditPolicy());
this.installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new FigureHighlightEditPolicy());
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.gef.editparts.AbstractGraphicalEditPart#getDragTracker(org
* .eclipse.gef.Request)
*/
public DragTracker getDragTracker(Request request) {
Object model = getModel();
if (model instanceof TreeContainerModel && request instanceof SelectionRequest) {
Point location = ((SelectionRequest) request).getLocation();
IFigure figure = getFigure();
IFigure figure1 = figure.findFigureAt(location);
if (figure1 instanceof DragLinkFigure && ((TreeContainerModel) model).canDragLink()) {
getViewer().select(this);
return new ConnectionDragCreationTool();
}
}
return super.getDragTracker(request);
}
// @Override
// public ConnectionAnchor getSourceConnectionAnchor(
// ConnectionEditPart connection) {
// return new ChopboxAnchor(getFigure());
// }
//
// @Override
// public ConnectionAnchor getSourceConnectionAnchor(Request request) {
// return new ChopboxAnchor(getFigure());
// }
//
// @Override
// public ConnectionAnchor getTargetConnectionAnchor(
// ConnectionEditPart connection) {
// return new ChopboxAnchor(getFigure());
// }
//
// @Override
// public ConnectionAnchor getTargetConnectionAnchor(Request request) {
// return new ChopboxAnchor(getFigure());
// }
@Override
public List<?> getModelChildren() {
TreeNodeModel node = (TreeNodeModel) getModel();
return node.getChildren();
// return super.getModelChildren();
}
@Override
public void treeCollapsed(TreeFigureExpansionEvent event) {
// super.treeCollapsed(event);
}
@Override
public void treeExpanded(TreeFigureExpansionEvent event) {
// super.treeExpanded(event);
}
}