/*
* 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);
}
}