activityfw/testapplications/activitytakeawhile/viewmanager.cpp
author Jaakko Haukipuro (Nokia-MS/Oulu) <Jaakko.Haukipuro@nokia.com>
Thu, 16 Sep 2010 12:11:40 +0100
changeset 117 c63ee96dbe5f
permissions -rw-r--r--
Missing activityfw and taskswitcher components - fix for Bug 3670

/*
* 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 <qservicemanager.h>
#include <HbInstance>
#include <QStringList>
#include <QCoreApplication>
#include <hbapplication.h>
#include "viewmanager.h"
#include "letterwidget.h"
#include <QGraphicsGridLayout>
#include <HbPushButton>

QTM_USE_NAMESPACE

viewmanager::viewmanager():
    HbMainWindow()
{
    QServiceManager serviceManager;
    mActivityClient = serviceManager.loadInterface("com.nokia.qt.activities.ActivityClient");
    if (!mActivityClient) {
        qFatal("load plugin failed");
    }

    mLw = new letterwidget;
    addView(mLw);
    
    connect(mActivityClient, SIGNAL(activityRequested(QString)), this, SLOT(loadActivityData(QString)));
    

    
    bool retok;
    bool ok = QMetaObject::invokeMethod(mActivityClient, "waitActivity", Q_RETURN_ARG(bool, retok));
    if (!ok || !retok) {
//        qFatal("Subscribe failed");
    }

    //startup case    
    QStringList arglist = qApp->arguments(); 
    QVariantHash actdata;
    ok = QMetaObject::invokeMethod(mActivityClient, "parseCommandLine", Q_RETURN_ARG(QVariantHash, actdata), Q_ARG(QStringList, arglist));
    if (!ok) {
        qFatal("Startup failed");
    }
    QString actid = actdata.value("activityname").toString();
    if ( !actid.isNull() )
        {
        QVariant data;
        ok = QMetaObject::invokeMethod(mActivityClient, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, actid));
        if (!ok) {
            qFatal("Get data failed");
        }
        loadActivityData(data);
        }
    //startup case end
    
    connect(mLw, SIGNAL(save()), this, SLOT(save()));
    connect(mLw, SIGNAL(del()), this, SLOT(del()));
}

viewmanager::~viewmanager()
{
}

void viewmanager::save()
{
    mSaveVariant = mLw->state();

    HbMainWindow *mainWindow = hbInstance->allMainWindows().first();
    QPixmap screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect());
    QVariantHash metadata;
    metadata.insert("screenshot", screenshot);

    bool retok;
    bool ok = QMetaObject::invokeMethod(mActivityClient, "removeActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, mLw->state()));
    if (!ok) {
        qFatal("Remove failed");
    }

    ok = QMetaObject::invokeMethod(mActivityClient, "addActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, mLw->state()), Q_ARG(QVariant, mSaveVariant), Q_ARG(QVariantHash, metadata));
    if (!ok || !retok) {
        qFatal("Add failed");
    }
}
void viewmanager::del()
{
    bool retok;
    bool ok = QMetaObject::invokeMethod(mActivityClient, "removeActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, mLw->state()));
    if (!ok) {
        qFatal("Remove failed");
    }
}
    
void viewmanager::loadActivityData(const QString &name)
{
    bool retok;
    bool ok = QMetaObject::invokeMethod(mActivityClient, "waitActivity", Q_RETURN_ARG(bool, retok));
    if (!ok || !retok) {
        //qFatal("Resubscribe failed");
    }
    QVariant data;
    ok = QMetaObject::invokeMethod(mActivityClient, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, name));
    if (!ok) {
        qFatal("Get data failed");
    }
    loadActivityData(data);
}

void viewmanager::loadActivityData(const QVariant &data)
{    
    QString statename = data.toString();
    mLw->setState(statename);
}