Ported scroll area
authorKevin Krammer <kevin.krammer@kdab.com>
Mon, 21 Jan 2013 19:52:39 +0000 (20:52 +0100)
committerKevin Krammer <kevin.krammer@kdab.com>
Mon, 21 Jan 2013 19:52:39 +0000 (20:52 +0100)
lib/declarativescrollareaextension.cpp [moved from lib/declarativescrollarea.cpp with 53% similarity]
lib/declarativescrollareaextension_p.h [moved from lib/declarativescrollarea_p.h with 59% similarity]
lib/declarativewidgetsdocument.cpp
lib/lib.pro

similarity index 53%
rename from lib/declarativescrollarea.cpp
rename to lib/declarativescrollareaextension.cpp
index e59ad36..e03af76 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#include "declarativescrollarea_p.h"
+#include "declarativescrollareaextension_p.h"
 
-DeclarativeScrollArea::DeclarativeScrollArea(QObject *parent)
-  : DeclarativeWidgetProxy<QScrollArea>(parent)
+#include <QDeclarativeInfo>
+#include <QScrollArea>
+
+DeclarativeScrollAreaExtension::DeclarativeScrollAreaExtension(QObject *parent)
+  : DeclarativeWidgetExtension(parent)
+{
+}
+
+QScrollArea *DeclarativeScrollAreaExtension::extendedScrollArea() const
 {
-  connectAllSignals(m_proxiedObject, this);
+  QScrollArea *scrollArea = qobject_cast<QScrollArea*>(extendedWidget());
+  Q_ASSERT(scrollArea);
+
+  return scrollArea;
 }
 
-void DeclarativeScrollArea::addWidget(QWidget *widget, AbstractDeclarativeObject *declarativeObject)
+void DeclarativeScrollAreaExtension::addWidget(QWidget *widget)
 {
-  if (m_proxiedObject->widget()) {
-    qmlInfo(declarativeObject) << "Can not add multiple Widgets to ScrollArea";
+  QScrollArea *scrollArea = extendedScrollArea();
+
+  if (scrollArea->widget()) {
+    qmlInfo(scrollArea) << "Can not add multiple Widgets to ScrollArea";
   } else {
-    m_proxiedObject->setWidget(widget);
+    scrollArea->setWidget(widget);
   }
-
-  m_children.append(declarativeObject);
 }
 
-void DeclarativeScrollArea::setLayout(QLayout *layout, AbstractDeclarativeObject *declarativeObject)
+void DeclarativeScrollAreaExtension::setLayout(QLayout *layout)
 {
   Q_UNUSED(layout);
-  Q_UNUSED(declarativeObject);
-  qmlInfo(this) << "Can not add Layout to ScrollArea";
+  qmlInfo(extendedScrollArea()) << "Can not add Layout to ScrollArea";
 }
-
-CUSTOM_METAOBJECT(DeclarativeScrollArea, QScrollArea)
similarity index 59%
rename from lib/declarativescrollarea_p.h
rename to lib/declarativescrollareaextension_p.h
index c75de57..cc33c1c 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#ifndef DECLARATIVESCROLLAREA_P_H
-#define DECLARATIVESCROLLAREA_P_H
+#ifndef DECLARATIVESCROLLAREAEXTENSION_P_H
+#define DECLARATIVESCROLLAREAEXTENSION_P_H
 
-#include "declarativewidgetproxy_p.h"
+#include "declarativewidgetextension.h"
 
-#include <QScrollArea>
+class QScrollArea;
 
-class DeclarativeScrollArea : public DeclarativeWidgetProxy<QScrollArea>
+class DeclarativeScrollAreaExtension : public DeclarativeWidgetExtension
 {
-  DECLARATIVE_OBJECT
+  Q_OBJECT
+
+  // repeat property declarations, qmlRegisterExtendedType doesn't see the ones from base class
+  Q_PROPERTY(QDeclarativeListProperty<QObject> data READ data DESIGNABLE false)
+
+  Q_CLASSINFO("DefaultProperty", "data")
 
   public:
-    explicit DeclarativeScrollArea(QObject *parent = 0);
+    explicit DeclarativeScrollAreaExtension(QObject *parent = 0);
+
+    QScrollArea *extendedScrollArea() const;
 
   protected:
-    void addWidget(QWidget *widget, AbstractDeclarativeObject *declarativeObject);
-    void setLayout(QLayout *layout, AbstractDeclarativeObject *declarativeObject);
+    void addWidget(QWidget *widget);
+    void setLayout(QLayout *layout);
 };
 
 #endif
index 95005c4..aaa7f74 100644 (file)
@@ -47,7 +47,7 @@
 #include "declarativemessagebox_p.h"
 #include "declarativeplaintextedit_p.h"
 #include "declarativeprogressbar_p.h"
-#include "declarativescrollarea_p.h"
+#include "declarativescrollareaextension_p.h"
 #include "declarativescrollbar_p.h"
 #include "declarativeseparator_p.h"
 #include "declarativespinbox_p.h"
@@ -121,7 +121,6 @@ DeclarativeWidgetsDocument::DeclarativeWidgetsDocument(const QUrl &url, QObject
   qmlRegisterType<DeclarativeLCDNumber>("QtGui", 1, 0, "LCDNumber");
   qmlRegisterType<DeclarativePlainTextEdit>("QtGui", 1, 0, "PlainTextEdit");
   qmlRegisterType<DeclarativeProgressBar>("QtGui", 1, 0, "ProgressBar");
-  qmlRegisterType<DeclarativeScrollArea>("QtGui", 1, 0, "ScrollArea");
   qmlRegisterType<DeclarativeScrollBar>("QtGui", 1, 0, "ScrollBar");
   qmlRegisterType<DeclarativeSpinBox>("QtGui", 1, 0, "SpinBox");
   qmlRegisterType<DeclarativeStackedWidget>("QtGui", 1, 0, "StackedWidget");
@@ -169,6 +168,7 @@ DeclarativeWidgetsDocument::DeclarativeWidgetsDocument(const QUrl &url, QObject
   qmlRegisterExtendedType<DeclarativeMessageBox, DeclarativeWidgetExtension>("QtGui", 1, 0, "MessageBox");
   qmlRegisterExtendedType<QPushButton, DeclarativeWidgetExtension>("QtGui", 1, 0, "PushButton");
   qmlRegisterExtendedType<QRadioButton, DeclarativeWidgetExtension>("QtGui", 1, 0, "RadioButton");
+  qmlRegisterExtendedType<QScrollArea, DeclarativeScrollAreaExtension>("QtGui", 1, 0, "ScrollArea");
   qmlRegisterExtendedType<QSlider, DeclarativeWidgetExtension>("QtGui", 1, 0, "Slider");
   qmlRegisterExtendedType<DeclarativeStatusBar, DeclarativeStatusBarExtension>("QtGui", 1, 0, "StatusBar");
   qmlRegisterExtendedType<QTableView, DeclarativeItemViewExtension>("QtGui", 1, 0, "TableView");
index f277dcf..d490438 100644 (file)
@@ -37,7 +37,7 @@ HEADERS = \
   declarativeobjectproxy_p.h \
   declarativeplaintextedit_p.h \
   declarativeprogressbar_p.h \
-  declarativescrollarea_p.h \
+  declarativescrollareaextension_p.h \
   declarativescrollbar_p.h \
   declarativeseparator_p.h \
   declarativespinbox_p.h \
@@ -88,7 +88,7 @@ SOURCES = \
   declarativeobjectextension.cpp \
   declarativeplaintextedit.cpp \
   declarativeprogressbar.cpp \
-  declarativescrollarea.cpp \
+  declarativescrollareaextension.cpp \
   declarativescrollbar.cpp \
   declarativeseparator.cpp \
   declarativespinbox.cpp \