messagingapp/msgsettings/settingsview/src/msgsettingsform.cpp
changeset 25 84d9eb65b26f
parent 23 238255e8b033
child 27 e4592d119491
child 37 518b245aa84c
--- a/messagingapp/msgsettings/settingsview/src/msgsettingsform.cpp	Fri Apr 16 14:56:15 2010 +0300
+++ b/messagingapp/msgsettings/settingsview/src/msgsettingsform.cpp	Mon May 03 12:29:07 2010 +0300
@@ -22,27 +22,52 @@
 #include <hbdataformmodel.h>
 #include <hbcombobox.h>
 #include <hbpushbutton.h>
+#include <QStandardItemModel>
 
 #include "debugtraces.h"
 
 //Localized constants
-#define LOC_DELIVERY_REPORTS hbTrId("txt_messaging_setlabel_delivery_reports")
+#define LOC_MESSAGE_SETTINGS_HEADING hbTrId("txt_messaging_title_messaging_settings")
+#define LOC_RECEIVING_SERVICE_MESSAGES hbTrId("txt_messaging_setlabel_receiving_service_messages")
 #define LOC_ON hbTrId("txt_messaging_setlabel_val_on")
 #define LOC_OFF hbTrId("txt_messaging_setlabel_val_off")
 #define LOC_REDUCED_SUPPORT hbTrId("txt_messaging_setlabel_val_reduced_support")
 #define LOC_FULL_SUPPORT hbTrId("txt_messaging_setlabel_val_full_support")
 #define LOC_ADVANCED hbTrId("txt_messaging_button_advanced")
 #define LOC_CHAR_ENCODING hbTrId("txt_messaging_setlabel_character_encoding")
-
+#define LOC_MMS_SETTINGS hbTrId("txt_messaging_subhead_mms_settings")
+#define LOC_SMS_CENTRE_SETTINGS hbTrId("txt_messaging_subhead_sms_message_centre_settings")
 
-MsgSettingsForm::MsgSettingsForm(MsgSettingsViewManager* settingsViewManager,
-	                               QGraphicsItem *parent)
-:HbDataForm(parent), mSettingsViewManager(settingsViewManager)
+#define LOC_MMS_CREATION_MODE hbTrId("txt_messaging_setlabel_mms_creation_mode")
+#define LOC_MMS_RETRIEVAL hbTrId("txt_messaging_setlabel_mms_retrieval")
+#define LOC_ALLOW_ANONYMOUS_MMS hbTrId("txt_messaging_setlabel_allow_anonymous_mms_message")
+#define LOC_RECEIVE_MMS_ADVERTS hbTrId("txt_messaging_setlabel_receive_mms_adverts")
+#define LOC_MMS_AP_IN_USE hbTrId("txt_messaging_setlabel_mms_access_point_in_use")
+#define LOC_SMS_CENTRE_IN_USE hbTrId("txt_messaging_setlabel_sms_message_centre_in_use")
+#define LOC_ADD_NEW hbTrId("txt_messaging_button_add_new")
+#define LOC_ALWAYS_AUTOMATIC hbTrId("txt_messaging_setlabel_val_always_automatic")
+#define LOC_AUTO_HOME_NETWORK hbTrId("txt_messaging_setlabel_val_auto_home_network")
+#define LOC_MANUAL hbTrId("txt_messaging_setlabel_val_mannual")
+#define LOC_MMS_YES hbTrId("txt_messaging_setlabel_allow_anonymous_mms_val_yes")
+#define LOC_MMS_NO hbTrId("txt_messaging_setlabel_allow_anonymous_mms_val_no")
+
+MsgSettingsForm::MsgSettingsForm(QGraphicsItem *parent) :
+    HbDataForm(parent)
 {
-    this->setHeading(tr("Application settings: Messaging"));
+    this->setHeading(LOC_MESSAGE_SETTINGS_HEADING);
 
     mSettingEngine = new MsgSettingEngine();
 
+    //custom prototype
+    MsgSettingsDataFormCustomItem* customPrototype =
+            new MsgSettingsDataFormCustomItem(this);
+
+    QList<HbAbstractViewItem*> protos = this->itemPrototypes();
+    protos.append(customPrototype);
+    this->setItemPrototypes(protos);
+
+    mSmsMCSettingsGroup << LOC_SMS_CENTRE_IN_USE << LOC_ADD_NEW;
+
     //initialize the form model
     initSettingModel();
 }
@@ -54,79 +79,349 @@
 
 void MsgSettingsForm::initSettingModel()
 {
-    HbDataFormModel *model = new HbDataFormModel(0);
-
-    bool deliveryReoprt = false;
-    MsgSettingEngine::CharacterEncoding charEncoding = MsgSettingEngine::ReducedSupport;
+    settingsModel = new HbDataFormModel(0);
 
-    mSettingEngine->settingsDeliverReportAndCharEncoding(deliveryReoprt, charEncoding);
+    MsgSettingEngine::CharacterEncoding charEncoding =
+            MsgSettingEngine::ReducedSupport;
 
-    QStringList deliveryReoprtList;
-    deliveryReoprtList << LOC_OFF << LOC_ON;
-
-    int index = int(deliveryReoprt);
-    int otherIndex = (deliveryReoprt + 1) % deliveryReoprtList.count();
+    bool receiveServiceMessages = false;
 
-    // 1. create the first item delivery reports
-    HbDataFormModelItem *deliverReports = new HbDataFormModelItem(
-                HbDataFormModelItem::ToggleValueItem, 
-                LOC_DELIVERY_REPORTS, 0);
-    deliverReports->setContentWidgetData("text", deliveryReoprtList.at(index));
-    deliverReports->setContentWidgetData("additionalText", deliveryReoprtList.at(otherIndex));
+    mSettingEngine->settingsServiceMessagesAndCharEncoding(
+            receiveServiceMessages,
+            charEncoding);
 
-    model->appendDataFormItem(deliverReports, model->invisibleRootItem());
-    this->addConnection(deliverReports, SIGNAL(clicked()),
-                this,SLOT(onPressedDelReports()));
-    
-    // 2. Character encoding
-    HbDataFormModelItem *characterEncoding = new HbDataFormModelItem(
-            HbDataFormModelItem::ComboBoxItem, 
-            LOC_CHAR_ENCODING, 0);
+    // 1. Character encoding
+    HbDataFormModelItem *characterEncoding =
+            new HbDataFormModelItem(HbDataFormModelItem::ComboBoxItem,
+                                    LOC_CHAR_ENCODING,
+                                    0);
     QStringList charEncodingList;
     charEncodingList << LOC_REDUCED_SUPPORT << LOC_FULL_SUPPORT;
 
-    index = int(charEncoding);
+    int index = int (charEncoding);
 
     characterEncoding->setContentWidgetData("items", charEncodingList);
     characterEncoding->setContentWidgetData("currentIndex", index);
 
-    model->appendDataFormItem(characterEncoding, model->invisibleRootItem());
-    this->addConnection(characterEncoding, SIGNAL(currentIndexChanged(int)),
-                    this,SLOT(changeCharEncoding(int)));
-    
-    // 3. CUSTOM SETTING ITEM HbButton
-    HbDataFormModelItem::DataItemType customItem =
-        static_cast<HbDataFormModelItem::DataItemType> (HbDataFormModelItem::CustomItemBase + 1);
+    settingsModel->appendDataFormItem(characterEncoding,
+                                      settingsModel->invisibleRootItem());
+    this->addConnection(characterEncoding,
+                        SIGNAL(currentIndexChanged(int)),
+                        this,
+                        SLOT(changeCharEncoding(int)));
+
+    //2. receiving service messages
+    QStringList serviceMessagesList;
+    serviceMessagesList << LOC_OFF << LOC_ON;
+
+    index = int (receiveServiceMessages);
+    int otherIndex = (receiveServiceMessages + 1) % serviceMessagesList.count();
+
+    HbDataFormModelItem *serviceMessagesItem =
+            new HbDataFormModelItem(HbDataFormModelItem::ComboBoxItem,
+                                    LOC_RECEIVING_SERVICE_MESSAGES,
+                                    0);
+
+    serviceMessagesItem->setContentWidgetData("items", serviceMessagesList);
+    serviceMessagesItem->setContentWidgetData("currentIndex", index);
+
+    settingsModel->appendDataFormItem(serviceMessagesItem,
+                                      settingsModel->invisibleRootItem());
+    this->addConnection(serviceMessagesItem,
+                        SIGNAL(clicked()),
+                        this,
+                        SLOT(onPressedServiceMessages()));
+
+    // 3. MMS Settings
+    HbDataFormModelItem* mmsGroup =
+            new HbDataFormModelItem(HbDataFormModelItem::GroupItem,
+                                    LOC_MMS_SETTINGS,
+                                    0);
+
+    settingsModel->appendDataFormItem(mmsGroup,
+                                      settingsModel->invisibleRootItem());
+
+    addMMSGroupItem(mmsGroup);
+
+    // 4. SMS Settings
+    mSmsMCGroup = new HbDataFormModelItem(HbDataFormModelItem::GroupItem,
+                                          LOC_SMS_CENTRE_SETTINGS,
+                                          0);
+
+    settingsModel->appendDataFormItem(mSmsMCGroup,
+                                      settingsModel->invisibleRootItem());
+
+    addSmsMCGroupItem(mSmsMCGroup);
+
+    this->setModel(settingsModel);
+}
+
+void MsgSettingsForm::refreshViewForm()
+{
+    updateSmsMCGroupItem(mSmsMCGroup);
+}
 
-    HbDataFormModelItem *advancedSettings
-        = model->appendDataFormItem(customItem, QString(), model->invisibleRootItem());
+void MsgSettingsForm::updateSmsMCGroupItem(HbDataFormModelItem* parent)
+{
+    //1. update the combobox model item
+    int defaultServiceCenter = -1;
+    mSmsServiceList.clear();
+    mSettingEngine->allSMSMessageCenter(mSmsServiceList, defaultServiceCenter);
+
+    mSmsServiceCenterModel->clear();
+    
+    //recreate all the model items 
+    int itemCount = mSmsServiceList.count();
+    for (int i = 0; i < itemCount; ++i)
+    {
+        QStandardItem *item = new QStandardItem;
+        item->setData(mSmsServiceList.at(i), Qt::DisplayRole);
+        mSmsServiceCenterModel->appendRow(item);
+    }
+    //set the content widget data again
+    if(itemCount > 0)
+    {
+       smsMessageCenter->setContentWidgetData("items", mSmsServiceList);
+    }
+
+    smsMessageCenter->setContentWidgetData("currentIndex",
+                                               defaultServiceCenter);
     
-    advancedSettings->setContentWidgetData("text", LOC_ADVANCED);
-    this->addConnection(advancedSettings, SIGNAL(clicked()),
-            this,SLOT(onPressedAdvanced())); 
-            
-    this->setModel(model);
+    //2. refresh all the custom buttons again
+    int childCount = parent->childCount();
+    int totalServices = mSmsServiceList.count();
+
+    //custom buttons start from index 1 till childCount-2
+    int list_index = 0, child_index = 1;
+    for (; list_index < totalServices && child_index <= childCount - 2; list_index++, child_index++)
+    {
+        //get the existing custom item instance
+        HbDataFormModelItem* customItem = parent->childAt(child_index);
+        customItem->setContentWidgetData("text", mSmsServiceList.at(list_index));
+    }
+
+    //if extra child items are remaining then delete those from parent
+    for(;child_index <= childCount - 2;
+            child_index++)
+    {
+        parent->removeChild(child_index);
+    }
+    
+    //create all new custom items if new are added in list
+    //CUSTOM SETTING ITEM HbButton
+    HbDataFormModelItem::DataItemType
+            customButtonGeneral =
+                    static_cast<HbDataFormModelItem::DataItemType> (HbDataFormModelItem::CustomItemBase
+                            + 1);
+    for (; list_index < totalServices; list_index++, child_index++)
+    {
+        HbDataFormModelItem* newChild =
+                new HbDataFormModelItem(customButtonGeneral);
+
+        newChild->setContentWidgetData("text", mSmsServiceList.at(list_index));
+        parent->insertChild(child_index, newChild);
+
+        this->addConnection(newChild,
+                            SIGNAL(clicked()),
+                            this,
+                            SLOT(onPressedCustomButton()));
+    }    
 }
 
-void MsgSettingsForm::onPressedAdvanced()
+void MsgSettingsForm::addMMSGroupItem(HbDataFormModelItem* parent)
 {
-    //tell view manager to open advanced view
-    mSettingsViewManager->openAdvancedView();
+    //read settings
+    MsgSettingEngine::MmsRetrieval retrieval =
+            MsgSettingEngine::AlwaysAutomatic;
+    bool allowAnonymous = true;
+    bool allowAdverts = true;
+
+    mSettingEngine->advanceMmsSettings(retrieval, 
+                                       allowAnonymous, 
+                                       allowAdverts);
+
+    // add all the mms group item
+
+    HbDataFormModelItem *mmsRetrieval =
+            new HbDataFormModelItem(HbDataFormModelItem::ComboBoxItem,
+                                    LOC_MMS_RETRIEVAL,
+                                    0);
+
+    QStringList mmsRetrievalList;
+    mmsRetrievalList << LOC_ALWAYS_AUTOMATIC << LOC_AUTO_HOME_NETWORK
+            << LOC_MANUAL << LOC_OFF;
+
+    mmsRetrieval->setContentWidgetData("items", mmsRetrievalList);
+    mmsRetrieval->setContentWidgetData("currentIndex", int (retrieval));
+    this->addConnection(mmsRetrieval,
+                        SIGNAL(currentIndexChanged(int)),
+                        this,
+                        SLOT(changeMMSRetrievalMode(int)));
+
+    HbDataFormModelItem *anonymousMMS =
+            new HbDataFormModelItem(HbDataFormModelItem::ToggleValueItem,
+                                    LOC_ALLOW_ANONYMOUS_MMS,
+                                    0);
+
+    QStringList anonymousMMSList;
+    anonymousMMSList << LOC_MMS_NO << LOC_MMS_YES;
+
+    int defaultIndex = int (allowAnonymous);
+    int alternateIndex = (defaultIndex + 1) % anonymousMMSList.count();
+
+    anonymousMMS->setContentWidgetData("text",
+                                       anonymousMMSList.at(defaultIndex));
+    anonymousMMS->setContentWidgetData("additionalText",
+                                       anonymousMMSList.at(alternateIndex));
+    this->addConnection(anonymousMMS,
+                        SIGNAL(clicked()),
+                        this,
+                        SLOT(allowAnonymousMMS()));
+
+    HbDataFormModelItem *mmsAdverts =
+            new HbDataFormModelItem(HbDataFormModelItem::ToggleValueItem,
+                                    LOC_RECEIVE_MMS_ADVERTS,
+                                    0);
+
+    QStringList mmsAdvertsList;
+    mmsAdvertsList << LOC_MMS_NO << LOC_MMS_YES;
+
+    defaultIndex = int (allowAdverts);
+    alternateIndex = (defaultIndex + 1) % mmsAdvertsList.count();
+
+    mmsAdverts->setContentWidgetData("text", mmsAdvertsList.at(defaultIndex));
+    mmsAdverts->setContentWidgetData("additionalText",
+                                     mmsAdvertsList.at(alternateIndex));
+
+    this->addConnection(mmsAdverts,
+                        SIGNAL(clicked()),
+                        this,
+                        SLOT(allowMMSAdverts()));
+
+    HbDataFormModelItem *accessPoint =
+            new HbDataFormModelItem(HbDataFormModelItem::ComboBoxItem,
+                                    LOC_MMS_AP_IN_USE,
+                                    0);
+
+    QStandardItemModel* comboModel = new QStandardItemModel();
+
+    QStringList mmsList;
+    int defaultAccessPointIndex = -1;
+
+    mSettingEngine->allMMsAcessPoints(mmsList, defaultAccessPointIndex);
+    int accessPoints = mmsList.count();
+    for (int a = 0; a < accessPoints; ++a)
+    {
+        QStandardItem* item = new QStandardItem();
+        item->setData(mmsList[a], Qt::DisplayRole);
+        comboModel->appendRow(item);
+    }
+    accessPoint->setModel(comboModel);
+    accessPoint->setContentWidgetData("items", mmsList);
+    if (defaultAccessPointIndex >= 0)
+    {
+        accessPoint->setContentWidgetData("currentIndex",
+                                          defaultAccessPointIndex);
+    }
+    QDEBUG_WRITE_FORMAT("Settings: adding accesspoints..", defaultAccessPointIndex);
+    this->addConnection(accessPoint,
+                        SIGNAL(currentIndexChanged(int)),
+                        this,
+                        SLOT(changeAccessPoint(int)));
+
+    parent->appendChild(mmsRetrieval);
+    parent->appendChild(anonymousMMS);
+    parent->appendChild(mmsAdverts);
+    parent->appendChild(accessPoint);
 }
 
-void MsgSettingsForm::onPressedDelReports()
+void MsgSettingsForm::addSmsMCGroupItem(HbDataFormModelItem* parent)
+{
+    // add all the sms message center group item
+    smsMessageCenter
+            = new HbDataFormModelItem(HbDataFormModelItem::ComboBoxItem,
+                                      mSmsMCSettingsGroup.at(0),
+                                      0);
+
+    int defaultServiceCenter = -1;
+    mSmsServiceList.clear();
+    mSettingEngine->allSMSMessageCenter(mSmsServiceList, defaultServiceCenter);
+    mSmsServiceCenterModel = new QStandardItemModel(this);
+
+    int itemCount = mSmsServiceList.count();
+    for (int i = 0; i < itemCount; ++i)
+    {
+        QStandardItem *item = new QStandardItem;
+        item->setData(mSmsServiceList.at(i), Qt::DisplayRole);
+        mSmsServiceCenterModel->appendRow(item);
+    }
+
+    smsMessageCenter->setModel(mSmsServiceCenterModel);
+    smsMessageCenter->setContentWidgetData("items", mSmsServiceList);
+
+    if (defaultServiceCenter >= 0)
+    {
+        smsMessageCenter->setContentWidgetData("currentIndex",
+                                               defaultServiceCenter);
+    }
+
+    this->addConnection(smsMessageCenter,
+                        SIGNAL(currentIndexChanged(int)),
+                        this,
+                        SLOT(onSMSCurrentIndexChanged(int)));
+
+    parent->appendChild(smsMessageCenter);
+
+    //CUSTOM SETTING ITEM HbButton
+    HbDataFormModelItem::DataItemType
+            customButtonGeneral =
+                    static_cast<HbDataFormModelItem::DataItemType> (HbDataFormModelItem::CustomItemBase
+                            + 1);
+
+    int totalServices = mSmsServiceList.count();
+    for (int index = 0; index < totalServices; index++)
+    {
+        HbDataFormModelItem *newMessageCenters =
+                settingsModel->appendDataFormItem(customButtonGeneral,
+                                                  QString(""),
+                                                  parent);
+
+        newMessageCenters->setContentWidgetData("text",
+                                                mSmsServiceList.at(index));
+        this->addConnection(newMessageCenters,
+                            SIGNAL(clicked()),
+                            this,
+                            SLOT(onPressedCustomButton()));
+    }
+
+    HbDataFormModelItem *newMessageCenters =
+            settingsModel->appendDataFormItem(customButtonGeneral,
+                                              QString(""),
+                                              parent);
+
+    newMessageCenters->setContentWidgetData("text", mSmsMCSettingsGroup.at(1));
+    this->addConnection(newMessageCenters,
+                        SIGNAL(clicked()),
+                        this,
+                        SLOT(onPressedCustomButton()));
+}
+
+void MsgSettingsForm::onPressedServiceMessages()
 {
     HbPushButton *btn = qobject_cast<HbPushButton *> (sender());
 
-    if (btn) {
+    if (btn)
+    {
         QString btnText = btn->text();
 
         //check if the button pressed was On or Off
-        if (LOC_OFF == btnText) {
-            mSettingEngine->setDeliveryReport(false);
+        if (LOC_OFF == btnText)
+        {
+            mSettingEngine->setReceiveSerivceMessages(false);
         }
-        else {
-            mSettingEngine->setDeliveryReport(true);
+        else
+        {
+            mSettingEngine->setReceiveSerivceMessages(true);
         }
     }
 }
@@ -137,5 +432,87 @@
     mSettingEngine->setCharacterEncoding(MsgSettingEngine::CharacterEncoding(index));
 }
 
+void MsgSettingsForm::changeMMSRetrievalMode(int index)
+{
+    mSettingEngine->setMMSRetrieval(MsgSettingEngine::MmsRetrieval(index));
+}
 
+void MsgSettingsForm::allowAnonymousMMS()
+{
+    HbPushButton *btn = qobject_cast<HbPushButton *> (sender());
+
+    if (btn)
+    {
+        QString btnText = btn->text();
+
+        //check if the button pressed was Yes or NO
+        if (LOC_MMS_YES == btnText)
+        {
+            mSettingEngine->setAnonymousMessages(true);
+        }
+        else
+        {
+            mSettingEngine->setAnonymousMessages(false);
+        }
+    }
+}
+
+void MsgSettingsForm::allowMMSAdverts()
+{
+    HbPushButton *btn = qobject_cast<HbPushButton *> (sender());
+
+    if (btn)
+    {
+        QString btnText = btn->text();
+
+        //check if the button pressed was Yes or NO
+        if (LOC_MMS_NO == btnText)
+        {
+            mSettingEngine->setReceiveMMSAdverts(true);
+        }
+        else
+        {
+            mSettingEngine->setReceiveMMSAdverts(false);
+        }
+    }
+}
+
+void MsgSettingsForm::changeAccessPoint(int index)
+{
+    // save to the mms settings
+    mSettingEngine->setMMSAccesspoint(index);
+}
+
+void MsgSettingsForm::onPressedCustomButton()
+{
+    HbPushButton *btn = qobject_cast<HbPushButton *> (sender());
+
+    if (btn)
+    {
+        QString btnText = btn->text();
+        if (btnText == mSmsMCSettingsGroup.at(1))
+        {
+            // emit the signal to open add view 
+            emit newSMSCCenterClicked(-1);
+        }
+        else
+        {
+            int index = mSmsServiceList.indexOf(btnText);
+            emit newSMSCCenterClicked(index);
+        }
+    }
+}
+
+void MsgSettingsForm::onSMSCurrentIndexChanged(int index)
+{
+    //set into msg settings
+    mSettingEngine->setSMSMessageCenter(index);
+}
+
+void MsgSettingsForm::expandSMSSettings()
+{
+    QModelIndex index_sms = settingsModel->indexFromItem(mSmsMCGroup);
+
+    this->setExpanded(index_sms, true);
+}
 //EOF