From 8bde410a6d0b1510d182a365d769db182b1c07dd Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Wed, 28 Apr 2010 14:12:59 +0200
Subject: Fixed the sizehint for cols/rows in qtableview

It could return wrong values because we were not always checking
the right cols/rows.

Reviewed-By: gabi
Task-Number: QTBUG-10169
---
 src/gui/itemviews/qtableview.cpp         |  8 ++++----
 tests/auto/qtableview/tst_qtableview.cpp | 21 +++++++++++++++++++++
 2 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/src/gui/itemviews/qtableview.cpp b/src/gui/itemviews/qtableview.cpp
index 80334a6..4492e53 100644
--- a/src/gui/itemviews/qtableview.cpp
+++ b/src/gui/itemviews/qtableview.cpp
@@ -2145,8 +2145,8 @@ int QTableView::sizeHintForRow(int row) const
 
     ensurePolished();
 
-    int left = qMax(0, columnAt(0));
-    int right = columnAt(d->viewport->width());
+    int left = qMax(0, d->horizontalHeader->visualIndexAt(0));
+    int right = d->horizontalHeader->visualIndexAt(d->viewport->width());
     if (right == -1) // the table don't have enough columns to fill the viewport
         right = d->model->columnCount(d->root) - 1;
 
@@ -2204,8 +2204,8 @@ int QTableView::sizeHintForColumn(int column) const
 
     ensurePolished();
 
-    int top = qMax(0, rowAt(0));
-    int bottom = rowAt(d->viewport->height());
+    int top = qMax(0, d->verticalHeader->visualIndexAt(0));
+    int bottom = d->verticalHeader->visualIndexAt(d->viewport->height());
     if (!isVisible() || bottom == -1) // the table don't have enough rows to fill the viewport
         bottom = d->model->rowCount(d->root) - 1;
 
diff --git a/tests/auto/qtableview/tst_qtableview.cpp b/tests/auto/qtableview/tst_qtableview.cpp
index 2062e8e..3e5d077 100644
--- a/tests/auto/qtableview/tst_qtableview.cpp
+++ b/tests/auto/qtableview/tst_qtableview.cpp
@@ -202,6 +202,7 @@ private slots:
     void taskQTBUG_8585_crashForNoGoodReason();
     void taskQTBUG_7774_RtoLVisualRegionForSelection();
     void taskQTBUG_8777_scrollToSpans();
+    void taskQTBUG_10169_sizeHintForRow();
 
     void mouseWheel_data();
     void mouseWheel();
@@ -478,6 +479,11 @@ public:
         return QTableView::selectedIndexes();
     }
 
+    int sizeHintForRow(int row) const
+    {
+        return QTableView::sizeHintForRow(row);
+    }
+
     bool checkSignalOrder;
 public slots:
     void currentChanged(QModelIndex , QModelIndex ) {
@@ -4042,5 +4048,20 @@ void tst_QTableView::taskQTBUG_8777_scrollToSpans()
     QVERIFY(table.verticalScrollBar()->value() > 10);
 }
 
+void tst_QTableView::taskQTBUG_10169_sizeHintForRow()
+{ 
+    QtTestTableView tableView; 
+    QStandardItemModel model(1, 3); 
+    model.setData(model.index(0, 0), "Word wrapping text goes here.");
+    tableView.setModel(&model);
+    tableView.verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);
+    const int orderedHeight = tableView.sizeHintForRow(0);
+    tableView.horizontalHeader()->moveSection(2, 0);
+    const int reorderedHeight = tableView.sizeHintForRow(0);
+
+    //the order of the columns shouldn't matter.
+    QCOMPARE(orderedHeight, reorderedHeight);
+}
+
 QTEST_MAIN(tst_QTableView)
 #include "tst_qtableview.moc"
-- 
cgit v0.12