aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndy Shaw <andy.shaw@qt.io>2020-03-03 10:48:27 +0100
committerAndy Shaw <andy.shaw@qt.io>2020-03-24 14:17:19 +0100
commitfe3b3c707e2bc41f2e98d315ba72f50d4929e064 (patch)
treee55630303b7f8bacfe7564f5064bba1e94b8751b /src
parent62c8ae30880886f3ed17ddc17713db1a7410964e (diff)
HeaderView: Add support for list based models
Change-Id: I411136bd2b9a277d84a7c68c55bb1c317b6cc9d2 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/imports/controls/HorizontalHeaderView.qml4
-rw-r--r--src/imports/controls/VerticalHeaderView.qml4
-rw-r--r--src/imports/controls/fusion/HorizontalHeaderView.qml4
-rw-r--r--src/imports/controls/fusion/VerticalHeaderView.qml4
-rw-r--r--src/imports/controls/imagine/HorizontalHeaderView.qml4
-rw-r--r--src/imports/controls/imagine/VerticalHeaderView.qml4
-rw-r--r--src/imports/controls/material/HorizontalHeaderView.qml4
-rw-r--r--src/imports/controls/material/VerticalHeaderView.qml4
-rw-r--r--src/imports/controls/universal/HorizontalHeaderView.qml4
-rw-r--r--src/imports/controls/universal/VerticalHeaderView.qml4
-rw-r--r--src/quicktemplates2/qquickheaderview.cpp24
-rw-r--r--src/quicktemplates2/qquickheaderview_p_p.h2
12 files changed, 53 insertions, 13 deletions
diff --git a/src/imports/controls/HorizontalHeaderView.qml b/src/imports/controls/HorizontalHeaderView.qml
index 7f0454da..ec91af25 100644
--- a/src/imports/controls/HorizontalHeaderView.qml
+++ b/src/imports/controls/HorizontalHeaderView.qml
@@ -55,7 +55,9 @@ T.HorizontalHeaderView {
Text {
id: text
- text: model[control.textRole]
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
width: parent.width
height: parent.height
horizontalAlignment: Text.AlignHCenter
diff --git a/src/imports/controls/VerticalHeaderView.qml b/src/imports/controls/VerticalHeaderView.qml
index 5fbfaedf..3fc9ca5a 100644
--- a/src/imports/controls/VerticalHeaderView.qml
+++ b/src/imports/controls/VerticalHeaderView.qml
@@ -55,7 +55,9 @@ T.VerticalHeaderView {
Text {
id: text
- text: model[control.textRole]
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
width: parent.width
height: parent.height
horizontalAlignment: Text.AlignHCenter
diff --git a/src/imports/controls/fusion/HorizontalHeaderView.qml b/src/imports/controls/fusion/HorizontalHeaderView.qml
index 3d0f247b..bbd9dc3f 100644
--- a/src/imports/controls/fusion/HorizontalHeaderView.qml
+++ b/src/imports/controls/fusion/HorizontalHeaderView.qml
@@ -65,7 +65,9 @@ T.HorizontalHeaderView {
Text {
id: text
- text: model[control.textRole]
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
width: parent.width
height: parent.height
horizontalAlignment: Text.AlignHCenter
diff --git a/src/imports/controls/fusion/VerticalHeaderView.qml b/src/imports/controls/fusion/VerticalHeaderView.qml
index 5ad0db8f..b220cdf2 100644
--- a/src/imports/controls/fusion/VerticalHeaderView.qml
+++ b/src/imports/controls/fusion/VerticalHeaderView.qml
@@ -65,7 +65,9 @@ T.VerticalHeaderView {
Text {
id: text
- text: model[control.textRole]
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
width: parent.width
height: parent.height
horizontalAlignment: Text.AlignHCenter
diff --git a/src/imports/controls/imagine/HorizontalHeaderView.qml b/src/imports/controls/imagine/HorizontalHeaderView.qml
index 7f0454da..ec91af25 100644
--- a/src/imports/controls/imagine/HorizontalHeaderView.qml
+++ b/src/imports/controls/imagine/HorizontalHeaderView.qml
@@ -55,7 +55,9 @@ T.HorizontalHeaderView {
Text {
id: text
- text: model[control.textRole]
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
width: parent.width
height: parent.height
horizontalAlignment: Text.AlignHCenter
diff --git a/src/imports/controls/imagine/VerticalHeaderView.qml b/src/imports/controls/imagine/VerticalHeaderView.qml
index 5fbfaedf..3fc9ca5a 100644
--- a/src/imports/controls/imagine/VerticalHeaderView.qml
+++ b/src/imports/controls/imagine/VerticalHeaderView.qml
@@ -55,7 +55,9 @@ T.VerticalHeaderView {
Text {
id: text
- text: model[control.textRole]
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
width: parent.width
height: parent.height
horizontalAlignment: Text.AlignHCenter
diff --git a/src/imports/controls/material/HorizontalHeaderView.qml b/src/imports/controls/material/HorizontalHeaderView.qml
index 504579cc..fd672f34 100644
--- a/src/imports/controls/material/HorizontalHeaderView.qml
+++ b/src/imports/controls/material/HorizontalHeaderView.qml
@@ -56,7 +56,9 @@ T.HorizontalHeaderView {
Text {
id: text
- text: model[control.textRole]
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
width: parent.width
height: parent.height
horizontalAlignment: Text.AlignHCenter
diff --git a/src/imports/controls/material/VerticalHeaderView.qml b/src/imports/controls/material/VerticalHeaderView.qml
index 7f8ecc92..5fc5aebe 100644
--- a/src/imports/controls/material/VerticalHeaderView.qml
+++ b/src/imports/controls/material/VerticalHeaderView.qml
@@ -56,7 +56,9 @@ T.VerticalHeaderView {
Text {
id: text
- text: model[control.textRole]
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
width: parent.width
height: parent.height
horizontalAlignment: Text.AlignHCenter
diff --git a/src/imports/controls/universal/HorizontalHeaderView.qml b/src/imports/controls/universal/HorizontalHeaderView.qml
index 8cdfda35..47daa8ce 100644
--- a/src/imports/controls/universal/HorizontalHeaderView.qml
+++ b/src/imports/controls/universal/HorizontalHeaderView.qml
@@ -57,7 +57,9 @@ T.HorizontalHeaderView {
Text {
id: text
- text: model[control.textRole]
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
width: parent.width
height: parent.height
horizontalAlignment: Text.AlignHCenter
diff --git a/src/imports/controls/universal/VerticalHeaderView.qml b/src/imports/controls/universal/VerticalHeaderView.qml
index 7c7544af..04408d68 100644
--- a/src/imports/controls/universal/VerticalHeaderView.qml
+++ b/src/imports/controls/universal/VerticalHeaderView.qml
@@ -57,7 +57,9 @@ T.VerticalHeaderView {
Text {
id: text
- text: model[control.textRole]
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
width: parent.width
height: parent.height
horizontalAlignment: Text.AlignHCenter
diff --git a/src/quicktemplates2/qquickheaderview.cpp b/src/quicktemplates2/qquickheaderview.cpp
index 49463944..5c465cc7 100644
--- a/src/quicktemplates2/qquickheaderview.cpp
+++ b/src/quicktemplates2/qquickheaderview.cpp
@@ -151,7 +151,11 @@
This property holds the model role used to display text in each header cell.
- The default value is the \c "display" role.
+ When the model has multiple roles, textRole can be set to determine which
+ role should be displayed.
+
+ If model is a QAbstractItemModel then it will default to "display"; otherwise
+ it is empty.
\sa QAbstractItemModel::roleNames()
*/
@@ -161,7 +165,11 @@
This property holds the model role used to display text in each header cell.
- The default value is the \c "display" role.
+ When the model has multiple roles, textRole can be set to determine which
+ role should be displayed.
+
+ If model is a QAbstractItemModel then it will default to "display"; otherwise
+ it is empty.
\sa QAbstractItemModel::roleNames()
*/
@@ -241,6 +249,18 @@ void QQuickHeaderViewBasePrivate::syncModel()
}
QQuickTableViewPrivate::syncModel();
+
+ isTransposed = false;
+ const auto aim = model->abstractItemModel();
+ if (orientation() == Qt::Horizontal) {
+ // For models that are just a list or a number, and especially not a
+ // table, we transpose the view when the orientation is horizontal.
+ // The model (list) will then be laid out horizontally rather than
+ // vertically, which is the otherwise the default.
+ isTransposed = !aim || aim->columnCount() == 1;
+ }
+ if (m_textRole.isEmpty() && aim)
+ m_textRole = QLatin1String("display");
}
void QQuickHeaderViewBasePrivate::syncSyncView()
diff --git a/src/quicktemplates2/qquickheaderview_p_p.h b/src/quicktemplates2/qquickheaderview_p_p.h
index 961c554b..655c2a58 100644
--- a/src/quicktemplates2/qquickheaderview_p_p.h
+++ b/src/quicktemplates2/qquickheaderview_p_p.h
@@ -112,7 +112,7 @@ protected:
};
QStack<SectionSize> m_hiddenSectionSizes;
bool m_modelExplicitlySetByUser = false;
- QString m_textRole = QStringLiteral("display");
+ QString m_textRole;
};
class QQuickHorizontalHeaderViewPrivate : public QQuickHeaderViewBasePrivate