| //------------------------------------------------------------------------------ |
| // 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.geometry.Rectangle; |
| import org.eclipse.epf.authoring.gef.figures.TextFigure; |
| import org.eclipse.gef.tools.CellEditorLocator; |
| import org.eclipse.jface.viewers.CellEditor; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.graphics.GC; |
| import org.eclipse.swt.graphics.Point; |
| import org.eclipse.swt.widgets.Text; |
| |
| /** |
| * Constraint for TextFlow placing. |
| * @author James Thario |
| * @since 1.0 |
| */ |
| public class TextFigureCellEditorLocator implements CellEditorLocator { |
| |
| private TextFigure figure; |
| |
| |
| /** |
| * Creates a new LabelTextCellEditorLocator for the given text figure |
| * @param tf |
| */ |
| public TextFigureCellEditorLocator(TextFigure tf) { |
| setFigure(tf); |
| } |
| |
| /** |
| * @see CellEditorLocator#relocate(org.eclipse.jface.viewers.CellEditor) |
| */ |
| public void relocate(CellEditor celleditor) { |
| TextFigureCellEditorLocator.doLocate(celleditor, figure); |
| } |
| |
| public static void doLocate(CellEditor ce, TextFigure fig) { |
| Text text = (Text) ce.getControl(); |
| String n = (String) ce.getValue(); |
| GC gc = new GC(text); |
| Point size = gc.textExtent(n); |
| gc.dispose(); |
| if (size.x != 0) |
| size = text.computeSize(size.x, SWT.DEFAULT); |
| text.setSize(size.x, size.y); |
| Rectangle textBounds = new Rectangle(text.getClientArea().x, text |
| .getClientArea().y, text.getClientArea().width, text |
| .getClientArea().height); |
| Rectangle figBounds = fig.getClientArea(); |
| fig.translateToAbsolute(figBounds); |
| int delta = (figBounds.width - textBounds.width) / 2; |
| int y = fig.getTextFlowPage().getLocation().y; |
| text.setLocation(figBounds.x + delta, y); |
| } |
| |
| public TextFigure getFigure() { |
| return figure; |
| } |
| |
| public void setFigure(TextFigure figure) { |
| this.figure = figure; |
| } |
| |
| } |