diff options
author | Richard Moe Gustavsen <richard.gustavsen@qt.io> | 2018-07-10 11:14:42 +0200 |
---|---|---|
committer | Richard Moe Gustavsen <richard.gustavsen@qt.io> | 2018-07-10 12:39:52 +0000 |
commit | 58c988e090bac094e8c2e8b77975c1c720725a6e (patch) | |
tree | 6100f317fc1a8a8c15e20154506f39411724a78e | |
parent | 04e7882fc2044020f98c9f6507429a47981f222b (diff) | |
download | qtdeclarative-58c988e090bac094e8c2e8b77975c1c720725a6e.tar.gz |
TableView: remove row and column from attached object
TableView.row and TableView.column is no different from the row
and column properties that are injected into the context from the
model classes. So just remove them to not bloat the API.
This attached properties where added at an early stage where we
thought that it should be possible to set a different row and
column count on the view than compared to the model (to e.g to
"fake" a table layout when just assigning an integer as a model).
Also, we consider supporting right-to-left etc, where we might
end up with cells that have a different row/column in the view
compared to where the cell is in the model. If we decide to
do this later (not for the first release), we can consider
adding the attached properties back again at that point.
Change-Id: I588a45913b968db789978339bc9a63cd2ccfad49
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
-rw-r--r-- | src/quick/items/qquicktableview.cpp | 9 | ||||
-rw-r--r-- | src/quick/items/qquicktableview_p.h | 22 | ||||
-rw-r--r-- | tests/auto/quick/qquicktableview/tst_qquicktableview.cpp | 33 | ||||
-rw-r--r-- | tests/manual/tableview/abstracttablemodel/main.qml | 4 | ||||
-rw-r--r-- | tests/manual/tableview/listmodel/main.qml | 2 |
5 files changed, 21 insertions, 49 deletions
diff --git a/src/quick/items/qquicktableview.cpp b/src/quick/items/qquicktableview.cpp index 0485f7c7b8..26aa409cec 100644 --- a/src/quick/items/qquicktableview.cpp +++ b/src/quick/items/qquicktableview.cpp @@ -1201,16 +1201,7 @@ void QQuickTableViewPrivate::initItemCallback(int modelIndex, QObject *object) if (!attached) return; - // Even though row and column is injected directly into the context of a delegate item - // from QQmlDelegateModel and its model classes, they will only return which row and - // column an item represents in the model. This might be different from which - // cell an item ends up in in the Table, if a different rows/columns has been set - // on it (which is typically the case for list models). For those cases, Table.row - // and Table.column can be helpful. - QPoint cell = cellAtModelIndex(modelIndex); attached->setTableView(q_func()); - attached->setColumn(cell.x()); - attached->setRow(cell.y()); } void QQuickTableViewPrivate::modelUpdated(const QQmlChangeSet &changeSet, bool reset) diff --git a/src/quick/items/qquicktableview_p.h b/src/quick/items/qquicktableview_p.h index f3a589b9e4..d2c3f17bc4 100644 --- a/src/quick/items/qquicktableview_p.h +++ b/src/quick/items/qquicktableview_p.h @@ -144,8 +144,6 @@ class Q_QUICK_PRIVATE_EXPORT QQuickTableViewAttached : public QObject Q_PROPERTY(QQuickTableView *tableView READ tableView NOTIFY tableViewChanged) Q_PROPERTY(qreal cellWidth READ cellWidth WRITE setCellWidth NOTIFY cellWidthChanged) Q_PROPERTY(qreal cellHeight READ cellHeight WRITE setCellHeight NOTIFY cellHeightChanged) - Q_PROPERTY(int row READ row NOTIFY rowChanged) - Q_PROPERTY(int column READ column NOTIFY columnChanged) public: QQuickTableViewAttached(QObject *parent) @@ -175,33 +173,13 @@ public: Q_EMIT cellHeightChanged(); } - int row() const { return m_row; } - void setRow(int newRow) { - if (newRow == m_row) - return; - m_row = newRow; - Q_EMIT rowChanged(); - } - - int column() const { return m_column; } - void setColumn(int newColumn) { - if (newColumn == m_column) - return; - m_column = newColumn; - Q_EMIT columnChanged(); - } - Q_SIGNALS: void tableViewChanged(); void cellWidthChanged(); void cellHeightChanged(); - void rowChanged(); - void columnChanged(); private: QPointer<QQuickTableView> m_tableview; - int m_row = -1; - int m_column = -1; QQmlNullableValue<qreal> m_cellWidth; QQmlNullableValue<qreal> m_cellHeight; diff --git a/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp b/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp index 6714779fc8..8caced4396 100644 --- a/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp +++ b/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp @@ -75,6 +75,7 @@ public: tst_QQuickTableView(); QQuickTableViewAttached *getAttachedObject(const QObject *object) const; + QPoint getContextRowAndColumn(const QQuickItem *item) const; private slots: void initTestCase() override; @@ -119,6 +120,14 @@ QQuickTableViewAttached *tst_QQuickTableView::getAttachedObject(const QObject *o return static_cast<QQuickTableViewAttached *>(attachedObject); } +QPoint tst_QQuickTableView::getContextRowAndColumn(const QQuickItem *item) const +{ + const auto context = qmlContext(item); + const int row = context->contextProperty("row").toInt(); + const int column = context->contextProperty("column").toInt(); + return QPoint(column, row); +} + void tst_QQuickTableView::setAndGetModel_data() { QTest::addColumn<QVariant>("model"); @@ -343,11 +352,9 @@ void tst_QQuickTableView::checkLayoutOfEqualSizedDelegateItems() QVERIFY(item); QCOMPARE(item->parentItem(), tableView->contentItem()); - auto attached = getAttachedObject(item); - int row = attached->row(); - int column = attached->column(); - qreal expectedX = margins.left() + (column * (expectedItemWidth + spacing.width())); - qreal expectedY = margins.top() + (row * (expectedItemHeight + spacing.height())); + const QPoint cell = getContextRowAndColumn(item); + qreal expectedX = margins.left() + (cell.x() * (expectedItemWidth + spacing.width())); + qreal expectedY = margins.top() + (cell.y() * (expectedItemHeight + spacing.height())); QCOMPARE(item->x(), expectedX); QCOMPARE(item->y(), expectedY); QCOMPARE(item->width(), expectedItemWidth); @@ -452,7 +459,7 @@ void tst_QQuickTableView::fillTableViewButNothingMore() auto const bottomRightFxItem = tableViewPrivate->loadedTableItem(tableViewPrivate->loadedTable.bottomRight()); auto const bottomRightItem = bottomRightFxItem->item; - auto bottomRightAttached = getAttachedObject(bottomRightItem); + const QPoint bottomRightCell = getContextRowAndColumn(bottomRightItem.data()); // Check that the right-most item is overlapping the right edge of the view QVERIFY(bottomRightItem->x() < tableView->width()); @@ -462,7 +469,7 @@ void tst_QQuickTableView::fillTableViewButNothingMore() qreal cellWidth = bottomRightItem->width() + spacing.width(); qreal availableWidth = tableView->width() - margins.left(); int expectedColumns = qCeil(availableWidth / cellWidth); - int actualColumns = bottomRightAttached->column() + 1; + int actualColumns = bottomRightCell.x() + 1; QCOMPARE(actualColumns, expectedColumns); // Check that the bottom-most item is overlapping the bottom edge of the view @@ -473,7 +480,7 @@ void tst_QQuickTableView::fillTableViewButNothingMore() qreal cellHeight = bottomRightItem->height() + spacing.height(); qreal availableHeight = tableView->height() - margins.top(); int expectedRows = qCeil(availableHeight / cellHeight); - int actualRows = bottomRightAttached->row() + 1; + int actualRows = bottomRightCell.y() + 1; QCOMPARE(actualRows, expectedRows); } @@ -500,22 +507,18 @@ void tst_QQuickTableView::checkInitialAttachedProperties() for (auto fxItem : tableViewPrivate->loadedItems) { const int index = fxItem->index; const auto item = fxItem->item; - const auto attached = getAttachedObject(item); const auto context = qmlContext(item.data()); const QPoint cell = tableViewPrivate->cellAtModelIndex(index); const int contextIndex = context->contextProperty("index").toInt(); - const int contextRow = context->contextProperty("row").toInt(); - const int contextColumn = context->contextProperty("column").toInt(); + const QPoint contextCell = getContextRowAndColumn(item.data()); const QString contextModelData = context->contextProperty("modelData").toString(); const QQmlDelegateModelAttached *delegateModelAttached = static_cast<QQmlDelegateModelAttached *>( qmlAttachedPropertiesObject<QQmlDelegateModel>(item)); const int contextItemsIndex = delegateModelAttached->property("itemsIndex").toInt(); - QCOMPARE(attached->row(), cell.y()); - QCOMPARE(attached->column(), cell.x()); - QCOMPARE(contextRow, cell.y()); - QCOMPARE(contextColumn, cell.x()); + QCOMPARE(contextCell.y(), cell.y()); + QCOMPARE(contextCell.x(), cell.x()); QCOMPARE(contextIndex, index); QCOMPARE(contextModelData, QStringLiteral("%1").arg(cell.y())); QCOMPARE(contextItemsIndex, index); diff --git a/tests/manual/tableview/abstracttablemodel/main.qml b/tests/manual/tableview/abstracttablemodel/main.qml index c448815a7c..271752aaf1 100644 --- a/tests/manual/tableview/abstracttablemodel/main.qml +++ b/tests/manual/tableview/abstracttablemodel/main.qml @@ -76,8 +76,8 @@ Window { Component { id: tableViewDelegate Rectangle { - TableView.cellWidth: TableView.column % 3 ? 80 : 50 - TableView.cellHeight: TableView.row % 3 ? 80 : 50 + TableView.cellWidth: column % 3 ? 80 : 50 + TableView.cellHeight: row % 3 ? 80 : 50 Text { anchors.centerIn: parent diff --git a/tests/manual/tableview/listmodel/main.qml b/tests/manual/tableview/listmodel/main.qml index b5a1ab8379..ca39e6a2b9 100644 --- a/tests/manual/tableview/listmodel/main.qml +++ b/tests/manual/tableview/listmodel/main.qml @@ -77,7 +77,7 @@ Window { Text { anchors.centerIn: parent - text: name + "\n[" + tableDelegate.TableView.column + ", " + tableDelegate.TableView.row + "]" + text: name + "\n[" + column + ", " + row + "]" } } } |