Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/widgets/graphicsview/qgraphicsanchorlayout_p.cpp |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||||||||||||||
2 | - | |||||||||||||||||||||||||
3 | - | |||||||||||||||||||||||||
4 | - | |||||||||||||||||||||||||
5 | - | |||||||||||||||||||||||||
6 | - | |||||||||||||||||||||||||
7 | - | |||||||||||||||||||||||||
8 | - | |||||||||||||||||||||||||
9 | - | |||||||||||||||||||||||||
10 | - | |||||||||||||||||||||||||
11 | - | |||||||||||||||||||||||||
12 | - | |||||||||||||||||||||||||
13 | - | |||||||||||||||||||||||||
14 | - | |||||||||||||||||||||||||
15 | - | |||||||||||||||||||||||||
16 | - | |||||||||||||||||||||||||
17 | const qreal g_offset = (sizeof(qreal) == sizeof(double)) ? ((1<<24)-1) : ((1<<24)-1) / 32; | - | ||||||||||||||||||||||||
18 | - | |||||||||||||||||||||||||
19 | QGraphicsAnchorPrivate::QGraphicsAnchorPrivate(int version) | - | ||||||||||||||||||||||||
20 | : QObjectPrivate(version), layoutPrivate(0), data(0), | - | ||||||||||||||||||||||||
21 | sizePolicy(QSizePolicy::Fixed), preferredSize(0), | - | ||||||||||||||||||||||||
22 | hasSize(true) | - | ||||||||||||||||||||||||
23 | { | - | ||||||||||||||||||||||||
24 | } never executed: end of block | 0 | ||||||||||||||||||||||||
25 | - | |||||||||||||||||||||||||
26 | QGraphicsAnchorPrivate::~QGraphicsAnchorPrivate() | - | ||||||||||||||||||||||||
27 | { | - | ||||||||||||||||||||||||
28 | if (data
| 0 | ||||||||||||||||||||||||
29 | - | |||||||||||||||||||||||||
30 | - | |||||||||||||||||||||||||
31 | data->graphicsAnchor = 0; | - | ||||||||||||||||||||||||
32 | - | |||||||||||||||||||||||||
33 | layoutPrivate->removeAnchor(data->from, data->to); | - | ||||||||||||||||||||||||
34 | } never executed: end of block | 0 | ||||||||||||||||||||||||
35 | } never executed: end of block | 0 | ||||||||||||||||||||||||
36 | - | |||||||||||||||||||||||||
37 | void QGraphicsAnchorPrivate::setSizePolicy(QSizePolicy::Policy policy) | - | ||||||||||||||||||||||||
38 | { | - | ||||||||||||||||||||||||
39 | if (sizePolicy != policy
| 0 | ||||||||||||||||||||||||
40 | sizePolicy = policy; | - | ||||||||||||||||||||||||
41 | layoutPrivate->q_func()->invalidate(); | - | ||||||||||||||||||||||||
42 | } never executed: end of block | 0 | ||||||||||||||||||||||||
43 | } never executed: end of block | 0 | ||||||||||||||||||||||||
44 | - | |||||||||||||||||||||||||
45 | void QGraphicsAnchorPrivate::setSpacing(qreal value) | - | ||||||||||||||||||||||||
46 | { | - | ||||||||||||||||||||||||
47 | if (!data
| 0 | ||||||||||||||||||||||||
48 | QMessageLogger(__FILE__, 93, __PRETTY_FUNCTION__).warning("QGraphicsAnchor::setSpacing: The anchor does not exist."); | - | ||||||||||||||||||||||||
49 | return; never executed: return; | 0 | ||||||||||||||||||||||||
50 | } | - | ||||||||||||||||||||||||
51 | - | |||||||||||||||||||||||||
52 | if (hasSize
| 0 | ||||||||||||||||||||||||
53 | return; never executed: return; | 0 | ||||||||||||||||||||||||
54 | - | |||||||||||||||||||||||||
55 | - | |||||||||||||||||||||||||
56 | hasSize = true; | - | ||||||||||||||||||||||||
57 | preferredSize = value; | - | ||||||||||||||||||||||||
58 | - | |||||||||||||||||||||||||
59 | layoutPrivate->q_func()->invalidate(); | - | ||||||||||||||||||||||||
60 | } never executed: end of block | 0 | ||||||||||||||||||||||||
61 | - | |||||||||||||||||||||||||
62 | void QGraphicsAnchorPrivate::unsetSpacing() | - | ||||||||||||||||||||||||
63 | { | - | ||||||||||||||||||||||||
64 | if (!data
| 0 | ||||||||||||||||||||||||
65 | QMessageLogger(__FILE__, 110, __PRETTY_FUNCTION__).warning("QGraphicsAnchor::setSpacing: The anchor does not exist."); | - | ||||||||||||||||||||||||
66 | return; never executed: return; | 0 | ||||||||||||||||||||||||
67 | } | - | ||||||||||||||||||||||||
68 | - | |||||||||||||||||||||||||
69 | - | |||||||||||||||||||||||||
70 | hasSize = false; | - | ||||||||||||||||||||||||
71 | - | |||||||||||||||||||||||||
72 | layoutPrivate->q_func()->invalidate(); | - | ||||||||||||||||||||||||
73 | } never executed: end of block | 0 | ||||||||||||||||||||||||
74 | - | |||||||||||||||||||||||||
75 | qreal QGraphicsAnchorPrivate::spacing() const | - | ||||||||||||||||||||||||
76 | { | - | ||||||||||||||||||||||||
77 | if (!data
| 0 | ||||||||||||||||||||||||
78 | QMessageLogger(__FILE__, 123, __PRETTY_FUNCTION__).warning("QGraphicsAnchor::setSpacing: The anchor does not exist."); | - | ||||||||||||||||||||||||
79 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
80 | } | - | ||||||||||||||||||||||||
81 | - | |||||||||||||||||||||||||
82 | return never executed: preferredSize;return preferredSize; never executed: return preferredSize; | 0 | ||||||||||||||||||||||||
83 | } | - | ||||||||||||||||||||||||
84 | - | |||||||||||||||||||||||||
85 | - | |||||||||||||||||||||||||
86 | static void applySizePolicy(QSizePolicy::Policy policy, | - | ||||||||||||||||||||||||
87 | qreal minSizeHint, qreal prefSizeHint, qreal maxSizeHint, | - | ||||||||||||||||||||||||
88 | qreal *minSize, qreal *prefSize, | - | ||||||||||||||||||||||||
89 | qreal *maxSize) | - | ||||||||||||||||||||||||
90 | { | - | ||||||||||||||||||||||||
91 | if (policy & QSizePolicy::ShrinkFlag
| 0 | ||||||||||||||||||||||||
92 | * never executed: minSize = minSizeHint;*minSize = minSizeHint; never executed: *minSize = minSizeHint; | 0 | ||||||||||||||||||||||||
93 | else | - | ||||||||||||||||||||||||
94 | * never executed: minSize = prefSizeHint;*minSize = prefSizeHint; never executed: *minSize = prefSizeHint; | 0 | ||||||||||||||||||||||||
95 | - | |||||||||||||||||||||||||
96 | if (policy & QSizePolicy::GrowFlag
| 0 | ||||||||||||||||||||||||
97 | * never executed: maxSize = maxSizeHint;*maxSize = maxSizeHint; never executed: *maxSize = maxSizeHint; | 0 | ||||||||||||||||||||||||
98 | else | - | ||||||||||||||||||||||||
99 | * never executed: maxSize = prefSizeHint;*maxSize = prefSizeHint; never executed: *maxSize = prefSizeHint; | 0 | ||||||||||||||||||||||||
100 | - | |||||||||||||||||||||||||
101 | - | |||||||||||||||||||||||||
102 | if (policy & QSizePolicy::IgnoreFlag
| 0 | ||||||||||||||||||||||||
103 | * never executed: prefSize = *minSize;*prefSize = *minSize; never executed: *prefSize = *minSize; | 0 | ||||||||||||||||||||||||
104 | else | - | ||||||||||||||||||||||||
105 | * never executed: prefSize = prefSizeHint;*prefSize = prefSizeHint; never executed: *prefSize = prefSizeHint; | 0 | ||||||||||||||||||||||||
106 | } | - | ||||||||||||||||||||||||
107 | - | |||||||||||||||||||||||||
108 | AnchorData::~AnchorData() | - | ||||||||||||||||||||||||
109 | { | - | ||||||||||||||||||||||||
110 | if (graphicsAnchor
| 0 | ||||||||||||||||||||||||
111 | - | |||||||||||||||||||||||||
112 | - | |||||||||||||||||||||||||
113 | graphicsAnchor->d_func()->data = 0; | - | ||||||||||||||||||||||||
114 | - | |||||||||||||||||||||||||
115 | delete graphicsAnchor; | - | ||||||||||||||||||||||||
116 | } never executed: end of block | 0 | ||||||||||||||||||||||||
117 | } never executed: end of block | 0 | ||||||||||||||||||||||||
118 | - | |||||||||||||||||||||||||
119 | - | |||||||||||||||||||||||||
120 | void AnchorData::refreshSizeHints(const QLayoutStyleInfo *styleInfo) | - | ||||||||||||||||||||||||
121 | { | - | ||||||||||||||||||||||||
122 | QSizePolicy::Policy policy; | - | ||||||||||||||||||||||||
123 | qreal minSizeHint; | - | ||||||||||||||||||||||||
124 | qreal prefSizeHint; | - | ||||||||||||||||||||||||
125 | qreal maxSizeHint; | - | ||||||||||||||||||||||||
126 | - | |||||||||||||||||||||||||
127 | if (item
| 0 | ||||||||||||||||||||||||
128 | - | |||||||||||||||||||||||||
129 | if (isLayoutAnchor
| 0 | ||||||||||||||||||||||||
130 | minSize = 0; | - | ||||||||||||||||||||||||
131 | prefSize = 0; | - | ||||||||||||||||||||||||
132 | maxSize = ((1<<24)-1); | - | ||||||||||||||||||||||||
133 | if (isCenterAnchor
| 0 | ||||||||||||||||||||||||
134 | maxSize /= 2; never executed: maxSize /= 2; | 0 | ||||||||||||||||||||||||
135 | - | |||||||||||||||||||||||||
136 | minPrefSize = prefSize; | - | ||||||||||||||||||||||||
137 | maxPrefSize = maxSize; | - | ||||||||||||||||||||||||
138 | return; never executed: return; | 0 | ||||||||||||||||||||||||
139 | } else { | - | ||||||||||||||||||||||||
140 | if (orientation == QGraphicsAnchorLayoutPrivate::Horizontal
| 0 | ||||||||||||||||||||||||
141 | policy = item->sizePolicy().horizontalPolicy(); | - | ||||||||||||||||||||||||
142 | minSizeHint = item->effectiveSizeHint(Qt::MinimumSize).width(); | - | ||||||||||||||||||||||||
143 | prefSizeHint = item->effectiveSizeHint(Qt::PreferredSize).width(); | - | ||||||||||||||||||||||||
144 | maxSizeHint = item->effectiveSizeHint(Qt::MaximumSize).width(); | - | ||||||||||||||||||||||||
145 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
146 | policy = item->sizePolicy().verticalPolicy(); | - | ||||||||||||||||||||||||
147 | minSizeHint = item->effectiveSizeHint(Qt::MinimumSize).height(); | - | ||||||||||||||||||||||||
148 | prefSizeHint = item->effectiveSizeHint(Qt::PreferredSize).height(); | - | ||||||||||||||||||||||||
149 | maxSizeHint = item->effectiveSizeHint(Qt::MaximumSize).height(); | - | ||||||||||||||||||||||||
150 | } never executed: end of block | 0 | ||||||||||||||||||||||||
151 | - | |||||||||||||||||||||||||
152 | if (isCenterAnchor
| 0 | ||||||||||||||||||||||||
153 | minSizeHint /= 2; | - | ||||||||||||||||||||||||
154 | prefSizeHint /= 2; | - | ||||||||||||||||||||||||
155 | maxSizeHint /= 2; | - | ||||||||||||||||||||||||
156 | } never executed: end of block | 0 | ||||||||||||||||||||||||
157 | } never executed: end of block | 0 | ||||||||||||||||||||||||
158 | } else { | - | ||||||||||||||||||||||||
159 | - | |||||||||||||||||||||||||
160 | ((!(graphicsAnchor)) ? qt_assert("graphicsAnchor",__FILE__,218) : qt_noop()); | - | ||||||||||||||||||||||||
161 | QGraphicsAnchorPrivate *anchorPrivate = graphicsAnchor->d_func(); | - | ||||||||||||||||||||||||
162 | - | |||||||||||||||||||||||||
163 | - | |||||||||||||||||||||||||
164 | policy = anchorPrivate->sizePolicy; | - | ||||||||||||||||||||||||
165 | minSizeHint = 0; | - | ||||||||||||||||||||||||
166 | maxSizeHint = ((1<<24)-1); | - | ||||||||||||||||||||||||
167 | - | |||||||||||||||||||||||||
168 | - | |||||||||||||||||||||||||
169 | if (anchorPrivate->hasSize
| 0 | ||||||||||||||||||||||||
170 | - | |||||||||||||||||||||||||
171 | prefSizeHint = anchorPrivate->preferredSize; | - | ||||||||||||||||||||||||
172 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
173 | - | |||||||||||||||||||||||||
174 | const Qt::Orientation orient = Qt::Orientation(QGraphicsAnchorLayoutPrivate::edgeOrientation(from->m_edge) + 1); | - | ||||||||||||||||||||||||
175 | qreal s = styleInfo->defaultSpacing(orient); | - | ||||||||||||||||||||||||
176 | if (s < 0
| 0 | ||||||||||||||||||||||||
177 | QSizePolicy::ControlType controlTypeFrom = from->m_item->sizePolicy().controlType(); | - | ||||||||||||||||||||||||
178 | QSizePolicy::ControlType controlTypeTo = to->m_item->sizePolicy().controlType(); | - | ||||||||||||||||||||||||
179 | s = styleInfo->perItemSpacing(controlTypeFrom, controlTypeTo, orient); | - | ||||||||||||||||||||||||
180 | - | |||||||||||||||||||||||||
181 | - | |||||||||||||||||||||||||
182 | - | |||||||||||||||||||||||||
183 | - | |||||||||||||||||||||||||
184 | if (s < 0
| 0 | ||||||||||||||||||||||||
185 | s = 0; never executed: s = 0; | 0 | ||||||||||||||||||||||||
186 | } never executed: end of block | 0 | ||||||||||||||||||||||||
187 | prefSizeHint = s; | - | ||||||||||||||||||||||||
188 | } never executed: end of block | 0 | ||||||||||||||||||||||||
189 | } | - | ||||||||||||||||||||||||
190 | - | |||||||||||||||||||||||||
191 | - | |||||||||||||||||||||||||
192 | applySizePolicy(policy, minSizeHint, prefSizeHint, maxSizeHint, | - | ||||||||||||||||||||||||
193 | &minSize, &prefSize, &maxSize); | - | ||||||||||||||||||||||||
194 | - | |||||||||||||||||||||||||
195 | minPrefSize = prefSize; | - | ||||||||||||||||||||||||
196 | maxPrefSize = maxSize; | - | ||||||||||||||||||||||||
197 | sizeAtMinimum = prefSize; | - | ||||||||||||||||||||||||
198 | sizeAtPreferred = prefSize; | - | ||||||||||||||||||||||||
199 | sizeAtMaximum = prefSize; | - | ||||||||||||||||||||||||
200 | } never executed: end of block | 0 | ||||||||||||||||||||||||
201 | - | |||||||||||||||||||||||||
202 | void ParallelAnchorData::updateChildrenSizes() | - | ||||||||||||||||||||||||
203 | { | - | ||||||||||||||||||||||||
204 | firstEdge->sizeAtMinimum = sizeAtMinimum; | - | ||||||||||||||||||||||||
205 | firstEdge->sizeAtPreferred = sizeAtPreferred; | - | ||||||||||||||||||||||||
206 | firstEdge->sizeAtMaximum = sizeAtMaximum; | - | ||||||||||||||||||||||||
207 | - | |||||||||||||||||||||||||
208 | if (secondForward()
| 0 | ||||||||||||||||||||||||
209 | secondEdge->sizeAtMinimum = sizeAtMinimum; | - | ||||||||||||||||||||||||
210 | secondEdge->sizeAtPreferred = sizeAtPreferred; | - | ||||||||||||||||||||||||
211 | secondEdge->sizeAtMaximum = sizeAtMaximum; | - | ||||||||||||||||||||||||
212 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
213 | secondEdge->sizeAtMinimum = -sizeAtMinimum; | - | ||||||||||||||||||||||||
214 | secondEdge->sizeAtPreferred = -sizeAtPreferred; | - | ||||||||||||||||||||||||
215 | secondEdge->sizeAtMaximum = -sizeAtMaximum; | - | ||||||||||||||||||||||||
216 | } never executed: end of block | 0 | ||||||||||||||||||||||||
217 | - | |||||||||||||||||||||||||
218 | firstEdge->updateChildrenSizes(); | - | ||||||||||||||||||||||||
219 | secondEdge->updateChildrenSizes(); | - | ||||||||||||||||||||||||
220 | } never executed: end of block | 0 | ||||||||||||||||||||||||
221 | bool ParallelAnchorData::calculateSizeHints() | - | ||||||||||||||||||||||||
222 | { | - | ||||||||||||||||||||||||
223 | - | |||||||||||||||||||||||||
224 | - | |||||||||||||||||||||||||
225 | - | |||||||||||||||||||||||||
226 | qreal secondMin; | - | ||||||||||||||||||||||||
227 | qreal secondMinPref; | - | ||||||||||||||||||||||||
228 | qreal secondPref; | - | ||||||||||||||||||||||||
229 | qreal secondMaxPref; | - | ||||||||||||||||||||||||
230 | qreal secondMax; | - | ||||||||||||||||||||||||
231 | - | |||||||||||||||||||||||||
232 | if (secondForward()
| 0 | ||||||||||||||||||||||||
233 | secondMin = secondEdge->minSize; | - | ||||||||||||||||||||||||
234 | secondMinPref = secondEdge->minPrefSize; | - | ||||||||||||||||||||||||
235 | secondPref = secondEdge->prefSize; | - | ||||||||||||||||||||||||
236 | secondMaxPref = secondEdge->maxPrefSize; | - | ||||||||||||||||||||||||
237 | secondMax = secondEdge->maxSize; | - | ||||||||||||||||||||||||
238 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
239 | secondMin = -secondEdge->maxSize; | - | ||||||||||||||||||||||||
240 | secondMinPref = -secondEdge->maxPrefSize; | - | ||||||||||||||||||||||||
241 | secondPref = -secondEdge->prefSize; | - | ||||||||||||||||||||||||
242 | secondMaxPref = -secondEdge->minPrefSize; | - | ||||||||||||||||||||||||
243 | secondMax = -secondEdge->minSize; | - | ||||||||||||||||||||||||
244 | } never executed: end of block | 0 | ||||||||||||||||||||||||
245 | - | |||||||||||||||||||||||||
246 | minSize = qMax(firstEdge->minSize, secondMin); | - | ||||||||||||||||||||||||
247 | maxSize = qMin(firstEdge->maxSize, secondMax); | - | ||||||||||||||||||||||||
248 | - | |||||||||||||||||||||||||
249 | - | |||||||||||||||||||||||||
250 | - | |||||||||||||||||||||||||
251 | - | |||||||||||||||||||||||||
252 | if (minSize > maxSize
| 0 | ||||||||||||||||||||||||
253 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
254 | } | - | ||||||||||||||||||||||||
255 | if (firstEdge->isLayoutAnchor
| 0 | ||||||||||||||||||||||||
256 | prefSize = qBound(minSize, secondPref, maxSize); | - | ||||||||||||||||||||||||
257 | minPrefSize = qBound(minSize, secondMinPref, maxSize); | - | ||||||||||||||||||||||||
258 | maxPrefSize = qBound(minSize, secondMaxPref, maxSize); | - | ||||||||||||||||||||||||
259 | } never executed: else if (secondEdge->isLayoutAnchorend of block
| 0 | ||||||||||||||||||||||||
260 | prefSize = qBound(minSize, firstEdge->prefSize, maxSize); | - | ||||||||||||||||||||||||
261 | minPrefSize = qBound(minSize, firstEdge->minPrefSize, maxSize); | - | ||||||||||||||||||||||||
262 | maxPrefSize = qBound(minSize, firstEdge->maxPrefSize, maxSize); | - | ||||||||||||||||||||||||
263 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
264 | - | |||||||||||||||||||||||||
265 | const qreal lowerBoundary = | - | ||||||||||||||||||||||||
266 | qBound(minSize, qMax(firstEdge->minPrefSize, secondMinPref), maxSize); | - | ||||||||||||||||||||||||
267 | const qreal upperBoundary = | - | ||||||||||||||||||||||||
268 | qBound(minSize, qMin(firstEdge->maxPrefSize, secondMaxPref), maxSize); | - | ||||||||||||||||||||||||
269 | const qreal prefMean = | - | ||||||||||||||||||||||||
270 | qBound(minSize, (firstEdge->prefSize + secondPref) / 2, maxSize); | - | ||||||||||||||||||||||||
271 | - | |||||||||||||||||||||||||
272 | if (lowerBoundary < upperBoundary
| 0 | ||||||||||||||||||||||||
273 | - | |||||||||||||||||||||||||
274 | - | |||||||||||||||||||||||||
275 | - | |||||||||||||||||||||||||
276 | - | |||||||||||||||||||||||||
277 | prefSize = qBound(lowerBoundary, prefMean, upperBoundary); | - | ||||||||||||||||||||||||
278 | minPrefSize = lowerBoundary; | - | ||||||||||||||||||||||||
279 | maxPrefSize = upperBoundary; | - | ||||||||||||||||||||||||
280 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
281 | - | |||||||||||||||||||||||||
282 | - | |||||||||||||||||||||||||
283 | - | |||||||||||||||||||||||||
284 | - | |||||||||||||||||||||||||
285 | - | |||||||||||||||||||||||||
286 | - | |||||||||||||||||||||||||
287 | prefSize = qBound(upperBoundary, prefMean, lowerBoundary); | - | ||||||||||||||||||||||||
288 | minPrefSize = upperBoundary; | - | ||||||||||||||||||||||||
289 | maxPrefSize = lowerBoundary; | - | ||||||||||||||||||||||||
290 | } never executed: end of block | 0 | ||||||||||||||||||||||||
291 | } | - | ||||||||||||||||||||||||
292 | - | |||||||||||||||||||||||||
293 | - | |||||||||||||||||||||||||
294 | sizeAtMinimum = prefSize; | - | ||||||||||||||||||||||||
295 | sizeAtPreferred = prefSize; | - | ||||||||||||||||||||||||
296 | sizeAtMaximum = prefSize; | - | ||||||||||||||||||||||||
297 | - | |||||||||||||||||||||||||
298 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
299 | } | - | ||||||||||||||||||||||||
300 | static QPair<QGraphicsAnchorLayoutPrivate::Interval, qreal> getFactor(qreal value, qreal min, | - | ||||||||||||||||||||||||
301 | qreal minPref, qreal pref, | - | ||||||||||||||||||||||||
302 | qreal maxPref, qreal max) | - | ||||||||||||||||||||||||
303 | { | - | ||||||||||||||||||||||||
304 | QGraphicsAnchorLayoutPrivate::Interval interval; | - | ||||||||||||||||||||||||
305 | qreal lower; | - | ||||||||||||||||||||||||
306 | qreal upper; | - | ||||||||||||||||||||||||
307 | - | |||||||||||||||||||||||||
308 | if (value < minPref
| 0 | ||||||||||||||||||||||||
309 | interval = QGraphicsAnchorLayoutPrivate::MinimumToMinPreferred; | - | ||||||||||||||||||||||||
310 | lower = min; | - | ||||||||||||||||||||||||
311 | upper = minPref; | - | ||||||||||||||||||||||||
312 | } never executed: else if (value < prefend of block
| 0 | ||||||||||||||||||||||||
313 | interval = QGraphicsAnchorLayoutPrivate::MinPreferredToPreferred; | - | ||||||||||||||||||||||||
314 | lower = minPref; | - | ||||||||||||||||||||||||
315 | upper = pref; | - | ||||||||||||||||||||||||
316 | } never executed: else if (value < maxPrefend of block
| 0 | ||||||||||||||||||||||||
317 | interval = QGraphicsAnchorLayoutPrivate::PreferredToMaxPreferred; | - | ||||||||||||||||||||||||
318 | lower = pref; | - | ||||||||||||||||||||||||
319 | upper = maxPref; | - | ||||||||||||||||||||||||
320 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
321 | interval = QGraphicsAnchorLayoutPrivate::MaxPreferredToMaximum; | - | ||||||||||||||||||||||||
322 | lower = maxPref; | - | ||||||||||||||||||||||||
323 | upper = max; | - | ||||||||||||||||||||||||
324 | } never executed: end of block | 0 | ||||||||||||||||||||||||
325 | - | |||||||||||||||||||||||||
326 | qreal progress; | - | ||||||||||||||||||||||||
327 | if (upper == lower
| 0 | ||||||||||||||||||||||||
328 | progress = 0; | - | ||||||||||||||||||||||||
329 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
330 | progress = (value - lower) / (upper - lower); | - | ||||||||||||||||||||||||
331 | } never executed: end of block | 0 | ||||||||||||||||||||||||
332 | - | |||||||||||||||||||||||||
333 | return never executed: qMakePair(interval, progress);return qMakePair(interval, progress); never executed: return qMakePair(interval, progress); | 0 | ||||||||||||||||||||||||
334 | } | - | ||||||||||||||||||||||||
335 | - | |||||||||||||||||||||||||
336 | static qreal interpolate(const QPair<QGraphicsAnchorLayoutPrivate::Interval, qreal> &factor, | - | ||||||||||||||||||||||||
337 | qreal min, qreal minPref, qreal pref, qreal maxPref, qreal max) | - | ||||||||||||||||||||||||
338 | { | - | ||||||||||||||||||||||||
339 | qreal lower = 0; | - | ||||||||||||||||||||||||
340 | qreal upper = 0; | - | ||||||||||||||||||||||||
341 | - | |||||||||||||||||||||||||
342 | switch (factor.first) { | - | ||||||||||||||||||||||||
343 | case never executed: QGraphicsAnchorLayoutPrivate::MinimumToMinPreferred:case QGraphicsAnchorLayoutPrivate::MinimumToMinPreferred: never executed: case QGraphicsAnchorLayoutPrivate::MinimumToMinPreferred: | 0 | ||||||||||||||||||||||||
344 | lower = min; | - | ||||||||||||||||||||||||
345 | upper = minPref; | - | ||||||||||||||||||||||||
346 | break; never executed: break; | 0 | ||||||||||||||||||||||||
347 | case never executed: QGraphicsAnchorLayoutPrivate::MinPreferredToPreferred:case QGraphicsAnchorLayoutPrivate::MinPreferredToPreferred: never executed: case QGraphicsAnchorLayoutPrivate::MinPreferredToPreferred: | 0 | ||||||||||||||||||||||||
348 | lower = minPref; | - | ||||||||||||||||||||||||
349 | upper = pref; | - | ||||||||||||||||||||||||
350 | break; never executed: break; | 0 | ||||||||||||||||||||||||
351 | case never executed: QGraphicsAnchorLayoutPrivate::PreferredToMaxPreferred:case QGraphicsAnchorLayoutPrivate::PreferredToMaxPreferred: never executed: case QGraphicsAnchorLayoutPrivate::PreferredToMaxPreferred: | 0 | ||||||||||||||||||||||||
352 | lower = pref; | - | ||||||||||||||||||||||||
353 | upper = maxPref; | - | ||||||||||||||||||||||||
354 | break; never executed: break; | 0 | ||||||||||||||||||||||||
355 | case never executed: QGraphicsAnchorLayoutPrivate::MaxPreferredToMaximum:case QGraphicsAnchorLayoutPrivate::MaxPreferredToMaximum: never executed: case QGraphicsAnchorLayoutPrivate::MaxPreferredToMaximum: | 0 | ||||||||||||||||||||||||
356 | lower = maxPref; | - | ||||||||||||||||||||||||
357 | upper = max; | - | ||||||||||||||||||||||||
358 | break; never executed: break; | 0 | ||||||||||||||||||||||||
359 | } | - | ||||||||||||||||||||||||
360 | - | |||||||||||||||||||||||||
361 | return never executed: lower + factor.second * (upper - lower);return lower + factor.second * (upper - lower); never executed: return lower + factor.second * (upper - lower); | 0 | ||||||||||||||||||||||||
362 | } | - | ||||||||||||||||||||||||
363 | - | |||||||||||||||||||||||||
364 | void SequentialAnchorData::updateChildrenSizes() | - | ||||||||||||||||||||||||
365 | { | - | ||||||||||||||||||||||||
366 | - | |||||||||||||||||||||||||
367 | - | |||||||||||||||||||||||||
368 | - | |||||||||||||||||||||||||
369 | const QPair<QGraphicsAnchorLayoutPrivate::Interval, qreal> minFactor = | - | ||||||||||||||||||||||||
370 | getFactor(sizeAtMinimum, minSize, minPrefSize, prefSize, maxPrefSize, maxSize); | - | ||||||||||||||||||||||||
371 | const QPair<QGraphicsAnchorLayoutPrivate::Interval, qreal> prefFactor = | - | ||||||||||||||||||||||||
372 | getFactor(sizeAtPreferred, minSize, minPrefSize, prefSize, maxPrefSize, maxSize); | - | ||||||||||||||||||||||||
373 | const QPair<QGraphicsAnchorLayoutPrivate::Interval, qreal> maxFactor = | - | ||||||||||||||||||||||||
374 | getFactor(sizeAtMaximum, minSize, minPrefSize, prefSize, maxPrefSize, maxSize); | - | ||||||||||||||||||||||||
375 | - | |||||||||||||||||||||||||
376 | - | |||||||||||||||||||||||||
377 | - | |||||||||||||||||||||||||
378 | - | |||||||||||||||||||||||||
379 | AnchorVertex *prev = from; | - | ||||||||||||||||||||||||
380 | - | |||||||||||||||||||||||||
381 | for (int i = 0; i < m_edges.count()
| 0 | ||||||||||||||||||||||||
382 | AnchorData *e = m_edges.at(i); | - | ||||||||||||||||||||||||
383 | - | |||||||||||||||||||||||||
384 | const bool edgeIsForward = (e->from == prev); | - | ||||||||||||||||||||||||
385 | if (edgeIsForward
| 0 | ||||||||||||||||||||||||
386 | e->sizeAtMinimum = interpolate(minFactor, e->minSize, e->minPrefSize, | - | ||||||||||||||||||||||||
387 | e->prefSize, e->maxPrefSize, e->maxSize); | - | ||||||||||||||||||||||||
388 | e->sizeAtPreferred = interpolate(prefFactor, e->minSize, e->minPrefSize, | - | ||||||||||||||||||||||||
389 | e->prefSize, e->maxPrefSize, e->maxSize); | - | ||||||||||||||||||||||||
390 | e->sizeAtMaximum = interpolate(maxFactor, e->minSize, e->minPrefSize, | - | ||||||||||||||||||||||||
391 | e->prefSize, e->maxPrefSize, e->maxSize); | - | ||||||||||||||||||||||||
392 | prev = e->to; | - | ||||||||||||||||||||||||
393 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
394 | ((!(prev == e->to)) ? qt_assert("prev == e->to",__FILE__,509) : qt_noop()); | - | ||||||||||||||||||||||||
395 | e->sizeAtMinimum = interpolate(minFactor, e->maxSize, e->maxPrefSize, | - | ||||||||||||||||||||||||
396 | e->prefSize, e->minPrefSize, e->minSize); | - | ||||||||||||||||||||||||
397 | e->sizeAtPreferred = interpolate(prefFactor, e->maxSize, e->maxPrefSize, | - | ||||||||||||||||||||||||
398 | e->prefSize, e->minPrefSize, e->minSize); | - | ||||||||||||||||||||||||
399 | e->sizeAtMaximum = interpolate(maxFactor, e->maxSize, e->maxPrefSize, | - | ||||||||||||||||||||||||
400 | e->prefSize, e->minPrefSize, e->minSize); | - | ||||||||||||||||||||||||
401 | prev = e->from; | - | ||||||||||||||||||||||||
402 | } never executed: end of block | 0 | ||||||||||||||||||||||||
403 | - | |||||||||||||||||||||||||
404 | e->updateChildrenSizes(); | - | ||||||||||||||||||||||||
405 | } never executed: end of block | 0 | ||||||||||||||||||||||||
406 | } never executed: end of block | 0 | ||||||||||||||||||||||||
407 | - | |||||||||||||||||||||||||
408 | void SequentialAnchorData::calculateSizeHints() | - | ||||||||||||||||||||||||
409 | { | - | ||||||||||||||||||||||||
410 | minSize = 0; | - | ||||||||||||||||||||||||
411 | prefSize = 0; | - | ||||||||||||||||||||||||
412 | maxSize = 0; | - | ||||||||||||||||||||||||
413 | minPrefSize = 0; | - | ||||||||||||||||||||||||
414 | maxPrefSize = 0; | - | ||||||||||||||||||||||||
415 | - | |||||||||||||||||||||||||
416 | AnchorVertex *prev = from; | - | ||||||||||||||||||||||||
417 | - | |||||||||||||||||||||||||
418 | for (int i = 0; i < m_edges.count()
| 0 | ||||||||||||||||||||||||
419 | AnchorData *edge = m_edges.at(i); | - | ||||||||||||||||||||||||
420 | - | |||||||||||||||||||||||||
421 | const bool edgeIsForward = (edge->from == prev); | - | ||||||||||||||||||||||||
422 | if (edgeIsForward
| 0 | ||||||||||||||||||||||||
423 | minSize += edge->minSize; | - | ||||||||||||||||||||||||
424 | prefSize += edge->prefSize; | - | ||||||||||||||||||||||||
425 | maxSize += edge->maxSize; | - | ||||||||||||||||||||||||
426 | minPrefSize += edge->minPrefSize; | - | ||||||||||||||||||||||||
427 | maxPrefSize += edge->maxPrefSize; | - | ||||||||||||||||||||||||
428 | prev = edge->to; | - | ||||||||||||||||||||||||
429 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
430 | ((!(prev == edge->to)) ? qt_assert("prev == edge->to",__FILE__,545) : qt_noop()); | - | ||||||||||||||||||||||||
431 | minSize -= edge->maxSize; | - | ||||||||||||||||||||||||
432 | prefSize -= edge->prefSize; | - | ||||||||||||||||||||||||
433 | maxSize -= edge->minSize; | - | ||||||||||||||||||||||||
434 | minPrefSize -= edge->maxPrefSize; | - | ||||||||||||||||||||||||
435 | maxPrefSize -= edge->minPrefSize; | - | ||||||||||||||||||||||||
436 | prev = edge->from; | - | ||||||||||||||||||||||||
437 | } never executed: end of block | 0 | ||||||||||||||||||||||||
438 | } | - | ||||||||||||||||||||||||
439 | - | |||||||||||||||||||||||||
440 | - | |||||||||||||||||||||||||
441 | sizeAtMinimum = prefSize; | - | ||||||||||||||||||||||||
442 | sizeAtPreferred = prefSize; | - | ||||||||||||||||||||||||
443 | sizeAtMaximum = prefSize; | - | ||||||||||||||||||||||||
444 | } never executed: end of block | 0 | ||||||||||||||||||||||||
445 | - | |||||||||||||||||||||||||
446 | - | |||||||||||||||||||||||||
447 | void AnchorData::dump(int indent) { | - | ||||||||||||||||||||||||
448 | if (type == Parallel
| 0 | ||||||||||||||||||||||||
449 | QMessageLogger(__FILE__, 564, __PRETTY_FUNCTION__).debug("%*s type: parallel:", indent, ""); | - | ||||||||||||||||||||||||
450 | ParallelAnchorData *p = static_cast<ParallelAnchorData *>(this); | - | ||||||||||||||||||||||||
451 | p->firstEdge->dump(indent+2); | - | ||||||||||||||||||||||||
452 | p->secondEdge->dump(indent+2); | - | ||||||||||||||||||||||||
453 | } never executed: else if (type == Sequentialend of block
| 0 | ||||||||||||||||||||||||
454 | SequentialAnchorData *s = static_cast<SequentialAnchorData *>(this); | - | ||||||||||||||||||||||||
455 | int kids = s->m_edges.count(); | - | ||||||||||||||||||||||||
456 | QMessageLogger(__FILE__, 571, __PRETTY_FUNCTION__).debug("%*s type: sequential(%d):", indent, "", kids); | - | ||||||||||||||||||||||||
457 | for (int i = 0; i < kids
| 0 | ||||||||||||||||||||||||
458 | s->m_edges.at(i)->dump(indent+2); | - | ||||||||||||||||||||||||
459 | } never executed: end of block | 0 | ||||||||||||||||||||||||
460 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
461 | QMessageLogger(__FILE__, 576, __PRETTY_FUNCTION__).debug("%*s type: Normal:", indent, ""); | - | ||||||||||||||||||||||||
462 | } never executed: end of block | 0 | ||||||||||||||||||||||||
463 | } | - | ||||||||||||||||||||||||
464 | - | |||||||||||||||||||||||||
465 | - | |||||||||||||||||||||||||
466 | - | |||||||||||||||||||||||||
467 | QSimplexConstraint *GraphPath::constraint(const GraphPath &path) const | - | ||||||||||||||||||||||||
468 | { | - | ||||||||||||||||||||||||
469 | - | |||||||||||||||||||||||||
470 | QSet<AnchorData *> cPositives; | - | ||||||||||||||||||||||||
471 | QSet<AnchorData *> cNegatives; | - | ||||||||||||||||||||||||
472 | QSet<AnchorData *> intersection; | - | ||||||||||||||||||||||||
473 | - | |||||||||||||||||||||||||
474 | cPositives = positives + path.negatives; | - | ||||||||||||||||||||||||
475 | cNegatives = negatives + path.positives; | - | ||||||||||||||||||||||||
476 | - | |||||||||||||||||||||||||
477 | intersection = cPositives & cNegatives; | - | ||||||||||||||||||||||||
478 | - | |||||||||||||||||||||||||
479 | cPositives -= intersection; | - | ||||||||||||||||||||||||
480 | cNegatives -= intersection; | - | ||||||||||||||||||||||||
481 | - | |||||||||||||||||||||||||
482 | - | |||||||||||||||||||||||||
483 | QSimplexConstraint *c = new QSimplexConstraint; | - | ||||||||||||||||||||||||
484 | QSet<AnchorData *>::iterator i; | - | ||||||||||||||||||||||||
485 | for (i = cPositives.begin(); i != cPositives.end()
| 0 | ||||||||||||||||||||||||
486 | c->variables.insert(*i, 1.0); never executed: c->variables.insert(*i, 1.0); | 0 | ||||||||||||||||||||||||
487 | - | |||||||||||||||||||||||||
488 | for (i = cNegatives.begin(); i != cNegatives.end()
| 0 | ||||||||||||||||||||||||
489 | c->variables.insert(*i, -1.0); never executed: c->variables.insert(*i, -1.0); | 0 | ||||||||||||||||||||||||
490 | - | |||||||||||||||||||||||||
491 | return never executed: c;return c; never executed: return c; | 0 | ||||||||||||||||||||||||
492 | } | - | ||||||||||||||||||||||||
493 | - | |||||||||||||||||||||||||
494 | - | |||||||||||||||||||||||||
495 | QString GraphPath::toString() const | - | ||||||||||||||||||||||||
496 | { | - | ||||||||||||||||||||||||
497 | QString string(QLatin1String("Path: ")); | - | ||||||||||||||||||||||||
498 | for (AnchorData *edge : positives) | - | ||||||||||||||||||||||||
499 | string += QString::fromLatin1(" (+++) %1").arg(edge->toString()); never executed: string += QString::fromLatin1(" (+++) %1").arg(edge->toString()); | 0 | ||||||||||||||||||||||||
500 | - | |||||||||||||||||||||||||
501 | for (AnchorData *edge : negatives) | - | ||||||||||||||||||||||||
502 | string += QString::fromLatin1(" (---) %1").arg(edge->toString()); never executed: string += QString::fromLatin1(" (---) %1").arg(edge->toString()); | 0 | ||||||||||||||||||||||||
503 | - | |||||||||||||||||||||||||
504 | return never executed: string;return string; never executed: return string; | 0 | ||||||||||||||||||||||||
505 | } | - | ||||||||||||||||||||||||
506 | - | |||||||||||||||||||||||||
507 | - | |||||||||||||||||||||||||
508 | QGraphicsAnchorLayoutPrivate::QGraphicsAnchorLayoutPrivate() | - | ||||||||||||||||||||||||
509 | : calculateGraphCacheDirty(true), styleInfoDirty(true) | - | ||||||||||||||||||||||||
510 | { | - | ||||||||||||||||||||||||
511 | for (int i = 0; i < NOrientations
| 0 | ||||||||||||||||||||||||
512 | for (int j = 0; j < 3
| 0 | ||||||||||||||||||||||||
513 | sizeHints[i][j] = -1; | - | ||||||||||||||||||||||||
514 | } never executed: end of block | 0 | ||||||||||||||||||||||||
515 | interpolationProgress[i] = -1; | - | ||||||||||||||||||||||||
516 | - | |||||||||||||||||||||||||
517 | spacings[i] = -1; | - | ||||||||||||||||||||||||
518 | graphHasConflicts[i] = false; | - | ||||||||||||||||||||||||
519 | - | |||||||||||||||||||||||||
520 | layoutFirstVertex[i] = 0; | - | ||||||||||||||||||||||||
521 | layoutCentralVertex[i] = 0; | - | ||||||||||||||||||||||||
522 | layoutLastVertex[i] = 0; | - | ||||||||||||||||||||||||
523 | } never executed: end of block | 0 | ||||||||||||||||||||||||
524 | } never executed: end of block | 0 | ||||||||||||||||||||||||
525 | - | |||||||||||||||||||||||||
526 | Qt::AnchorPoint QGraphicsAnchorLayoutPrivate::oppositeEdge(Qt::AnchorPoint edge) | - | ||||||||||||||||||||||||
527 | { | - | ||||||||||||||||||||||||
528 | switch (edge) { | - | ||||||||||||||||||||||||
529 | case never executed: Qt::AnchorLeft:case Qt::AnchorLeft: never executed: case Qt::AnchorLeft: | 0 | ||||||||||||||||||||||||
530 | edge = Qt::AnchorRight; | - | ||||||||||||||||||||||||
531 | break; never executed: break; | 0 | ||||||||||||||||||||||||
532 | case never executed: Qt::AnchorRight:case Qt::AnchorRight: never executed: case Qt::AnchorRight: | 0 | ||||||||||||||||||||||||
533 | edge = Qt::AnchorLeft; | - | ||||||||||||||||||||||||
534 | break; never executed: break; | 0 | ||||||||||||||||||||||||
535 | case never executed: Qt::AnchorTop:case Qt::AnchorTop: never executed: case Qt::AnchorTop: | 0 | ||||||||||||||||||||||||
536 | edge = Qt::AnchorBottom; | - | ||||||||||||||||||||||||
537 | break; never executed: break; | 0 | ||||||||||||||||||||||||
538 | case never executed: Qt::AnchorBottom:case Qt::AnchorBottom: never executed: case Qt::AnchorBottom: | 0 | ||||||||||||||||||||||||
539 | edge = Qt::AnchorTop; | - | ||||||||||||||||||||||||
540 | break; never executed: break; | 0 | ||||||||||||||||||||||||
541 | default never executed: :default: never executed: default: | 0 | ||||||||||||||||||||||||
542 | break; never executed: break; | 0 | ||||||||||||||||||||||||
543 | } | - | ||||||||||||||||||||||||
544 | return never executed: edge;return edge; never executed: return edge; | 0 | ||||||||||||||||||||||||
545 | } | - | ||||||||||||||||||||||||
546 | AnchorData *QGraphicsAnchorLayoutPrivate::addAnchorMaybeParallel(AnchorData *newAnchor, bool *feasible) | - | ||||||||||||||||||||||||
547 | { | - | ||||||||||||||||||||||||
548 | Orientation orientation = Orientation(newAnchor->orientation); | - | ||||||||||||||||||||||||
549 | Graph<AnchorVertex, AnchorData> &g = graph[orientation]; | - | ||||||||||||||||||||||||
550 | *feasible = true; | - | ||||||||||||||||||||||||
551 | - | |||||||||||||||||||||||||
552 | - | |||||||||||||||||||||||||
553 | - | |||||||||||||||||||||||||
554 | if (AnchorData *oldAnchor = g.takeEdge(newAnchor->from, newAnchor->to)
| 0 | ||||||||||||||||||||||||
555 | ParallelAnchorData *parallel = new ParallelAnchorData(oldAnchor, newAnchor); | - | ||||||||||||||||||||||||
556 | - | |||||||||||||||||||||||||
557 | - | |||||||||||||||||||||||||
558 | - | |||||||||||||||||||||||||
559 | - | |||||||||||||||||||||||||
560 | - | |||||||||||||||||||||||||
561 | - | |||||||||||||||||||||||||
562 | QList<QSimplexConstraint *> &constraints = itemCenterConstraints[orientation]; | - | ||||||||||||||||||||||||
563 | - | |||||||||||||||||||||||||
564 | AnchorData *children[2] = { oldAnchor, newAnchor }; | - | ||||||||||||||||||||||||
565 | QList<QSimplexConstraint *> *childrenConstraints[2] = { ¶llel->m_firstConstraints, | - | ||||||||||||||||||||||||
566 | ¶llel->m_secondConstraints }; | - | ||||||||||||||||||||||||
567 | - | |||||||||||||||||||||||||
568 | for (int i = 0; i < 2
| 0 | ||||||||||||||||||||||||
569 | AnchorData *child = children[i]; | - | ||||||||||||||||||||||||
570 | QList<QSimplexConstraint *> *childConstraints = childrenConstraints[i]; | - | ||||||||||||||||||||||||
571 | - | |||||||||||||||||||||||||
572 | - | |||||||||||||||||||||||||
573 | - | |||||||||||||||||||||||||
574 | - | |||||||||||||||||||||||||
575 | - | |||||||||||||||||||||||||
576 | - | |||||||||||||||||||||||||
577 | const bool needsReverse = i == 1
| 0 | ||||||||||||||||||||||||
578 | - | |||||||||||||||||||||||||
579 | if (!child->isCenterAnchor
| 0 | ||||||||||||||||||||||||
580 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
581 | - | |||||||||||||||||||||||||
582 | parallel->isCenterAnchor = true; | - | ||||||||||||||||||||||||
583 | - | |||||||||||||||||||||||||
584 | for (int j = 0; j < constraints.count()
| 0 | ||||||||||||||||||||||||
585 | QSimplexConstraint *c = constraints[j]; | - | ||||||||||||||||||||||||
586 | if (c->variables.contains(child)
| 0 | ||||||||||||||||||||||||
587 | childConstraints->append(c); | - | ||||||||||||||||||||||||
588 | qreal v = c->variables.take(child); | - | ||||||||||||||||||||||||
589 | if (needsReverse
| 0 | ||||||||||||||||||||||||
590 | v *= -1; never executed: v *= -1; | 0 | ||||||||||||||||||||||||
591 | c->variables.insert(parallel, v); | - | ||||||||||||||||||||||||
592 | } never executed: end of block | 0 | ||||||||||||||||||||||||
593 | } never executed: end of block | 0 | ||||||||||||||||||||||||
594 | } never executed: end of block | 0 | ||||||||||||||||||||||||
595 | - | |||||||||||||||||||||||||
596 | - | |||||||||||||||||||||||||
597 | - | |||||||||||||||||||||||||
598 | *feasible = parallel->calculateSizeHints(); | - | ||||||||||||||||||||||||
599 | newAnchor = parallel; | - | ||||||||||||||||||||||||
600 | } never executed: end of block | 0 | ||||||||||||||||||||||||
601 | - | |||||||||||||||||||||||||
602 | g.createEdge(newAnchor->from, newAnchor->to, newAnchor); | - | ||||||||||||||||||||||||
603 | return never executed: newAnchor;return newAnchor; never executed: return newAnchor; | 0 | ||||||||||||||||||||||||
604 | } | - | ||||||||||||||||||||||||
605 | static AnchorData *createSequence(Graph<AnchorVertex, AnchorData> *graph, | - | ||||||||||||||||||||||||
606 | AnchorVertex *before, | - | ||||||||||||||||||||||||
607 | const QVector<AnchorVertex*> &vertices, | - | ||||||||||||||||||||||||
608 | AnchorVertex *after) | - | ||||||||||||||||||||||||
609 | { | - | ||||||||||||||||||||||||
610 | AnchorVertex *prev = before; | - | ||||||||||||||||||||||||
611 | QVector<AnchorData *> edges; | - | ||||||||||||||||||||||||
612 | edges.reserve(vertices.count() + 1); | - | ||||||||||||||||||||||||
613 | - | |||||||||||||||||||||||||
614 | const int numVertices = vertices.count(); | - | ||||||||||||||||||||||||
615 | edges.reserve(numVertices + 1); | - | ||||||||||||||||||||||||
616 | - | |||||||||||||||||||||||||
617 | for (int i = 0; i < numVertices
| 0 | ||||||||||||||||||||||||
618 | AnchorVertex *next = vertices.at(i); | - | ||||||||||||||||||||||||
619 | AnchorData *ad = graph->takeEdge(prev, next); | - | ||||||||||||||||||||||||
620 | ((!(ad)) ? qt_assert("ad",__FILE__,770) : qt_noop()); | - | ||||||||||||||||||||||||
621 | edges.append(ad); | - | ||||||||||||||||||||||||
622 | prev = next; | - | ||||||||||||||||||||||||
623 | } never executed: end of block | 0 | ||||||||||||||||||||||||
624 | - | |||||||||||||||||||||||||
625 | - | |||||||||||||||||||||||||
626 | AnchorData *ad = graph->takeEdge(vertices.last(), after); | - | ||||||||||||||||||||||||
627 | ((!(ad)) ? qt_assert("ad",__FILE__,777) : qt_noop()); | - | ||||||||||||||||||||||||
628 | edges.append(ad); | - | ||||||||||||||||||||||||
629 | - | |||||||||||||||||||||||||
630 | - | |||||||||||||||||||||||||
631 | SequentialAnchorData *sequence = new SequentialAnchorData(vertices, edges); | - | ||||||||||||||||||||||||
632 | sequence->from = before; | - | ||||||||||||||||||||||||
633 | sequence->to = after; | - | ||||||||||||||||||||||||
634 | - | |||||||||||||||||||||||||
635 | sequence->calculateSizeHints(); | - | ||||||||||||||||||||||||
636 | - | |||||||||||||||||||||||||
637 | return never executed: sequence;return sequence; never executed: return sequence; | 0 | ||||||||||||||||||||||||
638 | } | - | ||||||||||||||||||||||||
639 | bool QGraphicsAnchorLayoutPrivate::simplifyGraph(Orientation orientation) | - | ||||||||||||||||||||||||
640 | { | - | ||||||||||||||||||||||||
641 | if (items.isEmpty()
| 0 | ||||||||||||||||||||||||
642 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
643 | if (!simplifyVertices(orientation)
| 0 | ||||||||||||||||||||||||
644 | restoreVertices(orientation); | - | ||||||||||||||||||||||||
645 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
646 | } | - | ||||||||||||||||||||||||
647 | - | |||||||||||||||||||||||||
648 | - | |||||||||||||||||||||||||
649 | bool dirty; | - | ||||||||||||||||||||||||
650 | bool feasible = true; | - | ||||||||||||||||||||||||
651 | do { | - | ||||||||||||||||||||||||
652 | dirty = simplifyGraphIteration(orientation, &feasible); | - | ||||||||||||||||||||||||
653 | } never executed: while (dirtyend of block
| 0 | ||||||||||||||||||||||||
654 | - | |||||||||||||||||||||||||
655 | - | |||||||||||||||||||||||||
656 | if (!feasible
| 0 | ||||||||||||||||||||||||
657 | restoreSimplifiedGraph(orientation); | - | ||||||||||||||||||||||||
658 | restoreVertices(orientation); | - | ||||||||||||||||||||||||
659 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
660 | } | - | ||||||||||||||||||||||||
661 | - | |||||||||||||||||||||||||
662 | - | |||||||||||||||||||||||||
663 | - | |||||||||||||||||||||||||
664 | - | |||||||||||||||||||||||||
665 | - | |||||||||||||||||||||||||
666 | - | |||||||||||||||||||||||||
667 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
668 | } | - | ||||||||||||||||||||||||
669 | - | |||||||||||||||||||||||||
670 | static AnchorVertex *replaceVertex_helper(AnchorData *data, AnchorVertex *oldV, AnchorVertex *newV) | - | ||||||||||||||||||||||||
671 | { | - | ||||||||||||||||||||||||
672 | AnchorVertex *other; | - | ||||||||||||||||||||||||
673 | if (data->from == oldV
| 0 | ||||||||||||||||||||||||
674 | data->from = newV; | - | ||||||||||||||||||||||||
675 | other = data->to; | - | ||||||||||||||||||||||||
676 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
677 | data->to = newV; | - | ||||||||||||||||||||||||
678 | other = data->from; | - | ||||||||||||||||||||||||
679 | } never executed: end of block | 0 | ||||||||||||||||||||||||
680 | return never executed: other;return other; never executed: return other; | 0 | ||||||||||||||||||||||||
681 | } | - | ||||||||||||||||||||||||
682 | - | |||||||||||||||||||||||||
683 | bool QGraphicsAnchorLayoutPrivate::replaceVertex(Orientation orientation, AnchorVertex *oldV, | - | ||||||||||||||||||||||||
684 | AnchorVertex *newV, const QList<AnchorData *> &edges) | - | ||||||||||||||||||||||||
685 | { | - | ||||||||||||||||||||||||
686 | Graph<AnchorVertex, AnchorData> &g = graph[orientation]; | - | ||||||||||||||||||||||||
687 | bool feasible = true; | - | ||||||||||||||||||||||||
688 | - | |||||||||||||||||||||||||
689 | for (int i = 0; i < edges.count()
| 0 | ||||||||||||||||||||||||
690 | AnchorData *ad = edges[i]; | - | ||||||||||||||||||||||||
691 | AnchorVertex *otherV = replaceVertex_helper(ad, oldV, newV); | - | ||||||||||||||||||||||||
692 | - | |||||||||||||||||||||||||
693 | - | |||||||||||||||||||||||||
694 | ad->name = QString::fromLatin1("%1 --to--> %2").arg(ad->from->toString()).arg(ad->to->toString()); | - | ||||||||||||||||||||||||
695 | - | |||||||||||||||||||||||||
696 | - | |||||||||||||||||||||||||
697 | bool newFeasible; | - | ||||||||||||||||||||||||
698 | AnchorData *newAnchor = addAnchorMaybeParallel(ad, &newFeasible); | - | ||||||||||||||||||||||||
699 | feasible &= newFeasible; | - | ||||||||||||||||||||||||
700 | - | |||||||||||||||||||||||||
701 | if (newAnchor != ad
| 0 | ||||||||||||||||||||||||
702 | - | |||||||||||||||||||||||||
703 | - | |||||||||||||||||||||||||
704 | - | |||||||||||||||||||||||||
705 | anchorsFromSimplifiedVertices[orientation].append(newAnchor); | - | ||||||||||||||||||||||||
706 | } never executed: end of block | 0 | ||||||||||||||||||||||||
707 | - | |||||||||||||||||||||||||
708 | g.takeEdge(oldV, otherV); | - | ||||||||||||||||||||||||
709 | } never executed: end of block | 0 | ||||||||||||||||||||||||
710 | - | |||||||||||||||||||||||||
711 | return never executed: feasible;return feasible; never executed: return feasible; | 0 | ||||||||||||||||||||||||
712 | } | - | ||||||||||||||||||||||||
713 | - | |||||||||||||||||||||||||
714 | - | |||||||||||||||||||||||||
715 | - | |||||||||||||||||||||||||
716 | - | |||||||||||||||||||||||||
717 | bool QGraphicsAnchorLayoutPrivate::simplifyVertices(Orientation orientation) | - | ||||||||||||||||||||||||
718 | { | - | ||||||||||||||||||||||||
719 | QGraphicsAnchorLayout * const q = q_func(); | - | ||||||||||||||||||||||||
720 | Graph<AnchorVertex, AnchorData> &g = graph[orientation]; | - | ||||||||||||||||||||||||
721 | - | |||||||||||||||||||||||||
722 | - | |||||||||||||||||||||||||
723 | QStack<AnchorVertex *> stack; | - | ||||||||||||||||||||||||
724 | stack.push(layoutFirstVertex[orientation]); | - | ||||||||||||||||||||||||
725 | QSet<AnchorVertex *> visited; | - | ||||||||||||||||||||||||
726 | - | |||||||||||||||||||||||||
727 | while (!stack.isEmpty()
| 0 | ||||||||||||||||||||||||
728 | AnchorVertex *v = stack.pop(); | - | ||||||||||||||||||||||||
729 | visited.insert(v); | - | ||||||||||||||||||||||||
730 | - | |||||||||||||||||||||||||
731 | - | |||||||||||||||||||||||||
732 | - | |||||||||||||||||||||||||
733 | - | |||||||||||||||||||||||||
734 | QList<AnchorVertex *> adjacents = g.adjacentVertices(v); | - | ||||||||||||||||||||||||
735 | int index = 0; | - | ||||||||||||||||||||||||
736 | - | |||||||||||||||||||||||||
737 | while (index < adjacents.count()
| 0 | ||||||||||||||||||||||||
738 | AnchorVertex *next = adjacents.at(index); | - | ||||||||||||||||||||||||
739 | index++; | - | ||||||||||||||||||||||||
740 | - | |||||||||||||||||||||||||
741 | AnchorData *data = g.edgeData(v, next); | - | ||||||||||||||||||||||||
742 | const bool bothLayoutVertices = v->m_item == q
| 0 | ||||||||||||||||||||||||
743 | const bool zeroSized = !data->minSize
| 0 | ||||||||||||||||||||||||
744 | - | |||||||||||||||||||||||||
745 | if (!bothLayoutVertices
| 0 | ||||||||||||||||||||||||
746 | - | |||||||||||||||||||||||||
747 | - | |||||||||||||||||||||||||
748 | - | |||||||||||||||||||||||||
749 | AnchorVertexPair *newV = new AnchorVertexPair(v, next, data); | - | ||||||||||||||||||||||||
750 | simplifiedVertices[orientation].append(newV); | - | ||||||||||||||||||||||||
751 | - | |||||||||||||||||||||||||
752 | - | |||||||||||||||||||||||||
753 | - | |||||||||||||||||||||||||
754 | const QList<AnchorVertex *> &vAdjacents = g.adjacentVertices(v); | - | ||||||||||||||||||||||||
755 | const QList<AnchorVertex *> &nextAdjacents = g.adjacentVertices(next); | - | ||||||||||||||||||||||||
756 | - | |||||||||||||||||||||||||
757 | for (int i = 0; i < vAdjacents.count()
| 0 | ||||||||||||||||||||||||
758 | AnchorVertex *adjacent = vAdjacents.at(i); | - | ||||||||||||||||||||||||
759 | if (adjacent != next
| 0 | ||||||||||||||||||||||||
760 | AnchorData *ad = g.edgeData(v, adjacent); | - | ||||||||||||||||||||||||
761 | newV->m_firstAnchors.append(ad); | - | ||||||||||||||||||||||||
762 | } never executed: end of block | 0 | ||||||||||||||||||||||||
763 | } never executed: end of block | 0 | ||||||||||||||||||||||||
764 | - | |||||||||||||||||||||||||
765 | for (int i = 0; i < nextAdjacents.count()
| 0 | ||||||||||||||||||||||||
766 | AnchorVertex *adjacent = nextAdjacents.at(i); | - | ||||||||||||||||||||||||
767 | if (adjacent != v
| 0 | ||||||||||||||||||||||||
768 | AnchorData *ad = g.edgeData(next, adjacent); | - | ||||||||||||||||||||||||
769 | newV->m_secondAnchors.append(ad); | - | ||||||||||||||||||||||||
770 | - | |||||||||||||||||||||||||
771 | - | |||||||||||||||||||||||||
772 | - | |||||||||||||||||||||||||
773 | if (!adjacents.contains(adjacent)
| 0 | ||||||||||||||||||||||||
774 | adjacents.append(adjacent); never executed: adjacents.append(adjacent); | 0 | ||||||||||||||||||||||||
775 | } never executed: end of block | 0 | ||||||||||||||||||||||||
776 | } never executed: end of block | 0 | ||||||||||||||||||||||||
777 | - | |||||||||||||||||||||||||
778 | - | |||||||||||||||||||||||||
779 | - | |||||||||||||||||||||||||
780 | bool feasible = replaceVertex(orientation, v, newV, newV->m_firstAnchors); | - | ||||||||||||||||||||||||
781 | feasible &= replaceVertex(orientation, next, newV, newV->m_secondAnchors); | - | ||||||||||||||||||||||||
782 | - | |||||||||||||||||||||||||
783 | - | |||||||||||||||||||||||||
784 | AnchorVertex *layoutVertex = 0; | - | ||||||||||||||||||||||||
785 | if (v->m_item == q
| 0 | ||||||||||||||||||||||||
786 | layoutVertex = v; never executed: layoutVertex = v; | 0 | ||||||||||||||||||||||||
787 | else if (next->m_item == q
| 0 | ||||||||||||||||||||||||
788 | layoutVertex = next; never executed: layoutVertex = next; | 0 | ||||||||||||||||||||||||
789 | - | |||||||||||||||||||||||||
790 | if (layoutVertex
| 0 | ||||||||||||||||||||||||
791 | - | |||||||||||||||||||||||||
792 | newV->m_item = q; | - | ||||||||||||||||||||||||
793 | changeLayoutVertex(orientation, layoutVertex, newV); | - | ||||||||||||||||||||||||
794 | } never executed: end of block | 0 | ||||||||||||||||||||||||
795 | - | |||||||||||||||||||||||||
796 | g.takeEdge(v, next); | - | ||||||||||||||||||||||||
797 | - | |||||||||||||||||||||||||
798 | - | |||||||||||||||||||||||||
799 | if (!feasible
| 0 | ||||||||||||||||||||||||
800 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
801 | - | |||||||||||||||||||||||||
802 | v = newV; | - | ||||||||||||||||||||||||
803 | visited.insert(newV); | - | ||||||||||||||||||||||||
804 | - | |||||||||||||||||||||||||
805 | } never executed: else if (!visited.contains(next)end of block
| 0 | ||||||||||||||||||||||||
806 | - | |||||||||||||||||||||||||
807 | - | |||||||||||||||||||||||||
808 | stack.push(next); | - | ||||||||||||||||||||||||
809 | } never executed: end of block | 0 | ||||||||||||||||||||||||
810 | } never executed: end of block | 0 | ||||||||||||||||||||||||
811 | } never executed: end of block | 0 | ||||||||||||||||||||||||
812 | - | |||||||||||||||||||||||||
813 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
814 | } | - | ||||||||||||||||||||||||
815 | bool QGraphicsAnchorLayoutPrivate::simplifyGraphIteration(QGraphicsAnchorLayoutPrivate::Orientation orientation, | - | ||||||||||||||||||||||||
816 | bool *feasible) | - | ||||||||||||||||||||||||
817 | { | - | ||||||||||||||||||||||||
818 | QGraphicsAnchorLayout * const q = q_func(); | - | ||||||||||||||||||||||||
819 | Graph<AnchorVertex, AnchorData> &g = graph[orientation]; | - | ||||||||||||||||||||||||
820 | - | |||||||||||||||||||||||||
821 | QSet<AnchorVertex *> visited; | - | ||||||||||||||||||||||||
822 | QStack<QPair<AnchorVertex *, AnchorVertex *> > stack; | - | ||||||||||||||||||||||||
823 | stack.push(qMakePair(static_cast<AnchorVertex *>(0), layoutFirstVertex[orientation])); | - | ||||||||||||||||||||||||
824 | QVector<AnchorVertex*> candidates; | - | ||||||||||||||||||||||||
825 | - | |||||||||||||||||||||||||
826 | - | |||||||||||||||||||||||||
827 | - | |||||||||||||||||||||||||
828 | while (!stack.isEmpty()
| 0 | ||||||||||||||||||||||||
829 | QPair<AnchorVertex *, AnchorVertex *> pair = stack.pop(); | - | ||||||||||||||||||||||||
830 | AnchorVertex *beforeSequence = pair.first; | - | ||||||||||||||||||||||||
831 | AnchorVertex *v = pair.second; | - | ||||||||||||||||||||||||
832 | const QList<AnchorVertex *> &adjacents = g.adjacentVertices(v); | - | ||||||||||||||||||||||||
833 | const bool isLayoutVertex = v->m_item == q; | - | ||||||||||||||||||||||||
834 | AnchorVertex *afterSequence = v; | - | ||||||||||||||||||||||||
835 | bool endOfSequence = false; | - | ||||||||||||||||||||||||
836 | - | |||||||||||||||||||||||||
837 | - | |||||||||||||||||||||||||
838 | - | |||||||||||||||||||||||||
839 | - | |||||||||||||||||||||||||
840 | - | |||||||||||||||||||||||||
841 | - | |||||||||||||||||||||||||
842 | endOfSequence = isLayoutVertex
| 0 | ||||||||||||||||||||||||
843 | - | |||||||||||||||||||||||||
844 | if (!endOfSequence
| 0 | ||||||||||||||||||||||||
845 | AnchorVertex *after; | - | ||||||||||||||||||||||||
846 | if (candidates.isEmpty()
| 0 | ||||||||||||||||||||||||
847 | after = (beforeSequence == adjacents.last()
never executed: after = (beforeSequence == adjacents.last() ? adjacents.first() : adjacents.last()); | 0 | ||||||||||||||||||||||||
848 | else | - | ||||||||||||||||||||||||
849 | after = (candidates.constLast() == adjacents.last()
never executed: after = (candidates.constLast() == adjacents.last() ? adjacents.first() : adjacents.last()); | 0 | ||||||||||||||||||||||||
850 | - | |||||||||||||||||||||||||
851 | - | |||||||||||||||||||||||||
852 | - | |||||||||||||||||||||||||
853 | ((!(!candidates.contains(after))) ? qt_assert("!candidates.contains(after)",__FILE__,1089) : qt_noop()); | - | ||||||||||||||||||||||||
854 | - | |||||||||||||||||||||||||
855 | const AnchorData *data = g.edgeData(v, after); | - | ||||||||||||||||||||||||
856 | ((!(data)) ? qt_assert("data",__FILE__,1092) : qt_noop()); | - | ||||||||||||||||||||||||
857 | const bool cycleFound = visited.contains(after); | - | ||||||||||||||||||||||||
858 | - | |||||||||||||||||||||||||
859 | - | |||||||||||||||||||||||||
860 | endOfSequence = cycleFound
| 0 | ||||||||||||||||||||||||
861 | - | |||||||||||||||||||||||||
862 | if (!endOfSequence
| 0 | ||||||||||||||||||||||||
863 | - | |||||||||||||||||||||||||
864 | - | |||||||||||||||||||||||||
865 | candidates.append(v); | - | ||||||||||||||||||||||||
866 | } never executed: else if (cycleFoundend of block
| 0 | ||||||||||||||||||||||||
867 | afterSequence = after; | - | ||||||||||||||||||||||||
868 | candidates.append(v); | - | ||||||||||||||||||||||||
869 | } never executed: end of block | 0 | ||||||||||||||||||||||||
870 | } never executed: end of block | 0 | ||||||||||||||||||||||||
871 | - | |||||||||||||||||||||||||
872 | - | |||||||||||||||||||||||||
873 | - | |||||||||||||||||||||||||
874 | - | |||||||||||||||||||||||||
875 | for (int i = 0; i < adjacents.count()
| 0 | ||||||||||||||||||||||||
876 | AnchorVertex *next = adjacents.at(i); | - | ||||||||||||||||||||||||
877 | if (visited.contains(next)
| 0 | ||||||||||||||||||||||||
878 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
879 | - | |||||||||||||||||||||||||
880 | - | |||||||||||||||||||||||||
881 | - | |||||||||||||||||||||||||
882 | - | |||||||||||||||||||||||||
883 | - | |||||||||||||||||||||||||
884 | if (endOfSequence
| 0 | ||||||||||||||||||||||||
885 | stack.push(qMakePair(v, next)); never executed: stack.push(qMakePair(v, next)); | 0 | ||||||||||||||||||||||||
886 | else | - | ||||||||||||||||||||||||
887 | stack.push(qMakePair(beforeSequence, next)); never executed: stack.push(qMakePair(beforeSequence, next)); | 0 | ||||||||||||||||||||||||
888 | } | - | ||||||||||||||||||||||||
889 | - | |||||||||||||||||||||||||
890 | visited.insert(v); | - | ||||||||||||||||||||||||
891 | - | |||||||||||||||||||||||||
892 | if (!endOfSequence
| 0 | ||||||||||||||||||||||||
893 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
894 | - | |||||||||||||||||||||||||
895 | - | |||||||||||||||||||||||||
896 | - | |||||||||||||||||||||||||
897 | - | |||||||||||||||||||||||||
898 | - | |||||||||||||||||||||||||
899 | - | |||||||||||||||||||||||||
900 | - | |||||||||||||||||||||||||
901 | const AnchorData *firstAnchor = g.edgeData(beforeSequence, candidates.constFirst()); | - | ||||||||||||||||||||||||
902 | if (firstAnchor->isCenterAnchor
| 0 | ||||||||||||||||||||||||
903 | beforeSequence = candidates.constFirst(); | - | ||||||||||||||||||||||||
904 | candidates.remove(0); | - | ||||||||||||||||||||||||
905 | - | |||||||||||||||||||||||||
906 | - | |||||||||||||||||||||||||
907 | if (candidates.isEmpty()
| 0 | ||||||||||||||||||||||||
908 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
909 | } never executed: end of block | 0 | ||||||||||||||||||||||||
910 | - | |||||||||||||||||||||||||
911 | const AnchorData *lastAnchor = g.edgeData(candidates.constLast(), afterSequence); | - | ||||||||||||||||||||||||
912 | if (lastAnchor->isCenterAnchor
| 0 | ||||||||||||||||||||||||
913 | afterSequence = candidates.constLast(); | - | ||||||||||||||||||||||||
914 | candidates.remove(candidates.count() - 1); | - | ||||||||||||||||||||||||
915 | - | |||||||||||||||||||||||||
916 | if (candidates.isEmpty()
| 0 | ||||||||||||||||||||||||
917 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
918 | } never executed: end of block | 0 | ||||||||||||||||||||||||
919 | - | |||||||||||||||||||||||||
920 | - | |||||||||||||||||||||||||
921 | - | |||||||||||||||||||||||||
922 | - | |||||||||||||||||||||||||
923 | - | |||||||||||||||||||||||||
924 | AnchorData *sequence = createSequence(&g, beforeSequence, candidates, afterSequence); | - | ||||||||||||||||||||||||
925 | - | |||||||||||||||||||||||||
926 | - | |||||||||||||||||||||||||
927 | - | |||||||||||||||||||||||||
928 | bool newFeasible; | - | ||||||||||||||||||||||||
929 | AnchorData *newAnchor = addAnchorMaybeParallel(sequence, &newFeasible); | - | ||||||||||||||||||||||||
930 | - | |||||||||||||||||||||||||
931 | if (!newFeasible
| 0 | ||||||||||||||||||||||||
932 | *feasible = false; | - | ||||||||||||||||||||||||
933 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
934 | } | - | ||||||||||||||||||||||||
935 | - | |||||||||||||||||||||||||
936 | - | |||||||||||||||||||||||||
937 | - | |||||||||||||||||||||||||
938 | - | |||||||||||||||||||||||||
939 | - | |||||||||||||||||||||||||
940 | if (newAnchor != sequence
| 0 | ||||||||||||||||||||||||
941 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
942 | - | |||||||||||||||||||||||||
943 | - | |||||||||||||||||||||||||
944 | - | |||||||||||||||||||||||||
945 | candidates.clear(); | - | ||||||||||||||||||||||||
946 | } never executed: end of block | 0 | ||||||||||||||||||||||||
947 | - | |||||||||||||||||||||||||
948 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
949 | } | - | ||||||||||||||||||||||||
950 | - | |||||||||||||||||||||||||
951 | void QGraphicsAnchorLayoutPrivate::restoreSimplifiedAnchor(AnchorData *edge) | - | ||||||||||||||||||||||||
952 | { | - | ||||||||||||||||||||||||
953 | - | |||||||||||||||||||||||||
954 | - | |||||||||||||||||||||||||
955 | - | |||||||||||||||||||||||||
956 | - | |||||||||||||||||||||||||
957 | - | |||||||||||||||||||||||||
958 | - | |||||||||||||||||||||||||
959 | - | |||||||||||||||||||||||||
960 | Graph<AnchorVertex, AnchorData> &g = graph[edge->orientation]; | - | ||||||||||||||||||||||||
961 | - | |||||||||||||||||||||||||
962 | if (edge->type == AnchorData::Normal
| 0 | ||||||||||||||||||||||||
963 | g.createEdge(edge->from, edge->to, edge); | - | ||||||||||||||||||||||||
964 | - | |||||||||||||||||||||||||
965 | } never executed: else if (edge->type == AnchorData::Sequentialend of block
| 0 | ||||||||||||||||||||||||
966 | SequentialAnchorData *sequence = static_cast<SequentialAnchorData *>(edge); | - | ||||||||||||||||||||||||
967 | - | |||||||||||||||||||||||||
968 | for (int i = 0; i < sequence->m_edges.count()
| 0 | ||||||||||||||||||||||||
969 | AnchorData *data = sequence->m_edges.at(i); | - | ||||||||||||||||||||||||
970 | restoreSimplifiedAnchor(data); | - | ||||||||||||||||||||||||
971 | } never executed: end of block | 0 | ||||||||||||||||||||||||
972 | - | |||||||||||||||||||||||||
973 | delete sequence; | - | ||||||||||||||||||||||||
974 | - | |||||||||||||||||||||||||
975 | } never executed: else if (edge->type == AnchorData::Parallelend of block
| 0 | ||||||||||||||||||||||||
976 | - | |||||||||||||||||||||||||
977 | - | |||||||||||||||||||||||||
978 | - | |||||||||||||||||||||||||
979 | - | |||||||||||||||||||||||||
980 | if (anchorsFromSimplifiedVertices[edge->orientation].contains(edge)
| 0 | ||||||||||||||||||||||||
981 | return; never executed: return; | 0 | ||||||||||||||||||||||||
982 | - | |||||||||||||||||||||||||
983 | ParallelAnchorData* parallel = static_cast<ParallelAnchorData*>(edge); | - | ||||||||||||||||||||||||
984 | restoreSimplifiedConstraints(parallel); | - | ||||||||||||||||||||||||
985 | - | |||||||||||||||||||||||||
986 | - | |||||||||||||||||||||||||
987 | - | |||||||||||||||||||||||||
988 | - | |||||||||||||||||||||||||
989 | ((!(parallel->firstEdge->type == AnchorData::Sequential || parallel->secondEdge->type == AnchorData::Sequential)) ? qt_assert("parallel->firstEdge->type == AnchorData::Sequential || parallel->secondEdge->type == AnchorData::Sequential", | - | ||||||||||||||||||||||||
990 | __FILE__ | - | ||||||||||||||||||||||||
991 | , | - | ||||||||||||||||||||||||
992 | 1226 | - | ||||||||||||||||||||||||
993 | ) : qt_noop()) | - | ||||||||||||||||||||||||
994 | ; | - | ||||||||||||||||||||||||
995 | restoreSimplifiedAnchor(parallel->firstEdge); | - | ||||||||||||||||||||||||
996 | restoreSimplifiedAnchor(parallel->secondEdge); | - | ||||||||||||||||||||||||
997 | - | |||||||||||||||||||||||||
998 | delete parallel; | - | ||||||||||||||||||||||||
999 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1000 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1001 | - | |||||||||||||||||||||||||
1002 | void QGraphicsAnchorLayoutPrivate::restoreSimplifiedConstraints(ParallelAnchorData *parallel) | - | ||||||||||||||||||||||||
1003 | { | - | ||||||||||||||||||||||||
1004 | if (!parallel->isCenterAnchor
| 0 | ||||||||||||||||||||||||
1005 | return; never executed: return; | 0 | ||||||||||||||||||||||||
1006 | - | |||||||||||||||||||||||||
1007 | for (int i = 0; i < parallel->m_firstConstraints.count()
| 0 | ||||||||||||||||||||||||
1008 | QSimplexConstraint *c = parallel->m_firstConstraints.at(i); | - | ||||||||||||||||||||||||
1009 | qreal v = c->variables[parallel]; | - | ||||||||||||||||||||||||
1010 | c->variables.remove(parallel); | - | ||||||||||||||||||||||||
1011 | c->variables.insert(parallel->firstEdge, v); | - | ||||||||||||||||||||||||
1012 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1013 | - | |||||||||||||||||||||||||
1014 | - | |||||||||||||||||||||||||
1015 | - | |||||||||||||||||||||||||
1016 | const bool needsReverse = !parallel->secondForward(); | - | ||||||||||||||||||||||||
1017 | - | |||||||||||||||||||||||||
1018 | for (int i = 0; i < parallel->m_secondConstraints.count()
| 0 | ||||||||||||||||||||||||
1019 | QSimplexConstraint *c = parallel->m_secondConstraints.at(i); | - | ||||||||||||||||||||||||
1020 | qreal v = c->variables[parallel]; | - | ||||||||||||||||||||||||
1021 | if (needsReverse
| 0 | ||||||||||||||||||||||||
1022 | v *= -1; never executed: v *= -1; | 0 | ||||||||||||||||||||||||
1023 | c->variables.remove(parallel); | - | ||||||||||||||||||||||||
1024 | c->variables.insert(parallel->secondEdge, v); | - | ||||||||||||||||||||||||
1025 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1026 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1027 | - | |||||||||||||||||||||||||
1028 | void QGraphicsAnchorLayoutPrivate::restoreSimplifiedGraph(Orientation orientation) | - | ||||||||||||||||||||||||
1029 | { | - | ||||||||||||||||||||||||
1030 | - | |||||||||||||||||||||||||
1031 | - | |||||||||||||||||||||||||
1032 | - | |||||||||||||||||||||||||
1033 | - | |||||||||||||||||||||||||
1034 | - | |||||||||||||||||||||||||
1035 | - | |||||||||||||||||||||||||
1036 | Graph<AnchorVertex, AnchorData> &g = graph[orientation]; | - | ||||||||||||||||||||||||
1037 | QVector<QPair<AnchorVertex*, AnchorVertex*> > connections = g.connections(); | - | ||||||||||||||||||||||||
1038 | for (int i = 0; i < connections.count()
| 0 | ||||||||||||||||||||||||
1039 | AnchorVertex *v1 = connections.at(i).first; | - | ||||||||||||||||||||||||
1040 | AnchorVertex *v2 = connections.at(i).second; | - | ||||||||||||||||||||||||
1041 | AnchorData *edge = g.edgeData(v1, v2); | - | ||||||||||||||||||||||||
1042 | - | |||||||||||||||||||||||||
1043 | - | |||||||||||||||||||||||||
1044 | - | |||||||||||||||||||||||||
1045 | if (edge->type == AnchorData::Sequential
| 0 | ||||||||||||||||||||||||
1046 | || (edge->type == AnchorData::Parallel
| 0 | ||||||||||||||||||||||||
1047 | !anchorsFromSimplifiedVertices[orientation].contains(edge)
| 0 | ||||||||||||||||||||||||
1048 | - | |||||||||||||||||||||||||
1049 | g.takeEdge(v1, v2); | - | ||||||||||||||||||||||||
1050 | restoreSimplifiedAnchor(edge); | - | ||||||||||||||||||||||||
1051 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1052 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1053 | - | |||||||||||||||||||||||||
1054 | restoreVertices(orientation); | - | ||||||||||||||||||||||||
1055 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1056 | - | |||||||||||||||||||||||||
1057 | void QGraphicsAnchorLayoutPrivate::restoreVertices(Orientation orientation) | - | ||||||||||||||||||||||||
1058 | { | - | ||||||||||||||||||||||||
1059 | QGraphicsAnchorLayout * const q = q_func(); | - | ||||||||||||||||||||||||
1060 | - | |||||||||||||||||||||||||
1061 | Graph<AnchorVertex, AnchorData> &g = graph[orientation]; | - | ||||||||||||||||||||||||
1062 | QList<AnchorVertexPair *> &toRestore = simplifiedVertices[orientation]; | - | ||||||||||||||||||||||||
1063 | QList<AnchorData *> ¶llelAnchors = anchorsFromSimplifiedVertices[orientation]; | - | ||||||||||||||||||||||||
1064 | - | |||||||||||||||||||||||||
1065 | for (int i = parallelAnchors.count() - 1; i >= 0
| 0 | ||||||||||||||||||||||||
1066 | ParallelAnchorData *parallel = static_cast<ParallelAnchorData *>(parallelAnchors.at(i)); | - | ||||||||||||||||||||||||
1067 | restoreSimplifiedConstraints(parallel); | - | ||||||||||||||||||||||||
1068 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1069 | - | |||||||||||||||||||||||||
1070 | - | |||||||||||||||||||||||||
1071 | - | |||||||||||||||||||||||||
1072 | for (int i = toRestore.count() - 1; i >= 0
| 0 | ||||||||||||||||||||||||
1073 | AnchorVertexPair *pair = toRestore.at(i); | - | ||||||||||||||||||||||||
1074 | QList<AnchorVertex *> adjacents = g.adjacentVertices(pair); | - | ||||||||||||||||||||||||
1075 | - | |||||||||||||||||||||||||
1076 | - | |||||||||||||||||||||||||
1077 | - | |||||||||||||||||||||||||
1078 | AnchorVertex *first = pair->m_first; | - | ||||||||||||||||||||||||
1079 | AnchorVertex *second = pair->m_second; | - | ||||||||||||||||||||||||
1080 | g.createEdge(first, second, pair->m_removedAnchor); | - | ||||||||||||||||||||||||
1081 | - | |||||||||||||||||||||||||
1082 | - | |||||||||||||||||||||||||
1083 | for (int j = 0; j < pair->m_firstAnchors.count()
| 0 | ||||||||||||||||||||||||
1084 | AnchorData *ad = pair->m_firstAnchors.at(j); | - | ||||||||||||||||||||||||
1085 | ((!(ad->from == pair || ad->to == pair)) ? qt_assert("ad->from == pair || ad->to == pair",__FILE__,1326) : qt_noop()); | - | ||||||||||||||||||||||||
1086 | - | |||||||||||||||||||||||||
1087 | replaceVertex_helper(ad, pair, first); | - | ||||||||||||||||||||||||
1088 | g.createEdge(ad->from, ad->to, ad); | - | ||||||||||||||||||||||||
1089 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1090 | - | |||||||||||||||||||||||||
1091 | - | |||||||||||||||||||||||||
1092 | for (int j = 0; j < pair->m_secondAnchors.count()
| 0 | ||||||||||||||||||||||||
1093 | AnchorData *ad = pair->m_secondAnchors.at(j); | - | ||||||||||||||||||||||||
1094 | ((!(ad->from == pair || ad->to == pair)) ? qt_assert("ad->from == pair || ad->to == pair",__FILE__,1335) : qt_noop()); | - | ||||||||||||||||||||||||
1095 | - | |||||||||||||||||||||||||
1096 | replaceVertex_helper(ad, pair, second); | - | ||||||||||||||||||||||||
1097 | g.createEdge(ad->from, ad->to, ad); | - | ||||||||||||||||||||||||
1098 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1099 | - | |||||||||||||||||||||||||
1100 | for (int j = 0; j < adjacents.count()
| 0 | ||||||||||||||||||||||||
1101 | g.takeEdge(pair, adjacents.at(j)); | - | ||||||||||||||||||||||||
1102 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1103 | - | |||||||||||||||||||||||||
1104 | - | |||||||||||||||||||||||||
1105 | - | |||||||||||||||||||||||||
1106 | if (pair->m_item == q
| 0 | ||||||||||||||||||||||||
1107 | AnchorVertex *layoutVertex = first->m_item == q
| 0 | ||||||||||||||||||||||||
1108 | ((!(layoutVertex->m_item == q)) ? qt_assert("layoutVertex->m_item == q",__FILE__,1349) : qt_noop()); | - | ||||||||||||||||||||||||
1109 | changeLayoutVertex(orientation, pair, layoutVertex); | - | ||||||||||||||||||||||||
1110 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1111 | - | |||||||||||||||||||||||||
1112 | delete pair; | - | ||||||||||||||||||||||||
1113 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1114 | qDeleteAll(parallelAnchors); | - | ||||||||||||||||||||||||
1115 | parallelAnchors.clear(); | - | ||||||||||||||||||||||||
1116 | toRestore.clear(); | - | ||||||||||||||||||||||||
1117 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1118 | - | |||||||||||||||||||||||||
1119 | QGraphicsAnchorLayoutPrivate::Orientation | - | ||||||||||||||||||||||||
1120 | QGraphicsAnchorLayoutPrivate::edgeOrientation(Qt::AnchorPoint edge) | - | ||||||||||||||||||||||||
1121 | { | - | ||||||||||||||||||||||||
1122 | return never executed: edge > Qt::AnchorRight ? Vertical : Horizontal;return edge > Qt::AnchorRight ? Vertical : Horizontal; never executed: return edge > Qt::AnchorRight ? Vertical : Horizontal; | 0 | ||||||||||||||||||||||||
1123 | } | - | ||||||||||||||||||||||||
1124 | void QGraphicsAnchorLayoutPrivate::createLayoutEdges() | - | ||||||||||||||||||||||||
1125 | { | - | ||||||||||||||||||||||||
1126 | QGraphicsAnchorLayout * const q = q_func(); | - | ||||||||||||||||||||||||
1127 | QGraphicsLayoutItem *layout = q; | - | ||||||||||||||||||||||||
1128 | - | |||||||||||||||||||||||||
1129 | - | |||||||||||||||||||||||||
1130 | AnchorData *data = new AnchorData; | - | ||||||||||||||||||||||||
1131 | addAnchor_helper(layout, Qt::AnchorLeft, layout, | - | ||||||||||||||||||||||||
1132 | Qt::AnchorRight, data); | - | ||||||||||||||||||||||||
1133 | data->maxSize = ((1<<24)-1); | - | ||||||||||||||||||||||||
1134 | - | |||||||||||||||||||||||||
1135 | - | |||||||||||||||||||||||||
1136 | layoutFirstVertex[Horizontal] = internalVertex(layout, Qt::AnchorLeft); | - | ||||||||||||||||||||||||
1137 | layoutCentralVertex[Horizontal] = 0; | - | ||||||||||||||||||||||||
1138 | layoutLastVertex[Horizontal] = internalVertex(layout, Qt::AnchorRight); | - | ||||||||||||||||||||||||
1139 | - | |||||||||||||||||||||||||
1140 | - | |||||||||||||||||||||||||
1141 | data = new AnchorData; | - | ||||||||||||||||||||||||
1142 | addAnchor_helper(layout, Qt::AnchorTop, layout, | - | ||||||||||||||||||||||||
1143 | Qt::AnchorBottom, data); | - | ||||||||||||||||||||||||
1144 | data->maxSize = ((1<<24)-1); | - | ||||||||||||||||||||||||
1145 | - | |||||||||||||||||||||||||
1146 | - | |||||||||||||||||||||||||
1147 | layoutFirstVertex[Vertical] = internalVertex(layout, Qt::AnchorTop); | - | ||||||||||||||||||||||||
1148 | layoutCentralVertex[Vertical] = 0; | - | ||||||||||||||||||||||||
1149 | layoutLastVertex[Vertical] = internalVertex(layout, Qt::AnchorBottom); | - | ||||||||||||||||||||||||
1150 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1151 | - | |||||||||||||||||||||||||
1152 | void QGraphicsAnchorLayoutPrivate::deleteLayoutEdges() | - | ||||||||||||||||||||||||
1153 | { | - | ||||||||||||||||||||||||
1154 | QGraphicsAnchorLayout * const q = q_func(); | - | ||||||||||||||||||||||||
1155 | - | |||||||||||||||||||||||||
1156 | ((!(!internalVertex(q, Qt::AnchorHorizontalCenter))) ? qt_assert("!internalVertex(q, Qt::AnchorHorizontalCenter)",__FILE__,1407) : qt_noop()); | - | ||||||||||||||||||||||||
1157 | ((!(!internalVertex(q, Qt::AnchorVerticalCenter))) ? qt_assert("!internalVertex(q, Qt::AnchorVerticalCenter)",__FILE__,1408) : qt_noop()); | - | ||||||||||||||||||||||||
1158 | - | |||||||||||||||||||||||||
1159 | removeAnchor_helper(internalVertex(q, Qt::AnchorLeft), | - | ||||||||||||||||||||||||
1160 | internalVertex(q, Qt::AnchorRight)); | - | ||||||||||||||||||||||||
1161 | removeAnchor_helper(internalVertex(q, Qt::AnchorTop), | - | ||||||||||||||||||||||||
1162 | internalVertex(q, Qt::AnchorBottom)); | - | ||||||||||||||||||||||||
1163 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1164 | - | |||||||||||||||||||||||||
1165 | void QGraphicsAnchorLayoutPrivate::createItemEdges(QGraphicsLayoutItem *item) | - | ||||||||||||||||||||||||
1166 | { | - | ||||||||||||||||||||||||
1167 | items.append(item); | - | ||||||||||||||||||||||||
1168 | - | |||||||||||||||||||||||||
1169 | - | |||||||||||||||||||||||||
1170 | - | |||||||||||||||||||||||||
1171 | AnchorData *data = new AnchorData; | - | ||||||||||||||||||||||||
1172 | addAnchor_helper(item, Qt::AnchorLeft, item, Qt::AnchorRight, data); | - | ||||||||||||||||||||||||
1173 | data->refreshSizeHints(); | - | ||||||||||||||||||||||||
1174 | - | |||||||||||||||||||||||||
1175 | data = new AnchorData; | - | ||||||||||||||||||||||||
1176 | addAnchor_helper(item, Qt::AnchorTop, item, Qt::AnchorBottom, data); | - | ||||||||||||||||||||||||
1177 | data->refreshSizeHints(); | - | ||||||||||||||||||||||||
1178 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1179 | void QGraphicsAnchorLayoutPrivate::createCenterAnchors( | - | ||||||||||||||||||||||||
1180 | QGraphicsLayoutItem *item, Qt::AnchorPoint centerEdge) | - | ||||||||||||||||||||||||
1181 | { | - | ||||||||||||||||||||||||
1182 | QGraphicsAnchorLayout * const q = q_func(); | - | ||||||||||||||||||||||||
1183 | - | |||||||||||||||||||||||||
1184 | Orientation orientation; | - | ||||||||||||||||||||||||
1185 | switch (centerEdge) { | - | ||||||||||||||||||||||||
1186 | case never executed: Qt::AnchorHorizontalCenter:case Qt::AnchorHorizontalCenter: never executed: case Qt::AnchorHorizontalCenter: | 0 | ||||||||||||||||||||||||
1187 | orientation = Horizontal; | - | ||||||||||||||||||||||||
1188 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1189 | case never executed: Qt::AnchorVerticalCenter:case Qt::AnchorVerticalCenter: never executed: case Qt::AnchorVerticalCenter: | 0 | ||||||||||||||||||||||||
1190 | orientation = Vertical; | - | ||||||||||||||||||||||||
1191 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1192 | default never executed: :default: never executed: default: | 0 | ||||||||||||||||||||||||
1193 | - | |||||||||||||||||||||||||
1194 | return; never executed: return; | 0 | ||||||||||||||||||||||||
1195 | } | - | ||||||||||||||||||||||||
1196 | - | |||||||||||||||||||||||||
1197 | - | |||||||||||||||||||||||||
1198 | if (internalVertex(item, centerEdge)
| 0 | ||||||||||||||||||||||||
1199 | return; never executed: return; | 0 | ||||||||||||||||||||||||
1200 | - | |||||||||||||||||||||||||
1201 | - | |||||||||||||||||||||||||
1202 | Qt::AnchorPoint firstEdge; | - | ||||||||||||||||||||||||
1203 | Qt::AnchorPoint lastEdge; | - | ||||||||||||||||||||||||
1204 | - | |||||||||||||||||||||||||
1205 | if (orientation == Horizontal
| 0 | ||||||||||||||||||||||||
1206 | firstEdge = Qt::AnchorLeft; | - | ||||||||||||||||||||||||
1207 | lastEdge = Qt::AnchorRight; | - | ||||||||||||||||||||||||
1208 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
1209 | firstEdge = Qt::AnchorTop; | - | ||||||||||||||||||||||||
1210 | lastEdge = Qt::AnchorBottom; | - | ||||||||||||||||||||||||
1211 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1212 | - | |||||||||||||||||||||||||
1213 | AnchorVertex *first = internalVertex(item, firstEdge); | - | ||||||||||||||||||||||||
1214 | AnchorVertex *last = internalVertex(item, lastEdge); | - | ||||||||||||||||||||||||
1215 | ((!(first && last)) ? qt_assert("first && last",__FILE__,1478) : qt_noop()); | - | ||||||||||||||||||||||||
1216 | - | |||||||||||||||||||||||||
1217 | - | |||||||||||||||||||||||||
1218 | QSimplexConstraint *c = new QSimplexConstraint; | - | ||||||||||||||||||||||||
1219 | - | |||||||||||||||||||||||||
1220 | AnchorData *data = new AnchorData; | - | ||||||||||||||||||||||||
1221 | c->variables.insert(data, 1.0); | - | ||||||||||||||||||||||||
1222 | addAnchor_helper(item, firstEdge, item, centerEdge, data); | - | ||||||||||||||||||||||||
1223 | data->isCenterAnchor = true; | - | ||||||||||||||||||||||||
1224 | data->dependency = AnchorData::Master; | - | ||||||||||||||||||||||||
1225 | data->refreshSizeHints(); | - | ||||||||||||||||||||||||
1226 | - | |||||||||||||||||||||||||
1227 | data = new AnchorData; | - | ||||||||||||||||||||||||
1228 | c->variables.insert(data, -1.0); | - | ||||||||||||||||||||||||
1229 | addAnchor_helper(item, centerEdge, item, lastEdge, data); | - | ||||||||||||||||||||||||
1230 | data->isCenterAnchor = true; | - | ||||||||||||||||||||||||
1231 | data->dependency = AnchorData::Slave; | - | ||||||||||||||||||||||||
1232 | data->refreshSizeHints(); | - | ||||||||||||||||||||||||
1233 | - | |||||||||||||||||||||||||
1234 | itemCenterConstraints[orientation].append(c); | - | ||||||||||||||||||||||||
1235 | - | |||||||||||||||||||||||||
1236 | - | |||||||||||||||||||||||||
1237 | removeAnchor_helper(first, last); | - | ||||||||||||||||||||||||
1238 | - | |||||||||||||||||||||||||
1239 | if (item == q
| 0 | ||||||||||||||||||||||||
1240 | layoutCentralVertex[orientation] = internalVertex(q, centerEdge); | - | ||||||||||||||||||||||||
1241 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1242 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1243 | - | |||||||||||||||||||||||||
1244 | void QGraphicsAnchorLayoutPrivate::removeCenterAnchors( | - | ||||||||||||||||||||||||
1245 | QGraphicsLayoutItem *item, Qt::AnchorPoint centerEdge, | - | ||||||||||||||||||||||||
1246 | bool substitute) | - | ||||||||||||||||||||||||
1247 | { | - | ||||||||||||||||||||||||
1248 | QGraphicsAnchorLayout * const q = q_func(); | - | ||||||||||||||||||||||||
1249 | - | |||||||||||||||||||||||||
1250 | Orientation orientation; | - | ||||||||||||||||||||||||
1251 | switch (centerEdge) { | - | ||||||||||||||||||||||||
1252 | case never executed: Qt::AnchorHorizontalCenter:case Qt::AnchorHorizontalCenter: never executed: case Qt::AnchorHorizontalCenter: | 0 | ||||||||||||||||||||||||
1253 | orientation = Horizontal; | - | ||||||||||||||||||||||||
1254 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1255 | case never executed: Qt::AnchorVerticalCenter:case Qt::AnchorVerticalCenter: never executed: case Qt::AnchorVerticalCenter: | 0 | ||||||||||||||||||||||||
1256 | orientation = Vertical; | - | ||||||||||||||||||||||||
1257 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1258 | default never executed: :default: never executed: default: | 0 | ||||||||||||||||||||||||
1259 | - | |||||||||||||||||||||||||
1260 | return; never executed: return; | 0 | ||||||||||||||||||||||||
1261 | } | - | ||||||||||||||||||||||||
1262 | - | |||||||||||||||||||||||||
1263 | - | |||||||||||||||||||||||||
1264 | Qt::AnchorPoint firstEdge; | - | ||||||||||||||||||||||||
1265 | Qt::AnchorPoint lastEdge; | - | ||||||||||||||||||||||||
1266 | - | |||||||||||||||||||||||||
1267 | if (orientation == Horizontal
| 0 | ||||||||||||||||||||||||
1268 | firstEdge = Qt::AnchorLeft; | - | ||||||||||||||||||||||||
1269 | lastEdge = Qt::AnchorRight; | - | ||||||||||||||||||||||||
1270 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
1271 | firstEdge = Qt::AnchorTop; | - | ||||||||||||||||||||||||
1272 | lastEdge = Qt::AnchorBottom; | - | ||||||||||||||||||||||||
1273 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1274 | - | |||||||||||||||||||||||||
1275 | AnchorVertex *center = internalVertex(item, centerEdge); | - | ||||||||||||||||||||||||
1276 | if (!center
| 0 | ||||||||||||||||||||||||
1277 | return; never executed: return; | 0 | ||||||||||||||||||||||||
1278 | AnchorVertex *first = internalVertex(item, firstEdge); | - | ||||||||||||||||||||||||
1279 | - | |||||||||||||||||||||||||
1280 | ((!(first)) ? qt_assert("first",__FILE__,1543) : qt_noop()); | - | ||||||||||||||||||||||||
1281 | ((!(center)) ? qt_assert("center",__FILE__,1544) : qt_noop()); | - | ||||||||||||||||||||||||
1282 | - | |||||||||||||||||||||||||
1283 | Graph<AnchorVertex, AnchorData> &g = graph[orientation]; | - | ||||||||||||||||||||||||
1284 | - | |||||||||||||||||||||||||
1285 | - | |||||||||||||||||||||||||
1286 | AnchorData *oldData = g.edgeData(first, center); | - | ||||||||||||||||||||||||
1287 | - | |||||||||||||||||||||||||
1288 | for (int i = itemCenterConstraints[orientation].count() - 1; i >= 0
| 0 | ||||||||||||||||||||||||
1289 | if (itemCenterConstraints[orientation].at(i)->variables.contains(oldData)
| 0 | ||||||||||||||||||||||||
1290 | delete itemCenterConstraints[orientation].takeAt(i); | - | ||||||||||||||||||||||||
1291 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1292 | } | - | ||||||||||||||||||||||||
1293 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1294 | - | |||||||||||||||||||||||||
1295 | if (substitute
| 0 | ||||||||||||||||||||||||
1296 | - | |||||||||||||||||||||||||
1297 | AnchorData *data = new AnchorData; | - | ||||||||||||||||||||||||
1298 | addAnchor_helper(item, firstEdge, item, lastEdge, data); | - | ||||||||||||||||||||||||
1299 | data->refreshSizeHints(); | - | ||||||||||||||||||||||||
1300 | - | |||||||||||||||||||||||||
1301 | - | |||||||||||||||||||||||||
1302 | removeAnchor_helper(first, center); | - | ||||||||||||||||||||||||
1303 | removeAnchor_helper(center, internalVertex(item, lastEdge)); | - | ||||||||||||||||||||||||
1304 | - | |||||||||||||||||||||||||
1305 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
1306 | - | |||||||||||||||||||||||||
1307 | - | |||||||||||||||||||||||||
1308 | QList<AnchorVertex*> adjacents = g.adjacentVertices(center); | - | ||||||||||||||||||||||||
1309 | for (int i = 0; i < adjacents.count()
| 0 | ||||||||||||||||||||||||
1310 | AnchorVertex *v = adjacents.at(i); | - | ||||||||||||||||||||||||
1311 | if (v->m_item != item
| 0 | ||||||||||||||||||||||||
1312 | removeAnchor_helper(center, internalVertex(v->m_item, v->m_edge)); | - | ||||||||||||||||||||||||
1313 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1314 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1315 | - | |||||||||||||||||||||||||
1316 | - | |||||||||||||||||||||||||
1317 | - | |||||||||||||||||||||||||
1318 | removeAnchor_helper(first, internalVertex(item, lastEdge)); | - | ||||||||||||||||||||||||
1319 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1320 | - | |||||||||||||||||||||||||
1321 | if (item == q
| 0 | ||||||||||||||||||||||||
1322 | layoutCentralVertex[orientation] = 0; | - | ||||||||||||||||||||||||
1323 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1324 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1325 | - | |||||||||||||||||||||||||
1326 | - | |||||||||||||||||||||||||
1327 | void QGraphicsAnchorLayoutPrivate::removeCenterConstraints(QGraphicsLayoutItem *item, | - | ||||||||||||||||||||||||
1328 | Orientation orientation) | - | ||||||||||||||||||||||||
1329 | { | - | ||||||||||||||||||||||||
1330 | - | |||||||||||||||||||||||||
1331 | - | |||||||||||||||||||||||||
1332 | - | |||||||||||||||||||||||||
1333 | - | |||||||||||||||||||||||||
1334 | - | |||||||||||||||||||||||||
1335 | AnchorVertex *first = internalVertex(item, orientation == Horizontal ? | - | ||||||||||||||||||||||||
1336 | Qt::AnchorLeft : | - | ||||||||||||||||||||||||
1337 | Qt::AnchorTop); | - | ||||||||||||||||||||||||
1338 | AnchorVertex *center = internalVertex(item, orientation == Horizontal ? | - | ||||||||||||||||||||||||
1339 | Qt::AnchorHorizontalCenter : | - | ||||||||||||||||||||||||
1340 | Qt::AnchorVerticalCenter); | - | ||||||||||||||||||||||||
1341 | - | |||||||||||||||||||||||||
1342 | - | |||||||||||||||||||||||||
1343 | if (!center
| 0 | ||||||||||||||||||||||||
1344 | return; never executed: return; | 0 | ||||||||||||||||||||||||
1345 | - | |||||||||||||||||||||||||
1346 | ((!(first)) ? qt_assert("first",__FILE__,1609) : qt_noop()); | - | ||||||||||||||||||||||||
1347 | AnchorData *internalAnchor = graph[orientation].edgeData(first, center); | - | ||||||||||||||||||||||||
1348 | - | |||||||||||||||||||||||||
1349 | - | |||||||||||||||||||||||||
1350 | for (int i = 0; i < itemCenterConstraints[orientation].size()
| 0 | ||||||||||||||||||||||||
1351 | if (itemCenterConstraints[orientation].at(i)->variables.contains(internalAnchor)
| 0 | ||||||||||||||||||||||||
1352 | delete itemCenterConstraints[orientation].takeAt(i); | - | ||||||||||||||||||||||||
1353 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1354 | } | - | ||||||||||||||||||||||||
1355 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1356 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1357 | QGraphicsAnchor *QGraphicsAnchorLayoutPrivate::addAnchor(QGraphicsLayoutItem *firstItem, | - | ||||||||||||||||||||||||
1358 | Qt::AnchorPoint firstEdge, | - | ||||||||||||||||||||||||
1359 | QGraphicsLayoutItem *secondItem, | - | ||||||||||||||||||||||||
1360 | Qt::AnchorPoint secondEdge, | - | ||||||||||||||||||||||||
1361 | qreal *spacing) | - | ||||||||||||||||||||||||
1362 | { | - | ||||||||||||||||||||||||
1363 | QGraphicsAnchorLayout * const q = q_func(); | - | ||||||||||||||||||||||||
1364 | if ((
| 0 | ||||||||||||||||||||||||
1365 | QMessageLogger(__FILE__, 1641, __PRETTY_FUNCTION__).warning("QGraphicsAnchorLayout::addAnchor(): " | - | ||||||||||||||||||||||||
1366 | "Cannot anchor NULL items"); | - | ||||||||||||||||||||||||
1367 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
1368 | } | - | ||||||||||||||||||||||||
1369 | - | |||||||||||||||||||||||||
1370 | if (firstItem == secondItem
| 0 | ||||||||||||||||||||||||
1371 | QMessageLogger(__FILE__, 1647, __PRETTY_FUNCTION__).warning("QGraphicsAnchorLayout::addAnchor(): " | - | ||||||||||||||||||||||||
1372 | "Cannot anchor the item to itself"); | - | ||||||||||||||||||||||||
1373 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
1374 | } | - | ||||||||||||||||||||||||
1375 | - | |||||||||||||||||||||||||
1376 | if (edgeOrientation(secondEdge) != edgeOrientation(firstEdge)
| 0 | ||||||||||||||||||||||||
1377 | QMessageLogger(__FILE__, 1653, __PRETTY_FUNCTION__).warning("QGraphicsAnchorLayout::addAnchor(): " | - | ||||||||||||||||||||||||
1378 | "Cannot anchor edges of different orientations"); | - | ||||||||||||||||||||||||
1379 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
1380 | } | - | ||||||||||||||||||||||||
1381 | - | |||||||||||||||||||||||||
1382 | const QGraphicsLayoutItem *parentWidget = q->parentLayoutItem(); | - | ||||||||||||||||||||||||
1383 | if (firstItem == parentWidget
| 0 | ||||||||||||||||||||||||
1384 | QMessageLogger(__FILE__, 1660, __PRETTY_FUNCTION__).warning("QGraphicsAnchorLayout::addAnchor(): " | - | ||||||||||||||||||||||||
1385 | "You cannot add the parent of the layout to the layout."); | - | ||||||||||||||||||||||||
1386 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
1387 | } | - | ||||||||||||||||||||||||
1388 | if (firstItem != q
| 0 | ||||||||||||||||||||||||
1389 | createItemEdges(firstItem); | - | ||||||||||||||||||||||||
1390 | addChildLayoutItem(firstItem); | - | ||||||||||||||||||||||||
1391 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1392 | if (secondItem != q
| 0 | ||||||||||||||||||||||||
1393 | createItemEdges(secondItem); | - | ||||||||||||||||||||||||
1394 | addChildLayoutItem(secondItem); | - | ||||||||||||||||||||||||
1395 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1396 | - | |||||||||||||||||||||||||
1397 | - | |||||||||||||||||||||||||
1398 | createCenterAnchors(firstItem, firstEdge); | - | ||||||||||||||||||||||||
1399 | createCenterAnchors(secondItem, secondEdge); | - | ||||||||||||||||||||||||
1400 | - | |||||||||||||||||||||||||
1401 | - | |||||||||||||||||||||||||
1402 | correctEdgeDirection(firstItem, firstEdge, secondItem, secondEdge); | - | ||||||||||||||||||||||||
1403 | - | |||||||||||||||||||||||||
1404 | AnchorData *data = new AnchorData; | - | ||||||||||||||||||||||||
1405 | QGraphicsAnchor *graphicsAnchor = acquireGraphicsAnchor(data); | - | ||||||||||||||||||||||||
1406 | - | |||||||||||||||||||||||||
1407 | addAnchor_helper(firstItem, firstEdge, secondItem, secondEdge, data); | - | ||||||||||||||||||||||||
1408 | - | |||||||||||||||||||||||||
1409 | if (spacing
| 0 | ||||||||||||||||||||||||
1410 | graphicsAnchor->setSpacing(*spacing); | - | ||||||||||||||||||||||||
1411 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
1412 | if (firstItem == q
| 0 | ||||||||||||||||||||||||
1413 | || secondItem == q
| 0 | ||||||||||||||||||||||||
1414 | || pickEdge(firstEdge, Horizontal) == Qt::AnchorHorizontalCenter
| 0 | ||||||||||||||||||||||||
1415 | || oppositeEdge(firstEdge) != secondEdge
| 0 | ||||||||||||||||||||||||
1416 | graphicsAnchor->setSpacing(0); | - | ||||||||||||||||||||||||
1417 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
1418 | graphicsAnchor->unsetSpacing(); | - | ||||||||||||||||||||||||
1419 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1420 | } | - | ||||||||||||||||||||||||
1421 | - | |||||||||||||||||||||||||
1422 | return never executed: graphicsAnchor;return graphicsAnchor; never executed: return graphicsAnchor; | 0 | ||||||||||||||||||||||||
1423 | } | - | ||||||||||||||||||||||||
1424 | void QGraphicsAnchorLayoutPrivate::addAnchor_helper(QGraphicsLayoutItem *firstItem, | - | ||||||||||||||||||||||||
1425 | Qt::AnchorPoint firstEdge, | - | ||||||||||||||||||||||||
1426 | QGraphicsLayoutItem *secondItem, | - | ||||||||||||||||||||||||
1427 | Qt::AnchorPoint secondEdge, | - | ||||||||||||||||||||||||
1428 | AnchorData *data) | - | ||||||||||||||||||||||||
1429 | { | - | ||||||||||||||||||||||||
1430 | QGraphicsAnchorLayout * const q = q_func(); | - | ||||||||||||||||||||||||
1431 | - | |||||||||||||||||||||||||
1432 | const Orientation orientation = edgeOrientation(firstEdge); | - | ||||||||||||||||||||||||
1433 | - | |||||||||||||||||||||||||
1434 | - | |||||||||||||||||||||||||
1435 | AnchorVertex *v1 = addInternalVertex(firstItem, firstEdge); | - | ||||||||||||||||||||||||
1436 | AnchorVertex *v2 = addInternalVertex(secondItem, secondEdge); | - | ||||||||||||||||||||||||
1437 | - | |||||||||||||||||||||||||
1438 | - | |||||||||||||||||||||||||
1439 | if (graph[orientation].edgeData(v1, v2)
| 0 | ||||||||||||||||||||||||
1440 | removeAnchor_helper(v1, v2); | - | ||||||||||||||||||||||||
1441 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1442 | - | |||||||||||||||||||||||||
1443 | - | |||||||||||||||||||||||||
1444 | if (firstItem == secondItem
| 0 | ||||||||||||||||||||||||
1445 | data->item = firstItem; never executed: data->item = firstItem; | 0 | ||||||||||||||||||||||||
1446 | - | |||||||||||||||||||||||||
1447 | data->orientation = orientation; | - | ||||||||||||||||||||||||
1448 | - | |||||||||||||||||||||||||
1449 | - | |||||||||||||||||||||||||
1450 | - | |||||||||||||||||||||||||
1451 | - | |||||||||||||||||||||||||
1452 | data->from = v1; | - | ||||||||||||||||||||||||
1453 | data->to = v2; | - | ||||||||||||||||||||||||
1454 | - | |||||||||||||||||||||||||
1455 | data->name = QString::fromLatin1("%1 --to--> %2").arg(v1->toString()).arg(v2->toString()); | - | ||||||||||||||||||||||||
1456 | - | |||||||||||||||||||||||||
1457 | - | |||||||||||||||||||||||||
1458 | - | |||||||||||||||||||||||||
1459 | data->isLayoutAnchor = (data->item == q); | - | ||||||||||||||||||||||||
1460 | - | |||||||||||||||||||||||||
1461 | graph[orientation].createEdge(v1, v2, data); | - | ||||||||||||||||||||||||
1462 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1463 | - | |||||||||||||||||||||||||
1464 | QGraphicsAnchor *QGraphicsAnchorLayoutPrivate::getAnchor(QGraphicsLayoutItem *firstItem, | - | ||||||||||||||||||||||||
1465 | Qt::AnchorPoint firstEdge, | - | ||||||||||||||||||||||||
1466 | QGraphicsLayoutItem *secondItem, | - | ||||||||||||||||||||||||
1467 | Qt::AnchorPoint secondEdge) | - | ||||||||||||||||||||||||
1468 | { | - | ||||||||||||||||||||||||
1469 | - | |||||||||||||||||||||||||
1470 | if (firstItem == secondItem
| 0 | ||||||||||||||||||||||||
1471 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
1472 | - | |||||||||||||||||||||||||
1473 | const Orientation orientation = edgeOrientation(firstEdge); | - | ||||||||||||||||||||||||
1474 | AnchorVertex *v1 = internalVertex(firstItem, firstEdge); | - | ||||||||||||||||||||||||
1475 | AnchorVertex *v2 = internalVertex(secondItem, secondEdge); | - | ||||||||||||||||||||||||
1476 | - | |||||||||||||||||||||||||
1477 | QGraphicsAnchor *graphicsAnchor = 0; | - | ||||||||||||||||||||||||
1478 | - | |||||||||||||||||||||||||
1479 | AnchorData *data = graph[orientation].edgeData(v1, v2); | - | ||||||||||||||||||||||||
1480 | if (data
| 0 | ||||||||||||||||||||||||
1481 | - | |||||||||||||||||||||||||
1482 | - | |||||||||||||||||||||||||
1483 | - | |||||||||||||||||||||||||
1484 | - | |||||||||||||||||||||||||
1485 | - | |||||||||||||||||||||||||
1486 | - | |||||||||||||||||||||||||
1487 | ((!(data->graphicsAnchor)) ? qt_assert("data->graphicsAnchor",__FILE__,1790) : qt_noop()); | - | ||||||||||||||||||||||||
1488 | graphicsAnchor = data->graphicsAnchor; | - | ||||||||||||||||||||||||
1489 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1490 | return never executed: graphicsAnchor;return graphicsAnchor; never executed: return graphicsAnchor; | 0 | ||||||||||||||||||||||||
1491 | } | - | ||||||||||||||||||||||||
1492 | - | |||||||||||||||||||||||||
1493 | - | |||||||||||||||||||||||||
1494 | - | |||||||||||||||||||||||||
1495 | - | |||||||||||||||||||||||||
1496 | - | |||||||||||||||||||||||||
1497 | - | |||||||||||||||||||||||||
1498 | - | |||||||||||||||||||||||||
1499 | void QGraphicsAnchorLayoutPrivate::removeAnchor(AnchorVertex *firstVertex, | - | ||||||||||||||||||||||||
1500 | AnchorVertex *secondVertex) | - | ||||||||||||||||||||||||
1501 | { | - | ||||||||||||||||||||||||
1502 | QGraphicsAnchorLayout * const q = q_func(); | - | ||||||||||||||||||||||||
1503 | - | |||||||||||||||||||||||||
1504 | - | |||||||||||||||||||||||||
1505 | QGraphicsLayoutItem *firstItem = firstVertex->m_item; | - | ||||||||||||||||||||||||
1506 | QGraphicsLayoutItem *secondItem = secondVertex->m_item; | - | ||||||||||||||||||||||||
1507 | - | |||||||||||||||||||||||||
1508 | - | |||||||||||||||||||||||||
1509 | removeAnchor_helper(firstVertex, secondVertex); | - | ||||||||||||||||||||||||
1510 | - | |||||||||||||||||||||||||
1511 | - | |||||||||||||||||||||||||
1512 | firstVertex = secondVertex = 0; | - | ||||||||||||||||||||||||
1513 | - | |||||||||||||||||||||||||
1514 | - | |||||||||||||||||||||||||
1515 | bool keepFirstItem = false; | - | ||||||||||||||||||||||||
1516 | bool keepSecondItem = false; | - | ||||||||||||||||||||||||
1517 | - | |||||||||||||||||||||||||
1518 | QPair<AnchorVertex *, int> v; | - | ||||||||||||||||||||||||
1519 | int refcount = -1; | - | ||||||||||||||||||||||||
1520 | - | |||||||||||||||||||||||||
1521 | if (firstItem != q
| 0 | ||||||||||||||||||||||||
1522 | for (int i = Qt::AnchorLeft; i <= Qt::AnchorBottom
| 0 | ||||||||||||||||||||||||
1523 | v = m_vertexList.value(qMakePair(firstItem, static_cast<Qt::AnchorPoint>(i))); | - | ||||||||||||||||||||||||
1524 | if (v.first
| 0 | ||||||||||||||||||||||||
1525 | if (i == Qt::AnchorHorizontalCenter
| 0 | ||||||||||||||||||||||||
1526 | refcount = 2; never executed: refcount = 2; | 0 | ||||||||||||||||||||||||
1527 | else | - | ||||||||||||||||||||||||
1528 | refcount = 1; never executed: refcount = 1; | 0 | ||||||||||||||||||||||||
1529 | - | |||||||||||||||||||||||||
1530 | if (v.second > refcount
| 0 | ||||||||||||||||||||||||
1531 | keepFirstItem = true; | - | ||||||||||||||||||||||||
1532 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1533 | } | - | ||||||||||||||||||||||||
1534 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1535 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1536 | } never executed: elseend of block | 0 | ||||||||||||||||||||||||
1537 | keepFirstItem = true; never executed: keepFirstItem = true; | 0 | ||||||||||||||||||||||||
1538 | - | |||||||||||||||||||||||||
1539 | if (secondItem != q
| 0 | ||||||||||||||||||||||||
1540 | for (int i = Qt::AnchorLeft; i <= Qt::AnchorBottom
| 0 | ||||||||||||||||||||||||
1541 | v = m_vertexList.value(qMakePair(secondItem, static_cast<Qt::AnchorPoint>(i))); | - | ||||||||||||||||||||||||
1542 | if (v.first
| 0 | ||||||||||||||||||||||||
1543 | if (i == Qt::AnchorHorizontalCenter
| 0 | ||||||||||||||||||||||||
1544 | refcount = 2; never executed: refcount = 2; | 0 | ||||||||||||||||||||||||
1545 | else | - | ||||||||||||||||||||||||
1546 | refcount = 1; never executed: refcount = 1; | 0 | ||||||||||||||||||||||||
1547 | - | |||||||||||||||||||||||||
1548 | if (v.second > refcount
| 0 | ||||||||||||||||||||||||
1549 | keepSecondItem = true; | - | ||||||||||||||||||||||||
1550 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1551 | } | - | ||||||||||||||||||||||||
1552 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1553 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1554 | } never executed: elseend of block | 0 | ||||||||||||||||||||||||
1555 | keepSecondItem = true; never executed: keepSecondItem = true; | 0 | ||||||||||||||||||||||||
1556 | - | |||||||||||||||||||||||||
1557 | if (!keepFirstItem
| 0 | ||||||||||||||||||||||||
1558 | q->removeAt(items.indexOf(firstItem)); never executed: q->removeAt(items.indexOf(firstItem)); | 0 | ||||||||||||||||||||||||
1559 | - | |||||||||||||||||||||||||
1560 | if (!keepSecondItem
| 0 | ||||||||||||||||||||||||
1561 | q->removeAt(items.indexOf(secondItem)); never executed: q->removeAt(items.indexOf(secondItem)); | 0 | ||||||||||||||||||||||||
1562 | - | |||||||||||||||||||||||||
1563 | - | |||||||||||||||||||||||||
1564 | q->invalidate(); | - | ||||||||||||||||||||||||
1565 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1566 | - | |||||||||||||||||||||||||
1567 | - | |||||||||||||||||||||||||
1568 | - | |||||||||||||||||||||||||
1569 | - | |||||||||||||||||||||||||
1570 | - | |||||||||||||||||||||||||
1571 | - | |||||||||||||||||||||||||
1572 | - | |||||||||||||||||||||||||
1573 | void QGraphicsAnchorLayoutPrivate::removeAnchor_helper(AnchorVertex *v1, AnchorVertex *v2) | - | ||||||||||||||||||||||||
1574 | { | - | ||||||||||||||||||||||||
1575 | ((!(v1 && v2)) ? qt_assert("v1 && v2",__FILE__,1878) : qt_noop()); | - | ||||||||||||||||||||||||
1576 | - | |||||||||||||||||||||||||
1577 | - | |||||||||||||||||||||||||
1578 | const Orientation o = edgeOrientation(v1->m_edge); | - | ||||||||||||||||||||||||
1579 | graph[o].removeEdge(v1, v2); | - | ||||||||||||||||||||||||
1580 | - | |||||||||||||||||||||||||
1581 | - | |||||||||||||||||||||||||
1582 | removeInternalVertex(v1->m_item, v1->m_edge); | - | ||||||||||||||||||||||||
1583 | removeInternalVertex(v2->m_item, v2->m_edge); | - | ||||||||||||||||||||||||
1584 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1585 | - | |||||||||||||||||||||||||
1586 | AnchorVertex *QGraphicsAnchorLayoutPrivate::addInternalVertex(QGraphicsLayoutItem *item, | - | ||||||||||||||||||||||||
1587 | Qt::AnchorPoint edge) | - | ||||||||||||||||||||||||
1588 | { | - | ||||||||||||||||||||||||
1589 | QPair<QGraphicsLayoutItem *, Qt::AnchorPoint> pair(item, edge); | - | ||||||||||||||||||||||||
1590 | QPair<AnchorVertex *, int> v = m_vertexList.value(pair); | - | ||||||||||||||||||||||||
1591 | - | |||||||||||||||||||||||||
1592 | if (!v.first
| 0 | ||||||||||||||||||||||||
1593 | ((!(v.second == 0)) ? qt_assert("v.second == 0",__FILE__,1896) : qt_noop()); | - | ||||||||||||||||||||||||
1594 | v.first = new AnchorVertex(item, edge); | - | ||||||||||||||||||||||||
1595 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1596 | v.second++; | - | ||||||||||||||||||||||||
1597 | m_vertexList.insert(pair, v); | - | ||||||||||||||||||||||||
1598 | return never executed: v.first;return v.first; never executed: return v.first; | 0 | ||||||||||||||||||||||||
1599 | } | - | ||||||||||||||||||||||||
1600 | - | |||||||||||||||||||||||||
1601 | - | |||||||||||||||||||||||||
1602 | - | |||||||||||||||||||||||||
1603 | - | |||||||||||||||||||||||||
1604 | - | |||||||||||||||||||||||||
1605 | - | |||||||||||||||||||||||||
1606 | - | |||||||||||||||||||||||||
1607 | void QGraphicsAnchorLayoutPrivate::removeInternalVertex(QGraphicsLayoutItem *item, | - | ||||||||||||||||||||||||
1608 | Qt::AnchorPoint edge) | - | ||||||||||||||||||||||||
1609 | { | - | ||||||||||||||||||||||||
1610 | QPair<QGraphicsLayoutItem *, Qt::AnchorPoint> pair(item, edge); | - | ||||||||||||||||||||||||
1611 | QPair<AnchorVertex *, int> v = m_vertexList.value(pair); | - | ||||||||||||||||||||||||
1612 | - | |||||||||||||||||||||||||
1613 | if (!v.first
| 0 | ||||||||||||||||||||||||
1614 | QMessageLogger(__FILE__, 1917, __PRETTY_FUNCTION__).warning("This item with this edge is not in the graph"); | - | ||||||||||||||||||||||||
1615 | return; never executed: return; | 0 | ||||||||||||||||||||||||
1616 | } | - | ||||||||||||||||||||||||
1617 | - | |||||||||||||||||||||||||
1618 | v.second--; | - | ||||||||||||||||||||||||
1619 | if (v.second == 0
| 0 | ||||||||||||||||||||||||
1620 | - | |||||||||||||||||||||||||
1621 | m_vertexList.remove(pair); | - | ||||||||||||||||||||||||
1622 | delete v.first; | - | ||||||||||||||||||||||||
1623 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
1624 | - | |||||||||||||||||||||||||
1625 | m_vertexList.insert(pair, v); | - | ||||||||||||||||||||||||
1626 | - | |||||||||||||||||||||||||
1627 | if ((
| 0 | ||||||||||||||||||||||||
1628 | ((
| 0 | ||||||||||||||||||||||||
1629 | (
| 0 | ||||||||||||||||||||||||
1630 | removeCenterAnchors(item, edge, true); | - | ||||||||||||||||||||||||
1631 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1632 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1633 | } | - | ||||||||||||||||||||||||
1634 | - | |||||||||||||||||||||||||
1635 | void QGraphicsAnchorLayoutPrivate::removeVertex(QGraphicsLayoutItem *item, Qt::AnchorPoint edge) | - | ||||||||||||||||||||||||
1636 | { | - | ||||||||||||||||||||||||
1637 | if (AnchorVertex *v = internalVertex(item, edge)
| 0 | ||||||||||||||||||||||||
1638 | Graph<AnchorVertex, AnchorData> &g = graph[edgeOrientation(edge)]; | - | ||||||||||||||||||||||||
1639 | const QList<AnchorVertex *> allVertices = graph[edgeOrientation(edge)].adjacentVertices(v); | - | ||||||||||||||||||||||||
1640 | for (auto *v2 : allVertices) { | - | ||||||||||||||||||||||||
1641 | g.removeEdge(v, v2); | - | ||||||||||||||||||||||||
1642 | removeInternalVertex(item, edge); | - | ||||||||||||||||||||||||
1643 | removeInternalVertex(v2->m_item, v2->m_edge); | - | ||||||||||||||||||||||||
1644 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1645 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1646 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1647 | - | |||||||||||||||||||||||||
1648 | void QGraphicsAnchorLayoutPrivate::removeAnchors(QGraphicsLayoutItem *item) | - | ||||||||||||||||||||||||
1649 | { | - | ||||||||||||||||||||||||
1650 | - | |||||||||||||||||||||||||
1651 | removeCenterAnchors(item, Qt::AnchorHorizontalCenter, false); | - | ||||||||||||||||||||||||
1652 | removeVertex(item, Qt::AnchorLeft); | - | ||||||||||||||||||||||||
1653 | removeVertex(item, Qt::AnchorRight); | - | ||||||||||||||||||||||||
1654 | - | |||||||||||||||||||||||||
1655 | removeCenterAnchors(item, Qt::AnchorVerticalCenter, false); | - | ||||||||||||||||||||||||
1656 | removeVertex(item, Qt::AnchorTop); | - | ||||||||||||||||||||||||
1657 | removeVertex(item, Qt::AnchorBottom); | - | ||||||||||||||||||||||||
1658 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1659 | void QGraphicsAnchorLayoutPrivate::correctEdgeDirection(QGraphicsLayoutItem *&firstItem, | - | ||||||||||||||||||||||||
1660 | Qt::AnchorPoint &firstEdge, | - | ||||||||||||||||||||||||
1661 | QGraphicsLayoutItem *&secondItem, | - | ||||||||||||||||||||||||
1662 | Qt::AnchorPoint &secondEdge) | - | ||||||||||||||||||||||||
1663 | { | - | ||||||||||||||||||||||||
1664 | QGraphicsAnchorLayout * const q = q_func(); | - | ||||||||||||||||||||||||
1665 | - | |||||||||||||||||||||||||
1666 | if ((
| 0 | ||||||||||||||||||||||||
1667 | - | |||||||||||||||||||||||||
1668 | - | |||||||||||||||||||||||||
1669 | if (firstEdge < secondEdge
| 0 | ||||||||||||||||||||||||
1670 | qSwap(firstItem, secondItem); | - | ||||||||||||||||||||||||
1671 | qSwap(firstEdge, secondEdge); | - | ||||||||||||||||||||||||
1672 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1673 | } never executed: else if (firstItem == qend of block
| 0 | ||||||||||||||||||||||||
1674 | - | |||||||||||||||||||||||||
1675 | - | |||||||||||||||||||||||||
1676 | if ((
| 0 | ||||||||||||||||||||||||
1677 | qSwap(firstItem, secondItem); | - | ||||||||||||||||||||||||
1678 | qSwap(firstEdge, secondEdge); | - | ||||||||||||||||||||||||
1679 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1680 | } never executed: else if ((end of block
| 0 | ||||||||||||||||||||||||
1681 | - | |||||||||||||||||||||||||
1682 | - | |||||||||||||||||||||||||
1683 | qSwap(firstItem, secondItem); | - | ||||||||||||||||||||||||
1684 | qSwap(firstEdge, secondEdge); | - | ||||||||||||||||||||||||
1685 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1686 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1687 | - | |||||||||||||||||||||||||
1688 | QLayoutStyleInfo &QGraphicsAnchorLayoutPrivate::styleInfo() const | - | ||||||||||||||||||||||||
1689 | { | - | ||||||||||||||||||||||||
1690 | if (styleInfoDirty
| 0 | ||||||||||||||||||||||||
1691 | const QGraphicsAnchorLayout * const q = q_func(); | - | ||||||||||||||||||||||||
1692 | - | |||||||||||||||||||||||||
1693 | QWidget *wid = 0; | - | ||||||||||||||||||||||||
1694 | - | |||||||||||||||||||||||||
1695 | QGraphicsLayoutItem *parent = q->parentLayoutItem(); | - | ||||||||||||||||||||||||
1696 | while (parent
| 0 | ||||||||||||||||||||||||
1697 | parent = parent->parentLayoutItem(); | - | ||||||||||||||||||||||||
1698 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1699 | QGraphicsWidget *w = 0; | - | ||||||||||||||||||||||||
1700 | if (parent
| 0 | ||||||||||||||||||||||||
1701 | QGraphicsItem *parentItem = parent->graphicsItem(); | - | ||||||||||||||||||||||||
1702 | if (parentItem
| 0 | ||||||||||||||||||||||||
1703 | w = static_cast<QGraphicsWidget*>(parentItem); never executed: w = static_cast<QGraphicsWidget*>(parentItem); | 0 | ||||||||||||||||||||||||
1704 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1705 | - | |||||||||||||||||||||||||
1706 | QStyle *style = w
| 0 | ||||||||||||||||||||||||
1707 | cachedStyleInfo = QLayoutStyleInfo(style, wid); | - | ||||||||||||||||||||||||
1708 | cachedStyleInfo.setDefaultSpacing(Qt::Horizontal, spacings[0]); | - | ||||||||||||||||||||||||
1709 | cachedStyleInfo.setDefaultSpacing(Qt::Vertical, spacings[1]); | - | ||||||||||||||||||||||||
1710 | - | |||||||||||||||||||||||||
1711 | styleInfoDirty = false; | - | ||||||||||||||||||||||||
1712 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1713 | return never executed: cachedStyleInfo;return cachedStyleInfo; never executed: return cachedStyleInfo; | 0 | ||||||||||||||||||||||||
1714 | } | - | ||||||||||||||||||||||||
1715 | void QGraphicsAnchorLayoutPrivate::calculateGraphs() | - | ||||||||||||||||||||||||
1716 | { | - | ||||||||||||||||||||||||
1717 | if (!calculateGraphCacheDirty
| 0 | ||||||||||||||||||||||||
1718 | return; never executed: return; | 0 | ||||||||||||||||||||||||
1719 | calculateGraphs(Horizontal); | - | ||||||||||||||||||||||||
1720 | calculateGraphs(Vertical); | - | ||||||||||||||||||||||||
1721 | calculateGraphCacheDirty = false; | - | ||||||||||||||||||||||||
1722 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1723 | - | |||||||||||||||||||||||||
1724 | - | |||||||||||||||||||||||||
1725 | - | |||||||||||||||||||||||||
1726 | QList<AnchorData *> getVariables(const QList<QSimplexConstraint *> &constraints) | - | ||||||||||||||||||||||||
1727 | { | - | ||||||||||||||||||||||||
1728 | QSet<AnchorData *> variableSet; | - | ||||||||||||||||||||||||
1729 | for (int i = 0; i < constraints.count()
| 0 | ||||||||||||||||||||||||
1730 | const QSimplexConstraint *c = constraints.at(i); | - | ||||||||||||||||||||||||
1731 | for (auto it = c->variables.cbegin(), end = c->variables.cend(); it != end
| 0 | ||||||||||||||||||||||||
1732 | variableSet.insert(static_cast<AnchorData *>(it.key())); never executed: variableSet.insert(static_cast<AnchorData *>(it.key())); | 0 | ||||||||||||||||||||||||
1733 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1734 | return never executed: variableSet.toList();return variableSet.toList(); never executed: return variableSet.toList(); | 0 | ||||||||||||||||||||||||
1735 | } | - | ||||||||||||||||||||||||
1736 | void QGraphicsAnchorLayoutPrivate::calculateGraphs( | - | ||||||||||||||||||||||||
1737 | QGraphicsAnchorLayoutPrivate::Orientation orientation) | - | ||||||||||||||||||||||||
1738 | { | - | ||||||||||||||||||||||||
1739 | - | |||||||||||||||||||||||||
1740 | lastCalculationUsedSimplex[orientation] = false; | - | ||||||||||||||||||||||||
1741 | - | |||||||||||||||||||||||||
1742 | - | |||||||||||||||||||||||||
1743 | static bool simplificationEnabled = qEnvironmentVariableIsEmpty("QT_ANCHORLAYOUT_NO_SIMPLIFICATION"); | - | ||||||||||||||||||||||||
1744 | - | |||||||||||||||||||||||||
1745 | - | |||||||||||||||||||||||||
1746 | refreshAllSizeHints(orientation); | - | ||||||||||||||||||||||||
1747 | - | |||||||||||||||||||||||||
1748 | - | |||||||||||||||||||||||||
1749 | if (simplificationEnabled
| 0 | ||||||||||||||||||||||||
1750 | QMessageLogger(__FILE__, 2110, __PRETTY_FUNCTION__).warning("QGraphicsAnchorLayout: anchor setup is not feasible."); | - | ||||||||||||||||||||||||
1751 | graphHasConflicts[orientation] = true; | - | ||||||||||||||||||||||||
1752 | return; never executed: return; | 0 | ||||||||||||||||||||||||
1753 | } | - | ||||||||||||||||||||||||
1754 | - | |||||||||||||||||||||||||
1755 | - | |||||||||||||||||||||||||
1756 | findPaths(orientation); | - | ||||||||||||||||||||||||
1757 | - | |||||||||||||||||||||||||
1758 | - | |||||||||||||||||||||||||
1759 | - | |||||||||||||||||||||||||
1760 | constraintsFromPaths(orientation); | - | ||||||||||||||||||||||||
1761 | const auto parts = getGraphParts(orientation); | - | ||||||||||||||||||||||||
1762 | - | |||||||||||||||||||||||||
1763 | - | |||||||||||||||||||||||||
1764 | - | |||||||||||||||||||||||||
1765 | - | |||||||||||||||||||||||||
1766 | const QList<AnchorData *> trunkVariables = getVariables(parts.trunkConstraints); | - | ||||||||||||||||||||||||
1767 | - | |||||||||||||||||||||||||
1768 | - | |||||||||||||||||||||||||
1769 | - | |||||||||||||||||||||||||
1770 | AnchorVertex *v = layoutLastVertex[orientation]; | - | ||||||||||||||||||||||||
1771 | GraphPath trunkPath = graphPaths[orientation].value(v); | - | ||||||||||||||||||||||||
1772 | - | |||||||||||||||||||||||||
1773 | bool feasible = calculateTrunk(orientation, trunkPath, parts.trunkConstraints, trunkVariables); | - | ||||||||||||||||||||||||
1774 | - | |||||||||||||||||||||||||
1775 | - | |||||||||||||||||||||||||
1776 | - | |||||||||||||||||||||||||
1777 | - | |||||||||||||||||||||||||
1778 | - | |||||||||||||||||||||||||
1779 | if (feasible
| 0 | ||||||||||||||||||||||||
1780 | const QList<AnchorData *> partVariables = getVariables(parts.nonTrunkConstraints); | - | ||||||||||||||||||||||||
1781 | ((!(!partVariables.isEmpty())) ? qt_assert("!partVariables.isEmpty()",__FILE__,2152) : qt_noop()); | - | ||||||||||||||||||||||||
1782 | feasible = calculateNonTrunk(parts.nonTrunkConstraints, partVariables); | - | ||||||||||||||||||||||||
1783 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1784 | - | |||||||||||||||||||||||||
1785 | - | |||||||||||||||||||||||||
1786 | - | |||||||||||||||||||||||||
1787 | updateAnchorSizes(orientation); | - | ||||||||||||||||||||||||
1788 | - | |||||||||||||||||||||||||
1789 | graphHasConflicts[orientation] = !feasible; | - | ||||||||||||||||||||||||
1790 | - | |||||||||||||||||||||||||
1791 | - | |||||||||||||||||||||||||
1792 | - | |||||||||||||||||||||||||
1793 | qDeleteAll(constraints[orientation]); | - | ||||||||||||||||||||||||
1794 | constraints[orientation].clear(); | - | ||||||||||||||||||||||||
1795 | graphPaths[orientation].clear(); | - | ||||||||||||||||||||||||
1796 | - | |||||||||||||||||||||||||
1797 | if (simplificationEnabled
| 0 | ||||||||||||||||||||||||
1798 | restoreSimplifiedGraph(orientation); never executed: restoreSimplifiedGraph(orientation); | 0 | ||||||||||||||||||||||||
1799 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1800 | static void shiftConstraints(const QList<QSimplexConstraint *> &constraints, qreal amount) | - | ||||||||||||||||||||||||
1801 | { | - | ||||||||||||||||||||||||
1802 | for (int i = 0; i < constraints.count()
| 0 | ||||||||||||||||||||||||
1803 | QSimplexConstraint *c = constraints.at(i); | - | ||||||||||||||||||||||||
1804 | const qreal multiplier = std::accumulate(c->variables.cbegin(), c->variables.cend(), qreal(0)); | - | ||||||||||||||||||||||||
1805 | c->constant += multiplier * amount; | - | ||||||||||||||||||||||||
1806 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1807 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1808 | - | |||||||||||||||||||||||||
1809 | - | |||||||||||||||||||||||||
1810 | - | |||||||||||||||||||||||||
1811 | - | |||||||||||||||||||||||||
1812 | - | |||||||||||||||||||||||||
1813 | - | |||||||||||||||||||||||||
1814 | - | |||||||||||||||||||||||||
1815 | bool QGraphicsAnchorLayoutPrivate::calculateTrunk(Orientation orientation, const GraphPath &path, | - | ||||||||||||||||||||||||
1816 | const QList<QSimplexConstraint *> &constraints, | - | ||||||||||||||||||||||||
1817 | const QList<AnchorData *> &variables) | - | ||||||||||||||||||||||||
1818 | { | - | ||||||||||||||||||||||||
1819 | bool feasible = true; | - | ||||||||||||||||||||||||
1820 | bool needsSimplex = !constraints.isEmpty(); | - | ||||||||||||||||||||||||
1821 | - | |||||||||||||||||||||||||
1822 | - | |||||||||||||||||||||||||
1823 | - | |||||||||||||||||||||||||
1824 | - | |||||||||||||||||||||||||
1825 | - | |||||||||||||||||||||||||
1826 | - | |||||||||||||||||||||||||
1827 | if (needsSimplex
| 0 | ||||||||||||||||||||||||
1828 | - | |||||||||||||||||||||||||
1829 | QList<QSimplexConstraint *> sizeHintConstraints = constraintsFromSizeHints(variables); | - | ||||||||||||||||||||||||
1830 | QList<QSimplexConstraint *> allConstraints = constraints + sizeHintConstraints; | - | ||||||||||||||||||||||||
1831 | - | |||||||||||||||||||||||||
1832 | shiftConstraints(allConstraints, g_offset); | - | ||||||||||||||||||||||||
1833 | - | |||||||||||||||||||||||||
1834 | - | |||||||||||||||||||||||||
1835 | qreal min, max; | - | ||||||||||||||||||||||||
1836 | feasible = solveMinMax(allConstraints, path, &min, &max); | - | ||||||||||||||||||||||||
1837 | - | |||||||||||||||||||||||||
1838 | if (feasible
| 0 | ||||||||||||||||||||||||
1839 | solvePreferred(constraints, variables); | - | ||||||||||||||||||||||||
1840 | - | |||||||||||||||||||||||||
1841 | - | |||||||||||||||||||||||||
1842 | - | |||||||||||||||||||||||||
1843 | qreal pref(0.0); | - | ||||||||||||||||||||||||
1844 | for (const AnchorData *ad : path.positives) | - | ||||||||||||||||||||||||
1845 | pref += ad->sizeAtPreferred; never executed: pref += ad->sizeAtPreferred; | 0 | ||||||||||||||||||||||||
1846 | for (const AnchorData *ad : path.negatives) | - | ||||||||||||||||||||||||
1847 | pref -= ad->sizeAtPreferred; never executed: pref -= ad->sizeAtPreferred; | 0 | ||||||||||||||||||||||||
1848 | - | |||||||||||||||||||||||||
1849 | sizeHints[orientation][Qt::MinimumSize] = min; | - | ||||||||||||||||||||||||
1850 | sizeHints[orientation][Qt::PreferredSize] = pref; | - | ||||||||||||||||||||||||
1851 | sizeHints[orientation][Qt::MaximumSize] = max; | - | ||||||||||||||||||||||||
1852 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1853 | - | |||||||||||||||||||||||||
1854 | qDeleteAll(sizeHintConstraints); | - | ||||||||||||||||||||||||
1855 | shiftConstraints(constraints, -g_offset); | - | ||||||||||||||||||||||||
1856 | - | |||||||||||||||||||||||||
1857 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
1858 | - | |||||||||||||||||||||||||
1859 | - | |||||||||||||||||||||||||
1860 | ((!(path.positives.count() == 1)) ? qt_assert("path.positives.count() == 1",__FILE__,2239) : qt_noop()); | - | ||||||||||||||||||||||||
1861 | ((!(path.negatives.count() == 0)) ? qt_assert("path.negatives.count() == 0",__FILE__,2240) : qt_noop()); | - | ||||||||||||||||||||||||
1862 | - | |||||||||||||||||||||||||
1863 | AnchorData *ad = *path.positives.cbegin(); | - | ||||||||||||||||||||||||
1864 | ad->sizeAtMinimum = ad->minSize; | - | ||||||||||||||||||||||||
1865 | ad->sizeAtPreferred = ad->prefSize; | - | ||||||||||||||||||||||||
1866 | ad->sizeAtMaximum = ad->maxSize; | - | ||||||||||||||||||||||||
1867 | - | |||||||||||||||||||||||||
1868 | sizeHints[orientation][Qt::MinimumSize] = ad->sizeAtMinimum; | - | ||||||||||||||||||||||||
1869 | sizeHints[orientation][Qt::PreferredSize] = ad->sizeAtPreferred; | - | ||||||||||||||||||||||||
1870 | sizeHints[orientation][Qt::MaximumSize] = ad->sizeAtMaximum; | - | ||||||||||||||||||||||||
1871 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1872 | - | |||||||||||||||||||||||||
1873 | - | |||||||||||||||||||||||||
1874 | lastCalculationUsedSimplex[orientation] = needsSimplex; | - | ||||||||||||||||||||||||
1875 | - | |||||||||||||||||||||||||
1876 | - | |||||||||||||||||||||||||
1877 | return never executed: feasible;return feasible; never executed: return feasible; | 0 | ||||||||||||||||||||||||
1878 | } | - | ||||||||||||||||||||||||
1879 | - | |||||||||||||||||||||||||
1880 | - | |||||||||||||||||||||||||
1881 | - | |||||||||||||||||||||||||
1882 | - | |||||||||||||||||||||||||
1883 | bool QGraphicsAnchorLayoutPrivate::calculateNonTrunk(const QList<QSimplexConstraint *> &constraints, | - | ||||||||||||||||||||||||
1884 | const QList<AnchorData *> &variables) | - | ||||||||||||||||||||||||
1885 | { | - | ||||||||||||||||||||||||
1886 | shiftConstraints(constraints, g_offset); | - | ||||||||||||||||||||||||
1887 | bool feasible = solvePreferred(constraints, variables); | - | ||||||||||||||||||||||||
1888 | - | |||||||||||||||||||||||||
1889 | if (feasible
| 0 | ||||||||||||||||||||||||
1890 | - | |||||||||||||||||||||||||
1891 | - | |||||||||||||||||||||||||
1892 | for (int j = 0; j < variables.count()
| 0 | ||||||||||||||||||||||||
1893 | AnchorData *ad = variables.at(j); | - | ||||||||||||||||||||||||
1894 | ((!(ad)) ? qt_assert("ad",__FILE__,2273) : qt_noop()); | - | ||||||||||||||||||||||||
1895 | ad->sizeAtMinimum = ad->sizeAtPreferred; | - | ||||||||||||||||||||||||
1896 | ad->sizeAtMaximum = ad->sizeAtPreferred; | - | ||||||||||||||||||||||||
1897 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1898 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1899 | - | |||||||||||||||||||||||||
1900 | shiftConstraints(constraints, -g_offset); | - | ||||||||||||||||||||||||
1901 | return never executed: feasible;return feasible; never executed: return feasible; | 0 | ||||||||||||||||||||||||
1902 | } | - | ||||||||||||||||||||||||
1903 | - | |||||||||||||||||||||||||
1904 | - | |||||||||||||||||||||||||
1905 | - | |||||||||||||||||||||||||
1906 | - | |||||||||||||||||||||||||
1907 | - | |||||||||||||||||||||||||
1908 | - | |||||||||||||||||||||||||
1909 | - | |||||||||||||||||||||||||
1910 | void QGraphicsAnchorLayoutPrivate::refreshAllSizeHints(Orientation orientation) | - | ||||||||||||||||||||||||
1911 | { | - | ||||||||||||||||||||||||
1912 | Graph<AnchorVertex, AnchorData> &g = graph[orientation]; | - | ||||||||||||||||||||||||
1913 | QVector<QPair<AnchorVertex *, AnchorVertex *> > vertices = g.connections(); | - | ||||||||||||||||||||||||
1914 | - | |||||||||||||||||||||||||
1915 | QLayoutStyleInfo styleInf = styleInfo(); | - | ||||||||||||||||||||||||
1916 | for (int i = 0; i < vertices.count()
| 0 | ||||||||||||||||||||||||
1917 | AnchorData *data = g.edgeData(vertices.at(i).first, vertices.at(i).second); | - | ||||||||||||||||||||||||
1918 | data->refreshSizeHints(&styleInf); | - | ||||||||||||||||||||||||
1919 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1920 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1921 | void QGraphicsAnchorLayoutPrivate::findPaths(Orientation orientation) | - | ||||||||||||||||||||||||
1922 | { | - | ||||||||||||||||||||||||
1923 | QQueue<QPair<AnchorVertex *, AnchorVertex *> > queue; | - | ||||||||||||||||||||||||
1924 | - | |||||||||||||||||||||||||
1925 | QSet<AnchorData *> visited; | - | ||||||||||||||||||||||||
1926 | - | |||||||||||||||||||||||||
1927 | AnchorVertex *root = layoutFirstVertex[orientation]; | - | ||||||||||||||||||||||||
1928 | - | |||||||||||||||||||||||||
1929 | graphPaths[orientation].insert(root, GraphPath()); | - | ||||||||||||||||||||||||
1930 | - | |||||||||||||||||||||||||
1931 | const auto adjacentVertices = graph[orientation].adjacentVertices(root); | - | ||||||||||||||||||||||||
1932 | for (AnchorVertex *v : adjacentVertices) | - | ||||||||||||||||||||||||
1933 | queue.enqueue(qMakePair(root, v)); never executed: queue.enqueue(qMakePair(root, v)); | 0 | ||||||||||||||||||||||||
1934 | - | |||||||||||||||||||||||||
1935 | while(!queue.isEmpty()
| 0 | ||||||||||||||||||||||||
1936 | QPair<AnchorVertex *, AnchorVertex *> pair = queue.dequeue(); | - | ||||||||||||||||||||||||
1937 | AnchorData *edge = graph[orientation].edgeData(pair.first, pair.second); | - | ||||||||||||||||||||||||
1938 | - | |||||||||||||||||||||||||
1939 | if (visited.contains(edge)
| 0 | ||||||||||||||||||||||||
1940 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
1941 | - | |||||||||||||||||||||||||
1942 | visited.insert(edge); | - | ||||||||||||||||||||||||
1943 | GraphPath current = graphPaths[orientation].value(pair.first); | - | ||||||||||||||||||||||||
1944 | - | |||||||||||||||||||||||||
1945 | if (edge->from == pair.first
| 0 | ||||||||||||||||||||||||
1946 | current.positives.insert(edge); never executed: current.positives.insert(edge); | 0 | ||||||||||||||||||||||||
1947 | else | - | ||||||||||||||||||||||||
1948 | current.negatives.insert(edge); never executed: current.negatives.insert(edge); | 0 | ||||||||||||||||||||||||
1949 | - | |||||||||||||||||||||||||
1950 | graphPaths[orientation].insert(pair.second, current); | - | ||||||||||||||||||||||||
1951 | - | |||||||||||||||||||||||||
1952 | const auto adjacentVertices = graph[orientation].adjacentVertices(pair.second); | - | ||||||||||||||||||||||||
1953 | for (AnchorVertex *v : adjacentVertices) | - | ||||||||||||||||||||||||
1954 | queue.enqueue(qMakePair(pair.second, v)); never executed: queue.enqueue(qMakePair(pair.second, v)); | 0 | ||||||||||||||||||||||||
1955 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1956 | - | |||||||||||||||||||||||||
1957 | - | |||||||||||||||||||||||||
1958 | - | |||||||||||||||||||||||||
1959 | - | |||||||||||||||||||||||||
1960 | identifyFloatItems(visited, orientation); | - | ||||||||||||||||||||||||
1961 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1962 | void QGraphicsAnchorLayoutPrivate::constraintsFromPaths(Orientation orientation) | - | ||||||||||||||||||||||||
1963 | { | - | ||||||||||||||||||||||||
1964 | const auto vertices = graphPaths[orientation].uniqueKeys(); | - | ||||||||||||||||||||||||
1965 | for (AnchorVertex *vertex : vertices) { | - | ||||||||||||||||||||||||
1966 | int valueCount = graphPaths[orientation].count(vertex); | - | ||||||||||||||||||||||||
1967 | if (valueCount == 1
| 0 | ||||||||||||||||||||||||
1968 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
1969 | - | |||||||||||||||||||||||||
1970 | QList<GraphPath> pathsToVertex = graphPaths[orientation].values(vertex); | - | ||||||||||||||||||||||||
1971 | for (int i = 1; i < valueCount
| 0 | ||||||||||||||||||||||||
1972 | constraints[orientation] += | - | ||||||||||||||||||||||||
1973 | pathsToVertex[0].constraint(pathsToVertex.at(i)); | - | ||||||||||||||||||||||||
1974 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1975 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1976 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1977 | - | |||||||||||||||||||||||||
1978 | - | |||||||||||||||||||||||||
1979 | - | |||||||||||||||||||||||||
1980 | - | |||||||||||||||||||||||||
1981 | void QGraphicsAnchorLayoutPrivate::updateAnchorSizes(Orientation orientation) | - | ||||||||||||||||||||||||
1982 | { | - | ||||||||||||||||||||||||
1983 | Graph<AnchorVertex, AnchorData> &g = graph[orientation]; | - | ||||||||||||||||||||||||
1984 | const QVector<QPair<AnchorVertex *, AnchorVertex *> > &vertices = g.connections(); | - | ||||||||||||||||||||||||
1985 | - | |||||||||||||||||||||||||
1986 | for (int i = 0; i < vertices.count()
| 0 | ||||||||||||||||||||||||
1987 | AnchorData *ad = g.edgeData(vertices.at(i).first, vertices.at(i).second); | - | ||||||||||||||||||||||||
1988 | ad->updateChildrenSizes(); | - | ||||||||||||||||||||||||
1989 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1990 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1991 | - | |||||||||||||||||||||||||
1992 | - | |||||||||||||||||||||||||
1993 | - | |||||||||||||||||||||||||
1994 | - | |||||||||||||||||||||||||
1995 | - | |||||||||||||||||||||||||
1996 | - | |||||||||||||||||||||||||
1997 | - | |||||||||||||||||||||||||
1998 | QList<QSimplexConstraint *> QGraphicsAnchorLayoutPrivate::constraintsFromSizeHints( | - | ||||||||||||||||||||||||
1999 | const QList<AnchorData *> &anchors) | - | ||||||||||||||||||||||||
2000 | { | - | ||||||||||||||||||||||||
2001 | if (anchors.isEmpty()
| 0 | ||||||||||||||||||||||||
2002 | return never executed: QList<QSimplexConstraint *>();return QList<QSimplexConstraint *>(); never executed: return QList<QSimplexConstraint *>(); | 0 | ||||||||||||||||||||||||
2003 | - | |||||||||||||||||||||||||
2004 | - | |||||||||||||||||||||||||
2005 | - | |||||||||||||||||||||||||
2006 | Orientation orient = Orientation(anchors.first()->orientation); | - | ||||||||||||||||||||||||
2007 | AnchorData *layoutEdge = 0; | - | ||||||||||||||||||||||||
2008 | if (layoutCentralVertex[orient]
| 0 | ||||||||||||||||||||||||
2009 | layoutEdge = graph[orient].edgeData(layoutFirstVertex[orient], layoutCentralVertex[orient]); | - | ||||||||||||||||||||||||
2010 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
2011 | layoutEdge = graph[orient].edgeData(layoutFirstVertex[orient], layoutLastVertex[orient]); | - | ||||||||||||||||||||||||
2012 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2013 | - | |||||||||||||||||||||||||
2014 | - | |||||||||||||||||||||||||
2015 | - | |||||||||||||||||||||||||
2016 | - | |||||||||||||||||||||||||
2017 | - | |||||||||||||||||||||||||
2018 | const qreal expectedMax = layoutCentralVertex[orient]
| 0 | ||||||||||||||||||||||||
2019 | qreal actualMax; | - | ||||||||||||||||||||||||
2020 | if (layoutEdge->from == layoutFirstVertex[orient]
| 0 | ||||||||||||||||||||||||
2021 | actualMax = layoutEdge->maxSize; | - | ||||||||||||||||||||||||
2022 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
2023 | actualMax = -layoutEdge->minSize; | - | ||||||||||||||||||||||||
2024 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2025 | if (actualMax != expectedMax
| 0 | ||||||||||||||||||||||||
2026 | layoutEdge = 0; | - | ||||||||||||||||||||||||
2027 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2028 | - | |||||||||||||||||||||||||
2029 | - | |||||||||||||||||||||||||
2030 | QList<QSimplexConstraint *> anchorConstraints; | - | ||||||||||||||||||||||||
2031 | bool unboundedProblem = true; | - | ||||||||||||||||||||||||
2032 | for (int i = 0; i < anchors.size()
| 0 | ||||||||||||||||||||||||
2033 | AnchorData *ad = anchors.at(i); | - | ||||||||||||||||||||||||
2034 | - | |||||||||||||||||||||||||
2035 | - | |||||||||||||||||||||||||
2036 | - | |||||||||||||||||||||||||
2037 | - | |||||||||||||||||||||||||
2038 | if (ad->dependency == AnchorData::Slave
| 0 | ||||||||||||||||||||||||
2039 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
2040 | - | |||||||||||||||||||||||||
2041 | - | |||||||||||||||||||||||||
2042 | - | |||||||||||||||||||||||||
2043 | - | |||||||||||||||||||||||||
2044 | qreal boundedMin = qBound(-g_offset, ad->minSize, g_offset); | - | ||||||||||||||||||||||||
2045 | qreal boundedMax = qBound(-g_offset, ad->maxSize, g_offset); | - | ||||||||||||||||||||||||
2046 | - | |||||||||||||||||||||||||
2047 | if ((
| 0 | ||||||||||||||||||||||||
2048 | QSimplexConstraint *c = new QSimplexConstraint; | - | ||||||||||||||||||||||||
2049 | c->variables.insert(ad, 1.0); | - | ||||||||||||||||||||||||
2050 | c->constant = boundedMin; | - | ||||||||||||||||||||||||
2051 | c->ratio = QSimplexConstraint::Equal; | - | ||||||||||||||||||||||||
2052 | anchorConstraints += c; | - | ||||||||||||||||||||||||
2053 | unboundedProblem = false; | - | ||||||||||||||||||||||||
2054 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
2055 | QSimplexConstraint *c = new QSimplexConstraint; | - | ||||||||||||||||||||||||
2056 | c->variables.insert(ad, 1.0); | - | ||||||||||||||||||||||||
2057 | c->constant = boundedMin; | - | ||||||||||||||||||||||||
2058 | c->ratio = QSimplexConstraint::MoreOrEqual; | - | ||||||||||||||||||||||||
2059 | anchorConstraints += c; | - | ||||||||||||||||||||||||
2060 | - | |||||||||||||||||||||||||
2061 | - | |||||||||||||||||||||||||
2062 | - | |||||||||||||||||||||||||
2063 | - | |||||||||||||||||||||||||
2064 | if (ad == layoutEdge
| 0 | ||||||||||||||||||||||||
2065 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
2066 | - | |||||||||||||||||||||||||
2067 | c = new QSimplexConstraint; | - | ||||||||||||||||||||||||
2068 | c->variables.insert(ad, 1.0); | - | ||||||||||||||||||||||||
2069 | c->constant = boundedMax; | - | ||||||||||||||||||||||||
2070 | c->ratio = QSimplexConstraint::LessOrEqual; | - | ||||||||||||||||||||||||
2071 | anchorConstraints += c; | - | ||||||||||||||||||||||||
2072 | unboundedProblem = false; | - | ||||||||||||||||||||||||
2073 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2074 | } | - | ||||||||||||||||||||||||
2075 | - | |||||||||||||||||||||||||
2076 | - | |||||||||||||||||||||||||
2077 | if (unboundedProblem
| 0 | ||||||||||||||||||||||||
2078 | QSimplexConstraint *c = new QSimplexConstraint; | - | ||||||||||||||||||||||||
2079 | c->variables.insert(layoutEdge, 1.0); | - | ||||||||||||||||||||||||
2080 | - | |||||||||||||||||||||||||
2081 | c->constant = g_offset; | - | ||||||||||||||||||||||||
2082 | c->ratio = QSimplexConstraint::LessOrEqual; | - | ||||||||||||||||||||||||
2083 | anchorConstraints += c; | - | ||||||||||||||||||||||||
2084 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2085 | - | |||||||||||||||||||||||||
2086 | return never executed: anchorConstraints;return anchorConstraints; never executed: return anchorConstraints; | 0 | ||||||||||||||||||||||||
2087 | } | - | ||||||||||||||||||||||||
2088 | - | |||||||||||||||||||||||||
2089 | - | |||||||||||||||||||||||||
2090 | - | |||||||||||||||||||||||||
2091 | - | |||||||||||||||||||||||||
2092 | QGraphicsAnchorLayoutPrivate::GraphParts | - | ||||||||||||||||||||||||
2093 | QGraphicsAnchorLayoutPrivate::getGraphParts(Orientation orientation) | - | ||||||||||||||||||||||||
2094 | { | - | ||||||||||||||||||||||||
2095 | GraphParts result; | - | ||||||||||||||||||||||||
2096 | - | |||||||||||||||||||||||||
2097 | ((!(layoutFirstVertex[orientation] && layoutLastVertex[orientation])) ? qt_assert("layoutFirstVertex[orientation] && layoutLastVertex[orientation]",__FILE__,2498) : qt_noop()); | - | ||||||||||||||||||||||||
2098 | - | |||||||||||||||||||||||||
2099 | AnchorData *edgeL1 = 0; | - | ||||||||||||||||||||||||
2100 | AnchorData *edgeL2 = 0; | - | ||||||||||||||||||||||||
2101 | - | |||||||||||||||||||||||||
2102 | - | |||||||||||||||||||||||||
2103 | - | |||||||||||||||||||||||||
2104 | if (layoutCentralVertex[orientation]
| 0 | ||||||||||||||||||||||||
2105 | edgeL1 = graph[orientation].edgeData(layoutFirstVertex[orientation], layoutCentralVertex[orientation]); | - | ||||||||||||||||||||||||
2106 | edgeL2 = graph[orientation].edgeData(layoutCentralVertex[orientation], layoutLastVertex[orientation]); | - | ||||||||||||||||||||||||
2107 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
2108 | edgeL1 = graph[orientation].edgeData(layoutFirstVertex[orientation], layoutLastVertex[orientation]); | - | ||||||||||||||||||||||||
2109 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2110 | - | |||||||||||||||||||||||||
2111 | result.nonTrunkConstraints = constraints[orientation] + itemCenterConstraints[orientation]; | - | ||||||||||||||||||||||||
2112 | - | |||||||||||||||||||||||||
2113 | QSet<QSimplexVariable *> trunkVariables; | - | ||||||||||||||||||||||||
2114 | - | |||||||||||||||||||||||||
2115 | trunkVariables += edgeL1; | - | ||||||||||||||||||||||||
2116 | if (edgeL2
| 0 | ||||||||||||||||||||||||
2117 | trunkVariables += edgeL2; never executed: trunkVariables += edgeL2; | 0 | ||||||||||||||||||||||||
2118 | - | |||||||||||||||||||||||||
2119 | bool dirty; | - | ||||||||||||||||||||||||
2120 | auto end = result.nonTrunkConstraints.end(); | - | ||||||||||||||||||||||||
2121 | do { | - | ||||||||||||||||||||||||
2122 | dirty = false; | - | ||||||||||||||||||||||||
2123 | - | |||||||||||||||||||||||||
2124 | auto isMatch = [&result, &trunkVariables](QSimplexConstraint *c) -> bool { | - | ||||||||||||||||||||||||
2125 | bool match = false; | - | ||||||||||||||||||||||||
2126 | - | |||||||||||||||||||||||||
2127 | - | |||||||||||||||||||||||||
2128 | - | |||||||||||||||||||||||||
2129 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(trunkVariables)>::type> _container_((trunkVariables)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QSimplexVariable *ad = *_container_.i; _container_.control; _container_.control = 0) { | - | ||||||||||||||||||||||||
2130 | if (c->variables.contains(ad)
| 0 | ||||||||||||||||||||||||
2131 | match = true; | - | ||||||||||||||||||||||||
2132 | break; never executed: break; | 0 | ||||||||||||||||||||||||
2133 | } | - | ||||||||||||||||||||||||
2134 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2135 | - | |||||||||||||||||||||||||
2136 | - | |||||||||||||||||||||||||
2137 | - | |||||||||||||||||||||||||
2138 | if (match
| 0 | ||||||||||||||||||||||||
2139 | result.trunkConstraints += c; | - | ||||||||||||||||||||||||
2140 | for (auto jt = c->variables.cbegin(), end = c->variables.cend(); jt != end
| 0 | ||||||||||||||||||||||||
2141 | trunkVariables.insert(jt.key()); never executed: trunkVariables.insert(jt.key()); | 0 | ||||||||||||||||||||||||
2142 | return never executed: true;return true; never executed: return true; | 0 | ||||||||||||||||||||||||
2143 | } else { | - | ||||||||||||||||||||||||
2144 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||||||||||||||
2145 | } | - | ||||||||||||||||||||||||
2146 | }; | - | ||||||||||||||||||||||||
2147 | const auto newEnd = std::remove_if(result.nonTrunkConstraints.begin(), end, isMatch); | - | ||||||||||||||||||||||||
2148 | dirty = newEnd != end; | - | ||||||||||||||||||||||||
2149 | end = newEnd; | - | ||||||||||||||||||||||||
2150 | } never executed: while (dirtyend of block
| 0 | ||||||||||||||||||||||||
2151 | - | |||||||||||||||||||||||||
2152 | result.nonTrunkConstraints.erase(end, result.nonTrunkConstraints.end()); | - | ||||||||||||||||||||||||
2153 | - | |||||||||||||||||||||||||
2154 | return never executed: result;return result; never executed: return result; | 0 | ||||||||||||||||||||||||
2155 | } | - | ||||||||||||||||||||||||
2156 | - | |||||||||||||||||||||||||
2157 | - | |||||||||||||||||||||||||
2158 | - | |||||||||||||||||||||||||
2159 | - | |||||||||||||||||||||||||
2160 | - | |||||||||||||||||||||||||
2161 | - | |||||||||||||||||||||||||
2162 | void QGraphicsAnchorLayoutPrivate::identifyFloatItems(const QSet<AnchorData *> &visited, Orientation orientation) | - | ||||||||||||||||||||||||
2163 | { | - | ||||||||||||||||||||||||
2164 | QSet<QGraphicsLayoutItem *> nonFloating; | - | ||||||||||||||||||||||||
2165 | - | |||||||||||||||||||||||||
2166 | for (const AnchorData *ad : visited) | - | ||||||||||||||||||||||||
2167 | identifyNonFloatItems_helper(ad, &nonFloating); never executed: identifyNonFloatItems_helper(ad, &nonFloating); | 0 | ||||||||||||||||||||||||
2168 | - | |||||||||||||||||||||||||
2169 | QSet<QGraphicsLayoutItem *> allItems; | - | ||||||||||||||||||||||||
2170 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(items)>::type> _container_((items)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QGraphicsLayoutItem *item = *_container_.i; _container_.control; _container_.control = 0) | - | ||||||||||||||||||||||||
2171 | allItems.insert(item); never executed: allItems.insert(item); | 0 | ||||||||||||||||||||||||
2172 | m_floatItems[orientation] = allItems - nonFloating; | - | ||||||||||||||||||||||||
2173 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2174 | void QGraphicsAnchorLayoutPrivate::identifyNonFloatItems_helper(const AnchorData *ad, QSet<QGraphicsLayoutItem *> *nonFloatingItemsIdentifiedSoFar) | - | ||||||||||||||||||||||||
2175 | { | - | ||||||||||||||||||||||||
2176 | QGraphicsAnchorLayout * const q = q_func(); | - | ||||||||||||||||||||||||
2177 | - | |||||||||||||||||||||||||
2178 | switch(ad->type) { | - | ||||||||||||||||||||||||
2179 | case never executed: AnchorData::Normal:case AnchorData::Normal: never executed: case AnchorData::Normal: | 0 | ||||||||||||||||||||||||
2180 | if (ad->item
| 0 | ||||||||||||||||||||||||
2181 | nonFloatingItemsIdentifiedSoFar->insert(ad->item); never executed: nonFloatingItemsIdentifiedSoFar->insert(ad->item); | 0 | ||||||||||||||||||||||||
2182 | break; never executed: break; | 0 | ||||||||||||||||||||||||
2183 | case never executed: AnchorData::Sequential:case AnchorData::Sequential: never executed: case AnchorData::Sequential: | 0 | ||||||||||||||||||||||||
2184 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(static_cast<const SequentialAnchorData *>(ad)->m_edges)>::type> _container_((static_cast<const SequentialAnchorData *>(ad)->m_edges)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (const AnchorData *d = *_container_.i; _container_.control; _container_.control = 0) | - | ||||||||||||||||||||||||
2185 | identifyNonFloatItems_helper(d, nonFloatingItemsIdentifiedSoFar); never executed: identifyNonFloatItems_helper(d, nonFloatingItemsIdentifiedSoFar); | 0 | ||||||||||||||||||||||||
2186 | break; never executed: break; | 0 | ||||||||||||||||||||||||
2187 | case never executed: AnchorData::Parallel:case AnchorData::Parallel: never executed: case AnchorData::Parallel: | 0 | ||||||||||||||||||||||||
2188 | identifyNonFloatItems_helper(static_cast<const ParallelAnchorData *>(ad)->firstEdge, nonFloatingItemsIdentifiedSoFar); | - | ||||||||||||||||||||||||
2189 | identifyNonFloatItems_helper(static_cast<const ParallelAnchorData *>(ad)->secondEdge, nonFloatingItemsIdentifiedSoFar); | - | ||||||||||||||||||||||||
2190 | break; never executed: break; | 0 | ||||||||||||||||||||||||
2191 | } | - | ||||||||||||||||||||||||
2192 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2193 | - | |||||||||||||||||||||||||
2194 | - | |||||||||||||||||||||||||
2195 | - | |||||||||||||||||||||||||
2196 | - | |||||||||||||||||||||||||
2197 | - | |||||||||||||||||||||||||
2198 | - | |||||||||||||||||||||||||
2199 | - | |||||||||||||||||||||||||
2200 | void QGraphicsAnchorLayoutPrivate::setItemsGeometries(const QRectF &geom) | - | ||||||||||||||||||||||||
2201 | { | - | ||||||||||||||||||||||||
2202 | QGraphicsAnchorLayout * const q = q_func(); | - | ||||||||||||||||||||||||
2203 | AnchorVertex *firstH, *secondH, *firstV, *secondV; | - | ||||||||||||||||||||||||
2204 | - | |||||||||||||||||||||||||
2205 | qreal top; | - | ||||||||||||||||||||||||
2206 | qreal left; | - | ||||||||||||||||||||||||
2207 | qreal right; | - | ||||||||||||||||||||||||
2208 | - | |||||||||||||||||||||||||
2209 | q->getContentsMargins(&left, &top, &right, 0); | - | ||||||||||||||||||||||||
2210 | const Qt::LayoutDirection visualDir = visualDirection(); | - | ||||||||||||||||||||||||
2211 | if (visualDir == Qt::RightToLeft
| 0 | ||||||||||||||||||||||||
2212 | qSwap(left, right); never executed: qSwap(left, right); | 0 | ||||||||||||||||||||||||
2213 | - | |||||||||||||||||||||||||
2214 | left += geom.left(); | - | ||||||||||||||||||||||||
2215 | top += geom.top(); | - | ||||||||||||||||||||||||
2216 | right = geom.right() - right; | - | ||||||||||||||||||||||||
2217 | - | |||||||||||||||||||||||||
2218 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(items)>::type> _container_((items)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QGraphicsLayoutItem *item = *_container_.i; _container_.control; _container_.control = 0) { | - | ||||||||||||||||||||||||
2219 | QRectF newGeom; | - | ||||||||||||||||||||||||
2220 | QSizeF itemPreferredSize = item->effectiveSizeHint(Qt::PreferredSize); | - | ||||||||||||||||||||||||
2221 | if (m_floatItems[Horizontal].contains(item)
| 0 | ||||||||||||||||||||||||
2222 | newGeom.setLeft(0); | - | ||||||||||||||||||||||||
2223 | newGeom.setRight(itemPreferredSize.width()); | - | ||||||||||||||||||||||||
2224 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
2225 | firstH = internalVertex(item, Qt::AnchorLeft); | - | ||||||||||||||||||||||||
2226 | secondH = internalVertex(item, Qt::AnchorRight); | - | ||||||||||||||||||||||||
2227 | - | |||||||||||||||||||||||||
2228 | if (visualDir == Qt::LeftToRight
| 0 | ||||||||||||||||||||||||
2229 | newGeom.setLeft(left + firstH->distance); | - | ||||||||||||||||||||||||
2230 | newGeom.setRight(left + secondH->distance); | - | ||||||||||||||||||||||||
2231 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
2232 | newGeom.setLeft(right - secondH->distance); | - | ||||||||||||||||||||||||
2233 | newGeom.setRight(right - firstH->distance); | - | ||||||||||||||||||||||||
2234 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2235 | } | - | ||||||||||||||||||||||||
2236 | - | |||||||||||||||||||||||||
2237 | if (m_floatItems[Vertical].contains(item)
| 0 | ||||||||||||||||||||||||
2238 | newGeom.setTop(0); | - | ||||||||||||||||||||||||
2239 | newGeom.setBottom(itemPreferredSize.height()); | - | ||||||||||||||||||||||||
2240 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
2241 | firstV = internalVertex(item, Qt::AnchorTop); | - | ||||||||||||||||||||||||
2242 | secondV = internalVertex(item, Qt::AnchorBottom); | - | ||||||||||||||||||||||||
2243 | - | |||||||||||||||||||||||||
2244 | newGeom.setTop(top + firstV->distance); | - | ||||||||||||||||||||||||
2245 | newGeom.setBottom(top + secondV->distance); | - | ||||||||||||||||||||||||
2246 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2247 | - | |||||||||||||||||||||||||
2248 | item->setGeometry(newGeom); | - | ||||||||||||||||||||||||
2249 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2250 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2251 | - | |||||||||||||||||||||||||
2252 | - | |||||||||||||||||||||||||
2253 | - | |||||||||||||||||||||||||
2254 | - | |||||||||||||||||||||||||
2255 | - | |||||||||||||||||||||||||
2256 | - | |||||||||||||||||||||||||
2257 | - | |||||||||||||||||||||||||
2258 | void QGraphicsAnchorLayoutPrivate::calculateVertexPositions( | - | ||||||||||||||||||||||||
2259 | QGraphicsAnchorLayoutPrivate::Orientation orientation) | - | ||||||||||||||||||||||||
2260 | { | - | ||||||||||||||||||||||||
2261 | QQueue<QPair<AnchorVertex *, AnchorVertex *> > queue; | - | ||||||||||||||||||||||||
2262 | QSet<AnchorVertex *> visited; | - | ||||||||||||||||||||||||
2263 | - | |||||||||||||||||||||||||
2264 | - | |||||||||||||||||||||||||
2265 | AnchorVertex *root = layoutFirstVertex[orientation]; | - | ||||||||||||||||||||||||
2266 | - | |||||||||||||||||||||||||
2267 | root->distance = 0; | - | ||||||||||||||||||||||||
2268 | visited.insert(root); | - | ||||||||||||||||||||||||
2269 | - | |||||||||||||||||||||||||
2270 | - | |||||||||||||||||||||||||
2271 | const auto adjacentVertices = graph[orientation].adjacentVertices(root); | - | ||||||||||||||||||||||||
2272 | for (AnchorVertex *v : adjacentVertices) | - | ||||||||||||||||||||||||
2273 | queue.enqueue(qMakePair(root, v)); never executed: queue.enqueue(qMakePair(root, v)); | 0 | ||||||||||||||||||||||||
2274 | - | |||||||||||||||||||||||||
2275 | - | |||||||||||||||||||||||||
2276 | setupEdgesInterpolation(orientation); | - | ||||||||||||||||||||||||
2277 | - | |||||||||||||||||||||||||
2278 | - | |||||||||||||||||||||||||
2279 | while (!queue.isEmpty()
| 0 | ||||||||||||||||||||||||
2280 | QPair<AnchorVertex *, AnchorVertex *> pair = queue.dequeue(); | - | ||||||||||||||||||||||||
2281 | AnchorData *edge = graph[orientation].edgeData(pair.first, pair.second); | - | ||||||||||||||||||||||||
2282 | - | |||||||||||||||||||||||||
2283 | if (visited.contains(pair.second)
| 0 | ||||||||||||||||||||||||
2284 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
2285 | - | |||||||||||||||||||||||||
2286 | visited.insert(pair.second); | - | ||||||||||||||||||||||||
2287 | interpolateEdge(pair.first, edge); | - | ||||||||||||||||||||||||
2288 | - | |||||||||||||||||||||||||
2289 | QList<AnchorVertex *> adjacents = graph[orientation].adjacentVertices(pair.second); | - | ||||||||||||||||||||||||
2290 | for (int i = 0; i < adjacents.count()
| 0 | ||||||||||||||||||||||||
2291 | if (!visited.contains(adjacents.at(i))
| 0 | ||||||||||||||||||||||||
2292 | queue.enqueue(qMakePair(pair.second, adjacents.at(i))); never executed: queue.enqueue(qMakePair(pair.second, adjacents.at(i))); | 0 | ||||||||||||||||||||||||
2293 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2294 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2295 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2296 | void QGraphicsAnchorLayoutPrivate::setupEdgesInterpolation( | - | ||||||||||||||||||||||||
2297 | Orientation orientation) | - | ||||||||||||||||||||||||
2298 | { | - | ||||||||||||||||||||||||
2299 | QGraphicsAnchorLayout * const q = q_func(); | - | ||||||||||||||||||||||||
2300 | - | |||||||||||||||||||||||||
2301 | qreal current; | - | ||||||||||||||||||||||||
2302 | current = (
| 0 | ||||||||||||||||||||||||
2303 | - | |||||||||||||||||||||||||
2304 | QPair<Interval, qreal> result; | - | ||||||||||||||||||||||||
2305 | result = getFactor(current, | - | ||||||||||||||||||||||||
2306 | sizeHints[orientation][Qt::MinimumSize], | - | ||||||||||||||||||||||||
2307 | sizeHints[orientation][Qt::PreferredSize], | - | ||||||||||||||||||||||||
2308 | sizeHints[orientation][Qt::PreferredSize], | - | ||||||||||||||||||||||||
2309 | sizeHints[orientation][Qt::PreferredSize], | - | ||||||||||||||||||||||||
2310 | sizeHints[orientation][Qt::MaximumSize]); | - | ||||||||||||||||||||||||
2311 | - | |||||||||||||||||||||||||
2312 | interpolationInterval[orientation] = result.first; | - | ||||||||||||||||||||||||
2313 | interpolationProgress[orientation] = result.second; | - | ||||||||||||||||||||||||
2314 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2315 | void QGraphicsAnchorLayoutPrivate::interpolateEdge(AnchorVertex *base, AnchorData *edge) | - | ||||||||||||||||||||||||
2316 | { | - | ||||||||||||||||||||||||
2317 | const Orientation orientation = Orientation(edge->orientation); | - | ||||||||||||||||||||||||
2318 | const QPair<Interval, qreal> factor(interpolationInterval[orientation], | - | ||||||||||||||||||||||||
2319 | interpolationProgress[orientation]); | - | ||||||||||||||||||||||||
2320 | - | |||||||||||||||||||||||||
2321 | qreal edgeDistance = interpolate(factor, edge->sizeAtMinimum, edge->sizeAtPreferred, | - | ||||||||||||||||||||||||
2322 | edge->sizeAtPreferred, edge->sizeAtPreferred, | - | ||||||||||||||||||||||||
2323 | edge->sizeAtMaximum); | - | ||||||||||||||||||||||||
2324 | - | |||||||||||||||||||||||||
2325 | ((!(edge->from == base || edge->to == base)) ? qt_assert("edge->from == base || edge->to == base",__FILE__,2767) : qt_noop()); | - | ||||||||||||||||||||||||
2326 | - | |||||||||||||||||||||||||
2327 | - | |||||||||||||||||||||||||
2328 | if (edge->from == base
| 0 | ||||||||||||||||||||||||
2329 | edge->to->distance = base->distance + edgeDistance; | - | ||||||||||||||||||||||||
2330 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
2331 | edge->from->distance = base->distance - edgeDistance; | - | ||||||||||||||||||||||||
2332 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2333 | } | - | ||||||||||||||||||||||||
2334 | - | |||||||||||||||||||||||||
2335 | bool QGraphicsAnchorLayoutPrivate::solveMinMax(const QList<QSimplexConstraint *> &constraints, | - | ||||||||||||||||||||||||
2336 | const GraphPath &path, qreal *min, qreal *max) | - | ||||||||||||||||||||||||
2337 | { | - | ||||||||||||||||||||||||
2338 | QSimplex simplex; | - | ||||||||||||||||||||||||
2339 | bool feasible = simplex.setConstraints(constraints); | - | ||||||||||||||||||||||||
2340 | if (feasible
| 0 | ||||||||||||||||||||||||
2341 | - | |||||||||||||||||||||||||
2342 | QSimplexConstraint objective; | - | ||||||||||||||||||||||||
2343 | QSet<AnchorData *>::const_iterator iter; | - | ||||||||||||||||||||||||
2344 | for (iter = path.positives.constBegin(); iter != path.positives.constEnd()
| 0 | ||||||||||||||||||||||||
2345 | objective.variables.insert(*iter, 1.0); never executed: objective.variables.insert(*iter, 1.0); | 0 | ||||||||||||||||||||||||
2346 | - | |||||||||||||||||||||||||
2347 | for (iter = path.negatives.constBegin(); iter != path.negatives.constEnd()
| 0 | ||||||||||||||||||||||||
2348 | objective.variables.insert(*iter, -1.0); never executed: objective.variables.insert(*iter, -1.0); | 0 | ||||||||||||||||||||||||
2349 | - | |||||||||||||||||||||||||
2350 | const qreal objectiveOffset = (path.positives.count() - path.negatives.count()) * g_offset; | - | ||||||||||||||||||||||||
2351 | simplex.setObjective(&objective); | - | ||||||||||||||||||||||||
2352 | - | |||||||||||||||||||||||||
2353 | - | |||||||||||||||||||||||||
2354 | *min = simplex.solveMin() - objectiveOffset; | - | ||||||||||||||||||||||||
2355 | - | |||||||||||||||||||||||||
2356 | - | |||||||||||||||||||||||||
2357 | QList<AnchorData *> variables = getVariables(constraints); | - | ||||||||||||||||||||||||
2358 | for (int i = 0; i < variables.size()
| 0 | ||||||||||||||||||||||||
2359 | AnchorData *ad = static_cast<AnchorData *>(variables.at(i)); | - | ||||||||||||||||||||||||
2360 | ad->sizeAtMinimum = ad->result - g_offset; | - | ||||||||||||||||||||||||
2361 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2362 | - | |||||||||||||||||||||||||
2363 | - | |||||||||||||||||||||||||
2364 | *max = simplex.solveMax() - objectiveOffset; | - | ||||||||||||||||||||||||
2365 | - | |||||||||||||||||||||||||
2366 | - | |||||||||||||||||||||||||
2367 | for (int i = 0; i < variables.size()
| 0 | ||||||||||||||||||||||||
2368 | AnchorData *ad = static_cast<AnchorData *>(variables.at(i)); | - | ||||||||||||||||||||||||
2369 | ad->sizeAtMaximum = ad->result - g_offset; | - | ||||||||||||||||||||||||
2370 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2371 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2372 | return never executed: feasible;return feasible; never executed: return feasible; | 0 | ||||||||||||||||||||||||
2373 | } | - | ||||||||||||||||||||||||
2374 | - | |||||||||||||||||||||||||
2375 | enum slackType { Grower = -1, Shrinker = 1 }; | - | ||||||||||||||||||||||||
2376 | static QPair<QSimplexVariable *, QSimplexConstraint *> createSlack(QSimplexConstraint *sizeConstraint, | - | ||||||||||||||||||||||||
2377 | qreal interval, slackType type) | - | ||||||||||||||||||||||||
2378 | { | - | ||||||||||||||||||||||||
2379 | QSimplexVariable *slack = new QSimplexVariable; | - | ||||||||||||||||||||||||
2380 | sizeConstraint->variables.insert(slack, type); | - | ||||||||||||||||||||||||
2381 | - | |||||||||||||||||||||||||
2382 | QSimplexConstraint *limit = new QSimplexConstraint; | - | ||||||||||||||||||||||||
2383 | limit->variables.insert(slack, 1.0); | - | ||||||||||||||||||||||||
2384 | limit->ratio = QSimplexConstraint::LessOrEqual; | - | ||||||||||||||||||||||||
2385 | limit->constant = interval; | - | ||||||||||||||||||||||||
2386 | - | |||||||||||||||||||||||||
2387 | return never executed: qMakePair(slack, limit);return qMakePair(slack, limit); never executed: return qMakePair(slack, limit); | 0 | ||||||||||||||||||||||||
2388 | } | - | ||||||||||||||||||||||||
2389 | - | |||||||||||||||||||||||||
2390 | bool QGraphicsAnchorLayoutPrivate::solvePreferred(const QList<QSimplexConstraint *> &constraints, | - | ||||||||||||||||||||||||
2391 | const QList<AnchorData *> &variables) | - | ||||||||||||||||||||||||
2392 | { | - | ||||||||||||||||||||||||
2393 | QList<QSimplexConstraint *> preferredConstraints; | - | ||||||||||||||||||||||||
2394 | QList<QSimplexVariable *> preferredVariables; | - | ||||||||||||||||||||||||
2395 | QSimplexConstraint objective; | - | ||||||||||||||||||||||||
2396 | for (int i = 0; i < variables.size()
| 0 | ||||||||||||||||||||||||
2397 | AnchorData *ad = variables.at(i); | - | ||||||||||||||||||||||||
2398 | - | |||||||||||||||||||||||||
2399 | - | |||||||||||||||||||||||||
2400 | if (ad->isLayoutAnchor
| 0 | ||||||||||||||||||||||||
2401 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
2402 | - | |||||||||||||||||||||||||
2403 | - | |||||||||||||||||||||||||
2404 | - | |||||||||||||||||||||||||
2405 | QSimplexConstraint *sizeConstraint = new QSimplexConstraint; | - | ||||||||||||||||||||||||
2406 | preferredConstraints += sizeConstraint; | - | ||||||||||||||||||||||||
2407 | sizeConstraint->variables.insert(ad, 1.0); | - | ||||||||||||||||||||||||
2408 | sizeConstraint->constant = ad->prefSize + g_offset; | - | ||||||||||||||||||||||||
2409 | - | |||||||||||||||||||||||||
2410 | - | |||||||||||||||||||||||||
2411 | QPair<QSimplexVariable *, QSimplexConstraint *> slack; | - | ||||||||||||||||||||||||
2412 | const qreal softShrinkInterval = ad->prefSize - ad->minPrefSize; | - | ||||||||||||||||||||||||
2413 | if (softShrinkInterval
| 0 | ||||||||||||||||||||||||
2414 | slack = createSlack(sizeConstraint, softShrinkInterval, Shrinker); | - | ||||||||||||||||||||||||
2415 | preferredVariables += slack.first; | - | ||||||||||||||||||||||||
2416 | preferredConstraints += slack.second; | - | ||||||||||||||||||||||||
2417 | - | |||||||||||||||||||||||||
2418 | - | |||||||||||||||||||||||||
2419 | objective.variables.insert(slack.first, 1.0); | - | ||||||||||||||||||||||||
2420 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2421 | - | |||||||||||||||||||||||||
2422 | - | |||||||||||||||||||||||||
2423 | const qreal softGrowInterval = ad->maxPrefSize - ad->prefSize; | - | ||||||||||||||||||||||||
2424 | if (softGrowInterval
| 0 | ||||||||||||||||||||||||
2425 | slack = createSlack(sizeConstraint, softGrowInterval, Grower); | - | ||||||||||||||||||||||||
2426 | preferredVariables += slack.first; | - | ||||||||||||||||||||||||
2427 | preferredConstraints += slack.second; | - | ||||||||||||||||||||||||
2428 | - | |||||||||||||||||||||||||
2429 | - | |||||||||||||||||||||||||
2430 | objective.variables.insert(slack.first, 1.0); | - | ||||||||||||||||||||||||
2431 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2432 | - | |||||||||||||||||||||||||
2433 | - | |||||||||||||||||||||||||
2434 | const qreal hardShrinkInterval = ad->minPrefSize - ad->minSize; | - | ||||||||||||||||||||||||
2435 | if (hardShrinkInterval
| 0 | ||||||||||||||||||||||||
2436 | slack = createSlack(sizeConstraint, hardShrinkInterval, Shrinker); | - | ||||||||||||||||||||||||
2437 | preferredVariables += slack.first; | - | ||||||||||||||||||||||||
2438 | preferredConstraints += slack.second; | - | ||||||||||||||||||||||||
2439 | - | |||||||||||||||||||||||||
2440 | - | |||||||||||||||||||||||||
2441 | objective.variables.insert(slack.first, variables.size()); | - | ||||||||||||||||||||||||
2442 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2443 | - | |||||||||||||||||||||||||
2444 | - | |||||||||||||||||||||||||
2445 | const qreal hardGrowInterval = ad->maxSize - ad->maxPrefSize; | - | ||||||||||||||||||||||||
2446 | if (hardGrowInterval
| 0 | ||||||||||||||||||||||||
2447 | slack = createSlack(sizeConstraint, hardGrowInterval, Grower); | - | ||||||||||||||||||||||||
2448 | preferredVariables += slack.first; | - | ||||||||||||||||||||||||
2449 | preferredConstraints += slack.second; | - | ||||||||||||||||||||||||
2450 | - | |||||||||||||||||||||||||
2451 | - | |||||||||||||||||||||||||
2452 | objective.variables.insert(slack.first, variables.size()); | - | ||||||||||||||||||||||||
2453 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2454 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2455 | - | |||||||||||||||||||||||||
2456 | QSimplex *simplex = new QSimplex; | - | ||||||||||||||||||||||||
2457 | bool feasible = simplex->setConstraints(constraints + preferredConstraints); | - | ||||||||||||||||||||||||
2458 | if (feasible
| 0 | ||||||||||||||||||||||||
2459 | simplex->setObjective(&objective); | - | ||||||||||||||||||||||||
2460 | - | |||||||||||||||||||||||||
2461 | - | |||||||||||||||||||||||||
2462 | simplex->solveMin(); | - | ||||||||||||||||||||||||
2463 | - | |||||||||||||||||||||||||
2464 | - | |||||||||||||||||||||||||
2465 | for (int i = 0; i < variables.size()
| 0 | ||||||||||||||||||||||||
2466 | AnchorData *ad = variables.at(i); | - | ||||||||||||||||||||||||
2467 | ad->sizeAtPreferred = ad->result - g_offset; | - | ||||||||||||||||||||||||
2468 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2469 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2470 | - | |||||||||||||||||||||||||
2471 | - | |||||||||||||||||||||||||
2472 | - | |||||||||||||||||||||||||
2473 | delete simplex; | - | ||||||||||||||||||||||||
2474 | - | |||||||||||||||||||||||||
2475 | - | |||||||||||||||||||||||||
2476 | qDeleteAll(preferredConstraints); | - | ||||||||||||||||||||||||
2477 | qDeleteAll(preferredVariables); | - | ||||||||||||||||||||||||
2478 | - | |||||||||||||||||||||||||
2479 | return never executed: feasible;return feasible; never executed: return feasible; | 0 | ||||||||||||||||||||||||
2480 | } | - | ||||||||||||||||||||||||
2481 | bool QGraphicsAnchorLayoutPrivate::hasConflicts() const | - | ||||||||||||||||||||||||
2482 | { | - | ||||||||||||||||||||||||
2483 | QGraphicsAnchorLayoutPrivate *that = const_cast<QGraphicsAnchorLayoutPrivate*>(this); | - | ||||||||||||||||||||||||
2484 | that->calculateGraphs(); | - | ||||||||||||||||||||||||
2485 | - | |||||||||||||||||||||||||
2486 | bool floatConflict = !m_floatItems[0].isEmpty()
| 0 | ||||||||||||||||||||||||
2487 | - | |||||||||||||||||||||||||
2488 | return never executed: graphHasConflicts[0] || graphHasConflicts[1] || floatConflict;return graphHasConflicts[0] || graphHasConflicts[1] || floatConflict; never executed: return graphHasConflicts[0] || graphHasConflicts[1] || floatConflict; | 0 | ||||||||||||||||||||||||
2489 | } | - | ||||||||||||||||||||||||
2490 | - | |||||||||||||||||||||||||
2491 | - | |||||||||||||||||||||||||
2492 | void QGraphicsAnchorLayoutPrivate::dumpGraph(const QString &name) | - | ||||||||||||||||||||||||
2493 | { | - | ||||||||||||||||||||||||
2494 | QFile file(QString::fromLatin1("anchorlayout.%1.dot").arg(name)); | - | ||||||||||||||||||||||||
2495 | if (!file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)
| 0 | ||||||||||||||||||||||||
2496 | QMessageLogger(__FILE__, 2965, __PRETTY_FUNCTION__).warning("Could not write to %ls", static_cast<const wchar_t*>(static_cast<const void*>(QString(file.fileName()).utf16()))); never executed: QMessageLogger(__FILE__, 2965, __PRETTY_FUNCTION__).warning("Could not write to %ls", static_cast<const wchar_t*>(static_cast<const void*>(QString(file.fileName()).utf16()))); | 0 | ||||||||||||||||||||||||
2497 | - | |||||||||||||||||||||||||
2498 | QString str = QString::fromLatin1("digraph anchorlayout {\nnode [shape=\"rect\"]\n%1}"); | - | ||||||||||||||||||||||||
2499 | QString dotContents = graph[0].serializeToDot(); | - | ||||||||||||||||||||||||
2500 | dotContents += graph[1].serializeToDot(); | - | ||||||||||||||||||||||||
2501 | file.write(str.arg(dotContents).toLocal8Bit()); | - | ||||||||||||||||||||||||
2502 | - | |||||||||||||||||||||||||
2503 | file.close(); | - | ||||||||||||||||||||||||
2504 | } never executed: end of block | 0 | ||||||||||||||||||||||||
2505 | - | |||||||||||||||||||||||||
2506 | - | |||||||||||||||||||||||||
2507 | - | |||||||||||||||||||||||||
Switch to Source code | Preprocessed file |