controlpanelui/src/cpserviceprovider/src/cplauncherservice.cpp
author hgs
Wed, 29 Sep 2010 10:09:58 +0800
changeset 40 593f946f4fec
parent 22 a5692c68d772
permissions -rw-r--r--
201037_2

/*
* 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 "cplauncherservice.h"
#include <QCoreApplication>
#include <cpservicemainwindow.h>
#include <cplauncherinterface.h>
#include <cppluginloader.h>
#include <cpbasesettingview.h>
#include "cpsplogger.h"

CpLauncherService::CpLauncherService(HbMainWindow *mainWindow /* = 0*/)
: XQServiceProvider("cpserviceprovider.com.nokia.symbian.ICpPluginLauncher",mainWindow),
  mMainWindow(mainWindow),
  mAsyncRequestIndex(-1),
  mReturnValue(false)
{
    CPSP_LOG_FUNC_ENTRY("CpLauncherService::CpLauncherService")
    
    publishAll();
    connect(this,SIGNAL(clientDisconnected()),this,SLOT(handleClientDisconnected()));
}

CpLauncherService::~CpLauncherService()
{
    CPSP_LOG_FUNC_ENTRY("CpLauncherService::~CpLauncherService")
}

bool CpLauncherService::complete()
{
    CPSP_LOG_FUNC_ENTRY("CpLauncherService::complete")
    
    CPSP_LOG( QString("CpLauncherService::complete() mAsyncRequestIndex = %1, mReturnValue = %2").arg(
            mAsyncRequestIndex).arg(mReturnValue.toBool()) )
    
    bool ret = completeRequest(mAsyncRequestIndex, mReturnValue);
    mAsyncRequestIndex = -1;
    return ret;
}

void CpLauncherService::setReturnValue(const QVariant &returnValue)
{
    CPSP_LOG_FUNC_ENTRY("CpLauncherService::setReturnValue")
    
    mReturnValue = returnValue;
}

bool CpLauncherService::launchSettingView(const QString &pluginFile,const QVariant &hint)
{
    CPSP_LOG_FUNC_ENTRY("CpLauncherService::launchSettingView");
   
    mAsyncRequestIndex = setCurrentRequestAsync();
    
    bool succeed = false;
       
    if (mMainWindow) {
        mMainWindow->show();
        CpLauncherInterface *plugin = CpPluginLoader::loadCpLauncherInterface(pluginFile);
        if (plugin) {
            CpBaseSettingView *settingView = plugin->createSettingView(hint);
            if (settingView) {
                connect(settingView, SIGNAL(returnValueDelivered(QVariant)),this,SLOT(setReturnValue(QVariant)));
                (static_cast<CpServiceMainWindow*>(mMainWindow))->setSettingView(settingView);                
                succeed = true;
            }
            else {
                CPSP_LOG("Create setting view failed.");
            }
        }
        else {
            CPSP_LOG(QLatin1String("Load plugin interface(CpLauncherInterface) failed: ") + pluginFile);
        }
        
        if (!succeed) {
            qApp->quit();  //quit application if loading plugin failed or creating setting view failed.
        }
    }
    
    return succeed;
}

void CpLauncherService::handleClientDisconnected()
{
    CPSP_LOG_FUNC_ENTRY("CpLauncherService::handleClientDisconnected")
        
    qApp->quit();
}

//End of File