diff options
author | Friedemann Kleint <Friedemann.Kleint@digia.com> | 2014-05-27 11:49:54 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@digia.com> | 2014-07-07 11:10:28 +0200 |
commit | cef1f2fab06ed9d01d525681f5a11db67bb8f262 (patch) | |
tree | eca3a46df630bdb770ee708a908fc4b38816c9af /src/imports | |
parent | 7bb27be8c5ce9a67a413022d627d9580cddbe64e (diff) |
Implement iconic live previews/iconic thumbnail icons.
[ChangeLog][QWinThumbnailToolBar] Added pixmap properties
and change notifications for thumbnail icons and live
preview.
Task-number: QTBUG-36730
Change-Id: I31ad0ff347235bc7933c1c14dece359ec0c36b39
Reviewed-by: Oliver Wolff <oliver.wolff@digia.com>
Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
Diffstat (limited to 'src/imports')
-rw-r--r-- | src/imports/winextras/plugins.qmltypes | 3 | ||||
-rw-r--r-- | src/imports/winextras/qquickthumbnailtoolbar.cpp | 100 | ||||
-rw-r--r-- | src/imports/winextras/qquickthumbnailtoolbar_p.h | 24 |
3 files changed, 127 insertions, 0 deletions
diff --git a/src/imports/winextras/plugins.qmltypes b/src/imports/winextras/plugins.qmltypes index f5963ce..eb1aa15 100644 --- a/src/imports/winextras/plugins.qmltypes +++ b/src/imports/winextras/plugins.qmltypes @@ -91,6 +91,9 @@ Module { Property { name: "count"; type: "int"; isReadonly: true } Property { name: "data"; type: "QObject"; isList: true; isReadonly: true } Property { name: "buttons"; type: "QQuickThumbnailToolButton"; isList: true; isReadonly: true } + Property { name: "iconicThumbnailSource"; type: "QUrl" } + Property { name: "iconicLivePreviewSource"; type: "QUrl" } + Property { name: "iconicNotificationsEnabled"; type: "bool" } Method { name: "clear" } Method { name: "addButton" diff --git a/src/imports/winextras/qquickthumbnailtoolbar.cpp b/src/imports/winextras/qquickthumbnailtoolbar.cpp index 5558cb8..6f242f9 100644 --- a/src/imports/winextras/qquickthumbnailtoolbar.cpp +++ b/src/imports/winextras/qquickthumbnailtoolbar.cpp @@ -42,6 +42,7 @@ #include "qquickthumbnailtoolbar_p.h" #include "qquickthumbnailtoolbutton_p.h" +#include "qquickiconloader_p.h" #include <QQuickWindow> #include <QQmlEngine> @@ -69,6 +70,10 @@ QT_BEGIN_NAMESPACE QQuickThumbnailToolBar::QQuickThumbnailToolBar(QQuickItem *parent) : QQuickItem(parent) { + connect(&m_toolbar, &QWinThumbnailToolBar::iconicThumbnailPixmapRequested, + this, &QQuickThumbnailToolBar::iconicThumbnailRequested); + connect(&m_toolbar, &QWinThumbnailToolBar::iconicLivePreviewPixmapRequested, + this, &QQuickThumbnailToolBar::iconicLivePreviewRequested); } QQuickThumbnailToolBar::~QQuickThumbnailToolBar() @@ -119,6 +124,101 @@ void QQuickThumbnailToolBar::clear() emit buttonsChanged(); } +/*! + \qmlsignal ThumbnailToolBar::iconicThumbnailRequested() + + This signal is emitted when the operating system requests a new iconic thumbnail pixmap, + typically when the thumbnail is shown. + + \since 5.4 +*/ + +/*! + \qmlsignal ThumbnailToolBar::iconicLivePreviewRequested() + + This signal is emitted when the operating system requests a new iconic live preview pixmap, + typically when the user ALT-tabs to the application. + \since 5.4 +*/ + +/*! + \qmlproperty bool ThumbnailToolBar::iconicNotificationsEnabled + + This property holds whether the signals iconicThumbnailRequested() + or iconicLivePreviewRequested() will be emitted. + \since 5.4 + */ +bool QQuickThumbnailToolBar::iconicNotificationsEnabled() const +{ + return m_toolbar.iconicPixmapNotificationsEnabled(); +} + +void QQuickThumbnailToolBar::setIconicNotificationsEnabled(bool enabled) +{ + if (enabled != m_toolbar.iconicPixmapNotificationsEnabled()) { + m_toolbar.setIconicPixmapNotificationsEnabled(enabled); + emit iconicNotificationsEnabledChanged(); + } +} + +void QQuickThumbnailToolBar::iconicThumbnailLoaded(const QVariant &value) +{ + m_toolbar.setIconicThumbnailPixmap(value.value<QPixmap>()); +} + +/*! + \qmlproperty url ThumbnailToolBar::iconicThumbnailSource + + The pixmap for use as a thumbnail representation + \since 5.4 + */ +void QQuickThumbnailToolBar::setIconicThumbnailSource(const QUrl &source) +{ + if (source == m_iconicThumbnailSource) + return; + + if (source.isEmpty()) { + m_toolbar.setIconicThumbnailPixmap(QPixmap()); + m_iconicThumbnailSource = source; + emit iconicThumbnailSourceChanged(); + } + + if (QQuickIconLoader::load(source, qmlEngine(this), QVariant::Pixmap, QSize(), + this, &QQuickThumbnailToolBar::iconicThumbnailLoaded) != QQuickIconLoader::LoadError) { + m_iconicThumbnailSource = source; + emit iconicThumbnailSourceChanged(); + } +} + +void QQuickThumbnailToolBar::iconicLivePreviewLoaded(const QVariant &value) +{ + m_toolbar.setIconicLivePreviewPixmap(value.value<QPixmap>()); +} + +/*! + \qmlproperty url ThumbnailToolBar::iconicLivePreviewSource + + The pixmap for use as a live (peek) preview when tabbing into the application. + \since 5.4 + */ +void QQuickThumbnailToolBar::setIconicLivePreviewSource(const QUrl &source) +{ + if (source == m_iconicLivePreviewSource) + return; + + if (source.isEmpty()) { + m_toolbar.setIconicLivePreviewPixmap(QPixmap()); + m_iconicLivePreviewSource = source; + emit iconicLivePreviewSourceChanged(); + } + + if (QQuickIconLoader::load(source, qmlEngine(this), QVariant::Pixmap, QSize(), + this, &QQuickThumbnailToolBar::iconicLivePreviewLoaded) != QQuickIconLoader::LoadError) { + m_iconicLivePreviewSource = source; + emit iconicLivePreviewSourceChanged(); + } +} + void QQuickThumbnailToolBar::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) { if (change == ItemSceneChange) diff --git a/src/imports/winextras/qquickthumbnailtoolbar_p.h b/src/imports/winextras/qquickthumbnailtoolbar_p.h index 6a80d80..8599a63 100644 --- a/src/imports/winextras/qquickthumbnailtoolbar_p.h +++ b/src/imports/winextras/qquickthumbnailtoolbar_p.h @@ -45,9 +45,12 @@ #include <QQuickItem> #include <QWinThumbnailToolBar> +#include <QUrl> QT_BEGIN_NAMESPACE +class QVariant; + class QQuickThumbnailToolButton; class QQuickThumbnailToolBar : public QQuickItem @@ -56,6 +59,9 @@ class QQuickThumbnailToolBar : public QQuickItem Q_PROPERTY(int count READ count NOTIFY countChanged) Q_PROPERTY(QQmlListProperty<QObject> data READ data) Q_PROPERTY(QQmlListProperty<QQuickThumbnailToolButton> buttons READ buttons NOTIFY buttonsChanged) + Q_PROPERTY(bool iconicNotificationsEnabled READ iconicNotificationsEnabled WRITE setIconicNotificationsEnabled NOTIFY iconicNotificationsEnabledChanged) + Q_PROPERTY(QUrl iconicThumbnailSource READ iconicThumbnailSource WRITE setIconicThumbnailSource NOTIFY iconicThumbnailSourceChanged) + Q_PROPERTY(QUrl iconicLivePreviewSource READ iconicLivePreviewSource WRITE setIconicLivePreviewSource NOTIFY iconicLivePreviewSourceChanged) Q_CLASSINFO("DefaultProperty", "data") public: @@ -70,12 +76,28 @@ public: Q_INVOKABLE void addButton(QQuickThumbnailToolButton *button); Q_INVOKABLE void removeButton(QQuickThumbnailToolButton *button); + bool iconicNotificationsEnabled() const; + void setIconicNotificationsEnabled(bool); + QUrl iconicThumbnailSource() const { return m_iconicThumbnailSource; } + void setIconicThumbnailSource(const QUrl &); + QUrl iconicLivePreviewSource() const { return m_iconicLivePreviewSource; } + void setIconicLivePreviewSource(const QUrl &); + public Q_SLOTS: void clear(); Q_SIGNALS: void countChanged(); void buttonsChanged(); + void iconicNotificationsEnabledChanged(); + void iconicThumbnailSourceChanged(); + void iconicThumbnailRequested(); + void iconicLivePreviewSourceChanged(); + void iconicLivePreviewRequested(); + +private Q_SLOTS: + void iconicThumbnailLoaded(const QVariant &); + void iconicLivePreviewLoaded(const QVariant &); protected: void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data); @@ -87,6 +109,8 @@ private: QWinThumbnailToolBar m_toolbar; QList<QQuickThumbnailToolButton *> m_buttons; + QUrl m_iconicThumbnailSource; + QUrl m_iconicLivePreviewSource; }; QT_END_NAMESPACE |