//------------------------------------------------------------------------------ // 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.IFigure; import org.eclipse.draw2d.Label; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.gef.tools.CellEditorLocator; import org.eclipse.gef.tools.DirectEditManager; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; /** * Manages the direct edit operation by creating and maintaining the * {@link org.eclipse.jface.viewers.CellEditor} and executing the resulting command if * the cell editor value has changed. For {@link Label}. * @author Phong Nguyen Le * @since 1.0 */ public class LabelDirectEditManager extends DirectEditManager { Font scaledFont; public LabelDirectEditManager(GraphicalEditPart source, Class editorType, CellEditorLocator locator) { super(source, editorType, locator); } /** * @see org.eclipse.gef.tools.DirectEditManager#bringDown() */ protected void bringDown() { // This method might be re-entered when super.bringDown() is called. Font disposeFont = scaledFont; scaledFont = null; super.bringDown(); if (disposeFont != null) disposeFont.dispose(); } protected void initCellEditor() { Text text = (Text) getCellEditor().getControl(); getCellEditor().setValue(getInitialText()); IFigure figure = getEditPart().getFigure(); scaledFont = figure.getFont(); FontData data = scaledFont.getFontData()[0]; Dimension fontSize = new Dimension(0, data.getHeight()); getDirectEditFigure().translateToAbsolute(fontSize); data.setHeight(fontSize.height); scaledFont = new Font(null, data); text.setFont(scaledFont); text.selectAll(); } /** * Creates the cell editor on the given composite. The cell editor is * created by instantiating the cell editor type passed into this * DirectEditManager's constuctor. * * @param composite * the composite to create the cell editor on * @return the newly created cell editor */ protected CellEditor createCellEditorOn(Composite composite) { return new TextCellEditor(composite, SWT.MULTI | SWT.WRAP); } /** * @return the initial value of the text shown in the cell editor for * direct-editing; cannot return <code>null</code> */ protected String getInitialText() { return ((BaseEditPart) getEditPart()).getDirectEditText(); } /** * Used to determine the initial text of the cell editor and to determine * the font size of the text. * * @return the figure being edited */ protected IFigure getDirectEditFigure() { return ((BaseEditPart) getEditPart()).getDirectEditFigure(); } }