taskswitcher/activitytsplugin/src/activitytsmodel.cpp
changeset 124 e36b2f4799c0
child 125 26079c1bb561
--- /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 <stdexcept>
+
+#include <QPixmap>
+#include <QUrl>
+
+#include <QServiceManager>
+#include <XQSettingsManager>
+
+#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<QVariantHash> ActivityTsModel::taskList() const
+{
+    return taskList(mData.count());
+}
+
+QList<QVariantHash> ActivityTsModel::taskList(int limit) const
+{
+    QList<QVariantHash> 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<QVariantHash> activities;
+    QMetaObject::invokeMethod(mAfManager,
+                              "activitiesList",
+                              Q_RETURN_ARG(QList<QVariantHash>, 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;
+        }
+    }
+}