src/gui/itemviews/qtableview.cpp
changeset 7 f7bc934e204c
parent 3 41300fa6a67c
--- a/src/gui/itemviews/qtableview.cpp	Tue Feb 02 00:43:10 2010 +0200
+++ b/src/gui/itemviews/qtableview.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)
 **
@@ -114,7 +114,9 @@
         }
     } else if (old_height > span->height()) {
         //remove the span from all the subspans lists that intersect the columns not covered anymore
-        Index::iterator it_y = index.lowerBound(qMin(-span->bottom(), 0));
+        Index::iterator it_y = index.lowerBound(-span->bottom());
+        if (it_y == index.end())
+            it_y = index.find(-span->top());    // This is the only span remaining and we are deleting it.
         Q_ASSERT(it_y != index.end()); //it_y must exist since the span is in the list
         while (-it_y.key() <= span->top() + old_height -1) {
             if (-it_y.key() > span->bottom()) {
@@ -1906,6 +1908,7 @@
                                                  width, rowHeight(r)));
         }
     } else { // nothing moved
+        const int gridAdjust = showGrid() ? 1 : 0;
         for (int i = 0; i < selection.count(); ++i) {
             QItemSelectionRange range = selection.at(i);
             if (range.parent() != d->root || !range.isValid())
@@ -1914,9 +1917,16 @@
 
             const int rtop = rowViewportPosition(range.top());
             const int rbottom = rowViewportPosition(range.bottom()) + rowHeight(range.bottom());
-            const int rleft = columnViewportPosition(range.left());
-            const int rright = columnViewportPosition(range.right()) + columnWidth(range.right());
-            selectionRegion += QRect(QPoint(rleft, rtop), QPoint(rright, rbottom));
+            int rleft;
+            int rright;
+            if (isLeftToRight()) {
+                rleft = columnViewportPosition(range.left());
+                rright = columnViewportPosition(range.right()) + columnWidth(range.right());
+            } else {
+                rleft = columnViewportPosition(range.right());
+                rright = columnViewportPosition(range.left()) + columnWidth(range.left());
+            }
+            selectionRegion += QRect(QPoint(rleft, rtop), QPoint(rright - 1 - gridAdjust, rbottom - 1 - gridAdjust));
             if (d->hasSpans()) {
                 foreach (QSpanCollection::Span *s,
                          d->spans.spansInRect(range.left(), range.top(), range.width(), range.height())) {
@@ -2359,12 +2369,22 @@
     \property QTableView::sortingEnabled
     \brief whether sorting is enabled
 
-    If this property is true, sorting is enabled for the table; if the
-    property is false, sorting is not enabled. The default value is false.
+    If this property is true, sorting is enabled for the table.  If
+    this property is false, sorting is not enabled. The default value
+    is false.
+
+    \note. Setting the property to true with setSortingEnabled()
+    immediately triggers a call to sortByColumn() with the current
+    sort section and order.
 
     \sa sortByColumn()
 */
 
+/*!
+  If \a enabled true enables sorting for the table and immediately
+  trigger a call to sortByColumn() with the current sort section and
+  order
+ */
 void QTableView::setSortingEnabled(bool enable)
 {
     Q_D(QTableView);
@@ -2534,7 +2554,7 @@
     // check if we really need to do anything
     if (!d->isIndexValid(index)
         || (d->model->parent(index) != d->root)
-        || isIndexHidden(index))
+        || isRowHidden(index.row()) || isColumnHidden(index.column()))
         return;
 
     QSpanCollection::Span span;