From 2cafe1373f22fbd286faea4a2c7a604307c3f1e9 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Wed, 4 Sep 2013 19:40:19 +0200 Subject: ThumbnailToolBar: support dynamic button manipulation Change-Id: I5c424f883134ea2352f7cda6100525bd6b4a00d8 Reviewed-by: Ivan Vizir Reviewed-by: Friedemann Kleint --- .../winextras/qquickwinthumbnailtoolbar.cpp | 58 ++++++++++++++++++++-- src/imports/winextras/qquickwinthumbnailtoolbar.h | 21 ++++++++ 2 files changed, 76 insertions(+), 3 deletions(-) (limited to 'src/imports') diff --git a/src/imports/winextras/qquickwinthumbnailtoolbar.cpp b/src/imports/winextras/qquickwinthumbnailtoolbar.cpp index 122e1ef..7871bee 100644 --- a/src/imports/winextras/qquickwinthumbnailtoolbar.cpp +++ b/src/imports/winextras/qquickwinthumbnailtoolbar.cpp @@ -74,9 +74,48 @@ QQuickWinThumbnailToolBar::~QQuickWinThumbnailToolBar() { } +int QQuickWinThumbnailToolBar::count() const +{ + return m_toolbar.count(); +} + QQmlListProperty QQuickWinThumbnailToolBar::data() { - return QQmlListProperty(this, this, &QQuickWinThumbnailToolBar::addData, 0, 0, 0); + return QQmlListProperty(this, 0, &QQuickWinThumbnailToolBar::addData, 0, 0, 0); +} + +QQmlListProperty QQuickWinThumbnailToolBar::buttons() +{ + return QQmlListProperty(this, 0, &QQuickWinThumbnailToolBar::buttonCount, &QQuickWinThumbnailToolBar::buttonAt); +} + +void QQuickWinThumbnailToolBar::addButton(QQuickWinThumbnailToolButton *button) +{ + if (!m_buttons.contains(button)) { + m_toolbar.addButton(button->m_button); + m_buttons.append(button); + emit countChanged(); + emit buttonsChanged(); + } +} + +void QQuickWinThumbnailToolBar::removeButton(QQuickWinThumbnailToolButton *button) +{ + if (m_buttons.removeOne(button)) { + m_toolbar.removeButton(button->m_button); + emit countChanged(); + emit buttonsChanged(); + } +} + +void QQuickWinThumbnailToolBar::clear() +{ + m_toolbar.clear(); + foreach (QQuickWinThumbnailToolButton *button, m_buttons) + button->deleteLater(); + m_buttons.clear(); + emit countChanged(); + emit buttonsChanged(); } void QQuickWinThumbnailToolBar::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) @@ -88,10 +127,23 @@ void QQuickWinThumbnailToolBar::itemChange(QQuickItem::ItemChange change, const void QQuickWinThumbnailToolBar::addData(QQmlListProperty *property, QObject *object) { - if (const QQuickWinThumbnailToolButton *button = qobject_cast(object)) { - QQuickWinThumbnailToolBar *quickThumbbar = static_cast(property->data); + if (QQuickWinThumbnailToolButton *button = qobject_cast(object)) { + QQuickWinThumbnailToolBar *quickThumbbar = static_cast(property->object); quickThumbbar->m_toolbar.addButton(button->m_button); + quickThumbbar->m_buttons.append(button); + emit quickThumbbar->countChanged(); + emit quickThumbbar->buttonsChanged(); } } +int QQuickWinThumbnailToolBar::buttonCount(QQmlListProperty *property) +{ + return static_cast(property->object)->count(); +} + +QQuickWinThumbnailToolButton *QQuickWinThumbnailToolBar::buttonAt(QQmlListProperty *property, int index) +{ + return static_cast(property->object)->m_buttons.value(index); +} + QT_END_NAMESPACE diff --git a/src/imports/winextras/qquickwinthumbnailtoolbar.h b/src/imports/winextras/qquickwinthumbnailtoolbar.h index 48f53e6..3d9e7d6 100644 --- a/src/imports/winextras/qquickwinthumbnailtoolbar.h +++ b/src/imports/winextras/qquickwinthumbnailtoolbar.h @@ -47,24 +47,45 @@ QT_BEGIN_NAMESPACE +class QQuickWinThumbnailToolButton; + class QQuickWinThumbnailToolBar : public QQuickItem { Q_OBJECT + Q_PROPERTY(int count READ count NOTIFY countChanged) Q_PROPERTY(QQmlListProperty data READ data) + Q_PROPERTY(QQmlListProperty buttons READ buttons NOTIFY buttonsChanged) Q_CLASSINFO("DefaultProperty", "data") public: explicit QQuickWinThumbnailToolBar(QQuickItem *parent = 0); ~QQuickWinThumbnailToolBar(); + int count() const; + QQmlListProperty data(); + QQmlListProperty buttons(); + + Q_INVOKABLE void addButton(QQuickWinThumbnailToolButton *button); + Q_INVOKABLE void removeButton(QQuickWinThumbnailToolButton *button); + +public Q_SLOTS: + void clear(); + +Q_SIGNALS: + void countChanged(); + void buttonsChanged(); +protected: void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data); private: static void addData(QQmlListProperty *property, QObject *button); + static int buttonCount(QQmlListProperty *property); + static QQuickWinThumbnailToolButton *buttonAt(QQmlListProperty *property, int index); QWinThumbnailToolBar m_toolbar; + QList m_buttons; }; QT_END_NAMESPACE -- cgit v1.2.3