aboutsummaryrefslogtreecommitdiffstats
path: root/src/imports
diff options
context:
space:
mode:
Diffstat (limited to 'src/imports')
-rw-r--r--src/imports/winextras/plugin.cpp1
-rw-r--r--src/imports/winextras/qquicktaskbarbutton.cpp98
-rw-r--r--src/imports/winextras/qquicktaskbarbutton_p.h45
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