diff -r 0b3699f6c654 -r e36b2f4799c0 taskswitcher/activitytsplugin/src/activitytsmodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/activitytsplugin/src/activitytsmodel.cpp Mon Oct 04 00:38:31 2010 +0300 @@ -0,0 +1,145 @@ +/* +* 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: +* +*/ + +#include "activitytsmodel.h" + +#include + +#include +#include + +#include +#include + +#include "afstorageglobals.h" + +QTM_USE_NAMESPACE + +namespace { + const char KActivityManager[] = "com.nokia.qt.activities.ActivityManager"; + + const int KTsDeviceDialogUid = 0x2002677F; + const int KItemsLimit = 0x00000001; +} + +ActivityTsModel::ActivityTsModel(QObject *parent) : QObject(parent), mAfManager(0) , mMaxItems(10) +{ + { + QServiceManager serviceManager; + mAfManager = serviceManager.loadInterface(KActivityManager); + if (mAfManager) { + mAfManager->setParent(this); + } else { + throw std::runtime_error("Cannot create critical com.nokia.qt.activities.ActivityManager service"); + } + } + + { + XQSettingsManager crManager; + QVariant itemsNumberVariant = crManager.readItemValue(XQCentralRepositorySettingsKey(KTsDeviceDialogUid, KItemsLimit), XQSettingsManager::TypeInt); + if (!itemsNumberVariant.isNull()) { + int number = itemsNumberVariant.toInt(); + if (number > 0) { + mMaxItems = number; + } + } + } + + connect(mAfManager, SIGNAL(dataChanged()), SLOT(getActivities())); + connect(mAfManager, SIGNAL(thumbnailReady(QPixmap,void*)), SLOT(convertScreenshotToThumbnail(QPixmap,void*))); + + getActivities(); +} + +ActivityTsModel::~ActivityTsModel() +{ + qDeleteAll(mData); +} + +QList ActivityTsModel::taskList() const +{ + return taskList(mData.count()); +} + +QList ActivityTsModel::taskList(int limit) const +{ + QList result; + for (int i(0); i < limit && i < mData.count(); ++i) { + result.append(mData[i]->data()); + } + return result; +} + +bool ActivityTsModel::openTask(const QVariant &id) +{ + foreach (const ActivityTsEntry *entry, mData) { + if (entry->data().value("TaskId") == id) { + QMetaObject::invokeMethod(mAfManager, + "launchActivity", + Q_ARG(QUrl, entry->data().value("Uri").toUrl())); + return true; + } + } + return false; +} + +bool ActivityTsModel::closeTask(const QVariant &id) +{ + // it's impossible to "close" activity + Q_UNUSED(id); + return false; +} + +void ActivityTsModel::getActivities() +{ + qDeleteAll(mData); + mData.clear(); + + QList activities; + QMetaObject::invokeMethod(mAfManager, + "activitiesList", + Q_RETURN_ARG(QList, activities), + Q_ARG(int, mMaxItems)); + + foreach (const QVariantHash &activityEntry, activities) { + mData.append(new ActivityTsEntry(activityEntry)); + + QMetaObject::invokeMethod( + mAfManager, + "getThumbnail", + Q_ARG(QString, activityEntry.value(ActivityScreenshotKeyword).toString()), + Q_ARG(void *, mData.last())); + } + + emit dataChanged(); +} + +void ActivityTsModel::convertScreenshotToThumbnail(const QPixmap &thumbnail, void *userData) +{ + emit createThumbnail(thumbnail, 0, userData); +} + +void ActivityTsModel::thumbnailCreated(const QPixmap &thumbnail, const void *userData) +{ + foreach (ActivityTsEntry *activity, mData) { + if (activity == userData) { + activity->setThumbnail(thumbnail.toSymbianCFbsBitmap()); + emit dataChanged(); + break; + } + } +}