From 26dda49ccb3572bedc785c85c41cec5db8114579 Mon Sep 17 00:00:00 2001
From: J-P Nurmi <jpnurmi@digia.com>
Date: Wed, 29 May 2013 13:06:34 +0200
Subject: [PATCH] Rename PaddedStyle to AbstractStyle

Make Style inherit AbstractStyle, so it becomes the base class
of all styles. AbstractStyle also now has a default "data"
property so it's possible to conveniently declare helper
content inside styles.

Change-Id: Id84f3762cfae506e65021322619d7fb77b137994
Reviewed-by: Tomasz Olszak <olszak.tomasz@gmail.com>
Reviewed-by: Jens Bache-Wiig <jens.bache-wiig@digia.com>
---
 src/controls/ScrollView.qml                   |  2 +-
 src/controls/doc/qtquickcontrols.qdocconf     |  4 +-
 src/private/Style.qml                         |  3 +-
 src/private/plugin.cpp                        |  4 +-
 src/private/private.pro                       |  4 +-
 ...addedstyle.cpp => qquickabstractstyle.cpp} | 58 ++++++++++++++-----
 ...addedstyle_p.h => qquickabstractstyle_p.h} | 25 +++++---
 src/styles/Base/ButtonStyle.qml               |  2 +-
 src/styles/Base/CheckBoxStyle.qml             |  2 +-
 src/styles/Base/ComboBoxStyle.qml             |  2 +-
 src/styles/Base/GroupBoxStyle.qml             |  2 +-
 src/styles/Base/ProgressBarStyle.qml          |  2 +-
 src/styles/Base/RadioButtonStyle.qml          |  2 +-
 src/styles/Base/ScrollViewStyle.qml           |  2 +-
 src/styles/Base/SliderStyle.qml               |  2 +-
 src/styles/Base/SpinBoxStyle.qml              |  2 +-
 src/styles/Base/TextFieldStyle.qml            |  2 +-
 src/styles/Desktop/GroupBoxStyle.qml          |  2 +-
 src/styles/Desktop/ScrollViewStyle.qml        |  2 +-
 src/styles/Desktop/SliderStyle.qml            |  2 +-
 src/styles/Desktop/SpinBoxStyle.qml           |  2 +-
 21 files changed, 85 insertions(+), 43 deletions(-)
 rename src/private/{qquickpaddedstyle.cpp => qquickabstractstyle.cpp} (58%)
 rename src/private/{qquickpaddedstyle_p.h => qquickabstractstyle_p.h} (76%)

diff --git a/src/controls/ScrollView.qml b/src/controls/ScrollView.qml
index efa6e631b..0af69a0de 100644
--- a/src/controls/ScrollView.qml
+++ b/src/controls/ScrollView.qml
@@ -147,7 +147,7 @@ FocusScope {
     property Component style: Qt.createComponent(Settings.style + "/ScrollViewStyle.qml", root)
 
     /*! \internal */
-    property PaddedStyle __style: styleLoader.item
+    property Style __style: styleLoader.item
 
     activeFocusOnTab: true
 
diff --git a/src/controls/doc/qtquickcontrols.qdocconf b/src/controls/doc/qtquickcontrols.qdocconf
index c04bced2c..1f6925976 100644
--- a/src/controls/doc/qtquickcontrols.qdocconf
+++ b/src/controls/doc/qtquickcontrols.qdocconf
@@ -52,7 +52,7 @@ sources += ../../private/qstyleitem.cpp \
            ../../private/TabBar.qml \
            ../../private/Control.qml \
            ../../private/Style.qml \
-           ../../private/qquickpaddedstyle.h \
-           ../../private/qquickpaddedstyle.cpp
+           ../../private/qquickabstractstyle.h \
+           ../../private/qquickabstractstyle.cpp
 
 imagedirs += images
diff --git a/src/private/Style.qml b/src/private/Style.qml
index 990f61dd7..6b4c08ef7 100644
--- a/src/private/Style.qml
+++ b/src/private/Style.qml
@@ -39,6 +39,7 @@
 ****************************************************************************/
 import QtQuick 2.1
 import QtQuick.Controls 1.0
+import QtQuick.Controls.Private 1.0
 
 /*!
     \qmltype Style
@@ -46,7 +47,7 @@ import QtQuick.Controls 1.0
     \inqmlmodule QtQuick.Controls.Private 1.0
 */
 
-QtObject {
+AbstractStyle {
     /*! The control attached to this style */
     readonly property Item control: __control
 
diff --git a/src/private/plugin.cpp b/src/private/plugin.cpp
index 17bfed07f..e33c2d375 100644
--- a/src/private/plugin.cpp
+++ b/src/private/plugin.cpp
@@ -45,7 +45,7 @@
 #include "qquicktooltip_p.h"
 #include "qquickcontrolsettings_p.h"
 #include "qquickspinboxvalidator_p.h"
-#include "qquickpaddedstyle_p.h"
+#include "qquickabstractstyle_p.h"
 
 #ifndef QT_NO_WIDGETS
 #include "qquickstyleitem_p.h"
@@ -81,7 +81,7 @@ public:
 
 void QtQuickControlsPrivatePlugin::registerTypes(const char *uri)
 {
-    qmlRegisterType<QQuickPaddedStyle>(uri, 1, 0, "PaddedStyle");
+    qmlRegisterType<QQuickAbstractStyle>(uri, 1, 0, "AbstractStyle");
     qmlRegisterType<QQuickPadding>();
     qmlRegisterType<QQuickRangeModel>(uri, 1, 0, "RangeModel");
     qmlRegisterType<QQuickWheelArea>(uri, 1, 0, "WheelArea");
diff --git a/src/private/private.pro b/src/private/private.pro
index cbb08a80a..803b703f4 100644
--- a/src/private/private.pro
+++ b/src/private/private.pro
@@ -10,7 +10,7 @@ HEADERS += \
     $$PWD/qquickrangemodel_p_p.h \
     $$PWD/qquickcontrolsettings_p.h \
     $$PWD/qquickwheelarea_p.h \
-    $$PWD/qquickpaddedstyle_p.h \
+    $$PWD/qquickabstractstyle_p.h \
     $$PWD/qquickpadding_p.h
 
 SOURCES += \
@@ -20,7 +20,7 @@ SOURCES += \
     $$PWD/qquickrangemodel.cpp \
     $$PWD/qquickcontrolsettings.cpp \
     $$PWD/qquickwheelarea.cpp \
-    $$PWD/qquickpaddedstyle.cpp
+    $$PWD/qquickabstractstyle.cpp
 
 # private qml files
 QML_FILES += \
diff --git a/src/private/qquickpaddedstyle.cpp b/src/private/qquickabstractstyle.cpp
similarity index 58%
rename from src/private/qquickpaddedstyle.cpp
rename to src/private/qquickabstractstyle.cpp
index 320a3f535..eba57b03b 100644
--- a/src/private/qquickpaddedstyle.cpp
+++ b/src/private/qquickabstractstyle.cpp
@@ -39,30 +39,60 @@
 **
 ****************************************************************************/
 
-#include "qquickpaddedstyle_p.h"
-#include "qquickpadding_p.h"
+#include "qquickabstractstyle_p.h"
+
+QT_BEGIN_NAMESPACE
 
 /*!
-    \qmltype PaddedStyle
-    \instantiates QQuickPaddedStyle
+    \qmltype AbstractStyle
+    \instantiates QQuickAbstractStyle
     \qmlabstract
     \internal
 */
 
-QT_BEGIN_NAMESPACE
+/*!
+    \qmlproperty int AbstractStyle::padding.top
+    \qmlproperty int AbstractStyle::padding.left
+    \qmlproperty int AbstractStyle::padding.right
+    \qmlproperty int AbstractStyle::padding.bottom
+
+    This grouped property holds the \c top, \c left, \c right and \c bottom padding.
+*/
 
-QQuickPaddedStyle::QQuickPaddedStyle(QQuickItem *parent) :
-    QQuickItem(parent)
+QQuickAbstractStyle::QQuickAbstractStyle(QObject *parent) : QObject(parent)
 {
 }
 
-/*!
-    \qmlproperty int PaddedStyle::padding.top
-    \qmlproperty int PaddedStyle::padding.left
-    \qmlproperty int PaddedStyle::padding.right
-    \qmlproperty int PaddedStyle::padding.bottom
+QQmlListProperty<QObject> QQuickAbstractStyle::data()
+{
+    return QQmlListProperty<QObject>(this, 0, &QQuickAbstractStyle::data_append, &QQuickAbstractStyle::data_count,
+                                     &QQuickAbstractStyle::data_at, &QQuickAbstractStyle::data_clear);
+}
 
-    This grouped property holds the \c top, \c left, \c right and \c bottom padding.
-*/
+void QQuickAbstractStyle::data_append(QQmlListProperty<QObject> *list, QObject *object)
+{
+    if (QQuickAbstractStyle *style = qobject_cast<QQuickAbstractStyle *>(list->object))
+        style->m_data.append(object);
+}
+
+int QQuickAbstractStyle::data_count(QQmlListProperty<QObject> *list)
+{
+    if (QQuickAbstractStyle *style = qobject_cast<QQuickAbstractStyle *>(list->object))
+        return style->m_data.count();
+    return 0;
+}
+
+QObject *QQuickAbstractStyle::data_at(QQmlListProperty<QObject> *list, int index)
+{
+    if (QQuickAbstractStyle *style = qobject_cast<QQuickAbstractStyle *>(list->object))
+        return style->m_data.at(index);
+    return 0;
+}
+
+void QQuickAbstractStyle::data_clear(QQmlListProperty<QObject> *list)
+{
+    if (QQuickAbstractStyle *style = qobject_cast<QQuickAbstractStyle *>(list->object))
+        style->m_data.clear();
+}
 
 QT_END_NAMESPACE
diff --git a/src/private/qquickpaddedstyle_p.h b/src/private/qquickabstractstyle_p.h
similarity index 76%
rename from src/private/qquickpaddedstyle_p.h
rename to src/private/qquickabstractstyle_p.h
index 1a5a3c95d..137640535 100644
--- a/src/private/qquickpaddedstyle_p.h
+++ b/src/private/qquickabstractstyle_p.h
@@ -39,29 +39,40 @@
 **
 ****************************************************************************/
 
-#ifndef QQUICKPADDEDSTYLE_H
-#define QQUICKPADDEDSTYLE_H
+#ifndef QQUICKABSTRACTSTYLE_H
+#define QQUICKABSTRACTSTYLE_H
 
-#include <QtQuick/QQuickItem>
-#include <QtQml/QQmlListProperty>
+#include <QtCore/qobject.h>
+#include <QtQml/qqmllist.h>
 #include "qquickpadding_p.h"
 
 QT_BEGIN_NAMESPACE
 
-class QQuickPaddedStyle : public QQuickItem
+class QQuickAbstractStyle : public QObject
 {
     Q_OBJECT
 
     Q_PROPERTY(QQuickPadding* padding READ padding CONSTANT)
+    Q_PROPERTY(QQmlListProperty<QObject> data READ data DESIGNABLE false)
+    Q_CLASSINFO("DefaultProperty", "data")
 
 public:
-    QQuickPaddedStyle(QQuickItem *parent = 0);
+    QQuickAbstractStyle(QObject *parent = 0);
+
     QQuickPadding* padding() { return &m_padding; }
 
+    QQmlListProperty<QObject> data();
+
 private:
+    static void data_append(QQmlListProperty<QObject> *list, QObject *object);
+    static int data_count(QQmlListProperty<QObject> *list);
+    static QObject *data_at(QQmlListProperty<QObject> *list, int index);
+    static void data_clear(QQmlListProperty<QObject> *list);
+
     QQuickPadding m_padding;
+    QList<QObject *> m_data;
 };
 
 QT_END_NAMESPACE
 
-#endif // QQUICKPADDEDSTYLE_H
+#endif // QQUICKABSTRACTSTYLE_H
diff --git a/src/styles/Base/ButtonStyle.qml b/src/styles/Base/ButtonStyle.qml
index 5674c1188..fe37d1708 100644
--- a/src/styles/Base/ButtonStyle.qml
+++ b/src/styles/Base/ButtonStyle.qml
@@ -72,7 +72,7 @@ import QtQuick.Controls.Private 1.0
     If you need a custom label, you can replace the label item.
 */
 
-PaddedStyle {
+Style {
     id: buttonstyle
 
     /*! The \l Button attached to this style. */
diff --git a/src/styles/Base/CheckBoxStyle.qml b/src/styles/Base/CheckBoxStyle.qml
index b10b28591..4311c6294 100644
--- a/src/styles/Base/CheckBoxStyle.qml
+++ b/src/styles/Base/CheckBoxStyle.qml
@@ -72,7 +72,7 @@ import QtQuick.Controls.Private 1.0
     }
     \endqml
 */
-PaddedStyle {
+Style {
     id: checkboxStyle
 
     /*! The \l CheckBox attached to this style. */
diff --git a/src/styles/Base/ComboBoxStyle.qml b/src/styles/Base/ComboBoxStyle.qml
index 5643d50f0..08382f159 100644
--- a/src/styles/Base/ComboBoxStyle.qml
+++ b/src/styles/Base/ComboBoxStyle.qml
@@ -49,7 +49,7 @@ import QtQuick.Controls.Private 1.0
     \brief Provides custom styling for ComboBox
 */
 
-PaddedStyle {
+Style {
 
     /*! \internal */
     property var __syspal: SystemPalette {
diff --git a/src/styles/Base/GroupBoxStyle.qml b/src/styles/Base/GroupBoxStyle.qml
index 86fc83fe2..db0c3bf6d 100644
--- a/src/styles/Base/GroupBoxStyle.qml
+++ b/src/styles/Base/GroupBoxStyle.qml
@@ -47,7 +47,7 @@ import QtQuick.Controls.Private 1.0
     \inqmlmodule QtQuick.Controls.Styles 1.0
     \since QtQuick.Controls.Styles 1.0
 */
-PaddedStyle {
+Style {
 
     /*! \internal */
     property var __syspal: SystemPalette {
diff --git a/src/styles/Base/ProgressBarStyle.qml b/src/styles/Base/ProgressBarStyle.qml
index c93a63565..eab286f09 100644
--- a/src/styles/Base/ProgressBarStyle.qml
+++ b/src/styles/Base/ProgressBarStyle.qml
@@ -71,7 +71,7 @@ import QtQuick.Controls.Private 1.0
     \endqml
 */
 
-PaddedStyle {
+Style {
     id: progressBarStyle
 
     /*! \internal */
diff --git a/src/styles/Base/RadioButtonStyle.qml b/src/styles/Base/RadioButtonStyle.qml
index 614a95370..f8fdb6472 100644
--- a/src/styles/Base/RadioButtonStyle.qml
+++ b/src/styles/Base/RadioButtonStyle.qml
@@ -72,7 +72,7 @@ import QtQuick.Controls.Private 1.0
     \endqml
 */
 
-PaddedStyle {
+Style {
     id: radiobuttonStyle
 
     /*! \internal */
diff --git a/src/styles/Base/ScrollViewStyle.qml b/src/styles/Base/ScrollViewStyle.qml
index b1fe789f1..fb65fe2cc 100644
--- a/src/styles/Base/ScrollViewStyle.qml
+++ b/src/styles/Base/ScrollViewStyle.qml
@@ -47,7 +47,7 @@ import QtQuick.Controls.Private 1.0
     \since QtQuick.Controls.Styles 1.0
     \brief Provides custom styling for ScrollView
 */
-PaddedStyle {
+Style {
     id: root
 
     /*! \internal */
diff --git a/src/styles/Base/SliderStyle.qml b/src/styles/Base/SliderStyle.qml
index 7870e2f2a..a17de0a1f 100644
--- a/src/styles/Base/SliderStyle.qml
+++ b/src/styles/Base/SliderStyle.qml
@@ -78,7 +78,7 @@ import QtQuick.Controls.Private 1.0
     }
     \endqml
 */
-PaddedStyle {
+Style {
     id: styleitem
 
     /*! \internal */
diff --git a/src/styles/Base/SpinBoxStyle.qml b/src/styles/Base/SpinBoxStyle.qml
index 6280ea93e..c239483e2 100644
--- a/src/styles/Base/SpinBoxStyle.qml
+++ b/src/styles/Base/SpinBoxStyle.qml
@@ -49,7 +49,7 @@ import QtQuick.Controls.Private 1.0
     \brief Provides custom styling for SpinBox
 */
 
-PaddedStyle {
+Style {
     id: spinboxStyle
 
     /*! The \l SpinBox attached to this style. */
diff --git a/src/styles/Base/TextFieldStyle.qml b/src/styles/Base/TextFieldStyle.qml
index 3c1a10a69..7b0ba6b2a 100644
--- a/src/styles/Base/TextFieldStyle.qml
+++ b/src/styles/Base/TextFieldStyle.qml
@@ -64,7 +64,7 @@ import QtQuick.Controls.Private 1.0
     \endqml
 */
 
-PaddedStyle {
+Style {
     id: style
 
     /*! \internal */
diff --git a/src/styles/Desktop/GroupBoxStyle.qml b/src/styles/Desktop/GroupBoxStyle.qml
index 2348e6631..81d6de86f 100644
--- a/src/styles/Desktop/GroupBoxStyle.qml
+++ b/src/styles/Desktop/GroupBoxStyle.qml
@@ -42,7 +42,7 @@ import QtQuick.Controls 1.0
 import QtQuick.Controls.Private 1.0
 
 
-PaddedStyle {
+Style {
     readonly property GroupBox control: __control
 
     property var __style: StyleItem { id: style }
diff --git a/src/styles/Desktop/ScrollViewStyle.qml b/src/styles/Desktop/ScrollViewStyle.qml
index d504c59b6..deddc354a 100644
--- a/src/styles/Desktop/ScrollViewStyle.qml
+++ b/src/styles/Desktop/ScrollViewStyle.qml
@@ -42,7 +42,7 @@ import QtQuick.Controls 1.0
 import QtQuick.Controls.Private 1.0
 import "." as Desktop
 
-PaddedStyle {
+Style {
     id: root
 
     padding {
diff --git a/src/styles/Desktop/SliderStyle.qml b/src/styles/Desktop/SliderStyle.qml
index 1c89d21c1..fbe2cfb6d 100644
--- a/src/styles/Desktop/SliderStyle.qml
+++ b/src/styles/Desktop/SliderStyle.qml
@@ -40,7 +40,7 @@
 import QtQuick 2.1
 import QtQuick.Controls.Private 1.0
 
-PaddedStyle {
+Style {
     readonly property Item control: __control
     property Component panel: StyleItem {
         elementType: "slider"
diff --git a/src/styles/Desktop/SpinBoxStyle.qml b/src/styles/Desktop/SpinBoxStyle.qml
index 59c20f558..2f05838e9 100644
--- a/src/styles/Desktop/SpinBoxStyle.qml
+++ b/src/styles/Desktop/SpinBoxStyle.qml
@@ -41,7 +41,7 @@ import QtQuick 2.1
 import QtQuick.Controls 1.0
 import QtQuick.Controls.Private 1.0
 
-PaddedStyle {
+Style {
     readonly property SpinBox control: __control
 
     property var __syspal: SystemPalette {
-- 
GitLab