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 |
} |