diff -r f62f87b200ec -r 8e5041d13c84 activityfw/activitylauncher/activitylauncherview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activityfw/activitylauncher/activitylauncherview.cpp Fri Apr 16 15:16:09 2010 +0300 @@ -0,0 +1,107 @@ +/* +* 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 "activitylauncherview.h" + +#include +#include +#include + +#include + +#include +#include +#include +#include + +#include + +QTM_USE_NAMESPACE + +ActivityLauncherView::ActivityLauncherView(QGraphicsItem *parent) : HbView(parent), mModel(NULL), mActivityManager(NULL) +{ + QServiceManager serviceManager; + mActivityManager = serviceManager.loadInterface("com.nokia.qt.activities.ActivityManager"); + + if (!mActivityManager) { + qFatal("Cannot initialize critical com.nokia.qt.activities.ActivityManager service"); + } + + // create UI + setTitle(tr("Activity launcher")); + QGraphicsLinearLayout* layout = new QGraphicsLinearLayout(Qt::Vertical); + QGraphicsLinearLayout* statusLayout = new QGraphicsLinearLayout(Qt::Horizontal); + mStatusLabel = new HbLabel(this); + mStatusLabel->setAlignment(Qt::AlignLeft); + statusLayout->setMaximumHeight(15); + + HbLabel* statusHeader = new HbLabel("Status: "); + statusHeader->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); + statusLayout->addItem(statusHeader); + statusLayout->addItem(mStatusLabel); + + HbGridView* activities = new HbGridView(); + connect(activities, SIGNAL(activated(QModelIndex)), this, SLOT(itemPressed(QModelIndex))); + activities->setRowCount(1); + activities->setColumnCount(1); + + activities->setScrollDirections(Qt::Horizontal); + + mModel = new QStandardItemModel(this); + activities->setModel(mModel); + + layout->addItem(statusLayout); + layout->addItem(activities); + + setLayout(layout); + qApp->installEventFilter(this); + getActivitiesList(); +} + +ActivityLauncherView::~ActivityLauncherView() +{ + delete mActivityManager; +} + +void ActivityLauncherView::getActivitiesList() +{ + mStatusLabel->setPlainText("Fetching activities"); + mCurrentActivities.clear(); + QMetaObject::invokeMethod(mActivityManager, "activitiesList", Q_RETURN_ARG(QList, mCurrentActivities)); + mModel->clear(); + + foreach(const QVariantHash& activityEntry, mCurrentActivities) { + QStandardItem* newItem = new QStandardItem(QIcon(activityEntry.value("screenshot").value()), QString("%1").arg(activityEntry.value(ActivityActivityKeyword).toInt())); + mModel->invisibleRootItem()->appendRow(newItem); + } + mStatusLabel->setPlainText(QString("Ready (%1 activities)").arg(mCurrentActivities.count())); +} + +bool ActivityLauncherView::eventFilter(QObject* obj, QEvent* event) +{ + if (event->type() == QEvent::ApplicationActivate) { + getActivitiesList(); + } + return QObject::eventFilter(obj, event); +} + +void ActivityLauncherView::itemPressed(const QModelIndex& index) +{ + QVariantHash activity = mCurrentActivities.at(index.row()); + int applicationId = activity.value(ActivityApplicationKeyword).toInt(); + QString activityName = activity.value(ActivityActivityKeyword).toString(); + QMetaObject::invokeMethod(mActivityManager, "launchActivity", Q_ARG(int, applicationId), Q_ARG(QString, activityName)); +}