aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@theqtcompany.com>2016-01-19 14:22:01 +0100
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2016-01-19 14:22:27 +0100
commit7cad85c2f0930e4f8531a0508c28abdae0f3e0de (patch)
tree9ffe1d390ff137aa11de472ba59947c0b96cdfbb
parented30fdd7085ee8a007b990dc871afdeef0d7cbeb (diff)
parentd2a744f81272f9c0b6e987cc9f6c57f3931b67e7 (diff)
Merge remote-tracking branch 'origin/5.6' into dev
Conflicts: src/controls/qquickstyle.cpp Change-Id: I1c8273012b01726072e5cbfd4369453a780ff03e
-rw-r--r--.gitignore1
-rw-r--r--src/controls/qquickstyle.cpp53
-rw-r--r--src/controls/qquickstyleselector.cpp4
-rw-r--r--src/imports/controls/Page.qml52
-rw-r--r--src/imports/controls/ProgressBar.qml4
-rw-r--r--src/imports/controls/ToolBar.qml2
-rw-r--r--src/imports/controls/ToolButton.qml4
-rw-r--r--src/imports/controls/controls.pri3
-rw-r--r--src/imports/controls/doc/images/qtlabscalendar-calendarmodel.pngbin0 -> 6057 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscalendar-dayofweekrow-layout.pngbin19480 -> 9176 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscalendar-dayofweekrow.pngbin5599 -> 2513 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscalendar-monthgrid-layout.pngbin22876 -> 10913 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscalendar-monthgrid.pngbin13614 -> 6503 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscalendar-weeknumbercolumn-layout.pngbin17256 -> 8333 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscalendar-weeknumbercolumn.pngbin3397 -> 1977 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-busyindicator-background.pngbin3000 -> 1594 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-busyindicator-contentItem.pngbin2853 -> 1583 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-busyindicator.gifbin30448 -> 3241 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-busyindicator.pngbin2978 -> 1713 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-button-background.pngbin1163 -> 1499 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-button-disabled.pngbin1413 -> 1653 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-button-focused.pngbin1445 -> 1515 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-button-label.pngbin1262 -> 1550 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-button-normal.pngbin1220 -> 1507 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-button-pressed.pngbin1542 -> 1949 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-button.gifbin3913 -> 2171 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-button.pngbin1467 -> 1518 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-checkbox-background.pngbin2219 -> 2607 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-checkbox-checked.pngbin1884 -> 2687 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-checkbox-disabled.pngbin1898 -> 2197 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-checkbox-focused.pngbin1772 -> 2069 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-checkbox-indicator.pngbin2088 -> 2539 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-checkbox-label.pngbin2159 -> 2582 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-checkbox-normal.pngbin1437 -> 1547 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-checkbox.pngbin2778 -> 2573 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-combobox-background.pngbin2903 -> 2731 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-combobox-contentItem.pngbin2913 -> 2752 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-combobox-delegate.pngbin5012 -> 4999 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-combobox-popup.pngbin4969 -> 4969 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-combobox.pngbin4993 -> 4984 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-dial-background.pngbin3286 -> 6563 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-dial-handle.pngbin3538 -> 7325 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-dial.pngbin3567 -> 7204 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-frame-background.pngbin505 -> 345 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-frame-frame.pngbin410 -> 341 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-frame.pngbin5301 -> 5213 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-groupbox-background.pngbin2683 -> 2685 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-groupbox-checkable.pngbin8264 -> 8311 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-groupbox-frame.pngbin2582 -> 2653 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-groupbox-label.pngbin2637 -> 2673 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-groupbox.pngbin7669 -> 7718 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-itemdelegate-background.pngbin3490 -> 3499 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-itemdelegate-indicator.pngbin3452 -> 3456 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-itemdelegate-label.pngbin3439 -> 3441 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-itemdelegate.pngbin0 -> 9440 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-label-background.pngbin1119 -> 1118 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-label.pngbin1088 -> 1093 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-menu-contentItem.pngbin2639 -> 4777 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-menu.gifbin0 -> 4683 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-menu.pngbin2680 -> 4821 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-page-wireframe.pngbin0 -> 5283 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-pane.pngbin5022 -> 4939 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-progressbar-background.pngbin244 -> 146 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-progressbar-disabled.pngbin320 -> 133 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-progressbar-indicator.pngbin286 -> 133 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-progressbar-normal.pngbin322 -> 133 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-radiobutton-background.pngbin2875 -> 3474 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-radiobutton-checked.pngbin2292 -> 3411 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-radiobutton-disabled.pngbin2366 -> 2897 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-radiobutton-focused.pngbin2332 -> 2771 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-radiobutton-indicator.pngbin2726 -> 3337 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-radiobutton-label.pngbin2848 -> 3435 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-radiobutton-normal.pngbin1883 -> 2234 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-radiobutton.pngbin3454 -> 3491 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-rangeslider-background.pngbin1271 -> 1201 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-rangeslider-disabled.pngbin1170 -> 1204 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-rangeslider-first-handle-focused.pngbin1448 -> 1204 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-rangeslider-first-handle.pngbin1329 -> 1206 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-rangeslider-normal.pngbin1218 -> 1204 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-rangeslider-second-handle-focused.pngbin1449 -> 1204 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-rangeslider-second-handle.pngbin1345 -> 1365 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-rangeslider-track.pngbin1094 -> 1162 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-rangeslider.gifbin24491 -> 18024 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-rangeslider.pngbin1224 -> 1204 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-scrollbar-background.pngbin268 -> 260 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-scrollbar-handle.pngbin247 -> 248 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-scrollbar.pngbin669 -> 680 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-scrollindicator-background.pngbin149 -> 147 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-scrollindicator-indicator.pngbin121 -> 121 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-slider-background.pngbin1172 -> 1104 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-slider-disabled.pngbin1088 -> 1117 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-slider-focused.pngbin1282 -> 1117 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-slider-handle.pngbin1076 -> 953 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-slider-normal.pngbin1126 -> 1117 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-slider-track.pngbin1006 -> 1018 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-slider.gifbin13283 -> 16972 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-slider.pngbin1154 -> 1117 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-spinbox-background.pngbin1053 -> 1104 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-spinbox-contentItem.pngbin1144 -> 1178 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-spinbox-down.pngbin1078 -> 1130 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-spinbox-textual.pngbin1894 -> 1825 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-spinbox-up.pngbin1130 -> 1144 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-spinbox.pngbin1146 -> 1149 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-swipeview-indicator.pngbin0 -> 695 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-switch-background.pngbin2465 -> 2648 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-switch-checked.pngbin2822 -> 3124 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-switch-disabled.pngbin2964 -> 3218 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-switch-focused.pngbin2747 -> 2905 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-switch-indicator.pngbin2315 -> 2522 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-switch-label.pngbin2415 -> 2605 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-switch-normal.pngbin2200 -> 2415 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-switch.gifbin3320 -> 3466 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-switch.pngbin2414 -> 2669 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-tabbar.gifbin0 -> 5932 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-tabbar.pngbin3635 -> 3463 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-tabbutton.pngbin3727 -> 3477 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-textarea.pngbin2152 -> 2113 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-textfield-background.pngbin1540 -> 1976 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-textfield-disabled.pngbin1428 -> 193 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-textfield-focused.pngbin1587 -> 2072 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-textfield-normal.pngbin1261 -> 1553 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-textfield.pngbin2057 -> 2088 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-toolbar-background.pngbin185 -> 217 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-toolbar-frame.pngbin185 -> 217 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-toolbar.pngbin4073 -> 4172 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-toolbutton-background.pngbin2171 -> 1722 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-toolbutton-label.pngbin2156 -> 1682 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-toolbutton.pngbin2143 -> 1683 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-tumbler-background.pngbin1025 -> 1289 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-tumbler-contentItem.pngbin1025 -> 1289 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-tumbler-delegate.pngbin1047 -> 1300 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-tumbler-wrap.gifbin38931 -> 54383 bytes
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-tumbler.pngbin1129 -> 1123 bytes
-rw-r--r--src/imports/controls/doc/src/qtlabscontrols-containers.qdoc6
-rw-r--r--src/imports/controls/doc/src/qtlabscontrols-material.qdoc8
-rw-r--r--src/imports/controls/material/Button.qml17
-rw-r--r--src/imports/controls/material/Page.qml53
-rw-r--r--src/imports/controls/material/SpinBox.qml2
-rw-r--r--src/imports/controls/material/ToolBar.qml2
-rw-r--r--src/imports/controls/material/ToolButton.qml4
-rw-r--r--src/imports/controls/material/material.pri3
-rw-r--r--src/imports/controls/material/qquickmaterialstyle.cpp718
-rw-r--r--src/imports/controls/material/qquickmaterialstyle_p.h16
-rw-r--r--src/imports/controls/material/qtlabsmaterialstyleplugin.cpp4
-rw-r--r--src/imports/controls/qquickbusyindicatorring.cpp9
-rw-r--r--src/imports/controls/qquickprogressstrip.cpp5
-rw-r--r--src/imports/controls/qtlabscontrolsplugin.cpp3
-rw-r--r--src/imports/controls/universal/ComboBox.qml3
-rw-r--r--src/imports/controls/universal/Page.qml53
-rw-r--r--src/imports/controls/universal/ProgressBar.qml8
-rw-r--r--src/imports/controls/universal/SpinBox.qml10
-rw-r--r--src/imports/controls/universal/qquickuniversalfocusrectangle.cpp2
-rw-r--r--src/imports/controls/universal/qquickuniversalstyle.cpp28
-rw-r--r--src/imports/controls/universal/qtlabsuniversalstyleplugin.cpp4
-rw-r--r--src/imports/controls/universal/universal.pri3
-rw-r--r--src/imports/templates/qtlabstemplatesplugin.cpp2
-rw-r--r--src/templates/qquickapplicationwindow.cpp6
-rw-r--r--src/templates/qquickcombobox.cpp23
-rw-r--r--src/templates/qquickcombobox_p.h2
-rw-r--r--src/templates/qquickpage.cpp279
-rw-r--r--src/templates/qquickpage_p.h102
-rw-r--r--src/templates/templates.pri2
-rw-r--r--tests/auto/controls/data/tst_page.qml118
-rw-r--r--tests/auto/material/data/tst_material.qml107
-rw-r--r--tests/auto/universal/data/tst_universal.qml44
-rw-r--r--tests/manual/gifs/data/qtlabscontrols-menu.qml2
-rw-r--r--tests/manual/testbench/main.qml1
167 files changed, 1361 insertions, 411 deletions
diff --git a/.gitignore b/.gitignore
index 99905f17..c4a2ee8b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,6 +26,7 @@
/tests/manual/testbench/testbench
/tests/auto/snippets/screenshots/*.png
+/tests/manual/gifs/gifs/*.gif
/src/templates/QtLabsTemplates.version
*.so
diff --git a/src/controls/qquickstyle.cpp b/src/controls/qquickstyle.cpp
index 6de4c7a2..7fd6a2f0 100644
--- a/src/controls/qquickstyle.cpp
+++ b/src/controls/qquickstyle.cpp
@@ -44,8 +44,6 @@
QT_BEGIN_NAMESPACE
-static const char *SettingsFilePath = ":/qtlabscontrols.conf";
-
static QQuickStyle *attachedStyle(const QMetaObject *type, QObject *object, bool create = false)
{
if (!object)
@@ -63,33 +61,40 @@ static QQuickStyle *findParentStyle(const QMetaObject *type, QObject *parent)
if (style)
return style;
+ // lookup object parent (window/popup)
+ QObject *grandParent = parent->parent();
+ if (grandParent) {
+ QQuickStyle *style = findParentStyle(type, grandParent);
+ if (style)
+ return style;
+ }
+
QQuickItem *item = qobject_cast<QQuickItem *>(parent);
if (item) {
// lookup parent items
QQuickItem *parent = item->parentItem();
- if (parent)
- return findParentStyle(type, parent);
+ if (parent) {
+ QQuickStyle *style = findParentStyle(type, parent);
+ if (style)
+ return style;
+ }
// fallback to item's window
- return findParentStyle(type, item->window());
+ QQuickStyle *style = findParentStyle(type, item->window());
+ if (style)
+ return style;
}
- // lookup object parent (window/popup)
- if (parent->parent())
- return findParentStyle(type, parent->parent());
-
// fallback to engine (global)
- if (parent) {
- QQmlEngine *engine = qmlEngine(parent);
- if (engine) {
- QByteArray name = QByteArray("_q_") + type->className();
- QQuickStyle *style = engine->property(name).value<QQuickStyle*>();
- if (!style) {
- style = attachedStyle(type, engine, true);
- engine->setProperty(name, QVariant::fromValue(style));
- }
- return style;
+ QQmlEngine *engine = qmlEngine(parent);
+ if (engine) {
+ QByteArray name = QByteArray("_q_") + type->className();
+ QQuickStyle *style = engine->property(name).value<QQuickStyle*>();
+ if (!style) {
+ style = attachedStyle(type, engine, true);
+ engine->setProperty(name, QVariant::fromValue(style));
}
+ return style;
}
return Q_NULLPTR;
@@ -166,7 +171,7 @@ QQuickStyle::~QQuickStyle()
QSharedPointer<QSettings> QQuickStyle::settings(const QString &group)
{
#ifndef QT_NO_SETTINGS
- const QString filePath = QLatin1String(SettingsFilePath);
+ const QString filePath = QStringLiteral(":/qtlabscontrols.conf");
if (QFile::exists(filePath)) {
QFileSelector selector;
QSettings *settings = new QSettings(selector.select(filePath), QSettings::IniFormat);
@@ -203,14 +208,16 @@ void QQuickStyle::setParentStyle(QQuickStyle *style)
void QQuickStyle::init()
{
- if (!parent())
+ QObject *parent = QObject::parent();
+ if (!parent)
return;
- QQuickStyle *parentStyle = findParentStyle(metaObject(), parent()->parent());
+ QQuickItem *parentItem = qobject_cast<QQuickItem *>(parent);
+ QQuickStyle *parentStyle = findParentStyle(metaObject(), parentItem ? parentItem->parentItem() : parent->parent());
if (parentStyle)
setParentStyle(parentStyle);
- const QList<QQuickStyle *> children = findChildStyles(metaObject(), parent());
+ const QList<QQuickStyle *> children = findChildStyles(metaObject(), parent);
for (QQuickStyle *child : children)
child->setParentStyle(this);
}
diff --git a/src/controls/qquickstyleselector.cpp b/src/controls/qquickstyleselector.cpp
index 3be5eb3d..b169ade2 100644
--- a/src/controls/qquickstyleselector.cpp
+++ b/src/controls/qquickstyleselector.cpp
@@ -82,9 +82,9 @@ QString QQuickStyleSelector::select(const QString &filePath) const
static bool isLocalScheme(const QString &file)
{
- bool local = file == QStringLiteral("qrc");
+ bool local = file == QLatin1String("qrc");
#ifdef Q_OS_ANDROID
- local |= file == QStringLiteral("assets");
+ local |= file == QLatin1String("assets");
#endif
return local;
}
diff --git a/src/imports/controls/Page.qml b/src/imports/controls/Page.qml
new file mode 100644
index 00000000..37eb57d0
--- /dev/null
+++ b/src/imports/controls/Page.qml
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Labs Controls module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import Qt.labs.templates 1.0 as T
+
+T.Page {
+ id: control
+
+ //! [contentItem]
+ contentItem: Item { }
+ //! [contentItem]
+
+ //! [background]
+ background: Rectangle {
+ color: "#ffffff"
+ }
+ //! [background]
+}
diff --git a/src/imports/controls/ProgressBar.qml b/src/imports/controls/ProgressBar.qml
index 112f3afb..795fd231 100644
--- a/src/imports/controls/ProgressBar.qml
+++ b/src/imports/controls/ProgressBar.qml
@@ -50,9 +50,9 @@ T.ProgressBar {
indicator: ProgressStrip {
id: strip
x: control.leftPadding
- y: control.topPadding
+ y: control.topPadding + (control.availableHeight - height) / 2
width: control.availableWidth
- height: control.availableHeight
+ height: 6
scale: control.mirrored ? -1 : 1
progress: control.position
indeterminate: control.indeterminate
diff --git a/src/imports/controls/ToolBar.qml b/src/imports/controls/ToolBar.qml
index 3d3fc74c..fe5dbf3f 100644
--- a/src/imports/controls/ToolBar.qml
+++ b/src/imports/controls/ToolBar.qml
@@ -52,7 +52,7 @@ T.ToolBar {
//! [background]
background: Rectangle {
- implicitHeight: 26
+ implicitHeight: 40
color: "#eeeeee"
}
//! [background]
diff --git a/src/imports/controls/ToolButton.qml b/src/imports/controls/ToolButton.qml
index d2b948da..314ce966 100644
--- a/src/imports/controls/ToolButton.qml
+++ b/src/imports/controls/ToolButton.qml
@@ -66,8 +66,8 @@ T.ToolButton {
//! [background]
background: Rectangle {
- implicitWidth: 26
- implicitHeight: 26
+ implicitWidth: 40
+ implicitHeight: 40
color: Qt.darker("#33333333", control.enabled && (control.checked || control.highlighted) ? 1.5 : 1.0)
opacity: control.pressed ? 1.0 : control.enabled && (control.checked || control.highlighted) ? 0.5 : 0
diff --git a/src/imports/controls/controls.pri b/src/imports/controls/controls.pri
index 16ad7f24..32e86f3a 100644
--- a/src/imports/controls/controls.pri
+++ b/src/imports/controls/controls.pri
@@ -12,8 +12,9 @@ QML_CONTROLS = \
Label.qml \
Menu.qml \
MenuItem.qml \
- Pane.qml \
+ Page.qml \
PageIndicator.qml \
+ Pane.qml \
Popup.qml \
ProgressBar.qml \
RadioButton.qml \
diff --git a/src/imports/controls/doc/images/qtlabscalendar-calendarmodel.png b/src/imports/controls/doc/images/qtlabscalendar-calendarmodel.png
new file mode 100644
index 00000000..2bdff335
--- /dev/null
+++ b/src/imports/controls/doc/images/qtlabscalendar-calendarmodel.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscalendar-dayofweekrow-layout.png b/src/imports/controls/doc/images/qtlabscalendar-dayofweekrow-layout.png
index fd4dc065..e0d7ca33 100644
--- a/src/imports/controls/doc/images/qtlabscalendar-dayofweekrow-layout.png
+++ b/src/imports/controls/doc/images/qtlabscalendar-dayofweekrow-layout.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscalendar-dayofweekrow.png b/src/imports/controls/doc/images/qtlabscalendar-dayofweekrow.png
index 2d650a88..7b955c88 100644
--- a/src/imports/controls/doc/images/qtlabscalendar-dayofweekrow.png
+++ b/src/imports/controls/doc/images/qtlabscalendar-dayofweekrow.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscalendar-monthgrid-layout.png b/src/imports/controls/doc/images/qtlabscalendar-monthgrid-layout.png
index c5182644..ae5db0c1 100644
--- a/src/imports/controls/doc/images/qtlabscalendar-monthgrid-layout.png
+++ b/src/imports/controls/doc/images/qtlabscalendar-monthgrid-layout.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscalendar-monthgrid.png b/src/imports/controls/doc/images/qtlabscalendar-monthgrid.png
index 79d0ebc0..13495d05 100644
--- a/src/imports/controls/doc/images/qtlabscalendar-monthgrid.png
+++ b/src/imports/controls/doc/images/qtlabscalendar-monthgrid.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscalendar-weeknumbercolumn-layout.png b/src/imports/controls/doc/images/qtlabscalendar-weeknumbercolumn-layout.png
index f11be89d..09deb30e 100644
--- a/src/imports/controls/doc/images/qtlabscalendar-weeknumbercolumn-layout.png
+++ b/src/imports/controls/doc/images/qtlabscalendar-weeknumbercolumn-layout.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscalendar-weeknumbercolumn.png b/src/imports/controls/doc/images/qtlabscalendar-weeknumbercolumn.png
index 07ecc9f4..db0b94f3 100644
--- a/src/imports/controls/doc/images/qtlabscalendar-weeknumbercolumn.png
+++ b/src/imports/controls/doc/images/qtlabscalendar-weeknumbercolumn.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-busyindicator-background.png b/src/imports/controls/doc/images/qtlabscontrols-busyindicator-background.png
index 3d5d3666..03cf98d0 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-busyindicator-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-busyindicator-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-busyindicator-contentItem.png b/src/imports/controls/doc/images/qtlabscontrols-busyindicator-contentItem.png
index 4c89e096..fb14cb86 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-busyindicator-contentItem.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-busyindicator-contentItem.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-busyindicator.gif b/src/imports/controls/doc/images/qtlabscontrols-busyindicator.gif
index 46633c34..31ab2d1c 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-busyindicator.gif
+++ b/src/imports/controls/doc/images/qtlabscontrols-busyindicator.gif
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-busyindicator.png b/src/imports/controls/doc/images/qtlabscontrols-busyindicator.png
index 12a8a4f8..e631df32 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-busyindicator.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-busyindicator.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-button-background.png b/src/imports/controls/doc/images/qtlabscontrols-button-background.png
index f8e9342c..c2703157 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-button-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-button-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-button-disabled.png b/src/imports/controls/doc/images/qtlabscontrols-button-disabled.png
index 9b9d1eb3..33638d1e 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-button-disabled.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-button-disabled.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-button-focused.png b/src/imports/controls/doc/images/qtlabscontrols-button-focused.png
index 172bf9fe..24d2cd06 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-button-focused.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-button-focused.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-button-label.png b/src/imports/controls/doc/images/qtlabscontrols-button-label.png
index 6875fc06..73d8f2fb 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-button-label.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-button-label.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-button-normal.png b/src/imports/controls/doc/images/qtlabscontrols-button-normal.png
index f59669a2..9a5ea80e 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-button-normal.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-button-normal.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-button-pressed.png b/src/imports/controls/doc/images/qtlabscontrols-button-pressed.png
index c9b14992..c88d57b0 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-button-pressed.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-button-pressed.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-button.gif b/src/imports/controls/doc/images/qtlabscontrols-button.gif
index 9f08f458..89dcba31 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-button.gif
+++ b/src/imports/controls/doc/images/qtlabscontrols-button.gif
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-button.png b/src/imports/controls/doc/images/qtlabscontrols-button.png
index f0a13b8c..d8a39e55 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-button.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-button.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-checkbox-background.png b/src/imports/controls/doc/images/qtlabscontrols-checkbox-background.png
index 81198821..4d24fa2f 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-checkbox-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-checkbox-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-checkbox-checked.png b/src/imports/controls/doc/images/qtlabscontrols-checkbox-checked.png
index f44428e0..8620b0c2 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-checkbox-checked.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-checkbox-checked.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-checkbox-disabled.png b/src/imports/controls/doc/images/qtlabscontrols-checkbox-disabled.png
index ca31061a..63669b29 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-checkbox-disabled.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-checkbox-disabled.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-checkbox-focused.png b/src/imports/controls/doc/images/qtlabscontrols-checkbox-focused.png
index 7847fb9b..ea49c721 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-checkbox-focused.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-checkbox-focused.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-checkbox-indicator.png b/src/imports/controls/doc/images/qtlabscontrols-checkbox-indicator.png
index 7c6148b6..fe6cd7a2 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-checkbox-indicator.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-checkbox-indicator.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-checkbox-label.png b/src/imports/controls/doc/images/qtlabscontrols-checkbox-label.png
index 5bef6df5..d5a1ef2e 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-checkbox-label.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-checkbox-label.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-checkbox-normal.png b/src/imports/controls/doc/images/qtlabscontrols-checkbox-normal.png
index 790ebc93..b185fc99 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-checkbox-normal.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-checkbox-normal.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-checkbox.png b/src/imports/controls/doc/images/qtlabscontrols-checkbox.png
index af9c9e20..a824949c 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-checkbox.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-checkbox.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-combobox-background.png b/src/imports/controls/doc/images/qtlabscontrols-combobox-background.png
index fa296270..1930034b 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-combobox-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-combobox-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-combobox-contentItem.png b/src/imports/controls/doc/images/qtlabscontrols-combobox-contentItem.png
index 9b8e8175..08c7bfc8 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-combobox-contentItem.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-combobox-contentItem.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-combobox-delegate.png b/src/imports/controls/doc/images/qtlabscontrols-combobox-delegate.png
index 88462185..d76776cf 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-combobox-delegate.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-combobox-delegate.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-combobox-popup.png b/src/imports/controls/doc/images/qtlabscontrols-combobox-popup.png
index 0e9eacbf..5cb32247 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-combobox-popup.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-combobox-popup.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-combobox.png b/src/imports/controls/doc/images/qtlabscontrols-combobox.png
index 69fc9c95..e687fb0e 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-combobox.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-combobox.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-dial-background.png b/src/imports/controls/doc/images/qtlabscontrols-dial-background.png
index 38fad583..ca6c9283 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-dial-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-dial-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-dial-handle.png b/src/imports/controls/doc/images/qtlabscontrols-dial-handle.png
index e6fd8cdc..b9a8e0d8 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-dial-handle.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-dial-handle.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-dial.png b/src/imports/controls/doc/images/qtlabscontrols-dial.png
index 4d53c817..dfe37f87 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-dial.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-dial.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-frame-background.png b/src/imports/controls/doc/images/qtlabscontrols-frame-background.png
index e09960fc..75ad77bd 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-frame-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-frame-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-frame-frame.png b/src/imports/controls/doc/images/qtlabscontrols-frame-frame.png
index bfdf9c1b..a379d915 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-frame-frame.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-frame-frame.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-frame.png b/src/imports/controls/doc/images/qtlabscontrols-frame.png
index b844781c..dc14acaf 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-frame.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-frame.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-groupbox-background.png b/src/imports/controls/doc/images/qtlabscontrols-groupbox-background.png
index 36e9aa0f..baec44d5 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-groupbox-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-groupbox-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-groupbox-checkable.png b/src/imports/controls/doc/images/qtlabscontrols-groupbox-checkable.png
index 8b619b5b..9b3f32b1 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-groupbox-checkable.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-groupbox-checkable.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-groupbox-frame.png b/src/imports/controls/doc/images/qtlabscontrols-groupbox-frame.png
index 11b075d7..2ed75011 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-groupbox-frame.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-groupbox-frame.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-groupbox-label.png b/src/imports/controls/doc/images/qtlabscontrols-groupbox-label.png
index 67ccb4c1..ea4dfb32 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-groupbox-label.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-groupbox-label.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-groupbox.png b/src/imports/controls/doc/images/qtlabscontrols-groupbox.png
index 511f2ffd..c0fc92c7 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-groupbox.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-groupbox.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-itemdelegate-background.png b/src/imports/controls/doc/images/qtlabscontrols-itemdelegate-background.png
index a311c109..8a97d8ee 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-itemdelegate-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-itemdelegate-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-itemdelegate-indicator.png b/src/imports/controls/doc/images/qtlabscontrols-itemdelegate-indicator.png
index b458b1a0..029abb00 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-itemdelegate-indicator.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-itemdelegate-indicator.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-itemdelegate-label.png b/src/imports/controls/doc/images/qtlabscontrols-itemdelegate-label.png
index 6b43db0f..89f094c6 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-itemdelegate-label.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-itemdelegate-label.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-itemdelegate.png b/src/imports/controls/doc/images/qtlabscontrols-itemdelegate.png
new file mode 100644
index 00000000..456a0d55
--- /dev/null
+++ b/src/imports/controls/doc/images/qtlabscontrols-itemdelegate.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-label-background.png b/src/imports/controls/doc/images/qtlabscontrols-label-background.png
index ecd081df..34a638d6 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-label-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-label-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-label.png b/src/imports/controls/doc/images/qtlabscontrols-label.png
index c4c53871..961ce3e3 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-label.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-label.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-menu-contentItem.png b/src/imports/controls/doc/images/qtlabscontrols-menu-contentItem.png
index e16e196e..4dcf1fac 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-menu-contentItem.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-menu-contentItem.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-menu.gif b/src/imports/controls/doc/images/qtlabscontrols-menu.gif
new file mode 100644
index 00000000..93a873a3
--- /dev/null
+++ b/src/imports/controls/doc/images/qtlabscontrols-menu.gif
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-menu.png b/src/imports/controls/doc/images/qtlabscontrols-menu.png
index b782b9fe..b6446d39 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-menu.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-menu.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-page-wireframe.png b/src/imports/controls/doc/images/qtlabscontrols-page-wireframe.png
new file mode 100644
index 00000000..d45ae400
--- /dev/null
+++ b/src/imports/controls/doc/images/qtlabscontrols-page-wireframe.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-pane.png b/src/imports/controls/doc/images/qtlabscontrols-pane.png
index ba0c0479..fe534424 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-pane.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-pane.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-progressbar-background.png b/src/imports/controls/doc/images/qtlabscontrols-progressbar-background.png
index 0fd77835..59e81b2b 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-progressbar-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-progressbar-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-progressbar-disabled.png b/src/imports/controls/doc/images/qtlabscontrols-progressbar-disabled.png
index 4baf5c83..9ce19e92 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-progressbar-disabled.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-progressbar-disabled.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-progressbar-indicator.png b/src/imports/controls/doc/images/qtlabscontrols-progressbar-indicator.png
index 02e888ed..9ce19e92 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-progressbar-indicator.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-progressbar-indicator.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-progressbar-normal.png b/src/imports/controls/doc/images/qtlabscontrols-progressbar-normal.png
index 783d721d..9ce19e92 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-progressbar-normal.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-progressbar-normal.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-radiobutton-background.png b/src/imports/controls/doc/images/qtlabscontrols-radiobutton-background.png
index 3ee9590e..30295394 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-radiobutton-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-radiobutton-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-radiobutton-checked.png b/src/imports/controls/doc/images/qtlabscontrols-radiobutton-checked.png
index 9f71b6b6..8f5af513 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-radiobutton-checked.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-radiobutton-checked.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-radiobutton-disabled.png b/src/imports/controls/doc/images/qtlabscontrols-radiobutton-disabled.png
index f7fbcb7c..626cd616 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-radiobutton-disabled.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-radiobutton-disabled.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-radiobutton-focused.png b/src/imports/controls/doc/images/qtlabscontrols-radiobutton-focused.png
index dfb8d51e..797e50a9 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-radiobutton-focused.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-radiobutton-focused.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-radiobutton-indicator.png b/src/imports/controls/doc/images/qtlabscontrols-radiobutton-indicator.png
index f9e91709..0d78a0d5 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-radiobutton-indicator.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-radiobutton-indicator.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-radiobutton-label.png b/src/imports/controls/doc/images/qtlabscontrols-radiobutton-label.png
index 16c0ee08..457555b7 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-radiobutton-label.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-radiobutton-label.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-radiobutton-normal.png b/src/imports/controls/doc/images/qtlabscontrols-radiobutton-normal.png
index 5a2d4bca..f8d0828b 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-radiobutton-normal.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-radiobutton-normal.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-radiobutton.png b/src/imports/controls/doc/images/qtlabscontrols-radiobutton.png
index 74f7cc73..6c217968 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-radiobutton.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-radiobutton.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-rangeslider-background.png b/src/imports/controls/doc/images/qtlabscontrols-rangeslider-background.png
index 5b3c603b..c045fdbb 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-rangeslider-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-rangeslider-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-rangeslider-disabled.png b/src/imports/controls/doc/images/qtlabscontrols-rangeslider-disabled.png
index 0194a240..abb033c2 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-rangeslider-disabled.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-rangeslider-disabled.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-rangeslider-first-handle-focused.png b/src/imports/controls/doc/images/qtlabscontrols-rangeslider-first-handle-focused.png
index 390a6399..abb033c2 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-rangeslider-first-handle-focused.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-rangeslider-first-handle-focused.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-rangeslider-first-handle.png b/src/imports/controls/doc/images/qtlabscontrols-rangeslider-first-handle.png
index e04ed6df..fb246db3 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-rangeslider-first-handle.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-rangeslider-first-handle.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-rangeslider-normal.png b/src/imports/controls/doc/images/qtlabscontrols-rangeslider-normal.png
index 7032728a..abb033c2 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-rangeslider-normal.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-rangeslider-normal.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-rangeslider-second-handle-focused.png b/src/imports/controls/doc/images/qtlabscontrols-rangeslider-second-handle-focused.png
index 803f8141..abb033c2 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-rangeslider-second-handle-focused.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-rangeslider-second-handle-focused.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-rangeslider-second-handle.png b/src/imports/controls/doc/images/qtlabscontrols-rangeslider-second-handle.png
index 0fe3d630..a33a6de2 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-rangeslider-second-handle.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-rangeslider-second-handle.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-rangeslider-track.png b/src/imports/controls/doc/images/qtlabscontrols-rangeslider-track.png
index 685a9d44..63da8673 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-rangeslider-track.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-rangeslider-track.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-rangeslider.gif b/src/imports/controls/doc/images/qtlabscontrols-rangeslider.gif
index a885d529..394e8085 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-rangeslider.gif
+++ b/src/imports/controls/doc/images/qtlabscontrols-rangeslider.gif
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-rangeslider.png b/src/imports/controls/doc/images/qtlabscontrols-rangeslider.png
index c7772a40..abb033c2 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-rangeslider.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-rangeslider.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-scrollbar-background.png b/src/imports/controls/doc/images/qtlabscontrols-scrollbar-background.png
index 770f546c..0b1aa171 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-scrollbar-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-scrollbar-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-scrollbar-handle.png b/src/imports/controls/doc/images/qtlabscontrols-scrollbar-handle.png
index aafa90a7..5d916e66 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-scrollbar-handle.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-scrollbar-handle.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-scrollbar.png b/src/imports/controls/doc/images/qtlabscontrols-scrollbar.png
index 65db9ad8..b1abafb5 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-scrollbar.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-scrollbar.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-scrollindicator-background.png b/src/imports/controls/doc/images/qtlabscontrols-scrollindicator-background.png
index e8947aa0..e9fa04c7 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-scrollindicator-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-scrollindicator-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-scrollindicator-indicator.png b/src/imports/controls/doc/images/qtlabscontrols-scrollindicator-indicator.png
index 9d969f16..99266362 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-scrollindicator-indicator.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-scrollindicator-indicator.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-slider-background.png b/src/imports/controls/doc/images/qtlabscontrols-slider-background.png
index 35fb12ca..23a754c3 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-slider-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-slider-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-slider-disabled.png b/src/imports/controls/doc/images/qtlabscontrols-slider-disabled.png
index 7d4584f8..2e27a604 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-slider-disabled.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-slider-disabled.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-slider-focused.png b/src/imports/controls/doc/images/qtlabscontrols-slider-focused.png
index 7f9ad18b..2e27a604 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-slider-focused.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-slider-focused.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-slider-handle.png b/src/imports/controls/doc/images/qtlabscontrols-slider-handle.png
index 7878e0f8..7729ef07 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-slider-handle.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-slider-handle.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-slider-normal.png b/src/imports/controls/doc/images/qtlabscontrols-slider-normal.png
index dac102de..2e27a604 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-slider-normal.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-slider-normal.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-slider-track.png b/src/imports/controls/doc/images/qtlabscontrols-slider-track.png
index 868fa420..09869bf1 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-slider-track.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-slider-track.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-slider.gif b/src/imports/controls/doc/images/qtlabscontrols-slider.gif
index 59c94796..7cb84b56 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-slider.gif
+++ b/src/imports/controls/doc/images/qtlabscontrols-slider.gif
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-slider.png b/src/imports/controls/doc/images/qtlabscontrols-slider.png
index 9cbb194b..2e27a604 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-slider.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-slider.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-spinbox-background.png b/src/imports/controls/doc/images/qtlabscontrols-spinbox-background.png
index 0224e6f1..74fbab6e 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-spinbox-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-spinbox-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-spinbox-contentItem.png b/src/imports/controls/doc/images/qtlabscontrols-spinbox-contentItem.png
index 0e39d92f..81d549c0 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-spinbox-contentItem.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-spinbox-contentItem.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-spinbox-down.png b/src/imports/controls/doc/images/qtlabscontrols-spinbox-down.png
index a6bbecdf..e7c43101 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-spinbox-down.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-spinbox-down.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-spinbox-textual.png b/src/imports/controls/doc/images/qtlabscontrols-spinbox-textual.png
index abf4c7f2..4361c492 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-spinbox-textual.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-spinbox-textual.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-spinbox-up.png b/src/imports/controls/doc/images/qtlabscontrols-spinbox-up.png
index 3c6c870b..b9992471 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-spinbox-up.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-spinbox-up.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-spinbox.png b/src/imports/controls/doc/images/qtlabscontrols-spinbox.png
index 39fa813a..909fbda6 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-spinbox.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-spinbox.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-swipeview-indicator.png b/src/imports/controls/doc/images/qtlabscontrols-swipeview-indicator.png
new file mode 100644
index 00000000..91786964
--- /dev/null
+++ b/src/imports/controls/doc/images/qtlabscontrols-swipeview-indicator.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-switch-background.png b/src/imports/controls/doc/images/qtlabscontrols-switch-background.png
index 5b10cffd..c3cf20f3 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-switch-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-switch-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-switch-checked.png b/src/imports/controls/doc/images/qtlabscontrols-switch-checked.png
index 88036efb..7c678417 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-switch-checked.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-switch-checked.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-switch-disabled.png b/src/imports/controls/doc/images/qtlabscontrols-switch-disabled.png
index bf266c52..15ff76e6 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-switch-disabled.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-switch-disabled.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-switch-focused.png b/src/imports/controls/doc/images/qtlabscontrols-switch-focused.png
index 84108e3f..9e973d0e 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-switch-focused.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-switch-focused.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-switch-indicator.png b/src/imports/controls/doc/images/qtlabscontrols-switch-indicator.png
index 97e236a2..02b88dde 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-switch-indicator.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-switch-indicator.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-switch-label.png b/src/imports/controls/doc/images/qtlabscontrols-switch-label.png
index 9fc5ad3b..50f608ab 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-switch-label.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-switch-label.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-switch-normal.png b/src/imports/controls/doc/images/qtlabscontrols-switch-normal.png
index 0297e98e..aac440a0 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-switch-normal.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-switch-normal.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-switch.gif b/src/imports/controls/doc/images/qtlabscontrols-switch.gif
index b2e1b548..5f956304 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-switch.gif
+++ b/src/imports/controls/doc/images/qtlabscontrols-switch.gif
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-switch.png b/src/imports/controls/doc/images/qtlabscontrols-switch.png
index 5c8901c4..b9d0812e 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-switch.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-switch.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-tabbar.gif b/src/imports/controls/doc/images/qtlabscontrols-tabbar.gif
new file mode 100644
index 00000000..0dccecb3
--- /dev/null
+++ b/src/imports/controls/doc/images/qtlabscontrols-tabbar.gif
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-tabbar.png b/src/imports/controls/doc/images/qtlabscontrols-tabbar.png
index e3f9d3cd..100092f8 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-tabbar.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-tabbar.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-tabbutton.png b/src/imports/controls/doc/images/qtlabscontrols-tabbutton.png
index 1e2948f1..ab05c1db 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-tabbutton.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-tabbutton.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-textarea.png b/src/imports/controls/doc/images/qtlabscontrols-textarea.png
index b4183df9..f468bfd4 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-textarea.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-textarea.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-textfield-background.png b/src/imports/controls/doc/images/qtlabscontrols-textfield-background.png
index a2908200..e345124d 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-textfield-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-textfield-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-textfield-disabled.png b/src/imports/controls/doc/images/qtlabscontrols-textfield-disabled.png
index bb5b779e..55034be2 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-textfield-disabled.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-textfield-disabled.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-textfield-focused.png b/src/imports/controls/doc/images/qtlabscontrols-textfield-focused.png
index 5d8592c1..bf5ee32a 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-textfield-focused.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-textfield-focused.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-textfield-normal.png b/src/imports/controls/doc/images/qtlabscontrols-textfield-normal.png
index 26ad9c11..02bb465a 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-textfield-normal.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-textfield-normal.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-textfield.png b/src/imports/controls/doc/images/qtlabscontrols-textfield.png
index 14092c69..9ea62acb 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-textfield.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-textfield.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-toolbar-background.png b/src/imports/controls/doc/images/qtlabscontrols-toolbar-background.png
index 28d4fd98..12b4c348 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-toolbar-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-toolbar-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-toolbar-frame.png b/src/imports/controls/doc/images/qtlabscontrols-toolbar-frame.png
index 28d4fd98..12b4c348 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-toolbar-frame.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-toolbar-frame.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-toolbar.png b/src/imports/controls/doc/images/qtlabscontrols-toolbar.png
index ee535b1a..3e64b4e4 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-toolbar.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-toolbar.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-toolbutton-background.png b/src/imports/controls/doc/images/qtlabscontrols-toolbutton-background.png
index fd105fee..8dd64031 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-toolbutton-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-toolbutton-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-toolbutton-label.png b/src/imports/controls/doc/images/qtlabscontrols-toolbutton-label.png
index 7aae8dc8..f4797098 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-toolbutton-label.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-toolbutton-label.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-toolbutton.png b/src/imports/controls/doc/images/qtlabscontrols-toolbutton.png
index d608e4de..b350cdba 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-toolbutton.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-toolbutton.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-tumbler-background.png b/src/imports/controls/doc/images/qtlabscontrols-tumbler-background.png
index aa736615..24c200de 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-tumbler-background.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-tumbler-background.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-tumbler-contentItem.png b/src/imports/controls/doc/images/qtlabscontrols-tumbler-contentItem.png
index aa736615..24c200de 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-tumbler-contentItem.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-tumbler-contentItem.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-tumbler-delegate.png b/src/imports/controls/doc/images/qtlabscontrols-tumbler-delegate.png
index 77c51efd..d274d444 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-tumbler-delegate.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-tumbler-delegate.png
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-tumbler-wrap.gif b/src/imports/controls/doc/images/qtlabscontrols-tumbler-wrap.gif
index 2a7e435d..4821a4e8 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-tumbler-wrap.gif
+++ b/src/imports/controls/doc/images/qtlabscontrols-tumbler-wrap.gif
Binary files differ
diff --git a/src/imports/controls/doc/images/qtlabscontrols-tumbler.png b/src/imports/controls/doc/images/qtlabscontrols-tumbler.png
index 01d4f2d3..e22330a6 100644
--- a/src/imports/controls/doc/images/qtlabscontrols-tumbler.png
+++ b/src/imports/controls/doc/images/qtlabscontrols-tumbler.png
Binary files differ
diff --git a/src/imports/controls/doc/src/qtlabscontrols-containers.qdoc b/src/imports/controls/doc/src/qtlabscontrols-containers.qdoc
index a627a26a..803695c9 100644
--- a/src/imports/controls/doc/src/qtlabscontrols-containers.qdoc
+++ b/src/imports/controls/doc/src/qtlabscontrols-containers.qdoc
@@ -57,6 +57,12 @@
\l GroupBox is used to layout a logical group of controls together,
within a titled visual frame.
+ \section1 Page Control
+
+ \image qtlabscontrols-page-wireframe.png
+
+ \l Page provides page-specific header and footer items.
+
\section1 Pane Control
\image qtlabscontrols-pane.png
diff --git a/src/imports/controls/doc/src/qtlabscontrols-material.qdoc b/src/imports/controls/doc/src/qtlabscontrols-material.qdoc
index c963cb28..f9b6a008 100644
--- a/src/imports/controls/doc/src/qtlabscontrols-material.qdoc
+++ b/src/imports/controls/doc/src/qtlabscontrols-material.qdoc
@@ -37,7 +37,7 @@
\section1 Attached Properties
\list
- \li \l {accent-attached-prop}{\b accent} : enumeration
+ \li \l {accent-attached-prop}{\b accent} : color
\li \l {theme-attached-prop}{\b theme} : enumeration
\endlist
@@ -125,11 +125,15 @@
\section1 Attached Property Documentation
- \styleproperty {Material.accent} {enumeration} {accent-attached-prop}
+ \styleproperty {Material.accent} {color} {accent-attached-prop}
\target accent-attached-prop
This attached property holds the accent color of the theme. The property
can be attached to any window or item. The value is propagated to children.
+ Even though the accent can be any \l {colorbasictypedocs}{color}, it is
+ recommended to use one of the pre-defined accents that have been designed
+ to work well with the rest of the Material style palette:
+
Available accents:
\value Material.Red Red (#F44336)
\value Material.Pink Pink (#E91E63)
diff --git a/src/imports/controls/material/Button.qml b/src/imports/controls/material/Button.qml
index 2644a0aa..1256e3e1 100644
--- a/src/imports/controls/material/Button.qml
+++ b/src/imports/controls/material/Button.qml
@@ -48,7 +48,8 @@ T.Button {
label ? label.implicitHeight + topPadding + bottomPadding : 0)
baselineOffset: label ? label.y + label.baselineOffset : 0
- padding: 6
+ // external vertical padding is 6 (to increase touch area)
+ padding: 12
leftPadding: 8
rightPadding: 8
@@ -71,13 +72,15 @@ T.Button {
//! [background]
background: Item {
- implicitWidth: 36
- implicitHeight: 36
+ implicitWidth: 64
+ implicitHeight: 48
Rectangle {
id: rect
+ // external vertical padding is 6 (to increase touch area)
+ y: 6
width: parent.width
- height: parent.height
+ height: parent.height - 12
radius: 2
color: !control.enabled ? (control.highlighted ? control.Material.raisedHighlightedButtonDisabledColor : control.Material.raisedButtonDisabledColor) :
(control.pressed ? (control.highlighted ? control.Material.raisedHighlightedButtonPressColor : control.Material.raisedButtonPressColor) :
@@ -94,8 +97,10 @@ T.Button {
DropShadow {
source: rect
visible: control.enabled
- width: parent.width
- height: parent.height
+ x: rect.x
+ y: rect.y
+ width: rect.width
+ height: rect.height
verticalOffset: 1
color: control.Material.dropShadowColor
samples: control.pressed ? 15 : 9
diff --git a/src/imports/controls/material/Page.qml b/src/imports/controls/material/Page.qml
new file mode 100644
index 00000000..4ff3541f
--- /dev/null
+++ b/src/imports/controls/material/Page.qml
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Labs Controls module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import Qt.labs.templates 1.0 as T
+import Qt.labs.controls.material 1.0
+
+T.Page {
+ id: control
+
+ //! [contentItem]
+ contentItem: Item { }
+ //! [contentItem]
+
+ //! [background]
+ background: Rectangle {
+ color: control.Material.backgroundColor
+ }
+ //! [background]
+}
diff --git a/src/imports/controls/material/SpinBox.qml b/src/imports/controls/material/SpinBox.qml
index be51d06c..5d2044e6 100644
--- a/src/imports/controls/material/SpinBox.qml
+++ b/src/imports/controls/material/SpinBox.qml
@@ -135,7 +135,7 @@ T.SpinBox {
Rectangle {
x: parent.width / 2 - width / 2
y: parent.y + parent.height - height
- width: Math.max(26, control.contentItem.implicitWidth)
+ width: control.availableWidth
height: control.activeFocus ? 2 : 1
color: control.activeFocus ? control.Material.accentColor : control.Material.hintTextColor
}
diff --git a/src/imports/controls/material/ToolBar.qml b/src/imports/controls/material/ToolBar.qml
index 50a4ac67..83f07be1 100644
--- a/src/imports/controls/material/ToolBar.qml
+++ b/src/imports/controls/material/ToolBar.qml
@@ -53,7 +53,7 @@ T.ToolBar {
//! [background]
background: Rectangle {
- implicitHeight: 40
+ implicitHeight: 48
color: control.Material.accentColor
}
//! [background]
diff --git a/src/imports/controls/material/ToolButton.qml b/src/imports/controls/material/ToolButton.qml
index e097f8e0..ebdc36f2 100644
--- a/src/imports/controls/material/ToolButton.qml
+++ b/src/imports/controls/material/ToolButton.qml
@@ -67,8 +67,8 @@ T.ToolButton {
//! [background]
background: Rectangle {
- implicitWidth: 40
- implicitHeight: 40
+ implicitWidth: 48
+ implicitHeight: 48
color: control.pressed ? control.Material.flatButtonPressColor : control.Material.flatButtonFocusColor
visible: control.enabled && (control.pressed || control.activeFocus || control.checked || control.highlighted)
diff --git a/src/imports/controls/material/material.pri b/src/imports/controls/material/material.pri
index bc5f85d1..bcdc0de9 100644
--- a/src/imports/controls/material/material.pri
+++ b/src/imports/controls/material/material.pri
@@ -22,8 +22,9 @@ QML_FILES += \
$$PWD/Label.qml \
$$PWD/Menu.qml \
$$PWD/MenuItem.qml \
- $$PWD/Pane.qml \
+ $$PWD/Page.qml \
$$PWD/PageIndicator.qml \
+ $$PWD/Pane.qml \
$$PWD/Popup.qml \
$$PWD/ProgressBar.qml \
$$PWD/RadioButton.qml \
diff --git a/src/imports/controls/material/qquickmaterialstyle.cpp b/src/imports/controls/material/qquickmaterialstyle.cpp
index 92e4e15d..04e96480 100644
--- a/src/imports/controls/material/qquickmaterialstyle.cpp
+++ b/src/imports/controls/material/qquickmaterialstyle.cpp
@@ -36,7 +36,9 @@
#include "qquickmaterialstyle_p.h"
+#include <QtCore/qdebug.h>
#include <QtCore/qsettings.h>
+#include <QtQml/qqmlinfo.h>
#include <QtLabsControls/private/qquickstyle_p.h>
QT_BEGIN_NAMESPACE
@@ -59,331 +61,332 @@ QT_BEGIN_NAMESPACE
static const QRgb colors[][14] = {
// Red
{
- 0xFFEBEE, // Shade50
- 0xFFCDD2, // Shade100
- 0xEF9A9A, // Shade200
- 0xE57373, // Shade300
- 0xEF5350, // Shade400
- 0xF44336, // Shade500
- 0xE53935, // Shade600
- 0xD32F2F, // Shade700
- 0xC62828, // Shade800
- 0xB71C1C, // Shade900
- 0xFF8A80, // ShadeA100
- 0xFF5252, // ShadeA200
- 0xFF1744, // ShadeA400
- 0xD50000 // ShadeA700
+ 0xFFFFEBEE, // Shade50
+ 0xFFFFCDD2, // Shade100
+ 0xFFEF9A9A, // Shade200
+ 0xFFE57373, // Shade300
+ 0xFFEF5350, // Shade400
+ 0xFFF44336, // Shade500
+ 0xFFE53935, // Shade600
+ 0xFFD32F2F, // Shade700
+ 0xFFC62828, // Shade800
+ 0xFFB71C1C, // Shade900
+ 0xFFFF8A80, // ShadeA100
+ 0xFFFF5252, // ShadeA200
+ 0xFFFF1744, // ShadeA400
+ 0xFFD50000 // ShadeA700
},
// Pink
{
- 0xFCE4EC, // Shade50
- 0xF8BBD0, // Shade100
- 0xF48FB1, // Shade200
- 0xF06292, // Shade300
- 0xEC407A, // Shade400
- 0xE91E63, // Shade500
- 0xD81B60, // Shade600
- 0xC2185B, // Shade700
- 0xAD1457, // Shade800
- 0x880E4F, // Shade900
- 0xFF80AB, // ShadeA100
- 0xFF4081, // ShadeA200
- 0xF50057, // ShadeA400
- 0xC51162 // ShadeA700
+ 0xFFFCE4EC, // Shade50
+ 0xFFF8BBD0, // Shade100
+ 0xFFF48FB1, // Shade200
+ 0xFFF06292, // Shade300
+ 0xFFEC407A, // Shade400
+ 0xFFE91E63, // Shade500
+ 0xFFD81B60, // Shade600
+ 0xFFC2185B, // Shade700
+ 0xFFAD1457, // Shade800
+ 0xFF880E4F, // Shade900
+ 0xFFFF80AB, // ShadeA100
+ 0xFFFF4081, // ShadeA200
+ 0xFFF50057, // ShadeA400
+ 0xFFC51162 // ShadeA700
},
// Purple
{
- 0xF3E5F5, // Shade50
- 0xE1BEE7, // Shade100
- 0xCE93D8, // Shade200
- 0xBA68C8, // Shade300
- 0xAB47BC, // Shade400
- 0x9C27B0, // Shade500
- 0x8E24AA, // Shade600
- 0x7B1FA2, // Shade700
- 0x6A1B9A, // Shade800
- 0x4A148C, // Shade900
- 0xEA80FC, // ShadeA100
- 0xE040FB, // ShadeA200
- 0xD500F9, // ShadeA400
- 0xAA00FF // ShadeA700
+ 0xFFF3E5F5, // Shade50
+ 0xFFE1BEE7, // Shade100
+ 0xFFCE93D8, // Shade200
+ 0xFFBA68C8, // Shade300
+ 0xFFAB47BC, // Shade400
+ 0xFF9C27B0, // Shade500
+ 0xFF8E24AA, // Shade600
+ 0xFF7B1FA2, // Shade700
+ 0xFF6A1B9A, // Shade800
+ 0xFF4A148C, // Shade900
+ 0xFFEA80FC, // ShadeA100
+ 0xFFE040FB, // ShadeA200
+ 0xFFD500F9, // ShadeA400
+ 0xFFAA00FF // ShadeA700
},
// DeepPurple
{
- 0xEDE7F6, // Shade50
- 0xD1C4E9, // Shade100
- 0xB39DDB, // Shade200
- 0x9575CD, // Shade300
- 0x7E57C2, // Shade400
- 0x673AB7, // Shade500
- 0x5E35B1, // Shade600
- 0x512DA8, // Shade700
- 0x4527A0, // Shade800
- 0x311B92, // Shade900
- 0xB388FF, // ShadeA100
- 0x7C4DFF, // ShadeA200
- 0x651FFF, // ShadeA400
- 0x6200EA // ShadeA700
+ 0xFFEDE7F6, // Shade50
+ 0xFFD1C4E9, // Shade100
+ 0xFFB39DDB, // Shade200
+ 0xFF9575CD, // Shade300
+ 0xFF7E57C2, // Shade400
+ 0xFF673AB7, // Shade500
+ 0xFF5E35B1, // Shade600
+ 0xFF512DA8, // Shade700
+ 0xFF4527A0, // Shade800
+ 0xFF311B92, // Shade900
+ 0xFFB388FF, // ShadeA100
+ 0xFF7C4DFF, // ShadeA200
+ 0xFF651FFF, // ShadeA400
+ 0xFF6200EA // ShadeA700
},
// Indigo
{
- 0xE8EAF6, // Shade50
- 0xC5CAE9, // Shade100
- 0x9FA8DA, // Shade200
- 0x7986CB, // Shade300
- 0x5C6BC0, // Shade400
- 0x3F51B5, // Shade500
- 0x3949AB, // Shade600
- 0x303F9F, // Shade700
- 0x283593, // Shade800
- 0x1A237E, // Shade900
- 0x8C9EFF, // ShadeA100
- 0x536DFE, // ShadeA200
- 0x3D5AFE, // ShadeA400
- 0x304FFE // ShadeA700
+ 0xFFE8EAF6, // Shade50
+ 0xFFC5CAE9, // Shade100
+ 0xFF9FA8DA, // Shade200
+ 0xFF7986CB, // Shade300
+ 0xFF5C6BC0, // Shade400
+ 0xFF3F51B5, // Shade500
+ 0xFF3949AB, // Shade600
+ 0xFF303F9F, // Shade700
+ 0xFF283593, // Shade800
+ 0xFF1A237E, // Shade900
+ 0xFF8C9EFF, // ShadeA100
+ 0xFF536DFE, // ShadeA200
+ 0xFF3D5AFE, // ShadeA400
+ 0xFF304FFE // ShadeA700
},
// Blue
{
- 0xE3F2FD, // Shade50
- 0xBBDEFB, // Shade100
- 0x90CAF9, // Shade200
- 0x64B5F6, // Shade300
- 0x42A5F5, // Shade400
- 0x2196F3, // Shade500
- 0x1E88E5, // Shade600
- 0x1976D2, // Shade700
- 0x1565C0, // Shade800
- 0x0D47A1, // Shade900
- 0x82B1FF, // ShadeA100
- 0x448AFF, // ShadeA200
- 0x2979FF, // ShadeA400
- 0x2962FF // ShadeA700
+ 0xFFE3F2FD, // Shade50
+ 0xFFBBDEFB, // Shade100
+ 0xFF90CAF9, // Shade200
+ 0xFF64B5F6, // Shade300
+ 0xFF42A5F5, // Shade400
+ 0xFF2196F3, // Shade500
+ 0xFF1E88E5, // Shade600
+ 0xFF1976D2, // Shade700
+ 0xFF1565C0, // Shade800
+ 0xFF0D47A1, // Shade900
+ 0xFF82B1FF, // ShadeA100
+ 0xFF448AFF, // ShadeA200
+ 0xFF2979FF, // ShadeA400
+ 0xFF2962FF // ShadeA700
},
// LightBlue
{
- 0xE1F5FE, // Shade50
- 0xB3E5FC, // Shade100
- 0x81D4FA, // Shade200
- 0x4FC3F7, // Shade300
- 0x29B6F6, // Shade400
- 0x03A9F4, // Shade500
- 0x039BE5, // Shade600
- 0x0288D1, // Shade700
- 0x0277BD, // Shade800
- 0x01579B, // Shade900
- 0x80D8FF, // ShadeA100
- 0x40C4FF, // ShadeA200
- 0x00B0FF, // ShadeA400
- 0x0091EA // ShadeA700
+ 0xFFE1F5FE, // Shade50
+ 0xFFB3E5FC, // Shade100
+ 0xFF81D4FA, // Shade200
+ 0xFF4FC3F7, // Shade300
+ 0xFF29B6F6, // Shade400
+ 0xFF03A9F4, // Shade500
+ 0xFF039BE5, // Shade600
+ 0xFF0288D1, // Shade700
+ 0xFF0277BD, // Shade800
+ 0xFF01579B, // Shade900
+ 0xFF80D8FF, // ShadeA100
+ 0xFF40C4FF, // ShadeA200
+ 0xFF00B0FF, // ShadeA400
+ 0xFF0091EA // ShadeA700
},
// Cyan
{
- 0xE0F7FA, // Shade50
- 0xB2EBF2, // Shade100
- 0x80DEEA, // Shade200
- 0x4DD0E1, // Shade300
- 0x26C6DA, // Shade400
- 0x00BCD4, // Shade500
- 0x00ACC1, // Shade600
- 0x0097A7, // Shade700
- 0x00838F, // Shade800
- 0x006064, // Shade900
- 0x84FFFF, // ShadeA100
- 0x18FFFF, // ShadeA200
- 0x00E5FF, // ShadeA400
- 0x00B8D4 // ShadeA700
+ 0xFFE0F7FA, // Shade50
+ 0xFFB2EBF2, // Shade100
+ 0xFF80DEEA, // Shade200
+ 0xFF4DD0E1, // Shade300
+ 0xFF26C6DA, // Shade400
+ 0xFF00BCD4, // Shade500
+ 0xFF00ACC1, // Shade600
+ 0xFF0097A7, // Shade700
+ 0xFF00838F, // Shade800
+ 0xFF006064, // Shade900
+ 0xFF84FFFF, // ShadeA100
+ 0xFF18FFFF, // ShadeA200
+ 0xFF00E5FF, // ShadeA400
+ 0xFF00B8D4 // ShadeA700
},
// Teal
{
- 0xE0F2F1, // Shade50
- 0xB2DFDB, // Shade100
- 0x80CBC4, // Shade200
- 0x4DB6AC, // Shade300
- 0x26A69A, // Shade400
- 0x009688, // Shade500
- 0x00897B, // Shade600
- 0x00796B, // Shade700
- 0x00695C, // Shade800
- 0x004D40, // Shade900
- 0xA7FFEB, // ShadeA100
- 0x64FFDA, // ShadeA200
- 0x1DE9B6, // ShadeA400
- 0x00BFA5 // ShadeA700
+ 0xFFE0F2F1, // Shade50
+ 0xFFB2DFDB, // Shade100
+ 0xFF80CBC4, // Shade200
+ 0xFF4DB6AC, // Shade300
+ 0xFF26A69A, // Shade400
+ 0xFF009688, // Shade500
+ 0xFF00897B, // Shade600
+ 0xFF00796B, // Shade700
+ 0xFF00695C, // Shade800
+ 0xFF004D40, // Shade900
+ 0xFFA7FFEB, // ShadeA100
+ 0xFF64FFDA, // ShadeA200
+ 0xFF1DE9B6, // ShadeA400
+ 0xFF00BFA5 // ShadeA700
},
// Green
{
- 0xE8F5E9, // Shade50
- 0xC8E6C9, // Shade100
- 0xA5D6A7, // Shade200
- 0x81C784, // Shade300
- 0x66BB6A, // Shade400
- 0x4CAF50, // Shade500
- 0x43A047, // Shade600
- 0x388E3C, // Shade700
- 0x2E7D32, // Shade800
- 0x1B5E20, // Shade900
- 0xB9F6CA, // ShadeA100
- 0x69F0AE, // ShadeA200
- 0x00E676, // ShadeA400
- 0x00C853 // ShadeA700
+ 0xFFE8F5E9, // Shade50
+ 0xFFC8E6C9, // Shade100
+ 0xFFA5D6A7, // Shade200
+ 0xFF81C784, // Shade300
+ 0xFF66BB6A, // Shade400
+ 0xFF4CAF50, // Shade500
+ 0xFF43A047, // Shade600
+ 0xFF388E3C, // Shade700
+ 0xFF2E7D32, // Shade800
+ 0xFF1B5E20, // Shade900
+ 0xFFB9F6CA, // ShadeA100
+ 0xFF69F0AE, // ShadeA200
+ 0xFF00E676, // ShadeA400
+ 0xFF00C853 // ShadeA700
},
// LightGreen
{
- 0xF1F8E9, // Shade50
- 0xDCEDC8, // Shade100
- 0xC5E1A5, // Shade200
- 0xAED581, // Shade300
- 0x9CCC65, // Shade400
- 0x8BC34A, // Shade500
- 0x7CB342, // Shade600
- 0x689F38, // Shade700
- 0x558B2F, // Shade800
- 0x33691E, // Shade900
- 0xCCFF90, // ShadeA100
- 0xB2FF59, // ShadeA200
- 0x76FF03, // ShadeA400
- 0x64DD17 // ShadeA700
+ 0xFFF1F8E9, // Shade50
+ 0xFFDCEDC8, // Shade100
+ 0xFFC5E1A5, // Shade200
+ 0xFFAED581, // Shade300
+ 0xFF9CCC65, // Shade400
+ 0xFF8BC34A, // Shade500
+ 0xFF7CB342, // Shade600
+ 0xFF689F38, // Shade700
+ 0xFF558B2F, // Shade800
+ 0xFF33691E, // Shade900
+ 0xFFCCFF90, // ShadeA100
+ 0xFFB2FF59, // ShadeA200
+ 0xFF76FF03, // ShadeA400
+ 0xFF64DD17 // ShadeA700
},
// Lime
{
- 0xF9FBE7, // Shade50
- 0xF0F4C3, // Shade100
- 0xE6EE9C, // Shade200
- 0xDCE775, // Shade300
- 0xD4E157, // Shade400
- 0xCDDC39, // Shade500
- 0xC0CA33, // Shade600
- 0xAFB42B, // Shade700
- 0x9E9D24, // Shade800
- 0x827717, // Shade900
- 0xF4FF81, // ShadeA100
- 0xEEFF41, // ShadeA200
- 0xC6FF00, // ShadeA400
- 0xAEEA00 // ShadeA700
+ 0xFFF9FBE7, // Shade50
+ 0xFFF0F4C3, // Shade100
+ 0xFFE6EE9C, // Shade200
+ 0xFFDCE775, // Shade300
+ 0xFFD4E157, // Shade400
+ 0xFFCDDC39, // Shade500
+ 0xFFC0CA33, // Shade600
+ 0xFFAFB42B, // Shade700
+ 0xFF9E9D24, // Shade800
+ 0xFF827717, // Shade900
+ 0xFFF4FF81, // ShadeA100
+ 0xFFEEFF41, // ShadeA200
+ 0xFFC6FF00, // ShadeA400
+ 0xFFAEEA00 // ShadeA700
},
// Yellow
{
- 0xFFFDE7, // Shade50
- 0xFFF9C4, // Shade100
- 0xFFF59D, // Shade200
- 0xFFF176, // Shade300
- 0xFFEE58, // Shade400
- 0xFFEB3B, // Shade500
- 0xFDD835, // Shade600
- 0xFBC02D, // Shade700
- 0xF9A825, // Shade800
- 0xF57F17, // Shade900
- 0xFFFF8D, // ShadeA100
- 0xFFFF00, // ShadeA200
- 0xFFEA00, // ShadeA400
- 0xFFD600 // ShadeA700
+ 0xFFFFFDE7, // Shade50
+ 0xFFFFF9C4, // Shade100
+ 0xFFFFF59D, // Shade200
+ 0xFFFFF176, // Shade300
+ 0xFFFFEE58, // Shade400
+ 0xFFFFEB3B, // Shade500
+ 0xFFFDD835, // Shade600
+ 0xFFFBC02D, // Shade700
+ 0xFFF9A825, // Shade800
+ 0xFFF57F17, // Shade900
+ 0xFFFFFF8D, // ShadeA100
+ 0xFFFFFF00, // ShadeA200
+ 0xFFFFEA00, // ShadeA400
+ 0xFFFFD600 // ShadeA700
},
// Amber
{
- 0xFFF8E1, // Shade50
- 0xFFECB3, // Shade100
- 0xFFE082, // Shade200
- 0xFFD54F, // Shade300
- 0xFFCA28, // Shade400
- 0xFFC107, // Shade500
- 0xFFB300, // Shade600
- 0xFFA000, // Shade700
- 0xFF8F00, // Shade800
- 0xFF6F00, // Shade900
- 0xFFE57F, // ShadeA100
- 0xFFD740, // ShadeA200
- 0xFFC400, // ShadeA400
- 0xFFAB00 // ShadeA700
+ 0xFFFFF8E1, // Shade50
+ 0xFFFFECB3, // Shade100
+ 0xFFFFE082, // Shade200
+ 0xFFFFD54F, // Shade300
+ 0xFFFFCA28, // Shade400
+ 0xFFFFC107, // Shade500
+ 0xFFFFB300, // Shade600
+ 0xFFFFA000, // Shade700
+ 0xFFFF8F00, // Shade800
+ 0xFFFF6F00, // Shade900
+ 0xFFFFE57F, // ShadeA100
+ 0xFFFFD740, // ShadeA200
+ 0xFFFFC400, // ShadeA400
+ 0xFFFFAB00 // ShadeA700
},
// Orange
{
- 0xFFF3E0, // Shade50
- 0xFFE0B2, // Shade100
- 0xFFCC80, // Shade200
- 0xFFB74D, // Shade300
- 0xFFA726, // Shade400
- 0xFF9800, // Shade500
- 0xFB8C00, // Shade600
- 0xF57C00, // Shade700
- 0xEF6C00, // Shade800
- 0xE65100, // Shade900
- 0xFFD180, // ShadeA100
- 0xFFAB40, // ShadeA200
- 0xFF9100, // ShadeA400
- 0xFF6D00 // ShadeA700
+ 0xFFFFF3E0, // Shade50
+ 0xFFFFE0B2, // Shade100
+ 0xFFFFCC80, // Shade200
+ 0xFFFFB74D, // Shade300
+ 0xFFFFA726, // Shade400
+ 0xFFFF9800, // Shade500
+ 0xFFFB8C00, // Shade600
+ 0xFFF57C00, // Shade700
+ 0xFFEF6C00, // Shade800
+ 0xFFE65100, // Shade900
+ 0xFFFFD180, // ShadeA100
+ 0xFFFFAB40, // ShadeA200
+ 0xFFFF9100, // ShadeA400
+ 0xFFFF6D00 // ShadeA700
},
// DeepOrange
{
- 0xFBE9E7, // Shade50
- 0xFFCCBC, // Shade100
- 0xFFAB91, // Shade200
- 0xFF8A65, // Shade300
- 0xFF7043, // Shade400
- 0xFF5722, // Shade500
- 0xF4511E, // Shade600
- 0xE64A19, // Shade700
- 0xD84315, // Shade800
- 0xBF360C, // Shade900
- 0xFF9E80, // ShadeA100
- 0xFF6E40, // ShadeA200
- 0xFF3D00, // ShadeA400
- 0xDD2C00 // ShadeA700
+ 0xFFFBE9E7, // Shade50
+ 0xFFFFCCBC, // Shade100
+ 0xFFFFAB91, // Shade200
+ 0xFFFF8A65, // Shade300
+ 0xFFFF7043, // Shade400
+ 0xFFFF5722, // Shade500
+ 0xFFF4511E, // Shade600
+ 0xFFE64A19, // Shade700
+ 0xFFD84315, // Shade800
+ 0xFFBF360C, // Shade900
+ 0xFFFF9E80, // ShadeA100
+ 0xFFFF6E40, // ShadeA200
+ 0xFFFF3D00, // ShadeA400
+ 0xFFDD2C00 // ShadeA700
},
// Brown
{
- 0xEFEBE9, // Shade50
- 0xD7CCC8, // Shade100
- 0xBCAAA4, // Shade200
- 0xA1887F, // Shade300
- 0x8D6E63, // Shade400
- 0x795548, // Shade500
- 0x6D4C41, // Shade600
- 0x5D4037, // Shade700
- 0x4E342E, // Shade800
- 0x3E2723, // Shade900
- 0x000000, // ShadeA100
- 0x000000, // ShadeA200
- 0x000000, // ShadeA400
- 0x000000 // ShadeA700
+ 0xFFEFEBE9, // Shade50
+ 0xFFD7CCC8, // Shade100
+ 0xFFBCAAA4, // Shade200
+ 0xFFA1887F, // Shade300
+ 0xFF8D6E63, // Shade400
+ 0xFF795548, // Shade500
+ 0xFF6D4C41, // Shade600
+ 0xFF5D4037, // Shade700
+ 0xFF4E342E, // Shade800
+ 0xFF3E2723, // Shade900
+ 0xFF000000, // ShadeA100
+ 0xFF000000, // ShadeA200
+ 0xFF000000, // ShadeA400
+ 0xFF000000 // ShadeA700
},
// Grey
{
- 0xFAFAFA, // Shade50
- 0xF5F5F5, // Shade100
- 0xEEEEEE, // Shade200
- 0xE0E0E0, // Shade300
- 0xBDBDBD, // Shade400
- 0x9E9E9E, // Shade500
- 0x757575, // Shade600
- 0x616161, // Shade700
- 0x424242, // Shade800
- 0x212121, // Shade900
- 0x000000, // ShadeA100
- 0x000000, // ShadeA200
- 0x000000, // ShadeA400
- 0x000000 // ShadeA700
+ 0xFFFAFAFA, // Shade50
+ 0xFFF5F5F5, // Shade100
+ 0xFFEEEEEE, // Shade200
+ 0xFFE0E0E0, // Shade300
+ 0xFFBDBDBD, // Shade400
+ 0xFF9E9E9E, // Shade500
+ 0xFF757575, // Shade600
+ 0xFF616161, // Shade700
+ 0xFF424242, // Shade800
+ 0xFF212121, // Shade900
+ 0xFF000000, // ShadeA100
+ 0xFF000000, // ShadeA200
+ 0xFF000000, // ShadeA400
+ 0xFF000000 // ShadeA700
},
// BlueGrey
{
- 0xECEFF1, // Shade50
- 0xCFD8DC, // Shade100
- 0xB0BEC5, // Shade200
- 0x90A4AE, // Shade300
- 0x78909C, // Shade400
- 0x607D8B, // Shade500
- 0x546E7A, // Shade600
- 0x455A64, // Shade700
- 0x37474F, // Shade800
- 0x263238, // Shade900
- 0x000000, // ShadeA100
- 0x000000, // ShadeA200
- 0x000000, // ShadeA400
- 0x000000 // ShadeA700
+ 0xFFECEFF1, // Shade50
+ 0xFFCFD8DC, // Shade100
+ 0xFFB0BEC5, // Shade200
+ 0xFF90A4AE, // Shade300
+ 0xFF78909C, // Shade400
+ 0xFF607D8B, // Shade500
+ 0xFF546E7A, // Shade600
+ 0xFF455A64, // Shade700
+ 0xFF37474F, // Shade800
+ 0xFF263238, // Shade900
+ 0xFF000000, // ShadeA100
+ 0xFF000000, // ShadeA200
+ 0xFF000000, // ShadeA400
+ 0xFF000000 // ShadeA700
}
};
static QQuickMaterialStyle::Theme defaultTheme = QQuickMaterialStyle::Light;
-static QQuickMaterialStyle::Color defaultAccent = QQuickMaterialStyle::Teal;
+static uint defaultAccent = QQuickMaterialStyle::Teal;
+static bool defaultCustom = false;
static const QRgb backgroundColorLight = 0xFFFAFAFA;
static const QRgb backgroundColorDark = 0xFF303030;
static const QRgb dialogColorLight = 0xFFFFFFFF;
@@ -418,6 +421,7 @@ static const QRgb checkBoxUncheckedRippleColorDark = 0x20FFFFFF;
QQuickMaterialStyle::QQuickMaterialStyle(QObject *parent) : QQuickStyle(parent),
m_explicitTheme(false),
m_explicitAccent(false),
+ m_customAccent(defaultCustom),
m_theme(defaultTheme),
m_accent(defaultAccent)
{
@@ -474,26 +478,52 @@ void QQuickMaterialStyle::resetTheme()
}
}
-QQuickMaterialStyle::Color QQuickMaterialStyle::accent() const
+QVariant QQuickMaterialStyle::accent() const
{
- return m_accent;
+ return accentColor();
}
-void QQuickMaterialStyle::setAccent(QQuickMaterialStyle::Color color)
+void QQuickMaterialStyle::setAccent(const QVariant &var)
{
+ QRgb accent = 0;
+ bool custom = false;
+ if (var.type() == QVariant::Int) {
+ int val = var.toInt();
+ if (val > BlueGrey) {
+ qmlInfo(parent()) << "unknown Material.accent value: " << val;
+ return;
+ }
+ accent = val;
+ } else {
+ int val = QMetaEnum::fromType<Color>().keyToValue(var.toByteArray());
+ if (val != -1) {
+ accent = val;
+ } else {
+ QColor color(var.toString());
+ if (!color.isValid()) {
+ qmlInfo(parent()) << "unknown Material.accent value: " << var.toString();
+ return;
+ }
+ custom = true;
+ accent = color.rgba();
+ }
+ }
+
m_explicitAccent = true;
- if (m_accent != color) {
- m_accent = color;
+ if (m_accent != accent) {
+ m_customAccent = custom;
+ m_accent = accent;
propagateAccent();
emit accentChanged();
emit paletteChanged();
}
}
-void QQuickMaterialStyle::inheritAccent(QQuickMaterialStyle::Color color)
+void QQuickMaterialStyle::inheritAccent(uint accent, bool custom)
{
- if (!m_explicitAccent && m_accent != color) {
- m_accent = color;
+ if (!m_explicitAccent && m_accent != accent) {
+ m_customAccent = custom;
+ m_accent = accent;
propagateAccent();
emit accentChanged();
}
@@ -505,22 +535,27 @@ void QQuickMaterialStyle::propagateAccent()
for (QQuickStyle *child : styles) {
QQuickMaterialStyle *material = qobject_cast<QQuickMaterialStyle *>(child);
if (material)
- material->inheritAccent(m_accent);
+ material->inheritAccent(m_accent, m_customAccent);
}
}
void QQuickMaterialStyle::resetAccent()
{
if (m_explicitAccent) {
+ m_customAccent = false;
m_explicitAccent = false;
QQuickMaterialStyle *material = qobject_cast<QQuickMaterialStyle *>(parentStyle());
- inheritAccent(material ? material->accent() : defaultAccent);
+ inheritAccent(material ? material->m_accent : defaultAccent, true);
}
}
QColor QQuickMaterialStyle::accentColor() const
{
- return color(m_accent, Shade500);
+ if (m_customAccent)
+ return QColor::fromRgba(m_accent);
+ if (m_accent > BlueGrey)
+ return QColor();
+ return colors[m_accent][Shade500];
}
QColor QQuickMaterialStyle::backgroundColor() const
@@ -593,12 +628,12 @@ QColor QQuickMaterialStyle::raisedHighlightedButtonColor() const
QColor QQuickMaterialStyle::raisedHighlightedButtonHoverColor() const
{
- return color(m_accent, Shade600);
+ return shade(accentColor(), Shade600);
}
QColor QQuickMaterialStyle::raisedHighlightedButtonPressColor() const
{
- return color(m_accent, Shade700);
+ return shade(accentColor(), Shade700);
}
QColor QQuickMaterialStyle::raisedHighlightedButtonDisabledColor() const
@@ -628,7 +663,7 @@ QColor QQuickMaterialStyle::checkBoxUncheckedRippleColor() const
QColor QQuickMaterialStyle::checkBoxCheckedRippleColor() const
{
- QColor pressColor = color(m_accent, Shade500);
+ QColor pressColor = accentColor();
// TODO: find out actual value
pressColor.setAlpha(30);
return pressColor;
@@ -641,7 +676,7 @@ QColor QQuickMaterialStyle::switchUncheckedTrackColor() const
QColor QQuickMaterialStyle::switchCheckedTrackColor() const
{
- QColor trackColor = m_theme == Light ? accentColor() : color(m_accent, Shade200);
+ QColor trackColor = m_theme == Light ? accentColor() : shade(accentColor(), Shade200);
trackColor.setAlphaF(0.5);
return trackColor;
}
@@ -653,7 +688,7 @@ QColor QQuickMaterialStyle::switchUncheckedHandleColor() const
QColor QQuickMaterialStyle::switchCheckedHandleColor() const
{
- return m_theme == Light ? accentColor() : color(m_accent, Shade200);
+ return m_theme == Light ? accentColor() : shade(accentColor(), Shade200);
}
QColor QQuickMaterialStyle::switchDisabledTrackColor() const
@@ -704,28 +739,97 @@ QColor QQuickMaterialStyle::color(QQuickMaterialStyle::Color color, QQuickMateri
return colors[color][shade];
}
+static QColor lighterShade(const QColor &color, qreal amount)
+{
+ QColor hsl = color.toHsl();
+ hsl.setHslF(hsl.hueF(), hsl.saturationF(), qBound<qreal>(0.0, hsl.lightnessF() + amount, 1.0), color.alphaF());
+ return hsl.convertTo(color.spec());
+}
+
+QColor darkerShade(const QColor &color, qreal amount)
+{
+ QColor hsl = color.toHsl();
+ hsl.setHslF(hsl.hueF(), hsl.saturationF(), qBound<qreal>(0.0, hsl.lightnessF() - amount, 1.0), color.alphaF());
+ return hsl.convertTo(color.spec());
+}
+
+/*
+ * The following lightness values originate from the Material Design Color Generator project.
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2015 mbitson
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+QColor QQuickMaterialStyle::shade(const QColor &color, Shade shade) const
+{
+ switch (shade) {
+ case Shade50:
+ return lighterShade(color, 0.52);
+ case Shade100:
+ return lighterShade(color, 0.37);
+ case Shade200:
+ return lighterShade(color, 0.26);
+ case Shade300:
+ return lighterShade(color, 0.12);
+ case Shade400:
+ return lighterShade(color, 0.06);
+ case Shade500:
+ return color;
+ case Shade600:
+ return darkerShade(color, 0.06);
+ case Shade700:
+ return darkerShade(color, 0.12);
+ case Shade800:
+ return darkerShade(color, 0.18);
+ case Shade900:
+ return darkerShade(color, 0.24);
+ case ShadeA100:
+ return lighterShade(color, 0.54);
+ case ShadeA200:
+ return lighterShade(color, 0.37);
+ case ShadeA400:
+ return lighterShade(color, 0.06);
+ case ShadeA700:
+ return darkerShade(color, 0.12);
+ default:
+ Q_UNREACHABLE();
+ return QColor();
+ }
+}
+
void QQuickMaterialStyle::parentStyleChange(QQuickStyle *newParent, QQuickStyle *oldParent)
{
Q_UNUSED(oldParent);
QQuickMaterialStyle *material = qobject_cast<QQuickMaterialStyle *>(newParent);
if (material) {
- inheritAccent(material->accent());
+ inheritAccent(material->m_accent, material->m_customAccent);
inheritTheme(material->theme());
}
}
template <typename Enum>
-static Enum readEnumValue(QSettings *settings, const QString &name, Enum fallback)
-{
- Enum result = fallback;
- if (settings->contains(name)) {
- QMetaEnum enumeration = QMetaEnum::fromType<Enum>();
- bool ok = false;
- int value = enumeration.keyToValue(settings->value(name).toByteArray(), &ok);
- if (ok)
- result = static_cast<Enum>(value);
- }
- return result;
+static Enum toEnumValue(const QByteArray &value, bool *ok)
+{
+ QMetaEnum enumeration = QMetaEnum::fromType<Enum>();
+ return static_cast<Enum>(enumeration.keyToValue(value, ok));
}
void QQuickMaterialStyle::init()
@@ -734,8 +838,28 @@ void QQuickMaterialStyle::init()
if (!defaultsInitialized) {
QSharedPointer<QSettings> settings = QQuickStyle::settings(QStringLiteral("Material"));
if (!settings.isNull()) {
- defaultTheme = m_theme = readEnumValue<Theme>(settings.data(), QStringLiteral("Theme"), m_theme);
- defaultAccent = m_accent = readEnumValue<Color>(settings.data(), QStringLiteral("Accent"), m_accent);
+ bool ok = false;
+ QByteArray value = settings->value(QStringLiteral("Theme")).toByteArray();
+ Theme theme = toEnumValue<Theme>(value, &ok);
+ if (ok)
+ defaultTheme = m_theme = theme;
+ else if (!value.isEmpty())
+ qWarning().nospace().noquote() << settings->fileName() << ": unknown Material theme value: " << value;
+
+ value = settings->value(QStringLiteral("Accent")).toByteArray();
+ Color accent = toEnumValue<Color>(value, &ok);
+ if (ok) {
+ defaultCustom = m_customAccent = false;
+ defaultAccent = m_accent = accent;
+ } else {
+ QColor color(value.constData());
+ if (color.isValid()) {
+ defaultCustom = m_customAccent = true;
+ defaultAccent = m_accent = color.rgba();
+ } else if (!value.isEmpty()) {
+ qWarning().nospace().noquote() << settings->fileName() << ": unknown Material accent value: " << value;
+ }
+ }
}
defaultsInitialized = true;
}
diff --git a/src/imports/controls/material/qquickmaterialstyle_p.h b/src/imports/controls/material/qquickmaterialstyle_p.h
index 87255383..48e7ca37 100644
--- a/src/imports/controls/material/qquickmaterialstyle_p.h
+++ b/src/imports/controls/material/qquickmaterialstyle_p.h
@@ -59,8 +59,8 @@ class QQuickMaterialStyle : public QQuickStyle
{
Q_OBJECT
Q_PROPERTY(Theme theme READ theme WRITE setTheme RESET resetTheme NOTIFY themeChanged FINAL)
- Q_PROPERTY(Color accent READ accent WRITE setAccent RESET resetAccent NOTIFY accentChanged FINAL)
- Q_PROPERTY(QColor accentColor READ accentColor NOTIFY accentChanged FINAL)
+ Q_PROPERTY(QVariant accent READ accent WRITE setAccent RESET resetAccent NOTIFY accentChanged FINAL)
+ Q_PROPERTY(QColor accentColor READ accentColor NOTIFY accentChanged FINAL) // TODO: remove?
Q_PROPERTY(QColor backgroundColor READ backgroundColor NOTIFY paletteChanged FINAL)
Q_PROPERTY(QColor primaryTextColor READ primaryTextColor NOTIFY paletteChanged FINAL)
Q_PROPERTY(QColor primaryHighlightedTextColor READ primaryHighlightedTextColor NOTIFY paletteChanged FINAL)
@@ -153,9 +153,9 @@ public:
void propagateTheme();
void resetTheme();
- Color accent() const;
- void setAccent(Color color);
- void inheritAccent(Color color);
+ QVariant accent() const;
+ void setAccent(const QVariant &accent);
+ void inheritAccent(uint accent, bool custom);
void propagateAccent();
void resetAccent();
@@ -193,7 +193,8 @@ public:
QColor dialogColor() const;
QColor backgroundDimColor() const;
- Q_INVOKABLE QColor color(Color color, Shade shade) const;
+ Q_INVOKABLE QColor color(Color color, Shade shade = Shade500) const;
+ Q_INVOKABLE QColor shade(const QColor &color, Shade shade) const;
Q_SIGNALS:
void themeChanged();
@@ -208,8 +209,9 @@ private:
bool m_explicitTheme;
bool m_explicitAccent;
+ bool m_customAccent;
Theme m_theme;
- Color m_accent;
+ uint m_accent;
};
QT_END_NAMESPACE
diff --git a/src/imports/controls/material/qtlabsmaterialstyleplugin.cpp b/src/imports/controls/material/qtlabsmaterialstyleplugin.cpp
index 06c84aa1..8d7f67c7 100644
--- a/src/imports/controls/material/qtlabsmaterialstyleplugin.cpp
+++ b/src/imports/controls/material/qtlabsmaterialstyleplugin.cpp
@@ -92,8 +92,8 @@ void QtLabsMaterialStylePlugin::initializeEngine(QQmlEngine *engine, const char
Q_UNUSED(engine);
QQuickStyleSelector selector;
- if (selector.style() == QStringLiteral("material")) {
- if (QFont(QStringLiteral("Roboto")).family() == QStringLiteral("Roboto")) {
+ if (selector.style() == QLatin1String("material")) {
+ if (QFont(QStringLiteral("Roboto")).family() == QLatin1String("Roboto")) {
QPlatformTheme *old = QGuiApplicationPrivate::platform_theme;
if (old) {
QQuickProxyTheme *theme = new QQuickMaterialTheme(old);
diff --git a/src/imports/controls/qquickbusyindicatorring.cpp b/src/imports/controls/qquickbusyindicatorring.cpp
index 18413b73..96213fa4 100644
--- a/src/imports/controls/qquickbusyindicatorring.cpp
+++ b/src/imports/controls/qquickbusyindicatorring.cpp
@@ -101,6 +101,7 @@ QSGNode *QQuickBusyIndicatorRing::updatePaintNode(QSGNode *oldNode, QQuickItem::
const qreal dx = (w - sz) / 2;
const qreal dy = (h - sz) / 2;
const int circleRadius = sz / 12;
+ const QColor color(0x35, 0x36, 0x37);
QSGTransformNode *transformNode = static_cast<QSGTransformNode *>(rootTransformNode->firstChild());
for (int i = 0; i < circles; ++i) {
@@ -113,8 +114,8 @@ QSGNode *QQuickBusyIndicatorRing::updatePaintNode(QSGNode *oldNode, QQuickItem::
QSGRectangleNode *rectNode = d->sceneGraphContext()->createRectangleNode();
rectNode->setAntialiasing(true);
- rectNode->setColor(QColor("#353637"));
- rectNode->setPenColor(QColor("#353637"));
+ rectNode->setColor(color);
+ rectNode->setPenColor(color);
opacityNode->appendChildNode(rectNode);
}
@@ -191,6 +192,8 @@ void QQuickBusyIndicatorAnimatorJob::updateCurrentTime(int time)
const qreal secondPhaseProgress = percentageComplete > 0.5 ? (percentageComplete - 0.5) * 2 : 0;
QSGTransformNode *transformNode = static_cast<QSGTransformNode*>(rootTransformNode->firstChild());
+ const QColor color(0x35, 0x36, 0x37);
+ const QColor transparent(Qt::transparent);
Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType);
for (int i = 0; i < circles; ++i) {
QSGOpacityNode *opacityNode = static_cast<QSGOpacityNode*>(transformNode->firstChild());
@@ -201,7 +204,7 @@ void QQuickBusyIndicatorAnimatorJob::updateCurrentTime(int time)
const bool fill = (firstPhaseProgress > qreal(i) / circles) || (secondPhaseProgress > 0 && secondPhaseProgress < qreal(i) / circles);
rectNode->setPenWidth(fill ? 0 : 1);
- rectNode->setColor(fill ? QColor("#353637") : QColor("transparent"));
+ rectNode->setColor(fill ? color : transparent);
rectNode->update();
transformNode = static_cast<QSGTransformNode*>(transformNode->nextSibling());
diff --git a/src/imports/controls/qquickprogressstrip.cpp b/src/imports/controls/qquickprogressstrip.cpp
index 046fd77c..e9480ff1 100644
--- a/src/imports/controls/qquickprogressstrip.cpp
+++ b/src/imports/controls/qquickprogressstrip.cpp
@@ -142,6 +142,7 @@ QSGNode *QQuickProgressStrip::updatePaintNode(QSGNode *oldNode, QQuickItem::Upda
}
Q_ASSERT(rootTransformNode->type() == QSGNode::TransformNodeType);
+ const QColor color(0x35, 0x36, 0x37);
if (m_indeterminate) {
if (rootTransformNode->childCount() != blocks) {
// This was previously a regular progress bar; remove the old nodes.
@@ -158,7 +159,7 @@ QSGNode *QQuickProgressStrip::updatePaintNode(QSGNode *oldNode, QQuickItem::Upda
QSGRectangleNode *rectNode = static_cast<QSGRectangleNode*>(transformNode->firstChild());
if (!rectNode) {
rectNode = d->sceneGraphContext()->createRectangleNode();
- rectNode->setColor(QColor(0x35, 0x36, 0x37));
+ rectNode->setColor(color);
transformNode->appendChildNode(rectNode);
}
@@ -180,7 +181,7 @@ QSGNode *QQuickProgressStrip::updatePaintNode(QSGNode *oldNode, QQuickItem::Upda
QSGRectangleNode *rectNode = static_cast<QSGRectangleNode *>(rootTransformNode->firstChild());
if (!rectNode) {
rectNode = d->sceneGraphContext()->createRectangleNode();
- rectNode->setColor(QColor(0x35, 0x36, 0x37));
+ rectNode->setColor(color);
rootTransformNode->appendChildNode(rectNode);
}
diff --git a/src/imports/controls/qtlabscontrolsplugin.cpp b/src/imports/controls/qtlabscontrolsplugin.cpp
index 666e230f..0c312b06 100644
--- a/src/imports/controls/qtlabscontrolsplugin.cpp
+++ b/src/imports/controls/qtlabscontrolsplugin.cpp
@@ -102,8 +102,9 @@ void QtLabsControlsPlugin::registerTypes(const char *uri)
qmlRegisterType(selector.select(QStringLiteral("/Label.qml")), uri, 1, 0, "Label");
qmlRegisterType(selector.select(QStringLiteral("/Menu.qml")), uri, 1, 0, "Menu");
qmlRegisterType(selector.select(QStringLiteral("/MenuItem.qml")), uri, 1, 0, "MenuItem");
- qmlRegisterType(selector.select(QStringLiteral("/Pane.qml")), uri, 1, 0, "Pane");
+ qmlRegisterType(selector.select(QStringLiteral("/Page.qml")), uri, 1, 0, "Page");
qmlRegisterType(selector.select(QStringLiteral("/PageIndicator.qml")), uri, 1, 0, "PageIndicator");
+ qmlRegisterType(selector.select(QStringLiteral("/Pane.qml")), uri, 1, 0, "Pane");
qmlRegisterType(selector.select(QStringLiteral("/Popup.qml")), uri, 1, 0, "Popup");
qmlRegisterType(selector.select(QStringLiteral("/ProgressBar.qml")), uri, 1, 0, "ProgressBar");
qmlRegisterType(selector.select(QStringLiteral("/RadioButton.qml")), uri, 1, 0, "RadioButton");
diff --git a/src/imports/controls/universal/ComboBox.qml b/src/imports/controls/universal/ComboBox.qml
index 56d7a983..38c8e6e2 100644
--- a/src/imports/controls/universal/ComboBox.qml
+++ b/src/imports/controls/universal/ComboBox.qml
@@ -55,9 +55,6 @@ T.ComboBox {
rightPadding: 10
bottomPadding: 7
- font.pixelSize: Universal.fontSize
- font.family: Universal.fontFamily
-
//! [delegate]
delegate: ItemDelegate {
width: control.width
diff --git a/src/imports/controls/universal/Page.qml b/src/imports/controls/universal/Page.qml
new file mode 100644
index 00000000..975ddfe0
--- /dev/null
+++ b/src/imports/controls/universal/Page.qml
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Labs Controls module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.6
+import Qt.labs.templates 1.0 as T
+import Qt.labs.controls.universal 1.0
+
+T.Page {
+ id: control
+
+ //! [contentItem]
+ contentItem: Item { }
+ //! [contentItem]
+
+ //! [background]
+ background: Rectangle {
+ color: control.Universal.altHighColor
+ }
+ //! [background]
+}
diff --git a/src/imports/controls/universal/ProgressBar.qml b/src/imports/controls/universal/ProgressBar.qml
index df837fef..3d88fc67 100644
--- a/src/imports/controls/universal/ProgressBar.qml
+++ b/src/imports/controls/universal/ProgressBar.qml
@@ -50,9 +50,9 @@ T.ProgressBar {
//! [indicator]
indicator: Rectangle {
x: control.leftPadding
- y: control.topPadding
+ y: control.topPadding + (control.availableHeight - height) / 2
width: control.indeterminate ? 0 : control.position * control.availableWidth
- height: control.availableHeight
+ height: 10
scale: control.mirrored ? -1 : 1
color: control.Universal.accent
@@ -81,9 +81,9 @@ T.ProgressBar {
implicitHeight: 10
x: control.leftPadding
- y: control.topPadding
+ y: control.topPadding + (control.availableHeight - height) / 2
width: control.availableWidth
- height: control.availableHeight
+ height: 10
visible: !control.indeterminate
color: control.Universal.baseLowColor
diff --git a/src/imports/controls/universal/SpinBox.qml b/src/imports/controls/universal/SpinBox.qml
index ac027d75..77eb241e 100644
--- a/src/imports/controls/universal/SpinBox.qml
+++ b/src/imports/controls/universal/SpinBox.qml
@@ -104,8 +104,9 @@ T.SpinBox {
Image {
x: (parent.width - width) / 2
y: (parent.height - height) / 2
- source: "image://universal/rightarrow/" + (!control.enabled ? control.Universal.chromeDisabledLowColor :
- control.activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.baseHighColor)
+ source: "image://universal/" + (control.mirrored ? "left" : "right") + "arrow/"
+ + (!control.enabled ? control.Universal.chromeDisabledLowColor :
+ control.activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.baseHighColor)
}
}
//! [up.indicator]
@@ -129,8 +130,9 @@ T.SpinBox {
Image {
x: (parent.width - width) / 2
y: (parent.height - height) / 2
- source: "image://universal/leftarrow/" + (!control.enabled ? control.Universal.chromeDisabledLowColor :
- control.activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.baseHighColor)
+ source: "image://universal/" + (control.mirrored ? "right" : "left") + "arrow/"
+ + (!control.enabled ? control.Universal.chromeDisabledLowColor :
+ control.activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.baseHighColor)
}
}
//! [down.indicator]
diff --git a/src/imports/controls/universal/qquickuniversalfocusrectangle.cpp b/src/imports/controls/universal/qquickuniversalfocusrectangle.cpp
index 5153f96b..a894390e 100644
--- a/src/imports/controls/universal/qquickuniversalfocusrectangle.cpp
+++ b/src/imports/controls/universal/qquickuniversalfocusrectangle.cpp
@@ -37,12 +37,14 @@
#include "qquickuniversalfocusrectangle_p.h"
#include <QtGui/qpainter.h>
+#include <QtQuick/private/qquickitem_p.h>
QT_BEGIN_NAMESPACE
QQuickUniversalFocusRectangle::QQuickUniversalFocusRectangle(QQuickItem *parent)
: QQuickPaintedItem(parent)
{
+ QQuickItemPrivate::get(this)->setTransparentForPositioner(true);
}
void QQuickUniversalFocusRectangle::paint(QPainter *painter)
diff --git a/src/imports/controls/universal/qquickuniversalstyle.cpp b/src/imports/controls/universal/qquickuniversalstyle.cpp
index 6eaaa4c3..49b2d9f7 100644
--- a/src/imports/controls/universal/qquickuniversalstyle.cpp
+++ b/src/imports/controls/universal/qquickuniversalstyle.cpp
@@ -38,6 +38,7 @@
#include <QtCore/qdebug.h>
#include <QtCore/qsettings.h>
+#include <QtQml/qqmlinfo.h>
#include <QtLabsControls/private/qquickstyle_p.h>
QT_BEGIN_NAMESPACE
@@ -201,7 +202,7 @@ void QQuickUniversalStyle::setAccent(const QVariant &var)
if (var.type() == QVariant::Int) {
int val = var.toInt();
if (val < Lime || val > Taupe) {
- qWarning() << "QQuickUniversalStyle: unknown accent" << val;
+ qmlInfo(parent()) << "unknown Universal.accent value: " << val;
return;
}
accent = qquickuniversal_accent_color(static_cast<Accent>(val));
@@ -212,7 +213,7 @@ void QQuickUniversalStyle::setAccent(const QVariant &var)
} else {
QColor color(var.toString());
if (!color.isValid()) {
- qWarning() << "QQuickUniversalStyle: unknown accent" << var.toString();
+ qmlInfo(parent()) << "unknown Universal.accent value: " << var.toString();
return;
}
accent = color.rgba();
@@ -391,15 +392,10 @@ void QQuickUniversalStyle::parentStyleChange(QQuickStyle *newParent, QQuickStyle
}
template <typename Enum>
-static Enum readEnumValue(QSettings *settings, const QString &name, bool *ok)
+static Enum toEnumValue(const QByteArray &value, bool *ok)
{
- int value = -1;
- *ok = settings->contains(name);
- if (*ok) {
- QMetaEnum enumeration = QMetaEnum::fromType<Enum>();
- value = enumeration.keyToValue(settings->value(name).toByteArray(), ok);
- }
- return static_cast<Enum>(value);
+ QMetaEnum enumeration = QMetaEnum::fromType<Enum>();
+ return static_cast<Enum>(enumeration.keyToValue(value, ok));
}
void QQuickUniversalStyle::init()
@@ -409,17 +405,23 @@ void QQuickUniversalStyle::init()
QSharedPointer<QSettings> settings = QQuickStyle::settings(QStringLiteral("Universal"));
if (!settings.isNull()) {
bool ok = false;
- Theme theme = readEnumValue<Theme>(settings.data(), QStringLiteral("Theme"), &ok);
+ QByteArray value = settings->value(QStringLiteral("Theme")).toByteArray();
+ Theme theme = toEnumValue<Theme>(value, &ok);
if (ok)
DefaultTheme = m_theme = theme;
+ else if (!value.isEmpty())
+ qWarning().nospace().noquote() << settings->fileName() << ": unknown Universal theme value: " << value;
- Accent accent = readEnumValue<Accent>(settings.data(), QStringLiteral("Accent"), &ok);
+ value = settings->value(QStringLiteral("Accent")).toByteArray();
+ Accent accent = toEnumValue<Accent>(value, &ok);
if (ok) {
DefaultAccent = m_accent = qquickuniversal_accent_color(accent);
} else {
- QColor color(settings->value(QStringLiteral("Accent")).toString());
+ QColor color(value.constData());
if (color.isValid())
DefaultAccent = m_accent = color.rgba();
+ else if (!value.isEmpty())
+ qWarning().nospace().noquote() << settings->fileName() << ": unknown Universal accent value: " << value;
}
}
defaultsInitialized = true;
diff --git a/src/imports/controls/universal/qtlabsuniversalstyleplugin.cpp b/src/imports/controls/universal/qtlabsuniversalstyleplugin.cpp
index 6e202ce6..305c96a1 100644
--- a/src/imports/controls/universal/qtlabsuniversalstyleplugin.cpp
+++ b/src/imports/controls/universal/qtlabsuniversalstyleplugin.cpp
@@ -92,8 +92,8 @@ void QtLabsUniversalStylePlugin::registerTypes(const char *uri)
void QtLabsUniversalStylePlugin::initializeEngine(QQmlEngine *engine, const char *uri)
{
QQuickStyleSelector selector;
- if (selector.style() == QStringLiteral("universal")) {
- if (QFont(QStringLiteral("Segoe UI")).family() == QStringLiteral("Segoe UI")) {
+ if (selector.style() == QLatin1String("universal")) {
+ if (QFont(QStringLiteral("Segoe UI")).family() == QLatin1String("Segoe UI")) {
QPlatformTheme *old = QGuiApplicationPrivate::platform_theme;
if (old) {
QQuickProxyTheme *theme = new QQuickUniversalTheme(old);
diff --git a/src/imports/controls/universal/universal.pri b/src/imports/controls/universal/universal.pri
index e576367a..73547f4d 100644
--- a/src/imports/controls/universal/universal.pri
+++ b/src/imports/controls/universal/universal.pri
@@ -11,8 +11,9 @@ QML_FILES += \
$$PWD/Label.qml \
$$PWD/Menu.qml \
$$PWD/MenuItem.qml \
- $$PWD/Pane.qml \
+ $$PWD/Page.qml \
$$PWD/PageIndicator.qml \
+ $$PWD/Pane.qml \
$$PWD/ProgressBar.qml \
$$PWD/RadioButton.qml \
$$PWD/RangeSlider.qml \
diff --git a/src/imports/templates/qtlabstemplatesplugin.cpp b/src/imports/templates/qtlabstemplatesplugin.cpp
index 4e38d1a6..522f693e 100644
--- a/src/imports/templates/qtlabstemplatesplugin.cpp
+++ b/src/imports/templates/qtlabstemplatesplugin.cpp
@@ -53,6 +53,7 @@
#include <QtLabsTemplates/private/qquickmenu_p.h>
#include <QtLabsTemplates/private/qquickmenuitem_p.h>
#include <QtLabsTemplates/private/qquickoverlay_p.h>
+#include <QtLabsTemplates/private/qquickpage_p.h>
#include <QtLabsTemplates/private/qquickpageindicator_p.h>
#include <QtLabsTemplates/private/qquickpane_p.h>
#include <QtLabsTemplates/private/qquickpopup_p.h>
@@ -118,6 +119,7 @@ void QtLabsTemplatesPlugin::registerTypes(const char *uri)
qmlRegisterType<QQuickMenu>(uri, 1, 0, "Menu");
qmlRegisterType<QQuickMenuItem>(uri, 1, 0, "MenuItem");
qmlRegisterType<QQuickOverlay>();
+ qmlRegisterType<QQuickPage>(uri, 1, 0, "Page");
qmlRegisterType<QQuickPageIndicator>(uri, 1, 0, "PageIndicator");
qmlRegisterType<QQuickPane>(uri, 1, 0, "Pane");
qmlRegisterType<QQuickPopup>(uri, 1, 0, "Popup");
diff --git a/src/templates/qquickapplicationwindow.cpp b/src/templates/qquickapplicationwindow.cpp
index 3e6734d7..71adf87e 100644
--- a/src/templates/qquickapplicationwindow.cpp
+++ b/src/templates/qquickapplicationwindow.cpp
@@ -81,7 +81,7 @@ QT_BEGIN_NAMESPACE
\note By default, an ApplicationWindow is not visible.
- \sa {Container Controls}
+ \sa Page, {Container Controls}
*/
class QQuickApplicationWindowPrivate : public QQuickItemChangeListener
@@ -228,7 +228,7 @@ QQuickApplicationWindow::~QQuickApplicationWindow()
This property holds the window header item. The header item is positioned to
the top, and resized to the width of the window. The default value is \c null.
- \sa footer
+ \sa footer, Page::header
*/
QQuickItem *QQuickApplicationWindow::header() const
{
@@ -262,7 +262,7 @@ void QQuickApplicationWindow::setHeader(QQuickItem *header)
This property holds the window footer item. The footer item is positioned to
the bottom, and resized to the width of the window. The default value is \c null.
- \sa header
+ \sa header, Page::footer
*/
QQuickItem *QQuickApplicationWindow::footer() const
{
diff --git a/src/templates/qquickcombobox.cpp b/src/templates/qquickcombobox.cpp
index a2c0bf89..c079b1e3 100644
--- a/src/templates/qquickcombobox.cpp
+++ b/src/templates/qquickcombobox.cpp
@@ -40,6 +40,7 @@
#include "qquickpopup_p.h"
#include <QtCore/qregexp.h>
+#include <QtGui/qpa/qplatformtheme.h>
#include <QtQml/qjsvalue.h>
#include <QtQml/qqmlcontext.h>
#include <QtQml/private/qqmldelegatemodel_p.h>
@@ -287,14 +288,12 @@ void QQuickComboBoxPrivate::setHighlightedIndex(int index)
void QQuickComboBoxPrivate::createDelegateModel()
{
Q_Q(QQuickComboBox);
- if (delegateModel) {
- if (ownModel) {
- delete delegateModel;
- } else {
- disconnect(delegateModel, &QQmlInstanceModel::countChanged, this, &QQuickComboBoxPrivate::countChanged);
- disconnect(delegateModel, &QQmlInstanceModel::modelUpdated, this, &QQuickComboBoxPrivate::updateCurrentText);
- disconnect(delegateModel, &QQmlInstanceModel::initItem, this, &QQuickComboBoxPrivate::initItem);
- }
+ bool ownedOldModel = ownModel;
+ QQmlInstanceModel* oldModel = delegateModel;
+ if (oldModel) {
+ disconnect(delegateModel, &QQmlInstanceModel::countChanged, this, &QQuickComboBoxPrivate::countChanged);
+ disconnect(delegateModel, &QQmlInstanceModel::modelUpdated, this, &QQuickComboBoxPrivate::updateCurrentText);
+ disconnect(delegateModel, &QQmlInstanceModel::initItem, this, &QQuickComboBoxPrivate::initItem);
}
ownModel = false;
@@ -318,6 +317,9 @@ void QQuickComboBoxPrivate::createDelegateModel()
}
emit q->delegateModelChanged();
+
+ if (ownedOldModel)
+ delete oldModel;
}
QQuickComboBox::QQuickComboBox(QQuickItem *parent) :
@@ -792,4 +794,9 @@ void QQuickComboBox::componentComplete()
}
}
+QFont QQuickComboBox::defaultFont() const
+{
+ return QQuickControlPrivate::themeFont(QPlatformTheme::ComboMenuItemFont);
+}
+
QT_END_NAMESPACE
diff --git a/src/templates/qquickcombobox_p.h b/src/templates/qquickcombobox_p.h
index da237c8e..050e8c7c 100644
--- a/src/templates/qquickcombobox_p.h
+++ b/src/templates/qquickcombobox_p.h
@@ -134,6 +134,8 @@ protected:
void componentComplete() Q_DECL_OVERRIDE;
+ QFont defaultFont() const Q_DECL_OVERRIDE;
+
private:
Q_DISABLE_COPY(QQuickComboBox)
Q_DECLARE_PRIVATE(QQuickComboBox)
diff --git a/src/templates/qquickpage.cpp b/src/templates/qquickpage.cpp
new file mode 100644
index 00000000..8302dca0
--- /dev/null
+++ b/src/templates/qquickpage.cpp
@@ -0,0 +1,279 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Labs Templates module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qquickpage_p.h"
+#include "qquickcontrol_p_p.h"
+
+#include <QtQuick/private/qquickitemchangelistener_p.h>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \qmltype Page
+ \inherits Control
+ \instantiates QQuickPage
+ \inqmlmodule Qt.labs.controls
+ \ingroup qtlabscontrols-containers
+ \brief A page control.
+
+ Page is a container control which makes it convenient to add
+ a \l header and \l footer item to a page.
+
+ \image qtlabscontrols-page-wireframe.png
+
+ The following example snippet illustrates how to use a page-specific
+ toolbar header and an application-wide tabbar footer.
+
+ \qml
+ import Qt.labs.controls 1.0
+
+ ApplicationWindow {
+ visible: true
+
+ StackView {
+ anchors.fill: parent
+
+ initialItem: Page {
+ header: ToolBar {
+ // ...
+ }
+ }
+ }
+
+ footer: TabBar {
+ // ...
+ }
+ }
+ \endqml
+
+ \sa ApplicationWindow, {Container Controls}
+*/
+
+class QQuickPagePrivate : public QQuickControlPrivate, public QQuickItemChangeListener
+{
+ Q_DECLARE_PUBLIC(QQuickPage)
+
+public:
+ QQuickPagePrivate();
+
+ void relayout();
+
+ void itemImplicitWidthChanged(QQuickItem *item) Q_DECL_OVERRIDE;
+ void itemImplicitHeightChanged(QQuickItem *item) Q_DECL_OVERRIDE;
+
+ QQuickItem *header;
+ QQuickItem *footer;
+};
+
+QQuickPagePrivate::QQuickPagePrivate() : header(Q_NULLPTR), footer(Q_NULLPTR)
+{
+}
+
+void QQuickPagePrivate::relayout()
+{
+ Q_Q(QQuickPage);
+ QQuickItem *content = q->contentItem();
+ const qreal hh = header ? header->height() : 0;
+ const qreal fh = footer ? footer->height() : 0;
+
+ content->setY(hh + q->topPadding());
+ content->setX(q->leftPadding());
+ content->setWidth(q->availableWidth());
+ content->setHeight(q->availableHeight() - hh - fh);
+
+ if (header)
+ header->setWidth(q->width());
+
+ if (footer) {
+ footer->setY(q->height() - fh);
+ footer->setWidth(q->width());
+ }
+}
+
+void QQuickPagePrivate::itemImplicitWidthChanged(QQuickItem *item)
+{
+ Q_UNUSED(item);
+ relayout();
+}
+
+void QQuickPagePrivate::itemImplicitHeightChanged(QQuickItem *item)
+{
+ Q_UNUSED(item);
+ relayout();
+}
+
+QQuickPage::QQuickPage(QQuickItem *parent) :
+ QQuickControl(*(new QQuickPagePrivate), parent)
+{
+ setFlag(ItemIsFocusScope);
+ setAcceptedMouseButtons(Qt::AllButtons);
+}
+
+/*!
+ \qmlproperty Item Qt.labs.controls::Page::header
+
+ This property holds the page header item. The header item is positioned to
+ the top, and resized to the width of the page. The default value is \c null.
+
+ \sa footer, ApplicationWindow::header
+*/
+QQuickItem *QQuickPage::header() const
+{
+ Q_D(const QQuickPage);
+ return d->header;
+}
+
+void QQuickPage::setHeader(QQuickItem *header)
+{
+ Q_D(QQuickPage);
+ if (d->header != header) {
+ if (d->header)
+ QQuickItemPrivate::get(d->header)->removeItemChangeListener(d, QQuickItemPrivate::ImplicitWidth | QQuickItemPrivate::ImplicitHeight);
+ d->header = header;
+ if (header) {
+ header->setParentItem(this);
+ QQuickItemPrivate *p = QQuickItemPrivate::get(header);
+ p->addItemChangeListener(d, QQuickItemPrivate::ImplicitWidth | QQuickItemPrivate::ImplicitHeight);
+ if (qFuzzyIsNull(header->z()))
+ header->setZ(1);
+ if (isComponentComplete())
+ d->relayout();
+ }
+ emit headerChanged();
+ }
+}
+
+/*!
+ \qmlproperty Item Qt.labs.controls::Page::footer
+
+ This property holds the page footer item. The footer item is positioned to
+ the bottom, and resized to the width of the page. The default value is \c null.
+
+ \sa header, ApplicationWindow::footer
+*/
+QQuickItem *QQuickPage::footer() const
+{
+ Q_D(const QQuickPage);
+ return d->footer;
+}
+
+void QQuickPage::setFooter(QQuickItem *footer)
+{
+ Q_D(QQuickPage);
+ if (d->footer != footer) {
+ if (d->footer)
+ QQuickItemPrivate::get(d->footer)->removeItemChangeListener(d, QQuickItemPrivate::ImplicitWidth | QQuickItemPrivate::ImplicitHeight);
+ d->footer = footer;
+ if (footer) {
+ footer->setParentItem(this);
+ QQuickItemPrivate *p = QQuickItemPrivate::get(footer);
+ p->addItemChangeListener(d, QQuickItemPrivate::ImplicitWidth | QQuickItemPrivate::ImplicitHeight);
+ if (qFuzzyIsNull(footer->z()))
+ footer->setZ(1);
+ if (isComponentComplete())
+ d->relayout();
+ }
+ emit footerChanged();
+ }
+}
+
+/*!
+ \qmlproperty list<Object> Qt.labs.controls::Page::contentData
+ \default
+
+ This property holds the list of content data.
+
+ \sa Item::data
+*/
+QQmlListProperty<QObject> QQuickPage::contentData()
+{
+ Q_D(QQuickPage);
+ return QQmlListProperty<QObject>(d->contentItem, Q_NULLPTR,
+ QQuickItemPrivate::data_append,
+ QQuickItemPrivate::data_count,
+ QQuickItemPrivate::data_at,
+ QQuickItemPrivate::data_clear);
+}
+
+/*!
+ \qmlproperty list<Item> Qt.labs.controls::Page::contentChildren
+
+ This property holds the list of content children.
+
+ \sa Item::children
+*/
+QQmlListProperty<QQuickItem> QQuickPage::contentChildren()
+{
+ Q_D(QQuickPage);
+ return QQmlListProperty<QQuickItem>(d->contentItem, Q_NULLPTR,
+ QQuickItemPrivate::children_append,
+ QQuickItemPrivate::children_count,
+ QQuickItemPrivate::children_at,
+ QQuickItemPrivate::children_clear);
+}
+
+void QQuickPage::contentItemChange(QQuickItem *newItem, QQuickItem *oldItem)
+{
+ QQuickControl::contentItemChange(newItem, oldItem);
+ if (oldItem)
+ disconnect(oldItem, &QQuickItem::childrenChanged, this, &QQuickPage::contentChildrenChanged);
+ if (newItem)
+ connect(newItem, &QQuickItem::childrenChanged, this, &QQuickPage::contentChildrenChanged);
+ emit contentChildrenChanged();
+}
+
+void QQuickPage::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
+{
+ Q_D(QQuickPage);
+ QQuickControl::geometryChanged(newGeometry, oldGeometry);
+ d->relayout();
+}
+
+void QQuickPage::paddingChange(const QMarginsF &newPadding, const QMarginsF &oldPadding)
+{
+ Q_D(QQuickPage);
+ QQuickControl::paddingChange(newPadding, oldPadding);
+ d->relayout();
+}
+
+#ifndef QT_NO_ACCESSIBILITY
+QAccessible::Role QQuickPage::accessibleRole() const
+{
+ return QAccessible::PageTab;
+}
+#endif
+
+QT_END_NAMESPACE
diff --git a/src/templates/qquickpage_p.h b/src/templates/qquickpage_p.h
new file mode 100644
index 00000000..157f0507
--- /dev/null
+++ b/src/templates/qquickpage_p.h
@@ -0,0 +1,102 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Labs Templates module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QQUICKPAGE_P_H
+#define QQUICKPAGE_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtLabsTemplates/private/qquickcontrol_p.h>
+#include <QtQml/qqmllist.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickPagePrivate;
+
+class Q_LABSTEMPLATES_EXPORT QQuickPage : public QQuickControl
+{
+ Q_OBJECT
+ Q_PROPERTY(QQuickItem *header READ header WRITE setHeader NOTIFY headerChanged FINAL)
+ Q_PROPERTY(QQuickItem *footer READ footer WRITE setFooter NOTIFY footerChanged FINAL)
+ Q_PROPERTY(QQmlListProperty<QObject> contentData READ contentData FINAL)
+ Q_PROPERTY(QQmlListProperty<QQuickItem> contentChildren READ contentChildren NOTIFY contentChildrenChanged FINAL)
+ Q_CLASSINFO("DefaultProperty", "contentData")
+
+public:
+ explicit QQuickPage(QQuickItem *parent = Q_NULLPTR);
+
+ QQuickItem *header() const;
+ void setHeader(QQuickItem *header);
+
+ QQuickItem *footer() const;
+ void setFooter(QQuickItem *footer);
+
+ QQmlListProperty<QObject> contentData();
+ QQmlListProperty<QQuickItem> contentChildren();
+
+Q_SIGNALS:
+ void headerChanged();
+ void footerChanged();
+ void contentChildrenChanged();
+
+protected:
+ void contentItemChange(QQuickItem *newItem, QQuickItem *oldItem) Q_DECL_OVERRIDE;
+ void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE;
+ void paddingChange(const QMarginsF &newPadding, const QMarginsF &oldPadding) Q_DECL_OVERRIDE;
+
+#ifndef QT_NO_ACCESSIBILITY
+ QAccessible::Role accessibleRole() const Q_DECL_OVERRIDE;
+#endif
+
+private:
+ Q_DISABLE_COPY(QQuickPage)
+ Q_DECLARE_PRIVATE(QQuickPage)
+};
+
+QT_END_NAMESPACE
+
+QML_DECLARE_TYPE(QQuickPage)
+
+#endif // QQUICKPAGE_P_H
diff --git a/src/templates/templates.pri b/src/templates/templates.pri
index 1ae46e85..c4651d82 100644
--- a/src/templates/templates.pri
+++ b/src/templates/templates.pri
@@ -25,6 +25,7 @@ HEADERS += \
$$PWD/qquickmenu_p_p.h \
$$PWD/qquickmenuitem_p.h \
$$PWD/qquickoverlay_p.h \
+ $$PWD/qquickpage_p.h \
$$PWD/qquickpageindicator_p.h \
$$PWD/qquickpane_p.h \
$$PWD/qquickpane_p_p.h \
@@ -71,6 +72,7 @@ SOURCES += \
$$PWD/qquickmenu.cpp \
$$PWD/qquickmenuitem.cpp \
$$PWD/qquickoverlay.cpp \
+ $$PWD/qquickpage.cpp \
$$PWD/qquickpageindicator.cpp \
$$PWD/qquickpane.cpp \
$$PWD/qquickpopup.cpp \
diff --git a/tests/auto/controls/data/tst_page.qml b/tests/auto/controls/data/tst_page.qml
new file mode 100644
index 00000000..60a1b2ef
--- /dev/null
+++ b/tests/auto/controls/data/tst_page.qml
@@ -0,0 +1,118 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.2
+import QtTest 1.0
+import Qt.labs.controls 1.0
+import Qt.labs.templates 1.0 as T
+
+TestCase {
+ id: testCase
+ width: 400
+ height: 400
+ visible: true
+ when: windowShown
+ name: "Page"
+
+ Component {
+ id: page
+ Page { }
+ }
+
+ Component {
+ id: toolBar
+ ToolBar { }
+ }
+
+ function test_defaults() {
+ var control = page.createObject(testCase)
+ verify(control)
+
+ verify(control.contentItem)
+ compare(control.header, null)
+ compare(control.footer, null)
+
+ control.destroy()
+ }
+
+ function test_layout() {
+ var control = page.createObject(testCase, {width: 100, height: 100})
+ verify(control)
+
+ compare(control.width, 100)
+ compare(control.height, 100)
+ compare(control.contentItem.width, control.width)
+ compare(control.contentItem.height, control.height)
+
+ control.header = toolBar.createObject(control)
+ compare(control.header.width, control.width)
+ verify(control.header.height > 0)
+ compare(control.contentItem.width, control.width)
+ compare(control.contentItem.height, control.height - control.header.height)
+
+ control.footer = toolBar.createObject(control)
+ compare(control.footer.width, control.width)
+ verify(control.footer.height > 0)
+ compare(control.contentItem.width, control.width)
+ compare(control.contentItem.height, control.height - control.header.height - control.footer.height)
+
+ control.topPadding = 9
+ control.leftPadding = 2
+ control.rightPadding = 6
+ control.bottomPadding = 7
+
+ compare(control.header.x, 0)
+ compare(control.header.y, 0)
+ compare(control.header.width, control.width)
+ verify(control.header.height > 0)
+
+ compare(control.footer.x, 0)
+ compare(control.footer.y, control.height - control.footer.height)
+ compare(control.footer.width, control.width)
+ verify(control.footer.height > 0)
+
+ compare(control.contentItem.x, control.leftPadding)
+ compare(control.contentItem.y, control.topPadding + control.header.height)
+ compare(control.contentItem.width, control.availableWidth)
+ compare(control.contentItem.height, control.availableHeight - control.header.height - control.footer.height)
+
+ control.destroy()
+ }
+}
diff --git a/tests/auto/material/data/tst_material.qml b/tests/auto/material/data/tst_material.qml
index 5fc52f10..e29fea3b 100644
--- a/tests/auto/material/data/tst_material.qml
+++ b/tests/auto/material/data/tst_material.qml
@@ -107,11 +107,27 @@ TestCase {
}
}
+ Component {
+ id: comboBox
+ ApplicationWindow {
+ width: 200
+ height: 200
+ visible: true
+ Material.accent: Material.Red
+ property alias combo: box
+ ComboBox {
+ id: box
+ Material.theme: Material.Dark
+ model: 1
+ }
+ }
+ }
+
function test_defaults() {
var control = button.createObject(testCase)
verify(control)
verify(control.Material)
- compare(control.Material.accent, Material.Teal)
+ compare(control.Material.accent, Material.color(Material.Teal))
compare(control.Material.theme, Material.Light)
control.destroy()
}
@@ -121,7 +137,7 @@ TestCase {
verify(control)
control.Material.accent = Material.Brown
control.Material.theme = Material.Dark
- compare(control.Material.accent, Material.Brown)
+ compare(control.Material.accent, Material.color(Material.Brown))
compare(control.Material.theme, Material.Dark)
control.destroy()
}
@@ -129,7 +145,7 @@ TestCase {
function test_reset() {
var control = styledButton.createObject(testCase)
verify(control)
- compare(control.Material.accent, Material.DeepPurple)
+ compare(control.Material.accent, Material.color(Material.DeepPurple))
compare(control.Material.theme, Material.Dark)
control.Material.accent = undefined
control.Material.theme = undefined
@@ -140,7 +156,7 @@ TestCase {
function test_inheritance_data() {
return [
- { tag: "accent", value1: Material.Amber, value2: Material.Indigo },
+ { tag: "accent", value1: Material.color(Material.Amber), value2: Material.color(Material.Indigo) },
{ tag: "theme", value1: Material.Dark, value2: Material.Light },
]
}
@@ -205,9 +221,9 @@ TestCase {
compare(unstyledChild.Material.theme, parent.Material.theme)
parent.Material.accent = Material.Cyan
- compare(control.Material.accent, Material.Cyan)
- verify(styledChild.Material.accent !== Material.Cyan)
- // ### TODO: compare(unstyledChild.Material.accent, Material.Cyan)
+ compare(control.Material.accent, Material.color(Material.Cyan))
+ verify(styledChild.Material.accent !== Material.color(Material.Cyan))
+ // ### TODO: compare(unstyledChild.Material.accent, Material.color(Material.Cyan))
parent.destroy()
}
@@ -216,13 +232,13 @@ TestCase {
var control = loader.createObject(testCase)
control.Material.accent = Material.Lime
control.active = true
- compare(control.item.Material.accent, Material.Lime)
+ compare(control.item.Material.accent, Material.color(Material.Lime))
control.Material.accent = Material.Pink
- compare(control.item.Material.accent, Material.Pink)
+ compare(control.item.Material.accent, Material.color(Material.Pink))
control.active = false
control.Material.accent = Material.Brown
control.active = true
- compare(control.item.Material.accent, Material.Brown)
+ compare(control.item.Material.accent, Material.color(Material.Brown))
control.destroy()
}
@@ -245,9 +261,74 @@ TestCase {
compare(container.Material.theme, Material.Light)
compare(container.menu.Material.theme, Material.Dark)
compare(child.Material.theme, Material.Dark)
- compare(container.Material.accent, Material.Red)
- compare(container.menu.Material.accent, Material.Red)
- compare(child.Material.accent, Material.Red)
+ compare(container.Material.accent, Material.color(Material.Red))
+ compare(container.menu.Material.accent, Material.color(Material.Red))
+ compare(child.Material.accent, Material.color(Material.Red))
container.destroy()
}
+
+ function test_comboBox() {
+ var window = comboBox.createObject(testCase)
+ verify(window)
+ verify(window.combo)
+ waitForRendering(window.combo)
+ window.combo.forceActiveFocus()
+ verify(window.combo.activeFocus)
+ keyClick(Qt.Key_Space)
+ verify(window.combo.popup.visible)
+ var listView = window.combo.popup.contentItem.children[0]
+ verify(listView)
+ var child = listView.contentItem.children[0]
+ verify(child)
+ compare(window.Material.theme, Material.Light)
+ compare(window.combo.Material.theme, Material.Dark)
+ compare(child.Material.theme, Material.Dark)
+ compare(window.Material.accent, Material.color(Material.Red))
+ compare(window.combo.Material.accent, Material.color(Material.Red))
+ compare(child.Material.accent, Material.color(Material.Red))
+ window.destroy()
+ }
+
+ function test_colors() {
+ var control = button.createObject(testCase)
+ verify(control)
+
+ // Material.Accent - enum
+ control.Material.accent = Material.Red
+ compare(control.Material.accent, "#f44336")
+
+ // Material.Accent - string
+ control.Material.accent = "BlueGrey"
+ compare(control.Material.accent, "#607d8b")
+
+ // SVG named color
+ control.Material.accent = "tomato"
+ compare(control.Material.accent, "#ff6347")
+
+ // #rrggbb
+ control.Material.accent = "#123456"
+ compare(control.Material.accent, "#123456")
+
+ // #aarrggbb
+ control.Material.accent = "#12345678"
+ compare(control.Material.accent, "#12345678")
+
+ // Qt.rgba() - no alpha
+ control.Material.accent = Qt.rgba(0.5, 0.5, 0.5)
+ compare(control.Material.accent, "#808080")
+
+ // Qt.rgba() - with alpha
+ control.Material.accent = Qt.rgba(0.5, 0.5, 0.5, 0.5)
+ compare(control.Material.accent, "#80808080")
+
+ // unknown
+ ignoreWarning(Qt.resolvedUrl("tst_material.qml") + ":57:9: QML Button: unknown Material.accent value: 123")
+ control.Material.accent = 123
+ ignoreWarning(Qt.resolvedUrl("tst_material.qml") + ":57:9: QML Button: unknown Material.accent value: foo")
+ control.Material.accent = "foo"
+ ignoreWarning(Qt.resolvedUrl("tst_material.qml") + ":57:9: QML Button: unknown Material.accent value: #1")
+ control.Material.accent = "#1"
+
+ control.destroy()
+ }
}
diff --git a/tests/auto/universal/data/tst_universal.qml b/tests/auto/universal/data/tst_universal.qml
index 6e70f011..af70ad0e 100644
--- a/tests/auto/universal/data/tst_universal.qml
+++ b/tests/auto/universal/data/tst_universal.qml
@@ -107,6 +107,22 @@ TestCase {
}
}
+ Component {
+ id: comboBox
+ ApplicationWindow {
+ width: 200
+ height: 200
+ visible: true
+ Universal.accent: Universal.Red
+ property alias combo: box
+ ComboBox {
+ id: box
+ Universal.theme: Universal.Dark
+ model: 1
+ }
+ }
+ }
+
function test_defaults() {
var control = button.createObject(testCase)
verify(control)
@@ -251,6 +267,28 @@ TestCase {
container.destroy()
}
+ function test_comboBox() {
+ var window = comboBox.createObject(testCase)
+ verify(window)
+ verify(window.combo)
+ waitForRendering(window.combo)
+ window.combo.forceActiveFocus()
+ verify(window.combo.activeFocus)
+ keyClick(Qt.Key_Space)
+ verify(window.combo.popup.visible)
+ var listView = window.combo.popup.contentItem.children[0]
+ verify(listView)
+ var child = listView.contentItem.children[0]
+ verify(child)
+ compare(window.Universal.theme, Universal.Light)
+ compare(window.combo.Universal.theme, Universal.Dark)
+ compare(child.Universal.theme, Universal.Dark)
+ compare(window.Universal.accent, "#e51400") // Red
+ compare(window.combo.Universal.accent, "#e51400") // Red
+ compare(child.Universal.accent, "#e51400") // Red
+ window.destroy()
+ }
+
function test_colors() {
var control = button.createObject(testCase)
verify(control)
@@ -284,11 +322,11 @@ TestCase {
compare(control.Universal.accent, "#80808080")
// unknown
- ignoreWarning("QQuickUniversalStyle: unknown accent 123")
+ ignoreWarning(Qt.resolvedUrl("tst_universal.qml") + ":57:9: QML Button: unknown Universal.accent value: 123")
control.Universal.accent = 123
- ignoreWarning("QQuickUniversalStyle: unknown accent \"foo\"")
+ ignoreWarning(Qt.resolvedUrl("tst_universal.qml") + ":57:9: QML Button: unknown Universal.accent value: foo")
control.Universal.accent = "foo"
- ignoreWarning("QQuickUniversalStyle: unknown accent \"#1\"")
+ ignoreWarning(Qt.resolvedUrl("tst_universal.qml") + ":57:9: QML Button: unknown Universal.accent value: #1")
control.Universal.accent = "#1"
control.destroy()
diff --git a/tests/manual/gifs/data/qtlabscontrols-menu.qml b/tests/manual/gifs/data/qtlabscontrols-menu.qml
index 65cd3563..81ea3137 100644
--- a/tests/manual/gifs/data/qtlabscontrols-menu.qml
+++ b/tests/manual/gifs/data/qtlabscontrols-menu.qml
@@ -52,7 +52,7 @@ ApplicationWindow {
Button {
id: fileButton
text: "File"
- onClicked: menu.show()
+ onClicked: menu.open()
x: 10
y: 10
}
diff --git a/tests/manual/testbench/main.qml b/tests/manual/testbench/main.qml
index edf0aa49..76008497 100644
--- a/tests/manual/testbench/main.qml
+++ b/tests/manual/testbench/main.qml
@@ -53,6 +53,7 @@ ApplicationWindow {
Material.theme: themeSwitch.checked ? Material.Dark : Material.Light
Universal.theme: themeSwitch.checked ? Universal.Dark : Universal.Light
+ Material.accent: Material.LightGreen
property int controlSpacing: 10