homescreenapp/hsdomainmodel/src/hscontentservice.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 14 May 2010 15:43:04 +0300
changeset 46 23b5d6a29cce
parent 39 4e8ebe173323
child 55 03646e8da489
permissions -rw-r--r--
Revision: 201017 Kit: 201019

/*
* 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:  Homescreen runtime content service.
*
*/

#include "hscontentservice.h"
#include "hsdatabase.h"
#include "hsscene.h"
#include "hspage.h"
#include "hsdomainmodeldatastructures.h"
#include "hswidgethost.h"


HsContentService::HsContentService(QObject *parent)
    : QObject(parent)
{
   
}

HsContentService::~HsContentService()
{
}


bool HsContentService::createWidget(const QVariantHash &params)
{
    HsWidgetHost *widget = createWidgetForPreview(params);
    if (!widget) {
        return false;
    }
     
    return HsScene::instance()->activePage()->addNewWidget(widget);
}

HsWidgetHost *HsContentService::createWidgetForPreview(const QVariantHash &params)
{
    HsWidgetData widgetData;
    widgetData.uri = params.value("uri").toString();


    HsWidgetHost *widget = HsWidgetHost::createInstance(widgetData,
                                                        params.value("preferences").toHash());

    if (!widget) {
        return NULL;
    }
    if (!widget->load()) {
        widget->deleteFromDatabase();
        delete widget;
        return NULL;
    }

    return widget;
}

/*!

*/
bool HsContentService::addWidget(const QString &uri, const QVariantHash &preferences)
{
    HsWidgetData widgetData;
    widgetData.uri = uri;

    QScopedPointer<HsWidgetHost> widget(HsWidgetHost::createInstance(widgetData, preferences));
    if (!widget.data()) {
        return false;
    }

    HsPage *activePage = HsScene::instance()->activePage();
    if (!widget->load() || !activePage->addNewWidget(widget.data())) {
        widget->deleteFromDatabase();
        return false;
    }

    HsWidgetHost *taken = widget.take();
    taken->initializeWidget();
    taken->showWidget();
    activePage->layoutNewWidgets();
    return true;
}

/*!

*/
HsContentService *HsContentService::instance()
{
    if (!mInstance) {
        mInstance.reset(new HsContentService);
    }
    return mInstance.data();
}

/*!
    Points to the content service instance.
*/
QScopedPointer<HsContentService> HsContentService::mInstance(0);