ipsservices/nmipssettings/src/nmipssettingsplugin.cpp
branchRCL_3
changeset 63 d189ee25cf9d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ipsservices/nmipssettings/src/nmipssettingsplugin.cpp	Tue Aug 31 15:04:17 2010 +0300
@@ -0,0 +1,676 @@
+/*
+* Copyright (c) 2010 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 <qplugin.h>
+#include <QCoreApplication>
+#include <QTranslator>
+#include <QScopedPointer>
+#include <QLocale>
+
+#include <HbStringUtil>
+#include <HbDataForm>
+#include <HbDataFormModel>
+#include <HbDataFormModelItem>
+#include <HbLineEdit>
+#include <HbAction>
+
+#include <cpsettingformitemdata.h>
+
+#include "nmipssettingsplugin.h"
+#include "nmipssettingshelper.h"
+#include "nmipssettingsmanagerbase.h"
+#include "nmipssettingsmanagerfactory.h"
+#include "nmipssettingitems.h"
+#include "nmcommon.h"
+#include "ipssettingkeys.h"
+
+#include "nmipssettingscustomitem.h"
+#include "nmipssettingslabeledcombobox.h"
+
+const QString NmIpsSettingsComboItems("comboItems");
+const QString NmIpsSettingsLabelTexts("labelTexts");
+const QString NmIpsSettingsItems("items");
+const int NmIpsSettingsReceptionUserDefinedProfileEnabled(1);
+
+/*!
+    \class NmIpsSettingsPlugin
+    \brief The class implements NmSettingsPluginInterface which is an interface
+           for NMail settings plug-ins.
+
+*/
+
+// ======== MEMBER FUNCTIONS ========
+
+/*!
+    Constructor of NmIpsSettingsPlugin.
+*/
+NmIpsSettingsPlugin::NmIpsSettingsPlugin()
+: mSettingsHelper(0),
+  mSettingsManager(0),
+  mHiddenItem(false),
+  mCurrentInboxIndex(-1)
+{
+    QString lang = QLocale::system().name();
+    QString path = "Z:/resource/qt/translations/";
+    QString appName = "mailips_";
+    QString commonName = "common_";
+    
+    // Load common strings
+	QScopedPointer<QTranslator> commonTranslator(new QTranslator(this));
+    commonTranslator->load(commonName + lang, path);
+    QCoreApplication::installTranslator(commonTranslator.data());
+    (void)commonTranslator.take();  
+    
+    // Load IPS settings specific strings
+	QScopedPointer<QTranslator> translator(new QTranslator(this));
+    translator->load(appName + lang, path);
+    QCoreApplication::installTranslator(translator.data());
+    (void)translator.take();
+}
+
+/*!
+    Destructor of NmIpsSettingsPlugin.
+*/
+NmIpsSettingsPlugin::~NmIpsSettingsPlugin()
+{
+    delete mSettingsManager;
+    delete mSettingsHelper;
+}
+
+/*!
+    Populates the form items into model.
+    \param model Reference to the model.
+    \param form Reference to the form.
+    \param mailboxId Id of the mailbox.
+    \return <code>true</code> if plug-in contains certain mailbox otherwise <code>false</code>
+*/
+bool NmIpsSettingsPlugin::populateModel(HbDataFormModel &model,
+    HbDataForm &form, const NmId &mailboxId)
+{
+    // populateModel is called each time when a new settings view is created and this
+    // plugin is destructed only after the mail settings is exited, so
+    // SettingsManager and SettingsHelper needs to be deleted.
+    delete mSettingsManager;
+    delete mSettingsHelper;
+    mSettingsHelper = 0;
+    mSettingsManager = NmIpsSettingsManagerFactory::createSettingManager(mailboxId);
+
+    bool result(false);
+
+    // This plugin is only used when the mailbox is a IMAP or POP3 account.
+    // Settings manager object is valid if the mailboxId is IMAP or POP3 account.
+    if (mSettingsManager) {
+        // Turns AlwaysOnline OFF
+        setAlwaysOnlineState(EServerAPIEmailTurnOff, mailboxId);
+        
+        // Store model and form pointers.
+        mModel = &model;
+        mForm = &form;
+        
+        // Create settings helper.
+        mSettingsHelper = new NmIpsSettingsHelper(*mSettingsManager, form, model);
+
+        connect(mSettingsHelper,
+                SIGNAL(mailboxListChanged(const NmId &, NmSettings::MailboxEventType)),
+                this, SIGNAL(mailboxListChanged(const NmId &, NmSettings::MailboxEventType)));
+
+        connect(mSettingsHelper, SIGNAL(mailboxPropertyChanged(const NmId &, QVariant, QVariant)),
+                this, SIGNAL(mailboxPropertyChanged(const NmId &, QVariant, QVariant)));
+
+        connect(mSettingsHelper, SIGNAL(goOffline(const NmId &)),
+                this, SIGNAL(goOffline(const NmId &)));
+
+        connect(mSettingsHelper, SIGNAL(createUserDefinedMode()),
+                this, SLOT(createUserDefinedMode()));
+        
+        // Get the value if some ui items need to be hidden.
+        QVariant data;
+        mSettingsManager->readSetting(IpsServices::UserNameHidden, data);
+        mHiddenItem = data.toBool();
+        // Add items to the model.
+        initGroupItems();
+        result = true;
+    }
+    return result;
+}
+
+/*!
+    This slot can be used in cases when plugin needs to handle stuff before settingsview is closed.
+*/
+void NmIpsSettingsPlugin::aboutToClose()
+{
+    QVariant profileIndex;
+    const NmId mailboxId = mSettingsManager->mailboxId();
+    
+	mSettingsManager->readSetting(IpsServices::ReceptionActiveProfile, profileIndex);
+	if ((mSettingsHelper->isOffline()) && (profileIndex.toInt() != IpsServices::EmailSyncProfileManualFetch)) {
+		emit goOnline(mailboxId);
+	}
+	
+	// Turns AlwaysOnline ON
+	setAlwaysOnlineState(EServerAPIEmailTurnOn, mailboxId);
+}
+
+/*!
+    Appends the group items to the model.
+*/
+void NmIpsSettingsPlugin::initGroupItems()
+{
+    HbDataFormModelItem *rootItem = mModel->invisibleRootItem();
+
+    HbDataFormModelItem *preferencesItem =
+        mModel->appendDataFormItem(HbDataFormModelItem::GroupItem,
+                                   hbTrId("txt_mailips_subhead_preferences"),
+                                   rootItem);
+    initPreferenceItems(*preferencesItem);
+
+    HbDataFormModelItem *receivingScheduleItem =
+        mModel->appendDataFormItem(HbDataFormModelItem::GroupItem,
+                                   hbTrId("txt_mailips_subhead_receiving_schedule"),
+                                   rootItem);
+    mSettingsHelper->setReceivingScheduleGroupItem(receivingScheduleItem);
+    initReceivingScheduleItems(*receivingScheduleItem);
+
+    HbDataFormModelItem *userInfoItem =
+        mModel->appendDataFormItem(HbDataFormModelItem::GroupItem,
+                                   hbTrId("txt_mailips_subhead_user_info"),
+                                   rootItem);
+    initUserInfoItems(*userInfoItem);
+
+    HbDataFormModelItem *serverInfoItem =
+        mModel->appendDataFormItem(HbDataFormModelItem::GroupItem,
+                                   hbTrId("txt_mailips_subhead_server_info"),
+                                   rootItem);
+    mSettingsHelper->setServerInfoGroupItem(serverInfoItem);
+    initServerInfoItems(*serverInfoItem);
+
+    // Create the delete mailbox button.
+    HbDataFormModelItem::DataItemType buttonItem =
+        static_cast<HbDataFormModelItem::DataItemType>(
+            HbDataFormModelItem::CustomItemBase + 2);
+
+    HbDataFormModelItem *deleteMailboxButtonItem =
+        mModel->appendDataFormItem(buttonItem, QString(), rootItem);
+    deleteMailboxButtonItem->setContentWidgetData(QString("text"),
+                                                  hbTrId("txt_mailips_button_delete_mailbox"));
+
+    mForm->addConnection(deleteMailboxButtonItem, SIGNAL(clicked()),
+                         mSettingsHelper, SLOT(deleteButtonPress()));
+
+}
+
+/*!
+    Appends the preferences items to the group item.
+    \param item Reference to the parent group item.
+*/
+void NmIpsSettingsPlugin::initPreferenceItems(HbDataFormModelItem &item) const
+{
+    // 1. Connection
+    QVariant destId;
+    mSettingsManager->readSetting(IpsServices::Connection, destId);
+    QString destName(mSettingsHelper->destinationNameFromIdentifier(destId.toUInt()));
+    HbDataFormModelItem::DataItemType buttonItem =
+        static_cast<HbDataFormModelItem::DataItemType>(
+            HbDataFormModelItem::CustomItemBase + 2);
+    CpSettingFormItemData *connectionButtonItem = new CpSettingFormItemData(buttonItem,
+        hbTrId("txt_mailips_setlabel_connection"));
+    connectionButtonItem->setContentWidgetData(QString("text"), destName);
+    mSettingsHelper->insertContentItem(IpsServices::Connection, connectionButtonItem);
+    mForm->addConnection(connectionButtonItem, SIGNAL(clicked()),
+                         mSettingsHelper, SLOT(connectionButtonPress()));
+    item.appendChild(connectionButtonItem);
+
+    // 2. My Name
+    QVariant myName;
+    mSettingsManager->readSetting(IpsServices::EmailAlias, myName);
+    CpSettingFormItemData *myNameItem = new CpSettingFormItemData(
+        HbDataFormModelItem::TextItem, hbTrId("txt_mailips_setlabel_my_name"));
+    mSettingsHelper->insertContentItem(IpsServices::EmailAlias, myNameItem);
+    myNameItem->setContentWidgetData(QString("text"), myName);
+    mForm->addConnection(myNameItem, SIGNAL(editingFinished()),
+                         mSettingsHelper, SLOT(saveMyName()));
+    mForm->addConnection(myNameItem, SIGNAL(textChanged(QString)),
+                         mSettingsHelper, SLOT(myNameTextChange(QString)));
+    item.appendChild(myNameItem);
+
+    // 3. Mailbox Name
+    QVariant mailboxName;
+    mSettingsManager->readSetting(IpsServices::MailboxName, mailboxName);
+    CpSettingFormItemData *mailboxNameItem = new CpSettingFormItemData(
+        HbDataFormModelItem::TextItem, hbTrId("txt_mailips_setlabel_mailbox_name"));
+    mSettingsHelper->insertContentItem(IpsServices::MailboxName, mailboxNameItem);
+    mailboxNameItem->setContentWidgetData(QString("text"), mailboxName);
+    mForm->addConnection(mailboxNameItem, SIGNAL(editingFinished()),
+                         mSettingsHelper, SLOT(saveMailboxName()));
+    mForm->addConnection(mailboxNameItem, SIGNAL(textChanged(QString)),
+                         mSettingsHelper, SLOT(mailboxNameTextChange(QString)));
+    item.appendChild(mailboxNameItem);
+}
+
+/*!
+    Appends the receiving schedule items to the group item.
+    \param item Reference to the parent group item.
+*/
+void NmIpsSettingsPlugin::initReceivingScheduleItems(HbDataFormModelItem &item)
+{
+    // Active sync profile
+
+    // Append custom item to the prototype list.
+    NmIpsSettingsCustomItem *prototype = new NmIpsSettingsCustomItem();
+    QList<HbAbstractViewItem *> protoTypeList = mForm->itemPrototypes();
+    protoTypeList.append(prototype);
+    mForm->setItemPrototypes(protoTypeList);
+
+    // 1. Active sync profile
+    HbDataFormModelItem *infoItem = new HbDataFormModelItem(
+        static_cast<HbDataFormModelItem::DataItemType>(NmIpsSettingsCustomItem::LabeledComboBox),
+        hbTrId("txt_mailips_setlabel_selected_mode"));
+
+    mSettingsHelper->insertContentItem(IpsServices::ReceptionActiveProfile, infoItem);
+    item.appendChild(infoItem);
+
+    QStringList modeList;
+    modeList << hbTrId("txt_mailips_setlabel_selected_mode_val_keep_upto")          // 0
+             << hbTrId("txt_mailips_setlabel_selected_mode_val_save_energy")        // 1
+             << hbTrId("txt_mailips_setlabel_selected_mode_val_fetch_manua");       // 2
+
+    QVariant userDefineMode;
+    mSettingsManager->readSetting(IpsServices::ReceptionUserDefinedProfile, userDefineMode);
+
+
+    // If 'user defined' mode is defined then add it to combo items.
+    if (userDefineMode.toInt()) {
+        modeList << hbTrId("txt_mailips_setlabel_selected_mode_val_user_define");   // 3
+    }
+    infoItem->setContentWidgetData(NmIpsSettingsComboItems, modeList);
+
+    QStringList infoList;
+    infoList << hbTrId("txt_mailips_list_the_mailbox_is_uptodate_during")           // 0
+             << hbTrId("txt_mailips_list_the_mailbox_is_refreshed_every_15")        // 1
+             << hbTrId("txt_mailips_list_the_mailbox_is_refreshed_only_by");        // 2
+
+    // If 'user defined' mode is defined then add 'user defined' explanation to label list.
+    if (userDefineMode.toInt()) {
+        infoList << hbTrId("txt_mailips_list_the_mailbox_is_refreshed_as_defin");   // 3
+    }
+    infoItem->setContentWidgetData(NmIpsSettingsLabelTexts, infoList);
+
+    QVariant profileIndex;
+    mSettingsManager->readSetting(IpsServices::ReceptionActiveProfile, profileIndex);
+    infoItem->setContentWidgetData(QString("currentIndex"), profileIndex);
+
+    // 2. Show mail in inbox
+    QVariant mailInInbox;
+    mSettingsManager->readSetting(IpsServices::ReceptionInboxSyncWindow, mailInInbox);
+
+    CpSettingFormItemData *showMailInInboxItem =
+        new CpSettingFormItemData(HbDataFormModelItem::RadioButtonListItem, hbTrId(
+            "txt_mailips_setlabel_show_mail_in_inbox"));
+
+    mSettingsHelper->insertContentItem(IpsServices::ReceptionInboxSyncWindow, showMailInInboxItem);
+
+    // If changes are made to showMailItems, conversion table in
+    // showMailInInboxModified method needs to be updated also.
+    QStringList showMailItems;
+    showMailItems << HbStringUtil::convertDigits("50")
+                  << HbStringUtil::convertDigits("100")
+                  << HbStringUtil::convertDigits("500")
+                  << hbTrId("txt_mailips_setlabel_val_all");
+    
+    showMailInInboxItem->setContentWidgetData(NmIpsSettingsItems, showMailItems);
+    showMailInInboxItem->setEnabled(true);
+    item.appendChild(showMailInInboxItem);
+
+    // Active sync profile connection
+    mForm->addConnection(infoItem, SIGNAL(currentIndexChanged(int)),
+        mSettingsHelper, SLOT(receivingScheduleChange(int)));
+    mForm->addConnection(showMailInInboxItem, SIGNAL(finished(HbAction *)),
+           this, SLOT(showMailInInboxModified(HbAction *)));
+    mForm->addConnection(showMailInInboxItem, SIGNAL(itemSelected(int)),
+           this, SLOT(inboxSelectionModified(int)));
+    
+    // Must be called manually here, because the signal->slot connection set above using
+    // HbDataForm::addConnection() is actually established AFTER the properties have first been
+    // set to the widget, causing the first currentIndexChanged signal not to reach
+    // NmIpsSettingsHelper::receivingScheduleChange().
+    mSettingsHelper->receivingScheduleChange(profileIndex.toInt());
+
+}
+
+
+/*!
+    Appends the user info items to the group item.
+    \param item Reference to the parent group item.
+*/
+void NmIpsSettingsPlugin::initUserInfoItems(HbDataFormModelItem &item) const
+{
+    // 1. Mail address
+    QVariant mailAddress;
+    mSettingsManager->readSetting(IpsServices::EmailAddress, mailAddress);
+    CpSettingFormItemData *mailAddressItem = new CpSettingFormItemData(
+        HbDataFormModelItem::TextItem, hbTrId("txt_mailips_setlabel_mail_address"));
+    mSettingsHelper->insertContentItem(IpsServices::EmailAddress, mailAddressItem);
+    mailAddressItem->setContentWidgetData(QString("text"), mailAddress);
+    mForm->addConnection(mailAddressItem, SIGNAL(editingFinished()),
+                         mSettingsHelper, SLOT(saveMailAddress()));
+    mForm->addConnection(mailAddressItem, SIGNAL(textChanged(QString)),
+                         mSettingsHelper, SLOT(mailAddressTextChange(QString)));
+    item.appendChild(mailAddressItem);
+
+    // 2. Username
+    QVariant username;
+    mSettingsManager->readSetting(IpsServices::IncomingLoginName, username);
+    CpSettingFormItemData *usernameItem = new CpSettingFormItemData(
+        HbDataFormModelItem::TextItem, hbTrId("txt_mailips_setlabel_username"));
+    mSettingsHelper->insertContentItem(IpsServices::IncomingLoginName, usernameItem);
+    usernameItem->setContentWidgetData(QString("text"), username);
+    mForm->addConnection(usernameItem, SIGNAL(editingFinished()),
+                         mSettingsHelper, SLOT(saveIncomingUserName()));
+    mForm->addConnection(usernameItem, SIGNAL(textChanged(QString)),
+                         mSettingsHelper, SLOT(incomingUserNameTextChange(QString)));
+    if (mHiddenItem) { // Starred and dimmed.
+        usernameItem->setContentWidgetData(QString("echoMode"), HbLineEdit::Password);
+        usernameItem->setEnabled(false);
+    }
+    item.appendChild(usernameItem);
+    
+    
+    // 3. Password
+    QVariant password;
+    mSettingsManager->readSetting(IpsServices::IncomingPassword, password);
+    CpSettingFormItemData *passwordItem = new CpSettingFormItemData(
+        HbDataFormModelItem::TextItem, hbTrId("txt_mailips_setlabel_password"));
+    mSettingsHelper->insertContentItem(IpsServices::IncomingPassword, passwordItem);
+    passwordItem->setContentWidgetData(QString("text"), password);
+    passwordItem->setContentWidgetData(QString("echoMode"), HbLineEdit::PasswordEchoOnEdit);
+    mForm->addConnection(passwordItem, SIGNAL(editingFinished()),
+                         mSettingsHelper, SLOT(saveIncomingPassword()));
+    item.appendChild(passwordItem);
+
+    // 4. Reply to address
+    QVariant replyToAddress;
+    mSettingsManager->readSetting(IpsServices::ReplyAddress, replyToAddress);
+    CpSettingFormItemData *replyToItem = new CpSettingFormItemData(
+       HbDataFormModelItem::TextItem, hbTrId("txt_mailips_setlabel_reply_to_address"));
+    mSettingsHelper->insertContentItem(IpsServices::ReplyAddress, replyToItem);
+    replyToItem->setContentWidgetData(QString("text"), replyToAddress);
+    mForm->addConnection(replyToItem, SIGNAL(editingFinished()),
+                         mSettingsHelper, SLOT(saveReplyTo()));
+    mForm->addConnection(replyToItem, SIGNAL(textChanged(QString)),
+                         mSettingsHelper, SLOT(replyToTextChange(QString)));
+    item.appendChild(replyToItem);
+}
+
+/*!
+    Appends the server info items to the group item.
+    \param item Reference to the parent group item.
+*/
+void NmIpsSettingsPlugin::initServerInfoItems(HbDataFormModelItem &item) const
+{
+    // 1. Incoming mail server address
+    QVariant incomingMailServer;
+    mSettingsManager->readSetting(IpsServices::IncomingMailServer, incomingMailServer);
+    CpSettingFormItemData *incomingMailServerItem = new CpSettingFormItemData(
+        HbDataFormModelItem::TextItem, hbTrId("txt_mailips_setlabel_incoming_mail_server"));
+    mSettingsHelper->insertContentItem(IpsServices::IncomingMailServer, incomingMailServerItem);
+    incomingMailServerItem->setContentWidgetData(QString("text"), incomingMailServer);
+    mForm->addConnection(incomingMailServerItem, SIGNAL(editingFinished()),
+                         mSettingsHelper, SLOT(saveIncomingMailServer()));
+    mForm->addConnection(incomingMailServerItem, SIGNAL(textChanged(QString)),
+                         mSettingsHelper, SLOT(incomingMailServerTextChange(QString)));
+    if (mHiddenItem) { // Starred and dimmed.
+        incomingMailServerItem->setContentWidgetData(QString("echoMode"), HbLineEdit::Password);
+        incomingMailServerItem->setEnabled(false);
+    }
+    item.appendChild(incomingMailServerItem);
+    
+    // 2. Incoming Secure connection
+    CpSettingFormItemData *incomingSecureConnectionItem =
+        new CpSettingFormItemData(HbDataFormModelItem::RadioButtonListItem, hbTrId(
+            "txt_mailips_setlabel_incoming_security"));
+    mSettingsHelper->insertContentItem(IpsServices::IncomingSecureSockets, incomingSecureConnectionItem);
+    QStringList showSCItems;
+    showSCItems << hbTrId("txt_mailips_setlabel_security_val_on_starttls")
+                << hbTrId("txt_mailips_setlabel_security_val_on_ssltls")
+                << hbTrId("txt_mailips_setlabel_security_val_off");
+    incomingSecureConnectionItem->setContentWidgetData(QString("items"), showSCItems);
+    int incomingSecureConnectionItemIndex = 
+        mSettingsHelper->getCorrectIncomingSecureRadioButtonIndex();
+    incomingSecureConnectionItem->setContentWidgetData(QString("selected"), 
+                                                       incomingSecureConnectionItemIndex);
+    mForm->addConnection(incomingSecureConnectionItem, SIGNAL(itemSelected(int)),             
+            mSettingsHelper, SLOT(incomingSecureConnectionItemChange(int)));
+    if (mHiddenItem) {
+        incomingSecureConnectionItem->setEnabled(false);
+    }
+    item.appendChild(incomingSecureConnectionItem);
+    
+    // 3. Incoming mail server port
+    CpSettingFormItemData *incomingPortItem =
+        new CpSettingFormItemData(HbDataFormModelItem::RadioButtonListItem, hbTrId(
+            "txt_mailips_setlabel_incoming_port"));
+    mSettingsHelper->insertContentItem(IpsServices::IncomingPort, incomingPortItem);
+    QStringList incomingPortItems;
+    incomingPortItems << hbTrId("txt_mailips_setlabel_incoming_port_default")
+                      << hbTrId("txt_mailips_setlabel_incoming_port_user_defined");
+    incomingPortItem->setContentWidgetData(QString("items"), incomingPortItems);
+    int incomingPortItemIndex = mSettingsHelper->getCorrectIncomingPortRadioButtonIndex(); 
+    incomingPortItem->setContentWidgetData(QString("selected"), incomingPortItemIndex);
+    mForm->addConnection(incomingPortItem, SIGNAL(itemSelected(int)),
+        mSettingsHelper, SLOT(incomingPortChange(int)));
+    if (mHiddenItem) {
+        incomingPortItem->setEnabled(false);
+    }
+    item.appendChild(incomingPortItem);
+    
+    // 4. Outgoing mail server address
+    QVariant outgoingMailServer;
+    mSettingsManager->readSetting(IpsServices::OutgoingMailServer, outgoingMailServer);
+    CpSettingFormItemData *outgoingMailServerItem = new CpSettingFormItemData(
+        HbDataFormModelItem::TextItem, hbTrId("txt_mailips_setlabel_outgoing_mail_server"));
+    mSettingsHelper->insertContentItem(IpsServices::OutgoingMailServer, outgoingMailServerItem);
+    outgoingMailServerItem->setContentWidgetData(QString("text"), outgoingMailServer);
+    mForm->addConnection(outgoingMailServerItem, SIGNAL(editingFinished()),
+                         mSettingsHelper, SLOT(saveOutgoingMailServer()));
+    mForm->addConnection(outgoingMailServerItem, SIGNAL(textChanged(QString)),
+                         mSettingsHelper, SLOT(outgoingMailServerTextChange(QString)));
+    if (mHiddenItem) {// Starred and dimmed.
+        outgoingMailServerItem->setContentWidgetData(QString("echoMode"), HbLineEdit::Password);
+        outgoingMailServerItem->setEnabled(false);
+    }
+    item.appendChild(outgoingMailServerItem);
+    
+    // 5. Outgoing secure connection
+    CpSettingFormItemData *outgoingSecureConnectionItem =
+        new CpSettingFormItemData(HbDataFormModelItem::RadioButtonListItem, hbTrId(
+            "txt_mailips_setlabel_outgoing_security"));
+    mSettingsHelper->insertContentItem(IpsServices::OutgoingSecureSockets, outgoingSecureConnectionItem);
+    QStringList outgoingShowSCItems;
+    outgoingShowSCItems << hbTrId("txt_mailips_setlabel_security_val_on_starttls")
+                        << hbTrId("txt_mailips_setlabel_security_val_on_ssltls")
+                        << hbTrId("txt_mailips_setlabel_security_val_off");
+    outgoingSecureConnectionItem->setContentWidgetData(QString("items"), outgoingShowSCItems);
+    int outgoingSecureConnectionItemIndex = 
+        mSettingsHelper->getCorrectOutgoingSecureRadioButtonIndex();
+    outgoingSecureConnectionItem->setContentWidgetData(QString("selected"), 
+                                                       outgoingSecureConnectionItemIndex);
+    mForm->addConnection(outgoingSecureConnectionItem, SIGNAL(itemSelected(int)),             
+            mSettingsHelper, SLOT(outgoingSecureConnectionItemChange(int)));
+    if (mHiddenItem) {
+        outgoingSecureConnectionItem->setEnabled(false);
+    }
+    item.appendChild(outgoingSecureConnectionItem);
+
+    // 6. Outgoing mail server port
+    CpSettingFormItemData *outgoingPortItem =
+        new CpSettingFormItemData(HbDataFormModelItem::RadioButtonListItem, hbTrId(
+            "txt_mailips_setlabel_outgoing_port"));
+    mSettingsHelper->insertContentItem(IpsServices::OutgoingPort, outgoingPortItem);
+    QStringList outgoingPortItems;
+    outgoingPortItems << hbTrId("txt_mailips_setlabel_incoming_port_default")
+                      << hbTrId("txt_mailips_setlabel_incoming_port_user_defined");
+    outgoingPortItem->setContentWidgetData(QString("items"), outgoingPortItems);
+    int outgoingPortItemIndex = mSettingsHelper->getCorrectOutgoingPortRadioButtonIndex(); 
+    outgoingPortItem->setContentWidgetData(QString("selected"), outgoingPortItemIndex);
+    mForm->addConnection(outgoingPortItem, SIGNAL(itemSelected(int)),
+        mSettingsHelper, SLOT(outgoingPortChange(int)));
+    if (mHiddenItem) {
+        outgoingPortItem->setEnabled(false);
+    }
+    item.appendChild(outgoingPortItem);
+    
+    // 7. Outgoing authentication.
+    CpSettingFormItemData *outgoingAuthenticationItem =
+        new CpSettingFormItemData(HbDataFormModelItem::RadioButtonListItem, hbTrId(
+            "txt_mailips_setlabel_outgoing_mail_authentication"));
+    mSettingsHelper->insertContentItem(IpsServices::SMTPAuthentication, outgoingAuthenticationItem);
+    QStringList outgoingAuthenticationItems;
+    outgoingAuthenticationItems << hbTrId("txt_mailips_setlabel_outgoing_authentication_none")
+                                << hbTrId("txt_mailips_setlabel_outgoing_authentication_same")
+                                << hbTrId("txt_mailips_setlabel_outgoing_authentication_user");
+    outgoingAuthenticationItem->setContentWidgetData(QString("items"), outgoingAuthenticationItems);
+    int outgoingAuthenticationIndex = 
+        mSettingsHelper->getCorrectOutgoingAuthenticationRadioButtonIndex(); 
+    outgoingAuthenticationItem->setContentWidgetData(QString("selected"), outgoingAuthenticationIndex);
+    mForm->addConnection(outgoingAuthenticationItem, SIGNAL(itemSelected(int)),
+        mSettingsHelper, SLOT(outgoingAuthenticationChange(int)));
+    item.appendChild(outgoingAuthenticationItem);
+    if (mHiddenItem) {
+        outgoingAuthenticationItem->setEnabled(false);
+    }
+    if (outgoingAuthenticationIndex == IpsServices::EMailAuthUserAuthentication) {
+        mSettingsHelper->createServerInfoGroupDynamicItems(mHiddenItem);
+    }
+    
+    // 8. Folder path
+    // This item is only shown for IMAP4 account.
+    if (mSettingsManager->accountType() == IpsServices::EMailImap) {
+        CpSettingFormItemData *folderPathItem =
+            new CpSettingFormItemData(HbDataFormModelItem::RadioButtonListItem, hbTrId(
+                "txt_mailips_setlabel_folder_path"));
+        mSettingsHelper->insertContentItem(IpsServices::FolderPath, folderPathItem);    
+        QStringList folderPathItems;
+        folderPathItems << hbTrId("txt_mailips_setlabel_folder_path_val_default")
+                        << hbTrId("txt_mailips_setlabel_folder_path_user_defined");
+        folderPathItem->setContentWidgetData(QString("items"), folderPathItems);
+        int folderPathItemIndex = mSettingsHelper->getCorrectFolderPathRadioButtonIndex();
+        folderPathItem->setContentWidgetData(QString("selected"), folderPathItemIndex);
+        mForm->addConnection(folderPathItem, SIGNAL(itemSelected(int)),
+            mSettingsHelper, SLOT(folderPathChange(int)));
+        item.appendChild(folderPathItem);
+    }
+}
+
+/*!
+    Sets the state of the AlwaysOnline.
+    \param command Command for the state of the AlwaysOnline.
+    \param mailboxId Mailbox id.
+*/
+void NmIpsSettingsPlugin::setAlwaysOnlineState(TAlwaysOnlineServerAPICommands command,
+                                               NmId mailboxId) const
+{
+    RAlwaysOnlineClientSession aosession;
+    TInt err(aosession.Connect());
+    
+    if (err == KErrNone) {
+        TPckgBuf<TMsvId> mboxBuf(mailboxId.id32());
+        
+        TRAP_IGNORE(aosession.RelayCommandL(command, mboxBuf));
+    }
+    
+    aosession.Close();
+}
+
+/*!
+    Creates user defined mode if not already exist.
+*/
+void NmIpsSettingsPlugin::createUserDefinedMode()
+{
+    QVariant userDefineMode;
+    mSettingsManager->readSetting(IpsServices::ReceptionUserDefinedProfile, userDefineMode);
+
+    // If user defined mode do not already exist, create it.
+    if (!userDefineMode.toInt()) {
+        // Add 'user defined' mode to combobox.
+        HbDataFormModelItem *syncProfile =
+            mSettingsHelper->contentItem(IpsServices::ReceptionActiveProfile);
+
+        QVariant contentWidgetData = syncProfile->contentWidgetData(NmIpsSettingsComboItems);
+        QStringList modeList = contentWidgetData.value<QStringList>();
+        modeList << hbTrId("txt_mailips_setlabel_selected_mode_val_user_define");
+
+        // Add 'user defined' explanation text to label text.
+        contentWidgetData = syncProfile->contentWidgetData(NmIpsSettingsLabelTexts);
+        QStringList infoList = contentWidgetData.value<QStringList>();
+        infoList << hbTrId("txt_mailips_list_the_mailbox_is_refreshed_as_defin");
+
+        // Disconnect signal temporarily so that by setting content widget data will
+        // not cause any unnecessary actions in helper.
+        mForm->removeConnection(syncProfile, SIGNAL(currentIndexChanged(int)),
+            mSettingsHelper, SLOT(receivingScheduleChange(int)));
+
+        syncProfile->setContentWidgetData(NmIpsSettingsComboItems, modeList);
+        syncProfile->setContentWidgetData(NmIpsSettingsLabelTexts, infoList);
+
+        // Reconnect signal, so that helper is aware of data modifications.
+        mForm->addConnection(syncProfile, SIGNAL(currentIndexChanged(int)),
+            mSettingsHelper, SLOT(receivingScheduleChange(int)));
+
+        // Set reception user defined profile enabled.
+        userDefineMode.setValue(NmIpsSettingsReceptionUserDefinedProfileEnabled);
+        mSettingsManager->writeSetting(IpsServices::ReceptionUserDefinedProfile, userDefineMode);
+    }
+}
+
+/*!
+Handles mail in inbox modifications.
+
+\param action Action that determines whether user clicked OK or cancel.
+*/
+void NmIpsSettingsPlugin::showMailInInboxModified(HbAction *action)
+{
+    if ((action->text() == hbTrId("txt_common_button_ok"))
+            && (mCurrentInboxIndex >=0 && mCurrentInboxIndex <=3)) {
+        int conversionTable[] = { 50, 100, 500, 0 };
+        int selectedValue(conversionTable[mCurrentInboxIndex]);
+        
+        QVariant previouslySelectedValue;
+        mSettingsManager->readSetting(IpsServices::ReceptionInboxSyncWindow, previouslySelectedValue);
+        if (previouslySelectedValue.toInt() != selectedValue) {
+            mSettingsHelper->handleReceivingScheduleSettingChange(
+                IpsServices::ReceptionInboxSyncWindow, selectedValue);
+        }
+    }
+    mCurrentInboxIndex = -1;
+}
+/*!
+Handles mail in inbox modifications.
+
+Index   Value
+0       50
+1       100
+2       500
+3       All
+
+\param index The index value of the selection.
+*/
+void NmIpsSettingsPlugin::inboxSelectionModified(int index)
+{
+    mCurrentInboxIndex = index;
+}
+
+Q_EXPORT_PLUGIN2(nmipssettings, NmIpsSettingsPlugin);