emailuis/nmailui/src/nmuiextensionmanager.cpp
branchRCL_3
changeset 63 d189ee25cf9d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/nmailui/src/nmuiextensionmanager.cpp	Tue Aug 31 15:04:17 2010 +0300
@@ -0,0 +1,121 @@
+/*
+* 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 "nmuiheaders.h"
+
+static const QString NmSettingsPluginFolderPath("/resource/qt/plugins/nmail/uiext");
+
+/*!
+    \class NmUiExtensionManager
+    \brief Handles ui extension plugins
+ */
+
+/*!
+  Creates list of folder paths where plug-ins can be loaded from.
+  \return folder path list.
+*/
+QStringList NmUiExtensionManager::pluginFolders()
+{
+    NM_FUNCTION;
+    
+    QStringList pluginDirectories;
+    QFileInfoList driveList = QDir::drives();
+
+    foreach(const QFileInfo &driveInfo, driveList) {
+        QString pluginDirectory =
+            driveInfo.absolutePath() + NmSettingsPluginFolderPath;
+        NMLOG(QString("fileInfo.absoluteFilePath() : %1").arg(pluginDirectory)); 
+        if (QFileInfo(pluginDirectory).exists()) {
+            pluginDirectories.append(pluginDirectory);
+        }
+    }
+    
+    return pluginDirectories;
+}
+
+NmUiExtensionManager::NmUiExtensionManager()
+{
+    NM_FUNCTION;
+    
+    // load the protocol extension plugins
+    loadExtensionPlugins();
+}
+
+/*!
+    Destructor
+ */
+NmUiExtensionManager::~NmUiExtensionManager()
+{
+    NM_FUNCTION;
+    
+    // delete plugins from array
+    qDeleteAll(mExtensions.begin(), mExtensions.end());
+    mExtensions.clear();
+
+    qDeleteAll(mPluginLoaders.begin(), mPluginLoaders.end());
+    mPluginLoaders.clear();
+}
+
+/*!
+    Calls all extensions
+ */
+void NmUiExtensionManager::getActions(
+    const NmActionRequest &menuRequest,
+    QList<NmAction*> &actionList)
+{
+    NM_FUNCTION;
+    
+    for (int i = 0; i < mExtensions.count(); i++) {
+    	NmUiExtensionInterface *interface = mExtensions[i];
+        interface->getActions(menuRequest, actionList);
+    }
+}
+/*!
+    Loads plug-ins which implements NmUiExtensionInterface and are registered
+    to <code>/resource/qt/plugins/nmail/uiext</code> folder.
+ */
+void NmUiExtensionManager::loadExtensionPlugins()
+{
+    NM_FUNCTION;
+    
+    QStringList directories(pluginFolders());
+    foreach (const QString &directoryPath, directories) {
+        QDir directory(directoryPath);
+        QFileInfoList fileList(directory.entryInfoList());
+
+        foreach (const QFileInfo &fileInfo, fileList) {
+            NM_COMMENT(QString("Plugin absolute FilePath : %1").arg(fileInfo.absoluteFilePath()));  
+            QScopedPointer<QPluginLoader> loader(
+                new QPluginLoader(fileInfo.absoluteFilePath()));
+            mPluginLoaders.append(loader.data());
+            loader.take();
+        }
+    }
+    
+    NmUiExtensionInterface *interface(NULL);    
+    foreach (QPluginLoader *loader, mPluginLoaders) {      
+        NM_COMMENT(QString("Plugin fileName() : %1").arg(loader->fileName()));
+        QString fileName = loader->fileName();        
+        QObject *pluginInstance = loader->instance();
+        interface = qobject_cast<NmUiExtensionInterface*>(pluginInstance);
+        if (interface) {
+            mExtensions.append(interface);
+        }
+    }
+}
+
+