| //------------------------------------------------------------------------------ |
| // 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.text.TextFlow; |
| import org.eclipse.emf.common.notify.Adapter; |
| import org.eclipse.emf.common.notify.Notification; |
| import org.eclipse.emf.common.notify.impl.AdapterImpl; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.epf.authoring.gef.edit.policies.LabelSelectionEditPolicy; |
| import org.eclipse.epf.authoring.gef.figures.SelectableLabel; |
| import org.eclipse.gef.EditPolicy; |
| import org.eclipse.gef.editparts.AbstractGraphicalEditPart; |
| import org.eclipse.gef.editpolicies.DirectEditPolicy; |
| import org.eclipse.gef.tools.DirectEditManager; |
| import org.eclipse.jface.viewers.TextCellEditor; |
| |
| /** |
| * Provides infrastructure for deletion, direct-editing, property source and |
| * model-listening. |
| * |
| * @author Phong Nguyen Le |
| * @since 1.0 |
| */ |
| public abstract class BaseEditPart extends AbstractGraphicalEditPart { |
| |
| protected DirectEditManager manager; |
| |
| protected Adapter modelListener = new AdapterImpl() { |
| public void notifyChanged(Notification msg) { |
| handlePropertyChanged(msg); |
| } |
| }; |
| |
| /** |
| * Constructor |
| * @param obj {@link EObject} |
| */ |
| public BaseEditPart(EObject obj) { |
| super(); |
| setModel(obj); |
| } |
| |
| public void activate() { |
| super.activate(); |
| ((EObject) getModel()).eAdapters().add(modelListener); |
| } |
| |
| protected abstract DirectEditPolicy createDirectEditPolicy(); |
| |
| protected void createEditPolicies() { |
| installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, |
| new LabelSelectionEditPolicy()); |
| } |
| |
| protected IFigure createFigure() { |
| return new SelectableLabel(); |
| } |
| |
| /** |
| * (non-Javadoc) |
| * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#deactivate() |
| */ |
| public void deactivate() { |
| ((EObject) getModel()).eAdapters().remove(modelListener); |
| super.deactivate(); |
| } |
| |
| IFigure getDirectEditFigure() { |
| return getFigure(); |
| } |
| |
| String getDirectEditText() { |
| IFigure fig = getDirectEditFigure(); |
| if (fig instanceof Label) { |
| return ((Label) fig).getText(); |
| } else if (fig instanceof TextFlow) { |
| return ((TextFlow) fig).getText(); |
| } |
| return ""; //$NON-NLS-1$ |
| } |
| |
| protected abstract void handlePropertyChanged(Notification msg); |
| |
| protected DirectEditManager getDirectEditManager() { |
| if (manager == null) { |
| manager = createDirectEditManager(); |
| } |
| return manager; |
| } |
| |
| protected void performDirectEdit() { |
| getDirectEditManager(); |
| |
| if (manager != null) { |
| manager.show(); |
| } |
| } |
| |
| protected DirectEditManager createDirectEditManager() { |
| return new LabelDirectEditManager(this, TextCellEditor.class, |
| new LabelCellEditorLocator(getDirectEditFigure())); |
| } |
| |
| } |