activityfw/testapplications/newtestappset/acttestletter/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 <QEventLoop>
#include <QStringList>
#include <QCoreApplication>
#include <hbapplication.h>
#include "viewmanager.h"
#include "boldwidget.h"
#include "italicwidget.h"
#include "underlinewidget.h"
#include "letterwidget.h"
#include "afstorageglobals.h"

QTM_USE_NAMESPACE

viewmanager::viewmanager(HbApplication *hbapp):
    HbMainWindow(),  mHbApp(hbapp)
{
    QServiceManager serviceManager;
    mActivityStorage = serviceManager.loadInterface("com.nokia.qt.activities.Storage");
    if (!mActivityStorage) {
        qFatal("load Storage plugin failed");
    }

    mActivaction = serviceManager.loadInterface("com.nokia.qt.activities.Activation");
    if (!mActivaction) {
        qFatal("load Activation plugin failed");
    }
    
    qRegisterMetaType<Af::ActivationReason>("Af::ActivationReason");
    connect(mActivaction, SIGNAL(activated(Af::ActivationReason, QString, QVariantHash)), this, SLOT(loadActivityData(Af::ActivationReason, QString, QVariantHash)));
    

    mBoldWidget = new boldwidget();
    mItalicWidget = new italicwidget();
    mUnderlineWidget = new underlinewidget();
    mBoldView = addView(mBoldWidget);
    mBoldView->setTitle("Bold");
    mItalicView = addView(mItalicWidget);
    mItalicView->setTitle("Italic");
    mUnderlineView = addView(mUnderlineWidget);
    mUnderlineView->setTitle("Underline");
    toitalic();
    connect(mBoldWidget, SIGNAL(toitalic()), this, SLOT(toitalic()));
    connect(mBoldWidget, SIGNAL(tounderline()), this, SLOT(tounderline()));

    connect(mItalicWidget, SIGNAL(tounderline()), this, SLOT(tounderline()));
    connect(mItalicWidget, SIGNAL(tobold()), this, SLOT(tobold()));

    connect(mUnderlineWidget, SIGNAL(tobold()), this, SLOT(tobold()));
    connect(mUnderlineWidget, SIGNAL(toitalic()), this, SLOT(toitalic()));

    connect(mBoldWidget, SIGNAL(save()), this, SLOT(save()));
    connect(mItalicWidget, SIGNAL(save()), this, SLOT(save()));
    connect(mUnderlineWidget, SIGNAL(save()), this, SLOT(save()));
    connect(mBoldWidget, SIGNAL(del()), this, SLOT(del()));
    connect(mItalicWidget, SIGNAL(del()), this, SLOT(del()));
    connect(mUnderlineWidget, SIGNAL(del()), this, SLOT(del()));

    connect(this, SIGNAL(statusChanged(bool)), this, SLOT(newStatus(bool)));
    
    //startup case    
    Af::ActivationReason reason;
    bool ok = QMetaObject::invokeMethod(mActivaction, "reason", Q_RETURN_ARG(Af::ActivationReason, reason));
    if (!ok) {
        emit statusChanged(false);
    }
    QString actName;
    QVariantHash parameters;
    if (reason == Af::ActivationReasonActivity) {
        ok = QMetaObject::invokeMethod(mActivaction, "name", Q_RETURN_ARG(QString, actName));
        if (!ok) {
            emit statusChanged(false);
        }
        ok = QMetaObject::invokeMethod(mActivaction, "parameters", Q_RETURN_ARG(QVariantHash, parameters));    
        if (!ok) {
            emit statusChanged(false);
        }
        
        QVariant data;
        ok = QMetaObject::invokeMethod(mActivityStorage, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, actName));
        if (!ok) {
            emit statusChanged(false);            
        }
        
        bool background = false;
        if (parameters.contains(Af::KActivityUriBackgroundKey)) {
            background = true;
        }
        loadActivityData(data, background, true);
    }
    //startup case end
}

viewmanager::~viewmanager()
{
}

void viewmanager::toitalic()
{
    setCurrentView(mItalicView);
    mStatename = "italic";
}

void viewmanager::tobold()
{
    setCurrentView(mBoldView);
    mStatename = "bold";
}

void viewmanager::tounderline()
{
    setCurrentView(mUnderlineView);
    mStatename = "underline";
}


void viewmanager::save()
{
    QString color;
    QString visible;
    QString persistent;
    QString name;
    bool delBefore;
    letterwidget* widget = currentWidget();
    color = widget->color();
    visible = widget->visibility();
    persistent = widget->persistent();
    name = widget->name();
    delBefore = widget->delBeforeSave();

    QStringList list;
    list.append(mStatename);
    list.append(color);
    mSaveVariant.clear();
    mSaveVariant = list;

    HbMainWindow *mainWindow = hbInstance->allMainWindows().first();
    QPixmap screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect());
    QVariantHash metadata;
    metadata.insert(ActivityScreenshotKeyword, screenshot);
    if ( visible == "true" )
        {
        metadata.insert(ActivityVisibility, true);    
        }
    else if ( visible == "false" )
        {
        metadata.insert(ActivityVisibility, false);    
        }
    
    if ( persistent == "true" )
        {
        metadata.insert(ActivityPersistence, true);    
        }
    else if ( persistent == "false" )
        {
        metadata.insert(ActivityPersistence, false);    
        }
    
    if ( name != "none" )
        {
        metadata.insert(ActivityApplicationName, name);    
        }
    
    bool retok, ok;
    if (delBefore) {
        ok = QMetaObject::invokeMethod(mActivityStorage, "removeActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, mStatename));
        if (!ok) {
            emit statusChanged(false);
            return;
        }
    }

    ok = QMetaObject::invokeMethod(mActivityStorage, "saveActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, mStatename), Q_ARG(QVariant, mSaveVariant), Q_ARG(QVariantHash, metadata));
    if (!ok || !retok) {
        emit statusChanged(false);
        return;
    }
    emit statusChanged(true);
}
void viewmanager::del()
{
    bool retok;
    bool ok = QMetaObject::invokeMethod(mActivityStorage, "removeActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, mStatename));
    if (!ok || !retok) {
        emit statusChanged(false);
    }
    emit statusChanged(true);
}

void viewmanager::loadActivityData(Af::ActivationReason reason, const QString &name, QVariantHash parameter)
{
    QVariant data;
    bool ok = QMetaObject::invokeMethod(mActivityStorage, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, name));
    if (!ok) {
        emit statusChanged(false);
        return;
    }
    bool background = false;
    if (parameter.contains(Af::KActivityUriBackgroundKey)) {
        background = true;
    }
    loadActivityData(data, background, false);
}

void viewmanager::loadActivityData(const QVariant &data, bool background, bool startup)
{
    HbView *oldView = currentView();

    QStringList list = data.toStringList();
    QString statename = list.at(0);
    QString color = list.at(1);
    if (statename == "bold") {
        mBoldWidget->setcolor(color);
        mBoldWidget->setBackgroundFlag(background);
        tobold();
        mBoldWidget->update();
    } else if (statename == "italic") {
        mItalicWidget->setcolor(color);
        mItalicWidget->setBackgroundFlag(background);
        toitalic();
        mItalicWidget->update();
    } else if (statename == "underline") {
        mUnderlineWidget->setcolor(color);
        mUnderlineWidget->setBackgroundFlag(background);
        tounderline();
        mUnderlineWidget->update();
    } else {
        statusChanged(false);
    }
    
    if (currentView() != oldView && !startup) {
        QEventLoop loop;
        loop.connect(this, SIGNAL(viewReady()), SLOT(quit()));
        loop.exec();
    }
}

letterwidget* viewmanager::currentWidget()
{
	HbView* view = currentView();
	QGraphicsWidget* gwidget = view->widget();
	letterwidget* lwidget = qobject_cast<letterwidget*>(gwidget);
}

void viewmanager::newStatus(bool status)
{
    letterwidget* cw = currentWidget();
    if(cw) {
        cw->setStatus(status);
    }
}