aboutsummaryrefslogtreecommitdiffstats
path: root/tests/manual/quickcontrols/headerview/main.cpp
diff options
context:
space:
mode:
authorMitch Curtis <[email protected]>2022-11-18 15:15:16 +0800
committerMitch Curtis <[email protected]>2022-12-01 10:26:20 +0800
commit4bd87b903b355b53e3105ba1ae7c154c4e55cdaf (patch)
treecc2edb597f0d5871302eb86e9dda78217384a5aa /tests/manual/quickcontrols/headerview/main.cpp
parent786e1748d4469c135a922a221024f3f9c421c0de (diff)
Remove "2" from Qt Quick Controls directories
Qt Quick Controls 2 was named that way because it was a follow-up to Qt Quick Controls 1.x. Now that Qt Quick Controls 1 is no longer supported, we don't need to have "2" in the name. Work on this was already started for the documentation in 1abdfe5d5a052f2298b7bf657513dfa7e0c66a56. By doing this renaming a few weeks before feature freeze, it won't affect the release but still results in as little time possible spent manually fixing conflicts in cherry-picks from non-LTS releases as a result of the renaming. This patch does the following: - Renames directories. - Adapts CMakeLists.txt and other files to account for the new paths. A follow-up patch will handle documentation. It does not touch library names or other user-facing stuff, as that will have to be done in Qt 7. Task-number: QTBUG-95413 Change-Id: I170d8db19033ee71e495ff0c5c1a517a41ed7634 Reviewed-by: Mitch Curtis <[email protected]>
Diffstat (limited to 'tests/manual/quickcontrols/headerview/main.cpp')
-rw-r--r--tests/manual/quickcontrols/headerview/main.cpp181
1 files changed, 181 insertions, 0 deletions
diff --git a/tests/manual/quickcontrols/headerview/main.cpp b/tests/manual/quickcontrols/headerview/main.cpp
new file mode 100644
index 0000000000..fb4e191a88
--- /dev/null
+++ b/tests/manual/quickcontrols/headerview/main.cpp
@@ -0,0 +1,181 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include <QAbstractTableModel>
+#include <QDebug>
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+
+class TestTableModel : public QAbstractTableModel {
+ Q_OBJECT
+ Q_PROPERTY(int rowCount READ rowCount WRITE setRowCount NOTIFY rowCountChanged)
+ Q_PROPERTY(int columnCount READ columnCount WRITE setColumnCount NOTIFY columnCountChanged)
+
+public:
+ TestTableModel(QObject *parent = nullptr)
+ : QAbstractTableModel(parent)
+ {
+ }
+
+ int rowCount(const QModelIndex & = QModelIndex()) const override
+ {
+ return m_rows;
+ }
+ virtual void setRowCount(int count)
+ {
+ beginResetModel();
+ m_rows = count;
+ emit rowCountChanged();
+ endResetModel();
+ }
+
+ int columnCount(const QModelIndex & = QModelIndex()) const override
+ {
+ return m_cols;
+ }
+ virtual void setColumnCount(int count)
+ {
+ beginResetModel();
+ m_cols = count;
+ emit columnCountChanged();
+ endResetModel();
+ }
+
+ int indexValue(const QModelIndex &index) const
+ {
+ return index.row() + (index.column() * rowCount());
+ }
+
+ Q_INVOKABLE QModelIndex toQModelIndex(int serialIndex)
+ {
+ return createIndex(serialIndex % rowCount(), serialIndex / rowCount());
+ }
+
+ Q_INVOKABLE QVariant data(int row, int col)
+ {
+ return data(createIndex(row, col), Qt::DisplayRole);
+ }
+ QVariant data(const QModelIndex &index, int role) const override
+ {
+ if (!index.isValid())
+ return QVariant();
+
+ switch (role) {
+ case Qt::DisplayRole:
+ return QLatin1String("Foo");
+ case Qt::EditRole:
+ return m_checkedCells.contains(indexValue(index));
+ default:
+ return QVariant();
+ }
+ }
+
+ bool setData(const QModelIndex &index, const QVariant &value,
+ int role = Qt::EditRole) override
+ {
+
+ if (role != Qt::EditRole)
+ return false;
+
+ int i = indexValue(index);
+ bool checked = value.toBool();
+ if (checked == m_checkedCells.contains(i))
+ return false;
+
+ if (checked)
+ m_checkedCells.insert(i);
+ else
+ m_checkedCells.remove(i);
+
+ emit dataChanged(index, index, { role });
+ return true;
+ }
+
+ Q_INVOKABLE QHash<int, QByteArray> roleNames() const override
+ {
+ return {
+ { Qt::DisplayRole, "display" },
+ { Qt::EditRole, "edit" }
+ };
+ }
+
+signals:
+ void rowCountChanged();
+ void columnCountChanged();
+
+private:
+ int m_rows = 0;
+ int m_cols = 0;
+
+ QSet<int> m_checkedCells;
+};
+
+class TestTableModelWithHeader : public TestTableModel {
+
+ Q_OBJECT
+public:
+ void setRowCount(int count) override
+ {
+ vData.resize(count);
+ TestTableModel::setRowCount(count);
+ }
+
+ void setColumnCount(int count) override
+ {
+ hData.resize(count);
+ TestTableModel::setColumnCount(count);
+ }
+
+ Q_INVOKABLE QVariant headerData(int section, Qt::Orientation orientation,
+ int role = Qt::DisplayRole) const override
+ {
+ const bool isHorizontal = orientation == Qt::Horizontal;
+ auto sectionCount = isHorizontal ? columnCount() : rowCount();
+ if (section < 0 || section >= sectionCount)
+ return QVariant();
+ switch (role) {
+ case Qt::DisplayRole:
+ return (isHorizontal ? QString::fromLatin1("Column %1") : QString::fromLatin1("Row %1")).arg(section);
+ case Qt::EditRole: {
+ auto &data = isHorizontal ? hData : vData;
+ return data[section].toString();
+ }
+ default:
+ return QVariant();
+ }
+ }
+
+ Q_INVOKABLE bool setHeaderData(int section, Qt::Orientation orientation,
+ const QVariant &value, int role = Qt::EditRole) override
+ {
+ qDebug() << Q_FUNC_INFO
+ << "section:" << section
+ << "orient:" << orientation
+ << "value:" << value
+ << "role:" << QAbstractItemModel::roleNames()[role];
+ auto sectionCount = orientation == Qt::Horizontal ? columnCount() : rowCount();
+ if (section < 0 || section >= sectionCount)
+ return false;
+ auto &data = orientation == Qt::Horizontal ? hData : vData;
+ data[section] = value;
+ emit headerDataChanged(orientation, section, section);
+ return true;
+ }
+
+private:
+ QList<QVariant> hData, vData;
+};
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ qmlRegisterType<TestTableModel>("TestTableModel", 0, 1, "TestTableModel");
+ qmlRegisterType<TestTableModelWithHeader>("TestTableModelWithHeader", 0, 1, "TestTableModelWithHeader");
+ QQmlApplicationEngine engine;
+ engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
+
+ return app.exec();
+}
+
+#include "main.moc"