Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrmah2006-07-28 18:01:46 +0000
committerrmah2006-07-28 18:01:46 +0000
commit07623ec4da673b272da5a98c5c93185da23f5dff (patch)
tree277b3c0b81f545435783493eb57349cc37a2d37f
parent66894854cbbd506485a8a524ee270612a1ea68ef (diff)
downloadwebtools.webservices-07623ec4da673b272da5a98c5c93185da23f5dff.tar.gz
webtools.webservices-07623ec4da673b272da5a98c5c93185da23f5dff.tar.xz
webtools.webservices-07623ec4da673b272da5a98c5c93185da23f5dff.zip
[141070] WSDL Editor: Open in XML Schema Link Icon not refreshing properly
-rw-r--r--bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/InternalWSDLMultiPageEditor.java7
-rw-r--r--bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/AbstractBoxtEditPart.java6
-rw-r--r--bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/BindingEditPart.java7
-rw-r--r--bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/InterfaceEditPart.java92
-rw-r--r--bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterTypeEditPart.java624
-rw-r--r--bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/figures/LinkIconFigure.java90
6 files changed, 492 insertions, 334 deletions
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/InternalWSDLMultiPageEditor.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/InternalWSDLMultiPageEditor.java
index f18dfbb06..5dfd91d1b 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/InternalWSDLMultiPageEditor.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/InternalWSDLMultiPageEditor.java
@@ -170,6 +170,10 @@ public class InternalWSDLMultiPageEditor extends ASDMultiPageEditor
{
return ((Adapter)model).getTarget();
}
+ else if (type == IOpenExternalEditorHelper.class) {
+ return new W11OpenExternalEditorHelper(((IFileEditorInput) getEditorInput()).getFile());
+ }
+
else if (type == XSDTypeReferenceEditManager.class)
{
IEditorInput editorInput = getEditorInput();
@@ -467,6 +471,9 @@ public class InternalWSDLMultiPageEditor extends ASDMultiPageEditor
registry.registerAction(directEditAction);
}
+ /*
+ * @deprecated: rmah: remove the method below post WTP1.5. Use getAdapter() method instead.
+ */
public IOpenExternalEditorHelper getOpenExternalEditorHelper() {
return new W11OpenExternalEditorHelper(((IFileEditorInput) getEditorInput()).getFile());
}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/AbstractBoxtEditPart.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/AbstractBoxtEditPart.java
index 827b7dbb7..e66cb21a9 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/AbstractBoxtEditPart.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/AbstractBoxtEditPart.java
@@ -48,7 +48,7 @@ public abstract class AbstractBoxtEditPart extends BaseEditPart implements IName
public IFigure getContentPane()
{
- return ((BoxComponentFigure) getFigure()).getContentPane();
+ return figure.getContentPane();
}
protected void createEditPolicies()
@@ -91,8 +91,8 @@ public abstract class AbstractBoxtEditPart extends BaseEditPart implements IName
{
super.refreshVisuals();
WSDLBaseAdapter box = (WSDLBaseAdapter) getModel();
- ((BoxComponentFigure) getFigure()).headingFigure.setIsReadOnly(box.isReadOnly());
- ((BoxComponentFigure) getFigure()).getLabel().setText(box.getName());
+ figure.headingFigure.setIsReadOnly(box.isReadOnly());
+ figure.getLabel().setText(box.getName());
}
public void addFeedback()
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/BindingEditPart.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/BindingEditPart.java
index 91775d998..9484c232f 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/BindingEditPart.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/BindingEditPart.java
@@ -29,7 +29,6 @@ import org.eclipse.gef.RequestConstants;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import org.eclipse.wst.wsdl.ui.internal.asd.Messages;
import org.eclipse.wst.wsdl.ui.internal.asd.design.connections.CenteredConnectionAnchor;
-import org.eclipse.wst.wsdl.ui.internal.asd.design.connections.TopLeftConnectionAnchor;
import org.eclipse.wst.wsdl.ui.internal.asd.design.editpolicies.ASDSelectionEditPolicy;
import org.eclipse.wst.wsdl.ui.internal.asd.design.figures.BoxComponentFigure;
import org.eclipse.wst.wsdl.ui.internal.asd.design.figures.ComponentReferenceConnection;
@@ -61,7 +60,7 @@ public class BindingEditPart extends BaseEditPart
public IFigure getContentPane()
{
- return ((BoxComponentFigure) getFigure()).getContentPane();
+ return figure.getContentPane();
}
protected List getModelChildren()
@@ -240,9 +239,9 @@ public class BindingEditPart extends BaseEditPart
if (connectionFigure != null)
{
AbstractGraphicalEditPart referenceTypePart = (AbstractGraphicalEditPart) getViewer().getEditPartRegistry().get(typeBeingRef);
- BoxComponentFigure boxComponentFigure = (BoxComponentFigure) referenceTypePart.getFigure();
+ IFigure refFigure= referenceTypePart.getFigure();
connectionFigure.setSourceAnchor(new CenteredConnectionAnchor(getFigure(), CenteredConnectionAnchor.RIGHT, 0));
- connectionFigure.setTargetAnchor(new TopLeftConnectionAnchor(boxComponentFigure, boxComponentFigure.getLabel()));
+ connectionFigure.setTargetAnchor(new CenteredConnectionAnchor(refFigure, CenteredConnectionAnchor.HEADER_LEFT, 0, 11));
connectionFigure.setHighlight(false);
connectionFigure.setVisible(true);
}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/InterfaceEditPart.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/InterfaceEditPart.java
index 1670abbe5..16907f14f 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/InterfaceEditPart.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/InterfaceEditPart.java
@@ -10,20 +10,30 @@
*******************************************************************************/
package org.eclipse.wst.wsdl.ui.internal.asd.design.editparts;
+import java.util.Iterator;
import java.util.List;
import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.LineBorder;
import org.eclipse.draw2d.PositionConstants;
+import org.eclipse.draw2d.RectangleFigure;
import org.eclipse.draw2d.ToolbarLayout;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.EditPart;
+import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import org.eclipse.wst.wsdl.ui.internal.asd.design.DesignViewGraphicsConstants;
import org.eclipse.wst.wsdl.ui.internal.asd.design.figures.BoxComponentFigure;
+import org.eclipse.wst.wsdl.ui.internal.asd.design.figures.LinkIconFigure;
import org.eclipse.wst.wsdl.ui.internal.asd.design.layouts.RowLayout;
import org.eclipse.wst.wsdl.ui.internal.asd.facade.IInterface;
public class InterfaceEditPart extends AbstractBoxtEditPart implements IFeedbackHandler
-{
+{
+ private RectangleFigure linkIconColumn;
+ protected BoxComponentFigure boxFigure;
public InterfaceEditPart()
{
columnData.setColumnWeight("MessageLabel", 0); //$NON-NLS-1$
@@ -34,13 +44,72 @@ public class InterfaceEditPart extends AbstractBoxtEditPart implements IFeedback
protected IFigure createFigure()
{
- BoxComponentFigure figure = (BoxComponentFigure)super.createFigure();
- figure.getLabel().setIcon(((IInterface) getModel()).getImage());
- figure.setBackgroundColor(ColorConstants.orange);
- figure.setBorder(new LineBorder(1));
+ IFigure outer = new Figure();
+ outer.setLayoutManager(new ToolbarLayout(true));
+ boxFigure = (BoxComponentFigure)super.createFigure();
+ boxFigure.getLabel().setIcon(((IInterface) getModel()).getImage());
+ boxFigure.setBackgroundColor(ColorConstants.orange);
+ boxFigure.setBorder(new LineBorder(1));
ToolbarLayout toolbarLayout = new ToolbarLayout(false);
toolbarLayout.setStretchMinorAxis(true);
- figure.setLayoutManager(toolbarLayout);
+ boxFigure.setLayoutManager(toolbarLayout);
+ outer.add(boxFigure);
+ linkIconColumn = new RectangleFigure();
+ linkIconColumn.setOutline(false);
+ linkIconColumn.setLayoutManager(new ToolbarLayout() {
+ public void layout(IFigure parent) {
+ super.layout(parent);
+
+ // We need to layout on the y-axis
+ Iterator children = parent.getChildren().iterator();
+ while (children.hasNext()) {
+ Object item = children.next();
+ if (item instanceof LinkIconFigure) {
+ LinkIconFigure linkFigure = (LinkIconFigure) item;
+ AbstractGraphicalEditPart ep = linkFigure.getAssociatedEditPart();
+ IFigure associatedFigure = ep.getFigure();
+ if (associatedFigure != null) {
+ // Update the bounds
+ Rectangle associatedBounds = associatedFigure.getBounds();
+ Rectangle linkFigureBounds = linkFigure.getBounds();
+ if (linkFigureBounds.y == associatedBounds.y) {
+ break;
+ }
+
+ linkFigure.setFigureLocation(new Point(associatedBounds.x, associatedBounds.y));
+ }
+ }
+ }
+ }
+
+ protected Dimension calculatePreferredSize(IFigure container, int wHint, int hHint) {
+ Dimension dimension = super.calculatePreferredSize(container, wHint, hHint);
+
+ // Calculate the height
+ Iterator it = getFigure().getChildren().iterator();
+ while (it.hasNext()) {
+ Object item = it.next();
+ if (item instanceof BoxComponentFigure) {
+ dimension.height = ((IFigure) item).getPreferredSize().height;
+ break;
+ }
+ }
+
+ // Calculate the width
+ it = container.getChildren().iterator();
+ while (it.hasNext()) {
+ Object item = it.next();
+ if (item instanceof LinkIconFigure) {
+ dimension.width = dimension.width + ((LinkIconFigure) item).horizontalBuffer;
+ break;
+ }
+ }
+
+ return dimension;
+ }
+ });
+
+ outer.add(linkIconColumn);
// rmah: The block of code below has been moved from refreshVisuals(). We're
// assuming the read-only state of the EditPart will never change once the
@@ -54,7 +123,7 @@ public class InterfaceEditPart extends AbstractBoxtEditPart implements IFeedback
figure.getLabel().setForegroundColor(ColorConstants.black);
}
- return figure;
+ return outer;
}
public static void attachToInterfaceEditPart(EditPart editPart, RowLayout rowLayout)
@@ -78,8 +147,6 @@ public class InterfaceEditPart extends AbstractBoxtEditPart implements IFeedback
protected void refreshVisuals()
{
super.refreshVisuals();
-
- BoxComponentFigure fig = (BoxComponentFigure) getFigure();
}
protected List getModelChildren()
@@ -94,8 +161,7 @@ public class InterfaceEditPart extends AbstractBoxtEditPart implements IFeedback
public void removeFeedback() {
super.removeFeedback();
- }
-
+ }
public EditPart getRelativeEditPart(int direction)
{
@@ -105,4 +171,8 @@ public class InterfaceEditPart extends AbstractBoxtEditPart implements IFeedback
}
return super.getRelativeEditPart(direction);
}
+
+ public IFigure getLinkIconColumn() {
+ return linkIconColumn;
+ }
}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterTypeEditPart.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterTypeEditPart.java
index 0e768c40a..66a16dc3e 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterTypeEditPart.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterTypeEditPart.java
@@ -13,17 +13,15 @@ package org.eclipse.wst.wsdl.ui.internal.asd.design.editparts;
import java.util.Iterator;
import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.MarginBorder;
import org.eclipse.draw2d.MouseEvent;
import org.eclipse.draw2d.MouseListener;
import org.eclipse.draw2d.Panel;
-import org.eclipse.draw2d.Polygon;
import org.eclipse.draw2d.PositionConstants;
-import org.eclipse.draw2d.XYLayout;
import org.eclipse.draw2d.geometry.Point;
-import org.eclipse.draw2d.geometry.PointList;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPolicy;
@@ -34,12 +32,13 @@ import org.eclipse.gef.commands.Command;
import org.eclipse.gef.editpolicies.DirectEditPolicy;
import org.eclipse.gef.requests.DirectEditRequest;
import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PlatformUI;
import org.eclipse.wst.wsdl.ui.internal.adapters.basic.W11ParameterForPart;
-import org.eclipse.wst.wsdl.ui.internal.asd.ASDEditorPlugin;
-import org.eclipse.wst.wsdl.ui.internal.asd.ASDMultiPageEditor;
import org.eclipse.wst.wsdl.ui.internal.asd.design.DesignViewGraphicsConstants;
import org.eclipse.wst.wsdl.ui.internal.asd.design.directedit.TypeReferenceDirectEditManager;
import org.eclipse.wst.wsdl.ui.internal.asd.design.editpolicies.ASDSelectionEditPolicy;
+import org.eclipse.wst.wsdl.ui.internal.asd.design.figures.LinkIconFigure;
import org.eclipse.wst.wsdl.ui.internal.asd.design.layouts.RowLayout;
import org.eclipse.wst.wsdl.ui.internal.asd.facade.IParameter;
import org.eclipse.wst.wsdl.ui.internal.asd.util.IOpenExternalEditorHelper;
@@ -49,323 +48,316 @@ import org.eclipse.draw2d.MouseMotionListener.Stub;
public class ParameterTypeEditPart extends BaseEditPart implements IFeedbackHandler, INamedEditPart
{
protected SimpleDirectEditPolicy simpleDirectEditPolicy = new SimpleDirectEditPolicy();
- protected Label parameterType;
- protected RowLayout rowLayout = new RowLayout();
+ protected Label parameterType;
+ protected RowLayout rowLayout = new RowLayout();
- protected MyMouseEventListener mouseEventListener;
-
- protected IFigure createFigure()
- {
- IFigure figure = new Panel();
- figure.setLayoutManager(rowLayout);
-
- parameterType = new Label();
- parameterType.setLabelAlignment(Label.LEFT);
- parameterType.setBorder(new MarginBorder(4,12,4,20));
- figure.add(parameterType);
-
- // rmah: The block of code below has been moved from refreshVisuals(). We're
- // assuming the read-only state of the EditPart will never change once the
- // EditPart has been created.
- if (isReadOnly())
- {
- parameterType.setForegroundColor(DesignViewGraphicsConstants.readOnlyLabelColor);
- }
- else
- {
- parameterType.setForegroundColor(ColorConstants.black);
- }
-
- return figure;
- }
-
- protected void refreshVisuals()
- {
- super.refreshVisuals();
- IParameter param = (IParameter) getModel();
- String name = param.getComponentName();
- parameterType.setText(name);
-
-
- // TODO (cs) this evil bit of code needs to be fixed post WTP 1.5 when we have more freedom to
- // clean up our internal code structure. We shouldn't have hardcoded adapter references here!
- if (getModel() instanceof W11ParameterForPart)
- {
- Image image = ((W11ParameterForPart)getModel()).getSecondaryImage();
- if (image != null)
- {
- parameterType.setIcon(image);
- }
- }
- }
-
- public void addFeedback() {
- figure.setBackgroundColor(DesignViewGraphicsConstants.tableCellSelectionColor);
- }
-
- public void removeFeedback() {
- figure.setBackgroundColor(figure.getParent().getBackgroundColor());
- }
-
- public Label getLabelFigure() {
- return parameterType;
- }
-
- protected void createEditPolicies()
- {
- super.createEditPolicies();
- installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new ASDSelectionEditPolicy());
- installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, simpleDirectEditPolicy);
- }
-
- public void performDirectEdit(Point cursorLocation) {
- if (cursorLocation == null || (hitTest(parameterType, cursorLocation) && !isReadOnly())) {
- IParameter param = (IParameter) getModel();
-
- TypeReferenceDirectEditManager manager = new TypeReferenceDirectEditManager(param, this, parameterType);
- simpleDirectEditPolicy.setDelegate(manager);
- manager.show();
-
-
- }
- else if (hitTest(parameterType, cursorLocation) && isReadOnly()) {
- doOpenNewEditor();
- }
- }
-
public void performRequest(Request req) {
if (req.getType().equals(RequestConstants.REQ_DIRECT_EDIT)) {
performDirectEdit(null);
}
}
- public void activate() {
- super.activate();
-
- // Setup a MouseMotionListener so we know when to display the 'open in XSD Editor' figure
- IFigure feedBackLayer = getLayer(LayerConstants.FEEDBACK_LAYER);
- if (!(feedBackLayer.getLayoutManager() instanceof XYLayout)) {
- feedBackLayer.setLayoutManager(new XYLayout()); // We could probably move this line elsewhere
- }
-
- IFigure primaryLayer = getLayer(LayerConstants.PRIMARY_LAYER);
- mouseEventListener = new MyMouseEventListener(getModel());
- primaryLayer.addMouseMotionListener(mouseEventListener);
- primaryLayer.addMouseListener(mouseEventListener);
- }
-
- public void deactivate() {
- if (mouseEventListener != null) {
- mouseEventListener.discardLinkFigure();
- IFigure primaryLayer = getLayer(LayerConstants.PRIMARY_LAYER);
- primaryLayer.removeMouseMotionListener(mouseEventListener);
- primaryLayer.removeMouseListener(mouseEventListener);
- }
- }
-
- private class MyLinkFigure extends Polygon {
- private PointList points = new PointList();
- public int horizontalBuffer = 4;
- public int verticalBuffer = 6;
-
- public MyLinkFigure() {
- // Draw the arrow
- points.addPoint(new Point(horizontalBuffer + 0, 4 + verticalBuffer));
- points.addPoint(new Point(horizontalBuffer + 9, 4 + verticalBuffer));
- points.addPoint(new Point(horizontalBuffer + 9, 0 + verticalBuffer));
- points.addPoint(new Point(horizontalBuffer + 14, 5 + verticalBuffer));
- points.addPoint(new Point(horizontalBuffer + 9, 10 + verticalBuffer));
- points.addPoint(new Point(horizontalBuffer + 9, 6 + verticalBuffer));
- points.addPoint(new Point(horizontalBuffer + 0, 6 + verticalBuffer));
- points.addPoint(new Point(horizontalBuffer + 0, 4 + verticalBuffer));
- setFill(true);
- }
+ protected MyMouseEventListener mouseEventListener;
+ private LinkIconFigure linkIconFigure;
- public void setLocation(Point newLocation) {
- PointList translatedPoints = new PointList();
-
- for (int index = 0; index < points.size(); index++) {
- Point origPoint = points.getPoint(index);
- translatedPoints.addPoint(origPoint.translate(newLocation));
- }
-
- setPoints(translatedPoints);
- }
- }
-
- private class MyMouseEventListener extends Stub implements MouseListener {
- private MyLinkFigure linkFigure;
- private Object object;
- private IOpenExternalEditorHelper openExternalEditorHelper;
-
- public MyMouseEventListener(Object object) {
- this.object = object;
- linkFigure = new MyLinkFigure();
- unemphasizeLinkFigure();
- }
-
- public void mouseMoved(MouseEvent me) {
- Point pointer = me.getLocation();
- Rectangle figBounds = getFigure().getParent().getParent().getBounds();
-
- if (getExternalEditorOpener().linkApplicable()) {
- getLayer(LayerConstants.FEEDBACK_LAYER).add(linkFigure);
- setLinkFigureLocation();
- if (pointerInRange(figBounds, pointer)) {
- emphasizeLinkFigure();
- }
- else {
- unemphasizeLinkFigure();
- }
- }
- else {
- if (containsLinkFigure()) {
- getLayer(LayerConstants.FEEDBACK_LAYER).remove(linkFigure);
- }
- }
- }
-
- private boolean containsLinkFigure() {
- IFigure figure = getLayer(LayerConstants.FEEDBACK_LAYER);
- Iterator it = figure.getChildren().iterator();
- while (it.hasNext()) {
- Object item = it.next();
- if (item.equals(linkFigure)) {
- return true;
- }
- }
-
- return false;
- }
-
- private Rectangle getLinkFigureBounds() {
- if (containsLinkFigure()) {
- return linkFigure.getBounds();
- }
- else {
- return null;
- }
- }
-
- private boolean pointerInRange(Rectangle figBounds, Point pointer) {
- Rectangle linkBounds = getLinkFigureBounds();
-
- int entireX = figBounds.x;
- int entireY = figBounds.y;
- int entireWidth = figBounds.width + linkBounds.width + linkFigure.horizontalBuffer;
- int entireHeight = figBounds.height;
- Rectangle entireBounds = new Rectangle(entireX, entireY, entireWidth, entireHeight);
-
- return entireBounds.contains(pointer);
- }
-
- protected void setLinkFigureLocation() {
- Rectangle figureBounds = getFigure().getBounds();
- int xStart = figureBounds.x + figureBounds.width;
- int yStart = figureBounds.y;
-
- Point aPoint = new Point(xStart, yStart);
- linkFigure.setLocation(aPoint);
- }
-
- public void discardLinkFigure() {
- if (containsLinkFigure()) {
- getLayer(LayerConstants.FEEDBACK_LAYER).remove(linkFigure);
- }
- }
-
- protected void emphasizeLinkFigure() {
- linkFigure.setForegroundColor(ColorConstants.blue);
- linkFigure.setBackgroundColor(ColorConstants.blue);
- }
-
- protected void unemphasizeLinkFigure() {
- linkFigure.setForegroundColor(ColorConstants.lightGray);
- linkFigure.setBackgroundColor(ColorConstants.lightGray);
- }
+ protected IFigure createFigure()
+ {
+ IFigure figure = new Panel();
+ figure.setLayoutManager(rowLayout);
- public void mouseReleased(MouseEvent me) { }
- public void mouseDoubleClicked(MouseEvent me) { }
- public void mousePressed(MouseEvent me) {
- if (me.button != 1) {
- return;
- }
-
- Point pointer = me.getLocation();
- Rectangle linkFigBounds = getLinkFigureBounds();
- if (linkFigBounds == null) {
- return;
- }
-
- Rectangle testbounds = new Rectangle(linkFigBounds.x, linkFigBounds.y, 0, linkFigBounds.height);
-
- if (getExternalEditorOpener().linkApplicable() && pointerInRange(testbounds, pointer)) {
- setLinkFigureLocation();
- // Open in XSD Editor
- getExternalEditorOpener().openExternalEditor();
- }
- }
-
- private IOpenExternalEditorHelper getExternalEditorOpener() {
- if (openExternalEditorHelper == null) {
- openExternalEditorHelper = ((ASDMultiPageEditor) ASDEditorPlugin.getActiveEditor()).getOpenExternalEditorHelper();
- openExternalEditorHelper.setModel(object);
- }
-
- return openExternalEditorHelper;
- }
- }
-
- private class SimpleDirectEditPolicy extends DirectEditPolicy
- {
- protected TypeReferenceDirectEditManager delegate;
-
- public void setDelegate(TypeReferenceDirectEditManager delegate)
- {
- this.delegate = delegate;
- }
-
- protected org.eclipse.gef.commands.Command getDirectEditCommand(final DirectEditRequest request)
- {
- return new Command() //AbstractCommand()
- {
- public void execute()
- {
- if (delegate != null)
- {
- delegate.performEdit(request.getCellEditor());
- }
- }
-
- public void redo()
- {
- }
-
- public void undo()
- {
- }
-
- public boolean canExecute()
- {
- return true;
- }
- };
- }
-
- protected void showCurrentEditValue(DirectEditRequest request)
- {
- //hack to prevent async layout from placing the cell editor twice.
- getHostFigure().getUpdateManager().performUpdate();
- }
- }
-
- public EditPart getRelativeEditPart(int direction)
- {
- EditPart editPart = super.getRelativeEditPart(direction);
- if (direction == PositionConstants.SOUTH && editPart == null)
- {
- editPart = EditPartNavigationHandlerUtil.getNextInterface(this);
- }
- return editPart;
- }
- } \ No newline at end of file
+ parameterType = new Label();
+ parameterType.setLabelAlignment(Label.LEFT);
+ parameterType.setBorder(new MarginBorder(4,12,4,20));
+ figure.add(parameterType);
+
+ // rmah: The block of code below has been moved from refreshVisuals(). We're
+ // assuming the read-only state of the EditPart will never change once the
+ // EditPart has been created.
+ if (isReadOnly())
+ {
+ parameterType.setForegroundColor(DesignViewGraphicsConstants.readOnlyLabelColor);
+ }
+ else
+ {
+ parameterType.setForegroundColor(ColorConstants.black);
+ }
+
+ return figure;
+ }
+
+ protected void refreshVisuals()
+ {
+ super.refreshVisuals();
+ IParameter param = (IParameter) getModel();
+ String name = param.getComponentName();
+ parameterType.setText(name);
+
+
+ // TODO (cs) this evil bit of code needs to be fixed post WTP 1.5 when we have more freedom to
+ // clean up our internal code structure. We shouldn't have hardcoded adapter references here!
+ if (getModel() instanceof W11ParameterForPart)
+ {
+ Image image = ((W11ParameterForPart)getModel()).getSecondaryImage();
+ if (image != null)
+ {
+ parameterType.setIcon(image);
+ }
+ }
+
+ // Force the LinkIconColumn to resize and relayout itself.
+ ((Figure) getInterfaceEditPart().getLinkIconColumn()).invalidate();
+ refreshLinkFigure(new Point(-1, -1));
+ }
+
+ private InterfaceEditPart getInterfaceEditPart() {
+ EditPart ep = getParent();
+ while (ep != null && !(ep instanceof InterfaceEditPart)) {
+ ep = ep.getParent();
+ }
+
+ if (ep instanceof InterfaceEditPart) {
+ return (InterfaceEditPart) ep;
+ }
+
+ return null;
+ }
+
+ public void addFeedback() {
+ figure.setBackgroundColor(DesignViewGraphicsConstants.tableCellSelectionColor);
+ }
+
+ public void removeFeedback() {
+ figure.setBackgroundColor(figure.getParent().getBackgroundColor());
+ }
+
+ public Label getLabelFigure() {
+ return parameterType;
+ }
+
+ protected void createEditPolicies()
+ {
+ super.createEditPolicies();
+ installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new ASDSelectionEditPolicy());
+ installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, simpleDirectEditPolicy);
+ }
+
+ public void performDirectEdit(Point cursorLocation) {
+ if (cursorLocation == null || (hitTest(parameterType, cursorLocation) && !isReadOnly())) {
+ IParameter param = (IParameter) getModel();
+
+ TypeReferenceDirectEditManager manager = new TypeReferenceDirectEditManager(param, this, parameterType);
+ simpleDirectEditPolicy.setDelegate(manager);
+ manager.show();
+
+
+ }
+ else if (hitTest(parameterType, cursorLocation) && isReadOnly()) {
+ doOpenNewEditor();
+ }
+ }
+
+ public void activate() {
+ super.activate();
+
+ IFigure primaryLayer = getLayer(LayerConstants.PRIMARY_LAYER);
+ mouseEventListener = new MyMouseEventListener();
+ primaryLayer.addMouseMotionListener(mouseEventListener);
+ primaryLayer.addMouseListener(mouseEventListener);
+ }
+
+ public void deactivate() {
+ if (mouseEventListener != null) {
+ IFigure primaryLayer = getLayer(LayerConstants.PRIMARY_LAYER);
+ primaryLayer.removeMouseMotionListener(mouseEventListener);
+ primaryLayer.removeMouseListener(mouseEventListener);
+ }
+
+ InterfaceEditPart ep = getInterfaceEditPart();
+ if (ep != null && linkIconFigure != null) {
+ IFigure fig = ep.getLinkIconColumn();
+ if (fig.getChildren().contains(linkIconFigure)) {
+ ep.getLinkIconColumn().remove(linkIconFigure);
+ }
+ }
+ }
+
+
+ private class SimpleDirectEditPolicy extends DirectEditPolicy
+ {
+ protected TypeReferenceDirectEditManager delegate;
+
+ public void setDelegate(TypeReferenceDirectEditManager delegate)
+ {
+ this.delegate = delegate;
+ }
+
+ protected org.eclipse.gef.commands.Command getDirectEditCommand(final DirectEditRequest request)
+ {
+ return new Command() //AbstractCommand()
+ {
+ public void execute()
+ {
+ if (delegate != null)
+ {
+ delegate.performEdit(request.getCellEditor());
+ }
+ }
+
+ public void redo()
+ {
+ }
+
+ public void undo()
+ {
+ }
+
+ public boolean canExecute()
+ {
+ return true;
+ }
+ };
+ }
+
+ protected void showCurrentEditValue(DirectEditRequest request)
+ {
+ //hack to prevent async layout from placing the cell editor twice.
+ getHostFigure().getUpdateManager().performUpdate();
+ }
+ }
+
+ public EditPart getRelativeEditPart(int direction)
+ {
+ EditPart editPart = super.getRelativeEditPart(direction);
+ if (direction == PositionConstants.SOUTH && editPart == null)
+ {
+ editPart = EditPartNavigationHandlerUtil.getNextInterface(this);
+ }
+ return editPart;
+ }
+
+ private class MyMouseEventListener extends Stub implements MouseListener {
+ public void mouseReleased(MouseEvent me) { }
+ public void mouseDoubleClicked(MouseEvent me) { }
+
+ public void mouseMoved(MouseEvent me) {
+ Point pointer = me.getLocation();
+ refreshLinkFigure(pointer);
+ }
+
+ public void mousePressed(MouseEvent me) {
+ Point pointer = me.getLocation();
+ openExternalEditor(pointer);
+ }
+ }
+
+ // Methods below handle the Link Figure.....
+ private void emphasizeLinkFigure() {
+ linkIconFigure.setForegroundColor(ColorConstants.blue);
+ linkIconFigure.setBackgroundColor(ColorConstants.blue);
+ }
+
+ private void unemphasizeLinkFigure() {
+ linkIconFigure.setForegroundColor(ColorConstants.lightGray);
+ linkIconFigure.setBackgroundColor(ColorConstants.lightGray);
+ }
+
+ private boolean pointerInRange(Rectangle figBounds, Point pointer) {
+ Rectangle linkBounds = getLinkFigureBounds();
+
+ int entireX = figBounds.x;
+ int entireY = figBounds.y;
+ int entireWidth = figBounds.width + linkBounds.width + linkIconFigure.horizontalBuffer;
+ int entireHeight = figBounds.height;
+ Rectangle entireBounds = new Rectangle(entireX, entireY, entireWidth, entireHeight);
+
+ return entireBounds.contains(pointer);
+ }
+
+ private boolean containsLinkFigure() {
+ Iterator it = getInterfaceEditPart().getLinkIconColumn().getChildren().iterator();
+ while (it.hasNext()) {
+ Object item = it.next();
+ if (item.equals(linkIconFigure)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private Rectangle getLinkFigureBounds() {
+ if (containsLinkFigure()) {
+ return linkIconFigure.getBounds();
+ }
+ else {
+ return null;
+ }
+ }
+
+ private IOpenExternalEditorHelper openExternalEditorHelper;
+ private IOpenExternalEditorHelper getExternalEditorOpener() {
+ if (openExternalEditorHelper == null) {
+ if (PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) {
+ IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ if (page.getActiveEditor() != null) {
+ Object adapted = page.getActiveEditor().getAdapter(IOpenExternalEditorHelper.class);
+ if (adapted instanceof IOpenExternalEditorHelper) {
+ openExternalEditorHelper = (IOpenExternalEditorHelper) adapted;
+ openExternalEditorHelper.setModel(getModel());
+ }
+ }
+ }
+ }
+
+ return openExternalEditorHelper;
+ }
+
+ private void refreshLinkFigure(Point point) {
+ Rectangle figBounds = getFigure().getParent().getParent().getBounds();
+ if (getExternalEditorOpener() != null) {
+ if (getExternalEditorOpener().linkApplicable()) {
+ if (!figureContainsLinkFigure(getInterfaceEditPart().getLinkIconColumn())) {
+ linkIconFigure = new LinkIconFigure(this);
+ getInterfaceEditPart().getLinkIconColumn().add(linkIconFigure);
+ }
+
+ if (pointerInRange(figBounds, point)) {
+ emphasizeLinkFigure();
+ }
+ else {
+ unemphasizeLinkFigure();
+ }
+ }
+ else {
+ if (containsLinkFigure()) {
+ getInterfaceEditPart().getLinkIconColumn().remove(linkIconFigure);
+ }
+ }
+ }
+ }
+
+ private boolean figureContainsLinkFigure(IFigure parent) {
+ Iterator it = parent.getChildren().iterator();
+ while (it.hasNext()) {
+ if (it.next().equals(linkIconFigure)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private void openExternalEditor(Point point) {
+ Rectangle linkFigBounds = getLinkFigureBounds();
+ if (linkFigBounds == null || getExternalEditorOpener() == null) {
+ return;
+ }
+
+ Rectangle testbounds = new Rectangle(linkFigBounds.x, linkFigBounds.y, 0, linkFigBounds.height);
+
+ if (getExternalEditorOpener().linkApplicable() && pointerInRange(testbounds, point)) {
+ // Open in XSD Editor
+ getExternalEditorOpener().openExternalEditor();
+ }
+ }
+}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/figures/LinkIconFigure.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/figures/LinkIconFigure.java
new file mode 100644
index 000000000..8107a381f
--- /dev/null
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/figures/LinkIconFigure.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 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 API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.wsdl.ui.internal.asd.design.figures;
+
+import org.eclipse.draw2d.Graphics;
+import org.eclipse.draw2d.Polygon;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.PointList;
+import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
+
+public class LinkIconFigure extends Polygon {
+ private AbstractGraphicalEditPart editPart;
+ private Point figLocation;
+ private PointList points = new PointList();
+ public int horizontalBuffer = 5;
+ public int verticalBuffer = 7;
+
+ public LinkIconFigure(AbstractGraphicalEditPart ep) {
+ editPart = ep;
+
+ // Draw the arrow
+ points.addPoint(new Point(horizontalBuffer + 0, 4 + verticalBuffer));
+ points.addPoint(new Point(horizontalBuffer + 9, 4 + verticalBuffer));
+ points.addPoint(new Point(horizontalBuffer + 9, 0 + verticalBuffer));
+ points.addPoint(new Point(horizontalBuffer + 14, 5 + verticalBuffer));
+ points.addPoint(new Point(horizontalBuffer + 9, 10 + verticalBuffer));
+ points.addPoint(new Point(horizontalBuffer + 9, 6 + verticalBuffer));
+ points.addPoint(new Point(horizontalBuffer + 0, 6 + verticalBuffer));
+ points.addPoint(new Point(horizontalBuffer + 0, 4 + verticalBuffer));
+
+ setFill(true);
+ setPoints(points);
+ }
+
+ public void paintFigure(Graphics graphics) {
+ super.paintFigure(graphics);
+ }
+
+ public void setFigureLocation(Point newStartingLocation) {
+ int dy = newStartingLocation.y;
+
+ if (figLocation != null) {
+ dy = newStartingLocation.y - figLocation.y;
+ }
+
+ // Update the points
+ PointList newPoints = new PointList();
+ PointList pList = getPoints();
+ for (int index = 0; index < pList.size(); index++) {
+ Point point = pList.getPoint(index);
+ // Add 5 for the padding
+ Point newPoint = new Point(point.x + horizontalBuffer, point.y + dy);
+ newPoints.addPoint(newPoint);
+ }
+ setPoints(newPoints);
+
+ figLocation = newStartingLocation;
+ }
+
+ public void primTranslate(int dx, int dy) {
+ bounds.x += dx;
+ bounds.y += dy;
+
+ PointList pList = getPoints();
+ PointList newList = new PointList();
+ for (int index = 0; index < pList.size(); index++) {
+ Point point = pList.getPoint(index);
+ Point newPoint = new Point(point.x + dx, point.y);
+ newList.addPoint(newPoint);
+ }
+ setPoints(newList);
+
+ if (useLocalCoordinates()) {
+ fireCoordinateSystemChanged();
+ return;
+ }
+ }
+
+ public AbstractGraphicalEditPart getAssociatedEditPart() {
+ return editPart;
+ }
+}

Back to the top