emailuis/nmsettingui/src/nmmailboxsettingsmanager.cpp
changeset 18 578830873419
child 20 ecc8def7944a
equal deleted inserted replaced
4:e7aa27f58ae1 18:578830873419
       
     1 /*
       
     2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 *
       
    16 */
       
    17 
       
    18 #include <QPluginLoader>
       
    19 #include <QDir>
       
    20 #include <QScopedPointer>
       
    21 #include <HbView>
       
    22 #include <QVariant>
       
    23 #include <nmdatamanager.h>
       
    24 #include <nmicons.h>
       
    25 #include <nmcommon.h>
       
    26 
       
    27 #include "nmmailboxsettingsmanager.h"
       
    28 #include "nmsettingsplugininterface.h"
       
    29 
       
    30 
       
    31 /*!
       
    32     \class NmMailboxSettingsManager
       
    33     \brief Provides access to mailbox settings through the setting plug-ins.
       
    34 
       
    35 */
       
    36 
       
    37 
       
    38 // ======== HELPER FUNCTIONS ========
       
    39 
       
    40 /*!
       
    41   Creates list of folder paths where plug-ins can be loaded from.
       
    42   \return folder path list.
       
    43 */
       
    44 QStringList pluginFolders()
       
    45 {
       
    46     NMLOG(QString("NmMailboxSettingsManager - HELPER FUNCTIONS - pluginFolders"));
       
    47 
       
    48     const QString nmSettingsPluginFolderPath("resource/qt/plugins/nmail/settings");
       
    49     QStringList pluginDirectories;
       
    50     QFileInfoList driveList = QDir::drives();
       
    51 
       
    52     foreach(const QFileInfo &driveInfo, driveList) {
       
    53         QString pluginDirectory =
       
    54             driveInfo.absolutePath() + nmSettingsPluginFolderPath;
       
    55 
       
    56         if (QFileInfo(pluginDirectory).exists()) {
       
    57             pluginDirectories.append(pluginDirectory);
       
    58         }
       
    59     }
       
    60 
       
    61     NMLOG(QString("NmMailboxSettingsManager - HELPER FUNCTIONS - pluginFolders - OK"));
       
    62     return pluginDirectories;
       
    63 }
       
    64 
       
    65 
       
    66 // ======== MEMBER FUNCTIONS ========
       
    67 
       
    68 /*!
       
    69     Contructor of NmMailboxSettingsManager.
       
    70 */
       
    71 NmMailboxSettingsManager::NmMailboxSettingsManager()
       
    72 : mDataManager(0)
       
    73 {
       
    74     QScopedPointer<NmDataManager> dataManager(new NmDataManager());
       
    75     loadPlugins();
       
    76     mDataManager = dataManager.take();
       
    77 }
       
    78 
       
    79 
       
    80 /*!
       
    81     Destructor of NmMailboxSettingsManager.
       
    82 */
       
    83 NmMailboxSettingsManager::~NmMailboxSettingsManager()
       
    84 {
       
    85     unloadPlugins();
       
    86     qDeleteAll(mPluginLoaders);
       
    87     mPluginLoaders.clear();
       
    88     NmIcons::freeIcons();
       
    89     delete mDataManager;
       
    90 }
       
    91 
       
    92 
       
    93 /*!
       
    94     Populates the given list with available mailboxes.
       
    95 
       
    96     \param mailboxList List to be popuplated with mailbox entries.
       
    97 
       
    98 */
       
    99 void NmMailboxSettingsManager::listMailboxes(QList<NmMailbox *> &mailboxList)
       
   100 {
       
   101     mDataManager->listMailboxes(mailboxList);
       
   102 }
       
   103 
       
   104 
       
   105 /*!
       
   106     Returns a branded icon for the given mailbox id.
       
   107 
       
   108     \param mailboxId Id of the mailbox.
       
   109     \return Icon for the mailbox.
       
   110 */
       
   111 HbIcon &NmMailboxSettingsManager::mailboxIcon(const NmId &mailboxId) const
       
   112 {
       
   113     Q_UNUSED(mailboxId);
       
   114     // TODO: use some branding feature when it is available.
       
   115     return NmIcons::getIcon(NmIcons::NmIconDefaultMailbox);
       
   116 }
       
   117 
       
   118 
       
   119 /*!
       
   120     Populates the given data form model with setting items from the correct
       
   121     plug-in.
       
   122 
       
   123     \param model Model to be populated with the setting items.
       
   124     \param form The form where the setting items are placed.
       
   125     \param mailboxId Id of the mailbox which's settings are to be populated to
       
   126                      the model.
       
   127 */
       
   128 void NmMailboxSettingsManager::populateModel(HbDataFormModel &model,
       
   129     HbDataForm &form, const NmId &mailboxId) const
       
   130 {
       
   131     NMLOG(QString("NmMailboxSettingsManager::populateModel"));
       
   132 
       
   133     NmSettingsPluginInterface *plugin = 0;
       
   134 
       
   135     foreach (QPluginLoader *loader, mPluginLoaders) {
       
   136         QObject *pluginInstance = loader->instance();
       
   137         plugin = qobject_cast<NmSettingsPluginInterface *>(pluginInstance);
       
   138 
       
   139         if (plugin && plugin->populateModel(model, form, mailboxId)) {
       
   140 
       
   141             // We need to disconnect possible previous connections, because we only have
       
   142             // one instance of every plugin. This way we can be sure that signal is send to
       
   143             // correct object.
       
   144             pluginInstance->disconnect(SIGNAL(mailboxListChanged(const NmId &, NmSettings::MailboxEventType)));
       
   145             pluginInstance->disconnect(SIGNAL(mailboxPropertyChanged(const NmId &, QVariant, QVariant)));
       
   146 
       
   147             connect(pluginInstance, SIGNAL(mailboxListChanged(const NmId &, NmSettings::MailboxEventType)),
       
   148                 this, SIGNAL(mailboxListChanged(const NmId &, NmSettings::MailboxEventType)));
       
   149 
       
   150             connect(pluginInstance, SIGNAL(mailboxPropertyChanged(const NmId &, QVariant, QVariant)),
       
   151                 this, SIGNAL(mailboxPropertyChanged(const NmId &, QVariant, QVariant)));
       
   152 
       
   153             break;
       
   154         }
       
   155     }
       
   156     NMLOG(QString("NmMailboxSettingsManager::populateModel - OK"));
       
   157 }
       
   158 
       
   159 
       
   160 /*!
       
   161     Loads plug-ins which implements NmSettingsPluginInterface and are registered
       
   162     to <code>/resource/qt/plugins/nmail/settings</code> folder.
       
   163 */
       
   164 void NmMailboxSettingsManager::loadPlugins()
       
   165 {
       
   166     NMLOG(QString("NmMailboxSettingsManager::loadPlugins"));
       
   167 
       
   168     QStringList directories(pluginFolders());
       
   169 
       
   170     foreach (const QString &directoryPath, directories) {
       
   171         QDir directory(directoryPath);
       
   172         QFileInfoList fileList(directory.entryInfoList());
       
   173 
       
   174         foreach (const QFileInfo &fileInfo, fileList) {
       
   175             QScopedPointer<QPluginLoader> loader(
       
   176                 new QPluginLoader(fileInfo.absoluteFilePath()));
       
   177             mPluginLoaders.append(loader.data());
       
   178             loader.take();
       
   179         }
       
   180     }
       
   181 
       
   182     NMLOG(QString("NmMailboxSettingsManager::loadPlugins - OK"));
       
   183 }
       
   184 
       
   185 
       
   186 /*!
       
   187     Unloads plug-ins to ensure that the root component is deleted.
       
   188 */
       
   189 void NmMailboxSettingsManager::unloadPlugins()
       
   190 {
       
   191     NMLOG(QString("NmMailboxSettingsManager::unloadPlugins"));
       
   192 
       
   193     foreach (QPluginLoader *loader, mPluginLoaders) {
       
   194         loader->unload();
       
   195     }
       
   196 
       
   197     NMLOG(QString("NmMailboxSettingsManager::unloadPlugins - OK"));
       
   198 }
       
   199 
       
   200 // End of file.