diff options
Diffstat (limited to 'src/imports')
-rw-r--r-- | src/imports/winextras/plugin.cpp | 1 | ||||
-rw-r--r-- | src/imports/winextras/qquicktaskbarbutton.cpp | 98 | ||||
-rw-r--r-- | src/imports/winextras/qquicktaskbarbutton_p.h | 45 |
3 files changed, 101 insertions, 43 deletions
diff --git a/src/imports/winextras/plugin.cpp b/src/imports/winextras/plugin.cpp index e3dab0d..348ee4d 100644 --- a/src/imports/winextras/plugin.cpp +++ b/src/imports/winextras/plugin.cpp @@ -62,6 +62,7 @@ public: qmlRegisterType<QQuickDwmFeatures>(uri, 1, 0, "DwmFeatures"); qmlRegisterType<QQuickTaskbarButton>(uri, 1, 0, "TaskbarButton"); qmlRegisterUncreatableType<QWinTaskbarProgress>(uri, 1, 0, "TaskbarProgress", "Cannot create TaskbarProgress - use TaskbarButton.progress instead."); + qmlRegisterUncreatableType<QQuickTaskbarOverlay>(uri, 1, 0, "TaskbarOverlay", "Cannot create TaskbarOverlay - use TaskbarButton.overlay instead."); qmlRegisterType<QQuickJumpList>(uri, 1, 0, "JumpList"); qmlRegisterType<QQuickJumpListItem>(uri, 1, 0, "JumpListItem"); qmlRegisterType<QQuickJumpListCategory>(uri, 1, 0, "JumpListCategory"); diff --git a/src/imports/winextras/qquicktaskbarbutton.cpp b/src/imports/winextras/qquicktaskbarbutton.cpp index fbae377..278ac51 100644 --- a/src/imports/winextras/qquicktaskbarbutton.cpp +++ b/src/imports/winextras/qquicktaskbarbutton.cpp @@ -41,7 +41,6 @@ ****************************************************************************/ #include "qquicktaskbarbutton_p.h" -#include <QtWinExtras/private/qwintaskbarbutton_p.h> #include <QQuickWindow> QT_BEGIN_NAMESPACE @@ -55,72 +54,103 @@ QT_BEGIN_NAMESPACE \since QtWinExtras 1.0 - The TaskbarButton type enables you to set overlay icons on a taskbar - button, to display a progress indicator, and to add a small toolbar to the - window thumbnail popup. + The TaskbarButton type enables you to set an overlay icon and to display + a progress indicator on a taskbar button. An overlay icon indicates change + in the state of the application. A progress indicator shows how time-consuming + tasks are progressing. - \sa QWinTaskbarButton - */ + \section3 Example -/*! - \class QQuickTaskbarButton - \internal + The following example illustrates how to use TaskbarButton in QML: + + \snippet code/taskbar.qml taskbar_qml + + \image taskbar-button.png Taskbar Button + + \sa QWinTaskbarButton, QWinTaskbarProgress */ -QQuickTaskbarButton::QQuickTaskbarButton(QQuickItem *parent) : - QQuickItem(parent), button(new QWinTaskbarButton(this)) +QQuickTaskbarOverlay::QQuickTaskbarOverlay(QWinTaskbarButton *button, QObject *parent) : + QObject(parent), m_button(button) { + connect(&m_loader, SIGNAL(finished()), SLOT(iconLoaded())); } -QQuickTaskbarButton::~QQuickTaskbarButton() +QUrl QQuickTaskbarOverlay::iconSource() const { + return m_iconSource; } -/*! - \qmlproperty string TaskbarButton::progress +void QQuickTaskbarOverlay::setIconSource(const QUrl &iconSource) +{ + if (m_iconSource != iconSource) { + m_iconSource = iconSource; + emit iconSourceChanged(); + m_loader.load(m_iconSource, qmlEngine(parent())); + } +} - The task bar progress indicator. - */ -QWinTaskbarProgress *QQuickTaskbarButton::progress() const +QString QQuickTaskbarOverlay::accessibleDescription() const { - return button->progress(); + return m_button->overlayAccessibleDescription(); } -/*! - \qmlproperty string TaskbarButton::icon +void QQuickTaskbarOverlay::setAccessibleDescription(const QString &description) +{ + if (accessibleDescription() != description) { + m_button->setOverlayAccessibleDescription(description); + emit accessibleDescriptionChanged(); + } +} - The overlay icon path. - */ -QString QQuickTaskbarButton::overlayIcon() const +void QQuickTaskbarOverlay::iconLoaded() { - return m_iconPath; + QIcon icon = m_loader.icon(); + if (!icon.isNull()) + m_button->setOverlayIcon(icon); } -void QQuickTaskbarButton::setOverlayIcon(const QString &path) +QQuickTaskbarButton::QQuickTaskbarButton(QQuickItem *parent) : QQuickItem(parent), + m_button(new QWinTaskbarButton(this)), m_overlay(new QQuickTaskbarOverlay(m_button, this)) +{ +} + +QQuickTaskbarButton::~QQuickTaskbarButton() { - m_iconPath = path; - button->setOverlayIcon(QIcon(m_iconPath)); } /*! - \qmlproperty string TaskbarButton::overlayAccessibleDescription + \qmlproperty int TaskbarButton::progress.value + \qmlproperty int TaskbarButton::progress.minimum + \qmlproperty int TaskbarButton::progress.maximum + \qmlproperty bool TaskbarButton::progress.visible + \qmlproperty bool TaskbarButton::progress.paused + \qmlproperty bool TaskbarButton::progress.stopped + + The taskbar progress indicator. - The description of the overlay for accessibility purposes. + \sa QWinTaskbarProgress */ -QString QQuickTaskbarButton::overlayAccessibleDescription() const +QWinTaskbarProgress *QQuickTaskbarButton::progress() const { - return button->overlayAccessibleDescription(); + return m_button->progress(); } -void QQuickTaskbarButton::setOverlayAccessibleDescription(const QString &description) +/*! + \qmlproperty url TaskbarButton::overlay.iconSource + \qmlproperty string TaskbarButton::overlay.accessibleDescription + + The overlay icon and a description of the overlay for accessibility purposes. + */ +QQuickTaskbarOverlay *QQuickTaskbarButton::overlay() const { - button->setOverlayAccessibleDescription(description); + return m_overlay; } void QQuickTaskbarButton::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) { if (change == ItemSceneChange) { - button->setWindow(data.window); + m_button->setWindow(data.window); } QQuickItem::itemChange(change, data); } diff --git a/src/imports/winextras/qquicktaskbarbutton_p.h b/src/imports/winextras/qquicktaskbarbutton_p.h index 7c01687..d24947d 100644 --- a/src/imports/winextras/qquicktaskbarbutton_p.h +++ b/src/imports/winextras/qquicktaskbarbutton_p.h @@ -47,32 +47,59 @@ #include <QWinTaskbarButton> #include <QWinTaskbarProgress> +#include "qquickiconloader_p.h" + QT_BEGIN_NAMESPACE class QQuickTaskbarButtonPrivate; +class QQuickTaskbarOverlay : public QObject +{ + Q_OBJECT + Q_PROPERTY(QUrl iconSource READ iconSource WRITE setIconSource NOTIFY iconSourceChanged) + Q_PROPERTY(QString accessibleDescription READ accessibleDescription WRITE setAccessibleDescription NOTIFY accessibleDescriptionChanged) + +public: + explicit QQuickTaskbarOverlay(QWinTaskbarButton *button, QObject *parent = 0); + + QUrl iconSource() const; + void setIconSource(const QUrl &iconSource); + + QString accessibleDescription() const; + void setAccessibleDescription(const QString &description); + +Q_SIGNALS: + void iconSourceChanged(); + void accessibleDescriptionChanged(); + +private Q_SLOTS: + void iconLoaded(); + +private: + QUrl m_iconSource; + QQuickIconLoader m_loader; + QWinTaskbarButton *m_button; +}; + class QQuickTaskbarButton : public QQuickItem { Q_OBJECT - Q_PROPERTY(QString overlayIcon READ overlayIcon WRITE setOverlayIcon) - Q_PROPERTY(QString overlayAccessibleDescription READ overlayAccessibleDescription WRITE setOverlayAccessibleDescription) + Q_PROPERTY(QQuickTaskbarOverlay *overlay READ overlay CONSTANT) Q_PROPERTY(QWinTaskbarProgress *progress READ progress CONSTANT) public: - QQuickTaskbarButton(QQuickItem *parent = 0); + explicit QQuickTaskbarButton(QQuickItem *parent = 0); ~QQuickTaskbarButton(); + + QQuickTaskbarOverlay *overlay() const; QWinTaskbarProgress *progress() const; - QString overlayIcon() const; - void setOverlayIcon(const QString &path); - QString overlayAccessibleDescription() const; - void setOverlayAccessibleDescription(const QString &description); protected: void itemChange(ItemChange, const ItemChangeData &) Q_DECL_OVERRIDE; private: - QWinTaskbarButton *button; - QString m_iconPath; + QWinTaskbarButton *m_button; + QQuickTaskbarOverlay *m_overlay; }; QT_END_NAMESPACE |