qabstractitemview.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/widgets/itemviews/qabstractitemview.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6-
7-
8-
9-
10-
11-
12QAbstractItemViewPrivate::QAbstractItemViewPrivate()-
13 : model(QAbstractItemModelPrivate::staticEmptyModel()),-
14 itemDelegate(0),-
15 selectionModel(0),-
16 ctrlDragSelectionFlag(QItemSelectionModel::NoUpdate),-
17 noSelectionOnMousePress(false),-
18 selectionMode(QAbstractItemView::ExtendedSelection),-
19 selectionBehavior(QAbstractItemView::SelectItems),-
20 currentlyCommittingEditor(0),-
21 pressedModifiers(Qt::NoModifier),-
22 pressedPosition(QPoint(-1, -1)),-
23 pressedAlreadySelected(false),-
24 viewportEnteredNeeded(false),-
25 state(QAbstractItemView::NoState),-
26 stateBeforeAnimation(QAbstractItemView::NoState),-
27 editTriggers(QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed),-
28 lastTrigger(QAbstractItemView::NoEditTriggers),-
29 tabKeyNavigation(false),-
30-
31 showDropIndicator(true),-
32 dragEnabled(false),-
33 dragDropMode(QAbstractItemView::NoDragDrop),-
34 overwrite(false),-
35 dropIndicatorPosition(QAbstractItemView::OnItem),-
36 defaultDropAction(Qt::IgnoreAction),-
37-
38 autoScroll(true),-
39 autoScrollMargin(16),-
40 autoScrollCount(0),-
41 shouldScrollToCurrentOnShow(false),-
42 shouldClearStatusTip(false),-
43 alternatingColors(false),-
44 textElideMode(Qt::ElideRight),-
45 verticalScrollMode(QAbstractItemView::ScrollPerItem),-
46 horizontalScrollMode(QAbstractItemView::ScrollPerItem),-
47 currentIndexSet(false),-
48 wrapItemText(false),-
49 delayedPendingLayout(true),-
50 moveCursorUpdatedView(false),-
51 verticalScrollModeSet(false),-
52 horizontalScrollModeSet(false)-
53{-
54 keyboardInputTime.invalidate();-
55}
never executed: end of block
0
56-
57QAbstractItemViewPrivate::~QAbstractItemViewPrivate()-
58{-
59}-
60-
61void QAbstractItemViewPrivate::init()-
62{-
63 QAbstractItemView * const q = q_func();-
64 q->setItemDelegate(new QStyledItemDelegate(q));-
65-
66 vbar->setRange(0, 0);-
67 hbar->setRange(0, 0);-
68-
69 QObject::connect(vbar, qFlagLocation("2""actionTriggered(int)" "\0" __FILE__ ":" "121""132"),-
70 q, qFlagLocation("1""verticalScrollbarAction(int)" "\0" __FILE__ ":" "122""133"));-
71 QObject::connect(hbar, qFlagLocation("2""actionTriggered(int)" "\0" __FILE__ ":" "123""134"),-
72 q, qFlagLocation("1""horizontalScrollbarAction(int)" "\0" __FILE__ ":" "124""135"));-
73 QObject::connect(vbar, qFlagLocation("2""valueChanged(int)" "\0" __FILE__ ":" "125""136"),-
74 q, qFlagLocation("1""verticalScrollbarValueChanged(int)" "\0" __FILE__ ":" "126""137"));-
75 QObject::connect(hbar, qFlagLocation("2""valueChanged(int)" "\0" __FILE__ ":" "127""138"),-
76 q, qFlagLocation("1""horizontalScrollbarValueChanged(int)" "\0" __FILE__ ":" "128""139"));-
77-
78 viewport->setBackgroundRole(QPalette::Base);-
79-
80 q->setAttribute(Qt::WA_InputMethodEnabled);-
81-
82 verticalScrollMode = static_cast<QAbstractItemView::ScrollMode>(q->style()->styleHint(QStyle::SH_ItemView_ScrollMode, 0, q, 0));-
83 horizontalScrollMode = static_cast<QAbstractItemView::ScrollMode>(q->style()->styleHint(QStyle::SH_ItemView_ScrollMode, 0, q, 0));-
84}
never executed: end of block
0
85-
86void QAbstractItemViewPrivate::setHoverIndex(const QPersistentModelIndex &index)-
87{-
88 QAbstractItemView * const q = q_func();-
89 if (hover == index)-
90 return;-
91-
92 if (selectionBehavior != QAbstractItemView::SelectRows) {-
93 q->update(hover);-
94 q->update(index);-
95 } else {-
96 QRect oldHoverRect = q->visualRect(hover);-
97 QRect newHoverRect = q->visualRect(index);-
98 viewport->update(QRect(0, newHoverRect.y(), viewport->width(), newHoverRect.height()));-
99 viewport->update(QRect(0, oldHoverRect.y(), viewport->width(), oldHoverRect.height()));-
100 }-
101 hover = index;-
102}-
103-
104void QAbstractItemViewPrivate::checkMouseMove(const QPersistentModelIndex &index)-
105{-
106-
107 QAbstractItemView * const q = q_func();-
108 setHoverIndex(index);-
109 if (viewportEnteredNeeded || enteredIndex != index) {-
110 viewportEnteredNeeded = false;-
111-
112 if (index.isValid()) {-
113 q->entered(index);-
114-
115 QString statustip = model->data(index, Qt::StatusTipRole).toString();-
116 if (parent && (shouldClearStatusTip || !statustip.isEmpty())) {-
117 QStatusTipEvent tip(statustip);-
118 QApplication::sendEvent(parent, &tip);-
119 shouldClearStatusTip = !statustip.isEmpty();-
120 }-
121-
122 } else {-
123-
124 if (parent && shouldClearStatusTip) {-
125 QString emptyString;-
126 QStatusTipEvent tip( emptyString );-
127 QApplication::sendEvent(parent, &tip);-
128 }-
129-
130 q->viewportEntered();-
131 }-
132 enteredIndex = index;-
133 }-
134}-
135-
136-
137-
138-
139void QAbstractItemViewPrivate::_q_scrollerStateChanged()-
140{-
141 QAbstractItemView * const q = q_func();-
142-
143 if (QScroller *scroller = QScroller::scroller(viewport)) {-
144 switch (scroller->state()) {-
145 case QScroller::Pressed:-
146-
147 if (q->selectionModel()) {-
148 oldSelection = q->selectionModel()->selection();-
149 oldCurrent = q->selectionModel()->currentIndex();-
150 }-
151 break;-
152-
153 case QScroller::Dragging:-
154-
155 if (q->selectionModel()) {-
156 q->selectionModel()->select(oldSelection, QItemSelectionModel::ClearAndSelect);-
157 q->selectionModel()->setCurrentIndex(oldCurrent, QItemSelectionModel::NoUpdate);-
158 }-
159-
160-
161 default:-
162 oldSelection = QItemSelection();-
163 oldCurrent = QModelIndex();-
164 break;-
165 }-
166 }-
167}-
168QAbstractItemView::QAbstractItemView(QWidget *parent)-
169 : QAbstractScrollArea(*(new QAbstractItemViewPrivate), parent)-
170{-
171 d_func()->init();-
172}-
173-
174-
175-
176-
177QAbstractItemView::QAbstractItemView(QAbstractItemViewPrivate &dd, QWidget *parent)-
178 : QAbstractScrollArea(dd, parent)-
179{-
180 d_func()->init();-
181}-
182-
183-
184-
185-
186QAbstractItemView::~QAbstractItemView()-
187{-
188 QAbstractItemViewPrivate * const d = d_func();-
189-
190 d->delayedReset.stop();-
191 d->updateTimer.stop();-
192 d->delayedEditing.stop();-
193 d->delayedAutoScroll.stop();-
194 d->autoScrollTimer.stop();-
195 d->delayedLayout.stop();-
196 d->fetchMoreTimer.stop();-
197}-
198void QAbstractItemView::setModel(QAbstractItemModel *model)-
199{-
200 QAbstractItemViewPrivate * const d = d_func();-
201 if (model == d->model)-
202 return;-
203 if (d->model && d->model != QAbstractItemModelPrivate::staticEmptyModel()) {-
204 disconnect(d->model, qFlagLocation("2""destroyed()" "\0" __FILE__ ":" "656""675"),-
205 this, qFlagLocation("1""_q_modelDestroyed()" "\0" __FILE__ ":" "657""676"));-
206 disconnect(d->model, qFlagLocation("2""dataChanged(QModelIndex,QModelIndex,QVector<int>)" "\0" __FILE__ ":" "658""677"),-
207 this, qFlagLocation("1""dataChanged(QModelIndex,QModelIndex,QVector<int>)" "\0" __FILE__ ":" "659""678"));-
208 disconnect(d->model, qFlagLocation("2""headerDataChanged(Qt::Orientation,int,int)" "\0" __FILE__ ":" "660""679"),-
209 this, qFlagLocation("1""_q_headerDataChanged()" "\0" __FILE__ ":" "661""680"));-
210 disconnect(d->model, qFlagLocation("2""rowsInserted(QModelIndex,int,int)" "\0" __FILE__ ":" "662""681"),-
211 this, qFlagLocation("1""rowsInserted(QModelIndex,int,int)" "\0" __FILE__ ":" "663""682"));-
212 disconnect(d->model, qFlagLocation("2""rowsAboutToBeRemoved(QModelIndex,int,int)" "\0" __FILE__ ":" "664""683"),-
213 this, qFlagLocation("1""rowsAboutToBeRemoved(QModelIndex,int,int)" "\0" __FILE__ ":" "665""684"));-
214 disconnect(d->model, qFlagLocation("2""rowsRemoved(QModelIndex,int,int)" "\0" __FILE__ ":" "666""685"),-
215 this, qFlagLocation("1""_q_rowsRemoved(QModelIndex,int,int)" "\0" __FILE__ ":" "667""686"));-
216 disconnect(d->model, qFlagLocation("2""rowsMoved(QModelIndex,int,int,QModelIndex,int)" "\0" __FILE__ ":" "668""687"),-
217 this, qFlagLocation("1""_q_rowsMoved(QModelIndex,int,int,QModelIndex,int)" "\0" __FILE__ ":" "669""688"));-
218 disconnect(d->model, qFlagLocation("2""rowsInserted(QModelIndex,int,int)" "\0" __FILE__ ":" "670""689"),-
219 this, qFlagLocation("1""_q_rowsInserted(QModelIndex,int,int)" "\0" __FILE__ ":" "671""690"));-
220 disconnect(d->model, qFlagLocation("2""columnsAboutToBeRemoved(QModelIndex,int,int)" "\0" __FILE__ ":" "672""691"),-
221 this, qFlagLocation("1""_q_columnsAboutToBeRemoved(QModelIndex,int,int)" "\0" __FILE__ ":" "673""692"));-
222 disconnect(d->model, qFlagLocation("2""columnsRemoved(QModelIndex,int,int)" "\0" __FILE__ ":" "674""693"),-
223 this, qFlagLocation("1""_q_columnsRemoved(QModelIndex,int,int)" "\0" __FILE__ ":" "675""694"));-
224 disconnect(d->model, qFlagLocation("2""columnsInserted(QModelIndex,int,int)" "\0" __FILE__ ":" "676""695"),-
225 this, qFlagLocation("1""_q_columnsInserted(QModelIndex,int,int)" "\0" __FILE__ ":" "677""696"));-
226 disconnect(d->model, qFlagLocation("2""columnsMoved(QModelIndex,int,int,QModelIndex,int)" "\0" __FILE__ ":" "678""697"),-
227 this, qFlagLocation("1""_q_columnsMoved(QModelIndex,int,int,QModelIndex,int)" "\0" __FILE__ ":" "679""698"));-
228-
229 disconnect(d->model, qFlagLocation("2""modelReset()" "\0" __FILE__ ":" "681""700"), this, qFlagLocation("1""reset()" "\0" __FILE__ ":" "681""700"));-
230 disconnect(d->model, qFlagLocation("2""layoutChanged()" "\0" __FILE__ ":" "682""701"), this, qFlagLocation("1""_q_layoutChanged()" "\0" __FILE__ ":" "682""701"));-
231 }-
232 d->model = (model ? model : QAbstractItemModelPrivate::staticEmptyModel());-
233-
234-
235 ((!(d->model->index(0,0) == d->model->index(0,0))) ? qt_assert_x("QAbstractItemView::setModel", "A model should return the exact same index " "(including its internal id/pointer) when asked for it twice in a row.",-
236-
237-
238 __FILE__-
239 ,-
240-
241-
242 690709-
243 ) : qt_noop())-
244-
245-
246 ;-
247 ((!(!d->model->index(0,0).parent().isValid())) ? qt_assert_x("QAbstractItemView::setModel", "The parent of a top level index should be invalid",-
248-
249 __FILE__-
250 ,-
251-
252 693712-
253 ) : qt_noop())-
254-
255 ;-
256-
257 if (d->model != QAbstractItemModelPrivate::staticEmptyModel()) {-
258 connect(d->model, qFlagLocation("2""destroyed()" "\0" __FILE__ ":" "696""715"),-
259 this, qFlagLocation("1""_q_modelDestroyed()" "\0" __FILE__ ":" "697""716"));-
260 connect(d->model, qFlagLocation("2""dataChanged(QModelIndex,QModelIndex,QVector<int>)" "\0" __FILE__ ":" "698""717"),-
261 this, qFlagLocation("1""dataChanged(QModelIndex,QModelIndex,QVector<int>)" "\0" __FILE__ ":" "699""718"));-
262 connect(d->model, qFlagLocation("2""headerDataChanged(Qt::Orientation,int,int)" "\0" __FILE__ ":" "700""719"),-
263 this, qFlagLocation("1""_q_headerDataChanged()" "\0" __FILE__ ":" "701""720"));-
264 connect(d->model, qFlagLocation("2""rowsInserted(QModelIndex,int,int)" "\0" __FILE__ ":" "702""721"),-
265 this, qFlagLocation("1""rowsInserted(QModelIndex,int,int)" "\0" __FILE__ ":" "703""722"));-
266 connect(d->model, qFlagLocation("2""rowsInserted(QModelIndex,int,int)" "\0" __FILE__ ":" "704""723"),-
267 this, qFlagLocation("1""_q_rowsInserted(QModelIndex,int,int)" "\0" __FILE__ ":" "705""724"));-
268 connect(d->model, qFlagLocation("2""rowsAboutToBeRemoved(QModelIndex,int,int)" "\0" __FILE__ ":" "706""725"),-
269 this, qFlagLocation("1""rowsAboutToBeRemoved(QModelIndex,int,int)" "\0" __FILE__ ":" "707""726"));-
270 connect(d->model, qFlagLocation("2""rowsRemoved(QModelIndex,int,int)" "\0" __FILE__ ":" "708""727"),-
271 this, qFlagLocation("1""_q_rowsRemoved(QModelIndex,int,int)" "\0" __FILE__ ":" "709""728"));-
272 connect(d->model, qFlagLocation("2""rowsMoved(QModelIndex,int,int,QModelIndex,int)" "\0" __FILE__ ":" "710""729"),-
273 this, qFlagLocation("1""_q_rowsMoved(QModelIndex,int,int,QModelIndex,int)" "\0" __FILE__ ":" "711""730"));-
274 connect(d->model, qFlagLocation("2""columnsAboutToBeRemoved(QModelIndex,int,int)" "\0" __FILE__ ":" "712""731"),-
275 this, qFlagLocation("1""_q_columnsAboutToBeRemoved(QModelIndex,int,int)" "\0" __FILE__ ":" "713""732"));-
276 connect(d->model, qFlagLocation("2""columnsRemoved(QModelIndex,int,int)" "\0" __FILE__ ":" "714""733"),-
277 this, qFlagLocation("1""_q_columnsRemoved(QModelIndex,int,int)" "\0" __FILE__ ":" "715""734"));-
278 connect(d->model, qFlagLocation("2""columnsInserted(QModelIndex,int,int)" "\0" __FILE__ ":" "716""735"),-
279 this, qFlagLocation("1""_q_columnsInserted(QModelIndex,int,int)" "\0" __FILE__ ":" "717""736"));-
280 connect(d->model, qFlagLocation("2""columnsMoved(QModelIndex,int,int,QModelIndex,int)" "\0" __FILE__ ":" "718""737"),-
281 this, qFlagLocation("1""_q_columnsMoved(QModelIndex,int,int,QModelIndex,int)" "\0" __FILE__ ":" "719""738"));-
282-
283 connect(d->model, qFlagLocation("2""modelReset()" "\0" __FILE__ ":" "721""740"), this, qFlagLocation("1""reset()" "\0" __FILE__ ":" "721""740"));-
284 connect(d->model, qFlagLocation("2""layoutChanged()" "\0" __FILE__ ":" "722""741"), this, qFlagLocation("1""_q_layoutChanged()" "\0" __FILE__ ":" "722""741"));-
285 }-
286-
287 QItemSelectionModel *selection_model = new QItemSelectionModel(d->model, this);-
288 connect(d->model, qFlagLocation("2""destroyed()" "\0" __FILE__ ":" "726""745"), selection_model, qFlagLocation("1""deleteLater()" "\0" __FILE__ ":" "726""745"));-
289 setSelectionModel(selection_model);-
290-
291 reset();-
292}-
293-
294-
295-
296-
297QAbstractItemModel *QAbstractItemView::model() const-
298{-
299 const QAbstractItemViewPrivate * const d = d_func();-
300 return (d->model == QAbstractItemModelPrivate::staticEmptyModel() ? 0 : d->model);-
301}-
302void QAbstractItemView::setSelectionModel(QItemSelectionModel *selectionModel)-
303{-
304-
305 ((!(selectionModel)) ? qt_assert("selectionModel",__FILE__,758777) : qt_noop());-
306 QAbstractItemViewPrivate * const d = d_func();-
307-
308 if (__builtin_expect(!!(
__builtin_expe...model), false)Description
TRUEnever evaluated
FALSEnever evaluated
selectionModel->model() != d->model)), false)
__builtin_expe...model), false)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
309 QMessageLogger(__FILE__, 762781, __PRETTY_FUNCTION__).warning("QAbstractItemView::setSelectionModel() failed: "-
310 "Trying to set a selection model, which works on "-
311 "a different model than the view.");-
312 return;
never executed: return;
0
313 }-
314-
315 QItemSelection oldSelection;-
316 QModelIndex oldCurrentIndex;-
317-
318 if (d->selectionModel
d->selectionModelDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
319 if (d->selectionModel->model() == selectionModel->model()
d->selectionMo...Model->model()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
320 oldSelection = d->selectionModel->selection();-
321 oldCurrentIndex = d->selectionModel->currentIndex();-
322 }
never executed: end of block
0
323-
324 disconnect(d->selectionModel, qFlagLocation("2""selectionChanged(QItemSelection,QItemSelection)" "\0" __FILE__ ":" "777""796"),-
325 this, qFlagLocation("1""selectionChanged(QItemSelection,QItemSelection)" "\0" __FILE__ ":" "778""797"));-
326 disconnect(d->selectionModel, qFlagLocation("2""currentChanged(QModelIndex,QModelIndex)" "\0" __FILE__ ":" "779""798"),-
327 this, qFlagLocation("1""currentChanged(QModelIndex,QModelIndex)" "\0" __FILE__ ":" "780""799"));-
328 }
never executed: end of block
0
329-
330 d->selectionModel = selectionModel;-
331-
332 if (d->selectionModel
d->selectionModelDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
333 connect(d->selectionModel, qFlagLocation("2""selectionChanged(QItemSelection,QItemSelection)" "\0" __FILE__ ":" "786""805"),-
334 this, qFlagLocation("1""selectionChanged(QItemSelection,QItemSelection)" "\0" __FILE__ ":" "787""806"));-
335 connect(d->selectionModel, qFlagLocation("2""currentChanged(QModelIndex,QModelIndex)" "\0" __FILE__ ":" "788""807"),-
336 this, qFlagLocation("1""currentChanged(QModelIndex,QModelIndex)" "\0" __FILE__ ":" "789""808"));-
337-
338 selectionChanged(d->selectionModel->selection(), oldSelection);-
339 currentChanged(d->selectionModel->currentIndex(), oldCurrentIndex);-
340 }
never executed: end of block
0
341}
never executed: end of block
0
342-
343-
344-
345-
346-
347-
348QItemSelectionModel* QAbstractItemView::selectionModel() const-
349{-
350 const QAbstractItemViewPrivate * const d = d_func();-
351 return d->selectionModel;-
352}-
353void QAbstractItemView::setItemDelegate(QAbstractItemDelegate *delegate)-
354{-
355 QAbstractItemViewPrivate * const d = d_func();-
356 if (delegate == d->itemDelegate)-
357 return;-
358-
359 if (d->itemDelegate) {-
360 if (d->delegateRefCount(d->itemDelegate) == 1) {-
361 disconnect(d->itemDelegate, qFlagLocation("2""closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint)" "\0" __FILE__ ":" "830""849"),-
362 this, qFlagLocation("1""closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint)" "\0" __FILE__ ":" "831""850"));-
363 disconnect(d->itemDelegate, qFlagLocation("2""commitData(QWidget*)" "\0" __FILE__ ":" "832""851"), this, qFlagLocation("1""commitData(QWidget*)" "\0" __FILE__ ":" "832""851"));-
364 disconnect(d->itemDelegate, qFlagLocation("2""sizeHintChanged(QModelIndex)" "\0" __FILE__ ":" "833""852"), this, qFlagLocation("1""doItemsLayout()" "\0" __FILE__ ":" "833""852"));-
365 }-
366 }-
367-
368 if (delegate) {-
369 if (d->delegateRefCount(delegate) == 0) {-
370 connect(delegate, qFlagLocation("2""closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint)" "\0" __FILE__ ":" "839""858"),-
371 this, qFlagLocation("1""closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint)" "\0" __FILE__ ":" "840""859"));-
372 connect(delegate, qFlagLocation("2""commitData(QWidget*)" "\0" __FILE__ ":" "841""860"), this, qFlagLocation("1""commitData(QWidget*)" "\0" __FILE__ ":" "841""860"));-
373 connect(delegate, qFlagLocation("2""sizeHintChanged(QModelIndex)" "\0" __FILE__ ":" "842""861"), this, qFlagLocation("1""doItemsLayout()" "\0" __FILE__ ":" "842""861"), Qt::QueuedConnection);-
374 }-
375 }-
376 d->itemDelegate = delegate;-
377 viewport()->update();-
378 d->doDelayedItemsLayout();-
379}-
380-
381-
382-
383-
384-
385-
386-
387QAbstractItemDelegate *QAbstractItemView::itemDelegate() const-
388{-
389 return d_func()->itemDelegate;-
390}-
391-
392-
393-
394-
395QVariant QAbstractItemView::inputMethodQuery(Qt::InputMethodQuery query) const-
396{-
397 const QModelIndex current = currentIndex();-
398 if (!current.isValid() || query != Qt::ImCursorRectangle)-
399 return QAbstractScrollArea::inputMethodQuery(query);-
400 return visualRect(current);-
401}-
402void QAbstractItemView::setItemDelegateForRow(int row, QAbstractItemDelegate *delegate)-
403{-
404 QAbstractItemViewPrivate * const d = d_func();-
405 if (QAbstractItemDelegate *rowDelegate = d->rowDelegates.value(row, 0)) {-
406 if (d->delegateRefCount(rowDelegate) == 1) {-
407 disconnect(rowDelegate, qFlagLocation("2""closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint)" "\0" __FILE__ ":" "898""917"),-
408 this, qFlagLocation("1""closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint)" "\0" __FILE__ ":" "899""918"));-
409 disconnect(rowDelegate, qFlagLocation("2""commitData(QWidget*)" "\0" __FILE__ ":" "900""919"), this, qFlagLocation("1""commitData(QWidget*)" "\0" __FILE__ ":" "900""919"));-
410 disconnect(rowDelegate, qFlagLocation("2""sizeHintChanged(QModelIndex)" "\0" __FILE__ ":" "901""920"), this, qFlagLocation("1""doItemsLayout()" "\0" __FILE__ ":" "901""920"));-
411 }-
412 d->rowDelegates.remove(row);-
413 }-
414 if (delegate) {-
415 if (d->delegateRefCount(delegate) == 0) {-
416 connect(delegate, qFlagLocation("2""closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint)" "\0" __FILE__ ":" "907""926"),-
417 this, qFlagLocation("1""closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint)" "\0" __FILE__ ":" "908""927"));-
418 connect(delegate, qFlagLocation("2""commitData(QWidget*)" "\0" __FILE__ ":" "909""928"), this, qFlagLocation("1""commitData(QWidget*)" "\0" __FILE__ ":" "909""928"));-
419 connect(delegate, qFlagLocation("2""sizeHintChanged(QModelIndex)" "\0" __FILE__ ":" "910""929"), this, qFlagLocation("1""doItemsLayout()" "\0" __FILE__ ":" "910""929"), Qt::QueuedConnection);-
420 }-
421 d->rowDelegates.insert(row, delegate);-
422 }-
423 viewport()->update();-
424 d->doDelayedItemsLayout();-
425}-
426QAbstractItemDelegate *QAbstractItemView::itemDelegateForRow(int row) const-
427{-
428 const QAbstractItemViewPrivate * const d = d_func();-
429 return d->rowDelegates.value(row, 0);-
430}-
431void QAbstractItemView::setItemDelegateForColumn(int column, QAbstractItemDelegate *delegate)-
432{-
433 QAbstractItemViewPrivate * const d = d_func();-
434 if (QAbstractItemDelegate *columnDelegate = d->columnDelegates.value(column, 0)) {-
435 if (d->delegateRefCount(columnDelegate) == 1) {-
436 disconnect(columnDelegate, qFlagLocation("2""closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint)" "\0" __FILE__ ":" "958""977"),-
437 this, qFlagLocation("1""closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint)" "\0" __FILE__ ":" "959""978"));-
438 disconnect(columnDelegate, qFlagLocation("2""commitData(QWidget*)" "\0" __FILE__ ":" "960""979"), this, qFlagLocation("1""commitData(QWidget*)" "\0" __FILE__ ":" "960""979"));-
439 disconnect(columnDelegate, qFlagLocation("2""sizeHintChanged(QModelIndex)" "\0" __FILE__ ":" "961""980"), this, qFlagLocation("1""doItemsLayout()" "\0" __FILE__ ":" "961""980"));-
440 }-
441 d->columnDelegates.remove(column);-
442 }-
443 if (delegate) {-
444 if (d->delegateRefCount(delegate) == 0) {-
445 connect(delegate, qFlagLocation("2""closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint)" "\0" __FILE__ ":" "967""986"),-
446 this, qFlagLocation("1""closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint)" "\0" __FILE__ ":" "968""987"));-
447 connect(delegate, qFlagLocation("2""commitData(QWidget*)" "\0" __FILE__ ":" "969""988"), this, qFlagLocation("1""commitData(QWidget*)" "\0" __FILE__ ":" "969""988"));-
448 connect(delegate, qFlagLocation("2""sizeHintChanged(QModelIndex)" "\0" __FILE__ ":" "970""989"), this, qFlagLocation("1""doItemsLayout()" "\0" __FILE__ ":" "970""989"), Qt::QueuedConnection);-
449 }-
450 d->columnDelegates.insert(column, delegate);-
451 }-
452 viewport()->update();-
453 d->doDelayedItemsLayout();-
454}-
455QAbstractItemDelegate *QAbstractItemView::itemDelegateForColumn(int column) const-
456{-
457 const QAbstractItemViewPrivate * const d = d_func();-
458 return d->columnDelegates.value(column, 0);-
459}-
460-
461-
462-
463-
464-
465QAbstractItemDelegate *QAbstractItemView::itemDelegate(const QModelIndex &index) const-
466{-
467 const QAbstractItemViewPrivate * const d = d_func();-
468 return d->delegateForIndex(index);-
469}-
470void QAbstractItemView::setSelectionMode(SelectionMode mode)-
471{-
472 QAbstractItemViewPrivate * const d = d_func();-
473 d->selectionMode = mode;-
474}-
475-
476QAbstractItemView::SelectionMode QAbstractItemView::selectionMode() const-
477{-
478 const QAbstractItemViewPrivate * const d = d_func();-
479 return d->selectionMode;-
480}-
481void QAbstractItemView::setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior)-
482{-
483 QAbstractItemViewPrivate * const d = d_func();-
484 d->selectionBehavior = behavior;-
485}-
486-
487QAbstractItemView::SelectionBehavior QAbstractItemView::selectionBehavior() const-
488{-
489 const QAbstractItemViewPrivate * const d = d_func();-
490 return d->selectionBehavior;-
491}-
492void QAbstractItemView::setCurrentIndex(const QModelIndex &index)-
493{-
494 QAbstractItemViewPrivate * const d = d_func();-
495 if (d->selectionModel && (!index.isValid() || d->isIndexEnabled(index))) {-
496 QItemSelectionModel::SelectionFlags command = selectionCommand(index, 0);-
497 d->selectionModel->setCurrentIndex(index, command);-
498 d->currentIndexSet = true;-
499 if ((command & QItemSelectionModel::Current) == 0)-
500 d->currentSelectionStartIndex = index;-
501 }-
502}-
503-
504-
505-
506-
507-
508-
509QModelIndex QAbstractItemView::currentIndex() const-
510{-
511 const QAbstractItemViewPrivate * const d = d_func();-
512 return d->selectionModel ? d->selectionModel->currentIndex() : QModelIndex();-
513}-
514void QAbstractItemView::reset()-
515{-
516 QAbstractItemViewPrivate * const d = d_func();-
517 d->delayedReset.stop();-
518 for (QForeachContainer<typename QtPrivate::remove_reference<decltype(d->indexEditorHash)>::type> _container_((d->indexEditorHash)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (const QEditorInfo &info = *_container_.i; _container_.control; _container_.control = 0) {-
519 if (info.widget)-
520 d->releaseEditor(info.widget.data(), d->indexForEditor(info.widget.data()));-
521 }-
522 d->editorIndexHash.clear();-
523 d->indexEditorHash.clear();-
524 d->persistent.clear();-
525 d->currentIndexSet = false;-
526 setState(NoState);-
527 setRootIndex(QModelIndex());-
528 if (d->selectionModel)-
529 d->selectionModel->reset();-
530-
531 if (QAccessible::isActive()) {-
532 QAccessibleTableModelChangeEvent accessibleEvent(this, QAccessibleTableModelChangeEvent::ModelReset);-
533 QAccessible::updateAccessibility(&accessibleEvent);-
534 }-
535-
536 d->updateGeometry();-
537}-
538-
539-
540-
541-
542-
543-
544void QAbstractItemView::setRootIndex(const QModelIndex &index)-
545{-
546 QAbstractItemViewPrivate * const d = d_func();-
547 if (__builtin_expect(!!(
__builtin_expe...model), false)Description
TRUEnever evaluated
FALSEnever evaluated
index.isValid() && index.model() != d->model)), false)
__builtin_expe...model), false)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
548 QMessageLogger(__FILE__, 11281147, __PRETTY_FUNCTION__).warning("QAbstractItemView::setRootIndex failed : index must be from the currently set model");-
549 return;
never executed: return;
0
550 }-
551 d->root = index;-
552 d->doDelayedItemsLayout();-
553 d->updateGeometry();-
554}
never executed: end of block
0
555-
556-
557-
558-
559-
560-
561-
562QModelIndex QAbstractItemView::rootIndex() const-
563{-
564 return QModelIndex(d_func()->root);-
565}-
566void QAbstractItemView::selectAll()-
567{-
568 QAbstractItemViewPrivate * const d = d_func();-
569 SelectionMode mode = d->selectionMode;-
570 if (mode == MultiSelection || mode == ExtendedSelection)-
571 d->selectAll(QItemSelectionModel::ClearAndSelect-
572 |d->selectionBehaviorFlags());-
573 else if (mode != SingleSelection)-
574 d->selectAll(selectionCommand(d->model->index(0, 0, d->root)));-
575}-
576void QAbstractItemView::edit(const QModelIndex &index)-
577{-
578 QAbstractItemViewPrivate * const d = d_func();-
579 if (!(__builtin_expect(!!(!
__builtin_expe...ndex)), false)Description
TRUEnever evaluated
FALSEnever evaluated
d->isIndexValid(index)), false)
__builtin_expe...ndex)), false)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
580 QMessageLogger(__FILE__, 11811200, __PRETTY_FUNCTION__).warning("edit: index was invalid");
never executed: QMessageLogger(__FILE__, 1200, __PRETTY_FUNCTION__).warning("edit: index was invalid");
0
581 if (!(__builtin_expect(!!(!
__builtin_expe...s, 0)), false)Description
TRUEnever evaluated
FALSEnever evaluated
edit(index, AllEditTriggers, 0)), false)
__builtin_expe...s, 0)), false)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
582 QMessageLogger(__FILE__, 11831202, __PRETTY_FUNCTION__).warning("edit: editing failed");
never executed: QMessageLogger(__FILE__, 1202, __PRETTY_FUNCTION__).warning("edit: editing failed");
0
583}
never executed: end of block
0
584-
585-
586-
587-
588-
589-
590void QAbstractItemView::clearSelection()-
591{-
592 QAbstractItemViewPrivate * const d = d_func();-
593 if (d->selectionModel)-
594 d->selectionModel->clearSelection();-
595}-
596-
597-
598-
599-
600-
601-
602-
603void QAbstractItemView::doItemsLayout()-
604{-
605 QAbstractItemViewPrivate * const d = d_func();-
606 d->interruptDelayedItemsLayout();-
607 updateGeometries();-
608 d->viewport->update();-
609}-
610void QAbstractItemView::setEditTriggers(EditTriggers actions)-
611{-
612 QAbstractItemViewPrivate * const d = d_func();-
613 d->editTriggers = actions;-
614}-
615-
616QAbstractItemView::EditTriggers QAbstractItemView::editTriggers() const-
617{-
618 const QAbstractItemViewPrivate * const d = d_func();-
619 return d->editTriggers;-
620}-
621void QAbstractItemView::setVerticalScrollMode(ScrollMode mode)-
622{-
623 QAbstractItemViewPrivate * const d = d_func();-
624 d->verticalScrollModeSet = true;-
625 if (mode == d->verticalScrollMode
mode == d->verticalScrollModeDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
626 return;
never executed: return;
0
627 QModelIndex topLeft = indexAt(QPoint(0, 0));-
628 d->verticalScrollMode = mode;-
629 if (mode == ScrollPerItem
mode == ScrollPerItemDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
630 verticalScrollBar()->d_func()->itemviewChangeSingleStep(1);
never executed: verticalScrollBar()->d_func()->itemviewChangeSingleStep(1);
0
631 else-
632 verticalScrollBar()->setSingleStep(-1);
never executed: verticalScrollBar()->setSingleStep(-1);
0
633 updateGeometries();-
634 scrollTo(topLeft, QAbstractItemView::PositionAtTop);-
635}
never executed: end of block
0
636-
637QAbstractItemView::ScrollMode QAbstractItemView::verticalScrollMode() const-
638{-
639 const QAbstractItemViewPrivate * const d = d_func();-
640 return d->verticalScrollMode;-
641}-
642-
643void QAbstractItemView::resetVerticalScrollMode()-
644{-
645 auto sm = static_cast<ScrollMode>(style()->styleHint(QStyle::SH_ItemView_ScrollMode, 0, this, 0));-
646 setVerticalScrollMode(sm);-
647 d_func()->verticalScrollModeSet = false;-
648}
never executed: end of block
0
649void QAbstractItemView::setHorizontalScrollMode(ScrollMode mode)-
650{-
651 QAbstractItemViewPrivate * const d = d_func();-
652 d->horizontalScrollModeSet = true;-
653 if (mode == d->horizontalScrollMode
mode == d->hor...ntalScrollModeDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
654 return;
never executed: return;
0
655 d->horizontalScrollMode = mode;-
656 if (mode == ScrollPerItem
mode == ScrollPerItemDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
657 horizontalScrollBar()->d_func()->itemviewChangeSingleStep(1);
never executed: horizontalScrollBar()->d_func()->itemviewChangeSingleStep(1);
0
658 else-
659 horizontalScrollBar()->setSingleStep(-1);
never executed: horizontalScrollBar()->setSingleStep(-1);
0
660 updateGeometries();-
661}
never executed: end of block
0
662-
663QAbstractItemView::ScrollMode QAbstractItemView::horizontalScrollMode() const-
664{-
665 const QAbstractItemViewPrivate * const d = d_func();-
666 return d->horizontalScrollMode;-
667}-
668-
669void QAbstractItemView::resetHorizontalScrollMode()-
670{-
671 auto sm = static_cast<ScrollMode>(style()->styleHint(QStyle::SH_ItemView_ScrollMode, 0, this, 0));-
672 setHorizontalScrollMode(sm);-
673 d_func()->horizontalScrollModeSet = false;-
674}
never executed: end of block
0
675void QAbstractItemView::setDragDropOverwriteMode(bool overwrite)-
676{-
677 QAbstractItemViewPrivate * const d = d_func();-
678 d->overwrite = overwrite;-
679}-
680-
681bool QAbstractItemView::dragDropOverwriteMode() const-
682{-
683 const QAbstractItemViewPrivate * const d = d_func();-
684 return d->overwrite;-
685}-
686void QAbstractItemView::setAutoScroll(bool enable)-
687{-
688 QAbstractItemViewPrivate * const d = d_func();-
689 d->autoScroll = enable;-
690}-
691-
692bool QAbstractItemView::hasAutoScroll() const-
693{-
694 const QAbstractItemViewPrivate * const d = d_func();-
695 return d->autoScroll;-
696}-
697void QAbstractItemView::setAutoScrollMargin(int margin)-
698{-
699 QAbstractItemViewPrivate * const d = d_func();-
700 d->autoScrollMargin = margin;-
701}-
702-
703int QAbstractItemView::autoScrollMargin() const-
704{-
705 const QAbstractItemViewPrivate * const d = d_func();-
706 return d->autoScrollMargin;-
707}-
708-
709-
710-
711-
712-
713-
714void QAbstractItemView::setTabKeyNavigation(bool enable)-
715{-
716 QAbstractItemViewPrivate * const d = d_func();-
717 d->tabKeyNavigation = enable;-
718}-
719-
720bool QAbstractItemView::tabKeyNavigation() const-
721{-
722 const QAbstractItemViewPrivate * const d = d_func();-
723 return d->tabKeyNavigation;-
724}-
725-
726-
727-
728-
729-
730QSize QAbstractItemView::viewportSizeHint() const-
731{-
732 return QAbstractScrollArea::viewportSizeHint();-
733}-
734void QAbstractItemView::setDropIndicatorShown(bool enable)-
735{-
736 QAbstractItemViewPrivate * const d = d_func();-
737 d->showDropIndicator = enable;-
738}-
739-
740bool QAbstractItemView::showDropIndicator() const-
741{-
742 const QAbstractItemViewPrivate * const d = d_func();-
743 return d->showDropIndicator;-
744}-
745void QAbstractItemView::setDragEnabled(bool enable)-
746{-
747 QAbstractItemViewPrivate * const d = d_func();-
748 d->dragEnabled = enable;-
749}-
750-
751bool QAbstractItemView::dragEnabled() const-
752{-
753 const QAbstractItemViewPrivate * const d = d_func();-
754 return d->dragEnabled;-
755}-
756void QAbstractItemView::setDragDropMode(DragDropMode behavior)-
757{-
758 QAbstractItemViewPrivate * const d = d_func();-
759 d->dragDropMode = behavior;-
760 setDragEnabled(behavior == DragOnly || behavior == DragDrop || behavior == InternalMove);-
761 setAcceptDrops(behavior == DropOnly || behavior == DragDrop || behavior == InternalMove);-
762}-
763-
764QAbstractItemView::DragDropMode QAbstractItemView::dragDropMode() const-
765{-
766 const QAbstractItemViewPrivate * const d = d_func();-
767 DragDropMode setBehavior = d->dragDropMode;-
768 if (!dragEnabled() && !acceptDrops())-
769 return NoDragDrop;-
770-
771 if (dragEnabled() && !acceptDrops())-
772 return DragOnly;-
773-
774 if (!dragEnabled() && acceptDrops())-
775 return DropOnly;-
776-
777 if (dragEnabled() && acceptDrops()) {-
778 if (setBehavior == InternalMove)-
779 return setBehavior;-
780 else-
781 return DragDrop;-
782 }-
783-
784 return NoDragDrop;-
785}-
786void QAbstractItemView::setDefaultDropAction(Qt::DropAction dropAction)-
787{-
788 QAbstractItemViewPrivate * const d = d_func();-
789 d->defaultDropAction = dropAction;-
790}-
791-
792Qt::DropAction QAbstractItemView::defaultDropAction() const-
793{-
794 const QAbstractItemViewPrivate * const d = d_func();-
795 return d->defaultDropAction;-
796}-
797void QAbstractItemView::setAlternatingRowColors(bool enable)-
798{-
799 QAbstractItemViewPrivate * const d = d_func();-
800 d->alternatingColors = enable;-
801 if (isVisible())-
802 d->viewport->update();-
803}-
804-
805bool QAbstractItemView::alternatingRowColors() const-
806{-
807 const QAbstractItemViewPrivate * const d = d_func();-
808 return d->alternatingColors;-
809}-
810void QAbstractItemView::setIconSize(const QSize &size)-
811{-
812 QAbstractItemViewPrivate * const d = d_func();-
813 if (size == d->iconSize)-
814 return;-
815 d->iconSize = size;-
816 d->doDelayedItemsLayout();-
817 iconSizeChanged(size);-
818}-
819-
820QSize QAbstractItemView::iconSize() const-
821{-
822 const QAbstractItemViewPrivate * const d = d_func();-
823 return d->iconSize;-
824}-
825void QAbstractItemView::setTextElideMode(Qt::TextElideMode mode)-
826{-
827 QAbstractItemViewPrivate * const d = d_func();-
828 d->textElideMode = mode;-
829}-
830-
831Qt::TextElideMode QAbstractItemView::textElideMode() const-
832{-
833 return d_func()->textElideMode;-
834}-
835-
836-
837-
838-
839bool QAbstractItemView::focusNextPrevChild(bool next)-
840{-
841 QAbstractItemViewPrivate * const d = d_func();-
842 if (d->tabKeyNavigation && isEnabled() && d->viewport->isEnabled()) {-
843 QKeyEvent event(QEvent::KeyPress, next ? Qt::Key_Tab : Qt::Key_Backtab, Qt::NoModifier);-
844 keyPressEvent(&event);-
845 if (event.isAccepted())-
846 return true;-
847 }-
848 return QAbstractScrollArea::focusNextPrevChild(next);-
849}-
850-
851-
852-
853-
854bool QAbstractItemView::event(QEvent *event)-
855{-
856 QAbstractItemViewPrivate * const d = d_func();-
857 switch (event->type()) {-
858 case
never executed: case QEvent::Paint:
QEvent::Paint:
never executed: case QEvent::Paint:
0
859-
860-
861 d->executePostedLayout();-
862 break;
never executed: break;
0
863 case
never executed: case QEvent::Show:
QEvent::Show:
never executed: case QEvent::Show:
0
864 d->executePostedLayout();-
865 if (d->shouldScrollToCurrentOnShow
d->shouldScrollToCurrentOnShowDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
866 d->shouldScrollToCurrentOnShow = false;-
867 const QModelIndex current = currentIndex();-
868 if (current.isValid()
current.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
&& (d->state == QAbstractItemView::EditingState
d->state == QA...::EditingStateDescription
TRUEnever evaluated
FALSEnever evaluated
|| d->autoScroll
d->autoScrollDescription
TRUEnever evaluated
FALSEnever evaluated
))
0
869 scrollTo(current);
never executed: scrollTo(current);
0
870 }
never executed: end of block
0
871 break;
never executed: break;
0
872 case
never executed: case QEvent::LocaleChange:
QEvent::LocaleChange:
never executed: case QEvent::LocaleChange:
0
873 viewport()->update();-
874 break;
never executed: break;
0
875 case
never executed: case QEvent::LayoutDirectionChange:
QEvent::LayoutDirectionChange:
never executed: case QEvent::LayoutDirectionChange:
0
876 case
never executed: case QEvent::ApplicationLayoutDirectionChange:
QEvent::ApplicationLayoutDirectionChange:
never executed: case QEvent::ApplicationLayoutDirectionChange:
0
877 updateGeometries();-
878 break;
never executed: break;
0
879 case
never executed: case QEvent::StyleChange:
QEvent::StyleChange:
never executed: case QEvent::StyleChange:
0
880 doItemsLayout();-
881 if (!d->verticalScrollModeSet
!d->verticalScrollModeSetDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
882 resetVerticalScrollMode();
never executed: resetVerticalScrollMode();
0
883 if (!d->horizontalScrollModeSet
!d->horizontalScrollModeSetDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
884 resetHorizontalScrollMode
never executed: resetHorizontalScrollMode();
never executed: resetHorizontalScrollMode();
();
never executed: resetHorizontalScrollMode();
0
885 break;
never executed: break;
0
886 case
never executed: case QEvent::FocusOut:
QEvent::FocusOut:
never executed: case QEvent::FocusOut:
0
887 d->checkPersistentEditorFocus();-
888 break;
never executed: break;
0
889 case
never executed: case QEvent::FontChange:
QEvent::FontChange:
never executed: case QEvent::FontChange:
0
890 d->doDelayedItemsLayout();-
891 break;
never executed: break;
0
892 default
never executed: default:
:
never executed: default:
0
893 break;
never executed: break;
0
894 }-
895 return
never executed: return QAbstractScrollArea::event(event);
QAbstractScrollArea::event(event);
never executed: return QAbstractScrollArea::event(event);
0
896}-
897bool QAbstractItemView::viewportEvent(QEvent *event)-
898{-
899 QAbstractItemViewPrivate * const d = d_func();-
900 switch (event->type()) {-
901 case QEvent::HoverMove:-
902 case QEvent::HoverEnter:-
903 d->setHoverIndex(indexAt(static_cast<QHoverEvent*>(event)->pos()));-
904 break;-
905 case QEvent::HoverLeave:-
906 d->setHoverIndex(QModelIndex());-
907 break;-
908 case QEvent::Enter:-
909 d->viewportEnteredNeeded = true;-
910 break;-
911 case QEvent::Leave:-
912-
913 if (d->shouldClearStatusTip && d->parent) {-
914 QString empty;-
915 QStatusTipEvent tip(empty);-
916 QApplication::sendEvent(d->parent, &tip);-
917 d->shouldClearStatusTip = false;-
918 }-
919-
920 d->enteredIndex = QModelIndex();-
921 break;-
922 case QEvent::ToolTip:-
923 case QEvent::QueryWhatsThis:-
924 case QEvent::WhatsThis: {-
925 QHelpEvent *he = static_cast<QHelpEvent*>(event);-
926 const QModelIndex index = indexAt(he->pos());-
927 QStyleOptionViewItem option = d->viewOptionsV1();-
928 option.rect = visualRect(index);-
929 option.state |= (index == currentIndex() ? QStyle::State_HasFocus : QStyle::State_None);-
930-
931 QAbstractItemDelegate *delegate = d->delegateForIndex(index);-
932 if (!delegate)-
933 return false;-
934 return delegate->helpEvent(he, this, option, index);-
935 }-
936 case QEvent::FontChange:-
937 d->doDelayedItemsLayout();-
938 break;-
939 case QEvent::WindowActivate:-
940 case QEvent::WindowDeactivate:-
941 d->viewport->update();-
942 break;-
943 case QEvent::ScrollPrepare:-
944 executeDelayedItemsLayout();-
945-
946 connect(QScroller::scroller(d->viewport), qFlagLocation("2""stateChanged(QScroller::State)" "\0" __FILE__ ":" "1689""1740"), this, qFlagLocation("1""_q_scrollerStateChanged()" "\0" __FILE__ ":" "1689""1740"), Qt::UniqueConnection);-
947-
948 break;-
949-
950 default:-
951 break;-
952 }-
953 return QAbstractScrollArea::viewportEvent(event);-
954}-
955-
956-
957-
958-
959-
960-
961void QAbstractItemView::mousePressEvent(QMouseEvent *event)-
962{-
963 QAbstractItemViewPrivate * const d = d_func();-
964 d->delayedAutoScroll.stop();-
965 QPoint pos = event->pos();-
966 QPersistentModelIndex index = indexAt(pos);-
967-
968 if (!d->selectionModel-
969 || (d->state == EditingState && d->hasEditor(index)))-
970 return;-
971-
972 d->pressedAlreadySelected = d->selectionModel->isSelected(index);-
973 d->pressedIndex = index;-
974 d->pressedModifiers = event->modifiers();-
975 QItemSelectionModel::SelectionFlags command = selectionCommand(index, event);-
976 d->noSelectionOnMousePress = command == QItemSelectionModel::NoUpdate || !index.isValid();-
977 QPoint offset = d->offset();-
978 if ((command & QItemSelectionModel::Current) == 0) {-
979 d->pressedPosition = pos + offset;-
980 d->currentSelectionStartIndex = index;-
981 }-
982 else if (!d->currentSelectionStartIndex.isValid())-
983 d->currentSelectionStartIndex = currentIndex();-
984-
985 if (edit(index, NoEditTriggers, event))-
986 return;-
987-
988 if (index.isValid() && d->isIndexEnabled(index)) {-
989-
990-
991 bool autoScroll = d->autoScroll;-
992 d->autoScroll = false;-
993 d->selectionModel->setCurrentIndex(index, QItemSelectionModel::NoUpdate);-
994 d->autoScroll = autoScroll;-
995 if (command.testFlag(QItemSelectionModel::Toggle)) {-
996 command &= ~QItemSelectionModel::Toggle;-
997 d->ctrlDragSelectionFlag = d->selectionModel->isSelected(index) ? QItemSelectionModel::Deselect : QItemSelectionModel::Select;-
998 command |= d->ctrlDragSelectionFlag;-
999 }-
1000-
1001 if ((command & QItemSelectionModel::Current) == 0) {-
1002 setSelection(QRect(pos, QSize(1, 1)), command);-
1003 } else {-
1004 QRect rect(visualRect(d->currentSelectionStartIndex).center(), pos);-
1005 setSelection(rect, command);-
1006 }-
1007-
1008-
1009 pressed(index);-
1010 if (d->autoScroll) {-
1011-
1012-
1013 d->delayedAutoScroll.start(QApplication::doubleClickInterval()+100, this);-
1014 }-
1015-
1016 } else {-
1017-
1018 d->selectionModel->select(QModelIndex(), QItemSelectionModel::Select);-
1019 }-
1020}-
1021-
1022-
1023-
1024-
1025-
1026-
1027void QAbstractItemView::mouseMoveEvent(QMouseEvent *event)-
1028{-
1029 QAbstractItemViewPrivate * const d = d_func();-
1030 QPoint topLeft;-
1031 QPoint bottomRight = event->pos();-
1032-
1033 if (state() == ExpandingState || state() == CollapsingState)-
1034 return;-
1035-
1036-
1037 if (state() == DraggingState) {-
1038 topLeft = d->pressedPosition - d->offset();-
1039 if ((topLeft - bottomRight).manhattanLength() > QApplication::startDragDistance()) {-
1040 d->pressedIndex = QModelIndex();-
1041 startDrag(d->model->supportedDragActions());-
1042 setState(NoState);-
1043 stopAutoScroll();-
1044 }-
1045 return;-
1046 }-
1047-
1048-
1049 QPersistentModelIndex index = indexAt(bottomRight);-
1050 QModelIndex buddy = d->model->buddy(d->pressedIndex);-
1051 if ((state() == EditingState && d->hasEditor(buddy))-
1052 || edit(index, NoEditTriggers, event))-
1053 return;-
1054-
1055 if (d->selectionMode != SingleSelection)-
1056 topLeft = d->pressedPosition - d->offset();-
1057 else-
1058 topLeft = bottomRight;-
1059-
1060 d->checkMouseMove(index);-
1061-
1062-
1063 if (d->pressedIndex.isValid()-
1064 && d->dragEnabled-
1065 && (state() != DragSelectingState)-
1066 && (event->buttons() != Qt::NoButton)-
1067 && !d->selectedDraggableIndexes().isEmpty()) {-
1068 setState(DraggingState);-
1069 return;-
1070 }-
1071-
1072-
1073 if ((event->buttons() & Qt::LeftButton) && d->selectionAllowed(index) && d->selectionModel) {-
1074 setState(DragSelectingState);-
1075 QItemSelectionModel::SelectionFlags command = selectionCommand(index, event);-
1076 if (d->ctrlDragSelectionFlag != QItemSelectionModel::NoUpdate && command.testFlag(QItemSelectionModel::Toggle)) {-
1077 command &= ~QItemSelectionModel::Toggle;-
1078 command |= d->ctrlDragSelectionFlag;-
1079 }-
1080-
1081-
1082 QRect selectionRect = QRect(topLeft, bottomRight);-
1083 setSelection(selectionRect, command);-
1084-
1085-
1086 if (index.isValid()-
1087 && (index != d->selectionModel->currentIndex())-
1088 && d->isIndexEnabled(index))-
1089 d->selectionModel->setCurrentIndex(index, QItemSelectionModel::NoUpdate);-
1090 }-
1091}-
1092void QAbstractItemView::mouseReleaseEvent(QMouseEvent *event)-
1093{-
1094 QAbstractItemViewPrivate * const d = d_func();-
1095-
1096 QPoint pos = event->pos();-
1097 QPersistentModelIndex index = indexAt(pos);-
1098-
1099 if (state() == EditingState) {-
1100 if (d->isIndexValid(index)-
1101 && d->isIndexEnabled(index)-
1102 && d->sendDelegateEvent(index, event))-
1103 update(index);-
1104 return;-
1105 }-
1106-
1107 bool click = (index == d->pressedIndex && index.isValid());-
1108 bool selectedClicked = click && (event->button() == Qt::LeftButton) && d->pressedAlreadySelected;-
1109 EditTrigger trigger = (selectedClicked ? SelectedClicked : NoEditTriggers);-
1110 bool edited = edit(index, trigger, event);-
1111-
1112 d->ctrlDragSelectionFlag = QItemSelectionModel::NoUpdate;-
1113-
1114 if (d->selectionModel && d->noSelectionOnMousePress) {-
1115 d->noSelectionOnMousePress = false;-
1116 d->selectionModel->select(index, selectionCommand(index, event));-
1117 }-
1118-
1119 setState(NoState);-
1120-
1121 if (click) {-
1122 if (event->button() == Qt::LeftButton)-
1123 clicked(index);-
1124 if (edited)-
1125 return;-
1126 QStyleOptionViewItem option = d->viewOptionsV1();-
1127 if (d->pressedAlreadySelected)-
1128 option.state |= QStyle::State_Selected;-
1129 if ((model()->flags(index) & Qt::ItemIsEnabled)-
1130 && style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick, &option, this))-
1131 activated(index);-
1132 }-
1133}-
1134-
1135-
1136-
1137-
1138-
1139-
1140void QAbstractItemView::mouseDoubleClickEvent(QMouseEvent *event)-
1141{-
1142 QAbstractItemViewPrivate * const d = d_func();-
1143-
1144 QModelIndex index = indexAt(event->pos());-
1145 if (!index.isValid()-
1146 || !d->isIndexEnabled(index)-
1147 || (d->pressedIndex != index)) {-
1148 QMouseEvent me(QEvent::MouseButtonPress,-
1149 event->localPos(), event->windowPos(), event->screenPos(),-
1150 event->button(), event->buttons(), event->modifiers(), event->source());-
1151 mousePressEvent(&me);-
1152 return;-
1153 }-
1154-
1155 QPersistentModelIndex persistent = index;-
1156 doubleClicked(persistent);-
1157 if ((event->button() == Qt::LeftButton) && !edit(persistent, DoubleClicked, event)-
1158 && !style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick, 0, this))-
1159 activated(persistent);-
1160}-
1161void QAbstractItemView::dragEnterEvent(QDragEnterEvent *event)-
1162{-
1163 if (dragDropMode() == InternalMove-
1164 && (event->source() != this|| !(event->possibleActions() & Qt::MoveAction)))-
1165 return;-
1166-
1167 if (d_func()->canDrop(event)) {-
1168 event->accept();-
1169 setState(DraggingState);-
1170 } else {-
1171 event->ignore();-
1172 }-
1173}-
1174void QAbstractItemView::dragMoveEvent(QDragMoveEvent *event)-
1175{-
1176 QAbstractItemViewPrivate * const d = d_func();-
1177 if (dragDropMode() == InternalMove-
1178 && (event->source() != this || !(event->possibleActions() & Qt::MoveAction)))-
1179 return;-
1180-
1181-
1182 event->ignore();-
1183-
1184 QModelIndex index = indexAt(event->pos());-
1185 d->hover = index;-
1186 if (!d->droppingOnItself(event, index)-
1187 && d->canDrop(event)) {-
1188-
1189 if (index.isValid() && d->showDropIndicator) {-
1190 QRect rect = visualRect(index);-
1191 d->dropIndicatorPosition = d->position(event->pos(), rect, index);-
1192 switch (d->dropIndicatorPosition) {-
1193 case AboveItem:-
1194 if (d->isIndexDropEnabled(index.parent())) {-
1195 d->dropIndicatorRect = QRect(rect.left(), rect.top(), rect.width(), 0);-
1196 event->acceptProposedAction();-
1197 } else {-
1198 d->dropIndicatorRect = QRect();-
1199 }-
1200 break;-
1201 case BelowItem:-
1202 if (d->isIndexDropEnabled(index.parent())) {-
1203 d->dropIndicatorRect = QRect(rect.left(), rect.bottom(), rect.width(), 0);-
1204 event->acceptProposedAction();-
1205 } else {-
1206 d->dropIndicatorRect = QRect();-
1207 }-
1208 break;-
1209 case OnItem:-
1210 if (d->isIndexDropEnabled(index)) {-
1211 d->dropIndicatorRect = rect;-
1212 event->acceptProposedAction();-
1213 } else {-
1214 d->dropIndicatorRect = QRect();-
1215 }-
1216 break;-
1217 case OnViewport:-
1218 d->dropIndicatorRect = QRect();-
1219 if (d->isIndexDropEnabled(rootIndex())) {-
1220 event->acceptProposedAction();-
1221 }-
1222 break;-
1223 }-
1224 } else {-
1225 d->dropIndicatorRect = QRect();-
1226 d->dropIndicatorPosition = OnViewport;-
1227 if (d->isIndexDropEnabled(rootIndex())) {-
1228 event->acceptProposedAction();-
1229 }-
1230 }-
1231 d->viewport->update();-
1232 }-
1233-
1234 if (d->shouldAutoScroll(event->pos()))-
1235 startAutoScroll();-
1236}-
1237-
1238-
1239-
1240-
1241-
1242-
1243bool QAbstractItemViewPrivate::droppingOnItself(QDropEvent *event, const QModelIndex &index)-
1244{-
1245 QAbstractItemView * const q = q_func();-
1246 Qt::DropAction dropAction = event->dropAction();-
1247 if (q->dragDropMode() == QAbstractItemView::InternalMove)-
1248 dropAction = Qt::MoveAction;-
1249 if (event->source() == q-
1250 && event->possibleActions() & Qt::MoveAction-
1251 && dropAction == Qt::MoveAction) {-
1252 QModelIndexList selectedIndexes = q->selectedIndexes();-
1253 QModelIndex child = index;-
1254 while (child.isValid() && child != root) {-
1255 if (selectedIndexes.contains(child))-
1256 return true;-
1257 child = child.parent();-
1258 }-
1259 }-
1260 return false;-
1261}-
1262-
1263-
1264-
1265-
1266-
1267-
1268-
1269void QAbstractItemView::dragLeaveEvent(QDragLeaveEvent *)-
1270{-
1271 QAbstractItemViewPrivate * const d = d_func();-
1272 stopAutoScroll();-
1273 setState(NoState);-
1274 d->hover = QModelIndex();-
1275 d->viewport->update();-
1276}-
1277void QAbstractItemView::dropEvent(QDropEvent *event)-
1278{-
1279 QAbstractItemViewPrivate * const d = d_func();-
1280 if (dragDropMode() == InternalMove) {-
1281 if (event->source() != this || !(event->possibleActions() & Qt::MoveAction))-
1282 return;-
1283 }-
1284-
1285 QModelIndex index;-
1286 int col = -1;-
1287 int row = -1;-
1288 if (d->dropOn(event, &row, &col, &index)) {-
1289 const Qt::DropAction action = dragDropMode() == InternalMove ? Qt::MoveAction : event->dropAction();-
1290 if (d->model->dropMimeData(event->mimeData(), action, row, col, index)) {-
1291 if (action != event->dropAction()) {-
1292 event->setDropAction(action);-
1293 event->accept();-
1294 } else {-
1295 event->acceptProposedAction();-
1296 }-
1297 }-
1298 }-
1299 stopAutoScroll();-
1300 setState(NoState);-
1301 d->viewport->update();-
1302}-
1303bool QAbstractItemViewPrivate::dropOn(QDropEvent *event, int *dropRow, int *dropCol, QModelIndex *dropIndex)-
1304{-
1305 QAbstractItemView * const q = q_func();-
1306 if (event->isAccepted())-
1307 return false;-
1308-
1309 QModelIndex index;-
1310-
1311 if (viewport->rect().contains(event->pos())) {-
1312 index = q->indexAt(event->pos());-
1313 if (!index.isValid() || !q->visualRect(index).contains(event->pos()))-
1314 index = root;-
1315 }-
1316-
1317-
1318 if (model->supportedDropActions() & event->dropAction()) {-
1319 int row = -1;-
1320 int col = -1;-
1321 if (index != root) {-
1322 dropIndicatorPosition = position(event->pos(), q->visualRect(index), index);-
1323 switch (dropIndicatorPosition) {-
1324 case QAbstractItemView::AboveItem:-
1325 row = index.row();-
1326 col = index.column();-
1327 index = index.parent();-
1328 break;-
1329 case QAbstractItemView::BelowItem:-
1330 row = index.row() + 1;-
1331 col = index.column();-
1332 index = index.parent();-
1333 break;-
1334 case QAbstractItemView::OnItem:-
1335 case QAbstractItemView::OnViewport:-
1336 break;-
1337 }-
1338 } else {-
1339 dropIndicatorPosition = QAbstractItemView::OnViewport;-
1340 }-
1341 *dropIndex = index;-
1342 *dropRow = row;-
1343 *dropCol = col;-
1344 if (!droppingOnItself(event, index))-
1345 return true;-
1346 }-
1347 return false;-
1348}-
1349-
1350QAbstractItemView::DropIndicatorPosition-
1351QAbstractItemViewPrivate::position(const QPoint &pos, const QRect &rect, const QModelIndex &index) const-
1352{-
1353 QAbstractItemView::DropIndicatorPosition r = QAbstractItemView::OnViewport;-
1354 if (!overwrite) {-
1355 const int margin = 2;-
1356 if (pos.y() - rect.top() < margin) {-
1357 r = QAbstractItemView::AboveItem;-
1358 } else if (rect.bottom() - pos.y() < margin) {-
1359 r = QAbstractItemView::BelowItem;-
1360 } else if (rect.contains(pos, true)) {-
1361 r = QAbstractItemView::OnItem;-
1362 }-
1363 } else {-
1364 QRect touchingRect = rect;-
1365 touchingRect.adjust(-1, -1, 1, 1);-
1366 if (touchingRect.contains(pos, false)) {-
1367 r = QAbstractItemView::OnItem;-
1368 }-
1369 }-
1370-
1371 if (r == QAbstractItemView::OnItem && (!(model->flags(index) & Qt::ItemIsDropEnabled)))-
1372 r = pos.y() < rect.center().y() ? QAbstractItemView::AboveItem : QAbstractItemView::BelowItem;-
1373-
1374 return r;-
1375}-
1376void QAbstractItemView::focusInEvent(QFocusEvent *event)-
1377{-
1378 QAbstractItemViewPrivate * const d = d_func();-
1379 QAbstractScrollArea::focusInEvent(event);-
1380-
1381 const QItemSelectionModel* model = selectionModel();-
1382 const bool currentIndexValid = currentIndex().isValid();-
1383-
1384 if (model-
1385 && !d->currentIndexSet-
1386 && !currentIndexValid) {-
1387 bool autoScroll = d->autoScroll;-
1388 d->autoScroll = false;-
1389 QModelIndex index = moveCursor(MoveNext, Qt::NoModifier);-
1390 if (index.isValid() && d->isIndexEnabled(index) && event->reason() != Qt::MouseFocusReason)-
1391 selectionModel()->setCurrentIndex(index, QItemSelectionModel::NoUpdate);-
1392 d->autoScroll = autoScroll;-
1393 }-
1394-
1395 if (model && currentIndexValid) {-
1396 if (currentIndex().flags() != Qt::ItemIsEditable)-
1397 setAttribute(Qt::WA_InputMethodEnabled, false);-
1398 else-
1399 setAttribute(Qt::WA_InputMethodEnabled);-
1400 }-
1401-
1402 if (!currentIndexValid)-
1403 setAttribute(Qt::WA_InputMethodEnabled, false);-
1404-
1405 d->viewport->update();-
1406}-
1407-
1408-
1409-
1410-
1411-
1412-
1413-
1414void QAbstractItemView::focusOutEvent(QFocusEvent *event)-
1415{-
1416 QAbstractItemViewPrivate * const d = d_func();-
1417 QAbstractScrollArea::focusOutEvent(event);-
1418 d->viewport->update();-
1419}-
1420void QAbstractItemView::keyPressEvent(QKeyEvent *event)-
1421{-
1422 QAbstractItemViewPrivate * const d = d_func();-
1423 d->delayedAutoScroll.stop();-
1424 if (event == QKeySequence::Copy) {-
1425 QVariant variant;-
1426 if (d->model)-
1427 variant = d->model->data(currentIndex(), Qt::DisplayRole);-
1428 if (variant.type() == QVariant::String)-
1429 QApplication::clipboard()->setText(variant.toString());-
1430 event->accept();-
1431 }-
1432-
1433-
1434 QPersistentModelIndex newCurrent;-
1435 d->moveCursorUpdatedView = false;-
1436 switch (event->key()) {-
1437 case Qt::Key_Down:-
1438 newCurrent = moveCursor(MoveDown, event->modifiers());-
1439 break;-
1440 case Qt::Key_Up:-
1441 newCurrent = moveCursor(MoveUp, event->modifiers());-
1442 break;-
1443 case Qt::Key_Left:-
1444 newCurrent = moveCursor(MoveLeft, event->modifiers());-
1445 break;-
1446 case Qt::Key_Right:-
1447 newCurrent = moveCursor(MoveRight, event->modifiers());-
1448 break;-
1449 case Qt::Key_Home:-
1450 newCurrent = moveCursor(MoveHome, event->modifiers());-
1451 break;-
1452 case Qt::Key_End:-
1453 newCurrent = moveCursor(MoveEnd, event->modifiers());-
1454 break;-
1455 case Qt::Key_PageUp:-
1456 newCurrent = moveCursor(MovePageUp, event->modifiers());-
1457 break;-
1458 case Qt::Key_PageDown:-
1459 newCurrent = moveCursor(MovePageDown, event->modifiers());-
1460 break;-
1461 case Qt::Key_Tab:-
1462 if (d->tabKeyNavigation)-
1463 newCurrent = moveCursor(MoveNext, event->modifiers());-
1464 break;-
1465 case Qt::Key_Backtab:-
1466 if (d->tabKeyNavigation)-
1467 newCurrent = moveCursor(MovePrevious, event->modifiers());-
1468 break;-
1469 }-
1470-
1471 QPersistentModelIndex oldCurrent = currentIndex();-
1472 if (newCurrent != oldCurrent && newCurrent.isValid() && d->isIndexEnabled(newCurrent)) {-
1473 if (!hasFocus() && QApplication::focusWidget() == indexWidget(oldCurrent))-
1474 setFocus();-
1475 QItemSelectionModel::SelectionFlags command = selectionCommand(newCurrent, event);-
1476 if (command != QItemSelectionModel::NoUpdate-
1477 || style()->styleHint(QStyle::SH_ItemView_MovementWithoutUpdatingSelection, 0, this)) {-
1478-
1479 if (command & QItemSelectionModel::Current) {-
1480 d->selectionModel->setCurrentIndex(newCurrent, QItemSelectionModel::NoUpdate);-
1481 if (!d->currentSelectionStartIndex.isValid())-
1482 d->currentSelectionStartIndex = oldCurrent;-
1483 QRect rect(visualRect(d->currentSelectionStartIndex).center(), visualRect(newCurrent).center());-
1484 setSelection(rect, command);-
1485 } else {-
1486 d->selectionModel->setCurrentIndex(newCurrent, command);-
1487 d->currentSelectionStartIndex = newCurrent;-
1488 if (newCurrent.isValid()) {-
1489-
1490 QRect rect(visualRect(newCurrent).center(), QSize(1, 1));-
1491 setSelection(rect, command);-
1492 }-
1493 }-
1494 event->accept();-
1495 return;-
1496 }-
1497 }-
1498-
1499 switch (event->key()) {-
1500-
1501 case Qt::Key_Down:-
1502 case Qt::Key_Up:-
1503-
1504-
1505-
1506-
1507-
1508-
1509 case Qt::Key_Left:-
1510 case Qt::Key_Right:-
1511 case Qt::Key_Home:-
1512 case Qt::Key_End:-
1513 case Qt::Key_PageUp:-
1514 case Qt::Key_PageDown:-
1515 case Qt::Key_Escape:-
1516 case Qt::Key_Shift:-
1517 case Qt::Key_Control:-
1518 case Qt::Key_Delete:-
1519 case Qt::Key_Backspace:-
1520 event->ignore();-
1521 break;-
1522 case Qt::Key_Space:-
1523 case Qt::Key_Select:-
1524 if (!edit(currentIndex(), AnyKeyPressed, event) && d->selectionModel)-
1525 d->selectionModel->select(currentIndex(), selectionCommand(currentIndex(), event));-
1526 break;-
1527 case Qt::Key_F2:-
1528 if (!edit(currentIndex(), EditKeyPressed, event))-
1529 event->ignore();-
1530 break;-
1531 case Qt::Key_Enter:-
1532 case Qt::Key_Return:-
1533-
1534-
1535-
1536 if (state() != EditingState || hasFocus()) {-
1537 if (currentIndex().isValid())-
1538 activated(currentIndex());-
1539 event->ignore();-
1540 }-
1541 break;-
1542-
1543 default: {-
1544 if (event == QKeySequence::SelectAll && selectionMode() != NoSelection) {-
1545 selectAll();-
1546 break;-
1547 }-
1548-
1549-
1550-
1551-
1552-
1553-
1554 bool modified = (event->modifiers() & (Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier));-
1555 if (!event->text().isEmpty() && !modified && !edit(currentIndex(), AnyKeyPressed, event)) {-
1556 keyboardSearch(event->text());-
1557 event->accept();-
1558 } else {-
1559 event->ignore();-
1560 }-
1561 break; }-
1562 }-
1563 if (d->moveCursorUpdatedView)-
1564 event->accept();-
1565}-
1566-
1567-
1568-
1569-
1570-
1571-
1572-
1573void QAbstractItemView::resizeEvent(QResizeEvent *event)-
1574{-
1575 QAbstractScrollArea::resizeEvent(event);-
1576 updateGeometries();-
1577}-
1578-
1579-
1580-
1581-
1582-
1583-
1584-
1585void QAbstractItemView::timerEvent(QTimerEvent *event)-
1586{-
1587 QAbstractItemViewPrivate * const d = d_func();-
1588 if (event->timerId() == d->fetchMoreTimer.timerId())-
1589 d->fetchMore();-
1590 else if (event->timerId() == d->delayedReset.timerId())-
1591 reset();-
1592 else if (event->timerId() == d->autoScrollTimer.timerId())-
1593 doAutoScroll();-
1594 else if (event->timerId() == d->updateTimer.timerId())-
1595 d->updateDirtyRegion();-
1596 else if (event->timerId() == d->delayedEditing.timerId()) {-
1597 d->delayedEditing.stop();-
1598 edit(currentIndex());-
1599 } else if (event->timerId() == d->delayedLayout.timerId()) {-
1600 d->delayedLayout.stop();-
1601 if (isVisible()) {-
1602 d->interruptDelayedItemsLayout();-
1603 doItemsLayout();-
1604 const QModelIndex current = currentIndex();-
1605 if (current.isValid() && d->state == QAbstractItemView::EditingState)-
1606 scrollTo(current);-
1607 }-
1608 } else if (event->timerId() == d->delayedAutoScroll.timerId()) {-
1609 d->delayedAutoScroll.stop();-
1610-
1611-
1612 if (d->pressedIndex.isValid() && d->pressedIndex == currentIndex())-
1613 scrollTo(d->pressedIndex);-
1614 }-
1615}-
1616-
1617-
1618-
1619-
1620void QAbstractItemView::inputMethodEvent(QInputMethodEvent *event)-
1621{-
1622 if (event->commitString().isEmpty() && event->preeditString().isEmpty()) {-
1623 event->ignore();-
1624 return;-
1625 }-
1626 if (!edit(currentIndex(), AnyKeyPressed, event)) {-
1627 if (!event->commitString().isEmpty())-
1628 keyboardSearch(event->commitString());-
1629 event->ignore();-
1630 }-
1631}-
1632QAbstractItemView::DropIndicatorPosition QAbstractItemView::dropIndicatorPosition() const-
1633{-
1634 const QAbstractItemViewPrivate * const d = d_func();-
1635 return d->dropIndicatorPosition;-
1636}-
1637QModelIndexList QAbstractItemView::selectedIndexes() const-
1638{-
1639 const QAbstractItemViewPrivate * const d = d_func();-
1640 QModelIndexList indexes;-
1641 if (d->selectionModel
d->selectionModelDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
1642 indexes = d->selectionModel->selectedIndexes();-
1643 QList<auto isHidden = [this](const QModelIndex >::iterator it&idx) {-
1644 return
never executed: return isIndexHidden(idx);
isIndexHidden(idx);
never executed: return isIndexHidden(idx);
0
1645 };-
1646 const auto end = indexes.beginend();-
1647 while (it !=indexes.end())-
iferase(isIndexHidden(*it))
it =std::remove_if(indexes.erase(itbegin(), end, isHidden), end);
1648 else0
++it;}
never executed: end of block
1649 return
never executed: return indexes;
indexes;
never executed: return indexes;
0
1650}-
1651bool QAbstractItemView::edit(const QModelIndex &index, EditTrigger trigger, QEvent *event)-
1652{-
1653 QAbstractItemViewPrivate * const d = d_func();-
1654-
1655 if (!d->isIndexValid(index))-
1656 return false;-
1657-
1658 if (QWidget *w = (d->persistent.isEmpty() ? static_cast<QWidget*>(0) : d->editorForIndex(index).widget.data())) {-
1659 if (w->focusPolicy() == Qt::NoFocus)-
1660 return false;-
1661 w->setFocus();-
1662 return true;-
1663 }-
1664-
1665 if (trigger == DoubleClicked) {-
1666 d->delayedEditing.stop();-
1667 d->delayedAutoScroll.stop();-
1668 } else if (trigger == CurrentChanged) {-
1669 d->delayedEditing.stop();-
1670 }-
1671-
1672 if (d->sendDelegateEvent(index, event)) {-
1673 update(index);-
1674 return true;-
1675 }-
1676-
1677-
1678 EditTriggers lastTrigger = d->lastTrigger;-
1679 d->lastTrigger = trigger;-
1680-
1681 if (!d->shouldEdit(trigger, d->model->buddy(index)))-
1682 return false;-
1683-
1684 if (d->delayedEditing.isActive())-
1685 return false;-
1686-
1687-
1688-
1689 if (lastTrigger == DoubleClicked && trigger == SelectedClicked)-
1690 return false;-
1691-
1692-
1693 if (trigger == SelectedClicked)-
1694 d->delayedEditing.start(QApplication::doubleClickInterval(), this);-
1695 else-
1696 d->openEditor(index, d->shouldForwardEvent(trigger, event) ? event : 0);-
1697-
1698 return true;-
1699}-
1700-
1701-
1702-
1703-
1704-
1705void QAbstractItemView::updateEditorData()-
1706{-
1707 QAbstractItemViewPrivate * const d = d_func();-
1708 d->updateEditorData(QModelIndex(), QModelIndex());-
1709}-
1710-
1711-
1712-
1713-
1714-
1715void QAbstractItemView::updateEditorGeometries()-
1716{-
1717 QAbstractItemViewPrivate * const d = d_func();-
1718 if(d->editorIndexHash.isEmpty())-
1719 return;-
1720 if (d->delayedPendingLayout) {-
1721-
1722 d->executePostedLayout();-
1723 return;-
1724 }-
1725 QStyleOptionViewItem option = d->viewOptionsV1();-
1726 QEditorIndexHash::iterator it = d->editorIndexHash.begin();-
1727 QWidgetList editorsToRelease;-
1728 QWidgetList editorsToHide;-
1729 while (it != d->editorIndexHash.end()) {-
1730 QModelIndex index = it.value();-
1731 QWidget *editor = it.key();-
1732 if (index.isValid() && editor) {-
1733 option.rect = visualRect(index);-
1734 if (option.rect.isValid()) {-
1735 editor->show();-
1736 QAbstractItemDelegate *delegate = d->delegateForIndex(index);-
1737 if (delegate)-
1738 delegate->updateEditorGeometry(editor, option, index);-
1739 } else {-
1740 editorsToHide << editor;-
1741 }-
1742 ++it;-
1743 } else {-
1744 d->indexEditorHash.remove(it.value());-
1745 it = d->editorIndexHash.erase(it);-
1746 editorsToRelease << editor;-
1747 }-
1748 }-
1749-
1750-
1751-
1752 for (int i = 0; i < editorsToHide.count(); ++i) {-
1753 editorsToHide.at(i)->hide();-
1754 }-
1755 for (int i = 0; i < editorsToRelease.count(); ++i) {-
1756 d->releaseEditor(editorsToRelease.at(i));-
1757 }-
1758}-
1759-
1760-
1761-
1762-
1763-
1764-
1765void QAbstractItemView::updateGeometries()-
1766{-
1767 QAbstractItemViewPrivate * const d = d_func();-
1768 updateEditorGeometries();-
1769 d->fetchMoreTimer.start(0, this);-
1770 d->updateGeometry();-
1771}-
1772-
1773-
1774-
1775-
1776void QAbstractItemView::verticalScrollbarValueChanged(int value)-
1777{-
1778 QAbstractItemViewPrivate * const d = d_func();-
1779 if (verticalScrollBar()->maximum() == value && d->model->canFetchMore(d->root))-
1780 d->model->fetchMore(d->root);-
1781 QPoint posInVp = viewport()->mapFromGlobal(QCursor::pos());-
1782 if (viewport()->rect().contains(posInVp))-
1783 d->checkMouseMove(posInVp);-
1784}-
1785-
1786-
1787-
1788-
1789void QAbstractItemView::horizontalScrollbarValueChanged(int value)-
1790{-
1791 QAbstractItemViewPrivate * const d = d_func();-
1792 if (horizontalScrollBar()->maximum() == value && d->model->canFetchMore(d->root))-
1793 d->model->fetchMore(d->root);-
1794 QPoint posInVp = viewport()->mapFromGlobal(QCursor::pos());-
1795 if (viewport()->rect().contains(posInVp))-
1796 d->checkMouseMove(posInVp);-
1797}-
1798-
1799-
1800-
1801-
1802void QAbstractItemView::verticalScrollbarAction(int)-
1803{-
1804-
1805}-
1806-
1807-
1808-
1809-
1810void QAbstractItemView::horizontalScrollbarAction(int)-
1811{-
1812-
1813}-
1814void QAbstractItemView::closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint)-
1815{-
1816 QAbstractItemViewPrivate * const d = d_func();-
1817-
1818-
1819 if (editor) {-
1820 bool isPersistent = d->persistent.contains(editor);-
1821 bool hadFocus = editor->hasFocus();-
1822 QModelIndex index = d->indexForEditor(editor);-
1823 if (!index.isValid())-
1824 return;-
1825-
1826 if (!isPersistent) {-
1827 setState(NoState);-
1828 QModelIndex index = d->indexForEditor(editor);-
1829 editor->removeEventFilter(d->delegateForIndex(index));-
1830 d->removeEditor(editor);-
1831 }-
1832 if (hadFocus) {-
1833 if (focusPolicy() != Qt::NoFocus)-
1834 setFocus();-
1835 else-
1836 editor->clearFocus();-
1837 } else {-
1838 d->checkPersistentEditorFocus();-
1839 }-
1840-
1841 QPointer<QWidget> ed = editor;-
1842 QApplication::sendPostedEvents(editor, 0);-
1843 editor = ed;-
1844-
1845 if (!isPersistent && editor)-
1846 d->releaseEditor(editor, index);-
1847 }-
1848-
1849-
1850 QItemSelectionModel::SelectionFlags flags = QItemSelectionModel::NoUpdate;-
1851 if (d->selectionMode != NoSelection)-
1852 flags = QItemSelectionModel::ClearAndSelect | d->selectionBehaviorFlags();-
1853 switch (hint) {-
1854 case QAbstractItemDelegate::EditNextItem: {-
1855 QModelIndex index = moveCursor(MoveNext, Qt::NoModifier);-
1856 if (index.isValid()) {-
1857 QPersistentModelIndex persistent(index);-
1858 d->selectionModel->setCurrentIndex(persistent, flags);-
1859-
1860 if (index.flags() & Qt::ItemIsEditable-
1861 && (!(editTriggers() & QAbstractItemView::CurrentChanged)))-
1862 edit(persistent);-
1863 } break; }-
1864 case QAbstractItemDelegate::EditPreviousItem: {-
1865 QModelIndex index = moveCursor(MovePrevious, Qt::NoModifier);-
1866 if (index.isValid()) {-
1867 QPersistentModelIndex persistent(index);-
1868 d->selectionModel->setCurrentIndex(persistent, flags);-
1869-
1870 if (index.flags() & Qt::ItemIsEditable-
1871 && (!(editTriggers() & QAbstractItemView::CurrentChanged)))-
1872 edit(persistent);-
1873 } break; }-
1874 case QAbstractItemDelegate::SubmitModelCache:-
1875 d->model->submit();-
1876 break;-
1877 case QAbstractItemDelegate::RevertModelCache:-
1878 d->model->revert();-
1879 break;-
1880 default:-
1881 break;-
1882 }-
1883}-
1884-
1885-
1886-
1887-
1888-
1889-
1890void QAbstractItemView::commitData(QWidget *editor)-
1891{-
1892 QAbstractItemViewPrivate * const d = d_func();-
1893 if (!editor || !d->itemDelegate || d->currentlyCommittingEditor)-
1894 return;-
1895 QModelIndex index = d->indexForEditor(editor);-
1896 if (!index.isValid())-
1897 return;-
1898 d->currentlyCommittingEditor = editor;-
1899 QAbstractItemDelegate *delegate = d->delegateForIndex(index);-
1900 editor->removeEventFilter(delegate);-
1901 delegate->setModelData(editor, d->model, index);-
1902 editor->installEventFilter(delegate);-
1903 d->currentlyCommittingEditor = 0;-
1904}-
1905-
1906-
1907-
1908-
1909-
1910-
1911void QAbstractItemView::editorDestroyed(QObject *editor)-
1912{-
1913 QAbstractItemViewPrivate * const d = d_func();-
1914 QWidget *w = qobject_cast<QWidget*>(editor);-
1915 d->removeEditor(w);-
1916 d->persistent.remove(w);-
1917 if (state() == EditingState)-
1918 setState(NoState);-
1919}-
1920void QAbstractItemView::setHorizontalStepsPerItem(int steps)-
1921{-
1922 (void)steps;-
1923-
1924}-
1925-
1926-
1927-
1928-
1929-
1930-
1931-
1932int QAbstractItemView::horizontalStepsPerItem() const-
1933{-
1934 return 1;-
1935}-
1936void QAbstractItemView::setVerticalStepsPerItem(int steps)-
1937{-
1938 (void)steps;-
1939-
1940}-
1941-
1942-
1943-
1944-
1945-
1946-
1947-
1948int QAbstractItemView::verticalStepsPerItem() const-
1949{-
1950 return 1;-
1951}-
1952void QAbstractItemView::keyboardSearch(const QString &search)-
1953{-
1954 QAbstractItemViewPrivate * const d = d_func();-
1955 if (!d->model->rowCount(d->root) || !d->model->columnCount(d->root))-
1956 return;-
1957-
1958 QModelIndex start = currentIndex().isValid() ? currentIndex()-
1959 : d->model->index(0, 0, d->root);-
1960 bool skipRow = false;-
1961 bool keyboardTimeWasValid = d->keyboardInputTime.isValid();-
1962 qint64 keyboardInputTimeElapsed;-
1963 if (keyboardTimeWasValid)-
1964 keyboardInputTimeElapsed = d->keyboardInputTime.restart();-
1965 else-
1966 d->keyboardInputTime.start();-
1967 if (search.isEmpty() || !keyboardTimeWasValid-
1968 || keyboardInputTimeElapsed > QApplication::keyboardInputInterval()) {-
1969 d->keyboardInput = search;-
1970 skipRow = currentIndex().isValid();-
1971 } else {-
1972 d->keyboardInput += search;-
1973 }-
1974-
1975-
1976 bool sameKey = false;-
1977 if (d->keyboardInput.length() > 1) {-
1978 int c = d->keyboardInput.count(d->keyboardInput.at(d->keyboardInput.length() - 1));-
1979 sameKey = (c == d->keyboardInput.length());-
1980 if (sameKey)-
1981 skipRow = true;-
1982 }-
1983-
1984-
1985 if (skipRow) {-
1986 QModelIndex parent = start.parent();-
1987 int newRow = (start.row() < d->model->rowCount(parent) - 1) ? start.row() + 1 : 0;-
1988 start = d->model->index(newRow, start.column(), parent);-
1989 }-
1990-
1991-
1992 QModelIndex current = start;-
1993 QModelIndexList match;-
1994 QModelIndex firstMatch;-
1995 QModelIndex startMatch;-
1996 QModelIndexList previous;-
1997 do {-
1998 match = d->model->match(current, Qt::DisplayRole, d->keyboardInput);-
1999 if (match == previous)-
2000 break;-
2001 firstMatch = match.value(0);-
2002 previous = match;-
2003 if (firstMatch.isValid()) {-
2004 if (d->isIndexEnabled(firstMatch)) {-
2005 setCurrentIndex(firstMatch);-
2006 break;-
2007 }-
2008 int row = firstMatch.row() + 1;-
2009 if (row >= d->model->rowCount(firstMatch.parent()))-
2010 row = 0;-
2011 current = firstMatch.sibling(row, firstMatch.column());-
2012-
2013-
2014 if (!startMatch.isValid())-
2015 startMatch = firstMatch;-
2016 else if (startMatch == firstMatch)-
2017 break;-
2018 }-
2019 } while (current != start && firstMatch.isValid());-
2020}-
2021-
2022-
2023-
2024-
2025-
2026-
2027-
2028QSize QAbstractItemView::sizeHintForIndex(const QModelIndex &index) const-
2029{-
2030 const QAbstractItemViewPrivate * const d = d_func();-
2031 if (!d->isIndexValid(index) || !d->itemDelegate)-
2032 return QSize();-
2033 return d->delegateForIndex(index)->sizeHint(d->viewOptionsV1(), index);-
2034}-
2035int QAbstractItemView::sizeHintForRow(int row) const-
2036{-
2037 const QAbstractItemViewPrivate * const d = d_func();-
2038-
2039 if (row < 0 || row >= d->model->rowCount(d->root))-
2040 return -1;-
2041-
2042 ensurePolished();-
2043-
2044 QStyleOptionViewItem option = d->viewOptionsV1();-
2045 int height = 0;-
2046 int colCount = d->model->columnCount(d->root);-
2047 for (int c = 0; c < colCount; ++c) {-
2048 const QModelIndex index = d->model->index(row, c, d->root);-
2049 if (QWidget *editor = d->editorForIndex(index).widget.data())-
2050 height = qMax(height, editor->height());-
2051 if (const QAbstractItemDelegate *delegate = d->delegateForIndex(index))-
2052 height = qMax(height, delegate->sizeHint(option, index).height());-
2053 }-
2054 return height;-
2055}-
2056int QAbstractItemView::sizeHintForColumn(int column) const-
2057{-
2058 const QAbstractItemViewPrivate * const d = d_func();-
2059-
2060 if (column < 0 || column >= d->model->columnCount(d->root))-
2061 return -1;-
2062-
2063 ensurePolished();-
2064-
2065 QStyleOptionViewItem option = d->viewOptionsV1();-
2066 int width = 0;-
2067 int rows = d->model->rowCount(d->root);-
2068 for (int r = 0; r < rows; ++r) {-
2069 const QModelIndex index = d->model->index(r, column, d->root);-
2070 if (QWidget *editor = d->editorForIndex(index).widget.data())-
2071 width = qMax(width, editor->sizeHint().width());-
2072 if (const QAbstractItemDelegate *delegate = d->delegateForIndex(index))-
2073 width = qMax(width, delegate->sizeHint(option, index).width());-
2074 }-
2075 return width;-
2076}-
2077-
2078-
2079-
2080-
2081-
2082-
2083-
2084void QAbstractItemView::openPersistentEditor(const QModelIndex &index)-
2085{-
2086 QAbstractItemViewPrivate * const d = d_func();-
2087 QStyleOptionViewItem options = d->viewOptionsV1();-
2088 options.rect = visualRect(index);-
2089 options.state |= (index == currentIndex() ? QStyle::State_HasFocus : QStyle::State_None);-
2090-
2091 QWidget *editor = d->editor(index, options);-
2092 if (editor) {-
2093 editor->show();-
2094 d->persistent.insert(editor);-
2095 }-
2096}-
2097-
2098-
2099-
2100-
2101-
2102-
2103void QAbstractItemView::closePersistentEditor(const QModelIndex &index)-
2104{-
2105 QAbstractItemViewPrivate * const d = d_func();-
2106 if (QWidget *editor = d->editorForIndex(index).widget.data()) {-
2107 if (index == selectionModel()->currentIndex())-
2108 closeEditor(editor, QAbstractItemDelegate::RevertModelCache);-
2109 d->persistent.remove(editor);-
2110 d->removeEditor(editor);-
2111 d->releaseEditor(editor, index);-
2112 }-
2113}-
2114void QAbstractItemView::setIndexWidget(const QModelIndex &index, QWidget *widget)-
2115{-
2116 QAbstractItemViewPrivate * const d = d_func();-
2117 if (!d->isIndexValid(index))-
2118 return;-
2119 if (indexWidget(index) == widget)-
2120 return;-
2121 if (QWidget *oldWidget = indexWidget(index)) {-
2122 d->persistent.remove(oldWidget);-
2123 d->removeEditor(oldWidget);-
2124 oldWidget->deleteLater();-
2125 }-
2126 if (widget) {-
2127 widget->setParent(viewport());-
2128 d->persistent.insert(widget);-
2129 d->addEditor(index, widget, true);-
2130 widget->show();-
2131 dataChanged(index, index);-
2132 if (!d->delayedPendingLayout)-
2133 widget->setGeometry(visualRect(index));-
2134 }-
2135}-
2136-
2137-
2138-
2139-
2140-
2141-
2142QWidget* QAbstractItemView::indexWidget(const QModelIndex &index) const-
2143{-
2144 const QAbstractItemViewPrivate * const d = d_func();-
2145 if (d->isIndexValid(index))-
2146 if (QWidget *editor = d->editorForIndex(index).widget.data())-
2147 return editor;-
2148-
2149 return 0;-
2150}-
2151void QAbstractItemView::scrollToTop()-
2152{-
2153 verticalScrollBar()->setValue(verticalScrollBar()->minimum());-
2154}-
2155void QAbstractItemView::scrollToBottom()-
2156{-
2157 QAbstractItemViewPrivate * const d = d_func();-
2158 if (d->delayedPendingLayout) {-
2159 d->executePostedLayout();-
2160 updateGeometries();-
2161 }-
2162 verticalScrollBar()->setValue(verticalScrollBar()->maximum());-
2163}-
2164-
2165-
2166-
2167-
2168-
2169-
2170-
2171void QAbstractItemView::update(const QModelIndex &index)-
2172{-
2173 QAbstractItemViewPrivate * const d = d_func();-
2174 if (index.isValid()) {-
2175 const QRect rect = visualRect(index);-
2176-
2177-
2178-
2179 if (d->viewport->rect().intersects(rect))-
2180 d->viewport->update(rect);-
2181 }-
2182}-
2183void QAbstractItemView::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles)-
2184{-
2185 (void)roles;;-
2186-
2187 QAbstractItemViewPrivate * const d = d_func();-
2188 if (topLeft == bottomRight && topLeft.isValid()) {-
2189 const QEditorInfo &editorInfo = d->editorForIndex(topLeft);-
2190-
2191 if (!editorInfo.isStatic && editorInfo.widget) {-
2192 QAbstractItemDelegate *delegate = d->delegateForIndex(topLeft);-
2193 if (delegate) {-
2194 delegate->setEditorData(editorInfo.widget.data(), topLeft);-
2195 }-
2196 }-
2197 if (isVisible() && !d->delayedPendingLayout) {-
2198-
2199 update(topLeft);-
2200 }-
2201 } else {-
2202 d->updateEditorData(topLeft, bottomRight);-
2203 if (isVisible() && !d->delayedPendingLayout)-
2204 d->viewport->update();-
2205 }-
2206-
2207-
2208 if (QAccessible::isActive()) {-
2209 QAccessibleTableModelChangeEvent accessibleEvent(this, QAccessibleTableModelChangeEvent::DataChanged);-
2210 accessibleEvent.setFirstRow(topLeft.row());-
2211 accessibleEvent.setFirstColumn(topLeft.column());-
2212 accessibleEvent.setLastRow(bottomRight.row());-
2213 accessibleEvent.setLastColumn(bottomRight.column());-
2214 QAccessible::updateAccessibility(&accessibleEvent);-
2215 }-
2216-
2217 d->updateGeometry();-
2218}-
2219void QAbstractItemView::rowsInserted(const QModelIndex &, int, int)-
2220{-
2221 if (!isVisible())-
2222 d_func()->fetchMoreTimer.start(0, this);-
2223 else-
2224 updateEditorGeometries();-
2225}-
2226-
2227-
2228-
2229-
2230-
2231-
2232-
2233void QAbstractItemView::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end)-
2234{-
2235 QAbstractItemViewPrivate * const d = d_func();-
2236-
2237 setState(CollapsingState);-
2238-
2239-
2240 QModelIndex current = currentIndex();-
2241 if (d->selectionMode == SingleSelection-
2242 && current.isValid()-
2243 && current.row() >= start-
2244 && current.row() <= end-
2245 && current.parent() == parent) {-
2246 int totalToRemove = end - start + 1;-
2247 if (d->model->rowCount(parent) <= totalToRemove) {-
2248 QModelIndex index = parent;-
2249 while (index != d->root && !d->isIndexEnabled(index))-
2250 index = index.parent();-
2251 if (index != d->root)-
2252 setCurrentIndex(index);-
2253 } else {-
2254 int row = end + 1;-
2255 QModelIndex next;-
2256 do {-
2257 next = d->model->index(row++, current.column(), current.parent());-
2258 } while (next.isValid() && (isIndexHidden(next) || !d->isIndexEnabled(next)));-
2259 if (row > d->model->rowCount(parent)) {-
2260 row = start - 1;-
2261 do {-
2262 next = d->model->index(row--, current.column(), current.parent());-
2263 } while (next.isValid() && (isIndexHidden(next) || !d->isIndexEnabled(next)));-
2264 }-
2265 setCurrentIndex(next);-
2266 }-
2267 }-
2268-
2269-
2270 QEditorIndexHash::iterator i = d->editorIndexHash.begin();-
2271 while (i != d->editorIndexHash.end()) {-
2272 const QModelIndex index = i.value();-
2273 if (index.row() >= start && index.row() <= end && d->model->parent(index) == parent) {-
2274 QWidget *editor = i.key();-
2275 QEditorInfo info = d->indexEditorHash.take(index);-
2276 i = d->editorIndexHash.erase(i);-
2277 if (info.widget)-
2278 d->releaseEditor(editor, index);-
2279 } else {-
2280 ++i;-
2281 }-
2282 }-
2283}-
2284void QAbstractItemViewPrivate::_q_rowsRemoved(const QModelIndex &index, int start, int end)-
2285{-
2286 (void)index;-
2287 (void)start;-
2288 (void)end;-
2289-
2290 QAbstractItemView * const q = q_func();-
2291 if (q->isVisible())-
2292 q->updateEditorGeometries();-
2293 q->setState(QAbstractItemView::NoState);-
2294-
2295 if (QAccessible::isActive()) {-
2296 QAccessibleTableModelChangeEvent accessibleEvent(q, QAccessibleTableModelChangeEvent::RowsRemoved);-
2297 accessibleEvent.setFirstRow(start);-
2298 accessibleEvent.setLastRow(end);-
2299 QAccessible::updateAccessibility(&accessibleEvent);-
2300 }-
2301-
2302 updateGeometry();-
2303}-
2304void QAbstractItemViewPrivate::_q_columnsAboutToBeRemoved(const QModelIndex &parent, int start, int end)-
2305{-
2306 QAbstractItemView * const q = q_func();-
2307-
2308 q->setState(QAbstractItemView::CollapsingState);-
2309-
2310-
2311 QModelIndex current = q->currentIndex();-
2312 if (current.isValid()-
2313 && selectionMode == QAbstractItemView::SingleSelection-
2314 && current.column() >= start-
2315 && current.column() <= end) {-
2316 int totalToRemove = end - start + 1;-
2317 if (model->columnCount(parent) < totalToRemove) {-
2318 QModelIndex index = parent;-
2319 while (index.isValid() && !isIndexEnabled(index))-
2320 index = index.parent();-
2321 if (index.isValid())-
2322 q->setCurrentIndex(index);-
2323 } else {-
2324 int column = end;-
2325 QModelIndex next;-
2326 do {-
2327 next = model->index(current.row(), column++, current.parent());-
2328 } while (next.isValid() && (q->isIndexHidden(next) || !isIndexEnabled(next)));-
2329 q->setCurrentIndex(next);-
2330 }-
2331 }-
2332-
2333-
2334 QEditorIndexHash::iterator it = editorIndexHash.begin();-
2335 while (it != editorIndexHash.end()) {-
2336 QModelIndex index = it.value();-
2337 if (index.column() <= start && index.column() >= end && model->parent(index) == parent) {-
2338 QWidget *editor = it.key();-
2339 QEditorInfo info = indexEditorHash.take(it.value());-
2340 it = editorIndexHash.erase(it);-
2341 if (info.widget)-
2342 releaseEditor(editor, index);-
2343 } else {-
2344 ++it;-
2345 }-
2346 }-
2347-
2348}-
2349void QAbstractItemViewPrivate::_q_columnsRemoved(const QModelIndex &index, int start, int end)-
2350{-
2351 (void)index;-
2352 (void)start;-
2353 (void)end;-
2354-
2355 QAbstractItemView * const q = q_func();-
2356 if (q->isVisible())-
2357 q->updateEditorGeometries();-
2358 q->setState(QAbstractItemView::NoState);-
2359-
2360 if (QAccessible::isActive()) {-
2361 QAccessibleTableModelChangeEvent accessibleEvent(q, QAccessibleTableModelChangeEvent::ColumnsRemoved);-
2362 accessibleEvent.setFirstColumn(start);-
2363 accessibleEvent.setLastColumn(end);-
2364 QAccessible::updateAccessibility(&accessibleEvent);-
2365 }-
2366-
2367 updateGeometry();-
2368}-
2369-
2370-
2371-
2372-
2373-
2374-
2375-
2376void QAbstractItemViewPrivate::_q_rowsInserted(const QModelIndex &index, int start, int end)-
2377{-
2378 (void)index;-
2379 (void)start;-
2380 (void)end;-
2381-
2382-
2383 QAbstractItemView * const q = q_func();-
2384 if (QAccessible::isActive()) {-
2385 QAccessibleTableModelChangeEvent accessibleEvent(q, QAccessibleTableModelChangeEvent::RowsInserted);-
2386 accessibleEvent.setFirstRow(start);-
2387 accessibleEvent.setLastRow(end);-
2388 QAccessible::updateAccessibility(&accessibleEvent);-
2389 }-
2390-
2391 updateGeometry();-
2392}-
2393-
2394-
2395-
2396-
2397-
2398-
2399void QAbstractItemViewPrivate::_q_columnsInserted(const QModelIndex &index, int start, int end)-
2400{-
2401 (void)index;-
2402 (void)start;-
2403 (void)end;-
2404-
2405 QAbstractItemView * const q = q_func();-
2406 if (q->isVisible())-
2407 q->updateEditorGeometries();-
2408-
2409 if (QAccessible::isActive()) {-
2410 QAccessibleTableModelChangeEvent accessibleEvent(q, QAccessibleTableModelChangeEvent::ColumnsInserted);-
2411 accessibleEvent.setFirstColumn(start);-
2412 accessibleEvent.setLastColumn(end);-
2413 QAccessible::updateAccessibility(&accessibleEvent);-
2414 }-
2415-
2416 updateGeometry();-
2417}-
2418-
2419-
2420-
2421-
2422void QAbstractItemViewPrivate::_q_modelDestroyed()-
2423{-
2424 model = QAbstractItemModelPrivate::staticEmptyModel();-
2425 doDelayedReset();-
2426}-
2427-
2428-
2429-
2430-
2431-
2432-
2433void QAbstractItemViewPrivate::_q_layoutChanged()-
2434{-
2435 doDelayedItemsLayout();-
2436-
2437 QAbstractItemView * const q = q_func();-
2438 if (QAccessible::isActive()) {-
2439 QAccessibleTableModelChangeEvent accessibleEvent(q, QAccessibleTableModelChangeEvent::ModelReset);-
2440 QAccessible::updateAccessibility(&accessibleEvent);-
2441 }-
2442-
2443}-
2444-
2445void QAbstractItemViewPrivate::_q_rowsMoved(const QModelIndex &, int, int, const QModelIndex &, int)-
2446{-
2447 _q_layoutChanged();-
2448}-
2449-
2450void QAbstractItemViewPrivate::_q_columnsMoved(const QModelIndex &, int, int, const QModelIndex &, int)-
2451{-
2452 _q_layoutChanged();-
2453}-
2454void QAbstractItemView::selectionChanged(const QItemSelection &selected,-
2455 const QItemSelection &deselected)-
2456{-
2457 QAbstractItemViewPrivate * const d = d_func();-
2458 if (isVisible() && updatesEnabled()) {-
2459 d->viewport->update(visualRegionForSelection(deselected) | visualRegionForSelection(selected));-
2460 }-
2461}-
2462void QAbstractItemView::currentChanged(const QModelIndex &current, const QModelIndex &previous)-
2463{-
2464 QAbstractItemViewPrivate * const d = d_func();-
2465 ((!(d->model)) ? qt_assert("d->model",__FILE__,35733623) : qt_noop());-
2466-
2467 if (previous.isValid()) {-
2468 QModelIndex buddy = d->model->buddy(previous);-
2469 QWidget *editor = d->editorForIndex(buddy).widget.data();-
2470 if (editor && !d->persistent.contains(editor)) {-
2471 commitData(editor);-
2472 if (current.row() != previous.row())-
2473 closeEditor(editor, QAbstractItemDelegate::SubmitModelCache);-
2474 else-
2475 closeEditor(editor, QAbstractItemDelegate::NoHint);-
2476 }-
2477 if (isVisible()) {-
2478 update(previous);-
2479 }-
2480 }-
2481-
2482 if (current.isValid() && !d->autoScrollTimer.isActive()) {-
2483 if (isVisible()) {-
2484 if (d->autoScroll)-
2485 scrollTo(current);-
2486 update(current);-
2487 edit(current, CurrentChanged, 0);-
2488 if (current.row() == (d->model->rowCount(d->root) - 1))-
2489 d->fetchMore();-
2490 } else {-
2491 d->shouldScrollToCurrentOnShow = d->autoScroll;-
2492 }-
2493 }-
2494}-
2495-
2496-
2497-
2498-
2499-
2500void QAbstractItemView::startDrag(Qt::DropActions supportedActions)-
2501{-
2502 QAbstractItemViewPrivate * const d = d_func();-
2503 QModelIndexList indexes = d->selectedDraggableIndexes();-
2504 if (indexes.count() > 0) {-
2505 QMimeData *data = d->model->mimeData(indexes);-
2506 if (!data)-
2507 return;-
2508 QRect rect;-
2509 QPixmap pixmap = d->renderToPixmap(indexes, &rect);-
2510 rect.adjust(horizontalOffset(), verticalOffset(), 0, 0);-
2511 QDrag *drag = new QDrag(this);-
2512 drag->setPixmap(pixmap);-
2513 drag->setMimeData(data);-
2514 drag->setHotSpot(d->pressedPosition - rect.topLeft());-
2515 Qt::DropAction defaultDropAction = Qt::IgnoreAction;-
2516 if (d->defaultDropAction != Qt::IgnoreAction && (supportedActions & d->defaultDropAction))-
2517 defaultDropAction = d->defaultDropAction;-
2518 else if (supportedActions & Qt::CopyAction && dragDropMode() != QAbstractItemView::InternalMove)-
2519 defaultDropAction = Qt::CopyAction;-
2520 if (drag->exec(supportedActions, defaultDropAction) == Qt::MoveAction)-
2521 d->clearOrRemove();-
2522-
2523 d->dropIndicatorRect = QRect();-
2524 d->dropIndicatorPosition = OnItem;-
2525 }-
2526}-
2527-
2528-
2529-
2530-
2531-
2532-
2533QStyleOptionViewItem QAbstractItemView::viewOptions() const-
2534{-
2535 const QAbstractItemViewPrivate * const d = d_func();-
2536 QStyleOptionViewItem option;-
2537 option.init(this);-
2538 option.state &= ~QStyle::State_MouseOver;-
2539 option.font = font();-
2540-
2541-
2542-
2543-
2544 if (!hasFocus())-
2545 option.state &= ~QStyle::State_Active;-
2546-
2547-
2548 option.state &= ~QStyle::State_HasFocus;-
2549 if (d->iconSize.isValid()) {-
2550 option.decorationSize = d->iconSize;-
2551 } else {-
2552 int pm = style()->pixelMetric(QStyle::PM_SmallIconSize, 0, this);-
2553 option.decorationSize = QSize(pm, pm);-
2554 }-
2555 option.decorationPosition = QStyleOptionViewItem::Left;-
2556 option.decorationAlignment = Qt::AlignCenter;-
2557 option.displayAlignment = Qt::AlignLeft|Qt::AlignVCenter;-
2558 option.textElideMode = d->textElideMode;-
2559 option.rect = QRect();-
2560 option.showDecorationSelected = style()->styleHint(QStyle::SH_ItemView_ShowDecorationSelected, 0, this);-
2561 if (d->wrapItemText)-
2562 option.features = QStyleOptionViewItem::WrapText;-
2563 option.locale = locale();-
2564 option.locale.setNumberOptions(QLocale::OmitGroupSeparator);-
2565 option.widget = this;-
2566 return option;-
2567}-
2568-
2569QStyleOptionViewItem QAbstractItemViewPrivate::viewOptionsV1() const-
2570{-
2571 const QAbstractItemView * const q = q_func();-
2572 return q->viewOptions();-
2573}-
2574-
2575-
2576-
2577-
2578-
2579-
2580QAbstractItemView::State QAbstractItemView::state() const-
2581{-
2582 const QAbstractItemViewPrivate * const d = d_func();-
2583 return d->state;-
2584}-
2585-
2586-
2587-
2588-
2589-
2590-
2591void QAbstractItemView::setState(State state)-
2592{-
2593 QAbstractItemViewPrivate * const d = d_func();-
2594 d->state = state;-
2595}-
2596void QAbstractItemView::scheduleDelayedItemsLayout()-
2597{-
2598 QAbstractItemViewPrivate * const d = d_func();-
2599 d->doDelayedItemsLayout();-
2600}-
2601-
2602-
2603-
2604-
2605-
2606-
2607-
2608void QAbstractItemView::executeDelayedItemsLayout()-
2609{-
2610 QAbstractItemViewPrivate * const d = d_func();-
2611 d->executePostedLayout();-
2612}-
2613void QAbstractItemView::setDirtyRegion(const QRegion &region)-
2614{-
2615 QAbstractItemViewPrivate * const d = d_func();-
2616 d->setDirtyRegion(region);-
2617}-
2618void QAbstractItemView::scrollDirtyRegion(int dx, int dy)-
2619{-
2620 QAbstractItemViewPrivate * const d = d_func();-
2621 d->scrollDirtyRegion(dx, dy);-
2622}-
2623QPoint QAbstractItemView::dirtyRegionOffset() const-
2624{-
2625 const QAbstractItemViewPrivate * const d = d_func();-
2626 return d->scrollDelayOffset;-
2627}-
2628-
2629-
2630-
2631-
2632void QAbstractItemView::startAutoScroll()-
2633{-
2634 d_func()->startAutoScroll();-
2635}-
2636-
2637-
2638-
2639-
2640void QAbstractItemView::stopAutoScroll()-
2641{-
2642 d_func()->stopAutoScroll();-
2643}-
2644-
2645-
2646-
2647-
2648void QAbstractItemView::doAutoScroll()-
2649{-
2650-
2651 QAbstractItemViewPrivate * const d = d_func();-
2652 QScrollBar *verticalScroll = verticalScrollBar();-
2653 QScrollBar *horizontalScroll = horizontalScrollBar();-
2654-
2655-
2656-
2657 QHeaderView *hv = qobject_cast<QHeaderView*>(this);-
2658 if (hv) {-
2659 QAbstractScrollArea *parent = qobject_cast<QAbstractScrollArea*>(parentWidget());-
2660 if (parent) {-
2661 if (hv->orientation() == Qt::Horizontal) {-
2662 if (!hv->horizontalScrollBar() || !hv->horizontalScrollBar()->isVisible())-
2663 horizontalScroll = parent->horizontalScrollBar();-
2664 } else {-
2665 if (!hv->verticalScrollBar() || !hv->verticalScrollBar()->isVisible())-
2666 verticalScroll = parent->verticalScrollBar();-
2667 }-
2668 }-
2669 }-
2670-
2671 int verticalStep = verticalScroll->pageStep();-
2672 int horizontalStep = horizontalScroll->pageStep();-
2673 if (d->autoScrollCount < qMax(verticalStep, horizontalStep))-
2674 ++d->autoScrollCount;-
2675-
2676 int margin = d->autoScrollMargin;-
2677 int verticalValue = verticalScroll->value();-
2678 int horizontalValue = horizontalScroll->value();-
2679-
2680 QPoint pos = d->viewport->mapFromGlobal(QCursor::pos());-
2681 QRect area = QWidgetPrivate::get(d->viewport)->clipRect();-
2682-
2683-
2684 if (pos.y() - area.top() < margin)-
2685 verticalScroll->setValue(verticalValue - d->autoScrollCount);-
2686 else if (area.bottom() - pos.y() < margin)-
2687 verticalScroll->setValue(verticalValue + d->autoScrollCount);-
2688 if (pos.x() - area.left() < margin)-
2689 horizontalScroll->setValue(horizontalValue - d->autoScrollCount);-
2690 else if (area.right() - pos.x() < margin)-
2691 horizontalScroll->setValue(horizontalValue + d->autoScrollCount);-
2692-
2693 bool verticalUnchanged = (verticalValue == verticalScroll->value());-
2694 bool horizontalUnchanged = (horizontalValue == horizontalScroll->value());-
2695 if (verticalUnchanged && horizontalUnchanged) {-
2696 stopAutoScroll();-
2697 } else {-
2698-
2699 d->dropIndicatorRect = QRect();-
2700 d->dropIndicatorPosition = QAbstractItemView::OnViewport;-
2701-
2702 d->viewport->update();-
2703 }-
2704}-
2705QItemSelectionModel::SelectionFlags QAbstractItemView::selectionCommand(const QModelIndex &index,-
2706 const QEvent *event) const-
2707{-
2708 const QAbstractItemViewPrivate * const d = d_func();-
2709 Qt::KeyboardModifiers keyModifiers = Qt::NoModifier;-
2710 if (event) {-
2711 switch (event->type()) {-
2712 case QEvent::MouseButtonDblClick:-
2713 case QEvent::MouseButtonPress:-
2714 case QEvent::MouseButtonRelease:-
2715 case QEvent::MouseMove:-
2716 case QEvent::KeyPress:-
2717 case QEvent::KeyRelease:-
2718 keyModifiers = (static_cast<const QInputEvent*>(event))->modifiers();-
2719 break;-
2720 default:-
2721 keyModifiers = QApplication::keyboardModifiers();-
2722 }-
2723 }-
2724 switch (d->selectionMode) {-
2725 case NoSelection:-
2726 return QItemSelectionModel::NoUpdate;-
2727 case SingleSelection:-
2728 if (event && event->type() == QEvent::MouseButtonRelease)-
2729 return QItemSelectionModel::NoUpdate;-
2730 if ((keyModifiers & Qt::ControlModifier) && d->selectionModel->isSelected(index))-
2731 return QItemSelectionModel::Deselect | d->selectionBehaviorFlags();-
2732 else-
2733 return QItemSelectionModel::ClearAndSelect | d->selectionBehaviorFlags();-
2734 case MultiSelection:-
2735 return d->multiSelectionCommand(index, event);-
2736 case ExtendedSelection:-
2737 return d->extendedSelectionCommand(index, event);-
2738 case ContiguousSelection:-
2739 return d->contiguousSelectionCommand(index, event);-
2740 }-
2741 return QItemSelectionModel::NoUpdate;-
2742}-
2743-
2744QItemSelectionModel::SelectionFlags QAbstractItemViewPrivate::multiSelectionCommand(-
2745 const QModelIndex &index, const QEvent *event) const-
2746{-
2747 (void)index;-
2748-
2749 if (event) {-
2750 switch (event->type()) {-
2751 case QEvent::KeyPress:-
2752 if (static_cast<const QKeyEvent*>(event)->key() == Qt::Key_Space-
2753 || static_cast<const QKeyEvent*>(event)->key() == Qt::Key_Select)-
2754 return QItemSelectionModel::Toggle|selectionBehaviorFlags();-
2755 break;-
2756 case QEvent::MouseButtonPress:-
2757 if (static_cast<const QMouseEvent*>(event)->button() == Qt::LeftButton)-
2758 return QItemSelectionModel::Toggle|selectionBehaviorFlags();-
2759 break;-
2760 case QEvent::MouseButtonRelease:-
2761 if (static_cast<const QMouseEvent*>(event)->button() == Qt::LeftButton)-
2762 return QItemSelectionModel::NoUpdate|selectionBehaviorFlags();-
2763 break;-
2764 case QEvent::MouseMove:-
2765 if (static_cast<const QMouseEvent*>(event)->buttons() & Qt::LeftButton)-
2766 return QItemSelectionModel::ToggleCurrent|selectionBehaviorFlags();-
2767 default:-
2768 break;-
2769 }-
2770 return QItemSelectionModel::NoUpdate;-
2771 }-
2772-
2773 return QItemSelectionModel::Toggle|selectionBehaviorFlags();-
2774}-
2775-
2776QItemSelectionModel::SelectionFlags QAbstractItemViewPrivate::extendedSelectionCommand(-
2777 const QModelIndex &index, const QEvent *event) const-
2778{-
2779 Qt::KeyboardModifiers modifiers = QApplication::keyboardModifiers();-
2780 if (event) {-
2781 switch (event->type()) {-
2782 case QEvent::MouseMove: {-
2783-
2784 modifiers = static_cast<const QMouseEvent*>(event)->modifiers();-
2785 if (modifiers & Qt::ControlModifier)-
2786 return QItemSelectionModel::ToggleCurrent|selectionBehaviorFlags();-
2787 break;-
2788 }-
2789 case QEvent::MouseButtonPress: {-
2790 modifiers = static_cast<const QMouseEvent*>(event)->modifiers();-
2791 const Qt::MouseButton button = static_cast<const QMouseEvent*>(event)->button();-
2792 const bool rightButtonPressed = button & Qt::RightButton;-
2793 const bool shiftKeyPressed = modifiers & Qt::ShiftModifier;-
2794 const bool controlKeyPressed = modifiers & Qt::ControlModifier;-
2795 const bool indexIsSelected = selectionModel->isSelected(index);-
2796 if ((shiftKeyPressed || controlKeyPressed) && rightButtonPressed)-
2797 return QItemSelectionModel::NoUpdate;-
2798 if (!shiftKeyPressed && !controlKeyPressed && indexIsSelected)-
2799 return QItemSelectionModel::NoUpdate;-
2800 if (!index.isValid() && !rightButtonPressed && !shiftKeyPressed && !controlKeyPressed)-
2801 return QItemSelectionModel::Clear;-
2802 if (!index.isValid())-
2803 return QItemSelectionModel::NoUpdate;-
2804 break;-
2805 }-
2806 case QEvent::MouseButtonRelease: {-
2807-
2808 modifiers = static_cast<const QMouseEvent*>(event)->modifiers();-
2809 const Qt::MouseButton button = static_cast<const QMouseEvent*>(event)->button();-
2810 const bool rightButtonPressed = button & Qt::RightButton;-
2811 const bool shiftKeyPressed = modifiers & Qt::ShiftModifier;-
2812 const bool controlKeyPressed = modifiers & Qt::ControlModifier;-
2813 if (((index == pressedIndex && selectionModel->isSelected(index))-
2814 || !index.isValid()) && state != QAbstractItemView::DragSelectingState-
2815 && !shiftKeyPressed && !controlKeyPressed && (!rightButtonPressed || !index.isValid()))-
2816 return QItemSelectionModel::ClearAndSelect|selectionBehaviorFlags();-
2817 return QItemSelectionModel::NoUpdate;-
2818 }-
2819 case QEvent::KeyPress: {-
2820-
2821 modifiers = static_cast<const QKeyEvent*>(event)->modifiers();-
2822 switch (static_cast<const QKeyEvent*>(event)->key()) {-
2823 case Qt::Key_Backtab:-
2824 modifiers = modifiers & ~Qt::ShiftModifier;-
2825 case Qt::Key_Down:-
2826 case Qt::Key_Up:-
2827 case Qt::Key_Left:-
2828 case Qt::Key_Right:-
2829 case Qt::Key_Home:-
2830 case Qt::Key_End:-
2831 case Qt::Key_PageUp:-
2832 case Qt::Key_PageDown:-
2833 case Qt::Key_Tab:-
2834 if (modifiers & Qt::ControlModifier-
2835-
2836-
2837-
2838-
2839 )-
2840 return QItemSelectionModel::NoUpdate;-
2841 break;-
2842 case Qt::Key_Select:-
2843 return QItemSelectionModel::Toggle|selectionBehaviorFlags();-
2844 case Qt::Key_Space:-
2845 if (modifiers & Qt::ControlModifier)-
2846 return QItemSelectionModel::Toggle|selectionBehaviorFlags();-
2847 return QItemSelectionModel::Select|selectionBehaviorFlags();-
2848 default:-
2849 break;-
2850 }-
2851 }-
2852 default:-
2853 break;-
2854 }-
2855 }-
2856-
2857 if (modifiers & Qt::ShiftModifier)-
2858 return QItemSelectionModel::SelectCurrent|selectionBehaviorFlags();-
2859 if (modifiers & Qt::ControlModifier)-
2860 return QItemSelectionModel::Toggle|selectionBehaviorFlags();-
2861 if (state == QAbstractItemView::DragSelectingState) {-
2862-
2863 return QItemSelectionModel::Clear|QItemSelectionModel::SelectCurrent|selectionBehaviorFlags();-
2864 }-
2865-
2866 return QItemSelectionModel::ClearAndSelect|selectionBehaviorFlags();-
2867}-
2868-
2869QItemSelectionModel::SelectionFlags-
2870QAbstractItemViewPrivate::contiguousSelectionCommand(const QModelIndex &index,-
2871 const QEvent *event) const-
2872{-
2873 QItemSelectionModel::SelectionFlags flags = extendedSelectionCommand(index, event);-
2874 const int Mask = QItemSelectionModel::Clear | QItemSelectionModel::Select-
2875 | QItemSelectionModel::Deselect | QItemSelectionModel::Toggle-
2876 | QItemSelectionModel::Current;-
2877-
2878 switch (flags & Mask) {-
2879 case QItemSelectionModel::Clear:-
2880 case QItemSelectionModel::ClearAndSelect:-
2881 case QItemSelectionModel::SelectCurrent:-
2882 return flags;-
2883 case QItemSelectionModel::NoUpdate:-
2884 if (event &&-
2885 (event->type() == QEvent::MouseButtonPress-
2886 || event->type() == QEvent::MouseButtonRelease))-
2887 return flags;-
2888 return QItemSelectionModel::ClearAndSelect|selectionBehaviorFlags();-
2889 default:-
2890 return QItemSelectionModel::SelectCurrent|selectionBehaviorFlags();-
2891 }-
2892}-
2893-
2894void QAbstractItemViewPrivate::fetchMore()-
2895{-
2896 fetchMoreTimer.stop();-
2897 if (!model->canFetchMore(root))-
2898 return;-
2899 int last = model->rowCount(root) - 1;-
2900 if (last < 0) {-
2901 model->fetchMore(root);-
2902 return;-
2903 }-
2904-
2905 QModelIndex index = model->index(last, 0, root);-
2906 QRect rect = q_func()->visualRect(index);-
2907 if (viewport->rect().intersects(rect))-
2908 model->fetchMore(root);-
2909}-
2910-
2911bool QAbstractItemViewPrivate::shouldEdit(QAbstractItemView::EditTrigger trigger,-
2912 const QModelIndex &index) const-
2913{-
2914 if (!index.isValid())-
2915 return false;-
2916 Qt::ItemFlags flags = model->flags(index);-
2917 if (((flags & Qt::ItemIsEditable) == 0) || ((flags & Qt::ItemIsEnabled) == 0))-
2918 return false;-
2919 if (state == QAbstractItemView::EditingState)-
2920 return false;-
2921 if (hasEditor(index))-
2922 return false;-
2923 if (trigger == QAbstractItemView::AllEditTriggers)-
2924 return true;-
2925 if ((trigger & editTriggers) == QAbstractItemView::SelectedClicked-
2926 && !selectionModel->isSelected(index))-
2927 return false;-
2928 return (trigger & editTriggers);-
2929}-
2930-
2931bool QAbstractItemViewPrivate::shouldForwardEvent(QAbstractItemView::EditTrigger trigger,-
2932 const QEvent *event) const-
2933{-
2934 if (!event || (trigger & editTriggers) != QAbstractItemView::AnyKeyPressed)-
2935 return false;-
2936-
2937 switch (event->type()) {-
2938 case QEvent::KeyPress:-
2939 case QEvent::MouseButtonDblClick:-
2940 case QEvent::MouseButtonPress:-
2941 case QEvent::MouseButtonRelease:-
2942 case QEvent::MouseMove:-
2943 return true;-
2944 default:-
2945 break;-
2946 };-
2947-
2948 return false;-
2949}-
2950-
2951bool QAbstractItemViewPrivate::shouldAutoScroll(const QPoint &pos) const-
2952{-
2953 if (!autoScroll)-
2954 return false;-
2955 QRect area = static_cast<QAbstractItemView*>(viewport)->d_func()->clipRect();-
2956 return (pos.y() - area.top() < autoScrollMargin)-
2957 || (area.bottom() - pos.y() < autoScrollMargin)-
2958 || (pos.x() - area.left() < autoScrollMargin)-
2959 || (area.right() - pos.x() < autoScrollMargin);-
2960}-
2961-
2962void QAbstractItemViewPrivate::doDelayedItemsLayout(int delay)-
2963{-
2964 if (!delayedPendingLayout) {-
2965 delayedPendingLayout = true;-
2966 delayedLayout.start(delay, q_func());-
2967 }-
2968}-
2969-
2970void QAbstractItemViewPrivate::interruptDelayedItemsLayout() const-
2971{-
2972 delayedLayout.stop();-
2973 delayedPendingLayout = false;-
2974}-
2975-
2976void QAbstractItemViewPrivate::updateGeometry()-
2977{-
2978 QAbstractItemView * const q = q_func();-
2979 if (sizeAdjustPolicy == QAbstractScrollArea::AdjustIgnored)-
2980 return;-
2981 if (sizeAdjustPolicy == QAbstractScrollArea::AdjustToContents || !shownOnce)-
2982 q->updateGeometry();-
2983}-
2984-
2985QWidget *QAbstractItemViewPrivate::editor(const QModelIndex &index,-
2986 const QStyleOptionViewItem &options)-
2987{-
2988 QAbstractItemView * const q = q_func();-
2989 QWidget *w = editorForIndex(index).widget.data();-
2990 if (!w) {-
2991 QAbstractItemDelegate *delegate = delegateForIndex(index);-
2992 if (!delegate)-
2993 return 0;-
2994 w = delegate->createEditor(viewport, options, index);-
2995 if (w) {-
2996 w->installEventFilter(delegate);-
2997 QObject::connect(w, qFlagLocation("2""destroyed(QObject*)" "\0" __FILE__ ":" "4157""4207"), q, qFlagLocation("1""editorDestroyed(QObject*)" "\0" __FILE__ ":" "4157""4207"));-
2998 delegate->updateEditorGeometry(w, options, index);-
2999 delegate->setEditorData(w, index);-
3000 addEditor(index, w, false);-
3001 if (w->parent() == viewport)-
3002 QWidget::setTabOrder(q, w);-
3003-
3004-
3005 QWidget *focusWidget = w;-
3006 while (QWidget *fp = focusWidget->focusProxy())-
3007 focusWidget = fp;-
3008-
3009 if (QLineEdit *le = qobject_cast<QLineEdit*>(focusWidget))-
3010 le->selectAll();-
3011-
3012-
3013 if (QSpinBox *sb = qobject_cast<QSpinBox*>(focusWidget))-
3014 sb->selectAll();-
3015 else if (QDoubleSpinBox *dsb = qobject_cast<QDoubleSpinBox*>(focusWidget))-
3016 dsb->selectAll();-
3017-
3018 }-
3019 }-
3020-
3021 return w;-
3022}-
3023-
3024void QAbstractItemViewPrivate::updateEditorData(const QModelIndex &tl, const QModelIndex &br)-
3025{-
3026-
3027 const bool checkIndexes = tl.isValid() && br.isValid();-
3028 const QModelIndex parent = tl.parent();-
3029-
3030-
3031-
3032 const QIndexEditorHash indexEditorHashCopy = indexEditorHash;-
3033 QIndexEditorHash::const_iterator it = indexEditorHashCopy.constBegin();-
3034 for (; it != indexEditorHashCopy.constEnd(); ++it) {-
3035 QWidget *editor = it.value().widget.data();-
3036 const QModelIndex index = it.key();-
3037 if (it.value().isStatic || !editor || !index.isValid() ||-
3038 (checkIndexes-
3039 && (index.row() < tl.row() || index.row() > br.row()-
3040 || index.column() < tl.column() || index.column() > br.column()-
3041 || index.parent() != parent)))-
3042 continue;-
3043-
3044 QAbstractItemDelegate *delegate = delegateForIndex(index);-
3045 if (delegate) {-
3046 delegate->setEditorData(editor, index);-
3047 }-
3048 }-
3049}-
3050void QAbstractItemViewPrivate::clearOrRemove()-
3051{-
3052-
3053 const QItemSelection selection = selectionModel->selection();-
3054 QList<QItemSelectionRange>::const_iterator it = selection.constBegin();-
3055-
3056 if (!overwrite) {-
3057 for (; it != selection.constEnd(); ++it) {-
3058 QModelIndex parent = (*it).parent();-
3059 if ((*it).left() != 0)-
3060 continue;-
3061 if ((*it).right() != (model->columnCount(parent) - 1))-
3062 continue;-
3063 int count = (*it).bottom() - (*it).top() + 1;-
3064 model->removeRows((*it).top(), count, parent);-
3065 }-
3066 } else {-
3067-
3068 QModelIndexList list = selection.indexes();-
3069 for (int i=0; i < list.size(); ++i) {-
3070 QModelIndex index = list.at(i);-
3071 QMap<int, QVariant> roles = model->itemData(index);-
3072 for (QMap<int, QVariant>::Iterator it = roles.begin(); it != roles.end(); ++it)-
3073 it.value() = QVariant();-
3074 model->setItemData(index, roles);-
3075 }-
3076 }-
3077-
3078}-
3079-
3080-
3081-
3082-
3083-
3084-
3085-
3086void QAbstractItemViewPrivate::checkPersistentEditorFocus()-
3087{-
3088 QAbstractItemView * const q = q_func();-
3089 if (QWidget *widget = QApplication::focusWidget()) {-
3090 if (persistent.contains(widget)) {-
3091-
3092 QModelIndex index = indexForEditor(widget);-
3093 if (selectionModel->currentIndex() != index)-
3094 q->setCurrentIndex(index);-
3095 }-
3096 }-
3097}-
3098-
3099-
3100const QEditorInfo & QAbstractItemViewPrivate::editorForIndex(const QModelIndex &index) const-
3101{-
3102 static QEditorInfo nullInfo;-
3103-
3104-
3105 if (indexEditorHash.isEmpty())-
3106 return nullInfo;-
3107-
3108 QIndexEditorHash::const_iterator it = indexEditorHash.find(index);-
3109 if (it == indexEditorHash.end())-
3110 return nullInfo;-
3111-
3112 return it.value();-
3113}-
3114-
3115bool QAbstractItemViewPrivate::hasEditor(const QModelIndex &index) const-
3116{-
3117-
3118 return
never executed: return !indexEditorHash.isEmpty() && indexEditorHash.contains(index);
!indexEditorHash.find(index) !=isEmpty() && indexEditorHash.constEnd();contains(index);
never executed: return !indexEditorHash.isEmpty() && indexEditorHash.contains(index);
0
3119}-
3120-
3121QModelIndex QAbstractItemViewPrivate::indexForEditor(QWidget *editor) const-
3122{-
3123-
3124 if (indexEditorHash.isEmpty())-
3125 return QModelIndex();-
3126-
3127 QEditorIndexHash::const_iterator it = editorIndexHash.find(editor);-
3128 if (it == editorIndexHash.end())-
3129 return QModelIndex();-
3130-
3131 return it.value();-
3132}-
3133-
3134void QAbstractItemViewPrivate::removeEditor(QWidget *editor)-
3135{-
3136 QEditorIndexHash::iteratorconst auto it = editorIndexHash.findconstFind(editor);-
3137 if (it != editorIndexHash.endcend()
it != editorIndexHash.cend()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
3138 indexEditorHash.remove(it.value());-
3139 editorIndexHash.erase(it);-
3140 }
never executed: end of block
0
3141}
never executed: end of block
0
3142-
3143void QAbstractItemViewPrivate::addEditor(const QModelIndex &index, QWidget *editor, bool isStatic)-
3144{-
3145 editorIndexHash.insert(editor, index);-
3146 indexEditorHash.insert(index, QEditorInfo(editor, isStatic));-
3147}-
3148-
3149bool QAbstractItemViewPrivate::sendDelegateEvent(const QModelIndex &index, QEvent *event) const-
3150{-
3151 const QAbstractItemView * const q = q_func();-
3152 QModelIndex buddy = model->buddy(index);-
3153 QStyleOptionViewItem options = viewOptionsV1();-
3154 options.rect = q->visualRect(buddy);-
3155 options.state |= (buddy == q->currentIndex() ? QStyle::State_HasFocus : QStyle::State_None);-
3156 QAbstractItemDelegate *delegate = delegateForIndex(index);-
3157 return (event && delegate && delegate->editorEvent(event, model, options, buddy));-
3158}-
3159-
3160bool QAbstractItemViewPrivate::openEditor(const QModelIndex &index, QEvent *event)-
3161{-
3162 QAbstractItemView * const q = q_func();-
3163-
3164 QModelIndex buddy = model->buddy(index);-
3165 QStyleOptionViewItem options = viewOptionsV1();-
3166 options.rect = q->visualRect(buddy);-
3167 options.state |= (buddy == q->currentIndex() ? QStyle::State_HasFocus : QStyle::State_None);-
3168-
3169 QWidget *w = editor(buddy, options);-
3170 if (!w)-
3171 return false;-
3172-
3173 q->setState(QAbstractItemView::EditingState);-
3174 w->show();-
3175 w->setFocus();-
3176-
3177 if (event)-
3178 QApplication::sendEvent(w->focusProxy() ? w->focusProxy() : w, event);-
3179-
3180 return true;-
3181}-
3182-
3183-
3184-
3185-
3186-
3187-
3188-
3189QItemViewPaintPairs QAbstractItemViewPrivate::draggablePaintPairs(const QModelIndexList &indexes, QRect *r) const-
3190{-
3191 ((!(r)) ? qt_assert("r",__FILE__,43614411) : qt_noop());-
3192 const QAbstractItemView * const q = q_func();-
3193 QRect &rect = *r;-
3194 const QRect viewportRect = viewport->rect();-
3195 QItemViewPaintPairs ret;-
3196 for (int i = 0; i < indexes.count(); ++i) {const QModelIndexauto &index =: indexes.at(i);) {-
3197 const QRect current = q->visualRect(index);-
3198 if (current.intersects(viewportRect)
current.inters...(viewportRect)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
3199 ret += qMakePair(QItemViewPaintPair p = { current, index );};-
3200 ret += p;-
3201 rect |= current;-
3202 }
never executed: end of block
0
3203 }
never executed: end of block
0
3204 rect &= viewportRect;-
3205 return
never executed: return ret;
ret;
never executed: return ret;
0
3206}-
3207-
3208QPixmap QAbstractItemViewPrivate::renderToPixmap(const QModelIndexList &indexes, QRect *r) const-
3209{-
3210 ((!(r)) ? qt_assert("r",__FILE__,43804430) : qt_noop());-
3211 QItemViewPaintPairs paintPairs = draggablePaintPairs(indexes, r);-
3212 if (paintPairs.isEmpty()
paintPairs.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
3213 return
never executed: return QPixmap();
QPixmap();
never executed: return QPixmap();
0
3214-
3215 qreal scale = 1.0f;-
3216-
3217 const QAbstractItemView * const q = q_func();-
3218 QWidget *window = q->window();-
3219 if (window
windowDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
3220 QWindow *windowHandle = window->windowHandle();-
3221 if (windowHandle
windowHandleDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
3222 scale = windowHandle->devicePixelRatio();
never executed: scale = windowHandle->devicePixelRatio();
0
3223 }
never executed: end of block
0
3224-
3225 QPixmap pixmap(r->size() * scale);-
3226 pixmap.setDevicePixelRatio(scale);-
3227-
3228 pixmap.fill(Qt::transparent);-
3229 QPainter painter(&pixmap);-
3230 QStyleOptionViewItem option = viewOptionsV1();-
3231 option.state |= QStyle::State_Selected;-
3232 for (int j = 0; j < paintPairs.count()
j < paintPairs.count()Description
TRUEnever evaluated
FALSEnever evaluated
; ++j) {
0
3233 option.rect = paintPairs.at(j).firstrect.translated(-r->topLeft());-
3234 const QModelIndex &current = paintPairs.at(j).secondindex;-
3235 adjustViewOptionsForIndex(&option, current);-
3236 delegateForIndex(current)->paint(&painter, option, current);-
3237 }
never executed: end of block
0
3238 return
never executed: return pixmap;
pixmap;
never executed: return pixmap;
0
3239}-
3240-
3241void QAbstractItemViewPrivate::selectAll(QItemSelectionModel::SelectionFlags command)-
3242{-
3243 if (!selectionModel)-
3244 return;-
3245-
3246 QItemSelection selection;-
3247 QModelIndex tl = model->index(0, 0, root);-
3248 QModelIndex br = model->index(model->rowCount(root) - 1,-
3249 model->columnCount(root) - 1,-
3250 root);-
3251 selection.append(QItemSelectionRange(tl, br));-
3252 selectionModel->select(selection, command);-
3253}-
3254-
3255QModelIndexList QAbstractItemViewPrivate::selectedDraggableIndexes() const-
3256{-
3257 const QAbstractItemView * const q = q_func();-
3258 QModelIndexList indexes = q->selectedIndexes();-
3259 for(int iauto isNotDragEnabled = indexes.count() - 1 ; i >= 0; --i[this](const QModelIndex &index) {-
3260 if (!return
never executed: return !isIndexDragEnabled(index);
never executed: return !isIndexDragEnabled(index);
!isIndexDragEnabled(index);
never executed: return !isIndexDragEnabled(index);
0
3261 };-
3262 indexes.aterase(i)))std::remove_if(indexes.removeAt(i);-
}begin(), indexes.end(),
3263 isNotDragEnabled),-
3264 indexes.end());-
3265 return
never executed: return indexes;
indexes;
never executed: return indexes;
0
3266}-
3267-
3268-
3269-
3270-
Switch to Source codePreprocessed file

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