//------------------------------------------------------------------------------ // 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 java.util.Iterator; import java.util.List; import org.eclipse.draw2d.IFigure; import org.eclipse.emf.common.notify.Notification; import org.eclipse.epf.authoring.gef.commands.ChangePropertyValueCommand; import org.eclipse.epf.authoring.gef.figures.FreeTextFigure; import org.eclipse.epf.authoring.gef.util.TemplateConstants; import org.eclipse.epf.diagram.model.ModelPackage; import org.eclipse.epf.diagram.model.Node; import org.eclipse.epf.diagram.model.util.GraphicalDataHelper; import org.eclipse.epf.uma.Property; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.Request; import org.eclipse.gef.RequestConstants; import org.eclipse.gef.commands.Command; import org.eclipse.gef.editpolicies.DirectEditPolicy; import org.eclipse.gef.requests.DirectEditRequest; import org.eclipse.gef.tools.DirectEditManager; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.ui.PlatformUI; /** * Provides support for direct editing, text font, color and size changes. * @author Shashidhar Kannoori. */ public class FreeTextNodeEditPart extends NodeEditPart { private Font font; private Color color; private FontData fData; private NodeEditPart part; public FreeTextNodeEditPart(Node model) { super(model); part = this; // TODO Auto-generated constructor stub } protected IFigure createFigure() { FreeTextFigure l = new FreeTextFigure(); return l; } protected void createEditPolicies() { super.createEditPolicies(); if (!((Node) getModel()).isReadOnly()) { installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, createDirectEditPolicy()); } } /* (non-Javadoc) * @see org.eclipse.epf.authoring.gef.edit.BaseEditPart#createDirectEditPolicy() */ protected DirectEditPolicy createDirectEditPolicy() { // TODO Auto-generated method stub return new DirectEditPolicy() { protected Command getDirectEditCommand(DirectEditRequest request) { return new ChangePropertyValueCommand(part, (String) request .getCellEditor().getValue()); } protected void showCurrentEditValue(DirectEditRequest request) { IFigure fig = getDirectEditFigure(); if (fig instanceof FreeTextFigure) { ((FreeTextFigure) fig).setText((String) request.getCellEditor() .getValue()); fig.getUpdateManager().performUpdate(); } } }; } protected void handlePropertyChanged(Notification msg) { switch (msg.getFeatureID(Node.class)) { case ModelPackage.TYPED_NODE__TYPE: refreshVisuals(); return; } super.handlePropertyChanged(msg); } public void performRequest(Request request) { if (request.getType() == RequestConstants.REQ_DIRECT_EDIT && !((Node) getModel()).isReadOnly()) { performDirectEdit(); } else { super.performRequest(request); } } protected void refreshVisuals() { super.refreshVisuals(); IFigure fig = getDirectEditFigure(); if (fig instanceof FreeTextFigure) { FreeTextFigure l = (FreeTextFigure) fig; List alist = ((Node) getModel()).getGraphNode().getProperty(); String fontName = TemplateConstants.DEFAULT_FONT_NAME; int fontStyle = SWT.NORMAL; int fontHeight = TemplateConstants.DEFAULT_FONT_SIZE; int fontRed = SWT.COLOR_RED; int fontBlue = SWT.COLOR_BLUE; int fontGreen = SWT.COLOR_GREEN; if (alist.size() > 0) { for (Iterator ior = alist.iterator(); ior.hasNext();) { Property prop = (Property) ior.next(); if (prop.getKey().equals( GraphicalDataHelper.GRAPH_NODE_FREE_TEXT)) { l.setText(prop.getValue()); } else if (prop.getKey().equals( TemplateConstants.PROPERTY_FONT_NAME)) { fontName = prop.getValue(); } else if (prop.getKey().equals( TemplateConstants.PROPERTY_FONT_STYLE)) { fontStyle = new Integer(prop.getValue()).intValue(); } else if (prop.getKey().equals( TemplateConstants.PROPERTY_FONT_HEIGHT)) { fontHeight = new Integer(prop.getValue()).intValue(); } else if (prop.getKey().equals( TemplateConstants.PROPERTY_FONT_RED)) { fontRed = new Integer(prop.getValue()).intValue(); } else if (prop.getKey().equals( TemplateConstants.PROPERTY_FONT_BLUE)) { fontBlue = new Integer(prop.getValue()).intValue(); } else if (prop.getKey().equals( TemplateConstants.PROPERTY_FONT_GREEN)) { fontGreen = new Integer(prop.getValue()).intValue(); } } } else { l.setText(((Node) getModel()).getGraphNode().getName()); } if (font != null && !font.isDisposed()) { font.dispose(); } if (color != null && !color.isDisposed()) { color.dispose(); } fData = new FontData(fontName, fontHeight, fontStyle); font = new Font(PlatformUI.getWorkbench().getDisplay(), fData); color = new Color(null, fontRed, fontGreen, fontBlue); l.setFont(font); l.setForegroundColor(color); } } protected DirectEditManager createDirectEditManager() { FreeTextFigure l = (FreeTextFigure) getFigure(); return new FreeTextDirectEditManager(this, TextCellEditor.class, new FreeTextCellEditorLocator(l), l) { protected String validate(String txt) { return super.validate(txt); } }; } IFigure getDirectEditFigure() { return getFigure(); } /* * (non-Javadoc) * @see org.eclipse.epf.authoring.gef.edit.NodeEditPart#deactivate() */ public void deactivate() { if (font != null && !font.isDisposed()) { font.dispose(); } if (color != null && !color.isDisposed()) { color.dispose(); } super.deactivate(); } String getDirectEditText() { // TODO Auto-generated method stub //return super.getDirectEditText(); IFigure fig = getDirectEditFigure(); if (fig instanceof FreeTextFigure) { return ((FreeTextFigure) fig).getText(); } return ""; //$NON-NLS-1$ } }