aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@digia.com>2013-09-04 19:40:19 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-05 10:47:08 +0200
commit2cafe1373f22fbd286faea4a2c7a604307c3f1e9 (patch)
tree35c30d5941aaf71f67e78f426ef58b1340760154 /src
parent8f9c238b8f722801c853692ce7b953ac5993b8ad (diff)
ThumbnailToolBar: support dynamic button manipulation
Change-Id: I5c424f883134ea2352f7cda6100525bd6b4a00d8 Reviewed-by: Ivan Vizir <define-true-false@yandex.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/imports/winextras/qquickwinthumbnailtoolbar.cpp58
-rw-r--r--src/imports/winextras/qquickwinthumbnailtoolbar.h21
2 files changed, 76 insertions, 3 deletions
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<QObject> QQuickWinThumbnailToolBar::data()
{
- return QQmlListProperty<QObject>(this, this, &QQuickWinThumbnailToolBar::addData, 0, 0, 0);
+ return QQmlListProperty<QObject>(this, 0, &QQuickWinThumbnailToolBar::addData, 0, 0, 0);
+}
+
+QQmlListProperty<QQuickWinThumbnailToolButton> QQuickWinThumbnailToolBar::buttons()
+{
+ return QQmlListProperty<QQuickWinThumbnailToolButton>(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<QObject> *property, QObject *object)
{
- if (const QQuickWinThumbnailToolButton *button = qobject_cast<QQuickWinThumbnailToolButton *>(object)) {
- QQuickWinThumbnailToolBar *quickThumbbar = static_cast<QQuickWinThumbnailToolBar *>(property->data);
+ if (QQuickWinThumbnailToolButton *button = qobject_cast<QQuickWinThumbnailToolButton *>(object)) {
+ QQuickWinThumbnailToolBar *quickThumbbar = static_cast<QQuickWinThumbnailToolBar *>(property->object);
quickThumbbar->m_toolbar.addButton(button->m_button);
+ quickThumbbar->m_buttons.append(button);
+ emit quickThumbbar->countChanged();
+ emit quickThumbbar->buttonsChanged();
}
}
+int QQuickWinThumbnailToolBar::buttonCount(QQmlListProperty<QQuickWinThumbnailToolButton> *property)
+{
+ return static_cast<QQuickWinThumbnailToolBar *>(property->object)->count();
+}
+
+QQuickWinThumbnailToolButton *QQuickWinThumbnailToolBar::buttonAt(QQmlListProperty<QQuickWinThumbnailToolButton> *property, int index)
+{
+ return static_cast<QQuickWinThumbnailToolBar *>(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<QObject> data READ data)
+ Q_PROPERTY(QQmlListProperty<QQuickWinThumbnailToolButton> buttons READ buttons NOTIFY buttonsChanged)
Q_CLASSINFO("DefaultProperty", "data")
public:
explicit QQuickWinThumbnailToolBar(QQuickItem *parent = 0);
~QQuickWinThumbnailToolBar();
+ int count() const;
+
QQmlListProperty<QObject> data();
+ QQmlListProperty<QQuickWinThumbnailToolButton> 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<QObject> *property, QObject *button);
+ static int buttonCount(QQmlListProperty<QQuickWinThumbnailToolButton> *property);
+ static QQuickWinThumbnailToolButton *buttonAt(QQmlListProperty<QQuickWinThumbnailToolButton> *property, int index);
QWinThumbnailToolBar m_toolbar;
+ QList<QQuickWinThumbnailToolButton *> m_buttons;
};
QT_END_NAMESPACE