--- a/src/gui/itemviews/qtreeview.cpp Tue Feb 02 00:43:10 2010 +0200
+++ b/src/gui/itemviews/qtreeview.cpp Wed Mar 31 11:06:36 2010 +0300
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
@@ -178,7 +178,7 @@
*/
/*!
- Constructs a table view with a \a parent to represent a model's
+ Constructs a tree view with a \a parent to represent a model's
data. Use setModel() to set the model.
\sa QAbstractItemModel
@@ -1241,15 +1241,6 @@
viewport()->update(newRect);
}
}
- if (selectionBehavior() == QAbstractItemView::SelectRows) {
- QModelIndex newHoverIndex = indexAt(he->pos());
- if (d->hover != newHoverIndex) {
- QRect oldHoverRect = visualRect(d->hover);
- QRect newHoverRect = visualRect(newHoverIndex);
- viewport()->update(QRect(0, newHoverRect.y(), viewport()->width(), newHoverRect.height()));
- viewport()->update(QRect(0, oldHoverRect.y(), viewport()->width(), oldHoverRect.height()));
- }
- }
break; }
default:
break;
@@ -2483,10 +2474,11 @@
QVector<QTreeViewItem> insertedItems(delta);
for (int i = 0; i < delta; ++i) {
- insertedItems[i].index = d->model->index(i + start, 0, parent);
- insertedItems[i].level = childLevel;
- insertedItems[i].hasChildren = d->hasVisibleChildren(insertedItems[i].index);
- insertedItems[i].hasMoreSiblings = !((i == delta - 1) && (parentRowCount == end +1));
+ QTreeViewItem &item = insertedItems[i];
+ item.index = d->model->index(i + start, 0, parent);
+ item.level = childLevel;
+ item.hasChildren = d->hasVisibleChildren(item.index);
+ item.hasMoreSiblings = !((i == delta - 1) && (parentRowCount == end +1));
}
if (d->viewItems.isEmpty())
d->defaultItemHeight = indexRowSizeHint(insertedItems[0].index);
@@ -2644,10 +2636,13 @@
return;
SelectionMode mode = d->selectionMode;
d->executePostedLayout(); //make sure we lay out the items
- if (mode != SingleSelection && !d->viewItems.isEmpty())
- d->select(d->viewItems.first().index, d->viewItems.last().index,
+ if (mode != SingleSelection && !d->viewItems.isEmpty()) {
+ const QModelIndex &idx = d->viewItems.last().index;
+ QModelIndex lastItemIndex = idx.sibling(idx.row(), d->model->columnCount(idx.parent()) - 1);
+ d->select(d->viewItems.first().index, lastItemIndex,
QItemSelectionModel::ClearAndSelect
|QItemSelectionModel::Rows);
+ }
}
/*!
@@ -3064,6 +3059,8 @@
{
Q_Q(const QTreeView);
QPixmap pixmap(rect.size());
+ if (rect.size().isEmpty())
+ return pixmap;
pixmap.fill(Qt::transparent); //the base might not be opaque, and we don't want uninitialized pixels.
QPainter painter(&pixmap);
painter.fillRect(QRect(QPoint(0,0), rect.size()), q->palette().base());
@@ -3773,10 +3770,15 @@
if (previousSibiling != -1 && after && model->rowCount(parent) == start)
viewItems[previousSibiling].hasMoreSiblings = false;
-
- updateChildCount(parentItem, -removedCount);
- if (parentItem != -1 && viewItems.at(parentItem).total == 0)
- viewItems[parentItem].hasChildren = false; //every children have been removed;
+ if (parentItem != -1) {
+ if (viewItems.at(parentItem).expanded) {
+ updateChildCount(parentItem, -removedCount);
+ if (viewItems.at(parentItem).total == 0)
+ viewItems[parentItem].hasChildren = false; //every children have been removed;
+ } else if (viewItems[parentItem].hasChildren && !hasVisibleChildren(parent)) {
+ viewItems[parentItem].hasChildren = false;
+ }
+ }
if (after) {
q->updateGeometries();
viewport->update();