--- /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 <QtPlugin>
+#include <hbdevicedialog.h>
+#include <HbMainWindow>
+#include <qservicemanager.h>
+
+#include "tsdevicedialogplugin.h"
+#include "tsdevicedialog.h"
+#include "tstasksgrid.h"
+#include "tstasksgriditem.h"
+#include "tsdocumentloader.h"
+#include "tsmodel.h"
+#include <caservice.h>
+
+/*!
+ \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<TsDeviceDialog *>(mLoader.findWidget("tsdevicedialog"));
+ TsTasksGrid *grid = qobject_cast<TsTasksGrid *>(mLoader.findWidget("taskgrid"));
+ Q_ASSERT(dialog);
+ Q_ASSERT(grid);
+
+ dialog->changeOrientation(dialog->mainWindow()->orientation());
+
+ grid->setItemPrototype(new TsTasksGridItem());
+ grid->setModel(mModel);
+
+ static_cast<TsModel *>(mModel)->updateModel();
+
+ // connect the grid and model
+ qRegisterMetaType<QModelIndex>("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)