### Eclipse Workspace Patch 1.0
#P org.eclipse.gmf.runtime.diagram.ui
Index: src/org/eclipse/gmf/runtime/diagram/ui/handles/CompartmentCollapseHandle.java
===================================================================
RCS file: /cvsroot/technology/org.eclipse.gmf/plugins/org.eclipse.gmf.runtime.diagram.ui/src/org/eclipse/gmf/runtime/diagram/ui/handles/CompartmentCollapseHandle.java,v
retrieving revision 1.8.2.1
diff -u -r1.8.2.1 CompartmentCollapseHandle.java
--- src/org/eclipse/gmf/runtime/diagram/ui/handles/CompartmentCollapseHandle.java 13 Sep 2006 16:43:40 -0000 1.8.2.1
+++ src/org/eclipse/gmf/runtime/diagram/ui/handles/CompartmentCollapseHandle.java 18 Sep 2006 16:24:04 -0000
@@ -25,8 +25,8 @@
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gef.DragTracker;
import org.eclipse.gef.handles.AbstractHandle;
-import org.eclipse.gmf.runtime.diagram.core.listener.NotificationListener;
import org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBroker;
+import org.eclipse.gmf.runtime.diagram.core.listener.NotificationListener;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IResizableCompartmentEditPart;
import org.eclipse.gmf.runtime.diagram.ui.internal.figures.CollapseFigure;
@@ -50,10 +50,10 @@
*/
private class CollapseHandleLocator implements Locator {
public void relocate(IFigure target) {
- Rectangle theBounds = getOwnerFigure().getClientArea().getCopy();
+ Rectangle theBounds = getOwnerFigure().getClientArea().getCopy();
getOwnerFigure().translateToAbsolute(theBounds);
- target.translateToRelative(theBounds);
- target.setLocation(theBounds.getLocation());
+ target.translateToRelative(theBounds);
+ target.setLocation(theBounds.getLocation());
}
}
@@ -64,27 +64,36 @@
protected CollapseFigure collapseFigure = null;
/**
- * Creates a new Compartment Collapse Handle
- * @param owner
- */
- public CompartmentCollapseHandle(IGraphicalEditPart owner) {
- setOwner(owner);
- setLocator(new CollapseHandleLocator());
- setCursor(Cursors.ARROW);
-
- setSize(SIZE);
- setLayoutManager(new StackLayout());
- add(collapseFigure = new CollapseFigure());
- View view = owner.getNotationView();
- if (view!=null){
- DrawerStyle style = (DrawerStyle) view.getStyle(NotationPackage.eINSTANCE.getDrawerStyle());
- if (style != null){
- collapseFigure.setCollapsed(style.isCollapsed());
- return;
- }
- }
- collapseFigure.setCollapsed(false);
- }
+ * Creates a new Compartment Collapse Handle
+ *
+ * @param owner
+ */
+ public CompartmentCollapseHandle(IGraphicalEditPart owner) {
+ setOwner(owner);
+ setLocator(new CollapseHandleLocator());
+ setCursor(Cursors.ARROW);
+
+ setSize(SIZE);
+ setLayoutManager(new StackLayout());
+
+ if (owner != null && owner.getParent() != null
+ && owner.getParent() instanceof IGraphicalEditPart)
+ add(collapseFigure = new CollapseFigure(((IGraphicalEditPart) owner
+ .getParent()).getFigure()));
+ else
+ add(collapseFigure = new CollapseFigure());
+
+ View view = owner.getNotationView();
+ if (view != null) {
+ DrawerStyle style = (DrawerStyle) view
+ .getStyle(NotationPackage.eINSTANCE.getDrawerStyle());
+ if (style != null) {
+ collapseFigure.setCollapsed(style.isCollapsed());
+ return;
+ }
+ }
+ collapseFigure.setCollapsed(false);
+ }
/**
* @see org.eclipse.draw2d.IFigure#findFigureAt(int, int, TreeSearch)
Index: src/org/eclipse/gmf/runtime/diagram/ui/internal/figures/CollapseFigure.java
===================================================================
RCS file: /cvsroot/technology/org.eclipse.gmf/plugins/org.eclipse.gmf.runtime.diagram.ui/src/org/eclipse/gmf/runtime/diagram/ui/internal/figures/CollapseFigure.java,v
retrieving revision 1.4
diff -u -r1.4 CollapseFigure.java
--- src/org/eclipse/gmf/runtime/diagram/ui/internal/figures/CollapseFigure.java 25 Nov 2005 19:38:14 -0000 1.4
+++ src/org/eclipse/gmf/runtime/diagram/ui/internal/figures/CollapseFigure.java 18 Sep 2006 16:24:04 -0000
@@ -1,5 +1,5 @@
/******************************************************************************
- * Copyright (c) 2002, 2003 IBM Corporation and others.
+ * Copyright (c) 2002, 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
@@ -12,7 +12,9 @@
package org.eclipse.gmf.runtime.diagram.ui.internal.figures;
import org.eclipse.draw2d.Graphics;
+import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.RectangleFigure;
+import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gmf.runtime.diagram.ui.internal.l10n.DiagramUIPluginImages;
import org.eclipse.swt.graphics.Image;
@@ -25,10 +27,32 @@
public class CollapseFigure extends RectangleFigure {
private boolean collapsed = false;
+ private IFigure containerFigure = null;
+
+
+ /**
+ * Constrcuts an instance
+ */
+ public CollapseFigure() {
+ super();
+ }
+
+ /**
+ * Constrcuts an instance
+ *
+ * @param containerFigure
+ * containers's figure
+ */
+ public CollapseFigure(IFigure containerFigure) {
+ super();
+ this.containerFigure = containerFigure;
+ }
- /* (non-Javadoc)
- * @see org.eclipse.draw2d.Shape#fillShape(org.eclipse.draw2d.Graphics)
- */
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.draw2d.Shape#fillShape(org.eclipse.draw2d.Graphics)
+ */
protected void fillShape(Graphics graphics) {
Image img;
@@ -71,4 +95,27 @@
repaint();
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.draw2d.Figure#isVisible()
+ */
+ public boolean isVisible() {
+ boolean visibility = super.isVisible();
+ if (containerFigure != null) {
+ /*
+ * Try to hide the handle if it's to be drawn outside of the
+ * container edit part figure
+ */
+ Rectangle containerBounds = containerFigure.getClientArea()
+ .getCopy();
+ containerFigure.translateToAbsolute(containerBounds);
+ translateToRelative(containerBounds);
+ visibility &= containerBounds.contains(getBounds());
+ }
+ return visibility;
+ }
+
+
+
}
Index: src/org/eclipse/gmf/runtime/diagram/ui/editpolicies/ResizableCompartmentEditPolicy.java
===================================================================
RCS file: /cvsroot/technology/org.eclipse.gmf/plugins/org.eclipse.gmf.runtime.diagram.ui/src/org/eclipse/gmf/runtime/diagram/ui/editpolicies/ResizableCompartmentEditPolicy.java,v
retrieving revision 1.9.2.2
diff -u -r1.9.2.2 ResizableCompartmentEditPolicy.java
--- src/org/eclipse/gmf/runtime/diagram/ui/editpolicies/ResizableCompartmentEditPolicy.java 13 Sep 2006 16:43:39 -0000 1.9.2.2
+++ src/org/eclipse/gmf/runtime/diagram/ui/editpolicies/ResizableCompartmentEditPolicy.java 18 Sep 2006 16:24:04 -0000
@@ -13,26 +13,21 @@
import java.util.ArrayList;
import java.util.List;
-import java.util.ListIterator;
-import org.eclipse.draw2d.FigureListener;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.PositionConstants;
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.EditPartListener;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.requests.ChangeBoundsRequest;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.ResizableCompartmentEditPart;
-import org.eclipse.gmf.runtime.diagram.ui.editparts.TopGraphicEditPart;
import org.eclipse.gmf.runtime.diagram.ui.figures.BorderedNodeFigure;
import org.eclipse.gmf.runtime.diagram.ui.figures.ResizableCompartmentFigure;
import org.eclipse.gmf.runtime.diagram.ui.handles.CompartmentCollapseHandle;
import org.eclipse.gmf.runtime.diagram.ui.internal.handles.CompartmentResizeHandle;
-import org.eclipse.jface.util.Assert;
/**
* A resizable editpolicy for resizable compartments. The editpolicy could be
@@ -44,33 +39,7 @@
extends ResizableEditPolicyEx {
private boolean horizontal;
-
- /**
- * Listener to determine bounds changes of compartment figure and/or its container
- * to display or hide collapse handles accordingly (Bugzilla #115905)
- */
- private FigureListener figureListener = new FigureListener() {
- public void figureMoved(IFigure source) {
- if (handles != null) {
- ResizableCompartmentFigure compartment = getCompartmentFigure();
- Dimension minClientDimension = compartment.getMinClientDimension();
- if (source.equals(compartment))
- {
- Rectangle intersection = getGraphicalEditPart()
- .getTopGraphicEditPart().getFigure().getBounds().getCopy()
- .intersect(source.getBounds());
-
- refreshCollapseHandles(intersection.height>minClientDimension.height && intersection.width>minClientDimension.width);
- }
- else if (source.equals(getGraphicalEditPart().getTopGraphicEditPart().getFigure()))
- {
- Rectangle intersection = source.getBounds().getCopy().intersect(compartment.getBounds());
- refreshCollapseHandles(intersection.height>minClientDimension.height && intersection.width>minClientDimension.width);
- }
- }
- }
- };
-
+
/**
* Creates a new vertical ResizableCompartmentEditPolicy
*/
@@ -104,23 +73,10 @@
IGraphicalEditPart part = (IGraphicalEditPart) getHost();
List collapseHandles = new ArrayList();
-
- CompartmentCollapseHandle collapseHandle = new CompartmentCollapseHandle(part);
-
- TopGraphicEditPart wrapper = part.getTopGraphicEditPart();
- Rectangle intersection = null;
- ResizableCompartmentFigure compartment = getCompartmentFigure();
- if (wrapper != null && compartment != null)
- intersection = wrapper.getFigure().getBounds().getCopy().intersect(
- compartment.getBounds());
- collapseHandle.setVisible(intersection == null
- || (intersection.width > compartment.getMinClientDimension().width && intersection.height > compartment
- .getMinClientDimension().height));
-
- collapseHandles.add(collapseHandle);
+ collapseHandles.add(new CompartmentCollapseHandle(part));
return collapseHandles;
}
-
+
/**
* @see org.eclipse.gef.editpolicies.SelectionHandlesEditPolicy#createSelectionHandles()
*/
@@ -131,7 +87,6 @@
int d2 = isHorizontal() ? PositionConstants.EAST
: PositionConstants.SOUTH;
List selectionHandles = new ArrayList();
-
selectionHandles.addAll(createCollapseHandles());
selectionHandles.add(new CompartmentResizeHandle(part, d1));
selectionHandles.add(new CompartmentResizeHandle(part, d2));
@@ -172,16 +127,9 @@
*/
protected void showSelection() {
super.showSelection();
- IGraphicalEditPart part = getGraphicalEditPart();
- TopGraphicEditPart topPart = part.getTopGraphicEditPart();
- ResizableCompartmentFigure compartmentFigure = getCompartmentFigure();
- if (compartmentFigure != null) {
- if (topPart != null)
- {
- topPart.getFigure().addFigureListener(figureListener);
- compartmentFigure.addFigureListener(figureListener);
- }
- if (getHost().getSelected() != EditPart.SELECTED_NONE) {
+ if (getHost().getSelected() != EditPart.SELECTED_NONE) {
+ ResizableCompartmentFigure compartmentFigure = getCompartmentFigure();
+ if (compartmentFigure != null) {
compartmentFigure.setSelected(true);
}
}
@@ -192,22 +140,24 @@
*/
protected void hideSelection() {
super.hideSelection();
- IGraphicalEditPart part = getGraphicalEditPart();
- TopGraphicEditPart topPart = part.getTopGraphicEditPart();
- ResizableCompartmentFigure compartmentFigure = getCompartmentFigure();
- if (compartmentFigure != null) {
- if (topPart != null)
- {
- topPart.getFigure().removeFigureListener(figureListener);
- compartmentFigure.removeFigureListener(figureListener);
- }
- if (getHost().getSelected() == EditPart.SELECTED_NONE) {
+ if (getHost().getSelected() == EditPart.SELECTED_NONE) {
+ ResizableCompartmentFigure compartmentFigure = getCompartmentFigure();
+ if (compartmentFigure != null) {
compartmentFigure.setSelected(false);
}
}
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.gef.editpolicies.SelectionEditPolicy#activate()
+ */
+ public void activate() {
+ super.activate();
+ if (getHost().getParent().getSelected() != EditPart.SELECTED_NONE)
+ setSelectedState();
+ }
- private EditPartListener hostListener;
+ private EditPartListener hostListener;
private EditPartListener parentListener;
@@ -231,17 +181,9 @@
}
};
getParentGraphicEditPart().addEditPartListener(parentListener);
-
- }
- /* (non-Javadoc)
- * @see org.eclipse.gef.editpolicies.SelectionEditPolicy#activate()
- */
- public void activate() {
- super.activate();
- setSelectedState();
}
-
+
/**
* @see org.eclipse.gef.editpolicies.SelectionEditPolicy#removeSelectionListener()
*/
@@ -259,10 +201,8 @@
int hostState = getHost().getSelected();
int topState = EditPart.SELECTED_NONE;
- if (getGraphicalEditPart()
- .getTopGraphicEditPart() != null) {
- topState = getGraphicalEditPart()
- .getTopGraphicEditPart().getSelected();
+ if (getGraphicalEditPart().getTopGraphicEditPart() != null) {
+ topState = getGraphicalEditPart().getTopGraphicEditPart().getSelected();
}
boolean vis = getGraphicalEditPart().getNotationView().isVisible();
@@ -330,23 +270,4 @@
return req;
}
- /**
- * Refreshes collapse handles - displays them if they need to be displayed but not displaying
- * and removes them if they shouldn't be displayed, but are displayed.
- * Method assumes that handles are not null
, i.e. handles are being displayed
- *
- * @param shouldHaveHandles true
if collapse handles need to be displayed
- */
- private void refreshCollapseHandles(boolean shouldHaveHandles)
- {
- Assert.isTrue(handles!=null);
-
- for (ListIterator handlesIterator = handles.listIterator(); handlesIterator.hasNext();)
- {
- Object handle = handlesIterator.next();
- if (handle instanceof CompartmentCollapseHandle)
- ((CompartmentCollapseHandle)handle).setVisible(shouldHaveHandles);
- }
- }
-
}