#include <QDebug>
+/*
+ if (QString(staticMetaObject.className()) == "DeclarativeLabel") { \
+ qDebug("class: %s propOffset: %d", qPrintable(staticMetaObject.className()), staticMetaObject.propertyOffset()); \
+ for (int i = 0; i < staticMetaObject.propertyCount(); ++i) { \
+ qDebug(" prop: %d=%s", i, staticMetaObject.property(i).name()); \
+ } \
+ qDebug("class: DeclarativeObject"); \
+ for (int i = 0; i < DeclarativeObject::staticMetaObject.propertyCount(); ++i) { \
+ qDebug(" prop: %d=%s", i, DeclarativeObject::staticMetaObject.property(i).name()); \
+ } \
+ } \
+ if (QString(staticMetaObject.className()) == "DeclarativeLabel") { \
+ qDebug("class: %s methodOffset: %d", qPrintable(staticMetaObject.className()), staticMetaObject.methodOffset()); \
+ for (int i = 0; i < staticMetaObject.methodCount(); ++i) { \
+ qDebug(" prop: %d=%s", i, staticMetaObject.method(i).signature()); \
+ } \
+ } \
+*/
+
#define CUSTOM_METAOBJECT(ClassName, BaseType, WidgetType, WidgetVariable) \
QMetaObject ClassName::staticMetaObject;\
bool ClassName::metaObjectInitialized = ClassName::initializeMetaObject(); \
builder.addMetaObject(&DeclarativeObject::staticMetaObject); \
builder.setSuperClass(WidgetType::staticMetaObject.superClass()); \
builder.setClassName(""#ClassName); \
- QMetaObject *mo2 = builder.toMetaObject(); \
- ClassName::staticMetaObject = *mo2; \
- if (QString(staticMetaObject.className()) == "DeclarativeLabel") { \
- qDebug("class: %s propOffset: %d", qPrintable(staticMetaObject.className()), staticMetaObject.propertyOffset()); \
- for (int i = 0; i < staticMetaObject.propertyCount(); ++i) { \
- qDebug(" prop: %d=%s", i, staticMetaObject.property(i).name()); \
- } \
- qDebug("class: DeclarativeObject"); \
- for (int i = 0; i < DeclarativeObject::staticMetaObject.propertyCount(); ++i) { \
- qDebug(" prop: %d=%s", i, DeclarativeObject::staticMetaObject.property(i).name()); \
- } \
- } \
+ ClassName::staticMetaObject = *builder.toMetaObject(); \
return true; \
} \
const QMetaObject &ClassName::getStaticMetaObject() \
} \
int ClassName::qt_metacall(QMetaObject::Call call, int id, void **argv) \
{ \
- qDebug("%s call=%d id=%d", staticMetaObject.className(), call, id); \
if (call == QMetaObject::ReadProperty || call == QMetaObject::WriteProperty) { \
if (id >= WidgetType::staticMetaObject.propertyCount()) { \
- qDebug() << "dobject" << this << id << (id - WidgetType::staticMetaObject.propertyCount() + 1); \
id = DeclarativeObject::qt_metacall(call, id - WidgetType::staticMetaObject.propertyCount() + 1, argv); \
- qDebug() << "after" << id; \
id += WidgetType::staticMetaObject.propertyCount() - 1; \
} else { \
- qDebug() << "widget" << WidgetVariable << id; \
- WidgetVariable->qt_metacall(call, id, argv); \
- qDebug() << "after" << id; \
- id -= 1; \
+ id = WidgetVariable->qt_metacall(call, id, argv); \
} \
if (id < 0) \
return 0; \
+ } else if (call == QMetaObject::InvokeMetaMethod) {\
+ QMetaObject::activate(this, id, argv); \
} \
return id; \
}
+static void connectAllSignals(QObject *sender, QObject *receiver)
+{
+ for (int i = 0; i < sender->metaObject()->methodCount(); ++i) {
+ const QMetaMethod method = sender->metaObject()->method(i);
+ if (method.methodType() == QMetaMethod::Signal) {
+ const QByteArray signature = "2" + QByteArray(method.signature());
+ QObject::connect(sender, signature.data(), receiver, signature.data());
+ }
+ }
+}
+
// DeclarativeObject
DeclarativeObject::DeclarativeObject(QObject *parent)
: QObject(parent)
void DeclarativeObject::data_append(QDeclarativeListProperty<QObject> *property, QObject *object)
{
- qDebug("tokoe: 1");
if (!object)
return;
int DeclarativeObject::data_count(QDeclarativeListProperty<QObject> *property)
{
- qDebug("tokoe: 2");
DeclarativeObject *that = dynamic_cast<DeclarativeObject*>(property->object);
return that->dataCount();
}
QObject* DeclarativeObject::data_at(QDeclarativeListProperty<QObject> *property, int index)
{
- qDebug("tokoe: 3");
DeclarativeObject *that = dynamic_cast<DeclarativeObject*>(property->object);
return that->dataAt(index);
}
void DeclarativeObject::data_clear(QDeclarativeListProperty<QObject> *property)
{
- qDebug("tokoe: 4");
DeclarativeObject *that = dynamic_cast<DeclarativeObject*>(property->object);
that->dataClear();
}
: DeclarativeObject(parent)
, m_layout(new QVBoxLayout)
{
+ connectAllSignals(m_layout, this);
}
DeclarativeVBoxLayout::~DeclarativeVBoxLayout()
: DeclarativeObject(parent)
, m_widget(new QWidget)
{
+ connectAllSignals(m_widget, this);
}
DeclarativeWidget::~DeclarativeWidget()
// DeclarativeLabel
DeclarativeLabel::DeclarativeLabel(QObject *parent)
: DeclarativeWidget(parent)
- , m_label(new QLabel("<empty>"))
+ , m_label(new QLabel)
{
+ connectAllSignals(m_label, this);
}
DeclarativeLabel::~DeclarativeLabel()
: DeclarativeWidget(parent)
, m_tabWidget(new QTabWidget)
{
+ connectAllSignals(m_tabWidget, this);
}
QObject* DeclarativeTabWidget::object()
: DeclarativeWidget(parent)
, m_pushButton(new QPushButton)
{
+ connectAllSignals(m_pushButton, this);
}
QObject* DeclarativePushButton::object()