/******************************************************************************* * Copyright (c) 2001, 2009 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 API and implementation *******************************************************************************/ package org.eclipse.wst.xsd.ui.internal.adt.design.editparts; import org.eclipse.draw2d.Label; import org.eclipse.draw2d.geometry.Point; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.Request; import org.eclipse.gef.RequestConstants; import org.eclipse.gef.editparts.AbstractGraphicalEditPart; import org.eclipse.swt.graphics.Font; import org.eclipse.wst.xsd.ui.internal.adt.design.editpolicies.ADTDirectEditPolicy; import org.eclipse.wst.xsd.ui.internal.adt.design.editpolicies.ADTSelectionFeedbackEditPolicy; import org.eclipse.wst.xsd.ui.internal.adt.facade.IField; import org.eclipse.wst.xsd.ui.internal.adt.facade.IType; import org.eclipse.wst.xsd.ui.internal.adt.typeviz.design.figures.BoxFigure; public class TopLevelFieldEditPart extends BoxEditPart implements INamedEditPart { protected ADTDirectEditPolicy adtDirectEditPolicy = new ADTDirectEditPolicy(); private Font italicFont; protected boolean shouldDrawConnection() { IField field = (IField)getModel(); IType type = field.getType(); return (type != null); } public TypeReferenceConnection createConnectionFigure() { TypeReferenceConnection connectionFigure = null; IField field = (IField)getModel(); IType type = field.getType(); if (type != null) { AbstractGraphicalEditPart referenceTypePart = (AbstractGraphicalEditPart)getViewer().getEditPartRegistry().get(type); if (referenceTypePart != null) { connectionFigure = new TypeReferenceConnection(); connectionFigure.setSourceAnchor(new CenteredConnectionAnchor(getFigure(), CenteredConnectionAnchor.RIGHT, 0)); int targetAnchorYOffset = 12; connectionFigure.setTargetAnchor(new CenteredConnectionAnchor(referenceTypePart.getFigure(), CenteredConnectionAnchor.HEADER_LEFT, 0, targetAnchorYOffset)); connectionFigure.setHighlight(false); } } return connectionFigure; } protected void createEditPolicies() { super.createEditPolicies(); installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, adtDirectEditPolicy); installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new ADTSelectionFeedbackEditPolicy()); } protected void refreshVisuals() { IField field = (IField)getModel(); BoxFigure boxFigure = (BoxFigure)getFigure(); Label label = boxFigure.getNameLabel(); label.setText(field.getName()); if (field.isAbstract()) { if (italicFont == null) { Font font = label.getFont(); italicFont = getItalicFont(font); } if (italicFont != null) { label.setFont(italicFont); } } else { label.setFont(label.getParent().getFont()); } super.refreshVisuals(); } public void deactivate() { if (italicFont != null) { italicFont.dispose(); italicFont = null; } super.deactivate(); } public Label getNameLabelFigure() { BoxFigure boxFigure = (BoxFigure)getFigure(); return boxFigure.getNameLabel(); } public void performDirectEdit(Point cursorLocation) { } public String getReaderText() { return getNameLabelFigure().getText(); } public void performRequest(Request request) { if (request.getType() == RequestConstants.REQ_DIRECT_EDIT|| request.getType() == RequestConstants.REQ_OPEN) { // if (request instanceof LocationRequest) // { // LocationRequest locationRequest = (LocationRequest)request; // Point p = locationRequest.getLocation(); // // if (hitTest(getNameLabelFigure(), p)) // { // LabelEditManager manager = new LabelEditManager(this, new LabelCellEditorLocator(this, p)); // NameUpdateCommandWrapper wrapper = new NameUpdateCommandWrapper(); // adtDirectEditPolicy.setUpdateCommand(wrapper); // manager.show(); // } // } } } }