aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@digia.com>2013-09-11 18:28:54 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-12 08:50:01 +0200
commite6dd7437ba4148fefec15b1c2d277efb6e2acba7 (patch)
tree1050c4ec00941e77d027525111072ef76f6a5119 /src
parent0c657048b9215274df10f5cf779c39260f203ce8 (diff)
Overhaul the TaskbarButton QML type
Make the overlay a grouped property, and use QQuickIconLoader internally to support remote icon sources. Change-Id: I888244fe5384702dceebe372b0bd0dd50891629a Reviewed-by: Ivan Vizir <define-true-false@yandex.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Caroline Chao <caroline.chao@digia.com>
Diffstat (limited to 'src')
-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
-rw-r--r--src/winextras/doc/snippets/code/taskbar.qml55
4 files changed, 156 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
diff --git a/src/winextras/doc/snippets/code/taskbar.qml b/src/winextras/doc/snippets/code/taskbar.qml
new file mode 100644
index 0000000..98f3d49
--- /dev/null
+++ b/src/winextras/doc/snippets/code/taskbar.qml
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Window 2.0
+import QtWinExtras 1.0
+
+//! [taskbar_qml]
+Window {
+ TaskbarButton {
+ overlay.iconSource: "loading.png"
+ overlay.accessibleDescription: "Loading"
+
+ progress.visible: true
+ progress.value: 50
+ }
+}
+//! [taskbar_qml]