taskswitcherapp/tsdevicedialogplugin/src/tsactivitymodelitem.cpp
changeset 39 4e8ebe173323
child 46 23b5d6a29cce
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcherapp/tsdevicedialogplugin/src/tsactivitymodelitem.cpp	Mon May 03 12:24:59 2010 +0300
@@ -0,0 +1,185 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: tsactivitymodelitem.cpp
+*
+*/
+#include "tsactivitymodelitem.h"
+#include "tsdataroles.h"
+#include <hsactivitydbclientinterface.h>
+#include <hbicon.h>
+
+/*!
+    \class TsActivityModelItem
+    \ingroup group_tsdevicedialogplugin
+    \brief Item presenting activity in the grid.
+*/
+
+/*!
+    Standard C++ constructor
+    /param model - reference to parent model
+    /param service - reference to initialized ActivityManager instance
+    /param entry - Activity data
+*/
+TsActivityModelItem::TsActivityModelItem(QAbstractListModel &model,
+                                         QObject& service, 
+                                         const QVariantHash & activity)
+    :
+    mService(service),
+    mActivity(activity),
+    mIcon(),
+    mRequetPending(false)
+{
+    connect(this,
+            SIGNAL(entryChanged(TsModelItem *)),
+            &model,
+            SLOT(entryChanged(TsModelItem *)));
+    connect(&mService,
+            SIGNAL(thumbnailReady(QPixmap, void *)),
+            this,
+            SLOT(thumbnailReady(QPixmap, void *)));
+}
+
+/*!
+    Standard C++ destructor
+    /param service - reference to initialized ActivityManager instance
+    /param entry - Activity data
+*/
+TsActivityModelItem::~TsActivityModelItem()
+{
+}
+
+/*!
+    Returns the data stored under the given role.
+    /param role - requested data role
+    /return data encapulated by QVariant
+*/
+QVariant TsActivityModelItem::data(int role) const
+{
+    switch (role) {
+        case Qt::DisplayRole:
+            return displayRole();
+        case Qt::DecorationRole:
+            return decorationRole();
+        case TsDataRoles::Closable:
+            return QVariant(false);
+        case TsDataRoles::Visible:
+            return visibilityRole();
+        default:
+            return QVariant(QVariant::Invalid);
+    }
+}
+
+/*!
+    Empty interface implementation
+*/
+void TsActivityModelItem::close()
+{
+    //no implementation required
+}
+
+/*!
+    Open or move to foreground activity repesented by entry
+*/
+void TsActivityModelItem::open()
+{
+    QVariantHash::const_iterator
+    app(mActivity.constFind(ActivityApplicationKeyword)),
+        act(mActivity.constFind(ActivityActivityKeyword));
+
+    if (mActivity.end() != app && mActivity.end() != act) {
+        QMetaObject::invokeMethod(&mService,
+                                  "launchActivity",
+                                  Q_ARG(int, app.value().toInt()),
+                                  Q_ARG(QString, act.value().toString()));
+    }
+}
+
+/*!
+    Return application name keyword
+*/
+QString TsActivityModelItem::applicationKeyword()
+{
+    static QString applciationName(":ApplicationName");
+    return applciationName;
+}
+
+/*!
+    Return activity visibility status keyword
+*/
+QString TsActivityModelItem::visibilityKeyword()
+{
+    static QString visibility("visible");
+    return visibility;
+}
+
+/*!
+    Return activity screenshot keyword
+*/
+QString TsActivityModelItem::screenshotKeyword()
+{
+    static QString screenshot("screenshot");
+    return screenshot;
+}
+
+/*!
+    Returns the data stored under decoration role.
+    /return data encapulated by QVariant
+*/
+QVariant TsActivityModelItem::decorationRole() const
+{
+    if (!mRequetPending) {
+        const_cast<TsActivityModelItem *>(this)->mRequetPending = true;
+        QVariantHash::const_iterator node(mActivity.constFind(screenshotKeyword()));
+        if (mActivity.end() != node) {
+            QMetaObject::invokeMethod(&mService,
+                                      "getThumbnail",
+                                      Q_ARG(QString, node.value().toString()),
+                                      Q_ARG(void *, const_cast<TsActivityModelItem *>(this)));
+        }
+    }
+    return QVariant::fromValue<HbIcon>(HbIcon(mIcon));
+}
+
+/*!
+    Returns the data stored under display role.
+    /return data encapulated by QVariant
+*/
+QVariant TsActivityModelItem::displayRole() const
+{
+    QVariantHash::const_iterator node(mActivity.find(applicationKeyword()));
+    return mActivity.end() != node ? node.value() : QVariant(QString::null);
+}
+
+/*!
+    Returns the data stored under visibility role.
+    /return data encapulated by QVariant
+*/
+QVariant TsActivityModelItem::visibilityRole() const
+{
+    QVariantHash::const_iterator node(mActivity.find(visibilityKeyword()));
+    return mActivity.end() != node ? node.value() : QVariant(true);
+}
+
+/*!
+    Slot retrieve thumbnail form TM, update content and notify observers
+    /param pixmap - thumbnail content
+    /ptr - user data provided to request
+*/
+void TsActivityModelItem::thumbnailReady(QPixmap pixmap, void *ptr)
+{
+    if (ptr == this) {
+        mIcon = pixmap;
+        emit entryChanged(this);
+    }
+}