blob: b19be76758b5c684a1a6c1097029e535fbd81581 [file] [log] [blame]
//------------------------------------------------------------------------------
// 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);
}
};
}
}