| /******************************************************************************* |
| * Copyright (c) 2001, 2008 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.design.editparts; |
| |
| import org.eclipse.draw2d.ColorConstants; |
| import org.eclipse.gef.EditPolicy; |
| import org.eclipse.gef.GraphicalEditPart; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.wst.xsd.ui.internal.adapters.XSDAttributeDeclarationAdapter; |
| import org.eclipse.wst.xsd.ui.internal.adapters.XSDBaseAdapter; |
| import org.eclipse.wst.xsd.ui.internal.adapters.XSDElementDeclarationAdapter; |
| import org.eclipse.wst.xsd.ui.internal.adt.design.IAnnotationProvider; |
| import org.eclipse.wst.xsd.ui.internal.adt.design.directedit.AttributeReferenceDirectEditManager; |
| import org.eclipse.wst.xsd.ui.internal.adt.design.directedit.ElementReferenceDirectEditManager; |
| import org.eclipse.wst.xsd.ui.internal.adt.design.directedit.LabelCellEditorLocator; |
| import org.eclipse.wst.xsd.ui.internal.adt.design.directedit.LabelEditManager; |
| import org.eclipse.wst.xsd.ui.internal.adt.design.directedit.ReferenceDirectEditManager; |
| import org.eclipse.wst.xsd.ui.internal.adt.design.editparts.BaseFieldEditPart; |
| import org.eclipse.wst.xsd.ui.internal.adt.design.figures.IFieldFigure; |
| import org.eclipse.wst.xsd.ui.internal.adt.facade.IField; |
| import org.eclipse.wst.xsd.ui.internal.adt.typeviz.design.figures.FieldFigure; |
| import org.eclipse.wst.xsd.ui.internal.common.util.XSDCommonUIUtils; |
| import org.eclipse.wst.xsd.ui.internal.design.editpolicies.DragAndDropEditPolicy; |
| import org.eclipse.wst.xsd.ui.internal.design.editpolicies.SelectionHandlesEditPolicyImpl; |
| import org.eclipse.xsd.XSDConcreteComponent; |
| |
| public class XSDBaseFieldEditPart extends BaseFieldEditPart |
| { |
| |
| public XSDBaseFieldEditPart() |
| { |
| super(); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.gef.editparts.AbstractEditPart#refreshVisuals() |
| */ |
| protected void refreshVisuals() |
| { |
| IFieldFigure figure = getFieldFigure(); |
| IField field = (IField) getModel(); |
| |
| figure.getNameLabel().setText(field.getName()); |
| figure.getTypeLabel().setText(field.getTypeName()); |
| figure.refreshVisuals(getModel()); |
| if (field.isReadOnly()) |
| { |
| figure.setForegroundColor(ColorConstants.darkGray); |
| } |
| else |
| { |
| if (isHighContrast) |
| { |
| figure.setForegroundColor(Display.getDefault().getSystemColor(SWT.COLOR_WIDGET_FOREGROUND)); |
| figure.setBackgroundColor(Display.getDefault().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND)); |
| } |
| else |
| figure.setForegroundColor(ColorConstants.black); |
| } |
| |
| String occurrenceDescription = ""; //$NON-NLS-1$ |
| if (field instanceof IAnnotationProvider) |
| { |
| occurrenceDescription = ((IAnnotationProvider)field).getNameAnnotationString(); |
| } |
| refreshIcon(); |
| figure.getNameAnnotationLabel().setText(occurrenceDescription); |
| |
| figure.recomputeLayout(); |
| |
| |
| if (getRoot() != null) |
| ((GraphicalEditPart)getRoot()).getFigure().invalidateTree(); |
| } |
| |
| protected void refreshIcon() |
| { |
| IFieldFigure figure = getFieldFigure(); |
| // our model implements ITreeElement |
| if (getModel() instanceof XSDBaseAdapter) |
| { |
| Image image = ((XSDBaseAdapter)getModel()).getImage(); |
| boolean isReadOnly = ((XSDBaseAdapter)getModel()).isReadOnly(); |
| figure.getNameLabel().setIcon(image); |
| |
| if (image != null) |
| { |
| XSDConcreteComponent comp = (XSDConcreteComponent) ((XSDBaseAdapter)getModel()).getTarget(); |
| figure.getNameLabel().setIcon(XSDCommonUIUtils.getUpdatedImage(comp, image, isReadOnly)); |
| } |
| } |
| } |
| |
| public void addNotify() |
| { |
| super.addNotify(); |
| getFieldFigure().editPartAttached(this); |
| } |
| |
| protected SelectionHandlesEditPolicyImpl selectionHandlesEditPolicy = new SelectionHandlesEditPolicyImpl(); |
| protected void createEditPolicies() |
| { |
| super.createEditPolicies(); |
| installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, selectionHandlesEditPolicy); |
| if (!isFileReadOnly()) |
| installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, new DragAndDropEditPolicy(getViewer(), selectionHandlesEditPolicy)); |
| } |
| |
| protected void directEditNameField() |
| { |
| Object model = getModel(); |
| IFieldFigure fieldFigure = getFieldFigure(); |
| if ( model instanceof IField) |
| { |
| IField field = (IField) model; |
| if (field.isReference()) |
| { |
| ReferenceDirectEditManager manager = null; |
| if (field instanceof XSDElementDeclarationAdapter) |
| { |
| manager = new ElementReferenceDirectEditManager((IField) model, this, fieldFigure.getNameLabel()); |
| } |
| else if (field instanceof XSDAttributeDeclarationAdapter) |
| { |
| manager = new AttributeReferenceDirectEditManager((IField) model, this, fieldFigure.getNameLabel()); |
| } |
| if (manager != null) |
| { |
| ReferenceUpdateCommand elementUpdateCommand = new ReferenceUpdateCommand(); |
| elementUpdateCommand.setDelegate(manager); |
| adtDirectEditPolicy.setUpdateCommand(elementUpdateCommand); |
| manager.show(); |
| } |
| } |
| else |
| { |
| LabelEditManager manager = new LabelEditManager(this, new LabelCellEditorLocator(this, null)); |
| NameUpdateCommandWrapper wrapper = new NameUpdateCommandWrapper(); |
| adtDirectEditPolicy.setUpdateCommand(wrapper); |
| manager.show(); |
| } |
| } |
| } |
| |
| public void setFocus(boolean focus) |
| { |
| super.setFocus(focus); |
| hasFocus = focus; |
| ((FieldFigure)getFigure()).hasFocus = hasFocus; |
| getFigure().repaint(); |
| } |
| } |