blob: 6edac9c1c6ab98184dfdd4372586ba6f5bfc161c [file] [log] [blame]
/*******************************************************************************
* 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();
}
}