taskswitcher/server/src/tsservicesproviderconfig.cpp
changeset 116 305818acdca4
child 119 50e220be30d1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/server/src/tsservicesproviderconfig.cpp	Mon Sep 13 13:26:33 2010 +0300
@@ -0,0 +1,85 @@
+/*
+* 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 != iServices.Append( ptr ) )
+                   {
+                   delete ptr;
+                   }
+               }
+           }
+       )
+    }
+
+// -----------------------------------------------------------------------------
+CTsServiceProviderConfig::~CTsServiceProviderConfig()
+    {
+    for( TInt iter(0); iter < iServices.Count(); ++iter )
+        {
+        delete static_cast<QTM_NAMESPACE::QServiceInterfaceDescriptor *>(iServices[iter]);
+        }
+    iServices.Close();
+    }
+
+// -----------------------------------------------------------------------------
+TInt CTsServiceProviderConfig::Count() const
+    {
+    return iServices.Count();
+    }
+
+// -----------------------------------------------------------------------------
+QObject* CTsServiceProviderConfig::LoadL(TInt aOffset)const
+    {
+    const QTM_NAMESPACE::QServiceInterfaceDescriptor *service
+        = static_cast<QTM_NAMESPACE::QServiceInterfaceDescriptor *>(iServices[aOffset]);
+    QObject *retVal(0);
+    QT_TRYCATCH_LEAVING(
+    QTM_NAMESPACE::QServiceManager serviceManager;
+    retVal = serviceManager.loadInterface(*service); )
+    User::LeaveIfNull( retVal );
+    return retVal;
+    }