diff -r cdae8c6c3876 -r 4e8ebe173323 taskswitcherapp/tsdevicedialogplugin/src/tsdevicedialogplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcherapp/tsdevicedialogplugin/src/tsdevicedialogplugin.cpp Mon May 03 12:24:59 2010 +0300 @@ -0,0 +1,177 @@ +/* +* 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 +#include +#include +#include + +#include "tsdevicedialogplugin.h" +#include "tsdevicedialog.h" +#include "tstasksgrid.h" +#include "tstasksgriditem.h" +#include "tsdocumentloader.h" +#include "tsmodel.h" +#include + +/*! + \class TsDeviceDialogPlugin + \ingroup group_tsdevicedialogplugin + \brief TaskSwitcher Device Dialog Plug-in. + */ + +const QString KTsDialogType = "com.nokia.taskswitcher.tsdevicedialogplugin/1.0"; + +/*! + Constructor. + */ +TsDeviceDialogPlugin::TsDeviceDialogPlugin() : mError(0), mModel(0), mStorage(CaService::instance()), mLongPressed(false) +{ +} + +TsDeviceDialogPlugin::~TsDeviceDialogPlugin() +{ + delete mModel; +} +/*! + \reimp + */ +bool TsDeviceDialogPlugin::accessAllowed(const QString &deviceDialogType, const QVariantMap ¶meters, const QVariantMap &securityInfo) const +{ + Q_UNUSED(deviceDialogType) + Q_UNUSED(parameters) + Q_UNUSED(securityInfo) + + // This plugin doesn't perform operations that may compromise security. + // All clients are allowed to use. + return true; +} + +/*! + \reimp + */ +HbDeviceDialogInterface *TsDeviceDialogPlugin::createDeviceDialog(const QString &deviceDialogType, const QVariantMap ¶meters) +{ + Q_UNUSED(parameters) + TsDeviceDialog *dialog(0); + if (deviceDialogType == KTsDialogType) { + if (0 == mModel) { + QtMobility::QServiceManager serviceManager; + QObject *objPtr(serviceManager.loadInterface("com.nokia.qt.activities.ActivityManager")); + if (objPtr) { + objPtr->setParent(this);//make it autodestucted + } else { + objPtr = this;//activity plugin is not present. provide invalid instance because its not critical functionality. + //QMetaObject::invokeMethod is safe to use in such a case. + } + mModel = new TsModel(*mStorage, *objPtr); + } + + mLoader.reset(); + bool ok(true); + mLoader.load(":/xml/resource/layout.docml", &ok); + Q_ASSERT(ok); + + dialog = qobject_cast(mLoader.findWidget("tsdevicedialog")); + TsTasksGrid *grid = qobject_cast(mLoader.findWidget("taskgrid")); + Q_ASSERT(dialog); + Q_ASSERT(grid); + + dialog->changeOrientation(dialog->mainWindow()->orientation()); + + grid->setItemPrototype(new TsTasksGridItem()); + grid->setModel(mModel); + + static_cast(mModel)->updateModel(); + + // connect the grid and model + qRegisterMetaType("QModelIndex"); + + disconnect(grid, SIGNAL(activated(QModelIndex)), this, SLOT(activated(QModelIndex))); + disconnect(grid, SIGNAL(pressed(QModelIndex)), this, SLOT(pressed())); + disconnect(grid, SIGNAL(longPressed(HbAbstractViewItem *, QPointF)), this, SLOT(longPressed())); + disconnect(this, SIGNAL(activate(QModelIndex)), mModel, SLOT(openApplication(QModelIndex))); + disconnect(this, SIGNAL(activate(QModelIndex)), dialog, SLOT(close())); + disconnect(grid, SIGNAL(deleteButtonClicked(QModelIndex)), mModel, SLOT(closeApplication(QModelIndex))); + + connect(grid, SIGNAL(activated(QModelIndex)), this, SLOT(activated(QModelIndex))); + connect(grid, SIGNAL(pressed(QModelIndex)), this, SLOT(pressed())); + connect(grid, SIGNAL(longPressed(HbAbstractViewItem *, QPointF)), this, SLOT(longPressed())); + connect(this, SIGNAL(activate(QModelIndex)), mModel, SLOT(openApplication(QModelIndex))); + connect(this, SIGNAL(activate(QModelIndex)), dialog, SLOT(close())); + connect(grid, SIGNAL(deleteButtonClicked(QModelIndex)), mModel, SLOT(closeApplication(QModelIndex)), Qt::QueuedConnection); + } + return dialog; +} + +/*! + \reimp + */ +bool TsDeviceDialogPlugin::deviceDialogInfo(const QString &deviceDialogType, const QVariantMap ¶meters, DeviceDialogInfo *info) const +{ + Q_UNUSED(parameters) + Q_UNUSED(deviceDialogType) + + info->group = GenericDeviceDialogGroup; + info->flags = NoDeviceDialogFlags; + info->priority = DefaultPriority; + + return true; +} + +/*! + \reimp + */ +QStringList TsDeviceDialogPlugin::deviceDialogTypes() const +{ + return QStringList(KTsDialogType); +} + +/*! + \reimp + */ +HbDeviceDialogPlugin::PluginFlags TsDeviceDialogPlugin::pluginFlags() const +{ + return PluginFlags(PreloadPlugin | KeepPluginLoaded); +} + +/*! + \reimp + */ +int TsDeviceDialogPlugin::error() const +{ + return mError; +} + +void TsDeviceDialogPlugin::activated(QModelIndex index) +{ + if (!mLongPressed) { + emit activate(index); + } +} + +void TsDeviceDialogPlugin::pressed() +{ + mLongPressed = false; +} + +void TsDeviceDialogPlugin::longPressed() +{ + mLongPressed = true; +} + +Q_EXPORT_PLUGIN2(tsdevicedialogplugin, TsDeviceDialogPlugin)