qtableview.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/widgets/itemviews/qtableview.cpp
Source codeSwitch to Preprocessed file
LineSourceCount
1/****************************************************************************-
2**-
3** Copyright (C) 2015 The Qt Company Ltd.-
4** Contact: http://www.qt.io/licensing/-
5**-
6** This file is part of the QtWidgets module of the Qt Toolkit.-
7**-
8** $QT_BEGIN_LICENSE:LGPL21$-
9** Commercial License Usage-
10** Licensees holding valid commercial Qt licenses may use this file in-
11** accordance with the commercial license agreement provided with the-
12** Software or, alternatively, in accordance with the terms contained in-
13** a written agreement between you and The Qt Company. For licensing terms-
14** and conditions see http://www.qt.io/terms-conditions. For further-
15** information use the contact form at http://www.qt.io/contact-us.-
16**-
17** GNU Lesser General Public License Usage-
18** Alternatively, this file may be used under the terms of the GNU Lesser-
19** General Public License version 2.1 or version 3 as published by the Free-
20** Software Foundation and appearing in the file LICENSE.LGPLv21 and-
21** LICENSE.LGPLv3 included in the packaging of this file. Please review the-
22** following information to ensure the GNU Lesser General Public License-
23** requirements will be met: https://www.gnu.org/licenses/lgpl.html and-
24** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.-
25**-
26** As a special exception, The Qt Company gives you certain additional-
27** rights. These rights are described in The Qt Company LGPL Exception-
28** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.-
29**-
30** $QT_END_LICENSE$-
31**-
32****************************************************************************/-
33-
34#include "qtableview.h"-
35-
36#ifndef QT_NO_TABLEVIEW-
37#include <qheaderview.h>-
38#include <qitemdelegate.h>-
39#include <qapplication.h>-
40#include <qpainter.h>-
41#include <qstyle.h>-
42#include <qsize.h>-
43#include <qevent.h>-
44#include <qbitarray.h>-
45#include <qscrollbar.h>-
46#include <qabstractbutton.h>-
47#include <private/qtableview_p.h>-
48#include <private/qheaderview_p.h>-
49#ifndef QT_NO_ACCESSIBILITY-
50#include <qaccessible.h>-
51#endif-
52-
53QT_BEGIN_NAMESPACE-
54-
55/** \internal-
56 Add a span to the collection. the collection takes the ownership.-
57 */-
58void QSpanCollection::addSpan(QSpanCollection::Span *span)-
59{-
60 spans.append(span);-
61 Index::iterator it_y = index.lowerBound(-span->top());-
62 if (it_y == index.end() || it_y.key() != -span->top()) {
it_y == index.end()Description
TRUEnever evaluated
FALSEnever evaluated
it_y.key() != -span->top()Description
TRUEnever evaluated
FALSEnever evaluated
0
63 //there is no spans that starts with the row in the index, so create a sublist for it.-
64 SubIndex sub_index;-
65 if (it_y != index.end()) {
it_y != index.end()Description
TRUEnever evaluated
FALSEnever evaluated
0
66 //the previouslist is the list of spans that sarts _before_ the row of the span.-
67 // and which may intersect this row.-
68 const SubIndex previousList = it_y.value();-
69 foreach(Span *s, previousList) {-
70 //If a subspans intersect the row, we need to split it into subspans-
71 if(s->bottom() >= span->top())
s->bottom() >= span->top()Description
TRUEnever evaluated
FALSEnever evaluated
0
72 sub_index.insert(-s->left(), s);
never executed: sub_index.insert(-s->left(), s);
0
73 }
never executed: end of block
0
74 }
never executed: end of block
0
75 it_y = index.insert(-span->top(), sub_index);-
76 //we will insert span to *it_y in the later loop-
77 }
never executed: end of block
0
78-
79 //insert the span as supspan in all the lists that intesects the span-
80 while(-it_y.key() <= span->bottom()) {
-it_y.key() <= span->bottom()Description
TRUEnever evaluated
FALSEnever evaluated
0
81 (*it_y).insert(-span->left(), span);-
82 if(it_y == index.begin())
it_y == index.begin()Description
TRUEnever evaluated
FALSEnever evaluated
0
83 break;
never executed: break;
0
84 --it_y;-
85 }
never executed: end of block
0
86}
never executed: end of block
0
87-
88-
89/** \internal-
90* Has to be called after the height and width of a span is changed.-
91*-
92* old_height is the height before the change-
93*-
94* if the size of the span is now 0x0 the span will be deleted.-
95*/-
96void QSpanCollection::updateSpan(QSpanCollection::Span *span, int old_height)-
97{-
98 if (old_height < span->height()) {
old_height < span->height()Description
TRUEnever evaluated
FALSEnever evaluated
0
99 //add the span as subspan in all the lists that intersect the new covered columns-
100 Index::iterator it_y = index.lowerBound(-(span->top() + old_height - 1));-
101 Q_ASSERT(it_y != index.end()); //it_y must exist since the span is in the list-
102 while (-it_y.key() <= span->bottom()) {
-it_y.key() <= span->bottom()Description
TRUEnever evaluated
FALSEnever evaluated
0
103 (*it_y).insert(-span->left(), span);-
104 if(it_y == index.begin())
it_y == index.begin()Description
TRUEnever evaluated
FALSEnever evaluated
0
105 break;
never executed: break;
0
106 --it_y;-
107 }
never executed: end of block
0
108 } else if (old_height > span->height()) {
never executed: end of block
old_height > span->height()Description
TRUEnever evaluated
FALSEnever evaluated
0
109 //remove the span from all the subspans lists that intersect the columns not covered anymore-
110 Index::iterator it_y = index.lowerBound(-qMax(span->bottom(), span->top())); //qMax useful if height is 0-
111 Q_ASSERT(it_y != index.end()); //it_y must exist since the span is in the list-
112 while (-it_y.key() <= span->top() + old_height -1) {
-it_y.key() <=... old_height -1Description
TRUEnever evaluated
FALSEnever evaluated
0
113 if (-it_y.key() > span->bottom()) {
-it_y.key() > span->bottom()Description
TRUEnever evaluated
FALSEnever evaluated
0
114 int removed = (*it_y).remove(-span->left());-
115 Q_ASSERT(removed == 1); Q_UNUSED(removed);-
116 if (it_y->isEmpty()) {
it_y->isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
117 it_y = index.erase(it_y);-
118 }
never executed: end of block
0
119 }
never executed: end of block
0
120 if(it_y == index.begin())
it_y == index.begin()Description
TRUEnever evaluated
FALSEnever evaluated
0
121 break;
never executed: break;
0
122 --it_y;-
123 }
never executed: end of block
0
124 }
never executed: end of block
0
125-
126 if (span->width() == 0 && span->height() == 0) {
span->width() == 0Description
TRUEnever evaluated
FALSEnever evaluated
span->height() == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
127 spans.removeOne(span);-
128 delete span;-
129 }
never executed: end of block
0
130}
never executed: end of block
0
131-
132/** \internal-
133 * \return a spans that spans over cell x,y (column,row) or 0 if there is none.-
134 */-
135QSpanCollection::Span *QSpanCollection::spanAt(int x, int y) const-
136{-
137 Index::const_iterator it_y = index.lowerBound(-y);-
138 if (it_y == index.end())
it_y == index.end()Description
TRUEnever evaluated
FALSEnever evaluated
0
139 return 0;
never executed: return 0;
0
140 SubIndex::const_iterator it_x = (*it_y).lowerBound(-x);-
141 if (it_x == (*it_y).end())
it_x == (*it_y).end()Description
TRUEnever evaluated
FALSEnever evaluated
0
142 return 0;
never executed: return 0;
0
143 Span *span = *it_x;-
144 if (span->right() >= x && span->bottom() >= y)
span->right() >= xDescription
TRUEnever evaluated
FALSEnever evaluated
span->bottom() >= yDescription
TRUEnever evaluated
FALSEnever evaluated
0
145 return span;
never executed: return span;
0
146 return 0;
never executed: return 0;
0
147}-
148-
149-
150/** \internal-
151* remove and deletes all spans inside the collection-
152*/-
153void QSpanCollection::clear()-
154{-
155 qDeleteAll(spans);-
156 index.clear();-
157 spans.clear();-
158}
never executed: end of block
0
159-
160/** \internal-
161 * return a list to all the spans that spans over cells in the given rectangle-
162 */-
163QList<QSpanCollection::Span *> QSpanCollection::spansInRect(int x, int y, int w, int h) const-
164{-
165 QSet<Span *> list;-
166 Index::const_iterator it_y = index.lowerBound(-y);-
167 if(it_y == index.end())
it_y == index.end()Description
TRUEnever evaluated
FALSEnever evaluated
0
168 --it_y;
never executed: --it_y;
0
169 while(-it_y.key() <= y + h) {
-it_y.key() <= y + hDescription
TRUEnever evaluated
FALSEnever evaluated
0
170 SubIndex::const_iterator it_x = (*it_y).lowerBound(-x);-
171 if (it_x == (*it_y).end())
it_x == (*it_y).end()Description
TRUEnever evaluated
FALSEnever evaluated
0
172 --it_x;
never executed: --it_x;
0
173 while(-it_x.key() <= x + w) {
-it_x.key() <= x + wDescription
TRUEnever evaluated
FALSEnever evaluated
0
174 Span *s = *it_x;-
175 if (s->bottom() >= y && s->right() >= x)
s->bottom() >= yDescription
TRUEnever evaluated
FALSEnever evaluated
s->right() >= xDescription
TRUEnever evaluated
FALSEnever evaluated
0
176 list << s;
never executed: list << s;
0
177 if (it_x == (*it_y).begin())
it_x == (*it_y).begin()Description
TRUEnever evaluated
FALSEnever evaluated
0
178 break;
never executed: break;
0
179 --it_x;-
180 }
never executed: end of block
0
181 if(it_y == index.begin())
it_y == index.begin()Description
TRUEnever evaluated
FALSEnever evaluated
0
182 break;
never executed: break;
0
183 --it_y;-
184 }
never executed: end of block
0
185 return list.toList();
never executed: return list.toList();
0
186}-
187-
188#undef DEBUG_SPAN_UPDATE-
189-
190#ifdef DEBUG_SPAN_UPDATE-
191QDebug operator<<(QDebug str, const QSpanCollection::Span &span)-
192{-
193 str << '(' << span.top() << ',' << span.left() << ',' << span.bottom() << ',' << span.right() << ')';-
194 return str;-
195}-
196#endif-
197-
198/** \internal-
199* Updates the span collection after row insertion.-
200*/-
201void QSpanCollection::updateInsertedRows(int start, int end)-
202{-
203#ifdef DEBUG_SPAN_UPDATE-
204 qDebug() << start << end << endl << index;-
205#endif-
206 if (spans.isEmpty())
spans.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
207 return;
never executed: return;
0
208-
209 int delta = end - start + 1;-
210#ifdef DEBUG_SPAN_UPDATE-
211 qDebug("Before");-
212#endif-
213 for (SpanList::iterator it = spans.begin(); it != spans.end(); ++it) {
it != spans.end()Description
TRUEnever evaluated
FALSEnever evaluated
0
214 Span *span = *it;-
215#ifdef DEBUG_SPAN_UPDATE-
216 qDebug() << span << *span;-
217#endif-
218 if (span->m_bottom < start)
span->m_bottom < startDescription
TRUEnever evaluated
FALSEnever evaluated
0
219 continue;
never executed: continue;
0
220 if (span->m_top >= start)
span->m_top >= startDescription
TRUEnever evaluated
FALSEnever evaluated
0
221 span->m_top += delta;
never executed: span->m_top += delta;
0
222 span->m_bottom += delta;-
223 }
never executed: end of block
0
224-
225#ifdef DEBUG_SPAN_UPDATE-
226 qDebug("After");-
227 foreach (QSpanCollection::Span *span, spans)-
228 qDebug() << span << *span;-
229#endif-
230-
231 for (Index::iterator it_y = index.begin(); it_y != index.end(); ) {
it_y != index.end()Description
TRUEnever evaluated
FALSEnever evaluated
0
232 int y = -it_y.key();-
233 if (y < start) {
y < startDescription
TRUEnever evaluated
FALSEnever evaluated
0
234 ++it_y;-
235 continue;
never executed: continue;
0
236 }-
237-
238 index.insert(-y - delta, it_y.value());-
239 it_y = index.erase(it_y);-
240 }
never executed: end of block
0
241#ifdef DEBUG_SPAN_UPDATE-
242 qDebug() << index;-
243#endif-
244}
never executed: end of block
0
245-
246/** \internal-
247* Updates the span collection after column insertion.-
248*/-
249void QSpanCollection::updateInsertedColumns(int start, int end)-
250{-
251#ifdef DEBUG_SPAN_UPDATE-
252 qDebug() << start << end << endl << index;-
253#endif-
254 if (spans.isEmpty())
spans.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
255 return;
never executed: return;
0
256-
257 int delta = end - start + 1;-
258#ifdef DEBUG_SPAN_UPDATE-
259 qDebug("Before");-
260#endif-
261 for (SpanList::iterator it = spans.begin(); it != spans.end(); ++it) {
it != spans.end()Description
TRUEnever evaluated
FALSEnever evaluated
0
262 Span *span = *it;-
263#ifdef DEBUG_SPAN_UPDATE-
264 qDebug() << span << *span;-
265#endif-
266 if (span->m_right < start)
span->m_right < startDescription
TRUEnever evaluated
FALSEnever evaluated
0
267 continue;
never executed: continue;
0
268 if (span->m_left >= start)
span->m_left >= startDescription
TRUEnever evaluated
FALSEnever evaluated
0
269 span->m_left += delta;
never executed: span->m_left += delta;
0
270 span->m_right += delta;-
271 }
never executed: end of block
0
272-
273#ifdef DEBUG_SPAN_UPDATE-
274 qDebug("After");-
275 foreach (QSpanCollection::Span *span, spans)-
276 qDebug() << span << *span;-
277#endif-
278-
279 for (Index::iterator it_y = index.begin(); it_y != index.end(); ++it_y) {
it_y != index.end()Description
TRUEnever evaluated
FALSEnever evaluated
0
280 SubIndex &subindex = it_y.value();-
281 for (SubIndex::iterator it = subindex.begin(); it != subindex.end(); ) {
it != subindex.end()Description
TRUEnever evaluated
FALSEnever evaluated
0
282 int x = -it.key();-
283 if (x < start) {
x < startDescription
TRUEnever evaluated
FALSEnever evaluated
0
284 ++it;-
285 continue;
never executed: continue;
0
286 }-
287 subindex.insert(-x - delta, it.value());-
288 it = subindex.erase(it);-
289 }
never executed: end of block
0
290 }
never executed: end of block
0
291#ifdef DEBUG_SPAN_UPDATE-
292 qDebug() << index;-
293#endif-
294}
never executed: end of block
0
295-
296/** \internal-
297* Cleans a subindex from to be deleted spans. The update argument is used-
298* to move the spans inside the subindex, in case their anchor changed.-
299* \return true if no span in this subindex starts at y, and should thus be deleted.-
300*/-
301bool QSpanCollection::cleanSpanSubIndex(QSpanCollection::SubIndex &subindex, int y, bool update)-
302{-
303 if (subindex.isEmpty())
subindex.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
304 return true;
never executed: return true;
0
305-
306 bool should_be_deleted = true;-
307 SubIndex::iterator it = subindex.end();-
308 do {-
309 --it;-
310 int x = -it.key();-
311 Span *span = it.value();-
312 if (span->will_be_deleted) {
span->will_be_deletedDescription
TRUEnever evaluated
FALSEnever evaluated
0
313 it = subindex.erase(it);-
314 continue;
never executed: continue;
0
315 }-
316 if (update && span->m_left != x) {
updateDescription
TRUEnever evaluated
FALSEnever evaluated
span->m_left != xDescription
TRUEnever evaluated
FALSEnever evaluated
0
317 subindex.insert(-span->m_left, span);-
318 it = subindex.erase(it);-
319 }
never executed: end of block
0
320 if (should_be_deleted && span->m_top == y)
should_be_deletedDescription
TRUEnever evaluated
FALSEnever evaluated
span->m_top == yDescription
TRUEnever evaluated
FALSEnever evaluated
0
321 should_be_deleted = false;
never executed: should_be_deleted = false;
0
322 } while (it != subindex.begin());
never executed: end of block
it != subindex.begin()Description
TRUEnever evaluated
FALSEnever evaluated
0
323-
324 return should_be_deleted;
never executed: return should_be_deleted;
0
325}-
326-
327/** \internal-
328* Updates the span collection after row removal.-
329*/-
330void QSpanCollection::updateRemovedRows(int start, int end)-
331{-
332#ifdef DEBUG_SPAN_UPDATE-
333 qDebug() << start << end << endl << index;-
334#endif-
335 if (spans.isEmpty())
spans.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
336 return;
never executed: return;
0
337-
338 SpanList spansToBeDeleted;-
339 int delta = end - start + 1;-
340#ifdef DEBUG_SPAN_UPDATE-
341 qDebug("Before");-
342#endif-
343 for (SpanList::iterator it = spans.begin(); it != spans.end(); ) {
it != spans.end()Description
TRUEnever evaluated
FALSEnever evaluated
0
344 Span *span = *it;-
345#ifdef DEBUG_SPAN_UPDATE-
346 qDebug() << span << *span;-
347#endif-
348 if (span->m_bottom < start) {
span->m_bottom < startDescription
TRUEnever evaluated
FALSEnever evaluated
0
349 ++it;-
350 continue;
never executed: continue;
0
351 }-
352 if (span->m_top < start) {
span->m_top < startDescription
TRUEnever evaluated
FALSEnever evaluated
0
353 if (span->m_bottom <= end)
span->m_bottom <= endDescription
TRUEnever evaluated
FALSEnever evaluated
0
354 span->m_bottom = start - 1;
never executed: span->m_bottom = start - 1;
0
355 else-
356 span->m_bottom -= delta;
never executed: span->m_bottom -= delta;
0
357 } else {-
358 if (span->m_bottom > end) {
span->m_bottom > endDescription
TRUEnever evaluated
FALSEnever evaluated
0
359 if (span->m_top <= end)
span->m_top <= endDescription
TRUEnever evaluated
FALSEnever evaluated
0
360 span->m_top = start;
never executed: span->m_top = start;
0
361 else-
362 span->m_top -= delta;
never executed: span->m_top -= delta;
0
363 span->m_bottom -= delta;-
364 } else {
never executed: end of block
0
365 span->will_be_deleted = true;-
366 }
never executed: end of block
0
367 }-
368 if (span->m_top == span->m_bottom && span->m_left == span->m_right)
span->m_top == span->m_bottomDescription
TRUEnever evaluated
FALSEnever evaluated
span->m_left == span->m_rightDescription
TRUEnever evaluated
FALSEnever evaluated
0
369 span->will_be_deleted = true;
never executed: span->will_be_deleted = true;
0
370 if (span->will_be_deleted) {
span->will_be_deletedDescription
TRUEnever evaluated
FALSEnever evaluated
0
371 spansToBeDeleted.append(span);-
372 it = spans.erase(it);-
373 } else {
never executed: end of block
0
374 ++it;-
375 }
never executed: end of block
0
376 }-
377-
378#ifdef DEBUG_SPAN_UPDATE-
379 qDebug("After");-
380 foreach (QSpanCollection::Span *span, spans)-
381 qDebug() << span << *span;-
382#endif-
383 if (spans.isEmpty()) {
spans.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
384 qDeleteAll(spansToBeDeleted);-
385 index.clear();-
386 return;
never executed: return;
0
387 }-
388-
389 Index::iterator it_y = index.end();-
390 do {-
391 --it_y;-
392 int y = -it_y.key();-
393 SubIndex &subindex = it_y.value();-
394 if (y < start) {
y < startDescription
TRUEnever evaluated
FALSEnever evaluated
0
395 if (cleanSpanSubIndex(subindex, y))
cleanSpanSubIndex(subindex, y)Description
TRUEnever evaluated
FALSEnever evaluated
0
396 it_y = index.erase(it_y);
never executed: it_y = index.erase(it_y);
0
397 } else if (y >= start && y <= end) {
never executed: end of block
y >= startDescription
TRUEnever evaluated
FALSEnever evaluated
y <= endDescription
TRUEnever evaluated
FALSEnever evaluated
0
398 bool span_at_start = false;-
399 SubIndex spansToBeMoved;-
400 for (SubIndex::iterator it = subindex.begin(); it != subindex.end(); ++it) {
it != subindex.end()Description
TRUEnever evaluated
FALSEnever evaluated
0
401 Span *span = it.value();-
402 if (span->will_be_deleted)
span->will_be_deletedDescription
TRUEnever evaluated
FALSEnever evaluated
0
403 continue;
never executed: continue;
0
404 if (!span_at_start && span->m_top == start)
!span_at_startDescription
TRUEnever evaluated
FALSEnever evaluated
span->m_top == startDescription
TRUEnever evaluated
FALSEnever evaluated
0
405 span_at_start = true;
never executed: span_at_start = true;
0
406 spansToBeMoved.insert(it.key(), span);-
407 }
never executed: end of block
0
408-
409 if (y == start && span_at_start)
y == startDescription
TRUEnever evaluated
FALSEnever evaluated
span_at_startDescription
TRUEnever evaluated
FALSEnever evaluated
0
410 subindex.clear();
never executed: subindex.clear();
0
411 else-
412 it_y = index.erase(it_y);
never executed: it_y = index.erase(it_y);
0
413-
414 if (span_at_start) {
span_at_startDescription
TRUEnever evaluated
FALSEnever evaluated
0
415 Index::iterator it_start;-
416 if (y == start)
y == startDescription
TRUEnever evaluated
FALSEnever evaluated
0
417 it_start = it_y;
never executed: it_start = it_y;
0
418 else {-
419 it_start = index.find(-start);-
420 if (it_start == index.end())
it_start == index.end()Description
TRUEnever evaluated
FALSEnever evaluated
0
421 it_start = index.insert(-start, SubIndex());
never executed: it_start = index.insert(-start, SubIndex());
0
422 }
never executed: end of block
0
423 SubIndex &start_subindex = it_start.value();-
424 for (SubIndex::iterator it = spansToBeMoved.begin(); it != spansToBeMoved.end(); ++it)
it != spansToBeMoved.end()Description
TRUEnever evaluated
FALSEnever evaluated
0
425 start_subindex.insert(it.key(), it.value());
never executed: start_subindex.insert(it.key(), it.value());
0
426 }
never executed: end of block
0
427 } else {
never executed: end of block
0
428 if (y == end + 1) {
y == end + 1Description
TRUEnever evaluated
FALSEnever evaluated
0
429 Index::iterator it_top = index.find(-y + delta);-
430 if (it_top == index.end())
it_top == index.end()Description
TRUEnever evaluated
FALSEnever evaluated
0
431 it_top = index.insert(-y + delta, SubIndex());
never executed: it_top = index.insert(-y + delta, SubIndex());
0
432 for (SubIndex::iterator it = subindex.begin(); it != subindex.end(); ) {
it != subindex.end()Description
TRUEnever evaluated
FALSEnever evaluated
0
433 Span *span = it.value();-
434 if (!span->will_be_deleted)
!span->will_be_deletedDescription
TRUEnever evaluated
FALSEnever evaluated
0
435 it_top.value().insert(it.key(), span);
never executed: it_top.value().insert(it.key(), span);
0
436 ++it;-
437 }
never executed: end of block
0
438 } else {
never executed: end of block
0
439 index.insert(-y + delta, subindex);-
440 }
never executed: end of block
0
441 it_y = index.erase(it_y);-
442 }
never executed: end of block
0
443 } while (it_y != index.begin());
it_y != index.begin()Description
TRUEnever evaluated
FALSEnever evaluated
0
444-
445#ifdef DEBUG_SPAN_UPDATE-
446 qDebug() << index;-
447 qDebug("Deleted");-
448 foreach (QSpanCollection::Span *span, spansToBeDeleted)-
449 qDebug() << span << *span;-
450#endif-
451 qDeleteAll(spansToBeDeleted);-
452}
never executed: end of block
0
453-
454/** \internal-
455* Updates the span collection after column removal.-
456*/-
457void QSpanCollection::updateRemovedColumns(int start, int end)-
458{-
459#ifdef DEBUG_SPAN_UPDATE-
460 qDebug() << start << end << endl << index;-
461#endif-
462 if (spans.isEmpty())
spans.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
463 return;
never executed: return;
0
464-
465 SpanList toBeDeleted;-
466 int delta = end - start + 1;-
467#ifdef DEBUG_SPAN_UPDATE-
468 qDebug("Before");-
469#endif-
470 for (SpanList::iterator it = spans.begin(); it != spans.end(); ) {
it != spans.end()Description
TRUEnever evaluated
FALSEnever evaluated
0
471 Span *span = *it;-
472#ifdef DEBUG_SPAN_UPDATE-
473 qDebug() << span << *span;-
474#endif-
475 if (span->m_right < start) {
span->m_right < startDescription
TRUEnever evaluated
FALSEnever evaluated
0
476 ++it;-
477 continue;
never executed: continue;
0
478 }-
479 if (span->m_left < start) {
span->m_left < startDescription
TRUEnever evaluated
FALSEnever evaluated
0
480 if (span->m_right <= end)
span->m_right <= endDescription
TRUEnever evaluated
FALSEnever evaluated
0
481 span->m_right = start - 1;
never executed: span->m_right = start - 1;
0
482 else-
483 span->m_right -= delta;
never executed: span->m_right -= delta;
0
484 } else {-
485 if (span->m_right > end) {
span->m_right > endDescription
TRUEnever evaluated
FALSEnever evaluated
0
486 if (span->m_left <= end)
span->m_left <= endDescription
TRUEnever evaluated
FALSEnever evaluated
0
487 span->m_left = start;
never executed: span->m_left = start;
0
488 else-
489 span->m_left -= delta;
never executed: span->m_left -= delta;
0
490 span->m_right -= delta;-
491 } else {
never executed: end of block
0
492 span->will_be_deleted = true;-
493 }
never executed: end of block
0
494 }-
495 if (span->m_top == span->m_bottom && span->m_left == span->m_right)
span->m_top == span->m_bottomDescription
TRUEnever evaluated
FALSEnever evaluated
span->m_left == span->m_rightDescription
TRUEnever evaluated
FALSEnever evaluated
0
496 span->will_be_deleted = true;
never executed: span->will_be_deleted = true;
0
497 if (span->will_be_deleted) {
span->will_be_deletedDescription
TRUEnever evaluated
FALSEnever evaluated
0
498 toBeDeleted.append(span);-
499 it = spans.erase(it);-
500 } else {
never executed: end of block
0
501 ++it;-
502 }
never executed: end of block
0
503 }-
504-
505#ifdef DEBUG_SPAN_UPDATE-
506 qDebug("After");-
507 foreach (QSpanCollection::Span *span, spans)-
508 qDebug() << span << *span;-
509#endif-
510 if (spans.isEmpty()) {
spans.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
511 qDeleteAll(toBeDeleted);-
512 index.clear();-
513 return;
never executed: return;
0
514 }-
515-
516 for (Index::iterator it_y = index.begin(); it_y != index.end(); ) {
it_y != index.end()Description
TRUEnever evaluated
FALSEnever evaluated
0
517 int y = -it_y.key();-
518 if (cleanSpanSubIndex(it_y.value(), y, true))
cleanSpanSubIn...ue(), y, true)Description
TRUEnever evaluated
FALSEnever evaluated
0
519 it_y = index.erase(it_y);
never executed: it_y = index.erase(it_y);
0
520 else-
521 ++it_y;
never executed: ++it_y;
0
522 }-
523-
524#ifdef DEBUG_SPAN_UPDATE-
525 qDebug() << index;-
526 qDebug("Deleted");-
527 foreach (QSpanCollection::Span *span, toBeDeleted)-
528 qDebug() << span << *span;-
529#endif-
530 qDeleteAll(toBeDeleted);-
531}
never executed: end of block
0
532-
533#ifdef QT_BUILD_INTERNAL-
534/*!-
535 \internal-
536 Checks whether the span index structure is self-consistent, and consistent with the spans list.-
537*/-
538bool QSpanCollection::checkConsistency() const-
539{-
540 for (Index::const_iterator it_y = index.begin(); it_y != index.end(); ++it_y) {
it_y != index.end()Description
TRUEnever evaluated
FALSEnever evaluated
0
541 int y = -it_y.key();-
542 const SubIndex &subIndex = it_y.value();-
543 for (SubIndex::const_iterator it = subIndex.begin(); it != subIndex.end(); ++it) {
it != subIndex.end()Description
TRUEnever evaluated
FALSEnever evaluated
0
544 int x = -it.key();-
545 Span *span = it.value();-
546 if (!spans.contains(span) || span->left() != x
!spans.contains(span)Description
TRUEnever evaluated
FALSEnever evaluated
span->left() != xDescription
TRUEnever evaluated
FALSEnever evaluated
0
547 || y < span->top() || y > span->bottom())
y < span->top()Description
TRUEnever evaluated
FALSEnever evaluated
y > span->bottom()Description
TRUEnever evaluated
FALSEnever evaluated
0
548 return false;
never executed: return false;
0
549 }
never executed: end of block
0
550 }
never executed: end of block
0
551-
552 foreach (const Span *span, spans) {-
553 if (span->width() < 1 || span->height() < 1
span->width() < 1Description
TRUEnever evaluated
FALSEnever evaluated
span->height() < 1Description
TRUEnever evaluated
FALSEnever evaluated
0
554 || (span->width() == 1 && span->height() == 1))
span->width() == 1Description
TRUEnever evaluated
FALSEnever evaluated
span->height() == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
555 return false;
never executed: return false;
0
556 for (int y = span->top(); y <= span->bottom(); ++y) {
y <= span->bottom()Description
TRUEnever evaluated
FALSEnever evaluated
0
557 Index::const_iterator it_y = index.find(-y);-
558 if (it_y == index.end()) {
it_y == index.end()Description
TRUEnever evaluated
FALSEnever evaluated
0
559 if (y == span->top())
y == span->top()Description
TRUEnever evaluated
FALSEnever evaluated
0
560 return false;
never executed: return false;
0
561 else-
562 continue;
never executed: continue;
0
563 }-
564 const SubIndex &subIndex = it_y.value();-
565 SubIndex::const_iterator it = subIndex.find(-span->left());-
566 if (it == subIndex.end() || it.value() != span)
it == subIndex.end()Description
TRUEnever evaluated
FALSEnever evaluated
it.value() != spanDescription
TRUEnever evaluated
FALSEnever evaluated
0
567 return false;
never executed: return false;
0
568 }
never executed: end of block
0
569 }
never executed: end of block
0
570 return true;
never executed: return true;
0
571}-
572#endif-
573-
574class QTableCornerButton : public QAbstractButton-
575{-
576 Q_OBJECT-
577public:-
578 QTableCornerButton(QWidget *parent) : QAbstractButton(parent) {}
never executed: end of block
0
579 void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE {-
580 QStyleOptionHeader opt;-
581 opt.init(this);-
582 QStyle::State state = QStyle::State_None;-
583 if (isEnabled())
isEnabled()Description
TRUEnever evaluated
FALSEnever evaluated
0
584 state |= QStyle::State_Enabled;
never executed: state |= QStyle::State_Enabled;
0
585 if (isActiveWindow())
isActiveWindow()Description
TRUEnever evaluated
FALSEnever evaluated
0
586 state |= QStyle::State_Active;
never executed: state |= QStyle::State_Active;
0
587 if (isDown())
isDown()Description
TRUEnever evaluated
FALSEnever evaluated
0
588 state |= QStyle::State_Sunken;
never executed: state |= QStyle::State_Sunken;
0
589 opt.state = state;-
590 opt.rect = rect();-
591 opt.position = QStyleOptionHeader::OnlyOneSection;-
592 QPainter painter(this);-
593 style()->drawControl(QStyle::CE_Header, &opt, &painter, this);-
594 }
never executed: end of block
0
595};-
596-
597void QTableViewPrivate::init()-
598{-
599 Q_Q(QTableView);-
600-
601 q->setEditTriggers(editTriggers|QAbstractItemView::AnyKeyPressed);-
602-
603 QHeaderView *vertical = new QHeaderView(Qt::Vertical, q);-
604 vertical->setSectionsClickable(true);-
605 vertical->setHighlightSections(true);-
606 q->setVerticalHeader(vertical);-
607-
608 QHeaderView *horizontal = new QHeaderView(Qt::Horizontal, q);-
609 horizontal->setSectionsClickable(true);-
610 horizontal->setHighlightSections(true);-
611 q->setHorizontalHeader(horizontal);-
612-
613 tabKeyNavigation = true;-
614-
615 cornerWidget = new QTableCornerButton(q);-
616 cornerWidget->setFocusPolicy(Qt::NoFocus);-
617 QObject::connect(cornerWidget, SIGNAL(clicked()), q, SLOT(selectAll()));-
618}
never executed: end of block
0
619-
620/*!-
621 \internal-
622 Trims away indices that are hidden in the treeview due to hidden horizontal or vertical sections.-
623*/-
624void QTableViewPrivate::trimHiddenSelections(QItemSelectionRange *range) const-
625{-
626 Q_ASSERT(range && range->isValid());-
627-
628 int top = range->top();-
629 int left = range->left();-
630 int bottom = range->bottom();-
631 int right = range->right();-
632-
633 while (bottom >= top && verticalHeader->isSectionHidden(bottom))
bottom >= topDescription
TRUEnever evaluated
FALSEnever evaluated
verticalHeader...Hidden(bottom)Description
TRUEnever evaluated
FALSEnever evaluated
0
634 --bottom;
never executed: --bottom;
0
635 while (right >= left && horizontalHeader->isSectionHidden(right))
right >= leftDescription
TRUEnever evaluated
FALSEnever evaluated
horizontalHead...nHidden(right)Description
TRUEnever evaluated
FALSEnever evaluated
0
636 --right;
never executed: --right;
0
637-
638 if (top > bottom || left > right) { // everything is hidden
top > bottomDescription
TRUEnever evaluated
FALSEnever evaluated
left > rightDescription
TRUEnever evaluated
FALSEnever evaluated
0
639 *range = QItemSelectionRange();-
640 return;
never executed: return;
0
641 }-
642-
643 while (verticalHeader->isSectionHidden(top) && top <= bottom)
verticalHeader...ionHidden(top)Description
TRUEnever evaluated
FALSEnever evaluated
top <= bottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
644 ++top;
never executed: ++top;
0
645 while (horizontalHeader->isSectionHidden(left) && left <= right)
horizontalHead...onHidden(left)Description
TRUEnever evaluated
FALSEnever evaluated
left <= rightDescription
TRUEnever evaluated
FALSEnever evaluated
0
646 ++left;
never executed: ++left;
0
647-
648 if (top > bottom || left > right) { // everything is hidden
top > bottomDescription
TRUEnever evaluated
FALSEnever evaluated
left > rightDescription
TRUEnever evaluated
FALSEnever evaluated
0
649 *range = QItemSelectionRange();-
650 return;
never executed: return;
0
651 }-
652-
653 QModelIndex bottomRight = model->index(bottom, right, range->parent());-
654 QModelIndex topLeft = model->index(top, left, range->parent());-
655 *range = QItemSelectionRange(topLeft, bottomRight);-
656}
never executed: end of block
0
657-
658/*!-
659 \internal-
660 Sets the span for the cell at (\a row, \a column).-
661*/-
662void QTableViewPrivate::setSpan(int row, int column, int rowSpan, int columnSpan)-
663{-
664 if (row < 0 || column < 0 || rowSpan <= 0 || columnSpan <= 0) {
row < 0Description
TRUEnever evaluated
FALSEnever evaluated
column < 0Description
TRUEnever evaluated
FALSEnever evaluated
rowSpan <= 0Description
TRUEnever evaluated
FALSEnever evaluated
columnSpan <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
665 qWarning("QTableView::setSpan: invalid span given: (%d, %d, %d, %d)",-
666 row, column, rowSpan, columnSpan);-
667 return;
never executed: return;
0
668 }-
669 QSpanCollection::Span *sp = spans.spanAt(column, row);-
670 if (sp) {
spDescription
TRUEnever evaluated
FALSEnever evaluated
0
671 if (sp->top() != row || sp->left() != column) {
sp->top() != rowDescription
TRUEnever evaluated
FALSEnever evaluated
sp->left() != columnDescription
TRUEnever evaluated
FALSEnever evaluated
0
672 qWarning("QTableView::setSpan: span cannot overlap");-
673 return;
never executed: return;
0
674 }-
675 if (rowSpan == 1 && columnSpan == 1) {
rowSpan == 1Description
TRUEnever evaluated
FALSEnever evaluated
columnSpan == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
676 rowSpan = columnSpan = 0;-
677 }
never executed: end of block
0
678 const int old_height = sp->height();-
679 sp->m_bottom = row + rowSpan - 1;-
680 sp->m_right = column + columnSpan - 1;-
681 spans.updateSpan(sp, old_height);-
682 return;
never executed: return;
0
683 } else if (rowSpan == 1 && columnSpan == 1) {
rowSpan == 1Description
TRUEnever evaluated
FALSEnever evaluated
columnSpan == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
684 qWarning("QTableView::setSpan: single cell span won't be added");-
685 return;
never executed: return;
0
686 }-
687 sp = new QSpanCollection::Span(row, column, rowSpan, columnSpan);-
688 spans.addSpan(sp);-
689}
never executed: end of block
0
690-
691/*!-
692 \internal-
693 Gets the span information for the cell at (\a row, \a column).-
694*/-
695QSpanCollection::Span QTableViewPrivate::span(int row, int column) const-
696{-
697 QSpanCollection::Span *sp = spans.spanAt(column, row);-
698 if (sp)
spDescription
TRUEnever evaluated
FALSEnever evaluated
0
699 return *sp;
never executed: return *sp;
0
700-
701 return QSpanCollection::Span(row, column, 1, 1);
never executed: return QSpanCollection::Span(row, column, 1, 1);
0
702}-
703-
704/*!-
705 \internal-
706 Returns the logical index of the last section that's part of the span.-
707*/-
708int QTableViewPrivate::sectionSpanEndLogical(const QHeaderView *header, int logical, int span) const-
709{-
710 int visual = header->visualIndex(logical);-
711 for (int i = 1; i < span; ) {
i < spanDescription
TRUEnever evaluated
FALSEnever evaluated
0
712 if (++visual >= header->count())
++visual >= header->count()Description
TRUEnever evaluated
FALSEnever evaluated
0
713 break;
never executed: break;
0
714 logical = header->logicalIndex(visual);-
715 ++i;-
716 }
never executed: end of block
0
717 return logical;
never executed: return logical;
0
718}-
719-
720/*!-
721 \internal-
722 Returns the size of the span starting at logical index \a logical-
723 and spanning \a span sections.-
724*/-
725int QTableViewPrivate::sectionSpanSize(const QHeaderView *header, int logical, int span) const-
726{-
727 int endLogical = sectionSpanEndLogical(header, logical, span);-
728 return header->sectionPosition(endLogical)
never executed: return header->sectionPosition(endLogical) - header->sectionPosition(logical) + header->sectionSize(endLogical);
0
729 - header->sectionPosition(logical)
never executed: return header->sectionPosition(endLogical) - header->sectionPosition(logical) + header->sectionSize(endLogical);
0
730 + header->sectionSize(endLogical);
never executed: return header->sectionPosition(endLogical) - header->sectionPosition(logical) + header->sectionSize(endLogical);
0
731}-
732-
733/*!-
734 \internal-
735 Returns \c true if the section at logical index \a logical is part of the span-
736 starting at logical index \a spanLogical and spanning \a span sections;-
737 otherwise, returns \c false.-
738*/-
739bool QTableViewPrivate::spanContainsSection(const QHeaderView *header, int logical, int spanLogical, int span) const-
740{-
741 if (logical == spanLogical)
logical == spanLogicalDescription
TRUEnever evaluated
FALSEnever evaluated
0
742 return true; // it's the start of the span
never executed: return true;
0
743 int visual = header->visualIndex(spanLogical);-
744 for (int i = 1; i < span; ) {
i < spanDescription
TRUEnever evaluated
FALSEnever evaluated
0
745 if (++visual >= header->count())
++visual >= header->count()Description
TRUEnever evaluated
FALSEnever evaluated
0
746 break;
never executed: break;
0
747 spanLogical = header->logicalIndex(visual);-
748 if (logical == spanLogical)
logical == spanLogicalDescription
TRUEnever evaluated
FALSEnever evaluated
0
749 return true;
never executed: return true;
0
750 ++i;-
751 }
never executed: end of block
0
752 return false;
never executed: return false;
0
753}-
754-
755/*!-
756 \internal-
757 Returns the visual rect for the given \a span.-
758*/-
759QRect QTableViewPrivate::visualSpanRect(const QSpanCollection::Span &span) const-
760{-
761 Q_Q(const QTableView);-
762 // vertical-
763 int row = span.top();-
764 int rowp = verticalHeader->sectionViewportPosition(row);-
765 int rowh = rowSpanHeight(row, span.height());-
766 // horizontal-
767 int column = span.left();-
768 int colw = columnSpanWidth(column, span.width());-
769 if (q->isRightToLeft())
q->isRightToLeft()Description
TRUEnever evaluated
FALSEnever evaluated
0
770 column = span.right();
never executed: column = span.right();
0
771 int colp = horizontalHeader->sectionViewportPosition(column);-
772-
773 const int i = showGrid ? 1 : 0;
showGridDescription
TRUEnever evaluated
FALSEnever evaluated
0
774 if (q->isRightToLeft())
q->isRightToLeft()Description
TRUEnever evaluated
FALSEnever evaluated
0
775 return QRect(colp + i, rowp, colw - i, rowh - i);
never executed: return QRect(colp + i, rowp, colw - i, rowh - i);
0
776 return QRect(colp, rowp, colw - i, rowh - i);
never executed: return QRect(colp, rowp, colw - i, rowh - i);
0
777}-
778-
779/*!-
780 \internal-
781 Draws the spanning cells within rect \a area, and clips them off as-
782 preparation for the main drawing loop.-
783 \a drawn is a QBitArray of visualRowCountxvisualCoulumnCount which say if particular cell has been drawn-
784*/-
785void QTableViewPrivate::drawAndClipSpans(const QRegion &area, QPainter *painter,-
786 const QStyleOptionViewItem &option, QBitArray *drawn,-
787 int firstVisualRow, int lastVisualRow, int firstVisualColumn, int lastVisualColumn)-
788{-
789 bool alternateBase = false;-
790 QRegion region = viewport->rect();-
791-
792 QList<QSpanCollection::Span *> visibleSpans;-
793 bool sectionMoved = verticalHeader->sectionsMoved() || horizontalHeader->sectionsMoved();
verticalHeader...ectionsMoved()Description
TRUEnever evaluated
FALSEnever evaluated
horizontalHead...ectionsMoved()Description
TRUEnever evaluated
FALSEnever evaluated
0
794-
795 if (!sectionMoved) {
!sectionMovedDescription
TRUEnever evaluated
FALSEnever evaluated
0
796 visibleSpans = spans.spansInRect(logicalColumn(firstVisualColumn), logicalRow(firstVisualRow),-
797 lastVisualColumn - firstVisualColumn + 1, lastVisualRow - firstVisualRow + 1);-
798 } else {
never executed: end of block
0
799 QSet<QSpanCollection::Span *> set;-
800 for(int x = firstVisualColumn; x <= lastVisualColumn; x++)
x <= lastVisualColumnDescription
TRUEnever evaluated
FALSEnever evaluated
0
801 for(int y = firstVisualRow; y <= lastVisualRow; y++)
y <= lastVisualRowDescription
TRUEnever evaluated
FALSEnever evaluated
0
802 set.insert(spans.spanAt(x,y));
never executed: set.insert(spans.spanAt(x,y));
0
803 set.remove(0);-
804 visibleSpans = set.toList();-
805 }
never executed: end of block
0
806-
807 foreach (QSpanCollection::Span *span, visibleSpans) {-
808 int row = span->top();-
809 int col = span->left();-
810 QModelIndex index = model->index(row, col, root);-
811 if (!index.isValid())
!index.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
812 continue;
never executed: continue;
0
813 QRect rect = visualSpanRect(*span);-
814 rect.translate(scrollDelayOffset);-
815 if (!area.intersects(rect))
!area.intersects(rect)Description
TRUEnever evaluated
FALSEnever evaluated
0
816 continue;
never executed: continue;
0
817 QStyleOptionViewItem opt = option;-
818 opt.rect = rect;-
819 alternateBase = alternatingColors && (span->top() & 1);
alternatingColorsDescription
TRUEnever evaluated
FALSEnever evaluated
(span->top() & 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
820 if (alternateBase)
alternateBaseDescription
TRUEnever evaluated
FALSEnever evaluated
0
821 opt.features |= QStyleOptionViewItem::Alternate;
never executed: opt.features |= QStyleOptionViewItem::Alternate;
0
822 else-
823 opt.features &= ~QStyleOptionViewItem::Alternate;
never executed: opt.features &= ~QStyleOptionViewItem::Alternate;
0
824 drawCell(painter, opt, index);-
825 region -= rect;-
826 for (int r = span->top(); r <= span->bottom(); ++r) {
r <= span->bottom()Description
TRUEnever evaluated
FALSEnever evaluated
0
827 const int vr = visualRow(r);-
828 if (vr < firstVisualRow || vr > lastVisualRow)
vr < firstVisualRowDescription
TRUEnever evaluated
FALSEnever evaluated
vr > lastVisualRowDescription
TRUEnever evaluated
FALSEnever evaluated
0
829 continue;
never executed: continue;
0
830 for (int c = span->left(); c <= span->right(); ++c) {
c <= span->right()Description
TRUEnever evaluated
FALSEnever evaluated
0
831 const int vc = visualColumn(c);-
832 if (vc < firstVisualColumn || vc > lastVisualColumn)
vc < firstVisualColumnDescription
TRUEnever evaluated
FALSEnever evaluated
vc > lastVisualColumnDescription
TRUEnever evaluated
FALSEnever evaluated
0
833 continue;
never executed: continue;
0
834 drawn->setBit((vr - firstVisualRow) * (lastVisualColumn - firstVisualColumn + 1)-
835 + vc - firstVisualColumn);-
836 }
never executed: end of block
0
837 }
never executed: end of block
0
838-
839 }
never executed: end of block
0
840 painter->setClipRegion(region);-
841}
never executed: end of block
0
842-
843/*!-
844 \internal-
845 Updates spans after row insertion.-
846*/-
847void QTableViewPrivate::_q_updateSpanInsertedRows(const QModelIndex &parent, int start, int end)-
848{-
849 Q_UNUSED(parent)-
850 spans.updateInsertedRows(start, end);-
851}
never executed: end of block
0
852-
853/*!-
854 \internal-
855 Updates spans after column insertion.-
856*/-
857void QTableViewPrivate::_q_updateSpanInsertedColumns(const QModelIndex &parent, int start, int end)-
858{-
859 Q_UNUSED(parent)-
860 spans.updateInsertedColumns(start, end);-
861}
never executed: end of block
0
862-
863/*!-
864 \internal-
865 Updates spans after row removal.-
866*/-
867void QTableViewPrivate::_q_updateSpanRemovedRows(const QModelIndex &parent, int start, int end)-
868{-
869 Q_UNUSED(parent)-
870 spans.updateRemovedRows(start, end);-
871}
never executed: end of block
0
872-
873/*!-
874 \internal-
875 Updates spans after column removal.-
876*/-
877void QTableViewPrivate::_q_updateSpanRemovedColumns(const QModelIndex &parent, int start, int end)-
878{-
879 Q_UNUSED(parent)-
880 spans.updateRemovedColumns(start, end);-
881}
never executed: end of block
0
882-
883/*!-
884 \internal-
885 Draws a table cell.-
886*/-
887void QTableViewPrivate::drawCell(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index)-
888{-
889 Q_Q(QTableView);-
890 QStyleOptionViewItem opt = option;-
891-
892 if (selectionModel && selectionModel->isSelected(index))
selectionModelDescription
TRUEnever evaluated
FALSEnever evaluated
selectionModel...elected(index)Description
TRUEnever evaluated
FALSEnever evaluated
0
893 opt.state |= QStyle::State_Selected;
never executed: opt.state |= QStyle::State_Selected;
0
894 if (index == hover)
index == hoverDescription
TRUEnever evaluated
FALSEnever evaluated
0
895 opt.state |= QStyle::State_MouseOver;
never executed: opt.state |= QStyle::State_MouseOver;
0
896 if (option.state & QStyle::State_Enabled) {
option.state &...:State_EnabledDescription
TRUEnever evaluated
FALSEnever evaluated
0
897 QPalette::ColorGroup cg;-
898 if ((model->flags(index) & Qt::ItemIsEnabled) == 0) {
(model->flags(...sEnabled) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
899 opt.state &= ~QStyle::State_Enabled;-
900 cg = QPalette::Disabled;-
901 } else {
never executed: end of block
0
902 cg = QPalette::Normal;-
903 }
never executed: end of block
0
904 opt.palette.setCurrentColorGroup(cg);-
905 }
never executed: end of block
0
906-
907 if (index == q->currentIndex()) {
index == q->currentIndex()Description
TRUEnever evaluated
FALSEnever evaluated
0
908 const bool focus = (q->hasFocus() || viewport->hasFocus()) && q->currentIndex().isValid();
q->hasFocus()Description
TRUEnever evaluated
FALSEnever evaluated
viewport->hasFocus()Description
TRUEnever evaluated
FALSEnever evaluated
q->currentIndex().isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
909 if (focus)
focusDescription
TRUEnever evaluated
FALSEnever evaluated
0
910 opt.state |= QStyle::State_HasFocus;
never executed: opt.state |= QStyle::State_HasFocus;
0
911 }
never executed: end of block
0
912-
913 q->style()->drawPrimitive(QStyle::PE_PanelItemViewRow, &opt, painter, q);-
914-
915 q->itemDelegate(index)->paint(painter, opt, index);-
916}
never executed: end of block
0
917-
918/*!-
919 \internal-
920 Get sizeHint width for single Index (providing existing hint and style option)-
921*/-
922int QTableViewPrivate::widthHintForIndex(const QModelIndex &index, int hint, const QStyleOptionViewItem &option) const-
923{-
924 Q_Q(const QTableView);-
925 QWidget *editor = editorForIndex(index).widget.data();-
926 if (editor && persistent.contains(editor)) {
editorDescription
TRUEnever evaluated
FALSEnever evaluated
persistent.contains(editor)Description
TRUEnever evaluated
FALSEnever evaluated
0
927 hint = qMax(hint, editor->sizeHint().width());-
928 int min = editor->minimumSize().width();-
929 int max = editor->maximumSize().width();-
930 hint = qBound(min, hint, max);-
931 }
never executed: end of block
0
932 hint = qMax(hint, q->itemDelegate(index)->sizeHint(option, index).width());-
933 return hint;
never executed: return hint;
0
934}-
935-
936/*!-
937 \internal-
938 Get sizeHint height for single Index (providing existing hint and style option)-
939*/-
940int QTableViewPrivate::heightHintForIndex(const QModelIndex &index, int hint, QStyleOptionViewItem &option) const-
941{-
942 Q_Q(const QTableView);-
943 QWidget *editor = editorForIndex(index).widget.data();-
944 if (editor && persistent.contains(editor)) {
editorDescription
TRUEnever evaluated
FALSEnever evaluated
persistent.contains(editor)Description
TRUEnever evaluated
FALSEnever evaluated
0
945 hint = qMax(hint, editor->sizeHint().height());-
946 int min = editor->minimumSize().height();-
947 int max = editor->maximumSize().height();-
948 hint = qBound(min, hint, max);-
949 }
never executed: end of block
0
950-
951 if (wrapItemText) {// for wrapping boundaries
wrapItemTextDescription
TRUEnever evaluated
FALSEnever evaluated
0
952 option.rect.setY(q->rowViewportPosition(index.row()));-
953 int height = q->rowHeight(index.row());-
954 // if the option.height == 0 then q->itemDelegate(index)->sizeHint(option, index) will be wrong.-
955 // The option.height == 0 is used to conclude that the text is not wrapped, and hence it will-
956 // (exactly like widthHintForIndex) return a QSize with a long width (that we don't use) --
957 // and the height of the text if it was/is on one line.-
958 // What we want is a height hint for the current width (and we know that this section is not hidden)-
959 // Therefore we catch this special situation with:-
960 if (height == 0)
height == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
961 height = 1;
never executed: height = 1;
0
962 option.rect.setHeight(height);-
963 option.rect.setX(q->columnViewportPosition(index.column()));-
964 option.rect.setWidth(q->columnWidth(index.column()));-
965 }
never executed: end of block
0
966 hint = qMax(hint, q->itemDelegate(index)->sizeHint(option, index).height());-
967 return hint;
never executed: return hint;
0
968}-
969-
970-
971/*!-
972 \class QTableView-
973-
974 \brief The QTableView class provides a default model/view-
975 implementation of a table view.-
976-
977 \ingroup model-view-
978 \ingroup advanced-
979 \inmodule QtWidgets-
980-
981 A QTableView implements a table view that displays items from a-
982 model. This class is used to provide standard tables that were-
983 previously provided by the QTable class, but using the more-
984 flexible approach provided by Qt's model/view architecture.-
985-
986 The QTableView class is one of the \l{Model/View Classes}-
987 and is part of Qt's \l{Model/View Programming}{model/view framework}.-
988-
989 QTableView implements the interfaces defined by the-
990 QAbstractItemView class to allow it to display data provided by-
991 models derived from the QAbstractItemModel class.-
992-
993 \section1 Navigation-
994-
995 You can navigate the cells in the table by clicking on a cell with the-
996 mouse, or by using the arrow keys. Because QTableView enables-
997 \l{QAbstractItemView::tabKeyNavigation}{tabKeyNavigation} by default, you-
998 can also hit Tab and Backtab to move from cell to cell.-
999-
1000 \section1 Visual Appearance-
1001-
1002 The table has a vertical header that can be obtained using the-
1003 verticalHeader() function, and a horizontal header that is available-
1004 through the horizontalHeader() function. The height of each row in the-
1005 table can be found by using rowHeight(); similarly, the width of-
1006 columns can be found using columnWidth(). Since both of these are plain-
1007 widgets, you can hide either of them using their hide() functions.-
1008-
1009 Rows and columns can be hidden and shown with hideRow(), hideColumn(),-
1010 showRow(), and showColumn(). They can be selected with selectRow()-
1011 and selectColumn(). The table will show a grid depending on the-
1012 \l showGrid property.-
1013-
1014 The items shown in a table view, like those in the other item views, are-
1015 rendered and edited using standard \l{QItemDelegate}{delegates}. However,-
1016 for some tasks it is sometimes useful to be able to insert widgets in a-
1017 table instead. Widgets are set for particular indexes with the-
1018 \l{QAbstractItemView::}{setIndexWidget()} function, and-
1019 later retrieved with \l{QAbstractItemView::}{indexWidget()}.-
1020-
1021 \table-
1022 \row \li \inlineimage qtableview-resized.png-
1023 \li By default, the cells in a table do not expand to fill the available space.-
1024-
1025 You can make the cells fill the available space by stretching the last-
1026 header section. Access the relevant header using horizontalHeader()-
1027 or verticalHeader() and set the header's \l{QHeaderView::}{stretchLastSection}-
1028 property.-
1029-
1030 To distribute the available space according to the space requirement of-
1031 each column or row, call the view's resizeColumnsToContents() or-
1032 resizeRowsToContents() functions.-
1033 \endtable-
1034-
1035 \section1 Coordinate Systems-
1036-
1037 For some specialized forms of tables it is useful to be able to-
1038 convert between row and column indexes and widget coordinates.-
1039 The rowAt() function provides the y-coordinate within the view of the-
1040 specified row; the row index can be used to obtain a corresponding-
1041 y-coordinate with rowViewportPosition(). The columnAt() and-
1042 columnViewportPosition() functions provide the equivalent conversion-
1043 operations between x-coordinates and column indexes.-
1044-
1045 \section1 Styles-
1046-
1047 QTableView is styled appropriately for each platform. The following images show-
1048 how it looks on three different platforms. Go to the \l{Qt Widget Gallery} to see-
1049 its appearance in other styles.-
1050-
1051 \table 100%-
1052 \row \li \inlineimage windowsvista-tableview.png Screenshot of a Windows Vista style table view-
1053 \li \inlineimage macintosh-tableview.png Screenshot of a Macintosh style table view-
1054 \li \inlineimage fusion-tableview.png Screenshot of a Fusion style table view-
1055 \row \li A \l{Windows Vista Style Widget Gallery}{Windows Vista style} table view.-
1056 \li A \l{Macintosh Style Widget Gallery}{Macintosh style} table view.-
1057 \li A \l{Fusion Style Widget Gallery}{Fusion style} table view.-
1058 \endtable-
1059-
1060 \sa QTableWidget, {View Classes}, QAbstractItemModel, QAbstractItemView,-
1061 {Chart Example}, {Pixelator Example}, {Table Model Example}-
1062*/-
1063-
1064/*!-
1065 Constructs a table view with a \a parent to represent the data.-
1066-
1067 \sa QAbstractItemModel-
1068*/-
1069-
1070QTableView::QTableView(QWidget *parent)-
1071 : QAbstractItemView(*new QTableViewPrivate, parent)-
1072{-
1073 Q_D(QTableView);-
1074 d->init();-
1075}
never executed: end of block
0
1076-
1077/*!-
1078 \internal-
1079*/-
1080QTableView::QTableView(QTableViewPrivate &dd, QWidget *parent)-
1081 : QAbstractItemView(dd, parent)-
1082{-
1083 Q_D(QTableView);-
1084 d->init();-
1085}
never executed: end of block
0
1086-
1087/*!-
1088 Destroys the table view.-
1089*/-
1090QTableView::~QTableView()-
1091{-
1092}-
1093-
1094/*!-
1095 \reimp-
1096*/-
1097QSize QTableView::viewportSizeHint() const-
1098{-
1099 Q_D(const QTableView);-
1100 QSize result( (d->verticalHeader->isHidden() ? 0 : d->verticalHeader->width()) + d->horizontalHeader->length(),-
1101 (d->horizontalHeader->isHidden() ? 0 : d->horizontalHeader->height()) + d->verticalHeader->length());-
1102 result += QSize(verticalScrollBar()->isVisible() ? verticalScrollBar()->width() : 0,-
1103 horizontalScrollBar()->isVisible() ? horizontalScrollBar()->height() : 0);-
1104 return result;
never executed: return result;
0
1105}-
1106-
1107/*!-
1108 \reimp-
1109*/-
1110void QTableView::setModel(QAbstractItemModel *model)-
1111{-
1112 Q_D(QTableView);-
1113 if (model == d->model)
model == d->modelDescription
TRUEnever evaluated
FALSEnever evaluated
0
1114 return;
never executed: return;
0
1115 //let's disconnect from the old model-
1116 if (d->model && d->model != QAbstractItemModelPrivate::staticEmptyModel()) {
d->modelDescription
TRUEnever evaluated
FALSEnever evaluated
d->model != QA...icEmptyModel()Description
TRUEnever evaluated
FALSEnever evaluated
0
1117 disconnect(d->model, SIGNAL(rowsInserted(QModelIndex,int,int)),-
1118 this, SLOT(_q_updateSpanInsertedRows(QModelIndex,int,int)));-
1119 disconnect(d->model, SIGNAL(columnsInserted(QModelIndex,int,int)),-
1120 this, SLOT(_q_updateSpanInsertedColumns(QModelIndex,int,int)));-
1121 disconnect(d->model, SIGNAL(rowsRemoved(QModelIndex,int,int)),-
1122 this, SLOT(_q_updateSpanRemovedRows(QModelIndex,int,int)));-
1123 disconnect(d->model, SIGNAL(columnsRemoved(QModelIndex,int,int)),-
1124 this, SLOT(_q_updateSpanRemovedColumns(QModelIndex,int,int)));-
1125 }
never executed: end of block
0
1126 if (d->selectionModel) { // support row editing
d->selectionModelDescription
TRUEnever evaluated
FALSEnever evaluated
0
1127 disconnect(d->selectionModel, SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),-
1128 d->model, SLOT(submit()));-
1129 }
never executed: end of block
0
1130 if (model) { //and connect to the new one
modelDescription
TRUEnever evaluated
FALSEnever evaluated
0
1131 connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)),-
1132 this, SLOT(_q_updateSpanInsertedRows(QModelIndex,int,int)));-
1133 connect(model, SIGNAL(columnsInserted(QModelIndex,int,int)),-
1134 this, SLOT(_q_updateSpanInsertedColumns(QModelIndex,int,int)));-
1135 connect(model, SIGNAL(rowsRemoved(QModelIndex,int,int)),-
1136 this, SLOT(_q_updateSpanRemovedRows(QModelIndex,int,int)));-
1137 connect(model, SIGNAL(columnsRemoved(QModelIndex,int,int)),-
1138 this, SLOT(_q_updateSpanRemovedColumns(QModelIndex,int,int)));-
1139 }
never executed: end of block
0
1140 d->verticalHeader->setModel(model);-
1141 d->horizontalHeader->setModel(model);-
1142 QAbstractItemView::setModel(model);-
1143}
never executed: end of block
0
1144-
1145/*!-
1146 \reimp-
1147*/-
1148void QTableView::setRootIndex(const QModelIndex &index)-
1149{-
1150 Q_D(QTableView);-
1151 if (index == d->root) {
index == d->rootDescription
TRUEnever evaluated
FALSEnever evaluated
0
1152 viewport()->update();-
1153 return;
never executed: return;
0
1154 }-
1155 d->verticalHeader->setRootIndex(index);-
1156 d->horizontalHeader->setRootIndex(index);-
1157 QAbstractItemView::setRootIndex(index);-
1158}
never executed: end of block
0
1159-
1160/*!-
1161 \internal-
1162*/-
1163void QTableView::doItemsLayout()-
1164{-
1165 Q_D(QTableView);-
1166 QAbstractItemView::doItemsLayout();-
1167 d->verticalHeader->d_func()->setScrollOffset(verticalScrollBar(), verticalScrollMode());-
1168 if (!d->verticalHeader->updatesEnabled())
!d->verticalHe...datesEnabled()Description
TRUEnever evaluated
FALSEnever evaluated
0
1169 d->verticalHeader->setUpdatesEnabled(true);
never executed: d->verticalHeader->setUpdatesEnabled(true);
0
1170}
never executed: end of block
0
1171-
1172/*!-
1173 \reimp-
1174*/-
1175void QTableView::setSelectionModel(QItemSelectionModel *selectionModel)-
1176{-
1177 Q_D(QTableView);-
1178 Q_ASSERT(selectionModel);-
1179 if (d->selectionModel) {
d->selectionModelDescription
TRUEnever evaluated
FALSEnever evaluated
0
1180 // support row editing-
1181 disconnect(d->selectionModel, SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),-
1182 d->model, SLOT(submit()));-
1183 }
never executed: end of block
0
1184-
1185 d->verticalHeader->setSelectionModel(selectionModel);-
1186 d->horizontalHeader->setSelectionModel(selectionModel);-
1187 QAbstractItemView::setSelectionModel(selectionModel);-
1188-
1189 if (d->selectionModel) {
d->selectionModelDescription
TRUEnever evaluated
FALSEnever evaluated
0
1190 // support row editing-
1191 connect(d->selectionModel, SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),-
1192 d->model, SLOT(submit()));-
1193 }
never executed: end of block
0
1194}
never executed: end of block
0
1195-
1196/*!-
1197 Returns the table view's horizontal header.-
1198-
1199 \sa setHorizontalHeader(), verticalHeader(), QAbstractItemModel::headerData()-
1200*/-
1201QHeaderView *QTableView::horizontalHeader() const-
1202{-
1203 Q_D(const QTableView);-
1204 return d->horizontalHeader;
never executed: return d->horizontalHeader;
0
1205}-
1206-
1207/*!-
1208 Returns the table view's vertical header.-
1209-
1210 \sa setVerticalHeader(), horizontalHeader(), QAbstractItemModel::headerData()-
1211*/-
1212QHeaderView *QTableView::verticalHeader() const-
1213{-
1214 Q_D(const QTableView);-
1215 return d->verticalHeader;
never executed: return d->verticalHeader;
0
1216}-
1217-
1218/*!-
1219 Sets the widget to use for the horizontal header to \a header.-
1220-
1221 \sa horizontalHeader(), setVerticalHeader()-
1222*/-
1223void QTableView::setHorizontalHeader(QHeaderView *header)-
1224{-
1225 Q_D(QTableView);-
1226-
1227 if (!header || header == d->horizontalHeader)
!headerDescription
TRUEnever evaluated
FALSEnever evaluated
header == d->horizontalHeaderDescription
TRUEnever evaluated
FALSEnever evaluated
0
1228 return;
never executed: return;
0
1229 if (d->horizontalHeader && d->horizontalHeader->parent() == this)
d->horizontalHeaderDescription
TRUEnever evaluated
FALSEnever evaluated
d->horizontalH...rent() == thisDescription
TRUEnever evaluated
FALSEnever evaluated
0
1230 delete d->horizontalHeader;
never executed: delete d->horizontalHeader;
0
1231 d->horizontalHeader = header;-
1232 d->horizontalHeader->setParent(this);-
1233 d->horizontalHeader->d_func()->setAllowUserMoveOfSection0(true);-
1234 if (!d->horizontalHeader->model()) {
!d->horizontalHeader->model()Description
TRUEnever evaluated
FALSEnever evaluated
0
1235 d->horizontalHeader->setModel(d->model);-
1236 if (d->selectionModel)
d->selectionModelDescription
TRUEnever evaluated
FALSEnever evaluated
0
1237 d->horizontalHeader->setSelectionModel(d->selectionModel);
never executed: d->horizontalHeader->setSelectionModel(d->selectionModel);
0
1238 }
never executed: end of block
0
1239-
1240 connect(d->horizontalHeader,SIGNAL(sectionResized(int,int,int)),-
1241 this, SLOT(columnResized(int,int,int)));-
1242 connect(d->horizontalHeader, SIGNAL(sectionMoved(int,int,int)),-
1243 this, SLOT(columnMoved(int,int,int)));-
1244 connect(d->horizontalHeader, SIGNAL(sectionCountChanged(int,int)),-
1245 this, SLOT(columnCountChanged(int,int)));-
1246 connect(d->horizontalHeader, SIGNAL(sectionPressed(int)), this, SLOT(selectColumn(int)));-
1247 connect(d->horizontalHeader, SIGNAL(sectionEntered(int)), this, SLOT(_q_selectColumn(int)));-
1248 connect(d->horizontalHeader, SIGNAL(sectionHandleDoubleClicked(int)),-
1249 this, SLOT(resizeColumnToContents(int)));-
1250 connect(d->horizontalHeader, SIGNAL(geometriesChanged()), this, SLOT(updateGeometries()));-
1251-
1252 //update the sorting enabled states on the new header-
1253 setSortingEnabled(d->sortingEnabled);-
1254}
never executed: end of block
0
1255-
1256/*!-
1257 Sets the widget to use for the vertical header to \a header.-
1258-
1259 \sa verticalHeader(), setHorizontalHeader()-
1260*/-
1261void QTableView::setVerticalHeader(QHeaderView *header)-
1262{-
1263 Q_D(QTableView);-
1264-
1265 if (!header || header == d->verticalHeader)
!headerDescription
TRUEnever evaluated
FALSEnever evaluated
header == d->verticalHeaderDescription
TRUEnever evaluated
FALSEnever evaluated
0
1266 return;
never executed: return;
0
1267 if (d->verticalHeader && d->verticalHeader->parent() == this)
d->verticalHeaderDescription
TRUEnever evaluated
FALSEnever evaluated
d->verticalHea...rent() == thisDescription
TRUEnever evaluated
FALSEnever evaluated
0
1268 delete d->verticalHeader;
never executed: delete d->verticalHeader;
0
1269 d->verticalHeader = header;-
1270 d->verticalHeader->setParent(this);-
1271 d->verticalHeader->d_func()->setAllowUserMoveOfSection0(true);-
1272 if (!d->verticalHeader->model()) {
!d->verticalHeader->model()Description
TRUEnever evaluated
FALSEnever evaluated
0
1273 d->verticalHeader->setModel(d->model);-
1274 if (d->selectionModel)
d->selectionModelDescription
TRUEnever evaluated
FALSEnever evaluated
0
1275 d->verticalHeader->setSelectionModel(d->selectionModel);
never executed: d->verticalHeader->setSelectionModel(d->selectionModel);
0
1276 }
never executed: end of block
0
1277-
1278 connect(d->verticalHeader, SIGNAL(sectionResized(int,int,int)),-
1279 this, SLOT(rowResized(int,int,int)));-
1280 connect(d->verticalHeader, SIGNAL(sectionMoved(int,int,int)),-
1281 this, SLOT(rowMoved(int,int,int)));-
1282 connect(d->verticalHeader, SIGNAL(sectionCountChanged(int,int)),-
1283 this, SLOT(rowCountChanged(int,int)));-
1284 connect(d->verticalHeader, SIGNAL(sectionPressed(int)), this, SLOT(selectRow(int)));-
1285 connect(d->verticalHeader, SIGNAL(sectionEntered(int)), this, SLOT(_q_selectRow(int)));-
1286 connect(d->verticalHeader, SIGNAL(sectionHandleDoubleClicked(int)),-
1287 this, SLOT(resizeRowToContents(int)));-
1288 connect(d->verticalHeader, SIGNAL(geometriesChanged()), this, SLOT(updateGeometries()));-
1289}
never executed: end of block
0
1290-
1291/*!-
1292 \internal-
1293-
1294 Scroll the contents of the table view by (\a dx, \a dy).-
1295*/-
1296void QTableView::scrollContentsBy(int dx, int dy)-
1297{-
1298 Q_D(QTableView);-
1299-
1300 d->delayedAutoScroll.stop(); // auto scroll was canceled by the user scrolling-
1301-
1302 dx = isRightToLeft() ? -dx : dx;
isRightToLeft()Description
TRUEnever evaluated
FALSEnever evaluated
0
1303 if (dx) {
dxDescription
TRUEnever evaluated
FALSEnever evaluated
0
1304 int oldOffset = d->horizontalHeader->offset();-
1305 d->horizontalHeader->d_func()->setScrollOffset(horizontalScrollBar(), horizontalScrollMode());-
1306 if (horizontalScrollMode() == QAbstractItemView::ScrollPerItem) {
horizontalScro...:ScrollPerItemDescription
TRUEnever evaluated
FALSEnever evaluated
0
1307 int newOffset = d->horizontalHeader->offset();-
1308 dx = isRightToLeft() ? newOffset - oldOffset : oldOffset - newOffset;
isRightToLeft()Description
TRUEnever evaluated
FALSEnever evaluated
0
1309 }
never executed: end of block
0
1310 }
never executed: end of block
0
1311 if (dy) {
dyDescription
TRUEnever evaluated
FALSEnever evaluated
0
1312 int oldOffset = d->verticalHeader->offset();-
1313 d->verticalHeader->d_func()->setScrollOffset(verticalScrollBar(), verticalScrollMode());-
1314 if (verticalScrollMode() == QAbstractItemView::ScrollPerItem) {
verticalScroll...:ScrollPerItemDescription
TRUEnever evaluated
FALSEnever evaluated
0
1315 int newOffset = d->verticalHeader->offset();-
1316 dy = oldOffset - newOffset;-
1317 }
never executed: end of block
0
1318 }
never executed: end of block
0
1319 d->scrollContentsBy(dx, dy);-
1320-
1321 if (d->showGrid) {
d->showGridDescription
TRUEnever evaluated
FALSEnever evaluated
0
1322 //we need to update the first line of the previous top item in the view-
1323 //because it has the grid drawn if the header is invisible.-
1324 //It is strictly related to what's done at then end of the paintEvent-
1325 if (dy > 0 && d->horizontalHeader->isHidden() && d->verticalScrollMode == ScrollPerItem) {
dy > 0Description
TRUEnever evaluated
FALSEnever evaluated
d->horizontalH...er->isHidden()Description
TRUEnever evaluated
FALSEnever evaluated
d->verticalScr... ScrollPerItemDescription
TRUEnever evaluated
FALSEnever evaluated
0
1326 d->viewport->update(0, dy, d->viewport->width(), dy);-
1327 }
never executed: end of block
0
1328 if (dx > 0 && d->verticalHeader->isHidden() && d->horizontalScrollMode == ScrollPerItem) {
dx > 0Description
TRUEnever evaluated
FALSEnever evaluated
d->verticalHeader->isHidden()Description
TRUEnever evaluated
FALSEnever evaluated
d->horizontalS... ScrollPerItemDescription
TRUEnever evaluated
FALSEnever evaluated
0
1329 d->viewport->update(dx, 0, dx, d->viewport->height());-
1330 }
never executed: end of block
0
1331 }
never executed: end of block
0
1332}
never executed: end of block
0
1333-
1334/*!-
1335 \reimp-
1336*/-
1337QStyleOptionViewItem QTableView::viewOptions() const-
1338{-
1339 QStyleOptionViewItem option = QAbstractItemView::viewOptions();-
1340 option.showDecorationSelected = true;-
1341 return option;
never executed: return option;
0
1342}-
1343-
1344/*!-
1345 Paints the table on receipt of the given paint event \a event.-
1346*/-
1347void QTableView::paintEvent(QPaintEvent *event)-
1348{-
1349 Q_D(QTableView);-
1350 // setup temp variables for the painting-
1351 QStyleOptionViewItem option = d->viewOptionsV1();-
1352 const QPoint offset = d->scrollDelayOffset;-
1353 const bool showGrid = d->showGrid;-
1354 const int gridSize = showGrid ? 1 : 0;
showGridDescription
TRUEnever evaluated
FALSEnever evaluated
0
1355 const int gridHint = style()->styleHint(QStyle::SH_Table_GridLineColor, &option, this);-
1356 const QColor gridColor = static_cast<QRgb>(gridHint);-
1357 const QPen gridPen = QPen(gridColor, 0, d->gridStyle);-
1358 const QHeaderView *verticalHeader = d->verticalHeader;-
1359 const QHeaderView *horizontalHeader = d->horizontalHeader;-
1360 const bool alternate = d->alternatingColors;-
1361 const bool rightToLeft = isRightToLeft();-
1362-
1363 QPainter painter(d->viewport);-
1364-
1365 // if there's nothing to do, clear the area and return-
1366 if (horizontalHeader->count() == 0 || verticalHeader->count() == 0 || !d->itemDelegate)
horizontalHeader->count() == 0Description
TRUEnever evaluated
FALSEnever evaluated
verticalHeader->count() == 0Description
TRUEnever evaluated
FALSEnever evaluated
!d->itemDelegateDescription
TRUEnever evaluated
FALSEnever evaluated
0
1367 return;
never executed: return;
0
1368-
1369 uint x = horizontalHeader->length() - horizontalHeader->offset() - (rightToLeft ? 0 : 1);
rightToLeftDescription
TRUEnever evaluated
FALSEnever evaluated
0
1370 uint y = verticalHeader->length() - verticalHeader->offset() - 1;-
1371-
1372 const QRegion region = event->region().translated(offset);-
1373 const QVector<QRect> rects = region.rects();-
1374-
1375 //firstVisualRow is the visual index of the first visible row. lastVisualRow is the visual index of the last visible Row.-
1376 //same goes for ...VisualColumn-
1377 int firstVisualRow = qMax(verticalHeader->visualIndexAt(0),0);-
1378 int lastVisualRow = verticalHeader->visualIndexAt(verticalHeader->viewport()->height());-
1379 if (lastVisualRow == -1)
lastVisualRow == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
1380 lastVisualRow = d->model->rowCount(d->root) - 1;
never executed: lastVisualRow = d->model->rowCount(d->root) - 1;
0
1381-
1382 int firstVisualColumn = horizontalHeader->visualIndexAt(0);-
1383 int lastVisualColumn = horizontalHeader->visualIndexAt(horizontalHeader->viewport()->width());-
1384 if (rightToLeft)
rightToLeftDescription
TRUEnever evaluated
FALSEnever evaluated
0
1385 qSwap(firstVisualColumn, lastVisualColumn);
never executed: qSwap(firstVisualColumn, lastVisualColumn);
0
1386 if (firstVisualColumn == -1)
firstVisualColumn == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
1387 firstVisualColumn = 0;
never executed: firstVisualColumn = 0;
0
1388 if (lastVisualColumn == -1)
lastVisualColumn == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
1389 lastVisualColumn = horizontalHeader->count() - 1;
never executed: lastVisualColumn = horizontalHeader->count() - 1;
0
1390-
1391 QBitArray drawn((lastVisualRow - firstVisualRow + 1) * (lastVisualColumn - firstVisualColumn + 1));-
1392-
1393 if (d->hasSpans()) {
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
1394 d->drawAndClipSpans(region, &painter, option, &drawn,-
1395 firstVisualRow, lastVisualRow, firstVisualColumn, lastVisualColumn);-
1396 }
never executed: end of block
0
1397-
1398 for (int i = 0; i < rects.size(); ++i) {
i < rects.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
1399 QRect dirtyArea = rects.at(i);-
1400 dirtyArea.setBottom(qMin(dirtyArea.bottom(), int(y)));-
1401 if (rightToLeft) {
rightToLeftDescription
TRUEnever evaluated
FALSEnever evaluated
0
1402 dirtyArea.setLeft(qMax(dirtyArea.left(), d->viewport->width() - int(x)));-
1403 } else {
never executed: end of block
0
1404 dirtyArea.setRight(qMin(dirtyArea.right(), int(x)));-
1405 }
never executed: end of block
0
1406-
1407 // get the horizontal start and end visual sections-
1408 int left = horizontalHeader->visualIndexAt(dirtyArea.left());-
1409 int right = horizontalHeader->visualIndexAt(dirtyArea.right());-
1410 if (rightToLeft)
rightToLeftDescription
TRUEnever evaluated
FALSEnever evaluated
0
1411 qSwap(left, right);
never executed: qSwap(left, right);
0
1412 if (left == -1) left = 0;
never executed: left = 0;
left == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
1413 if (right == -1) right = horizontalHeader->count() - 1;
never executed: right = horizontalHeader->count() - 1;
right == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
1414-
1415 // get the vertical start and end visual sections and if alternate color-
1416 int bottom = verticalHeader->visualIndexAt(dirtyArea.bottom());-
1417 if (bottom == -1) bottom = verticalHeader->count() - 1;
never executed: bottom = verticalHeader->count() - 1;
bottom == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
1418 int top = 0;-
1419 bool alternateBase = false;-
1420 if (alternate && verticalHeader->sectionsHidden()) {
alternateDescription
TRUEnever evaluated
FALSEnever evaluated
verticalHeader...ctionsHidden()Description
TRUEnever evaluated
FALSEnever evaluated
0
1421 uint verticalOffset = verticalHeader->offset();-
1422 int row = verticalHeader->logicalIndex(top);-
1423 for (int y = 0;-
1424 ((uint)(y += verticalHeader->sectionSize(top)) <= verticalOffset) && (top < bottom);
((uint)(y += v...erticalOffset)Description
TRUEnever evaluated
FALSEnever evaluated
(top < bottom)Description
TRUEnever evaluated
FALSEnever evaluated
0
1425 ++top) {-
1426 row = verticalHeader->logicalIndex(top);-
1427 if (alternate && !verticalHeader->isSectionHidden(row))
alternateDescription
TRUEnever evaluated
FALSEnever evaluated
!verticalHeade...ionHidden(row)Description
TRUEnever evaluated
FALSEnever evaluated
0
1428 alternateBase = !alternateBase;
never executed: alternateBase = !alternateBase;
0
1429 }
never executed: end of block
0
1430 } else {
never executed: end of block
0
1431 top = verticalHeader->visualIndexAt(dirtyArea.top());-
1432 alternateBase = (top & 1) && alternate;
(top & 1)Description
TRUEnever evaluated
FALSEnever evaluated
alternateDescription
TRUEnever evaluated
FALSEnever evaluated
0
1433 }
never executed: end of block
0
1434 if (top == -1 || top > bottom)
top == -1Description
TRUEnever evaluated
FALSEnever evaluated
top > bottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
1435 continue;
never executed: continue;
0
1436-
1437 // Paint each row item-
1438 for (int visualRowIndex = top; visualRowIndex <= bottom; ++visualRowIndex) {
visualRowIndex <= bottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
1439 int row = verticalHeader->logicalIndex(visualRowIndex);-
1440 if (verticalHeader->isSectionHidden(row))
verticalHeader...ionHidden(row)Description
TRUEnever evaluated
FALSEnever evaluated
0
1441 continue;
never executed: continue;
0
1442 int rowY = rowViewportPosition(row);-
1443 rowY += offset.y();-
1444 int rowh = rowHeight(row) - gridSize;-
1445-
1446 // Paint each column item-
1447 for (int visualColumnIndex = left; visualColumnIndex <= right; ++visualColumnIndex) {
visualColumnIndex <= rightDescription
TRUEnever evaluated
FALSEnever evaluated
0
1448 int currentBit = (visualRowIndex - firstVisualRow) * (lastVisualColumn - firstVisualColumn + 1)-
1449 + visualColumnIndex - firstVisualColumn;-
1450-
1451 if (currentBit < 0 || currentBit >= drawn.size() || drawn.testBit(currentBit))
currentBit < 0Description
TRUEnever evaluated
FALSEnever evaluated
currentBit >= drawn.size()Description
TRUEnever evaluated
FALSEnever evaluated
drawn.testBit(currentBit)Description
TRUEnever evaluated
FALSEnever evaluated
0
1452 continue;
never executed: continue;
0
1453 drawn.setBit(currentBit);-
1454-
1455 int col = horizontalHeader->logicalIndex(visualColumnIndex);-
1456 if (horizontalHeader->isSectionHidden(col))
horizontalHead...ionHidden(col)Description
TRUEnever evaluated
FALSEnever evaluated
0
1457 continue;
never executed: continue;
0
1458 int colp = columnViewportPosition(col);-
1459 colp += offset.x();-
1460 int colw = columnWidth(col) - gridSize;-
1461-
1462 const QModelIndex index = d->model->index(row, col, d->root);-
1463 if (index.isValid()) {
index.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
1464 option.rect = QRect(colp + (showGrid && rightToLeft ? 1 : 0), rowY, colw, rowh);-
1465 if (alternate) {
alternateDescription
TRUEnever evaluated
FALSEnever evaluated
0
1466 if (alternateBase)
alternateBaseDescription
TRUEnever evaluated
FALSEnever evaluated
0
1467 option.features |= QStyleOptionViewItem::Alternate;
never executed: option.features |= QStyleOptionViewItem::Alternate;
0
1468 else-
1469 option.features &= ~QStyleOptionViewItem::Alternate;
never executed: option.features &= ~QStyleOptionViewItem::Alternate;
0
1470 }-
1471 d->drawCell(&painter, option, index);-
1472 }
never executed: end of block
0
1473 }
never executed: end of block
0
1474 alternateBase = !alternateBase && alternate;
!alternateBaseDescription
TRUEnever evaluated
FALSEnever evaluated
alternateDescription
TRUEnever evaluated
FALSEnever evaluated
0
1475 }
never executed: end of block
0
1476-
1477 if (showGrid) {
showGridDescription
TRUEnever evaluated
FALSEnever evaluated
0
1478 // Find the bottom right (the last rows/columns might be hidden)-
1479 while (verticalHeader->isSectionHidden(verticalHeader->logicalIndex(bottom))) --bottom;
never executed: --bottom;
verticalHeader...Index(bottom))Description
TRUEnever evaluated
FALSEnever evaluated
0
1480 QPen old = painter.pen();-
1481 painter.setPen(gridPen);-
1482 // Paint each row-
1483 for (int visualIndex = top; visualIndex <= bottom; ++visualIndex) {
visualIndex <= bottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
1484 int row = verticalHeader->logicalIndex(visualIndex);-
1485 if (verticalHeader->isSectionHidden(row))
verticalHeader...ionHidden(row)Description
TRUEnever evaluated
FALSEnever evaluated
0
1486 continue;
never executed: continue;
0
1487 int rowY = rowViewportPosition(row);-
1488 rowY += offset.y();-
1489 int rowh = rowHeight(row) - gridSize;-
1490 painter.drawLine(dirtyArea.left(), rowY + rowh, dirtyArea.right(), rowY + rowh);-
1491 }
never executed: end of block
0
1492-
1493 // Paint each column-
1494 for (int h = left; h <= right; ++h) {
h <= rightDescription
TRUEnever evaluated
FALSEnever evaluated
0
1495 int col = horizontalHeader->logicalIndex(h);-
1496 if (horizontalHeader->isSectionHidden(col))
horizontalHead...ionHidden(col)Description
TRUEnever evaluated
FALSEnever evaluated
0
1497 continue;
never executed: continue;
0
1498 int colp = columnViewportPosition(col);-
1499 colp += offset.x();-
1500 if (!rightToLeft)
!rightToLeftDescription
TRUEnever evaluated
FALSEnever evaluated
0
1501 colp += columnWidth(col) - gridSize;
never executed: colp += columnWidth(col) - gridSize;
0
1502 painter.drawLine(colp, dirtyArea.top(), colp, dirtyArea.bottom());-
1503 }
never executed: end of block
0
1504-
1505 //draw the top & left grid lines if the headers are not visible.-
1506 //We do update this line when subsequent scroll happen (see scrollContentsBy)-
1507 if (horizontalHeader->isHidden() && verticalScrollMode() == ScrollPerItem)
horizontalHeader->isHidden()Description
TRUEnever evaluated
FALSEnever evaluated
verticalScroll... ScrollPerItemDescription
TRUEnever evaluated
FALSEnever evaluated
0
1508 painter.drawLine(dirtyArea.left(), 0, dirtyArea.right(), 0);
never executed: painter.drawLine(dirtyArea.left(), 0, dirtyArea.right(), 0);
0
1509 if (verticalHeader->isHidden() && horizontalScrollMode() == ScrollPerItem)
verticalHeader->isHidden()Description
TRUEnever evaluated
FALSEnever evaluated
horizontalScro... ScrollPerItemDescription
TRUEnever evaluated
FALSEnever evaluated
0
1510 painter.drawLine(0, dirtyArea.top(), 0, dirtyArea.bottom());
never executed: painter.drawLine(0, dirtyArea.top(), 0, dirtyArea.bottom());
0
1511 painter.setPen(old);-
1512 }
never executed: end of block
0
1513 }
never executed: end of block
0
1514-
1515#ifndef QT_NO_DRAGANDDROP-
1516 // Paint the dropIndicator-
1517 d->paintDropIndicator(&painter);-
1518#endif-
1519}
never executed: end of block
0
1520-
1521/*!-
1522 Returns the index position of the model item corresponding to the-
1523 table item at position \a pos in contents coordinates.-
1524*/-
1525QModelIndex QTableView::indexAt(const QPoint &pos) const-
1526{-
1527 Q_D(const QTableView);-
1528 d->executePostedLayout();-
1529 int r = rowAt(pos.y());-
1530 int c = columnAt(pos.x());-
1531 if (r >= 0 && c >= 0) {
r >= 0Description
TRUEnever evaluated
FALSEnever evaluated
c >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1532 if (d->hasSpans()) {
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
1533 QSpanCollection::Span span = d->span(r, c);-
1534 r = span.top();-
1535 c = span.left();-
1536 }
never executed: end of block
0
1537 return d->model->index(r, c, d->root);
never executed: return d->model->index(r, c, d->root);
0
1538 }-
1539 return QModelIndex();
never executed: return QModelIndex();
0
1540}-
1541-
1542/*!-
1543 Returns the horizontal offset of the items in the table view.-
1544-
1545 Note that the table view uses the horizontal header section-
1546 positions to determine the positions of columns in the view.-
1547-
1548 \sa verticalOffset()-
1549*/-
1550int QTableView::horizontalOffset() const-
1551{-
1552 Q_D(const QTableView);-
1553 return d->horizontalHeader->offset();
never executed: return d->horizontalHeader->offset();
0
1554}-
1555-
1556/*!-
1557 Returns the vertical offset of the items in the table view.-
1558-
1559 Note that the table view uses the vertical header section-
1560 positions to determine the positions of rows in the view.-
1561-
1562 \sa horizontalOffset()-
1563*/-
1564int QTableView::verticalOffset() const-
1565{-
1566 Q_D(const QTableView);-
1567 return d->verticalHeader->offset();
never executed: return d->verticalHeader->offset();
0
1568}-
1569-
1570/*!-
1571 \fn QModelIndex QTableView::moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers)-
1572-
1573 Moves the cursor in accordance with the given \a cursorAction, using the-
1574 information provided by the \a modifiers.-
1575-
1576 \sa QAbstractItemView::CursorAction-
1577*/-
1578QModelIndex QTableView::moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers)-
1579{-
1580 Q_D(QTableView);-
1581 Q_UNUSED(modifiers);-
1582-
1583 int bottom = d->model->rowCount(d->root) - 1;-
1584 // make sure that bottom is the bottommost *visible* row-
1585 while (bottom >= 0 && isRowHidden(d->logicalRow(bottom)))
bottom >= 0Description
TRUEnever evaluated
FALSEnever evaluated
isRowHidden(d-...alRow(bottom))Description
TRUEnever evaluated
FALSEnever evaluated
0
1586 --bottom;
never executed: --bottom;
0
1587-
1588 int right = d->model->columnCount(d->root) - 1;-
1589-
1590 while (right >= 0 && isColumnHidden(d->logicalColumn(right)))
right >= 0Description
TRUEnever evaluated
FALSEnever evaluated
isColumnHidden...Column(right))Description
TRUEnever evaluated
FALSEnever evaluated
0
1591 --right;
never executed: --right;
0
1592-
1593 if (bottom == -1 || right == -1)
bottom == -1Description
TRUEnever evaluated
FALSEnever evaluated
right == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
1594 return QModelIndex(); // model is empty
never executed: return QModelIndex();
0
1595-
1596 QModelIndex current = currentIndex();-
1597-
1598 if (!current.isValid()) {
!current.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
1599 int row = 0;-
1600 int column = 0;-
1601 while (column < right && isColumnHidden(d->logicalColumn(column)))
column < rightDescription
TRUEnever evaluated
FALSEnever evaluated
isColumnHidden...olumn(column))Description
TRUEnever evaluated
FALSEnever evaluated
0
1602 ++column;
never executed: ++column;
0
1603 while (isRowHidden(d->logicalRow(row)) && row < bottom)
isRowHidden(d-...gicalRow(row))Description
TRUEnever evaluated
FALSEnever evaluated
row < bottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
1604 ++row;
never executed: ++row;
0
1605 d->visualCursor = QPoint(column, row);-
1606 return d->model->index(d->logicalRow(row), d->logicalColumn(column), d->root);
never executed: return d->model->index(d->logicalRow(row), d->logicalColumn(column), d->root);
0
1607 }-
1608-
1609 // Update visual cursor if current index has changed.-
1610 QPoint visualCurrent(d->visualColumn(current.column()), d->visualRow(current.row()));-
1611 if (visualCurrent != d->visualCursor) {
visualCurrent ...->visualCursorDescription
TRUEnever evaluated
FALSEnever evaluated
0
1612 if (d->hasSpans()) {
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
1613 QSpanCollection::Span span = d->span(current.row(), current.column());-
1614 if (span.top() > d->visualCursor.y() || d->visualCursor.y() > span.bottom()
span.top() > d...sualCursor.y()Description
TRUEnever evaluated
FALSEnever evaluated
d->visualCurso... span.bottom()Description
TRUEnever evaluated
FALSEnever evaluated
0
1615 || span.left() > d->visualCursor.x() || d->visualCursor.x() > span.right())
span.left() > ...sualCursor.x()Description
TRUEnever evaluated
FALSEnever evaluated
d->visualCurso...> span.right()Description
TRUEnever evaluated
FALSEnever evaluated
0
1616 d->visualCursor = visualCurrent;
never executed: d->visualCursor = visualCurrent;
0
1617 } else {
never executed: end of block
0
1618 d->visualCursor = visualCurrent;-
1619 }
never executed: end of block
0
1620 }-
1621-
1622 int visualRow = d->visualCursor.y();-
1623 if (visualRow > bottom)
visualRow > bottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
1624 visualRow = bottom;
never executed: visualRow = bottom;
0
1625 Q_ASSERT(visualRow != -1);-
1626 int visualColumn = d->visualCursor.x();-
1627 if (visualColumn > right)
visualColumn > rightDescription
TRUEnever evaluated
FALSEnever evaluated
0
1628 visualColumn = right;
never executed: visualColumn = right;
0
1629 Q_ASSERT(visualColumn != -1);-
1630-
1631 if (isRightToLeft()) {
isRightToLeft()Description
TRUEnever evaluated
FALSEnever evaluated
0
1632 if (cursorAction == MoveLeft)
cursorAction == MoveLeftDescription
TRUEnever evaluated
FALSEnever evaluated
0
1633 cursorAction = MoveRight;
never executed: cursorAction = MoveRight;
0
1634 else if (cursorAction == MoveRight)
cursorAction == MoveRightDescription
TRUEnever evaluated
FALSEnever evaluated
0
1635 cursorAction = MoveLeft;
never executed: cursorAction = MoveLeft;
0
1636 }
never executed: end of block
0
1637-
1638 switch (cursorAction) {-
1639 case MoveUp: {
never executed: case MoveUp:
0
1640 int originalRow = visualRow;-
1641#ifdef QT_KEYPAD_NAVIGATION-
1642 if (QApplication::keypadNavigationEnabled() && visualRow == 0)-
1643 visualRow = d->visualRow(model()->rowCount() - 1) + 1;-
1644 // FIXME? visualRow = bottom + 1;-
1645#endif-
1646 int r = d->logicalRow(visualRow);-
1647 int c = d->logicalColumn(visualColumn);-
1648 if (r != -1 && d->hasSpans()) {
r != -1Description
TRUEnever evaluated
FALSEnever evaluated
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
1649 QSpanCollection::Span span = d->span(r, c);-
1650 if (span.width() > 1 || span.height() > 1)
span.width() > 1Description
TRUEnever evaluated
FALSEnever evaluated
span.height() > 1Description
TRUEnever evaluated
FALSEnever evaluated
0
1651 visualRow = d->visualRow(span.top());
never executed: visualRow = d->visualRow(span.top());
0
1652 }
never executed: end of block
0
1653 while (visualRow >= 0) {
visualRow >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1654 --visualRow;-
1655 r = d->logicalRow(visualRow);-
1656 c = d->logicalColumn(visualColumn);-
1657 if (r == -1 || (!isRowHidden(r) && d->isCellEnabled(r, c)))
r == -1Description
TRUEnever evaluated
FALSEnever evaluated
!isRowHidden(r)Description
TRUEnever evaluated
FALSEnever evaluated
d->isCellEnabled(r, c)Description
TRUEnever evaluated
FALSEnever evaluated
0
1658 break;
never executed: break;
0
1659 }
never executed: end of block
0
1660 if (visualRow < 0)
visualRow < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1661 visualRow = originalRow;
never executed: visualRow = originalRow;
0
1662 break;
never executed: break;
0
1663 }-
1664 case MoveDown: {
never executed: case MoveDown:
0
1665 int originalRow = visualRow;-
1666 if (d->hasSpans()) {
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
1667 QSpanCollection::Span span = d->span(current.row(), current.column());-
1668 visualRow = d->visualRow(d->rowSpanEndLogical(span.top(), span.height()));-
1669 }
never executed: end of block
0
1670#ifdef QT_KEYPAD_NAVIGATION-
1671 if (QApplication::keypadNavigationEnabled() && visualRow >= bottom)-
1672 visualRow = -1;-
1673#endif-
1674 int r = d->logicalRow(visualRow);-
1675 int c = d->logicalColumn(visualColumn);-
1676 if (r != -1 && d->hasSpans()) {
r != -1Description
TRUEnever evaluated
FALSEnever evaluated
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
1677 QSpanCollection::Span span = d->span(r, c);-
1678 if (span.width() > 1 || span.height() > 1)
span.width() > 1Description
TRUEnever evaluated
FALSEnever evaluated
span.height() > 1Description
TRUEnever evaluated
FALSEnever evaluated
0
1679 visualRow = d->visualRow(d->rowSpanEndLogical(span.top(), span.height()));
never executed: visualRow = d->visualRow(d->rowSpanEndLogical(span.top(), span.height()));
0
1680 }
never executed: end of block
0
1681 while (visualRow <= bottom) {
visualRow <= bottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
1682 ++visualRow;-
1683 r = d->logicalRow(visualRow);-
1684 c = d->logicalColumn(visualColumn);-
1685 if (r == -1 || (!isRowHidden(r) && d->isCellEnabled(r, c)))
r == -1Description
TRUEnever evaluated
FALSEnever evaluated
!isRowHidden(r)Description
TRUEnever evaluated
FALSEnever evaluated
d->isCellEnabled(r, c)Description
TRUEnever evaluated
FALSEnever evaluated
0
1686 break;
never executed: break;
0
1687 }
never executed: end of block
0
1688 if (visualRow > bottom)
visualRow > bottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
1689 visualRow = originalRow;
never executed: visualRow = originalRow;
0
1690 break;
never executed: break;
0
1691 }-
1692 case MovePrevious:
never executed: case MovePrevious:
0
1693 case MoveLeft: {
never executed: case MoveLeft:
0
1694 int originalRow = visualRow;-
1695 int originalColumn = visualColumn;-
1696 bool firstTime = true;-
1697 bool looped = false;-
1698 bool wrapped = false;-
1699 do {-
1700 int r = d->logicalRow(visualRow);-
1701 int c = d->logicalColumn(visualColumn);-
1702 if (firstTime && c != -1 && d->hasSpans()) {
firstTimeDescription
TRUEnever evaluated
FALSEnever evaluated
c != -1Description
TRUEnever evaluated
FALSEnever evaluated
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
1703 firstTime = false;-
1704 QSpanCollection::Span span = d->span(r, c);-
1705 if (span.width() > 1 || span.height() > 1)
span.width() > 1Description
TRUEnever evaluated
FALSEnever evaluated
span.height() > 1Description
TRUEnever evaluated
FALSEnever evaluated
0
1706 visualColumn = d->visualColumn(span.left());
never executed: visualColumn = d->visualColumn(span.left());
0
1707 }
never executed: end of block
0
1708 while (visualColumn >= 0) {
visualColumn >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1709 --visualColumn;-
1710 r = d->logicalRow(visualRow);-
1711 c = d->logicalColumn(visualColumn);-
1712 if (r == -1 || c == -1 || (!isRowHidden(r) && !isColumnHidden(c) && d->isCellEnabled(r, c)))
r == -1Description
TRUEnever evaluated
FALSEnever evaluated
c == -1Description
TRUEnever evaluated
FALSEnever evaluated
!isRowHidden(r)Description
TRUEnever evaluated
FALSEnever evaluated
!isColumnHidden(c)Description
TRUEnever evaluated
FALSEnever evaluated
d->isCellEnabled(r, c)Description
TRUEnever evaluated
FALSEnever evaluated
0
1713 break;
never executed: break;
0
1714 if (wrapped && (originalRow < visualRow || (originalRow == visualRow && originalColumn <= visualColumn))) {
wrappedDescription
TRUEnever evaluated
FALSEnever evaluated
originalRow < visualRowDescription
TRUEnever evaluated
FALSEnever evaluated
originalRow == visualRowDescription
TRUEnever evaluated
FALSEnever evaluated
originalColumn <= visualColumnDescription
TRUEnever evaluated
FALSEnever evaluated
0
1715 looped = true;-
1716 break;
never executed: break;
0
1717 }-
1718 }
never executed: end of block
0
1719 if (cursorAction == MoveLeft || visualColumn >= 0)
cursorAction == MoveLeftDescription
TRUEnever evaluated
FALSEnever evaluated
visualColumn >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1720 break;
never executed: break;
0
1721 visualColumn = right + 1;-
1722 if (visualRow == 0) {
visualRow == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1723 wrapped = true;-
1724 visualRow = bottom;-
1725 } else {
never executed: end of block
0
1726 --visualRow;-
1727 }
never executed: end of block
0
1728 } while (!looped);
!loopedDescription
TRUEnever evaluated
FALSEnever evaluated
0
1729 if (visualColumn < 0)
visualColumn < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1730 visualColumn = originalColumn;
never executed: visualColumn = originalColumn;
0
1731 break;
never executed: break;
0
1732 }-
1733 case MoveNext:
never executed: case MoveNext:
0
1734 case MoveRight: {
never executed: case MoveRight:
0
1735 int originalRow = visualRow;-
1736 int originalColumn = visualColumn;-
1737 bool firstTime = true;-
1738 bool looped = false;-
1739 bool wrapped = false;-
1740 do {-
1741 int r = d->logicalRow(visualRow);-
1742 int c = d->logicalColumn(visualColumn);-
1743 if (firstTime && c != -1 && d->hasSpans()) {
firstTimeDescription
TRUEnever evaluated
FALSEnever evaluated
c != -1Description
TRUEnever evaluated
FALSEnever evaluated
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
1744 firstTime = false;-
1745 QSpanCollection::Span span = d->span(r, c);-
1746 if (span.width() > 1 || span.height() > 1)
span.width() > 1Description
TRUEnever evaluated
FALSEnever evaluated
span.height() > 1Description
TRUEnever evaluated
FALSEnever evaluated
0
1747 visualColumn = d->visualColumn(d->columnSpanEndLogical(span.left(), span.width()));
never executed: visualColumn = d->visualColumn(d->columnSpanEndLogical(span.left(), span.width()));
0
1748 }
never executed: end of block
0
1749 while (visualColumn <= right) {
visualColumn <= rightDescription
TRUEnever evaluated
FALSEnever evaluated
0
1750 ++visualColumn;-
1751 r = d->logicalRow(visualRow);-
1752 c = d->logicalColumn(visualColumn);-
1753 if (r == -1 || c == -1 || (!isRowHidden(r) && !isColumnHidden(c) && d->isCellEnabled(r, c)))
r == -1Description
TRUEnever evaluated
FALSEnever evaluated
c == -1Description
TRUEnever evaluated
FALSEnever evaluated
!isRowHidden(r)Description
TRUEnever evaluated
FALSEnever evaluated
!isColumnHidden(c)Description
TRUEnever evaluated
FALSEnever evaluated
d->isCellEnabled(r, c)Description
TRUEnever evaluated
FALSEnever evaluated
0
1754 break;
never executed: break;
0
1755 if (wrapped && (originalRow > visualRow || (originalRow == visualRow && originalColumn >= visualColumn))) {
wrappedDescription
TRUEnever evaluated
FALSEnever evaluated
originalRow > visualRowDescription
TRUEnever evaluated
FALSEnever evaluated
originalRow == visualRowDescription
TRUEnever evaluated
FALSEnever evaluated
originalColumn >= visualColumnDescription
TRUEnever evaluated
FALSEnever evaluated
0
1756 looped = true;-
1757 break;
never executed: break;
0
1758 }-
1759 }
never executed: end of block
0
1760 if (cursorAction == MoveRight || visualColumn <= right)
cursorAction == MoveRightDescription
TRUEnever evaluated
FALSEnever evaluated
visualColumn <= rightDescription
TRUEnever evaluated
FALSEnever evaluated
0
1761 break;
never executed: break;
0
1762 visualColumn = -1;-
1763 if (visualRow == bottom) {
visualRow == bottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
1764 wrapped = true;-
1765 visualRow = 0;-
1766 } else {
never executed: end of block
0
1767 ++visualRow;-
1768 }
never executed: end of block
0
1769 } while (!looped);
!loopedDescription
TRUEnever evaluated
FALSEnever evaluated
0
1770 if (visualColumn > right)
visualColumn > rightDescription
TRUEnever evaluated
FALSEnever evaluated
0
1771 visualColumn = originalColumn;
never executed: visualColumn = originalColumn;
0
1772 break;
never executed: break;
0
1773 }-
1774 case MoveHome:
never executed: case MoveHome:
0
1775 visualColumn = 0;-
1776 while (visualColumn < right && d->isVisualColumnHiddenOrDisabled(visualRow, visualColumn))
visualColumn < rightDescription
TRUEnever evaluated
FALSEnever evaluated
d->isVisualCol... visualColumn)Description
TRUEnever evaluated
FALSEnever evaluated
0
1777 ++visualColumn;
never executed: ++visualColumn;
0
1778 if (modifiers & Qt::ControlModifier) {
modifiers & Qt...ontrolModifierDescription
TRUEnever evaluated
FALSEnever evaluated
0
1779 visualRow = 0;-
1780 while (visualRow < bottom && d->isVisualRowHiddenOrDisabled(visualRow, visualColumn))
visualRow < bottomDescription
TRUEnever evaluated
FALSEnever evaluated
d->isVisualRow... visualColumn)Description
TRUEnever evaluated
FALSEnever evaluated
0
1781 ++visualRow;
never executed: ++visualRow;
0
1782 }
never executed: end of block
0
1783 break;
never executed: break;
0
1784 case MoveEnd:
never executed: case MoveEnd:
0
1785 visualColumn = right;-
1786 if (modifiers & Qt::ControlModifier)
modifiers & Qt...ontrolModifierDescription
TRUEnever evaluated
FALSEnever evaluated
0
1787 visualRow = bottom;
never executed: visualRow = bottom;
0
1788 break;
never executed: break;
0
1789 case MovePageUp: {
never executed: case MovePageUp:
0
1790 int newRow = rowAt(visualRect(current).bottom() - d->viewport->height());-
1791 if (newRow == -1)
newRow == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
1792 newRow = d->logicalRow(0);
never executed: newRow = d->logicalRow(0);
0
1793 return d->model->index(newRow, current.column(), d->root);
never executed: return d->model->index(newRow, current.column(), d->root);
0
1794 }-
1795 case MovePageDown: {
never executed: case MovePageDown:
0
1796 int newRow = rowAt(visualRect(current).top() + d->viewport->height());-
1797 if (newRow == -1)
newRow == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
1798 newRow = d->logicalRow(bottom);
never executed: newRow = d->logicalRow(bottom);
0
1799 return d->model->index(newRow, current.column(), d->root);
never executed: return d->model->index(newRow, current.column(), d->root);
0
1800 }}-
1801-
1802 d->visualCursor = QPoint(visualColumn, visualRow);-
1803 int logicalRow = d->logicalRow(visualRow);-
1804 int logicalColumn = d->logicalColumn(visualColumn);-
1805 if (!d->model->hasIndex(logicalRow, logicalColumn, d->root))
!d->model->has...lumn, d->root)Description
TRUEnever evaluated
FALSEnever evaluated
0
1806 return QModelIndex();
never executed: return QModelIndex();
0
1807-
1808 QModelIndex result = d->model->index(logicalRow, logicalColumn, d->root);-
1809 if (!d->isRowHidden(logicalRow) && !d->isColumnHidden(logicalColumn) && d->isIndexEnabled(result)) {
!d->isRowHidden(logicalRow)Description
TRUEnever evaluated
FALSEnever evaluated
!d->isColumnHi...logicalColumn)Description
TRUEnever evaluated
FALSEnever evaluated
d->isIndexEnabled(result)Description
TRUEnever evaluated
FALSEnever evaluated
0
1810 if (d->hasSpans()) {
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
1811 QSpanCollection::Span span = d->span(result.row(), result.column());-
1812 if (span.width() > 1 || span.height() > 1) {
span.width() > 1Description
TRUEnever evaluated
FALSEnever evaluated
span.height() > 1Description
TRUEnever evaluated
FALSEnever evaluated
0
1813 result = d->model->sibling(span.top(), span.left(), result);-
1814 }
never executed: end of block
0
1815 }
never executed: end of block
0
1816 return result;
never executed: return result;
0
1817 }-
1818-
1819 return QModelIndex();
never executed: return QModelIndex();
0
1820}-
1821-
1822/*!-
1823 \fn void QTableView::setSelection(const QRect &rect,-
1824 QItemSelectionModel::SelectionFlags flags)-
1825-
1826 Selects the items within the given \a rect and in accordance with-
1827 the specified selection \a flags.-
1828*/-
1829void QTableView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command)-
1830{-
1831 Q_D(QTableView);-
1832 QModelIndex tl = indexAt(QPoint(isRightToLeft() ? qMax(rect.left(), rect.right())-
1833 : qMin(rect.left(), rect.right()), qMin(rect.top(), rect.bottom())));-
1834 QModelIndex br = indexAt(QPoint(isRightToLeft() ? qMin(rect.left(), rect.right()) :-
1835 qMax(rect.left(), rect.right()), qMax(rect.top(), rect.bottom())));-
1836 if (!d->selectionModel || !tl.isValid() || !br.isValid() || !d->isIndexEnabled(tl) || !d->isIndexEnabled(br))
!d->selectionModelDescription
TRUEnever evaluated
FALSEnever evaluated
!tl.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
!br.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
!d->isIndexEnabled(tl)Description
TRUEnever evaluated
FALSEnever evaluated
!d->isIndexEnabled(br)Description
TRUEnever evaluated
FALSEnever evaluated
0
1837 return;
never executed: return;
0
1838-
1839 bool verticalMoved = verticalHeader()->sectionsMoved();-
1840 bool horizontalMoved = horizontalHeader()->sectionsMoved();-
1841-
1842 QItemSelection selection;-
1843-
1844 if (d->hasSpans()) {
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
1845 bool expanded;-
1846 int top = qMin(d->visualRow(tl.row()), d->visualRow(br.row()));-
1847 int left = qMin(d->visualColumn(tl.column()), d->visualColumn(br.column()));-
1848 int bottom = qMax(d->visualRow(tl.row()), d->visualRow(br.row()));-
1849 int right = qMax(d->visualColumn(tl.column()), d->visualColumn(br.column()));-
1850 do {-
1851 expanded = false;-
1852 foreach (QSpanCollection::Span *it, d->spans.spans) {-
1853 const QSpanCollection::Span &span = *it;-
1854 int t = d->visualRow(span.top());-
1855 int l = d->visualColumn(span.left());-
1856 int b = d->visualRow(d->rowSpanEndLogical(span.top(), span.height()));-
1857 int r = d->visualColumn(d->columnSpanEndLogical(span.left(), span.width()));-
1858 if ((t > bottom) || (l > right) || (top > b) || (left > r))
(t > bottom)Description
TRUEnever evaluated
FALSEnever evaluated
(l > right)Description
TRUEnever evaluated
FALSEnever evaluated
(top > b)Description
TRUEnever evaluated
FALSEnever evaluated
(left > r)Description
TRUEnever evaluated
FALSEnever evaluated
0
1859 continue; // no intersect
never executed: continue;
0
1860 if (t < top) {
t < topDescription
TRUEnever evaluated
FALSEnever evaluated
0
1861 top = t;-
1862 expanded = true;-
1863 }
never executed: end of block
0
1864 if (l < left) {
l < leftDescription
TRUEnever evaluated
FALSEnever evaluated
0
1865 left = l;-
1866 expanded = true;-
1867 }
never executed: end of block
0
1868 if (b > bottom) {
b > bottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
1869 bottom = b;-
1870 expanded = true;-
1871 }
never executed: end of block
0
1872 if (r > right) {
r > rightDescription
TRUEnever evaluated
FALSEnever evaluated
0
1873 right = r;-
1874 expanded = true;-
1875 }
never executed: end of block
0
1876 if (expanded)
expandedDescription
TRUEnever evaluated
FALSEnever evaluated
0
1877 break;
never executed: break;
0
1878 }
never executed: end of block
0
1879 } while (expanded);
never executed: end of block
expandedDescription
TRUEnever evaluated
FALSEnever evaluated
0
1880 selection.reserve((right - left + 1) * (bottom - top + 1));-
1881 for (int horizontal = left; horizontal <= right; ++horizontal) {
horizontal <= rightDescription
TRUEnever evaluated
FALSEnever evaluated
0
1882 int column = d->logicalColumn(horizontal);-
1883 for (int vertical = top; vertical <= bottom; ++vertical) {
vertical <= bottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
1884 int row = d->logicalRow(vertical);-
1885 QModelIndex index = d->model->index(row, column, d->root);-
1886 selection.append(QItemSelectionRange(index));-
1887 }
never executed: end of block
0
1888 }
never executed: end of block
0
1889 } else if (verticalMoved && horizontalMoved) {
never executed: end of block
verticalMovedDescription
TRUEnever evaluated
FALSEnever evaluated
horizontalMovedDescription
TRUEnever evaluated
FALSEnever evaluated
0
1890 int top = d->visualRow(tl.row());-
1891 int left = d->visualColumn(tl.column());-
1892 int bottom = d->visualRow(br.row());-
1893 int right = d->visualColumn(br.column());-
1894 selection.reserve((right - left + 1) * (bottom - top + 1));-
1895 for (int horizontal = left; horizontal <= right; ++horizontal) {
horizontal <= rightDescription
TRUEnever evaluated
FALSEnever evaluated
0
1896 int column = d->logicalColumn(horizontal);-
1897 for (int vertical = top; vertical <= bottom; ++vertical) {
vertical <= bottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
1898 int row = d->logicalRow(vertical);-
1899 QModelIndex index = d->model->index(row, column, d->root);-
1900 selection.append(QItemSelectionRange(index));-
1901 }
never executed: end of block
0
1902 }
never executed: end of block
0
1903 } else if (horizontalMoved) {
never executed: end of block
horizontalMovedDescription
TRUEnever evaluated
FALSEnever evaluated
0
1904 int left = d->visualColumn(tl.column());-
1905 int right = d->visualColumn(br.column());-
1906 selection.reserve(right - left + 1);-
1907 for (int visual = left; visual <= right; ++visual) {
visual <= rightDescription
TRUEnever evaluated
FALSEnever evaluated
0
1908 int column = d->logicalColumn(visual);-
1909 QModelIndex topLeft = d->model->index(tl.row(), column, d->root);-
1910 QModelIndex bottomRight = d->model->index(br.row(), column, d->root);-
1911 selection.append(QItemSelectionRange(topLeft, bottomRight));-
1912 }
never executed: end of block
0
1913 } else if (verticalMoved) {
never executed: end of block
verticalMovedDescription
TRUEnever evaluated
FALSEnever evaluated
0
1914 int top = d->visualRow(tl.row());-
1915 int bottom = d->visualRow(br.row());-
1916 selection.reserve(bottom - top + 1);-
1917 for (int visual = top; visual <= bottom; ++visual) {
visual <= bottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
1918 int row = d->logicalRow(visual);-
1919 QModelIndex topLeft = d->model->index(row, tl.column(), d->root);-
1920 QModelIndex bottomRight = d->model->index(row, br.column(), d->root);-
1921 selection.append(QItemSelectionRange(topLeft, bottomRight));-
1922 }
never executed: end of block
0
1923 } else { // nothing moved
never executed: end of block
0
1924 QItemSelectionRange range(tl, br);-
1925 if (!range.isEmpty())
!range.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
1926 selection.append(range);
never executed: selection.append(range);
0
1927 }
never executed: end of block
0
1928-
1929 d->selectionModel->select(selection, command);-
1930}
never executed: end of block
0
1931-
1932/*!-
1933 \internal-
1934-
1935 Returns the rectangle from the viewport of the items in the given-
1936 \a selection.-
1937-
1938 Since 4.7, the returned region only contains rectangles intersecting-
1939 (or included in) the viewport.-
1940*/-
1941QRegion QTableView::visualRegionForSelection(const QItemSelection &selection) const-
1942{-
1943 Q_D(const QTableView);-
1944-
1945 if (selection.isEmpty())
selection.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
1946 return QRegion();
never executed: return QRegion();
0
1947-
1948 QRegion selectionRegion;-
1949 const QRect &viewportRect = d->viewport->rect();-
1950 bool verticalMoved = verticalHeader()->sectionsMoved();-
1951 bool horizontalMoved = horizontalHeader()->sectionsMoved();-
1952-
1953 if ((verticalMoved && horizontalMoved) || (d->hasSpans() && (verticalMoved || horizontalMoved))) {
verticalMovedDescription
TRUEnever evaluated
FALSEnever evaluated
horizontalMovedDescription
TRUEnever evaluated
FALSEnever evaluated
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
verticalMovedDescription
TRUEnever evaluated
FALSEnever evaluated
horizontalMovedDescription
TRUEnever evaluated
FALSEnever evaluated
0
1954 for (int i = 0; i < selection.count(); ++i) {
i < selection.count()Description
TRUEnever evaluated
FALSEnever evaluated
0
1955 QItemSelectionRange range = selection.at(i);-
1956 if (range.parent() != d->root || !range.isValid())
range.parent() != d->rootDescription
TRUEnever evaluated
FALSEnever evaluated
!range.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
1957 continue;
never executed: continue;
0
1958 for (int r = range.top(); r <= range.bottom(); ++r)
r <= range.bottom()Description
TRUEnever evaluated
FALSEnever evaluated
0
1959 for (int c = range.left(); c <= range.right(); ++c) {
c <= range.right()Description
TRUEnever evaluated
FALSEnever evaluated
0
1960 const QRect &rangeRect = visualRect(d->model->index(r, c, d->root));-
1961 if (viewportRect.intersects(rangeRect))
viewportRect.i...cts(rangeRect)Description
TRUEnever evaluated
FALSEnever evaluated
0
1962 selectionRegion += rangeRect;
never executed: selectionRegion += rangeRect;
0
1963 }
never executed: end of block
0
1964 }
never executed: end of block
0
1965 } else if (horizontalMoved) {
never executed: end of block
horizontalMovedDescription
TRUEnever evaluated
FALSEnever evaluated
0
1966 for (int i = 0; i < selection.count(); ++i) {
i < selection.count()Description
TRUEnever evaluated
FALSEnever evaluated
0
1967 QItemSelectionRange range = selection.at(i);-
1968 if (range.parent() != d->root || !range.isValid())
range.parent() != d->rootDescription
TRUEnever evaluated
FALSEnever evaluated
!range.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
1969 continue;
never executed: continue;
0
1970 int top = rowViewportPosition(range.top());-
1971 int bottom = rowViewportPosition(range.bottom()) + rowHeight(range.bottom());-
1972 if (top > bottom)
top > bottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
1973 qSwap<int>(top, bottom);
never executed: qSwap<int>(top, bottom);
0
1974 int height = bottom - top;-
1975 for (int c = range.left(); c <= range.right(); ++c) {
c <= range.right()Description
TRUEnever evaluated
FALSEnever evaluated
0
1976 const QRect rangeRect(columnViewportPosition(c), top, columnWidth(c), height);-
1977 if (viewportRect.intersects(rangeRect))
viewportRect.i...cts(rangeRect)Description
TRUEnever evaluated
FALSEnever evaluated
0
1978 selectionRegion += rangeRect;
never executed: selectionRegion += rangeRect;
0
1979 }
never executed: end of block
0
1980 }
never executed: end of block
0
1981 } else if (verticalMoved) {
never executed: end of block
verticalMovedDescription
TRUEnever evaluated
FALSEnever evaluated
0
1982 for (int i = 0; i < selection.count(); ++i) {
i < selection.count()Description
TRUEnever evaluated
FALSEnever evaluated
0
1983 QItemSelectionRange range = selection.at(i);-
1984 if (range.parent() != d->root || !range.isValid())
range.parent() != d->rootDescription
TRUEnever evaluated
FALSEnever evaluated
!range.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
1985 continue;
never executed: continue;
0
1986 int left = columnViewportPosition(range.left());-
1987 int right = columnViewportPosition(range.right()) + columnWidth(range.right());-
1988 if (left > right)
left > rightDescription
TRUEnever evaluated
FALSEnever evaluated
0
1989 qSwap<int>(left, right);
never executed: qSwap<int>(left, right);
0
1990 int width = right - left;-
1991 for (int r = range.top(); r <= range.bottom(); ++r) {
r <= range.bottom()Description
TRUEnever evaluated
FALSEnever evaluated
0
1992 const QRect rangeRect(left, rowViewportPosition(r), width, rowHeight(r));-
1993 if (viewportRect.intersects(rangeRect))
viewportRect.i...cts(rangeRect)Description
TRUEnever evaluated
FALSEnever evaluated
0
1994 selectionRegion += rangeRect;
never executed: selectionRegion += rangeRect;
0
1995 }
never executed: end of block
0
1996 }
never executed: end of block
0
1997 } else { // nothing moved
never executed: end of block
0
1998 const int gridAdjust = showGrid() ? 1 : 0;
showGrid()Description
TRUEnever evaluated
FALSEnever evaluated
0
1999 for (int i = 0; i < selection.count(); ++i) {
i < selection.count()Description
TRUEnever evaluated
FALSEnever evaluated
0
2000 QItemSelectionRange range = selection.at(i);-
2001 if (range.parent() != d->root || !range.isValid())
range.parent() != d->rootDescription
TRUEnever evaluated
FALSEnever evaluated
!range.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
2002 continue;
never executed: continue;
0
2003 d->trimHiddenSelections(&range);-
2004-
2005 const int rtop = rowViewportPosition(range.top());-
2006 const int rbottom = rowViewportPosition(range.bottom()) + rowHeight(range.bottom());-
2007 int rleft;-
2008 int rright;-
2009 if (isLeftToRight()) {
isLeftToRight()Description
TRUEnever evaluated
FALSEnever evaluated
0
2010 rleft = columnViewportPosition(range.left());-
2011 rright = columnViewportPosition(range.right()) + columnWidth(range.right());-
2012 } else {
never executed: end of block
0
2013 rleft = columnViewportPosition(range.right());-
2014 rright = columnViewportPosition(range.left()) + columnWidth(range.left());-
2015 }
never executed: end of block
0
2016 const QRect rangeRect(QPoint(rleft, rtop), QPoint(rright - 1 - gridAdjust, rbottom - 1 - gridAdjust));-
2017 if (viewportRect.intersects(rangeRect))
viewportRect.i...cts(rangeRect)Description
TRUEnever evaluated
FALSEnever evaluated
0
2018 selectionRegion += rangeRect;
never executed: selectionRegion += rangeRect;
0
2019 if (d->hasSpans()) {
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
2020 foreach (QSpanCollection::Span *s,-
2021 d->spans.spansInRect(range.left(), range.top(), range.width(), range.height())) {-
2022 if (range.contains(s->top(), s->left(), range.parent())) {
range.contains...ange.parent())Description
TRUEnever evaluated
FALSEnever evaluated
0
2023 const QRect &visualSpanRect = d->visualSpanRect(*s);-
2024 if (viewportRect.intersects(visualSpanRect))
viewportRect.i...isualSpanRect)Description
TRUEnever evaluated
FALSEnever evaluated
0
2025 selectionRegion += visualSpanRect;
never executed: selectionRegion += visualSpanRect;
0
2026 }
never executed: end of block
0
2027 }
never executed: end of block
0
2028 }
never executed: end of block
0
2029 }
never executed: end of block
0
2030 }
never executed: end of block
0
2031-
2032 return selectionRegion;
never executed: return selectionRegion;
0
2033}-
2034-
2035-
2036/*!-
2037 \reimp-
2038*/-
2039QModelIndexList QTableView::selectedIndexes() const-
2040{-
2041 Q_D(const QTableView);-
2042 QModelIndexList viewSelected;-
2043 QModelIndexList modelSelected;-
2044 if (d->selectionModel)
d->selectionModelDescription
TRUEnever evaluated
FALSEnever evaluated
0
2045 modelSelected = d->selectionModel->selectedIndexes();
never executed: modelSelected = d->selectionModel->selectedIndexes();
0
2046 for (int i = 0; i < modelSelected.count(); ++i) {
i < modelSelected.count()Description
TRUEnever evaluated
FALSEnever evaluated
0
2047 QModelIndex index = modelSelected.at(i);-
2048 if (!isIndexHidden(index) && index.parent() == d->root)
!isIndexHidden(index)Description
TRUEnever evaluated
FALSEnever evaluated
index.parent() == d->rootDescription
TRUEnever evaluated
FALSEnever evaluated
0
2049 viewSelected.append(index);
never executed: viewSelected.append(index);
0
2050 }
never executed: end of block
0
2051 return viewSelected;
never executed: return viewSelected;
0
2052}-
2053-
2054-
2055/*!-
2056 This slot is called whenever rows are added or deleted. The-
2057 previous number of rows is specified by \a oldCount, and the new-
2058 number of rows is specified by \a newCount.-
2059*/-
2060void QTableView::rowCountChanged(int oldCount, int newCount )-
2061{-
2062 Q_D(QTableView);-
2063 //when removing rows, we need to disable updates for the header until the geometries have been-
2064 //updated and the offset has been adjusted, or we risk calling paintSection for all the sections-
2065 if (newCount < oldCount)
newCount < oldCountDescription
TRUEnever evaluated
FALSEnever evaluated
0
2066 d->verticalHeader->setUpdatesEnabled(false);
never executed: d->verticalHeader->setUpdatesEnabled(false);
0
2067 d->doDelayedItemsLayout();-
2068}
never executed: end of block
0
2069-
2070/*!-
2071 This slot is called whenever columns are added or deleted. The-
2072 previous number of columns is specified by \a oldCount, and the new-
2073 number of columns is specified by \a newCount.-
2074*/-
2075void QTableView::columnCountChanged(int, int)-
2076{-
2077 Q_D(QTableView);-
2078 updateGeometries();-
2079 if (horizontalScrollMode() == QAbstractItemView::ScrollPerItem)
horizontalScro...:ScrollPerItemDescription
TRUEnever evaluated
FALSEnever evaluated
0
2080 d->horizontalHeader->setOffsetToSectionPosition(horizontalScrollBar()->value());
never executed: d->horizontalHeader->setOffsetToSectionPosition(horizontalScrollBar()->value());
0
2081 else-
2082 d->horizontalHeader->setOffset(horizontalScrollBar()->value());
never executed: d->horizontalHeader->setOffset(horizontalScrollBar()->value());
0
2083 d->viewport->update();-
2084}
never executed: end of block
0
2085-
2086/*!-
2087 \reimp-
2088*/-
2089void QTableView::updateGeometries()-
2090{-
2091 Q_D(QTableView);-
2092 if (d->geometryRecursionBlock)
d->geometryRecursionBlockDescription
TRUEnever evaluated
FALSEnever evaluated
0
2093 return;
never executed: return;
0
2094 d->geometryRecursionBlock = true;-
2095-
2096 int width = 0;-
2097 if (!d->verticalHeader->isHidden()) {
!d->verticalHeader->isHidden()Description
TRUEnever evaluated
FALSEnever evaluated
0
2098 width = qMax(d->verticalHeader->minimumWidth(), d->verticalHeader->sizeHint().width());-
2099 width = qMin(width, d->verticalHeader->maximumWidth());-
2100 }
never executed: end of block
0
2101 int height = 0;-
2102 if (!d->horizontalHeader->isHidden()) {
!d->horizontal...er->isHidden()Description
TRUEnever evaluated
FALSEnever evaluated
0
2103 height = qMax(d->horizontalHeader->minimumHeight(), d->horizontalHeader->sizeHint().height());-
2104 height = qMin(height, d->horizontalHeader->maximumHeight());-
2105 }
never executed: end of block
0
2106 bool reverse = isRightToLeft();-
2107 if (reverse)
reverseDescription
TRUEnever evaluated
FALSEnever evaluated
0
2108 setViewportMargins(0, height, width, 0);
never executed: setViewportMargins(0, height, width, 0);
0
2109 else-
2110 setViewportMargins(width, height, 0, 0);
never executed: setViewportMargins(width, height, 0, 0);
0
2111-
2112 // update headers-
2113-
2114 QRect vg = d->viewport->geometry();-
2115-
2116 int verticalLeft = reverse ? vg.right() + 1 : (vg.left() - width);
reverseDescription
TRUEnever evaluated
FALSEnever evaluated
0
2117 d->verticalHeader->setGeometry(verticalLeft, vg.top(), width, vg.height());-
2118 if (d->verticalHeader->isHidden())
d->verticalHeader->isHidden()Description
TRUEnever evaluated
FALSEnever evaluated
0
2119 QMetaObject::invokeMethod(d->verticalHeader, "updateGeometries");
never executed: QMetaObject::invokeMethod(d->verticalHeader, "updateGeometries");
0
2120-
2121 int horizontalTop = vg.top() - height;-
2122 d->horizontalHeader->setGeometry(vg.left(), horizontalTop, vg.width(), height);-
2123 if (d->horizontalHeader->isHidden())
d->horizontalH...er->isHidden()Description
TRUEnever evaluated
FALSEnever evaluated
0
2124 QMetaObject::invokeMethod(d->horizontalHeader, "updateGeometries");
never executed: QMetaObject::invokeMethod(d->horizontalHeader, "updateGeometries");
0
2125-
2126 // update cornerWidget-
2127 if (d->horizontalHeader->isHidden() || d->verticalHeader->isHidden()) {
d->horizontalH...er->isHidden()Description
TRUEnever evaluated
FALSEnever evaluated
d->verticalHeader->isHidden()Description
TRUEnever evaluated
FALSEnever evaluated
0
2128 d->cornerWidget->setHidden(true);-
2129 } else {
never executed: end of block
0
2130 d->cornerWidget->setHidden(false);-
2131 d->cornerWidget->setGeometry(verticalLeft, horizontalTop, width, height);-
2132 }
never executed: end of block
0
2133-
2134 // update scroll bars-
2135-
2136 // ### move this block into the if-
2137 QSize vsize = d->viewport->size();-
2138 QSize max = maximumViewportSize();-
2139 uint horizontalLength = d->horizontalHeader->length();-
2140 uint verticalLength = d->verticalHeader->length();-
2141 if ((uint)max.width() >= horizontalLength && (uint)max.height() >= verticalLength)
(uint)max.widt...rizontalLengthDescription
TRUEnever evaluated
FALSEnever evaluated
(uint)max.heig...verticalLengthDescription
TRUEnever evaluated
FALSEnever evaluated
0
2142 vsize = max;
never executed: vsize = max;
0
2143-
2144 // horizontal scroll bar-
2145 const int columnCount = d->horizontalHeader->count();-
2146 const int viewportWidth = vsize.width();-
2147 int columnsInViewport = 0;-
2148 for (int width = 0, column = columnCount - 1; column >= 0; --column) {
column >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2149 int logical = d->horizontalHeader->logicalIndex(column);-
2150 if (!d->horizontalHeader->isSectionHidden(logical)) {
!d->horizontal...idden(logical)Description
TRUEnever evaluated
FALSEnever evaluated
0
2151 width += d->horizontalHeader->sectionSize(logical);-
2152 if (width > viewportWidth)
width > viewportWidthDescription
TRUEnever evaluated
FALSEnever evaluated
0
2153 break;
never executed: break;
0
2154 ++columnsInViewport;-
2155 }
never executed: end of block
0
2156 }
never executed: end of block
0
2157 columnsInViewport = qMax(columnsInViewport, 1); //there must be always at least 1 column-
2158-
2159 if (horizontalScrollMode() == QAbstractItemView::ScrollPerItem) {
horizontalScro...:ScrollPerItemDescription
TRUEnever evaluated
FALSEnever evaluated
0
2160 const int visibleColumns = columnCount - d->horizontalHeader->hiddenSectionCount();-
2161 horizontalScrollBar()->setRange(0, visibleColumns - columnsInViewport);-
2162 horizontalScrollBar()->setPageStep(columnsInViewport);-
2163 if (columnsInViewport >= visibleColumns)
columnsInViewp...visibleColumnsDescription
TRUEnever evaluated
FALSEnever evaluated
0
2164 d->horizontalHeader->setOffset(0);
never executed: d->horizontalHeader->setOffset(0);
0
2165 horizontalScrollBar()->setSingleStep(1);-
2166 } else { // ScrollPerPixel
never executed: end of block
0
2167 horizontalScrollBar()->setPageStep(vsize.width());-
2168 horizontalScrollBar()->setRange(0, horizontalLength - vsize.width());-
2169 horizontalScrollBar()->setSingleStep(qMax(vsize.width() / (columnsInViewport + 1), 2));-
2170 }
never executed: end of block
0
2171-
2172 // vertical scroll bar-
2173 const int rowCount = d->verticalHeader->count();-
2174 const int viewportHeight = vsize.height();-
2175 int rowsInViewport = 0;-
2176 for (int height = 0, row = rowCount - 1; row >= 0; --row) {
row >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2177 int logical = d->verticalHeader->logicalIndex(row);-
2178 if (!d->verticalHeader->isSectionHidden(logical)) {
!d->verticalHe...idden(logical)Description
TRUEnever evaluated
FALSEnever evaluated
0
2179 height += d->verticalHeader->sectionSize(logical);-
2180 if (height > viewportHeight)
height > viewportHeightDescription
TRUEnever evaluated
FALSEnever evaluated
0
2181 break;
never executed: break;
0
2182 ++rowsInViewport;-
2183 }
never executed: end of block
0
2184 }
never executed: end of block
0
2185 rowsInViewport = qMax(rowsInViewport, 1); //there must be always at least 1 row-
2186-
2187 if (verticalScrollMode() == QAbstractItemView::ScrollPerItem) {
verticalScroll...:ScrollPerItemDescription
TRUEnever evaluated
FALSEnever evaluated
0
2188 const int visibleRows = rowCount - d->verticalHeader->hiddenSectionCount();-
2189 verticalScrollBar()->setRange(0, visibleRows - rowsInViewport);-
2190 verticalScrollBar()->setPageStep(rowsInViewport);-
2191 if (rowsInViewport >= visibleRows)
rowsInViewport >= visibleRowsDescription
TRUEnever evaluated
FALSEnever evaluated
0
2192 d->verticalHeader->setOffset(0);
never executed: d->verticalHeader->setOffset(0);
0
2193 verticalScrollBar()->setSingleStep(1);-
2194 } else { // ScrollPerPixel
never executed: end of block
0
2195 verticalScrollBar()->setPageStep(vsize.height());-
2196 verticalScrollBar()->setRange(0, verticalLength - vsize.height());-
2197 verticalScrollBar()->setSingleStep(qMax(vsize.height() / (rowsInViewport + 1), 2));-
2198 }
never executed: end of block
0
2199-
2200 d->geometryRecursionBlock = false;-
2201 QAbstractItemView::updateGeometries();-
2202}
never executed: end of block
0
2203-
2204/*!-
2205 Returns the size hint for the given \a row's height or -1 if there-
2206 is no model.-
2207-
2208 If you need to set the height of a given row to a fixed value, call-
2209 QHeaderView::resizeSection() on the table's vertical header.-
2210-
2211 If you reimplement this function in a subclass, note that the value you-
2212 return is only used when resizeRowToContents() is called. In that case,-
2213 if a larger row height is required by either the vertical header or-
2214 the item delegate, that width will be used instead.-
2215-
2216 \sa QWidget::sizeHint, verticalHeader(), QHeaderView::resizeContentsPrecision()-
2217*/-
2218int QTableView::sizeHintForRow(int row) const-
2219{-
2220 Q_D(const QTableView);-
2221-
2222 if (!model())
!model()Description
TRUEnever evaluated
FALSEnever evaluated
0
2223 return -1;
never executed: return -1;
0
2224-
2225 ensurePolished();-
2226 const int maximumProcessCols = d->verticalHeader->resizeContentsPrecision();-
2227-
2228-
2229 int left = qMax(0, d->horizontalHeader->visualIndexAt(0));-
2230 int right = d->horizontalHeader->visualIndexAt(d->viewport->width());-
2231 if (right == -1) // the table don't have enough columns to fill the viewport
right == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
2232 right = d->model->columnCount(d->root) - 1;
never executed: right = d->model->columnCount(d->root) - 1;
0
2233-
2234 QStyleOptionViewItem option = d->viewOptionsV1();-
2235-
2236 int hint = 0;-
2237 QModelIndex index;-
2238 int columnsProcessed = 0;-
2239 int column = left;-
2240 for (; column <= right; ++column) {
column <= rightDescription
TRUEnever evaluated
FALSEnever evaluated
0
2241 int logicalColumn = d->horizontalHeader->logicalIndex(column);-
2242 if (d->horizontalHeader->isSectionHidden(logicalColumn))
d->horizontalH...logicalColumn)Description
TRUEnever evaluated
FALSEnever evaluated
0
2243 continue;
never executed: continue;
0
2244 index = d->model->index(row, logicalColumn, d->root);-
2245 hint = d->heightHintForIndex(index, hint, option);-
2246-
2247 ++columnsProcessed;-
2248 if (columnsProcessed == maximumProcessCols)
columnsProcess...mumProcessColsDescription
TRUEnever evaluated
FALSEnever evaluated
0
2249 break;
never executed: break;
0
2250 }
never executed: end of block
0
2251-
2252 int actualRight = d->model->columnCount(d->root) - 1;-
2253 int idxLeft = left;-
2254 int idxRight = column - 1;-
2255-
2256 if (maximumProcessCols == 0)
maximumProcessCols == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2257 columnsProcessed = 0; // skip the while loop
never executed: columnsProcessed = 0;
0
2258-
2259 while (columnsProcessed != maximumProcessCols && (idxLeft > 0 || idxRight < actualRight)) {
columnsProcess...mumProcessColsDescription
TRUEnever evaluated
FALSEnever evaluated
idxLeft > 0Description
TRUEnever evaluated
FALSEnever evaluated
idxRight < actualRightDescription
TRUEnever evaluated
FALSEnever evaluated
0
2260 int logicalIdx = -1;-
2261-
2262 if ((columnsProcessed % 2 && idxLeft > 0) || idxRight == actualRight) {
columnsProcessed % 2Description
TRUEnever evaluated
FALSEnever evaluated
idxLeft > 0Description
TRUEnever evaluated
FALSEnever evaluated
idxRight == actualRightDescription
TRUEnever evaluated
FALSEnever evaluated
0
2263 while (idxLeft > 0) {
idxLeft > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2264 --idxLeft;-
2265 int logcol = d->horizontalHeader->logicalIndex(idxLeft);-
2266 if (d->horizontalHeader->isSectionHidden(logcol))
d->horizontalH...Hidden(logcol)Description
TRUEnever evaluated
FALSEnever evaluated
0
2267 continue;
never executed: continue;
0
2268 logicalIdx = logcol;-
2269 break;
never executed: break;
0
2270 }-
2271 } else {
never executed: end of block
0
2272 while (idxRight < actualRight) {
idxRight < actualRightDescription
TRUEnever evaluated
FALSEnever evaluated
0
2273 ++idxRight;-
2274 int logcol = d->horizontalHeader->logicalIndex(idxRight);-
2275 if (d->horizontalHeader->isSectionHidden(logcol))
d->horizontalH...Hidden(logcol)Description
TRUEnever evaluated
FALSEnever evaluated
0
2276 continue;
never executed: continue;
0
2277 logicalIdx = logcol;-
2278 break;
never executed: break;
0
2279 }-
2280 }
never executed: end of block
0
2281 if (logicalIdx < 0)
logicalIdx < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2282 continue;
never executed: continue;
0
2283-
2284 index = d->model->index(row, logicalIdx, d->root);-
2285 hint = d->heightHintForIndex(index, hint, option);-
2286 ++columnsProcessed;-
2287 }
never executed: end of block
0
2288-
2289 return d->showGrid ? hint + 1 : hint;
never executed: return d->showGrid ? hint + 1 : hint;
d->showGridDescription
TRUEnever evaluated
FALSEnever evaluated
0
2290}-
2291-
2292/*!-
2293 Returns the size hint for the given \a column's width or -1 if-
2294 there is no model.-
2295-
2296 If you need to set the width of a given column to a fixed value, call-
2297 QHeaderView::resizeSection() on the table's horizontal header.-
2298-
2299 If you reimplement this function in a subclass, note that the value you-
2300 return will be used when resizeColumnToContents() or-
2301 QHeaderView::resizeSections() is called. If a larger column width is-
2302 required by either the horizontal header or the item delegate, the larger-
2303 width will be used instead.-
2304-
2305 \sa QWidget::sizeHint, horizontalHeader(), QHeaderView::resizeContentsPrecision()-
2306*/-
2307int QTableView::sizeHintForColumn(int column) const-
2308{-
2309 Q_D(const QTableView);-
2310-
2311 if (!model())
!model()Description
TRUEnever evaluated
FALSEnever evaluated
0
2312 return -1;
never executed: return -1;
0
2313-
2314 ensurePolished();-
2315 const int maximumProcessRows = d->horizontalHeader->resizeContentsPrecision();-
2316-
2317 int top = qMax(0, d->verticalHeader->visualIndexAt(0));-
2318 int bottom = d->verticalHeader->visualIndexAt(d->viewport->height());-
2319 if (!isVisible() || bottom == -1) // the table don't have enough rows to fill the viewport
!isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
bottom == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
2320 bottom = d->model->rowCount(d->root) - 1;
never executed: bottom = d->model->rowCount(d->root) - 1;
0
2321-
2322 QStyleOptionViewItem option = d->viewOptionsV1();-
2323-
2324 int hint = 0;-
2325 int rowsProcessed = 0;-
2326 QModelIndex index;-
2327 int row = top;-
2328 for (; row <= bottom; ++row) {
row <= bottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
2329 int logicalRow = d->verticalHeader->logicalIndex(row);-
2330 if (d->verticalHeader->isSectionHidden(logicalRow))
d->verticalHea...en(logicalRow)Description
TRUEnever evaluated
FALSEnever evaluated
0
2331 continue;
never executed: continue;
0
2332 index = d->model->index(logicalRow, column, d->root);-
2333-
2334 hint = d->widthHintForIndex(index, hint, option);-
2335 ++rowsProcessed;-
2336 if (rowsProcessed == maximumProcessRows)
rowsProcessed ...mumProcessRowsDescription
TRUEnever evaluated
FALSEnever evaluated
0
2337 break;
never executed: break;
0
2338 }
never executed: end of block
0
2339-
2340 int actualBottom = d->model->rowCount(d->root) - 1;-
2341 int idxTop = top;-
2342 int idxBottom = row - 1;-
2343-
2344 if (maximumProcessRows == 0)
maximumProcessRows == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2345 rowsProcessed = 0; // skip the while loop
never executed: rowsProcessed = 0;
0
2346-
2347 while (rowsProcessed != maximumProcessRows && (idxTop > 0 || idxBottom < actualBottom)) {
rowsProcessed ...mumProcessRowsDescription
TRUEnever evaluated
FALSEnever evaluated
idxTop > 0Description
TRUEnever evaluated
FALSEnever evaluated
idxBottom < actualBottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
2348 int logicalIdx = -1;-
2349-
2350 if ((rowsProcessed % 2 && idxTop > 0) || idxBottom == actualBottom) {
rowsProcessed % 2Description
TRUEnever evaluated
FALSEnever evaluated
idxTop > 0Description
TRUEnever evaluated
FALSEnever evaluated
idxBottom == actualBottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
2351 while (idxTop > 0) {
idxTop > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2352 --idxTop;-
2353 int logrow = d->verticalHeader->logicalIndex(idxTop);-
2354 if (d->verticalHeader->isSectionHidden(logrow))
d->verticalHea...Hidden(logrow)Description
TRUEnever evaluated
FALSEnever evaluated
0
2355 continue;
never executed: continue;
0
2356 logicalIdx = logrow;-
2357 break;
never executed: break;
0
2358 }-
2359 } else {
never executed: end of block
0
2360 while (idxBottom < actualBottom) {
idxBottom < actualBottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
2361 ++idxBottom;-
2362 int logrow = d->verticalHeader->logicalIndex(idxBottom);-
2363 if (d->verticalHeader->isSectionHidden(logrow))
d->verticalHea...Hidden(logrow)Description
TRUEnever evaluated
FALSEnever evaluated
0
2364 continue;
never executed: continue;
0
2365 logicalIdx = logrow;-
2366 break;
never executed: break;
0
2367 }-
2368 }
never executed: end of block
0
2369 if (logicalIdx < 0)
logicalIdx < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2370 continue;
never executed: continue;
0
2371-
2372 index = d->model->index(logicalIdx, column, d->root);-
2373 hint = d->widthHintForIndex(index, hint, option);-
2374 ++rowsProcessed;-
2375 }
never executed: end of block
0
2376-
2377 return d->showGrid ? hint + 1 : hint;
never executed: return d->showGrid ? hint + 1 : hint;
d->showGridDescription
TRUEnever evaluated
FALSEnever evaluated
0
2378}-
2379-
2380/*!-
2381 Returns the y-coordinate in contents coordinates of the given \a-
2382 row.-
2383*/-
2384int QTableView::rowViewportPosition(int row) const-
2385{-
2386 Q_D(const QTableView);-
2387 return d->verticalHeader->sectionViewportPosition(row);
never executed: return d->verticalHeader->sectionViewportPosition(row);
0
2388}-
2389-
2390/*!-
2391 Returns the row in which the given y-coordinate, \a y, in contents-
2392 coordinates is located.-
2393-
2394 \note This function returns -1 if the given coordinate is not valid-
2395 (has no row).-
2396-
2397 \sa columnAt()-
2398*/-
2399int QTableView::rowAt(int y) const-
2400{-
2401 Q_D(const QTableView);-
2402 return d->verticalHeader->logicalIndexAt(y);
never executed: return d->verticalHeader->logicalIndexAt(y);
0
2403}-
2404-
2405/*!-
2406 \since 4.1-
2407-
2408 Sets the height of the given \a row to be \a height.-
2409*/-
2410void QTableView::setRowHeight(int row, int height)-
2411{-
2412 Q_D(const QTableView);-
2413 d->verticalHeader->resizeSection(row, height);-
2414}
never executed: end of block
0
2415-
2416/*!-
2417 Returns the height of the given \a row.-
2418-
2419 \sa resizeRowToContents(), columnWidth()-
2420*/-
2421int QTableView::rowHeight(int row) const-
2422{-
2423 Q_D(const QTableView);-
2424 return d->verticalHeader->sectionSize(row);
never executed: return d->verticalHeader->sectionSize(row);
0
2425}-
2426-
2427/*!-
2428 Returns the x-coordinate in contents coordinates of the given \a-
2429 column.-
2430*/-
2431int QTableView::columnViewportPosition(int column) const-
2432{-
2433 Q_D(const QTableView);-
2434 return d->horizontalHeader->sectionViewportPosition(column);
never executed: return d->horizontalHeader->sectionViewportPosition(column);
0
2435}-
2436-
2437/*!-
2438 Returns the column in which the given x-coordinate, \a x, in contents-
2439 coordinates is located.-
2440-
2441 \note This function returns -1 if the given coordinate is not valid-
2442 (has no column).-
2443-
2444 \sa rowAt()-
2445*/-
2446int QTableView::columnAt(int x) const-
2447{-
2448 Q_D(const QTableView);-
2449 return d->horizontalHeader->logicalIndexAt(x);
never executed: return d->horizontalHeader->logicalIndexAt(x);
0
2450}-
2451-
2452/*!-
2453 \since 4.1-
2454-
2455 Sets the width of the given \a column to be \a width.-
2456*/-
2457void QTableView::setColumnWidth(int column, int width)-
2458{-
2459 Q_D(const QTableView);-
2460 d->horizontalHeader->resizeSection(column, width);-
2461}
never executed: end of block
0
2462-
2463/*!-
2464 Returns the width of the given \a column.-
2465-
2466 \sa resizeColumnToContents(), rowHeight()-
2467*/-
2468int QTableView::columnWidth(int column) const-
2469{-
2470 Q_D(const QTableView);-
2471 return d->horizontalHeader->sectionSize(column);
never executed: return d->horizontalHeader->sectionSize(column);
0
2472}-
2473-
2474/*!-
2475 Returns \c true if the given \a row is hidden; otherwise returns \c false.-
2476-
2477 \sa isColumnHidden()-
2478*/-
2479bool QTableView::isRowHidden(int row) const-
2480{-
2481 Q_D(const QTableView);-
2482 return d->verticalHeader->isSectionHidden(row);
never executed: return d->verticalHeader->isSectionHidden(row);
0
2483}-
2484-
2485/*!-
2486 If \a hide is true \a row will be hidden, otherwise it will be shown.-
2487-
2488 \sa setColumnHidden()-
2489*/-
2490void QTableView::setRowHidden(int row, bool hide)-
2491{-
2492 Q_D(QTableView);-
2493 if (row < 0 || row >= d->verticalHeader->count())
row < 0Description
TRUEnever evaluated
FALSEnever evaluated
row >= d->vert...eader->count()Description
TRUEnever evaluated
FALSEnever evaluated
0
2494 return;
never executed: return;
0
2495 d->verticalHeader->setSectionHidden(row, hide);-
2496}
never executed: end of block
0
2497-
2498/*!-
2499 Returns \c true if the given \a column is hidden; otherwise returns \c false.-
2500-
2501 \sa isRowHidden()-
2502*/-
2503bool QTableView::isColumnHidden(int column) const-
2504{-
2505 Q_D(const QTableView);-
2506 return d->horizontalHeader->isSectionHidden(column);
never executed: return d->horizontalHeader->isSectionHidden(column);
0
2507}-
2508-
2509/*!-
2510 If \a hide is true the given \a column will be hidden; otherwise it-
2511 will be shown.-
2512-
2513 \sa setRowHidden()-
2514*/-
2515void QTableView::setColumnHidden(int column, bool hide)-
2516{-
2517 Q_D(QTableView);-
2518 if (column < 0 || column >= d->horizontalHeader->count())
column < 0Description
TRUEnever evaluated
FALSEnever evaluated
column >= d->h...eader->count()Description
TRUEnever evaluated
FALSEnever evaluated
0
2519 return;
never executed: return;
0
2520 d->horizontalHeader->setSectionHidden(column, hide);-
2521}
never executed: end of block
0
2522-
2523/*!-
2524 \since 4.2-
2525 \property QTableView::sortingEnabled-
2526 \brief whether sorting is enabled-
2527-
2528 If this property is \c true, sorting is enabled for the table. If-
2529 this property is \c false, sorting is not enabled. The default value-
2530 is false.-
2531-
2532 \note. Setting the property to true with setSortingEnabled()-
2533 immediately triggers a call to sortByColumn() with the current-
2534 sort section and order.-
2535-
2536 \sa sortByColumn()-
2537*/-
2538-
2539/*!-
2540 If \a enable is true, enables sorting for the table and immediately-
2541 trigger a call to sortByColumn() with the current sort section and-
2542 order-
2543 */-
2544void QTableView::setSortingEnabled(bool enable)-
2545{-
2546 Q_D(QTableView);-
2547 d->sortingEnabled = enable;-
2548 horizontalHeader()->setSortIndicatorShown(enable);-
2549 if (enable) {
enableDescription
TRUEnever evaluated
FALSEnever evaluated
0
2550 disconnect(d->horizontalHeader, SIGNAL(sectionEntered(int)),-
2551 this, SLOT(_q_selectColumn(int)));-
2552 disconnect(horizontalHeader(), SIGNAL(sectionPressed(int)),-
2553 this, SLOT(selectColumn(int)));-
2554 connect(horizontalHeader(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)),-
2555 this, SLOT(sortByColumn(int)), Qt::UniqueConnection);-
2556 sortByColumn(horizontalHeader()->sortIndicatorSection(),-
2557 horizontalHeader()->sortIndicatorOrder());-
2558 } else {
never executed: end of block
0
2559 connect(d->horizontalHeader, SIGNAL(sectionEntered(int)),-
2560 this, SLOT(_q_selectColumn(int)), Qt::UniqueConnection);-
2561 connect(horizontalHeader(), SIGNAL(sectionPressed(int)),-
2562 this, SLOT(selectColumn(int)), Qt::UniqueConnection);-
2563 disconnect(horizontalHeader(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)),-
2564 this, SLOT(sortByColumn(int)));-
2565 }
never executed: end of block
0
2566}-
2567-
2568bool QTableView::isSortingEnabled() const-
2569{-
2570 Q_D(const QTableView);-
2571 return d->sortingEnabled;
never executed: return d->sortingEnabled;
0
2572}-
2573-
2574/*!-
2575 \property QTableView::showGrid-
2576 \brief whether the grid is shown-
2577-
2578 If this property is \c true a grid is drawn for the table; if the-
2579 property is \c false, no grid is drawn. The default value is true.-
2580*/-
2581bool QTableView::showGrid() const-
2582{-
2583 Q_D(const QTableView);-
2584 return d->showGrid;
never executed: return d->showGrid;
0
2585}-
2586-
2587void QTableView::setShowGrid(bool show)-
2588{-
2589 Q_D(QTableView);-
2590 if (d->showGrid != show) {
d->showGrid != showDescription
TRUEnever evaluated
FALSEnever evaluated
0
2591 d->showGrid = show;-
2592 d->viewport->update();-
2593 }
never executed: end of block
0
2594}
never executed: end of block
0
2595-
2596/*!-
2597 \property QTableView::gridStyle-
2598 \brief the pen style used to draw the grid.-
2599-
2600 This property holds the style used when drawing the grid (see \l{showGrid}).-
2601*/-
2602Qt::PenStyle QTableView::gridStyle() const-
2603{-
2604 Q_D(const QTableView);-
2605 return d->gridStyle;
never executed: return d->gridStyle;
0
2606}-
2607-
2608void QTableView::setGridStyle(Qt::PenStyle style)-
2609{-
2610 Q_D(QTableView);-
2611 if (d->gridStyle != style) {
d->gridStyle != styleDescription
TRUEnever evaluated
FALSEnever evaluated
0
2612 d->gridStyle = style;-
2613 d->viewport->update();-
2614 }
never executed: end of block
0
2615}
never executed: end of block
0
2616-
2617/*!-
2618 \property QTableView::wordWrap-
2619 \brief the item text word-wrapping policy-
2620 \since 4.3-
2621-
2622 If this property is \c true then the item text is wrapped where-
2623 necessary at word-breaks; otherwise it is not wrapped at all.-
2624 This property is \c true by default.-
2625-
2626 Note that even of wrapping is enabled, the cell will not be-
2627 expanded to fit all text. Ellipsis will be inserted according to-
2628 the current \l{QAbstractItemView::}{textElideMode}.-
2629-
2630*/-
2631void QTableView::setWordWrap(bool on)-
2632{-
2633 Q_D(QTableView);-
2634 if (d->wrapItemText == on)
d->wrapItemText == onDescription
TRUEnever evaluated
FALSEnever evaluated
0
2635 return;
never executed: return;
0
2636 d->wrapItemText = on;-
2637 QMetaObject::invokeMethod(d->verticalHeader, "resizeSections");-
2638 QMetaObject::invokeMethod(d->horizontalHeader, "resizeSections");-
2639}
never executed: end of block
0
2640-
2641bool QTableView::wordWrap() const-
2642{-
2643 Q_D(const QTableView);-
2644 return d->wrapItemText;
never executed: return d->wrapItemText;
0
2645}-
2646-
2647/*!-
2648 \property QTableView::cornerButtonEnabled-
2649 \brief whether the button in the top-left corner is enabled-
2650 \since 4.3-
2651-
2652 If this property is \c true then button in the top-left corner-
2653 of the table view is enabled. Clicking on this button will-
2654 select all the cells in the table view.-
2655-
2656 This property is \c true by default.-
2657*/-
2658void QTableView::setCornerButtonEnabled(bool enable)-
2659{-
2660 Q_D(QTableView);-
2661 d->cornerWidget->setEnabled(enable);-
2662}
never executed: end of block
0
2663-
2664bool QTableView::isCornerButtonEnabled() const-
2665{-
2666 Q_D(const QTableView);-
2667 return d->cornerWidget->isEnabled();
never executed: return d->cornerWidget->isEnabled();
0
2668}-
2669-
2670/*!-
2671 \internal-
2672-
2673 Returns the rectangle on the viewport occupied by the given \a-
2674 index.-
2675 If the index is hidden in the view it will return a null QRect.-
2676*/-
2677QRect QTableView::visualRect(const QModelIndex &index) const-
2678{-
2679 Q_D(const QTableView);-
2680 if (!d->isIndexValid(index) || index.parent() != d->root
!d->isIndexValid(index)Description
TRUEnever evaluated
FALSEnever evaluated
index.parent() != d->rootDescription
TRUEnever evaluated
FALSEnever evaluated
0
2681 || (!d->hasSpans() && isIndexHidden(index)))
!d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
isIndexHidden(index)Description
TRUEnever evaluated
FALSEnever evaluated
0
2682 return QRect();
never executed: return QRect();
0
2683-
2684 d->executePostedLayout();-
2685-
2686 if (d->hasSpans()) {
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
2687 QSpanCollection::Span span = d->span(index.row(), index.column());-
2688 return d->visualSpanRect(span);
never executed: return d->visualSpanRect(span);
0
2689 }-
2690-
2691 int rowp = rowViewportPosition(index.row());-
2692 int rowh = rowHeight(index.row());-
2693 int colp = columnViewportPosition(index.column());-
2694 int colw = columnWidth(index.column());-
2695-
2696 const int i = showGrid() ? 1 : 0;
showGrid()Description
TRUEnever evaluated
FALSEnever evaluated
0
2697 return QRect(colp, rowp, colw - i, rowh - i);
never executed: return QRect(colp, rowp, colw - i, rowh - i);
0
2698}-
2699-
2700/*!-
2701 \internal-
2702-
2703 Makes sure that the given \a item is visible in the table view,-
2704 scrolling if necessary.-
2705*/-
2706void QTableView::scrollTo(const QModelIndex &index, ScrollHint hint)-
2707{-
2708 Q_D(QTableView);-
2709-
2710 // check if we really need to do anything-
2711 if (!d->isIndexValid(index)
!d->isIndexValid(index)Description
TRUEnever evaluated
FALSEnever evaluated
0
2712 || (d->model->parent(index) != d->root)
(d->model->par...x) != d->root)Description
TRUEnever evaluated
FALSEnever evaluated
0
2713 || isRowHidden(index.row()) || isColumnHidden(index.column()))
isRowHidden(index.row())Description
TRUEnever evaluated
FALSEnever evaluated
isColumnHidden(index.column())Description
TRUEnever evaluated
FALSEnever evaluated
0
2714 return;
never executed: return;
0
2715-
2716 QSpanCollection::Span span;-
2717 if (d->hasSpans())
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
2718 span = d->span(index.row(), index.column());
never executed: span = d->span(index.row(), index.column());
0
2719-
2720 // Adjust horizontal position-
2721-
2722 int viewportWidth = d->viewport->width();-
2723 int horizontalOffset = d->horizontalHeader->offset();-
2724 int horizontalPosition = d->horizontalHeader->sectionPosition(index.column());-
2725 int horizontalIndex = d->horizontalHeader->visualIndex(index.column());-
2726 int cellWidth = d->hasSpans()
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
2727 ? d->columnSpanWidth(index.column(), span.width())-
2728 : d->horizontalHeader->sectionSize(index.column());-
2729-
2730 if (horizontalScrollMode() == QAbstractItemView::ScrollPerItem) {
horizontalScro...:ScrollPerItemDescription
TRUEnever evaluated
FALSEnever evaluated
0
2731-
2732 bool positionAtLeft = (horizontalPosition - horizontalOffset < 0);-
2733 bool positionAtRight = (horizontalPosition - horizontalOffset + cellWidth > viewportWidth);-
2734-
2735 if (hint == PositionAtCenter || positionAtRight) {
hint == PositionAtCenterDescription
TRUEnever evaluated
FALSEnever evaluated
positionAtRightDescription
TRUEnever evaluated
FALSEnever evaluated
0
2736 int w = (hint == PositionAtCenter ? viewportWidth / 2 : viewportWidth);
hint == PositionAtCenterDescription
TRUEnever evaluated
FALSEnever evaluated
0
2737 int x = cellWidth;-
2738 while (horizontalIndex > 0) {
horizontalIndex > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2739 x += columnWidth(d->horizontalHeader->logicalIndex(horizontalIndex-1));-
2740 if (x > w)
x > wDescription
TRUEnever evaluated
FALSEnever evaluated
0
2741 break;
never executed: break;
0
2742 --horizontalIndex;-
2743 }
never executed: end of block
0
2744 }
never executed: end of block
0
2745-
2746 if (positionAtRight || hint == PositionAtCenter || positionAtLeft) {
positionAtRightDescription
TRUEnever evaluated
FALSEnever evaluated
hint == PositionAtCenterDescription
TRUEnever evaluated
FALSEnever evaluated
positionAtLeftDescription
TRUEnever evaluated
FALSEnever evaluated
0
2747 int hiddenSections = 0;-
2748 if (d->horizontalHeader->sectionsHidden()) {
d->horizontalH...ctionsHidden()Description
TRUEnever evaluated
FALSEnever evaluated
0
2749 for (int s = horizontalIndex - 1; s >= 0; --s) {
s >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2750 int column = d->horizontalHeader->logicalIndex(s);-
2751 if (d->horizontalHeader->isSectionHidden(column))
d->horizontalH...Hidden(column)Description
TRUEnever evaluated
FALSEnever evaluated
0
2752 ++hiddenSections;
never executed: ++hiddenSections;
0
2753 }
never executed: end of block
0
2754 }
never executed: end of block
0
2755 horizontalScrollBar()->setValue(horizontalIndex - hiddenSections);-
2756 }
never executed: end of block
0
2757-
2758 } else { // ScrollPerPixel
never executed: end of block
0
2759 if (hint == PositionAtCenter) {
hint == PositionAtCenterDescription
TRUEnever evaluated
FALSEnever evaluated
0
2760 horizontalScrollBar()->setValue(horizontalPosition - ((viewportWidth - cellWidth) / 2));-
2761 } else {
never executed: end of block
0
2762 if (horizontalPosition - horizontalOffset < 0 || cellWidth > viewportWidth)
horizontalPosi...ntalOffset < 0Description
TRUEnever evaluated
FALSEnever evaluated
cellWidth > viewportWidthDescription
TRUEnever evaluated
FALSEnever evaluated
0
2763 horizontalScrollBar()->setValue(horizontalPosition);
never executed: horizontalScrollBar()->setValue(horizontalPosition);
0
2764 else if (horizontalPosition - horizontalOffset + cellWidth > viewportWidth)
horizontalPosi... viewportWidthDescription
TRUEnever evaluated
FALSEnever evaluated
0
2765 horizontalScrollBar()->setValue(horizontalPosition - viewportWidth + cellWidth);
never executed: horizontalScrollBar()->setValue(horizontalPosition - viewportWidth + cellWidth);
0
2766 }
never executed: end of block
0
2767 }-
2768-
2769 // Adjust vertical position-
2770-
2771 int viewportHeight = d->viewport->height();-
2772 int verticalOffset = d->verticalHeader->offset();-
2773 int verticalPosition = d->verticalHeader->sectionPosition(index.row());-
2774 int verticalIndex = d->verticalHeader->visualIndex(index.row());-
2775 int cellHeight = d->hasSpans()
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
2776 ? d->rowSpanHeight(index.row(), span.height())-
2777 : d->verticalHeader->sectionSize(index.row());-
2778-
2779 if (verticalPosition - verticalOffset < 0 || cellHeight > viewportHeight) {
verticalPositi...icalOffset < 0Description
TRUEnever evaluated
FALSEnever evaluated
cellHeight > viewportHeightDescription
TRUEnever evaluated
FALSEnever evaluated
0
2780 if (hint == EnsureVisible)
hint == EnsureVisibleDescription
TRUEnever evaluated
FALSEnever evaluated
0
2781 hint = PositionAtTop;
never executed: hint = PositionAtTop;
0
2782 } else if (verticalPosition - verticalOffset + cellHeight > viewportHeight) {
never executed: end of block
verticalPositi...viewportHeightDescription
TRUEnever evaluated
FALSEnever evaluated
0
2783 if (hint == EnsureVisible)
hint == EnsureVisibleDescription
TRUEnever evaluated
FALSEnever evaluated
0
2784 hint = PositionAtBottom;
never executed: hint = PositionAtBottom;
0
2785 }
never executed: end of block
0
2786-
2787 if (verticalScrollMode() == QAbstractItemView::ScrollPerItem) {
verticalScroll...:ScrollPerItemDescription
TRUEnever evaluated
FALSEnever evaluated
0
2788-
2789 if (hint == PositionAtBottom || hint == PositionAtCenter) {
hint == PositionAtBottomDescription
TRUEnever evaluated
FALSEnever evaluated
hint == PositionAtCenterDescription
TRUEnever evaluated
FALSEnever evaluated
0
2790 int h = (hint == PositionAtCenter ? viewportHeight / 2 : viewportHeight);
hint == PositionAtCenterDescription
TRUEnever evaluated
FALSEnever evaluated
0
2791 int y = cellHeight;-
2792 while (verticalIndex > 0) {
verticalIndex > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2793 int row = d->verticalHeader->logicalIndex(verticalIndex - 1);-
2794 y += d->verticalHeader->sectionSize(row);-
2795 if (y > h)
y > hDescription
TRUEnever evaluated
FALSEnever evaluated
0
2796 break;
never executed: break;
0
2797 --verticalIndex;-
2798 }
never executed: end of block
0
2799 }
never executed: end of block
0
2800-
2801 if (hint == PositionAtBottom || hint == PositionAtCenter || hint == PositionAtTop) {
hint == PositionAtBottomDescription
TRUEnever evaluated
FALSEnever evaluated
hint == PositionAtCenterDescription
TRUEnever evaluated
FALSEnever evaluated
hint == PositionAtTopDescription
TRUEnever evaluated
FALSEnever evaluated
0
2802 int hiddenSections = 0;-
2803 if (d->verticalHeader->sectionsHidden()) {
d->verticalHea...ctionsHidden()Description
TRUEnever evaluated
FALSEnever evaluated
0
2804 for (int s = verticalIndex - 1; s >= 0; --s) {
s >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2805 int row = d->verticalHeader->logicalIndex(s);-
2806 if (d->verticalHeader->isSectionHidden(row))
d->verticalHea...ionHidden(row)Description
TRUEnever evaluated
FALSEnever evaluated
0
2807 ++hiddenSections;
never executed: ++hiddenSections;
0
2808 }
never executed: end of block
0
2809 }
never executed: end of block
0
2810 verticalScrollBar()->setValue(verticalIndex - hiddenSections);-
2811 }
never executed: end of block
0
2812-
2813 } else { // ScrollPerPixel
never executed: end of block
0
2814 if (hint == PositionAtTop) {
hint == PositionAtTopDescription
TRUEnever evaluated
FALSEnever evaluated
0
2815 verticalScrollBar()->setValue(verticalPosition);-
2816 } else if (hint == PositionAtBottom) {
never executed: end of block
hint == PositionAtBottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
2817 verticalScrollBar()->setValue(verticalPosition - viewportHeight + cellHeight);-
2818 } else if (hint == PositionAtCenter) {
never executed: end of block
hint == PositionAtCenterDescription
TRUEnever evaluated
FALSEnever evaluated
0
2819 verticalScrollBar()->setValue(verticalPosition - ((viewportHeight - cellHeight) / 2));-
2820 }
never executed: end of block
0
2821 }
never executed: end of block
0
2822-
2823 update(index);-
2824}
never executed: end of block
0
2825-
2826/*!-
2827 This slot is called to change the height of the given \a row. The-
2828 old height is specified by \a oldHeight, and the new height by \a-
2829 newHeight.-
2830-
2831 \sa columnResized()-
2832*/-
2833void QTableView::rowResized(int row, int, int)-
2834{-
2835 Q_D(QTableView);-
2836 d->rowsToUpdate.append(row);-
2837 if (d->rowResizeTimerID == 0)
d->rowResizeTimerID == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2838 d->rowResizeTimerID = startTimer(0);
never executed: d->rowResizeTimerID = startTimer(0);
0
2839}
never executed: end of block
0
2840-
2841/*!-
2842 This slot is called to change the width of the given \a column.-
2843 The old width is specified by \a oldWidth, and the new width by \a-
2844 newWidth.-
2845-
2846 \sa rowResized()-
2847*/-
2848void QTableView::columnResized(int column, int, int)-
2849{-
2850 Q_D(QTableView);-
2851 d->columnsToUpdate.append(column);-
2852 if (d->columnResizeTimerID == 0)
d->columnResizeTimerID == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2853 d->columnResizeTimerID = startTimer(0);
never executed: d->columnResizeTimerID = startTimer(0);
0
2854}
never executed: end of block
0
2855-
2856/*!-
2857 \reimp-
2858 */-
2859void QTableView::timerEvent(QTimerEvent *event)-
2860{-
2861 Q_D(QTableView);-
2862-
2863 if (event->timerId() == d->columnResizeTimerID) {
event->timerId...nResizeTimerIDDescription
TRUEnever evaluated
FALSEnever evaluated
0
2864 updateGeometries();-
2865 killTimer(d->columnResizeTimerID);-
2866 d->columnResizeTimerID = 0;-
2867-
2868 QRect rect;-
2869 int viewportHeight = d->viewport->height();-
2870 int viewportWidth = d->viewport->width();-
2871 if (d->hasSpans()) {
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
2872 rect = QRect(0, 0, viewportWidth, viewportHeight);-
2873 } else {
never executed: end of block
0
2874 for (int i = d->columnsToUpdate.size()-1; i >= 0; --i) {
i >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2875 int column = d->columnsToUpdate.at(i);-
2876 int x = columnViewportPosition(column);-
2877 if (isRightToLeft())
isRightToLeft()Description
TRUEnever evaluated
FALSEnever evaluated
0
2878 rect |= QRect(0, 0, x + columnWidth(column), viewportHeight);
never executed: rect |= QRect(0, 0, x + columnWidth(column), viewportHeight);
0
2879 else-
2880 rect |= QRect(x, 0, viewportWidth - x, viewportHeight);
never executed: rect |= QRect(x, 0, viewportWidth - x, viewportHeight);
0
2881 }-
2882 }
never executed: end of block
0
2883-
2884 d->viewport->update(rect.normalized());-
2885 d->columnsToUpdate.clear();-
2886 }
never executed: end of block
0
2887-
2888 if (event->timerId() == d->rowResizeTimerID) {
event->timerId...wResizeTimerIDDescription
TRUEnever evaluated
FALSEnever evaluated
0
2889 updateGeometries();-
2890 killTimer(d->rowResizeTimerID);-
2891 d->rowResizeTimerID = 0;-
2892-
2893 int viewportHeight = d->viewport->height();-
2894 int viewportWidth = d->viewport->width();-
2895 int top;-
2896 if (d->hasSpans()) {
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
2897 top = 0;-
2898 } else {
never executed: end of block
0
2899 top = viewportHeight;-
2900 for (int i = d->rowsToUpdate.size()-1; i >= 0; --i) {
i >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2901 int y = rowViewportPosition(d->rowsToUpdate.at(i));-
2902 top = qMin(top, y);-
2903 }
never executed: end of block
0
2904 }
never executed: end of block
0
2905-
2906 d->viewport->update(QRect(0, top, viewportWidth, viewportHeight - top));-
2907 d->rowsToUpdate.clear();-
2908 }
never executed: end of block
0
2909-
2910 QAbstractItemView::timerEvent(event);-
2911}
never executed: end of block
0
2912-
2913/*!-
2914 This slot is called to change the index of the given \a row in the-
2915 table view. The old index is specified by \a oldIndex, and the new-
2916 index by \a newIndex.-
2917-
2918 \sa columnMoved()-
2919*/-
2920void QTableView::rowMoved(int, int oldIndex, int newIndex)-
2921{-
2922 Q_D(QTableView);-
2923-
2924 updateGeometries();-
2925 int logicalOldIndex = d->verticalHeader->logicalIndex(oldIndex);-
2926 int logicalNewIndex = d->verticalHeader->logicalIndex(newIndex);-
2927 if (d->hasSpans()) {
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
2928 d->viewport->update();-
2929 } else {
never executed: end of block
0
2930 int oldTop = rowViewportPosition(logicalOldIndex);-
2931 int newTop = rowViewportPosition(logicalNewIndex);-
2932 int oldBottom = oldTop + rowHeight(logicalOldIndex);-
2933 int newBottom = newTop + rowHeight(logicalNewIndex);-
2934 int top = qMin(oldTop, newTop);-
2935 int bottom = qMax(oldBottom, newBottom);-
2936 int height = bottom - top;-
2937 d->viewport->update(0, top, d->viewport->width(), height);-
2938 }
never executed: end of block
0
2939}-
2940-
2941/*!-
2942 This slot is called to change the index of the given \a column in-
2943 the table view. The old index is specified by \a oldIndex, and-
2944 the new index by \a newIndex.-
2945-
2946 \sa rowMoved()-
2947*/-
2948void QTableView::columnMoved(int, int oldIndex, int newIndex)-
2949{-
2950 Q_D(QTableView);-
2951-
2952 updateGeometries();-
2953 int logicalOldIndex = d->horizontalHeader->logicalIndex(oldIndex);-
2954 int logicalNewIndex = d->horizontalHeader->logicalIndex(newIndex);-
2955 if (d->hasSpans()) {
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
2956 d->viewport->update();-
2957 } else {
never executed: end of block
0
2958 int oldLeft = columnViewportPosition(logicalOldIndex);-
2959 int newLeft = columnViewportPosition(logicalNewIndex);-
2960 int oldRight = oldLeft + columnWidth(logicalOldIndex);-
2961 int newRight = newLeft + columnWidth(logicalNewIndex);-
2962 int left = qMin(oldLeft, newLeft);-
2963 int right = qMax(oldRight, newRight);-
2964 int width = right - left;-
2965 d->viewport->update(left, 0, width, d->viewport->height());-
2966 }
never executed: end of block
0
2967}-
2968-
2969/*!-
2970 Selects the given \a row in the table view if the current-
2971 SelectionMode and SelectionBehavior allows rows to be selected.-
2972-
2973 \sa selectColumn()-
2974*/-
2975void QTableView::selectRow(int row)-
2976{-
2977 Q_D(QTableView);-
2978 d->selectRow(row, true);-
2979}
never executed: end of block
0
2980-
2981/*!-
2982 Selects the given \a column in the table view if the current-
2983 SelectionMode and SelectionBehavior allows columns to be selected.-
2984-
2985 \sa selectRow()-
2986*/-
2987void QTableView::selectColumn(int column)-
2988{-
2989 Q_D(QTableView);-
2990 d->selectColumn(column, true);-
2991}
never executed: end of block
0
2992-
2993/*!-
2994 Hide the given \a row.-
2995-
2996 \sa showRow(), hideColumn()-
2997*/-
2998void QTableView::hideRow(int row)-
2999{-
3000 Q_D(QTableView);-
3001 d->verticalHeader->hideSection(row);-
3002}
never executed: end of block
0
3003-
3004/*!-
3005 Hide the given \a column.-
3006-
3007 \sa showColumn(), hideRow()-
3008*/-
3009void QTableView::hideColumn(int column)-
3010{-
3011 Q_D(QTableView);-
3012 d->horizontalHeader->hideSection(column);-
3013}
never executed: end of block
0
3014-
3015/*!-
3016 Show the given \a row.-
3017-
3018 \sa hideRow(), showColumn()-
3019*/-
3020void QTableView::showRow(int row)-
3021{-
3022 Q_D(QTableView);-
3023 d->verticalHeader->showSection(row);-
3024}
never executed: end of block
0
3025-
3026/*!-
3027 Show the given \a column.-
3028-
3029 \sa hideColumn(), showRow()-
3030*/-
3031void QTableView::showColumn(int column)-
3032{-
3033 Q_D(QTableView);-
3034 d->horizontalHeader->showSection(column);-
3035}
never executed: end of block
0
3036-
3037/*!-
3038 Resizes the given \a row based on the size hints of the delegate-
3039 used to render each item in the row.-
3040-
3041 \sa resizeRowsToContents(), sizeHintForRow(), QHeaderView::resizeContentsPrecision()-
3042*/-
3043void QTableView::resizeRowToContents(int row)-
3044{-
3045 Q_D(QTableView);-
3046 int content = sizeHintForRow(row);-
3047 int header = d->verticalHeader->sectionSizeHint(row);-
3048 d->verticalHeader->resizeSection(row, qMax(content, header));-
3049}
never executed: end of block
0
3050-
3051/*!-
3052 Resizes all rows based on the size hints of the delegate-
3053 used to render each item in the rows.-
3054-
3055 \sa resizeRowToContents(), sizeHintForRow(), QHeaderView::resizeContentsPrecision()-
3056*/-
3057void QTableView::resizeRowsToContents()-
3058{-
3059 Q_D(QTableView);-
3060 d->verticalHeader->resizeSections(QHeaderView::ResizeToContents);-
3061}
never executed: end of block
0
3062-
3063/*!-
3064 Resizes the given \a column based on the size hints of the delegate-
3065 used to render each item in the column.-
3066-
3067 \note Only visible columns will be resized. Reimplement sizeHintForColumn()-
3068 to resize hidden columns as well.-
3069-
3070 \sa resizeColumnsToContents(), sizeHintForColumn(), QHeaderView::resizeContentsPrecision()-
3071*/-
3072void QTableView::resizeColumnToContents(int column)-
3073{-
3074 Q_D(QTableView);-
3075 int content = sizeHintForColumn(column);-
3076 int header = d->horizontalHeader->sectionSizeHint(column);-
3077 d->horizontalHeader->resizeSection(column, qMax(content, header));-
3078}
never executed: end of block
0
3079-
3080/*!-
3081 Resizes all columns based on the size hints of the delegate-
3082 used to render each item in the columns.-
3083-
3084 \sa resizeColumnToContents(), sizeHintForColumn(), QHeaderView::resizeContentsPrecision()-
3085*/-
3086void QTableView::resizeColumnsToContents()-
3087{-
3088 Q_D(QTableView);-
3089 d->horizontalHeader->resizeSections(QHeaderView::ResizeToContents);-
3090}
never executed: end of block
0
3091-
3092/*!-
3093 \obsolete-
3094 \overload-
3095-
3096 Sorts the model by the values in the given \a column.-
3097*/-
3098void QTableView::sortByColumn(int column)-
3099{-
3100 Q_D(QTableView);-
3101 if (column == -1)
column == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
3102 return;
never executed: return;
0
3103 d->model->sort(column, d->horizontalHeader->sortIndicatorOrder());-
3104}
never executed: end of block
0
3105-
3106/*!-
3107 \since 4.2-
3108-
3109 Sorts the model by the values in the given \a column in the given \a order.-
3110-
3111 \sa sortingEnabled-
3112 */-
3113void QTableView::sortByColumn(int column, Qt::SortOrder order)-
3114{-
3115 Q_D(QTableView);-
3116 d->horizontalHeader->setSortIndicator(column, order);-
3117 sortByColumn(column);-
3118}
never executed: end of block
0
3119-
3120/*!-
3121 \internal-
3122*/-
3123void QTableView::verticalScrollbarAction(int action)-
3124{-
3125 QAbstractItemView::verticalScrollbarAction(action);-
3126}
never executed: end of block
0
3127-
3128/*!-
3129 \internal-
3130*/-
3131void QTableView::horizontalScrollbarAction(int action)-
3132{-
3133 QAbstractItemView::horizontalScrollbarAction(action);-
3134}
never executed: end of block
0
3135-
3136/*!-
3137 \reimp-
3138*/-
3139bool QTableView::isIndexHidden(const QModelIndex &index) const-
3140{-
3141 Q_D(const QTableView);-
3142 Q_ASSERT(d->isIndexValid(index));-
3143 if (isRowHidden(index.row()) || isColumnHidden(index.column()))
isRowHidden(index.row())Description
TRUEnever evaluated
FALSEnever evaluated
isColumnHidden(index.column())Description
TRUEnever evaluated
FALSEnever evaluated
0
3144 return true;
never executed: return true;
0
3145 if (d->hasSpans()) {
d->hasSpans()Description
TRUEnever evaluated
FALSEnever evaluated
0
3146 QSpanCollection::Span span = d->span(index.row(), index.column());-
3147 return !((span.top() == index.row()) && (span.left() == index.column()));
never executed: return !((span.top() == index.row()) && (span.left() == index.column()));
(span.top() == index.row())Description
TRUEnever evaluated
FALSEnever evaluated
(span.left() =...ndex.column())Description
TRUEnever evaluated
FALSEnever evaluated
0
3148 }-
3149 return false;
never executed: return false;
0
3150}-
3151-
3152/*!-
3153 \fn void QTableView::setSpan(int row, int column, int rowSpanCount, int columnSpanCount)-
3154 \since 4.2-
3155-
3156 Sets the span of the table element at (\a row, \a column) to the number of-
3157 rows and columns specified by (\a rowSpanCount, \a columnSpanCount).-
3158-
3159 \sa rowSpan(), columnSpan()-
3160*/-
3161void QTableView::setSpan(int row, int column, int rowSpan, int columnSpan)-
3162{-
3163 Q_D(QTableView);-
3164 if (row < 0 || column < 0 || rowSpan < 0 || columnSpan < 0)
row < 0Description
TRUEnever evaluated
FALSEnever evaluated
column < 0Description
TRUEnever evaluated
FALSEnever evaluated
rowSpan < 0Description
TRUEnever evaluated
FALSEnever evaluated
columnSpan < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
3165 return;
never executed: return;
0
3166 d->setSpan(row, column, rowSpan, columnSpan);-
3167 d->viewport->update();-
3168}
never executed: end of block
0
3169-
3170/*!-
3171 \since 4.2-
3172-
3173 Returns the row span of the table element at (\a row, \a column).-
3174 The default is 1.-
3175-
3176 \sa setSpan(), columnSpan()-
3177*/-
3178int QTableView::rowSpan(int row, int column) const-
3179{-
3180 Q_D(const QTableView);-
3181 return d->rowSpan(row, column);
never executed: return d->rowSpan(row, column);
0
3182}-
3183-
3184/*!-
3185 \since 4.2-
3186-
3187 Returns the column span of the table element at (\a row, \a-
3188 column). The default is 1.-
3189-
3190 \sa setSpan(), rowSpan()-
3191*/-
3192int QTableView::columnSpan(int row, int column) const-
3193{-
3194 Q_D(const QTableView);-
3195 return d->columnSpan(row, column);
never executed: return d->columnSpan(row, column);
0
3196}-
3197-
3198/*!-
3199 \since 4.4-
3200-
3201 Removes all row and column spans in the table view.-
3202-
3203 \sa setSpan()-
3204*/-
3205-
3206void QTableView::clearSpans()-
3207{-
3208 Q_D(QTableView);-
3209 d->spans.clear();-
3210 d->viewport->update();-
3211}
never executed: end of block
0
3212-
3213void QTableViewPrivate::_q_selectRow(int row)-
3214{-
3215 selectRow(row, false);-
3216}
never executed: end of block
0
3217-
3218void QTableViewPrivate::_q_selectColumn(int column)-
3219{-
3220 selectColumn(column, false);-
3221}
never executed: end of block
0
3222-
3223void QTableViewPrivate::selectRow(int row, bool anchor)-
3224{-
3225 Q_Q(QTableView);-
3226-
3227 if (q->selectionBehavior() == QTableView::SelectColumns
q->selectionBe...:SelectColumnsDescription
TRUEnever evaluated
FALSEnever evaluated
0
3228 || (q->selectionMode() == QTableView::SingleSelection
q->selectionMo...ingleSelectionDescription
TRUEnever evaluated
FALSEnever evaluated
0
3229 && q->selectionBehavior() == QTableView::SelectItems))
q->selectionBe...w::SelectItemsDescription
TRUEnever evaluated
FALSEnever evaluated
0
3230 return;
never executed: return;
0
3231-
3232 if (row >= 0 && row < model->rowCount(root)) {
row >= 0Description
TRUEnever evaluated
FALSEnever evaluated
row < model->rowCount(root)Description
TRUEnever evaluated
FALSEnever evaluated
0
3233 int column = horizontalHeader->logicalIndexAt(q->isRightToLeft() ? viewport->width() : 0);-
3234 QModelIndex index = model->index(row, column, root);-
3235 QItemSelectionModel::SelectionFlags command = q->selectionCommand(index);-
3236 selectionModel->setCurrentIndex(index, QItemSelectionModel::NoUpdate);-
3237 if ((anchor && !(command & QItemSelectionModel::Current))
anchorDescription
TRUEnever evaluated
FALSEnever evaluated
!(command & QI...odel::Current)Description
TRUEnever evaluated
FALSEnever evaluated
0
3238 || (q->selectionMode() == QTableView::SingleSelection))
(q->selectionM...ngleSelection)Description
TRUEnever evaluated
FALSEnever evaluated
0
3239 rowSectionAnchor = row;
never executed: rowSectionAnchor = row;
0
3240-
3241 if (q->selectionMode() != QTableView::SingleSelection
q->selectionMo...ingleSelectionDescription
TRUEnever evaluated
FALSEnever evaluated
0
3242 && command.testFlag(QItemSelectionModel::Toggle)) {
command.testFl...Model::Toggle)Description
TRUEnever evaluated
FALSEnever evaluated
0
3243 if (anchor)
anchorDescription
TRUEnever evaluated
FALSEnever evaluated
0
3244 ctrlDragSelectionFlag = verticalHeader->selectionModel()->selectedRows().contains(index)
never executed: ctrlDragSelectionFlag = verticalHeader->selectionModel()->selectedRows().contains(index) ? QItemSelectionModel::Deselect : QItemSelectionModel::Select;
verticalHeader...ontains(index)Description
TRUEnever evaluated
FALSEnever evaluated
0
3245 ? QItemSelectionModel::Deselect : QItemSelectionModel::Select;
never executed: ctrlDragSelectionFlag = verticalHeader->selectionModel()->selectedRows().contains(index) ? QItemSelectionModel::Deselect : QItemSelectionModel::Select;
0
3246 command &= ~QItemSelectionModel::Toggle;-
3247 command |= ctrlDragSelectionFlag;-
3248 if (!anchor)
!anchorDescription
TRUEnever evaluated
FALSEnever evaluated
0
3249 command |= QItemSelectionModel::Current;
never executed: command |= QItemSelectionModel::Current;
0
3250 }
never executed: end of block
0
3251-
3252 QModelIndex upper = model->index(qMin(rowSectionAnchor, row), column, root);-
3253 QModelIndex lower = model->index(qMax(rowSectionAnchor, row), column, root);-
3254 if ((verticalHeader->sectionsMoved() && upper.row() != lower.row())) {
verticalHeader...ectionsMoved()Description
TRUEnever evaluated
FALSEnever evaluated
upper.row() != lower.row()Description
TRUEnever evaluated
FALSEnever evaluated
0
3255 q->setSelection(q->visualRect(upper) | q->visualRect(lower), command | QItemSelectionModel::Rows);-
3256 } else {
never executed: end of block
0
3257 selectionModel->select(QItemSelection(upper, lower), command | QItemSelectionModel::Rows);-
3258 }
never executed: end of block
0
3259 }-
3260}
never executed: end of block
0
3261-
3262void QTableViewPrivate::selectColumn(int column, bool anchor)-
3263{-
3264 Q_Q(QTableView);-
3265-
3266 if (q->selectionBehavior() == QTableView::SelectRows
q->selectionBe...ew::SelectRowsDescription
TRUEnever evaluated
FALSEnever evaluated
0
3267 || (q->selectionMode() == QTableView::SingleSelection
q->selectionMo...ingleSelectionDescription
TRUEnever evaluated
FALSEnever evaluated
0
3268 && q->selectionBehavior() == QTableView::SelectItems))
q->selectionBe...w::SelectItemsDescription
TRUEnever evaluated
FALSEnever evaluated
0
3269 return;
never executed: return;
0
3270-
3271 if (column >= 0 && column < model->columnCount(root)) {
column >= 0Description
TRUEnever evaluated
FALSEnever evaluated
column < model...umnCount(root)Description
TRUEnever evaluated
FALSEnever evaluated
0
3272 int row = verticalHeader->logicalIndexAt(0);-
3273 QModelIndex index = model->index(row, column, root);-
3274 QItemSelectionModel::SelectionFlags command = q->selectionCommand(index);-
3275 selectionModel->setCurrentIndex(index, QItemSelectionModel::NoUpdate);-
3276 if ((anchor && !(command & QItemSelectionModel::Current))
anchorDescription
TRUEnever evaluated
FALSEnever evaluated
!(command & QI...odel::Current)Description
TRUEnever evaluated
FALSEnever evaluated
0
3277 || (q->selectionMode() == QTableView::SingleSelection))
(q->selectionM...ngleSelection)Description
TRUEnever evaluated
FALSEnever evaluated
0
3278 columnSectionAnchor = column;
never executed: columnSectionAnchor = column;
0
3279-
3280 if (q->selectionMode() != QTableView::SingleSelection
q->selectionMo...ingleSelectionDescription
TRUEnever evaluated
FALSEnever evaluated
0
3281 && command.testFlag(QItemSelectionModel::Toggle)) {
command.testFl...Model::Toggle)Description
TRUEnever evaluated
FALSEnever evaluated
0
3282 if (anchor)
anchorDescription
TRUEnever evaluated
FALSEnever evaluated
0
3283 ctrlDragSelectionFlag = horizontalHeader->selectionModel()->selectedColumns().contains(index)
never executed: ctrlDragSelectionFlag = horizontalHeader->selectionModel()->selectedColumns().contains(index) ? QItemSelectionModel::Deselect : QItemSelectionModel::Select;
horizontalHead...ontains(index)Description
TRUEnever evaluated
FALSEnever evaluated
0
3284 ? QItemSelectionModel::Deselect : QItemSelectionModel::Select;
never executed: ctrlDragSelectionFlag = horizontalHeader->selectionModel()->selectedColumns().contains(index) ? QItemSelectionModel::Deselect : QItemSelectionModel::Select;
0
3285 command &= ~QItemSelectionModel::Toggle;-
3286 command |= ctrlDragSelectionFlag;-
3287 if (!anchor)
!anchorDescription
TRUEnever evaluated
FALSEnever evaluated
0
3288 command |= QItemSelectionModel::Current;
never executed: command |= QItemSelectionModel::Current;
0
3289 }
never executed: end of block
0
3290-
3291 QModelIndex left = model->index(row, qMin(columnSectionAnchor, column), root);-
3292 QModelIndex right = model->index(row, qMax(columnSectionAnchor, column), root);-
3293 if ((horizontalHeader->sectionsMoved() && left.column() != right.column())) {
horizontalHead...ectionsMoved()Description
TRUEnever evaluated
FALSEnever evaluated
left.column() ...right.column()Description
TRUEnever evaluated
FALSEnever evaluated
0
3294 q->setSelection(q->visualRect(left) | q->visualRect(right), command | QItemSelectionModel::Columns);-
3295 } else {
never executed: end of block
0
3296 selectionModel->select(QItemSelection(left, right), command | QItemSelectionModel::Columns);-
3297 }
never executed: end of block
0
3298 }-
3299}
never executed: end of block
0
3300-
3301/*!-
3302 \reimp-
3303 */-
3304void QTableView::currentChanged(const QModelIndex &current, const QModelIndex &previous)-
3305{-
3306#ifndef QT_NO_ACCESSIBILITY-
3307 if (QAccessible::isActive()) {
QAccessible::isActive()Description
TRUEnever evaluated
FALSEnever evaluated
0
3308 if (current.isValid()) {
current.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
3309 Q_D(QTableView);-
3310 int entry = d->accessibleTable2Index(current);-
3311 QAccessibleEvent event(this, QAccessible::Focus);-
3312 event.setChild(entry);-
3313 QAccessible::updateAccessibility(&event);-
3314 }
never executed: end of block
0
3315 }
never executed: end of block
0
3316#endif-
3317 QAbstractItemView::currentChanged(current, previous);-
3318}
never executed: end of block
0
3319-
3320/*!-
3321 \reimp-
3322 */-
3323void QTableView::selectionChanged(const QItemSelection &selected,-
3324 const QItemSelection &deselected)-
3325{-
3326 Q_D(QTableView);-
3327 Q_UNUSED(d)-
3328#ifndef QT_NO_ACCESSIBILITY-
3329 if (QAccessible::isActive()) {
QAccessible::isActive()Description
TRUEnever evaluated
FALSEnever evaluated
0
3330 // ### does not work properly for selection ranges.-
3331 QModelIndex sel = selected.indexes().value(0);-
3332 if (sel.isValid()) {
sel.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
3333 int entry = d->accessibleTable2Index(sel);-
3334 QAccessibleEvent event(this, QAccessible::SelectionAdd);-
3335 event.setChild(entry);-
3336 QAccessible::updateAccessibility(&event);-
3337 }
never executed: end of block
0
3338 QModelIndex desel = deselected.indexes().value(0);-
3339 if (desel.isValid()) {
desel.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
3340 int entry = d->accessibleTable2Index(desel);-
3341 QAccessibleEvent event(this, QAccessible::SelectionRemove);-
3342 event.setChild(entry);-
3343 QAccessible::updateAccessibility(&event);-
3344 }
never executed: end of block
0
3345 }
never executed: end of block
0
3346#endif-
3347 QAbstractItemView::selectionChanged(selected, deselected);-
3348}
never executed: end of block
0
3349-
3350int QTableView::visualIndex(const QModelIndex &index) const-
3351{-
3352 return index.row();
never executed: return index.row();
0
3353}-
3354-
3355QT_END_NAMESPACE-
3356-
3357#include "qtableview.moc"-
3358-
3359#include "moc_qtableview.cpp"-
3360-
3361#endif // QT_NO_TABLEVIEW-
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9