//------------------------------------------------------------------------------ // Copyright (c) 2005, 2006 IBM Corporation and others. // 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: // IBM Corporation - initial implementation //------------------------------------------------------------------------------ package org.eclipse.epf.authoring.gef.edit; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.IFigure; import org.eclipse.epf.authoring.gef.figures.ActivityFigure; import org.eclipse.epf.authoring.gef.figures.Colors; import org.eclipse.epf.authoring.gef.figures.Images; import org.eclipse.epf.authoring.gef.figures.TextFigure; import org.eclipse.epf.diagram.model.NamedNode; import org.eclipse.epf.diagram.model.Node; import org.eclipse.epf.diagram.model.WorkBreakdownElementNode; import org.eclipse.epf.diagram.model.WorkProductDescriptorNode; import org.eclipse.epf.library.edit.util.ProcessUtil; import org.eclipse.epf.library.edit.util.TngUtil; import org.eclipse.epf.uma.Activity; import org.eclipse.epf.uma.BreakdownElement; import org.eclipse.epf.uma.Descriptor; import org.eclipse.epf.uma.Iteration; import org.eclipse.epf.uma.Milestone; import org.eclipse.epf.uma.Phase; import org.eclipse.epf.uma.TaskDescriptor; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.gef.tools.DirectEditManager; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; /** * Common editpart for different {@link Descriptor} * Provides support for word-wrap of editpart's object name. * * @author Phong Nguyen Le * @since 1.0 */ public class WorkBreakdownElementNodeEditPart extends NamedNodeEditPart { public WorkBreakdownElementNodeEditPart(NamedNode model) { super(model); } /** * @see org.eclipse.epf.authoring.gef.edit.NamedNodeEditPart#getImage() */ protected Image getImage() { Image img = null; Node node = (Node) getModel(); Object obj = node.getObject(); if (obj instanceof Phase) { img = Images.PHASE; } else if (obj instanceof Iteration) { img = Images.ITERATION; } else if (obj instanceof Activity) { img = Images.ACTIVITY; } else if (obj instanceof TaskDescriptor) { img = Images.TASK_DESCRIPTOR; } else if (obj instanceof Milestone) { img = Images.MILESTONE; } return img; } protected IFigure createFigure() { ActivityFigure figure = new ActivityFigure(); Image image = getImage(); if (image != null) { figure.add(image); } return figure; } String getDirectEditText() { TextFigure note = (TextFigure) getFigure(); return note.getText(); } protected void refreshVisuals() { super.refreshVisuals(); IFigure fig = getDirectEditFigure(); if (fig instanceof ActivityFigure) { ActivityFigure l = (ActivityFigure) fig; fig.setForegroundColor(getForegroundColor()); String text; // Below check is required for Extended Activity presentation name // should be used from base. if (getModel() instanceof WorkBreakdownElementNode) { WorkBreakdownElementNode node = (WorkBreakdownElementNode) getModel(); Object wbelement = node.getObject(); if (wbelement instanceof Activity && ProcessUtil .isExtendingOrLocallyContributing((BreakdownElement) wbelement)) { text = ProcessUtil .getPresentationName((BreakdownElement) wbelement); } else { text = ((NamedNode) getModel()).getName(); } } else { text = ((NamedNode) getModel()).getName(); } try { if (getParent() instanceof ActivityDetailDiagramEditPart || getParent().getParent() instanceof ActivityDetailDiagramEditPart) { int w = WRAP_WIDTH; if (this.getModel() instanceof WorkProductDescriptorNode) w = WORK_PRODUCT_WRAP_WIDTH; text = wrap(text, w); } } catch (NullPointerException npe) { } l.setText(text); } } private Color getForegroundColor() { NamedNode node = (NamedNode) getModel(); if (node.isSuppressed()) { return Colors.SUPRESSED_ELEMENT_LABEL; } if (node.isReadOnly()) { return Colors.INHERITED_ELEMENT_LABEL; } else { return ColorConstants.black; } } /** * @see org.eclipse.epf.authoring.gef.edit.BaseEditPart#createDirectEditManager() */ protected DirectEditManager createDirectEditManager() { return new TextFigureDirectEditManager((GraphicalEditPart) this, TextCellEditor.class, new TextFigureCellEditorLocator( (TextFigure) getFigure()), (TextFigure) getFigure()) { protected String validate(String txt) { Object obj = getEditPart().getModel(); if (obj instanceof WorkBreakdownElementNode) { WorkBreakdownElementNode node = (WorkBreakdownElementNode) obj; Object e = node.getObject(); if (e instanceof Activity) { return TngUtil.checkWBSActivityPresentationName(e, txt, node.getDiagram().getSuppression()); } else { return TngUtil .checkWorkBreakdownElementPresentationName(e, txt, node.getDiagram().getSuppression()); } } return super.validate(txt); } }; } }