/* * Created on Jul 14, 2004 */ package com.realpersist.gef.part; import java.beans.PropertyChangeEvent; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.Label; import org.eclipse.draw2d.geometry.Point; import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.Request; import org.eclipse.gef.RequestConstants; import org.eclipse.gef.requests.DirectEditRequest; import org.eclipse.gef.tools.DirectEditManager; import org.eclipse.jface.viewers.TextCellEditor; import com.realpersist.gef.directedit.ColumnNameTypeCellEditorValidator; import com.realpersist.gef.directedit.ExtendedDirectEditManager; import com.realpersist.gef.directedit.LabelCellEditorLocator; import com.realpersist.gef.directedit.ValidationMessageHandler; import com.realpersist.gef.editor.ValidationEnabledGraphicalViewer; import com.realpersist.gef.figures.EditableLabel; import com.realpersist.gef.model.Column; import com.realpersist.gef.policy.ColumnDirectEditPolicy; import com.realpersist.gef.policy.ColumnEditPolicy; /** * Represents an editable Column object in the model * @author Phil Zoio */ public class ColumnPart extends PropertyAwarePart { protected DirectEditManager manager; /** * @return the ColumnLabel representing the Column */ protected IFigure createFigure() { Column column = (Column) getModel(); String label = column.getLabelText(); EditableLabel columnLabel = new EditableLabel(label); return columnLabel; } /** * Creats EditPolicies for the column label */ protected void createEditPolicies() { installEditPolicy(EditPolicy.COMPONENT_ROLE, new ColumnEditPolicy()); installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new ColumnDirectEditPolicy()); installEditPolicy(EditPolicy.LAYOUT_ROLE, null); } public void performRequest(Request request) { if (request.getType() == RequestConstants.REQ_DIRECT_EDIT) { if (request instanceof DirectEditRequest && !directEditHitTest(((DirectEditRequest) request).getLocation().getCopy())) return; performDirectEdit(); } } private boolean directEditHitTest(Point requestLoc) { IFigure figure = getFigure(); figure.translateToRelative(requestLoc); if (figure.containsPoint(requestLoc)) return true; return false; } protected void performDirectEdit() { if (manager == null) { ValidationEnabledGraphicalViewer viewer = (ValidationEnabledGraphicalViewer) getViewer(); ValidationMessageHandler handler = viewer.getValidationHandler(); Label l = (Label) getFigure(); ColumnNameTypeCellEditorValidator columnNameTypeCellEditorValidator = new ColumnNameTypeCellEditorValidator( handler); manager = new ExtendedDirectEditManager(this, TextCellEditor.class, new LabelCellEditorLocator(l), l, columnNameTypeCellEditorValidator); } manager.show(); } /** * Sets the width of the line when selected */ public void setSelected(int value) { super.setSelected(value); EditableLabel columnLabel = (EditableLabel) getFigure(); if (value != EditPart.SELECTED_NONE) columnLabel.setSelected(true); else columnLabel.setSelected(false); columnLabel.repaint(); } /** * @param Handles * name change during direct edit */ public void handleNameChange(String textValue) { EditableLabel label = (EditableLabel) getFigure(); label.setVisible(false); setSelected(EditPart.SELECTED_NONE); label.revalidate(); } /** * Handles when successfully applying direct edit */ protected void commitNameChange(PropertyChangeEvent evt) { EditableLabel label = (EditableLabel) getFigure(); label.setText(getColumn().getLabelText()); setSelected(EditPart.SELECTED_PRIMARY); label.revalidate(); } /** * Reverts state back to prior edit state */ public void revertNameChange(String oldValue) { EditableLabel label = (EditableLabel) getFigure(); label.setVisible(true); setSelected(EditPart.SELECTED_PRIMARY); label.revalidate(); } /** * We don't need to explicitly handle refresh visuals because the times when * this needs to be done it is handled by the table e.g. handleNameChange() */ protected void refreshVisuals() { Column column = (Column) getModel(); EditableLabel columnLabel = (EditableLabel) getFigure(); columnLabel.setText(column.getLabelText()); } private Column getColumn() { return (Column) getModel(); } }