CUSTOM_METAOBJECT(DeclarativeLabel, QLabel, m_proxiedObject)
// DeclarativeTabWidget
+class TabWidgetTabHeader::Private
+{
+ public:
+ QString label;
+ QIcon icon;
+};
+
+TabWidgetTabHeader::TabWidgetTabHeader(QObject *parent)
+ : QObject(parent), d(new TabWidgetTabHeader::Private)
+{
+}
+
+TabWidgetTabHeader::~TabWidgetTabHeader()
+{
+ delete d;
+}
+
+void TabWidgetTabHeader::setLabel(const QString &label)
+{
+ if (label == d->label)
+ return;
+
+ d->label = label;
+ emit labelChanged(label);
+}
+
+QString TabWidgetTabHeader::label() const
+{
+ return d->label;
+}
+
+void TabWidgetTabHeader::setIcon(const QIcon &icon)
+{
+ d->icon = icon;
+ emit iconChanged(icon);
+}
+
+QIcon TabWidgetTabHeader::icon() const
+{
+ return d->icon;
+}
+
DeclarativeTabWidget::DeclarativeTabWidget(QObject *parent) : DeclarativeWidgetProxy<QTabWidget>(parent)
{
connectAllSignals(m_proxiedObject, this);
void DeclarativeTabWidget::addWidget(QWidget *widget, AbstractDeclarativeObject *declarativeObject)
{
// TODO: error when layout is set
+
m_children.append(declarativeObject);
- m_proxiedObject->addTab(widget, "MyTab");
+
+ QString label;
+ QIcon icon;
+
+ TabWidgetTabHeader *tabHeader = declarativeObject->findChild<TabWidgetTabHeader*>();
+ if (tabHeader) {
+ label = tabHeader->label();
+ icon = tabHeader->icon();
+ }
+
+ m_proxiedObject->addTab(widget, icon, label);
}
void DeclarativeTabWidget::setLayout(QLayout *layout, AbstractDeclarativeObject *declarativeObject)
qmlInfo(this) << "Can not add QLayout to QTabWidget";
}
+TabWidgetTabHeader *DeclarativeTabWidget::qmlAttachedProperties(QObject *object)
+{
+ return new TabWidgetTabHeader(object);
+}
+
CUSTOM_METAOBJECT(DeclarativeTabWidget, QTabWidget, m_proxiedObject)
// DeclarativePushButton
#include <QtGui/QVBoxLayout>
#include <QtDeclarative/QDeclarativeListProperty>
#include <QtDeclarative/qdeclarativeinfo.h>
+#include <qdeclarative.h>
#define DECLARATIVE_OBJECT \
public: \
DeclarativeLabel(QObject *parent = 0);
};
+
+// attached property for DeclarativeTabWidget
+class TabWidgetTabHeader : public QObject
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString label READ label WRITE setLabel NOTIFY labelChanged)
+ Q_PROPERTY(QIcon icon READ icon WRITE setIcon NOTIFY iconChanged)
+
+ public:
+ TabWidgetTabHeader(QObject *parent = 0);
+ ~TabWidgetTabHeader();
+
+ void setLabel(const QString &label);
+ QString label() const;
+
+ void setIcon(const QIcon &icon);
+ QIcon icon() const;
+
+ Q_SIGNALS:
+ void labelChanged(const QString &label);
+ void iconChanged(const QIcon &icon);
+
+ private:
+ class Private;
+ Private *const d;
+};
+
class DeclarativeTabWidget : public DeclarativeWidgetProxy<QTabWidget>
{
DECLARATIVE_OBJECT
public:
DeclarativeTabWidget(QObject *parent = 0);
+ static TabWidgetTabHeader *qmlAttachedProperties(QObject *object);
+
protected:
virtual void addWidget(QWidget *widget, AbstractDeclarativeObject *declarativeObject);
virtual void setLayout(QLayout *layout, AbstractDeclarativeObject *declarativeObject);
};
+
+QML_DECLARE_TYPEINFO(DeclarativeTabWidget, QML_HAS_ATTACHED_PROPERTIES)
+
/*
class DeclarativeTab : public DeclarativeWidget
{
qmlRegisterType<DeclarativeLabel>("QtGui", 1, 0, "Label");
qmlRegisterType<DeclarativeHBoxLayout>("QtGui", 1, 0, "HBoxLayout");
qmlRegisterType<DeclarativeVBoxLayout>("QtGui", 1, 0, "VBoxLayout");
+ qmlRegisterType<TabWidgetTabHeader>();
qmlRegisterType<DeclarativeTabWidget>("QtGui", 1, 0, "TabWidget");
qmlRegisterType<DeclarativePushButton>("QtGui", 1, 0, "PushButton");
qmlRegisterType<DeclarativeCheckBox>("QtGui", 1, 0, "CheckBox");
}
TabWidget {
Label {
+ TabWidget.label: "Title 1"
+
text: "Page 1"
}
Label {
text: "Page 2"
}
Label {
+ TabWidget.label: "Title 3"
+
text: "Page 3"
}
}