taskswitcher/server/src/tsservicesproviderconfig.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 <xqconversions.h>
#include <qservicemanager.h>
#include "tsservicesproviderconfig.h"

const char ServicesInterface [] = "com.nokia.qt.taskswitcher.dataprovider";
// -----------------------------------------------------------------------------
CTsServiceProviderConfig* CTsServiceProviderConfig::NewLC()
{
    CTsServiceProviderConfig *self = new (ELeave)CTsServiceProviderConfig();
    CleanupStack::PushL(self);
    self->ConstructL();
    return self;
}

// -----------------------------------------------------------------------------
CTsServiceProviderConfig::CTsServiceProviderConfig()
{
    //No implementation required
}

// -----------------------------------------------------------------------------
void CTsServiceProviderConfig::ConstructL()
{
    QTM_NAMESPACE::QServiceInterfaceDescriptor *ptr(0);
    //QT_TRYCATCH_LEAVING(
       QTM_NAMESPACE::QServiceManager serviceManager;
       const QList<QTM_NAMESPACE::QServiceInterfaceDescriptor> serivces(serviceManager.findInterfaces(QTM_NAMESPACE::QServiceFilter(ServicesInterface)));
       foreach(QTM_NAMESPACE::QServiceInterfaceDescriptor serviceImplementation, serivces) {
           ptr = new QTM_NAMESPACE::QServiceInterfaceDescriptor(serviceImplementation);
           if(0 != ptr) {
               if(KErrNone != mServices.Append(ptr)) {
                   delete ptr;
               }
           }
       }
   //)
}

// -----------------------------------------------------------------------------
CTsServiceProviderConfig::~CTsServiceProviderConfig()
{
    for(TInt iter(0); iter < mServices.Count(); ++iter){
        delete static_cast<QTM_NAMESPACE::QServiceInterfaceDescriptor *>(mServices[iter]);
    }
    mServices.Close();
}

// -----------------------------------------------------------------------------
TInt CTsServiceProviderConfig::count() const
{
    return mServices.Count();
}

// -----------------------------------------------------------------------------
QObject* CTsServiceProviderConfig::loadL(TInt offset)const
{
    const QTM_NAMESPACE::QServiceInterfaceDescriptor *service
        = static_cast<QTM_NAMESPACE::QServiceInterfaceDescriptor *>(mServices[offset]);
    QObject *retVal(0);
    QT_TRYCATCH_LEAVING(
    QTM_NAMESPACE::QServiceManager serviceManager;
    retVal = serviceManager.loadInterface(*service);
     );
    User::LeaveIfNull(retVal);
    return retVal;
}