diff -r cdae8c6c3876 -r 4e8ebe173323 taskswitcherapp/tsdevicedialogplugin/src/tsactivitymodelitem.cpp --- /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 +#include + +/*! + \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(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(this))); + } + } + return QVariant::fromValue(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); + } +}