View | Details | Raw Unified | Return to bug 115905 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/gmf/runtime/diagram/ui/handles/CompartmentCollapseHandle.java (-25 / +34 lines)
Lines 25-32 Link Here
25
import org.eclipse.emf.transaction.TransactionalEditingDomain;
25
import org.eclipse.emf.transaction.TransactionalEditingDomain;
26
import org.eclipse.gef.DragTracker;
26
import org.eclipse.gef.DragTracker;
27
import org.eclipse.gef.handles.AbstractHandle;
27
import org.eclipse.gef.handles.AbstractHandle;
28
import org.eclipse.gmf.runtime.diagram.core.listener.NotificationListener;
29
import org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBroker;
28
import org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBroker;
29
import org.eclipse.gmf.runtime.diagram.core.listener.NotificationListener;
30
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
30
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
31
import org.eclipse.gmf.runtime.diagram.ui.editparts.IResizableCompartmentEditPart;
31
import org.eclipse.gmf.runtime.diagram.ui.editparts.IResizableCompartmentEditPart;
32
import org.eclipse.gmf.runtime.diagram.ui.internal.figures.CollapseFigure;
32
import org.eclipse.gmf.runtime.diagram.ui.internal.figures.CollapseFigure;
Lines 50-59 Link Here
50
	 */
50
	 */
51
	private class CollapseHandleLocator implements Locator {
51
	private class CollapseHandleLocator implements Locator {
52
		public void relocate(IFigure target) {
52
		public void relocate(IFigure target) {
53
			Rectangle theBounds = getOwnerFigure().getClientArea().getCopy();
53
			Rectangle theBounds = getOwnerFigure().getClientArea().getCopy();          
54
			getOwnerFigure().translateToAbsolute(theBounds);
54
			getOwnerFigure().translateToAbsolute(theBounds);
55
			target.translateToRelative(theBounds);
55
            target.translateToRelative(theBounds);
56
			target.setLocation(theBounds.getLocation());
56
			target.setLocation(theBounds.getLocation());            
57
		}
57
		}
58
	}
58
	}
59
59
Lines 64-90 Link Here
64
	protected CollapseFigure collapseFigure = null;
64
	protected CollapseFigure collapseFigure = null;
65
65
66
	/**
66
	/**
67
	 * Creates a new Compartment Collapse Handle 
67
     * Creates a new Compartment Collapse Handle
68
	 * @param owner
68
     * 
69
	 */
69
     * @param owner
70
	public CompartmentCollapseHandle(IGraphicalEditPart owner) {
70
     */
71
		setOwner(owner);
71
    public CompartmentCollapseHandle(IGraphicalEditPart owner) {
72
		setLocator(new CollapseHandleLocator());
72
        setOwner(owner);
73
		setCursor(Cursors.ARROW);
73
        setLocator(new CollapseHandleLocator());
74
		
74
        setCursor(Cursors.ARROW);
75
		setSize(SIZE);
75
76
		setLayoutManager(new StackLayout());
76
        setSize(SIZE);
77
		add(collapseFigure = new CollapseFigure());
77
        setLayoutManager(new StackLayout());
78
		View view = owner.getNotationView();
78
79
		if (view!=null){
79
        if (owner != null && owner.getParent() != null
80
			DrawerStyle style = (DrawerStyle) view.getStyle(NotationPackage.eINSTANCE.getDrawerStyle());
80
            && owner.getParent() instanceof IGraphicalEditPart)
81
			if (style != null){
81
            add(collapseFigure = new CollapseFigure(((IGraphicalEditPart) owner
82
				collapseFigure.setCollapsed(style.isCollapsed());
82
                .getParent()).getFigure()));
83
				return;
83
        else
84
			}
84
            add(collapseFigure = new CollapseFigure());
85
		}
85
86
		collapseFigure.setCollapsed(false);
86
        View view = owner.getNotationView();
87
	}
87
        if (view != null) {
88
            DrawerStyle style = (DrawerStyle) view
89
                .getStyle(NotationPackage.eINSTANCE.getDrawerStyle());
90
            if (style != null) {
91
                collapseFigure.setCollapsed(style.isCollapsed());
92
                return;
93
            }
94
        }
95
        collapseFigure.setCollapsed(false);
96
    }
88
97
89
	/**
98
	/**
90
	 * @see org.eclipse.draw2d.IFigure#findFigureAt(int, int, TreeSearch)
99
	 * @see org.eclipse.draw2d.IFigure#findFigureAt(int, int, TreeSearch)
(-)src/org/eclipse/gmf/runtime/diagram/ui/internal/figures/CollapseFigure.java (-4 / +51 lines)
Lines 1-5 Link Here
1
/******************************************************************************
1
/******************************************************************************
2
 * Copyright (c) 2002, 2003 IBM Corporation and others.
2
 * Copyright (c) 2002, 2006 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
5
 * which accompanies this distribution, and is available at
Lines 12-18 Link Here
12
package org.eclipse.gmf.runtime.diagram.ui.internal.figures;
12
package org.eclipse.gmf.runtime.diagram.ui.internal.figures;
13
13
14
import org.eclipse.draw2d.Graphics;
14
import org.eclipse.draw2d.Graphics;
15
import org.eclipse.draw2d.IFigure;
15
import org.eclipse.draw2d.RectangleFigure;
16
import org.eclipse.draw2d.RectangleFigure;
17
import org.eclipse.draw2d.geometry.Rectangle;
16
import org.eclipse.gmf.runtime.diagram.ui.internal.l10n.DiagramUIPluginImages;
18
import org.eclipse.gmf.runtime.diagram.ui.internal.l10n.DiagramUIPluginImages;
17
import org.eclipse.swt.graphics.Image;
19
import org.eclipse.swt.graphics.Image;
18
20
Lines 25-34 Link Here
25
public class CollapseFigure extends RectangleFigure {
27
public class CollapseFigure extends RectangleFigure {
26
28
27
	private boolean collapsed = false;
29
	private boolean collapsed = false;
30
    private IFigure containerFigure = null;
31
    
32
33
    /**
34
     * Constrcuts an instance
35
     */
36
    public CollapseFigure() {
37
        super();
38
    }
39
40
    /**
41
     * Constrcuts an instance
42
     * 
43
     * @param containerFigure
44
     *            containers's figure
45
     */
46
    public CollapseFigure(IFigure containerFigure) {
47
        super();
48
        this.containerFigure = containerFigure;
49
    }
28
	
50
	
29
	/* (non-Javadoc)
51
	/*
30
	 * @see org.eclipse.draw2d.Shape#fillShape(org.eclipse.draw2d.Graphics)
52
     * (non-Javadoc)
31
	 */
53
     * 
54
     * @see org.eclipse.draw2d.Shape#fillShape(org.eclipse.draw2d.Graphics)
55
     */
32
	protected void fillShape(Graphics graphics) {
56
	protected void fillShape(Graphics graphics) {
33
		
57
		
34
		Image img;
58
		Image img;
Lines 71-74 Link Here
71
		repaint();
95
		repaint();
72
	}
96
	}
73
97
98
    /*
99
     * (non-Javadoc)
100
     * 
101
     * @see org.eclipse.draw2d.Figure#isVisible()
102
     */
103
    public boolean isVisible() {
104
        boolean visibility = super.isVisible();
105
        if (visibility && containerFigure != null) {
106
            /*
107
             * Try to hide the handle if it's to be drawn outside of the
108
             * container edit part figure
109
             */
110
            Rectangle containerBounds = containerFigure.getClientArea()
111
                .getCopy();
112
            containerFigure.translateToAbsolute(containerBounds);
113
            translateToRelative(containerBounds);
114
            return containerBounds.contains(getBounds());
115
        }
116
        return visibility;
117
    }
118
    
119
    
120
74
}
121
}
(-)src/org/eclipse/gmf/runtime/diagram/ui/editpolicies/ResizableCompartmentEditPolicy.java (-101 / +22 lines)
Lines 13-38 Link Here
13
13
14
import java.util.ArrayList;
14
import java.util.ArrayList;
15
import java.util.List;
15
import java.util.List;
16
import java.util.ListIterator;
17
16
18
import org.eclipse.draw2d.FigureListener;
19
import org.eclipse.draw2d.IFigure;
17
import org.eclipse.draw2d.IFigure;
20
import org.eclipse.draw2d.PositionConstants;
18
import org.eclipse.draw2d.PositionConstants;
21
import org.eclipse.draw2d.geometry.Dimension;
19
import org.eclipse.draw2d.geometry.Dimension;
22
import org.eclipse.draw2d.geometry.Point;
20
import org.eclipse.draw2d.geometry.Point;
23
import org.eclipse.draw2d.geometry.Rectangle;
24
import org.eclipse.gef.EditPart;
21
import org.eclipse.gef.EditPart;
25
import org.eclipse.gef.EditPartListener;
22
import org.eclipse.gef.EditPartListener;
26
import org.eclipse.gef.commands.Command;
23
import org.eclipse.gef.commands.Command;
27
import org.eclipse.gef.requests.ChangeBoundsRequest;
24
import org.eclipse.gef.requests.ChangeBoundsRequest;
28
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
25
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
29
import org.eclipse.gmf.runtime.diagram.ui.editparts.ResizableCompartmentEditPart;
26
import org.eclipse.gmf.runtime.diagram.ui.editparts.ResizableCompartmentEditPart;
30
import org.eclipse.gmf.runtime.diagram.ui.editparts.TopGraphicEditPart;
31
import org.eclipse.gmf.runtime.diagram.ui.figures.BorderedNodeFigure;
27
import org.eclipse.gmf.runtime.diagram.ui.figures.BorderedNodeFigure;
32
import org.eclipse.gmf.runtime.diagram.ui.figures.ResizableCompartmentFigure;
28
import org.eclipse.gmf.runtime.diagram.ui.figures.ResizableCompartmentFigure;
33
import org.eclipse.gmf.runtime.diagram.ui.handles.CompartmentCollapseHandle;
29
import org.eclipse.gmf.runtime.diagram.ui.handles.CompartmentCollapseHandle;
34
import org.eclipse.gmf.runtime.diagram.ui.internal.handles.CompartmentResizeHandle;
30
import org.eclipse.gmf.runtime.diagram.ui.internal.handles.CompartmentResizeHandle;
35
import org.eclipse.jface.util.Assert;
36
31
37
/**
32
/**
38
 * A resizable editpolicy for resizable compartments. The editpolicy could be
33
 * A resizable editpolicy for resizable compartments. The editpolicy could be
Lines 44-76 Link Here
44
	extends ResizableEditPolicyEx {
39
	extends ResizableEditPolicyEx {
45
40
46
	private boolean horizontal;
41
	private boolean horizontal;
47
	
42
48
	/**
49
	 * Listener to determine bounds changes of compartment figure and/or its container
50
	 * to display or hide collapse handles accordingly (Bugzilla #115905)
51
	 */
52
	private FigureListener figureListener = new FigureListener() {
53
		public void figureMoved(IFigure source) {
54
			if (handles != null) {
55
				ResizableCompartmentFigure compartment = getCompartmentFigure();
56
				Dimension minClientDimension = compartment.getMinClientDimension();
57
				if (source.equals(compartment))
58
				{
59
					Rectangle intersection = getGraphicalEditPart()
60
							.getTopGraphicEditPart().getFigure().getBounds().getCopy()
61
							.intersect(source.getBounds());
62
					
63
					refreshCollapseHandles(intersection.height>minClientDimension.height && intersection.width>minClientDimension.width);					
64
				}
65
				else if (source.equals(getGraphicalEditPart().getTopGraphicEditPart().getFigure()))
66
				{
67
					Rectangle intersection = source.getBounds().getCopy().intersect(compartment.getBounds());
68
					refreshCollapseHandles(intersection.height>minClientDimension.height && intersection.width>minClientDimension.width);
69
				}
70
			}
71
		}
72
	};
73
	
74
	/**
43
	/**
75
	 * Creates a new vertical ResizableCompartmentEditPolicy
44
	 * Creates a new vertical ResizableCompartmentEditPolicy
76
	 */
45
	 */
Lines 104-126 Link Here
104
		IGraphicalEditPart part = (IGraphicalEditPart) getHost();
73
		IGraphicalEditPart part = (IGraphicalEditPart) getHost();
105
74
106
		List collapseHandles = new ArrayList();
75
		List collapseHandles = new ArrayList();
107
		
76
		collapseHandles.add(new CompartmentCollapseHandle(part));
108
		CompartmentCollapseHandle collapseHandle = new CompartmentCollapseHandle(part);
109
		
110
		TopGraphicEditPart wrapper = part.getTopGraphicEditPart();
111
		Rectangle intersection = null;
112
		ResizableCompartmentFigure compartment = getCompartmentFigure();		
113
		if (wrapper != null && compartment != null)
114
			intersection = wrapper.getFigure().getBounds().getCopy().intersect(
115
					compartment.getBounds());
116
		collapseHandle.setVisible(intersection == null
117
				|| (intersection.width > compartment.getMinClientDimension().width && intersection.height > compartment
118
						.getMinClientDimension().height));
119
		
120
		collapseHandles.add(collapseHandle);
121
		return collapseHandles;
77
		return collapseHandles;
122
	}
78
	}
123
	
79
124
	/**
80
	/**
125
	 * @see org.eclipse.gef.editpolicies.SelectionHandlesEditPolicy#createSelectionHandles()
81
	 * @see org.eclipse.gef.editpolicies.SelectionHandlesEditPolicy#createSelectionHandles()
126
	 */
82
	 */
Lines 131-137 Link Here
131
		int d2 = isHorizontal() ? PositionConstants.EAST
87
		int d2 = isHorizontal() ? PositionConstants.EAST
132
			: PositionConstants.SOUTH;
88
			: PositionConstants.SOUTH;
133
		List selectionHandles = new ArrayList();
89
		List selectionHandles = new ArrayList();
134
		
135
		selectionHandles.addAll(createCollapseHandles());
90
		selectionHandles.addAll(createCollapseHandles());
136
		selectionHandles.add(new CompartmentResizeHandle(part, d1));
91
		selectionHandles.add(new CompartmentResizeHandle(part, d1));
137
		selectionHandles.add(new CompartmentResizeHandle(part, d2));
92
		selectionHandles.add(new CompartmentResizeHandle(part, d2));
Lines 172-187 Link Here
172
	 */
127
	 */
173
	protected void showSelection() {
128
	protected void showSelection() {
174
		super.showSelection();
129
		super.showSelection();
175
		IGraphicalEditPart part = getGraphicalEditPart();
130
		if (getHost().getSelected() != EditPart.SELECTED_NONE) {
176
		TopGraphicEditPart topPart = part.getTopGraphicEditPart();
131
			ResizableCompartmentFigure compartmentFigure = getCompartmentFigure();
177
		ResizableCompartmentFigure compartmentFigure = getCompartmentFigure();
132
			if (compartmentFigure != null) {
178
		if (compartmentFigure != null) {
179
			if (topPart != null)
180
			{
181
				topPart.getFigure().addFigureListener(figureListener);
182
				compartmentFigure.addFigureListener(figureListener);
183
			}
184
			if (getHost().getSelected() != EditPart.SELECTED_NONE) {
185
				compartmentFigure.setSelected(true);
133
				compartmentFigure.setSelected(true);
186
			}
134
			}
187
		}
135
		}
Lines 192-213 Link Here
192
	 */
140
	 */
193
	protected void hideSelection() {
141
	protected void hideSelection() {
194
		super.hideSelection();
142
		super.hideSelection();
195
		IGraphicalEditPart part = getGraphicalEditPart();
143
		if (getHost().getSelected() == EditPart.SELECTED_NONE) {
196
		TopGraphicEditPart topPart = part.getTopGraphicEditPart();
144
			ResizableCompartmentFigure compartmentFigure = getCompartmentFigure();
197
		ResizableCompartmentFigure compartmentFigure = getCompartmentFigure();
145
			if (compartmentFigure != null) {
198
		if (compartmentFigure != null) {
199
			if (topPart != null)
200
			{
201
				topPart.getFigure().removeFigureListener(figureListener);
202
				compartmentFigure.removeFigureListener(figureListener);
203
			}
204
			if (getHost().getSelected() == EditPart.SELECTED_NONE) {
205
				compartmentFigure.setSelected(false);
146
				compartmentFigure.setSelected(false);
206
			}
147
			}
207
		}
148
		}
208
	}
149
	}
150
    
151
    /* (non-Javadoc)
152
     * @see org.eclipse.gef.editpolicies.SelectionEditPolicy#activate()
153
     */
154
    public void activate() {
155
        super.activate();
156
        if (getHost().getParent().getSelected() != EditPart.SELECTED_NONE)
157
            setSelectedState();
158
    }
209
159
210
	private EditPartListener hostListener;
160
    private EditPartListener hostListener;
211
161
212
	private EditPartListener parentListener;
162
	private EditPartListener parentListener;
213
163
Lines 231-247 Link Here
231
			}
181
			}
232
		};
182
		};
233
		getParentGraphicEditPart().addEditPartListener(parentListener);
183
		getParentGraphicEditPart().addEditPartListener(parentListener);
234
				
235
	}
236
184
237
	/* (non-Javadoc)
238
	 * @see org.eclipse.gef.editpolicies.SelectionEditPolicy#activate()
239
	 */
240
	public void activate() {
241
		super.activate();
242
		setSelectedState();
243
	}
185
	}
244
	
186
245
	/**
187
	/**
246
	 * @see org.eclipse.gef.editpolicies.SelectionEditPolicy#removeSelectionListener()
188
	 * @see org.eclipse.gef.editpolicies.SelectionEditPolicy#removeSelectionListener()
247
	 */
189
	 */
Lines 259-268 Link Here
259
		int hostState = getHost().getSelected();
201
		int hostState = getHost().getSelected();
260
		int topState = EditPart.SELECTED_NONE;
202
		int topState = EditPart.SELECTED_NONE;
261
203
262
		if (getGraphicalEditPart()
204
		if (getGraphicalEditPart().getTopGraphicEditPart() != null) {
263
			.getTopGraphicEditPart() != null) {
205
			topState = getGraphicalEditPart().getTopGraphicEditPart().getSelected();
264
			topState = getGraphicalEditPart()
265
				.getTopGraphicEditPart().getSelected();
266
		}
206
		}
267
207
268
		boolean vis = getGraphicalEditPart().getNotationView().isVisible();
208
		boolean vis = getGraphicalEditPart().getNotationView().isVisible();
Lines 330-352 Link Here
330
		return req;
270
		return req;
331
	}
271
	}
332
	
272
	
333
    /**
334
     * Refreshes collapse handles - displays them if they need to be displayed but not displaying
335
     * and removes them if they shouldn't be displayed, but are displayed.
336
     * Method assumes that handles are not <code>null</code>, i.e. handles are being displayed
337
     *  
338
     * @param shouldHaveHandles <code>true</code> if collapse handles need to be displayed 
339
     */
340
    private void refreshCollapseHandles(boolean shouldHaveHandles)
341
    {
342
    	Assert.isTrue(handles!=null);
343
344
    	for (ListIterator handlesIterator = handles.listIterator(); handlesIterator.hasNext();)
345
		{
346
    		Object handle = handlesIterator.next();
347
			if (handle instanceof CompartmentCollapseHandle)
348
				((CompartmentCollapseHandle)handle).setVisible(shouldHaveHandles);
349
		}
350
    }
351
        
352
}
273
}

Return to bug 115905