controlpanelui/src/cpplugins/personalizationplugin/src/cpprofilesettingform.cpp
changeset 19 36aa4756ee82
parent 12 624337f114fe
child 21 2883a5458389
--- a/controlpanelui/src/cpplugins/personalizationplugin/src/cpprofilesettingform.cpp	Mon May 03 12:32:06 2010 +0300
+++ b/controlpanelui/src/cpplugins/personalizationplugin/src/cpprofilesettingform.cpp	Fri May 14 13:21:08 2010 +0800
@@ -22,6 +22,7 @@
 #include <hbabstractviewitem.h>
 #include <cpitemdatahelper.h>
 #include <cpprofilemodel.h>
+#include <hbslider.h>
 
 #include <QFileInfo>
 #include <QFileIconProvider>
@@ -29,10 +30,13 @@
 #include <QModelIndex>
 #include <QMap>
 
+#include <xqsettingsmanager.h>
+#include <ProfileEngineInternalCRKeys.h>
+
 CpProfileSettingForm::CpProfileSettingForm()
     : mModel(0), mItemDataHelper(new CpItemDataHelper( this )),
     mProfileModel(new CpProfileModel()), mFileIconProvider(new QFileIconProvider),
-    mGeneralPage(0),mMeetingPage(0),mCurrentPage( 0 )
+    mGeneralPage(0),mMeetingPage(0),mCurrentPage( 0 ), mSettingManager(0)
 {
     this->setHeading(hbTrId("txt_cp_button_advanced_settings"));
     this->setDescription(hbTrId("txt_cp_info_select_tones_that_play_when_you_select"));
@@ -45,6 +49,7 @@
     delete mModel;
     delete mProfileModel;
     delete mFileIconProvider;
+    delete mSettingManager;
 }
 
 void CpProfileSettingForm::initModel()
@@ -62,24 +67,152 @@
         meetingString = hbTrId("txt_cp_list_meeting"); 
     }
     
+    mSettingManager = new XQSettingsManager();   
+    
+    XQCentralRepositorySettingsKey key(KCRUidProfileEngine.iUid,KProEngSilenceMode);
+    
+    QVariant silenceMode = mSettingManager->readItemValue(key,XQSettingsManager::TypeInt);
+
+    mSettingManager->startMonitoring(key,XQSettingsManager::TypeInt);
+    connect(mSettingManager, SIGNAL(valueChanged (XQSettingsKey, QVariant)),
+            this, SLOT(settingValueChanged(XQSettingsKey, QVariant)));
+    
     mGeneralPage = mModel->appendDataFormPage( generalString );
-    initGeneralTonesGroup();
+    initProfileItems(EProfileWrapperGeneralId,mGeneralPage);
+    
+    //initGeneralTonesGroup();
+    
     //initGeneralVibraGroup();
     
     mMeetingPage = mModel->appendDataFormPage( meetingString );
-    initMeetingTonesGroup();
+    initProfileItems(EProfileWrapperMeetingId,mMeetingPage);
+    //initMeetingTonesGroup();
     //initMeetingVibraGroup();
-
     setModel(mModel);
+    settingValueChanged(key,silenceMode);
 }
 
+void CpProfileSettingForm::initProfileItems(int profileId,HbDataFormModelItem *parent)
+{
+    CpProfileSettings profileSettings;
+    mProfileModel->profileSettings( profileId, profileSettings );
+    
+    QHash<int,HbDataFormModelItem*> modelItems;
+    
+    //ring tone item
+    QFileInfo ringToneFileInfo( profileSettings.mRingTone );
+    HbDataFormModelItem *modelItem = new CpPersonalizationEntryItemData( *mItemDataHelper,
+            hbTrId("txt_cp_dblist_ringtone"), ringToneFileInfo.fileName(), mFileIconProvider->icon( ringToneFileInfo ),
+            CpPersonalizationEntryItemData::TONE_Ring, profileId );
+    mModel->appendDataFormItem(modelItem, parent);
+    modelItems.insert(ProfileItemRingTone,modelItem);
+    
+    //message tone item
+    QFileInfo messageToneFileInfo( profileSettings.mMessageTone );
+    modelItem = new CpPersonalizationEntryItemData( *mItemDataHelper,
+            hbTrId("txt_cp_dblist_message_tone"), messageToneFileInfo.fileName(), mFileIconProvider->icon( messageToneFileInfo ),
+            CpPersonalizationEntryItemData::TONE_Message,
+            profileId );
+    mModel->appendDataFormItem(modelItem , parent);
+    modelItems.insert(ProfileItemMessageTone,modelItem);
+    
+    //email tone item
+    QFileInfo emailToneFileInfo( profileSettings.mEmailTone );
+    modelItem = new CpPersonalizationEntryItemData( *mItemDataHelper,
+            hbTrId("txt_cp_dblist_email_tone"),  emailToneFileInfo.fileName(), mFileIconProvider->icon( emailToneFileInfo ),
+            CpPersonalizationEntryItemData::TONE_Email,
+            profileId );
+    mModel->appendDataFormItem(modelItem , parent);
+    modelItems.insert(ProfileItemEmailTone,modelItem);
+    
+    //reminder tone item
+    QFileInfo reminderToneFileInfo( profileSettings.mReminderTone );
+    modelItem = new CpPersonalizationEntryItemData( *mItemDataHelper,
+            hbTrId("txt_cp_dblist_reminder_tone"), reminderToneFileInfo.fileName(), mFileIconProvider->icon( reminderToneFileInfo ),
+            CpPersonalizationEntryItemData::TONE_Reminder,
+            profileId );
+    mModel->appendDataFormItem(modelItem , parent);
+    modelItems.insert(ProfileItemReminderTone,modelItem);
+    
+    //notification tones item
+    modelItem= mModel->appendDataFormItem(HbDataFormModelItem::CheckBoxItem,QString(),parent);
+    modelItem->setContentWidgetData("text", hbTrId("txt_cp_list_notification_tones"));
+    modelItem->setContentWidgetData( "checkState", profileSettings.mNotificationTone ? 2 : 0 );
+    if (profileId == EProfileWrapperGeneralId) {
+        addConnection( modelItem, SIGNAL( stateChanged( int )), this, SLOT( on_general_notificationTones_stateChanged( int )));
+    }
+    else if (profileId == EProfileWrapperMeetingId) {
+        addConnection( modelItem, SIGNAL( stateChanged( int )), this, SLOT( on_meeting_notificationTones_stateChanged( int )));
+    }
+    modelItems.insert(ProfileItemNotificationTones,modelItem);
+    
+    
+    //Key and Touch Screen Tones item
+    modelItem = 
+            mModel->appendDataFormItem(HbDataFormModelItem::SliderItem ,QString(hbTrId("txt_cp_setlabel_key_and_touchscreen_tones")),parent);
+    
+    QList<QVariant> sliderElements;
+    sliderElements << QVariant(HbSlider::IncreaseElement) << QVariant(HbSlider::TrackElement)
+            << QVariant(HbSlider::DecreaseElement) << QVariant(HbSlider::IconElement)
+            << QVariant(HbSlider::TextElement);
+    modelItem->setContentWidgetData("sliderElements",sliderElements);
+    
+    
+    
+    //TODO: profileModel need provide Max and Min value( 0-5 ), current max value from profileModel is 3
+    modelItem->setContentWidgetData( QString( "minimum" ), 0 );
+    modelItem->setContentWidgetData( QString( "maximum" ), 5 );
+    modelItem->setContentWidgetData( QString("value"), profileSettings.mKeyTouchScreenTone );
+    QMap< QString, QVariant > elements;
+    elements.insert(QString("IncreaseElement") , QVariant(":/icon/hb_vol_slider_increment.svg"));
+    elements.insert(QString("DecreaseElement"), QVariant(":/icon/hb_vol_slider_decrement.svg") );
+    if (profileSettings.mKeyTouchScreenTone != 0) {
+        elements.insert(QString("IconElement"), QVariant(":/icon/hb_vol_slider_unmuted.svg") );
+    }
+    else {
+        elements.insert(QString("IconElement"), QVariant(":/icon/hb_vol_slider_muted.svg") );
+    }
+    
+    modelItem->setContentWidgetData( QString( "elementIcons" ), elements );
+    
+    if (profileId == EProfileWrapperGeneralId) {
+        addConnection( modelItem, SIGNAL( valueChanged( int )), this, SLOT( on_general_keysAndScreenToneSlider_ValueChanged( int )));
+    }
+    else if (profileId == EProfileWrapperMeetingId) {
+        addConnection( modelItem, SIGNAL( valueChanged( int )), this, SLOT( on_meeting_keysAndScreenToneSlider_ValueChanged( int )));
+    }
+  
+    modelItems.insert(ProfileItemKeyandTouchScreenTones,modelItem);
+    
+    
+    //Touch Screen Vibra item
+    modelItem = mModel->appendDataFormItem( HbDataFormModelItem::SliderItem, QString( hbTrId( "txt_cp_setlabel_touch_screen_vibra" ) ), parent );
+     //TODO: profileModel need provide Max and Min value( 0-5 ), current max value from profileModel is 3
+    modelItem->setContentWidgetData( QString( "minimum" ), 0 );
+    modelItem->setContentWidgetData( QString( "maximum" ), 5 );
+    modelItem->setContentWidgetData( QString("value"), profileSettings.mKeyTouchScreenVibra );
+    
+    if (profileId == EProfileWrapperGeneralId) {
+        addConnection( modelItem, SIGNAL( valueChanged( int )), this, SLOT( on_general_screenVibra_ValueChanged( int )));
+    }
+    else if (profileId == EProfileWrapperMeetingId) {
+        addConnection( modelItem, SIGNAL( valueChanged( int )), this, SLOT( on_meeting_screenVibra_ValueChanged( int )));
+    }
+    
+    modelItems.insert(ProfileItemTouchScreenVibra,modelItem);
+    
+    mProfileModelItems.insert(profileId,modelItems);
+    
+}
+
+/*
 void CpProfileSettingForm::initGeneralTonesGroup()
 {
     CpProfileSettings profileSettings;
     mProfileModel->profileSettings( EProfileWrapperGeneralId, profileSettings );
     
-    /*HbDataFormModelItem *tonesGroup = mModel->appendDataFormGroup(
-        hbTrId("txt_cp_subhead_tones"),mGeneralPage);*/
+    //HbDataFormModelItem *tonesGroup = mModel->appendDataFormGroup(
+     //   hbTrId("txt_cp_subhead_tones"),mGeneralPage);
     QFileInfo ringToneFileInfo( profileSettings.mRingTone );
     mModel->appendDataFormItem( new CpPersonalizationEntryItemData( *mItemDataHelper,
         hbTrId("txt_cp_dblist_ringtone"), ringToneFileInfo.fileName(), mFileIconProvider->icon( ringToneFileInfo ) ), mGeneralPage);
@@ -102,13 +235,13 @@
     
     mGeneralKeysAndScreenToneSlider = 
             mModel->appendDataFormItem(HbDataFormModelItem::SliderItem ,QString(hbTrId("txt_cp_setlabel_key_and_touchscreen_tones")),mGeneralPage);
-    /*
-    QMap< QString, QVariant > elements;
-    elements.insert(QString("IncreaseElement") , QVariant(":/icon/hb_vol_slider_increment.svg"));
-    elements.insert(QString("DecreaseElement"), QVariant(":/icon/hb_vol_slider_decrement.svg") );
-    elements.insert(QString("IconElement"), QVariant(":/icon/hb_vol_slider_muted.svg") );
-    mGeneralKeysAndScreenToneSlider->setContentWidgetData( QString( "elementIcons" ), elements );
-     */
+    
+    //QMap< QString, QVariant > elements;
+    //elements.insert(QString("IncreaseElement") , QVariant(":/icon/hb_vol_slider_increment.svg"));
+    //elements.insert(QString("DecreaseElement"), QVariant(":/icon/hb_vol_slider_decrement.svg") );
+    //elements.insert(QString("IconElement"), QVariant(":/icon/hb_vol_slider_muted.svg") );
+    //mGeneralKeysAndScreenToneSlider->setContentWidgetData( QString( "elementIcons" ), elements );
+     
     //TODO: profileModel need provide Max and Min value( 0-5 ), current max value from profileModel is 3
     mGeneralKeysAndScreenToneSlider->setContentWidgetData( QString( "minimum" ), 0 );
     mGeneralKeysAndScreenToneSlider->setContentWidgetData( QString( "maximum" ), 5 );
@@ -125,6 +258,7 @@
     addConnection( mGeneralKeysAndScreenToneSlider, SIGNAL( valueChanged( int )), this, SLOT( on_general_keysAndScreenToneSlider_ValueChanged( int )));
     addConnection( mGeneralSreenVibra, SIGNAL( valueChanged( int )), this, SLOT( on_general_screenVibra_ValueChanged( int )));    
 }
+*/
 
 /*void CpProfileSettingForm::initGeneralVibraGroup()
 {
@@ -169,13 +303,13 @@
 }*/
 
 ////////////////////////////////////////////////////////////
-void CpProfileSettingForm::initMeetingTonesGroup()
+/*void CpProfileSettingForm::initMeetingTonesGroup()
 {
     CpProfileSettings profileSettings;
     mProfileModel->profileSettings( EProfileWrapperMeetingId, profileSettings );
     
-   /* HbDataFormModelItem *tonesGroup = mModel->appendDataFormGroup(
-        hbTrId("txt_cp_subhead_tones"),mMeetingPage);*/
+   //HbDataFormModelItem *tonesGroup = mModel->appendDataFormGroup(
+   //     hbTrId("txt_cp_subhead_tones"),mMeetingPage);
     QFileInfo ringToneFileInfo( profileSettings.mRingTone );
     mModel->appendDataFormItem( new CpPersonalizationEntryItemData( *mItemDataHelper,
         hbTrId("txt_cp_dblist_ringtone"), ringToneFileInfo.fileName(), mFileIconProvider->icon( ringToneFileInfo ) ), mMeetingPage);
@@ -198,13 +332,13 @@
     
     mMeetingKeysAndScreenToneSlider = 
             mModel->appendDataFormItem(HbDataFormModelItem::SliderItem ,QString(hbTrId("txt_cp_setlabel_key_and_touchscreen_tones")),mMeetingPage);
-    /*
-    QMap< QString, QVariant > elements;
-    elements.insert(QString("IncreaseElement") , QVariant(":/icon/hb_vol_slider_increment.svg"));
-    elements.insert(QString("DecreaseElement"), QVariant(":/icon/hb_vol_slider_decrement.svg") );
-    elements.insert(QString("IconElement"), QVariant(":/icon/hb_vol_slider_muted.svg") );
-    mMeetingkeysAndScreenSlider->setContentWidgetData( QString( "elementIcons" ), elements );
-    */
+    
+    //QMap< QString, QVariant > elements;
+    //elements.insert(QString("IncreaseElement") , QVariant(":/icon/hb_vol_slider_increment.svg"));
+    //elements.insert(QString("DecreaseElement"), QVariant(":/icon/hb_vol_slider_decrement.svg") );
+    //elements.insert(QString("IconElement"), QVariant(":/icon/hb_vol_slider_muted.svg") );
+    //mMeetingkeysAndScreenSlider->setContentWidgetData( QString( "elementIcons" ), elements );
+    
     //TODO: profileModel need provide Max and Min value( 0-5 ), current max value from profileModel is 3
     mMeetingKeysAndScreenToneSlider->setContentWidgetData( QString( "minimum" ), 0 );
     mMeetingKeysAndScreenToneSlider->setContentWidgetData( QString( "maximum" ), 5 );
@@ -220,7 +354,7 @@
     addConnection( mMeetingKeysAndScreenToneSlider, SIGNAL( valueChanged( int )), this, SLOT( on_meeting_keysAndScreenSlider_ValueChanged( int )));
     addConnection( mMeetingSreenVibra, SIGNAL( valueChanged( int )), this, SLOT( on_meeting_screenVibra_ValueChanged( int )));
 }
-
+*/
 /*void CpProfileSettingForm::initMeetingVibraGroup()
 {
     CpProfileSettings profileSettings;
@@ -273,7 +407,22 @@
 void CpProfileSettingForm::on_general_keysAndScreenToneSlider_ValueChanged( int value )
 {
     mProfileModel->setKeyTouchScreenTone( EProfileWrapperGeneralId, value );
-    mGeneralKeysAndScreenToneSlider->setContentWidgetData( QString("value"), value );
+    HbDataFormModelItem *modelItem = profileItem(EProfileWrapperGeneralId,ProfileItemKeyandTouchScreenTones);
+    if (modelItem) {
+        modelItem->setContentWidgetData( QString("value"), value );
+        QMap< QString, QVariant > elements;
+        if (value != 0) {      
+            elements.insert(QString("DecreaseElement"), QVariant(":/icon/hb_vol_slider_decrement.svg"));
+            elements.insert(QString("IncreaseElement"), QVariant(":/icon/hb_vol_slider_increment.svg"));
+            elements.insert(QString("IconElement"), QVariant(":/icon/hb_vol_slider_unmuted.svg") );            
+        }
+        else {
+            elements.insert(QString("DecreaseElement"), QVariant(":/icon/hb_vol_slider_decrement.svg"));
+            elements.insert(QString("IncreaseElement"), QVariant(":/icon/hb_vol_slider_increment.svg"));
+            elements.insert(QString("IconElement"), QVariant(":/icon/hb_vol_slider_muted.svg") );  
+        }
+        modelItem->setContentWidgetData( QString( "elementIcons" ), elements );            
+    }
 }
 
 
@@ -301,7 +450,11 @@
 void CpProfileSettingForm::on_general_screenVibra_ValueChanged( int value )
 {
     mProfileModel->setKeyTouchScreenVibra( EProfileWrapperGeneralId, value );
-    mGeneralSreenVibra->setContentWidgetData( QString("value"), value );
+    
+    HbDataFormModelItem *modelItem = profileItem(EProfileWrapperGeneralId,ProfileItemTouchScreenVibra);
+    if (modelItem) {
+        modelItem->setContentWidgetData( QString("value"), value );
+    }
 
 }
 
@@ -312,10 +465,26 @@
     mProfileModel->setNotificationTone( EProfileWrapperMeetingId, checkBoxStateToBool( state ) );
 }
 
-void CpProfileSettingForm::on_meeting_keysAndScreenSlider_ValueChanged( int value )
+void CpProfileSettingForm::on_meeting_keysAndScreenToneSlider_ValueChanged( int value )
 {
     mProfileModel->setKeyTouchScreenTone( EProfileWrapperMeetingId, value );
-    mMeetingKeysAndScreenToneSlider->setContentWidgetData( QString("value"), value );
+    
+    HbDataFormModelItem *modelItem = profileItem(EProfileWrapperMeetingId,ProfileItemKeyandTouchScreenTones);
+    if (modelItem) {
+        modelItem->setContentWidgetData( QString("value"), value );
+        QMap< QString, QVariant > elements;
+        if (value != 0) {
+            elements.insert(QString("DecreaseElement"), QVariant(":/icon/hb_vol_slider_decrement.svg"));
+            elements.insert(QString("IncreaseElement"), QVariant(":/icon/hb_vol_slider_increment.svg"));
+            elements.insert(QString("IconElement"), QVariant(":/icon/hb_vol_slider_unmuted.svg") );            
+        }
+        else {
+            elements.insert(QString("DecreaseElement"), QVariant(":/icon/hb_vol_slider_decrement.svg"));
+            elements.insert(QString("IncreaseElement"), QVariant(":/icon/hb_vol_slider_increment.svg"));
+            elements.insert(QString("IconElement"), QVariant(":/icon/hb_vol_slider_muted.svg") );  
+        }
+        modelItem->setContentWidgetData( QString( "elementIcons" ), elements );            
+    }
 }
 
 
@@ -343,7 +512,11 @@
 void CpProfileSettingForm::on_meeting_screenVibra_ValueChanged( int value )
 {
     mProfileModel->setKeyTouchScreenVibra( EProfileWrapperMeetingId, value );
-    mMeetingSreenVibra->setContentWidgetData( QString("value"), value );
+    
+    HbDataFormModelItem *modelItem = profileItem(EProfileWrapperMeetingId,ProfileItemTouchScreenVibra);
+    if (modelItem) {
+        modelItem->setContentWidgetData( QString("value"), value );
+    }
 }
 
 bool CpProfileSettingForm::checkBoxStateToBool( int state )
@@ -354,3 +527,37 @@
         return false;
     }
 }
+
+
+void CpProfileSettingForm::settingValueChanged(const XQSettingsKey &key, const QVariant &value)
+{
+    if (key.uid() == KCRUidProfileEngine.iUid && key.key() == KProEngSilenceMode && value.isValid()) {
+    
+		static const int silenceSensitiveModelItemIds[] = 
+		{       
+			CpProfileSettingForm::ProfileItemRingTone,
+			CpProfileSettingForm::ProfileItemMessageTone,
+			CpProfileSettingForm::ProfileItemEmailTone,
+			CpProfileSettingForm::ProfileItemReminderTone,
+			CpProfileSettingForm::ProfileItemNotificationTones,
+			CpProfileSettingForm::ProfileItemKeyandTouchScreenTones
+		};
+    
+        QHash< int,QHash<int,HbDataFormModelItem*>  >::const_iterator it (mProfileModelItems.begin());
+        for(; it != mProfileModelItems.end(); ++it ) {          
+            for (int i = 0; i < sizeof(silenceSensitiveModelItemIds)/sizeof(silenceSensitiveModelItemIds[0]);++i) {           
+                QHash<int,HbDataFormModelItem*>::const_iterator found = it.value().find(silenceSensitiveModelItemIds[i]);
+                if (found != it.value().end()) {
+                    found.value()->setEnabled(!value.toBool());
+                }
+            }   
+        }
+    }
+}
+
+HbDataFormModelItem *CpProfileSettingForm::profileItem(int profileId,int profileItemId)
+{
+    return mProfileModelItems.value(profileId).value(profileItemId);
+}
+
+//End of File