diff -r d1dadafc5584 -r 26079c1bb561 taskswitcher/activitytsplugin/src/activitytsmodel.cpp --- a/taskswitcher/activitytsplugin/src/activitytsmodel.cpp Mon Sep 27 11:31:59 2010 +0300 +++ b/taskswitcher/activitytsplugin/src/activitytsmodel.cpp Wed Oct 06 16:00:22 2010 +0300 @@ -26,6 +26,10 @@ #include #include "afstorageglobals.h" +#include "tsrunningapp.h" +#include "tsrunningappstorage.h" +#include "tswindowgroupsmonitor.h" +#include "tsresourcemanager.h" QTM_USE_NAMESPACE @@ -36,7 +40,11 @@ const int KItemsLimit = 0x00000001; } -ActivityTsModel::ActivityTsModel(QObject *parent) : QObject(parent), mAfManager(0) , mMaxItems(10) +ActivityTsModel::ActivityTsModel(QObject *parent) : +QObject(parent), +mMonitor(0), +mAfManager(0) , +mMaxItems(10) { { QServiceManager serviceManager; @@ -67,23 +75,53 @@ ActivityTsModel::~ActivityTsModel() { + if (mMonitor) { + mMonitor->Cancel(*this); + } qDeleteAll(mData); } +void ActivityTsModel::HandleWindowGroupChanged( + MTsResourceManager& resources, + const MTsRunningApplicationStorage& storage) +{ + Q_UNUSED(resources); + mRunningAppsUid.clear(); + for (int i(0); i < storage.Count(); ++i) { + mRunningAppsUid.append(storage[i].UidL().iUid); + } + if(filterActivity()) { + emit dataChanged(); + } +} + +bool ActivityTsModel::filterActivity() +{ + bool retVal(false); + mPublishedData.clear(); + for (int i(0); i < mData.count(); ++i) { + if(!mRunningAppsUid.contains(mData[i]->data().value(ActivityApplicationKeyword).toInt())) { + mPublishedData.append(mData[i]); + retVal = true; + } + } + return retVal; +} + QList ActivityTsModel::taskList() const { - return taskList(mData.count()); + return taskList(mPublishedData.count()); } QList ActivityTsModel::taskList(int limit) const { QList result; - for (int i(0); i < limit && i < mData.count(); ++i) { - result.append(mData[i]->data()); + for (int i(0); i < limit && i < mPublishedData.count(); ++i) { + result.append(mPublishedData[i]->data()); } return result; } - + bool ActivityTsModel::openTask(const QVariant &id) { foreach (const ActivityTsEntry *entry, mData) { @@ -105,8 +143,8 @@ } void ActivityTsModel::getActivities() -{ - qDeleteAll(mData); +{ + QList oldData(mData); mData.clear(); QList activities; @@ -114,27 +152,49 @@ "activitiesList", Q_RETURN_ARG(QList, activities), Q_ARG(int, mMaxItems)); - + foreach (const QVariantHash &activityEntry, activities) { - mData.append(new ActivityTsEntry(activityEntry)); + ActivityTsEntry *reusableEntry = findEntryWithScreenshot(oldData, activityEntry); + if (reusableEntry) { + mData.append(reusableEntry); + oldData.removeAll(reusableEntry); + } else { + mData.append(new ActivityTsEntry(activityEntry)); - QMetaObject::invokeMethod( + QMetaObject::invokeMethod( mAfManager, "getThumbnail", Q_ARG(QString, activityEntry.value(ActivityScreenshotKeyword).toString()), Q_ARG(void *, mData.last())); + } } + qDeleteAll(oldData); + filterActivity(); emit dataChanged(); } +ActivityTsEntry *ActivityTsModel::findEntryWithScreenshot(const QList &entryList, const QVariantHash &activityEntry) +{ + foreach (ActivityTsEntry *entry, entryList) { + const QVariantHash data = entry->data(); + if ((data.value(ActivityApplicationKeyword) == activityEntry.value(ActivityApplicationKeyword)) && + (data.value(ActivityActivityKeyword) == activityEntry.value(ActivityActivityKeyword)) && + (data.value("TaskTimestamp") == activityEntry.value(ActivityTimestamp)) && + (data.value("TaskScreenshot") != -1)) { + return entry; + } + } + return 0; +} + 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()); @@ -143,3 +203,12 @@ } } } + +void ActivityTsModel::setResources(MTsResourceManager& resources) +{ + if (mMonitor) { + mMonitor->Cancel(*this); + } + mMonitor = &resources.WsMonitor(); + mMonitor->SubscribeL(*this); +}