ipsservices/nmipssettings/src/nmipssettingshelper.cpp
changeset 20 ecc8def7944a
parent 18 578830873419
child 23 2dc6caa42ec3
--- a/ipsservices/nmipssettings/src/nmipssettingshelper.cpp	Fri Apr 16 14:51:52 2010 +0300
+++ b/ipsservices/nmipssettings/src/nmipssettingshelper.cpp	Mon May 03 12:23:15 2010 +0300
@@ -20,10 +20,29 @@
 #include <HbGlobal>
 #include <HbMessageBox>
 #include <HbProgressDialog>
+#include <HbInputDialog>
 #include <cpsettingformitemdata.h>
+#include <hbdataformmodel.h>
+#include <qstringlist.h>
+#include <hbextendedlocale.h>
+#include <HbValidator>
+#include <QIntValidator>
+#include <HbStringUtil>
+#include <HbDataForm>
 
 #include "nmipssettingshelper.h"
 #include "nmipssettingsmanagerbase.h"
+#include "nmipssettingscustomitem.h"
+#include "nmipsextendedsettingsmanager.h"
+
+// CONSTANTS
+
+// Dynamic receiving schedule group items
+const IpsServices::SettingItem NmIpsSettingsReceivingSchedule[] = {
+        IpsServices::ReceptionWeekDays,
+        IpsServices::ReceptionDayStartTime,
+        IpsServices::ReceptionDayEndTime,
+        IpsServices::ReceptionRefreshPeriodDayTime};
 
 /*!
     \class NmIpsSettingsHelper
@@ -37,9 +56,15 @@
     Constructor of NmIpsSettingsHelper.
     \param settingsManager Reference used by settingshelper to read and store values
 */
-NmIpsSettingsHelper::NmIpsSettingsHelper(NmIpsSettingsManagerBase &settingsManager)
+NmIpsSettingsHelper::NmIpsSettingsHelper(NmIpsSettingsManagerBase &settingsManager,
+    HbDataForm &dataForm, HbDataFormModel &dataFormModel)
 : mCurrentLineEditChanged(false),
-  mSettingsManager(settingsManager)
+  mEmitOnline(false),
+  mSettingsManager(settingsManager),
+  mDataForm(dataForm),
+  mDataFormModel(dataFormModel),
+  mDynamicItemsVisible(false),
+  mRadioButtonPreviousIndex(0)
 {
 }
 
@@ -57,18 +82,212 @@
     \param  CpSettingFormItemData *. Pointer to the content item.
 */
 void NmIpsSettingsHelper::insertContentItem(IpsServices::SettingItem key,
-                                            CpSettingFormItemData *value)
+    HbDataFormModelItem *value)
 {
     mContentItems.insert(key, value);
 }
 
 /*!
+
+*/
+HbDataFormModelItem *NmIpsSettingsHelper::contentItem(IpsServices::SettingItem key) const
+{
+    return mContentItems.value(key);
+}
+
+/*!
+    Sets the group item for dynamic receiving schedule items.
+    \param item Group item.
+*/
+void NmIpsSettingsHelper::setReceivingScheduleGroupItem(HbDataFormModelItem *item)
+{
+    mReceivingScheduleGroupItem = item;
+}
+
+/*!
+    Creates or updates the setting items under the receiving schedule group item.
+*/
+void NmIpsSettingsHelper::createOrUpdateReceivingScheduleGroupDynamicItem(
+    IpsServices::SettingItem item)
+{
+    // Create the items if not already created and visible
+    if (mReceivingScheduleGroupItem) {
+        CpSettingFormItemData *formItemData =
+            static_cast<CpSettingFormItemData *>(mContentItems.value(item));
+
+        switch(item) {
+
+            // 3. Receiving weekdays
+            case IpsServices::ReceptionWeekDays:
+            {
+                // If not exist, create one
+                if (!formItemData) {
+                    formItemData =
+                        new CpSettingFormItemData(HbDataFormModelItem::MultiselectionItem,
+                            hbTrId("txt_mailips_setlabel_receiving_weekdays"));
+
+                    insertContentItem(IpsServices::ReceptionWeekDays, formItemData);
+                    mReceivingScheduleGroupItem->appendChild(formItemData);
+                    QStringList weekdayItems;
+                    weekdayItems << hbTrId("txt_mailips_setlabel_download_images_val_mon")
+                                 << hbTrId("txt_mailips_setlabel_download_images_val_tue")
+                                 << hbTrId("txt_mailips_setlabel_download_images_val_wed")
+                                 << hbTrId("txt_mailips_setlabel_download_images_val_thu")
+                                 << hbTrId("txt_mailips_setlabel_download_images_val_fri")
+                                 << hbTrId("txt_mailips_setlabel_download_images_val_sat")
+                                 << hbTrId("txt_mailips_setlabel_download_images_val_sun")
+                                 << hbTrId("txt_mailips_setlabel_download_images_val_every_day");
+
+                    QList<QVariant> weekdayItemValues;
+                    weekdayItemValues << 0x01
+                                      << 0x02
+                                      << 0x04
+                                      << 0x08
+                                      << 0x10
+                                      << 0x20
+                                      << 0x40
+                                      << 0x7F;
+
+                    formItemData->setData(HbDataFormModelItem::HbDataFormModelItem::DescriptionRole + 1,
+                        weekdayItemValues);
+                    formItemData->setContentWidgetData(QString("items"), weekdayItems);
+                    formItemData->setEnabled(false);
+//                    mDataForm.addConnection(formItemData, SIGNAL(finished(HbAction *)),
+//                        this, SLOT(receivingWeekdaysModified(HbAction *)));
+                }
+
+                // Update data
+                QVariant value;
+                mSettingsManager.readSetting(item, value);
+                QList<QVariant> selectedDays;
+                selectedDays.clear();
+                int days(value.toInt());
+                if (days == 0x7f) {
+                   // Every weekday selected
+                   selectedDays.append(7);
+                } else {
+                   // 0-6 Individual weekdays selected
+                   for (int i=0; i<=6; ++i) {
+                       if (days & (1 << i)) {
+                           selectedDays.append(i);
+                       }
+                   }
+                }
+                formItemData->setContentWidgetData(QString("selectedItems"), selectedDays);
+                break;
+            }
+
+            // 4. Day start time
+            case IpsServices::ReceptionDayStartTime:
+            {
+                // If not exist, create one
+                if (!formItemData) {
+                    QString format(timeFormat());
+                    formItemData = new CpSettingFormItemData(
+                        static_cast< HbDataFormModelItem::DataItemType >(NmIpsSettingsCustomItem::TimeEditor),
+                            hbTrId("txt_mailips_setlabel_day_start_time"));
+
+                    insertContentItem(IpsServices::ReceptionDayStartTime, formItemData);
+                    formItemData->setEnabled(true);
+                    formItemData->setContentWidgetData(QString("displayFormat"), format);
+                    mReceivingScheduleGroupItem->appendChild(formItemData);
+                    mDataForm.addConnection(formItemData, SIGNAL(editingFinished()),
+                        this, SLOT(startTimeModified()));
+
+                }
+
+                // Update data
+                QVariant startTime;
+                mSettingsManager.readSetting(item, startTime);
+                QDateTime startDateTime(QDate(2010, 1, 1), QTime(startTime.toInt(),0));
+                formItemData->setContentWidgetData("dateTime", startDateTime);
+                break;
+            }
+
+            // 5. Day end time
+            case IpsServices::ReceptionDayEndTime:
+            {
+                // If not exist, create one
+                if (!formItemData) {
+                    QString format(timeFormat());
+                    formItemData = new CpSettingFormItemData(
+                        static_cast<HbDataFormModelItem::DataItemType> (NmIpsSettingsCustomItem::TimeEditor),
+                            hbTrId("txt_mailips_setlabel_day_end_time"));
+
+                    insertContentItem(IpsServices::ReceptionDayEndTime, formItemData);
+                    formItemData->setEnabled(true);
+                    formItemData->setContentWidgetData(QString("displayFormat"), format);
+                    mReceivingScheduleGroupItem->appendChild(formItemData);
+                }
+
+                // Update data
+                QVariant endTime;
+                mSettingsManager.readSetting(item, endTime);
+                QDateTime endDateTime(QDate(2010, 1, 1), QTime(endTime.toInt(),0));
+                formItemData->setContentWidgetData("dateTime", endDateTime);
+                mDataForm.addConnection(formItemData, SIGNAL(editingFinished()),
+                    this, SLOT(endTimeModified()));
+                break;
+            }
+
+            // 6. Refresh mail interval
+            case IpsServices::ReceptionRefreshPeriodDayTime:
+            {
+                // If not exist, create one
+                if (!formItemData) {
+                    formItemData = new CpSettingFormItemData(
+                        HbDataFormModelItem::RadioButtonListItem,
+                            hbTrId("txt_mailips_setlabel_refresh_mail"));
+
+                    mReceivingScheduleGroupItem->appendChild(formItemData);
+                    insertContentItem(IpsServices::ReceptionRefreshPeriodDayTime, formItemData);
+                    QStringList refreshMailItems;
+                    refreshMailItems << hbTrId("txt_mailips_setlabel_val_keep_uptodate")
+                                     << hbTrId("txt_mailips_setlabel_val_every_15_minutes")
+                                     << hbTrId("txt_mailips_setlabel_val_every_1_hour")
+                                     << hbTrId("txt_mailips_setlabel_val_every_4_hours");
+                    formItemData->setContentWidgetData(QString("items"), refreshMailItems);
+
+                    QList<QVariant> refreshMailItemValues;
+                    refreshMailItemValues << 5
+                                          << 15
+                                          << 60
+                                          << 240;
+                    QVariant value(refreshMailItemValues);
+                    formItemData->setData(HbDataFormModelItem::DescriptionRole + 1, value);
+
+                    mDataForm.addConnection(formItemData, SIGNAL(itemSelected(int)),
+                        this, SLOT(refreshPeriodModified(int)));
+                }
+
+                // Update data
+                QVariant interval;
+                mSettingsManager.readSetting(item, interval);
+                QHash<int,int> refreshPeriod;
+                refreshPeriod[5] = 0;
+                refreshPeriod[15] = 1;
+                refreshPeriod[60] = 2;
+                refreshPeriod[240] = 3;
+                formItemData->setContentWidgetData(QString("selected"),
+                    refreshPeriod.value(interval.toInt()));
+                break;
+            }
+            default:
+            {
+                // Unknown/unhandled SettingItem.
+                break;
+            }
+        }
+    }
+}
+
+/*!
     Saves the My Name value into database if user has changed the value.
 */
 void NmIpsSettingsHelper::saveMyName()
 {
     if (mCurrentLineEditChanged) {
-        CpSettingFormItemData *item = mContentItems.value(IpsServices::EmailAlias);
+        HbDataFormModelItem *item = mContentItems.value(IpsServices::EmailAlias);
         QVariant data = item->contentWidgetData(QString("text"));
         mSettingsManager.writeSetting(IpsServices::EmailAlias, data);
     }
@@ -92,7 +311,7 @@
 void NmIpsSettingsHelper::saveMailboxName()
 {
     if (mCurrentLineEditChanged) {
-        CpSettingFormItemData *item = mContentItems.value(IpsServices::MailboxName);
+        HbDataFormModelItem *item = mContentItems.value(IpsServices::MailboxName);
         QVariant data = item->contentWidgetData(QString("text"));
         // Only save mailbox name if it's length is greater than zero. CEmailAccounts does not
         // allow zero-length mailbox names.
@@ -128,7 +347,9 @@
 void NmIpsSettingsHelper::saveMailAddress()
 {
     if (mCurrentLineEditChanged) {
-        CpSettingFormItemData *item = mContentItems.value(IpsServices::EmailAddress);
+		emit goOffline(mSettingsManager.mailboxId());
+		mEmitOnline = true;
+		HbDataFormModelItem *item = mContentItems.value(IpsServices::EmailAddress);
         QVariant data = item->contentWidgetData(QString("text"));
         mSettingsManager.writeSetting(IpsServices::EmailAddress, data);
     }
@@ -152,9 +373,11 @@
 void NmIpsSettingsHelper::saveUserName()
 {
     if (mCurrentLineEditChanged) {
-        CpSettingFormItemData *item = mContentItems.value(IpsServices::LoginName);
+		emit goOffline(mSettingsManager.mailboxId());
+		mEmitOnline = true;
+		HbDataFormModelItem *item = mContentItems.value(IpsServices::IncomingLoginName);
         QVariant data = item->contentWidgetData(QString("text"));
-        mSettingsManager.writeSetting(IpsServices::LoginName, data);
+        mSettingsManager.writeSetting(IpsServices::IncomingLoginName, data);
     }
     mCurrentLineEditChanged = false;
 }
@@ -175,9 +398,11 @@
 */
 void NmIpsSettingsHelper::savePassword()
 {
-    CpSettingFormItemData *item = mContentItems.value(IpsServices::Password);
+	emit goOffline(mSettingsManager.mailboxId());
+	mEmitOnline = true;
+	HbDataFormModelItem *item = mContentItems.value(IpsServices::IncomingPassword);
     QVariant data = item->contentWidgetData(QString("text"));
-    mSettingsManager.writeSetting(IpsServices::Password, data);
+    mSettingsManager.writeSetting(IpsServices::IncomingPassword, data);
 }
 
 /*!
@@ -186,7 +411,7 @@
 void NmIpsSettingsHelper::saveReplyTo()
 {
     if (mCurrentLineEditChanged) {
-        CpSettingFormItemData *item = mContentItems.value(IpsServices::ReplyAddress);
+        HbDataFormModelItem *item = mContentItems.value(IpsServices::ReplyAddress);
         QVariant data = item->contentWidgetData(QString("text"));
         mSettingsManager.writeSetting(IpsServices::ReplyAddress, data);
     }
@@ -221,13 +446,16 @@
         return;
     }
 
+	emit goOffline(mSettingsManager.mailboxId());
+	mEmitOnline = false;
+
     QVariant mailboxName;
     mSettingsManager.readSetting(IpsServices::MailboxName, mailboxName);
 
     // Display the progress note. Before display the note, remove the cancel
     // button.
     HbProgressDialog progressNote(HbProgressDialog::WaitDialog);
-    progressNote.setText(hbTrId("txt_mail_dpophead _1_deleted"));
+    progressNote.setText(hbTrId("txt_common_info_deleting"));
     action = progressNote.primaryAction();
     progressNote.removeAction(action);
     progressNote.delayedShow();
@@ -239,7 +467,7 @@
 
         HbMessageBox infoDialog(HbMessageBox::MessageTypeInformation);
         infoDialog.setText(
-            hbTrId("txt_mail_dialog_1_deleted").arg(mailboxName.toString()));
+            hbTrId("txt_mail_dpophead _1_deleted").arg(mailboxName.toString()));
         infoDialog.setModal(true);
         HbAction *action = infoDialog.exec();
 
@@ -248,7 +476,6 @@
                                 NmSettings::MailboxDeleted);
     } else {
         // Failed to delete the mailbox!
-        // TODO: Should an error note be displayed?
         progressNote.close();
     }
 }
@@ -260,4 +487,623 @@
 void NmIpsSettingsHelper::receivingScheduleChange(int index)
 {
     mSettingsManager.writeSetting(IpsServices::ReceptionActiveProfile, QVariant(index));
+
+    // Read receiving schedule dynamic group item values and
+    // make a decision based on those if item should be visible or not.
+    const int dynamicGroupItemsCount(
+        sizeof(NmIpsSettingsReceivingSchedule) / sizeof(NmIpsSettingsReceivingSchedule[0]));
+
+    for (int itemIndex(0); itemIndex < dynamicGroupItemsCount; ++itemIndex) {
+        QVariant setting;
+        // Read setting value from active profile
+        IpsServices::SettingItem item(NmIpsSettingsReceivingSchedule[itemIndex]);
+        mSettingsManager.readSetting(item, setting);
+
+        // If setting value is not valid (-1=N/A) then remove setting item.
+        int value = setting.toInt();
+        if (value != -1) {
+            createOrUpdateReceivingScheduleGroupDynamicItem(item);
+        } else {
+            deleteReceivingScheduleGroupDynamicItem(item);
+        }
+    }
+
+    updateShowMailInMailbox();
 }
+
+/*!
+    Returns state if online should be emited.
+    \return true / false.
+*/
+bool NmIpsSettingsHelper::isOffline()
+{
+    return mEmitOnline;
+}
+
+/*!
+    Updates the show mail in mailbox setting value based on the active profile.
+*/
+void NmIpsSettingsHelper::updateShowMailInMailbox()
+{
+    QVariant value;
+    mSettingsManager.readSetting(IpsServices::ReceptionInboxSyncWindow, value);
+    QHash<int,int> syncWindows;
+    syncWindows[50] = 0;
+    syncWindows[100] = 1;
+    syncWindows[500] = 2;
+    syncWindows[0] = 3;
+
+    HbDataFormModelItem *item = mContentItems.value(IpsServices::ReceptionInboxSyncWindow);
+    if (item) {
+        item->setContentWidgetData(QString("selected"), syncWindows.value(value.toInt()));
+    }
+}
+
+/*!
+    Deletes the dynamic setting items under the receiving schedule group item.
+*/
+void NmIpsSettingsHelper::deleteReceivingScheduleGroupDynamicItem(IpsServices::SettingItem item)
+{
+    HbDataFormModelItem *formItem = mContentItems.value(item);
+    if (formItem) {
+        mDataForm.removeAllConnection(formItem);
+        int index(mReceivingScheduleGroupItem->indexOf(formItem));
+        if (index >= 0) {
+            mReceivingScheduleGroupItem->removeChild(index);
+        }
+        mContentItems.remove(item);
+    }
+}
+
+/*!
+    Returns locale specific formatting string for hours and minutes.
+    \return Time format string.
+*/
+QString NmIpsSettingsHelper::timeFormat()
+{
+    // Set the correct time format string based on locale.
+    HbExtendedLocale locale = HbExtendedLocale::system();
+    QString timeFormat("h:mm ap");
+    if (HbExtendedLocale::Time24 == locale.timeStyle()) {
+        timeFormat = QString("h:mm");
+    }
+    // Set the separator between hours and minutes.
+    timeFormat.replace(QString(":"), locale.timeSeparator(1));
+
+    return timeFormat;
+}
+/*!
+    Saves the incoming mailserver value into database if user has changed the value.
+*/
+void NmIpsSettingsHelper::saveIncomingMailServer()
+{
+    if (mCurrentLineEditChanged) {
+        emit goOffline(mSettingsManager.mailboxId());
+        mEmitOnline = true;
+        HbDataFormModelItem *item = mContentItems.value(IpsServices::IncomingMailServer);
+        QVariant data = item->contentWidgetData(QString("text"));
+        mSettingsManager.writeSetting(IpsServices::IncomingMailServer, data);
+    }
+    mCurrentLineEditChanged = false;
+}
+
+/*!
+    Sets the edit changed flag to indicate that user has edited the field
+
+    \param text Reference to the text value in the line edit box.
+*/
+void NmIpsSettingsHelper::incomingMailServerTextChange(const QString &text)
+{
+    Q_UNUSED(text);
+    mCurrentLineEditChanged = true;
+}
+/*!
+    Saves the outgoing mailserver value into database if user has changed the value.
+*/
+void NmIpsSettingsHelper::saveOutgoingMailServer()
+{
+    if (mCurrentLineEditChanged) {
+        emit goOffline(mSettingsManager.mailboxId());
+        mEmitOnline = true;
+        HbDataFormModelItem *item = mContentItems.value(IpsServices::OutgoingMailServer);
+        QVariant data = item->contentWidgetData(QString("text"));
+        mSettingsManager.writeSetting(IpsServices::OutgoingMailServer, data);
+    }
+    mCurrentLineEditChanged = false;
+}
+
+/*!
+    Sets the edit changed flag to indicate that user has edited the field
+
+    \param text Reference to the text value in the line edit box.
+*/
+void NmIpsSettingsHelper::outgoingMailServerTextChange(const QString &text)
+{
+    Q_UNUSED(text);
+    mCurrentLineEditChanged = true;
+}
+
+/*!
+    Saves the incoming port value into database if user has changed the value. If the user wish to
+    define the port, a input dialog is shown.
+    
+    \param index Used to determine if the default value or a user defined value should be written
+*/
+void NmIpsSettingsHelper::incomingPortChange(int index)
+{
+    if (mRadioButtonPreviousIndex != index && index == IpsServices::NmIpsSettingsDefault) {
+        emit goOffline(mSettingsManager.mailboxId());
+        mEmitOnline = true;
+        int port = mSettingsManager.determineDefaultIncomingPort();
+        mSettingsManager.writeSetting(IpsServices::IncomingPort, port);
+    } else if (index == IpsServices::NmIpsSettingsUserDefined) {
+        QVariant port; 
+        mSettingsManager.readSetting(IpsServices::IncomingPort, port);
+        bool changed = false;
+        int changedPort = showIncomingPortInputDialog(port.toInt(), changed);       
+        if (changed) {
+            emit goOffline(mSettingsManager.mailboxId());
+            mEmitOnline = true;
+            mSettingsManager.writeSetting(IpsServices::IncomingPort, changedPort);
+        } else {
+            //set selected value back if user canceled.
+            HbDataFormModelItem *item = mContentItems.value(IpsServices::IncomingPort);
+            item->setContentWidgetData(QString("selected"), mRadioButtonPreviousIndex);
+        }
+    }
+}
+
+/*!
+    Used for getting the index to display in the port radio button list 
+    
+    \return index Used to set the selected value
+*/
+int NmIpsSettingsHelper::getCorrectPortRadioButtonIndex(int currentPort)
+{
+    int index = 0;
+    int port = mSettingsManager.determineDefaultIncomingPort();
+    if (port == currentPort) {
+        index = IpsServices::NmIpsSettingsDefault;
+    } else {
+        index = IpsServices::NmIpsSettingsUserDefined;
+    }
+    return index;
+}
+
+/*!
+    Show a input dialog for allowing the user to specify a incoming port 
+    \param int The current port stored in the settings  
+    \param bool Reference used for marking if the value really changed
+    \return int The user defined port
+*/
+int NmIpsSettingsHelper::showIncomingPortInputDialog(int currentPort, bool &changed)
+{    
+    QVariant newPort;
+
+    HbInputDialog inputDialog;
+    inputDialog.setInputMode(HbInputDialog::IntInput);
+    HbValidator *validator = new HbValidator();
+    validator->addField(new QIntValidator(0, 65535, 0), 
+                        HbStringUtil::convertDigits(QString::number(currentPort)));
+    inputDialog.setValidator(validator);
+    inputDialog.setPromptText(hbTrId("txt_mailips_setlabel_incoming_port_user_defined"));
+    
+    HbAction *action = inputDialog.exec();     
+    if (action == inputDialog.primaryAction()) {
+        newPort = inputDialog.value();
+        changed = true;
+    }  
+    delete validator;   
+    
+    return newPort.toInt();
+}
+
+/*!
+    Sets the previous index value to indicate that user has edited the field
+
+    \param text Reference to the item in the radio button list.
+*/
+void NmIpsSettingsHelper::incomingPortPressed(const QModelIndex &index)
+{
+    Q_UNUSED(index);
+    HbDataFormModelItem *item = mContentItems.value(IpsServices::IncomingPort);
+    QVariant data = item->contentWidgetData(QString("selected"));
+    mRadioButtonPreviousIndex = data.toInt();
+}
+
+/*!
+    Saves the incoming secure connection value into database if user has changed the value.
+*/
+void NmIpsSettingsHelper::incomingSecureConnectionItemChange(int index)
+{
+    if (mRadioButtonPreviousIndex != index) {
+        emit goOffline(mSettingsManager.mailboxId());
+        mEmitOnline = true;
+        switch (index) {
+            case IpsServices::EMailStartTls: // On (Start TLS)
+                mSettingsManager.writeSetting(IpsServices::IncomingSecureSockets, ETrue);
+                mSettingsManager.writeSetting(IpsServices::IncomingSSLWrapper, EFalse);
+                break;
+
+            case IpsServices::EMailSslTls: // On (SSL/TLS)
+                mSettingsManager.writeSetting(IpsServices::IncomingSecureSockets, EFalse);
+                mSettingsManager.writeSetting(IpsServices::IncomingSSLWrapper, ETrue);
+                break;
+
+            case IpsServices::EMailSecurityOff: // Off
+                mSettingsManager.writeSetting(IpsServices::IncomingSecureSockets, EFalse);
+                mSettingsManager.writeSetting(IpsServices::IncomingSSLWrapper, EFalse);
+                break;
+
+        	 default:
+                break;
+        }
+        // Update incoming port value only if default incoming port used
+        HbDataFormModelItem *item = mContentItems.value(IpsServices::IncomingPort);
+        QVariant data = item->contentWidgetData(QString("selected"));
+        // Default incoming port selected
+        if (data.toInt() == IpsServices::NmIpsSettingsDefault) {
+			int port = mSettingsManager.determineDefaultIncomingPort();
+			mSettingsManager.writeSetting(IpsServices::IncomingPort, port);
+        }
+    }
+}
+
+/*!
+    Sets the previous index value to indicate that user has edited the field
+
+    \param text Reference to the item in the radio button list.
+*/
+void NmIpsSettingsHelper::incomingSecureConnectionPressed(const QModelIndex &index)
+{
+	Q_UNUSED(index);
+	HbDataFormModelItem *item = mContentItems.value(IpsServices::IncomingSecureSockets);
+    QVariant data = item->contentWidgetData(QString("selected"));
+    mRadioButtonPreviousIndex = data.toInt();
+}
+
+/*!
+    Used for getting the index to display in the secure connection radio button list 
+    
+    \return index Used to set the selected value
+*/
+int NmIpsSettingsHelper::getCorrectSecureRadioButtonIndex(QVariant secureSockets, 
+                                                          QVariant secureSSLWrapper)
+{
+    IpsServices::TIpsSetDataSecurityTypes securityType = IpsServices::EMailStartTls;
+    // secureSockets == True
+    if (secureSockets.toBool()) { 
+        securityType = IpsServices::EMailStartTls;
+    }
+    // secureSockets == False & secureSSLWrapper == True
+    else if (secureSSLWrapper.toBool()) {
+        securityType = IpsServices::EMailSslTls;
+    }
+    // secureSockets == False & secureSSLWrapper == False
+    else {
+        securityType = IpsServices::EMailSecurityOff;
+    }
+    return securityType;
+}
+
+/*!
+    Saves the folderpath value into database if user has changed the value.
+*/
+void NmIpsSettingsHelper::inboxPathChange(int index)
+{
+    if (mRadioButtonPreviousIndex != index && index == IpsServices::NmIpsSettingsDefault) {
+        // Empty string sets the folder path to default.
+        mSettingsManager.writeSetting(IpsServices::FolderPath, QString(""));
+    } else if (index == IpsServices::NmIpsSettingsUserDefined) {
+        bool changed = false;
+        HbDataFormModelItem *item = mContentItems.value(IpsServices::FolderPath);
+        QString changedPath = showFolderPathInputDialog(changed);       
+        if (changed) {
+            mSettingsManager.writeSetting(IpsServices::FolderPath, changedPath);
+            //set selected index to default if user inputed empty string.
+            if (changedPath.isEmpty()) {
+                item->setContentWidgetData(QString("selected"), IpsServices::NmIpsSettingsDefault);
+            }
+        } else {
+            //set selected value back if user canceled.
+            item->setContentWidgetData(QString("selected"), mRadioButtonPreviousIndex);
+        }
+    }
+}
+
+/*!
+    Show a input dialog for allowing the user to specify a folder path 
+    \param bool Reference used for marking if the value really changed
+    \return QString The user defined folder path
+*/
+QString NmIpsSettingsHelper::showFolderPathInputDialog(bool &changed)
+{    
+    QVariant folderPath;
+    mSettingsManager.readSetting(IpsServices::FolderPath, folderPath);
+    
+    HbInputDialog inputDialog;
+    inputDialog.setInputMode(HbInputDialog::TextInput);
+    inputDialog.setPromptText(hbTrId("txt_mailips_setlabel_inbox_path_user_defined"));
+    inputDialog.setValue(folderPath.toString());
+    
+    HbAction *action = inputDialog.exec();     
+    if (action == inputDialog.primaryAction()) { 
+        folderPath = inputDialog.value();
+        changed = true;
+    }
+
+    return folderPath.toString();
+}
+
+/*!
+    Sets the previous index value to indicate that user has edited the field
+
+    \param text Reference to the item in the radio button list.
+*/
+void NmIpsSettingsHelper::inboxPathPressed(const QModelIndex &index)
+{
+    Q_UNUSED(index);
+    HbDataFormModelItem *item = mContentItems.value(IpsServices::FolderPath);
+    QVariant data = item->contentWidgetData(QString("selected"));
+    mRadioButtonPreviousIndex = data.toInt();
+}
+
+/*!
+
+*/
+void NmIpsSettingsHelper::receivingWeekdaysModified(HbAction *action)
+{
+    Q_UNUSED(action)
+    HbDataFormModelItem *item = mContentItems.value(IpsServices::ReceptionWeekDays);
+    QVariant widgetData = item->contentWidgetData(QString("selectedItems"));
+    QList< QVariant > selectedItems = widgetData.value< QList< QVariant > >();
+
+    foreach (QVariant selection, selectedItems) {
+        int value = selection.toInt();
+    }
+}
+
+/*!
+
+*/
+void NmIpsSettingsHelper::startTimeModified()
+{
+    HbDataFormModelItem *item = mContentItems.value(IpsServices::ReceptionDayStartTime);
+    QVariant data = item->contentWidgetData(QString("dateTime"));
+    QDateTime dateTime = data.value< QDateTime >();
+    int startHour(dateTime.time().hour());
+    handleReceivingScheduleSettingChange(IpsServices::ReceptionDayStartTime, startHour);
+}
+
+/*!
+
+*/
+void NmIpsSettingsHelper::refreshPeriodModified(int index)
+{
+    HbDataFormModelItem* item = mContentItems.value(IpsServices::ReceptionRefreshPeriodDayTime);
+    QVariant itemData = item->data(HbDataFormModelItem::HbDataFormModelItem::DescriptionRole + 1);
+    int selectedValue = itemData.value< QList< QVariant > >().at(index).toInt();
+    handleReceivingScheduleSettingChange(IpsServices::ReceptionRefreshPeriodDayTime, selectedValue);
+}
+
+/*!
+
+*/
+void NmIpsSettingsHelper::endTimeModified()
+{
+    HbDataFormModelItem *item = mContentItems.value(IpsServices::ReceptionDayEndTime);
+    QVariant data = item->contentWidgetData(QString("dateTime"));
+    QDateTime dateTime = data.value< QDateTime >();
+    int endHour(dateTime.time().hour());
+    handleReceivingScheduleSettingChange(IpsServices::ReceptionDayEndTime, endHour);
+}
+
+/*!
+    Used for getting the index to display in the inbox path radio button list 
+    
+    \return index Used to set the selected value
+*/
+int NmIpsSettingsHelper::getCorrectInboxPathRadioButtonIndex(QVariant folderPath)
+{
+    int index(0);
+    if (folderPath.toString().isEmpty()) {
+        index = IpsServices::NmIpsSettingsDefault;
+    } else {
+        index = IpsServices::NmIpsSettingsUserDefined;
+    }
+    return index;
+}
+
+/*!
+
+*/
+void NmIpsSettingsHelper::handleReceivingScheduleSettingChange(
+    IpsServices::SettingItem settingItem, const QVariant &settingValue)
+{
+    // Check what was currently active sync mode.
+    QVariant setting;
+    mSettingsManager.readSetting(IpsServices::ReceptionActiveProfile, setting);
+    int activeProfile(setting.toInt());
+    if (activeProfile != NmIpsSettingsReceivingScheduleUserDefinedProfile) {
+        // Create user defined mode if needed.
+        emit createUserDefinedMode();
+
+        // Copy all settings from currently active mode to user defined mode
+        copyReceivingScheduleSettingsFromActiveProfile(
+            NmIpsSettingsReceivingScheduleUserDefinedProfile);
+
+        // select 'user defined' mode
+        mSettingsManager.writeSetting(IpsServices::ReceptionActiveProfile,
+            NmIpsSettingsReceivingScheduleUserDefinedProfile);
+    }
+
+    // store selected setting
+    mSettingsManager.writeSetting(settingItem, settingValue);
+
+    // update selection
+    HbDataFormModelItem *syncProfile = contentItem(IpsServices::ReceptionActiveProfile);
+    syncProfile->setContentWidgetData(QString("currentIndex"), 3);
+}
+
+/*!
+
+*/
+void NmIpsSettingsHelper::copyReceivingScheduleSettingsFromActiveProfile(int profileMode)
+{
+    // Read receiving schedule dynamic group item values and
+    // make a decision based on those if item should be visible or not.
+    const int dynamicGroupItemsCount(
+        sizeof(NmIpsSettingsReceivingSchedule) / sizeof(NmIpsSettingsReceivingSchedule[0]));
+
+    NmIpsExtendedSettingsManager &extendedSettingsManager =
+        mSettingsManager.extendedSettingsManager();
+
+    for (int itemIndex(0); itemIndex < dynamicGroupItemsCount; ++itemIndex) {
+        QVariant setting;
+        // Read setting value from active profile
+        IpsServices::SettingItem item(NmIpsSettingsReceivingSchedule[itemIndex]);
+        mSettingsManager.readSetting(item, setting);
+
+        // write settings to user defined profile.
+        extendedSettingsManager.writeSetting(profileMode, item, setting);
+    }
+}
+/*!
+    Saves the outgoing port value into database if user has changed the value. If the user wish to
+    define the port, a input dialog is shown.
+
+    \param index Used to determine if the default value or a user defined value should be written
+*/
+void NmIpsSettingsHelper::outgoingPortChange(int index)
+{
+    if (mRadioButtonPreviousIndex != index && index == IpsServices::NmIpsSettingsDefault) {
+        emit goOffline(mSettingsManager.mailboxId());
+        mEmitOnline = true;
+        int port = mSettingsManager.determineDefaultOutgoingPort();
+        mSettingsManager.writeSetting(IpsServices::OutgoingPort, port);
+    } else if (index == IpsServices::NmIpsSettingsUserDefined) {
+        QVariant port;
+        mSettingsManager.readSetting(IpsServices::OutgoingPort, port);
+        bool changed = false;
+        int changedPort = showOutgoingPortInputDialog(port.toInt(), changed);
+        if (changed) {
+            emit goOffline(mSettingsManager.mailboxId());
+            mEmitOnline = true;
+            mSettingsManager.writeSetting(IpsServices::OutgoingPort, changedPort);
+        } else {
+            //set selected value back if user canceled.
+            HbDataFormModelItem *item = mContentItems.value(IpsServices::OutgoingPort);
+            item->setContentWidgetData(QString("selected"), mRadioButtonPreviousIndex);
+        }
+    }
+}
+
+/*!
+    Sets the previous index value to indicate that user has edited the field
+
+    \param index Reference to the item in the radio button list.
+*/
+void NmIpsSettingsHelper::outgoingPortPressed(const QModelIndex &index)
+{
+    Q_UNUSED(index);
+    HbDataFormModelItem *item = mContentItems.value(IpsServices::OutgoingPort);
+    QVariant data = item->contentWidgetData(QString("selected"));
+    mRadioButtonPreviousIndex = data.toInt();
+}
+
+/*!
+    Show a input dialog for allowing the user to specify a outgoing port
+    \param int The current port stored in the settings
+    \param bool Reference used for marking if the value really changed
+    \return int The user defined port
+*/
+int NmIpsSettingsHelper::showOutgoingPortInputDialog(int currentPort, bool &changed)
+{
+    QVariant newPort;
+
+    HbInputDialog inputDialog;
+    inputDialog.setInputMode(HbInputDialog::IntInput);
+    HbValidator *validator = new HbValidator();
+    validator->addField(new QIntValidator(0, 65535, 0), 
+                        HbStringUtil::convertDigits(QString::number(currentPort)));
+    inputDialog.setValidator(validator);
+    inputDialog.setPromptText(hbTrId("txt_mailips_setlabel_incoming_port_user_defined"));
+
+    HbAction *action = inputDialog.exec();
+    if (action == inputDialog.primaryAction()) {
+        newPort = inputDialog.value();
+        changed = true;
+    }
+    delete validator;
+
+    return newPort.toInt();
+}
+
+/*!
+    Used for getting the index to display in the outgoing port radio button list
+
+    \return index Used to set the selected value
+*/
+int NmIpsSettingsHelper::getCorrectOutgoingPortRadioButtonIndex(int currentPort)
+{
+    int index = 0;
+    int port = mSettingsManager.determineDefaultOutgoingPort();
+    if (port == currentPort) {
+        index = IpsServices::NmIpsSettingsDefault;
+    } else {
+        index = IpsServices::NmIpsSettingsUserDefined;
+    }
+    return index;
+}
+
+/*!
+    Saves the outgoing secure connection value into database if user has changed the value.
+*/
+void NmIpsSettingsHelper::outgoingSecureConnectionItemChange(int index)
+{
+    if (mRadioButtonPreviousIndex != index) {
+        emit goOffline(mSettingsManager.mailboxId());
+        mEmitOnline = true;
+        switch (index) {
+            case IpsServices::EMailStartTls: // On (Start TLS)
+                mSettingsManager.writeSetting(IpsServices::OutgoingSecureSockets, ETrue);
+                mSettingsManager.writeSetting(IpsServices::OutgoingSSLWrapper, EFalse);
+                break;
+
+            case IpsServices::EMailSslTls: // On (SSL/TLS)
+                mSettingsManager.writeSetting(IpsServices::OutgoingSecureSockets, EFalse);
+                mSettingsManager.writeSetting(IpsServices::OutgoingSSLWrapper, ETrue);
+                break;
+
+            case IpsServices::EMailSecurityOff: // Off
+                mSettingsManager.writeSetting(IpsServices::OutgoingSecureSockets, EFalse);
+                mSettingsManager.writeSetting(IpsServices::OutgoingSSLWrapper, EFalse);
+                break;
+
+        	 default:
+                break;
+        }
+        // Update outgoing port value only if default outgoing port used
+        HbDataFormModelItem *item = mContentItems.value(IpsServices::OutgoingPort);
+        QVariant data = item->contentWidgetData(QString("selected"));
+        // Default outgoing port selected
+        if (data.toInt() == IpsServices::NmIpsSettingsDefault) {
+			int port = mSettingsManager.determineDefaultOutgoingPort();
+			mSettingsManager.writeSetting(IpsServices::OutgoingPort, port);
+        }
+    }
+}
+
+/*!
+    Sets the previous index value to indicate that user has edited the field
+
+    \param text Reference to the item in the radio button list.
+*/
+void NmIpsSettingsHelper::outgoingSecureConnectionPressed(const QModelIndex &index)
+{
+	Q_UNUSED(index);
+	HbDataFormModelItem *item = mContentItems.value(IpsServices::OutgoingSecureSockets);
+    QVariant data = item->contentWidgetData(QString("selected"));
+    mRadioButtonPreviousIndex = data.toInt();
+}
+