diff -r 3fec62e6e7fc -r 90fe62538f66 controlpanelui/src/cpplugins/personalizationplugin/src/cpprofilesettingform.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/controlpanelui/src/cpplugins/personalizationplugin/src/cpprofilesettingform.cpp Tue Aug 31 15:15:28 2010 +0300 @@ -0,0 +1,351 @@ +/* + * Copyright (c) 2009 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 "cpprofilesettingform.h" +#include "cppersonalizationentryitemdata.h" +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +CpProfileSettingForm::CpProfileSettingForm() + : mModel(0), mItemDataHelper(new CpItemDataHelper( this )), + mProfileModel(new CpProfileModel()), mFileIconProvider(new QFileIconProvider), + 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")); + + initModel(); +} + +CpProfileSettingForm::~CpProfileSettingForm() +{ + delete mModel; + delete mProfileModel; + delete mFileIconProvider; + delete mSettingManager; +} + +void CpProfileSettingForm::initModel() +{ + mModel = new HbDataFormModel(); + + QString generalString( mProfileModel->profileName( EProfileWrapperGeneralId ) ); + if( generalString.isEmpty() ) { + qDebug( "warning: general profile name is empty"); + generalString = hbTrId("txt_cp_list_general"); + } + QString meetingString( mProfileModel->profileName( EProfileWrapperMeetingId ) ); + if( meetingString.isEmpty() ) { + qDebug( "warning: meeting profile name is empty"); + 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 ); + initProfileItems(EProfileWrapperGeneralId,mGeneralPage); + + //initGeneralTonesGroup(); + + //initGeneralVibraGroup(); + + mMeetingPage = mModel->appendDataFormPage( meetingString ); + initProfileItems(EProfileWrapperMeetingId,mMeetingPage); + //initMeetingTonesGroup(); + //initMeetingVibraGroup(); + setModel(mModel); + settingValueChanged(key,silenceMode); +} + +void CpProfileSettingForm::initProfileItems(int profileId,HbDataFormModelItem *parent) +{ + CpProfileSettings profileSettings; + mProfileModel->profileSettings( profileId, profileSettings ); + + QHash modelItems; + + //ring tone item + QFileInfo ringToneFileInfo( profileSettings.mRingTone ); + HbDataFormModelItem *modelItem = new CpPersonalizationEntryItemData( *mItemDataHelper, + hbTrId("txt_cp_dblist_ringtone"), ringToneFileInfo.fileName(), "qtg_large_ring_tone", + 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(), "qtg_large_message", + 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(), "qtg_large_email", + 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(), "qtg_large_calendar", + 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); + modelItem->setContentWidgetData("objectName", "notificationTonesCheckBox" + QString::number(profileId)); + 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 sliderElements; + sliderElements << QVariant(HbSlider::IncreaseElement) << QVariant(HbSlider::TrackElement) + << QVariant(HbSlider::DecreaseElement) << QVariant(HbSlider::IconElement) + << QVariant(HbSlider::TextElement); + modelItem->setContentWidgetData("sliderElements",sliderElements); + modelItem->setContentWidgetData("objectName", "keyTonesSlider" + QString::number(profileId)); + + + //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 + sliderElements.clear(); + sliderElements << QVariant(HbSlider::IncreaseElement) << QVariant(HbSlider::TrackElement) + << QVariant(HbSlider::DecreaseElement); + modelItem->setContentWidgetData("sliderElements",sliderElements); + modelItem->setContentWidgetData("objectName", "vibrationSlider" + QString::number(profileId)); + modelItem->setContentWidgetData( QString( "minimum" ), 0 ); + modelItem->setContentWidgetData( QString( "maximum" ), 5 ); + modelItem->setContentWidgetData( QString("value"), profileSettings.mKeyTouchScreenVibra ); + QMap< QString, QVariant > iconElements; + iconElements.insert(QString("IncreaseElement") , QVariant(":/icon/hb_vol_slider_increment.svg")); + iconElements.insert(QString("DecreaseElement"), QVariant(":/icon/hb_vol_slider_decrement.svg") ); + modelItem->setContentWidgetData( QString( "elementIcons" ), iconElements ); + + 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); + +} + + + +//////////////////////////////////////////////////// +//general tones +void CpProfileSettingForm::on_general_notificationTones_stateChanged(int state) +{ + mProfileModel->setNotificationTone( EProfileWrapperGeneralId, checkBoxStateToBool( state ) ); +} + +void CpProfileSettingForm::on_general_keysAndScreenToneSlider_ValueChanged( int value ) +{ + mProfileModel->setKeyTouchScreenTone( EProfileWrapperGeneralId, value ); + HbDataFormModelItem *modelItem = profileItem(EProfileWrapperGeneralId,ProfileItemKeyandTouchScreenTones); + if (modelItem) { + modelItem->setContentWidgetData( QString("value"), value ); + setMuteIcon(modelItem, (value == 0) ); + } +} + + +//general vibra +void CpProfileSettingForm::on_general_screenVibra_ValueChanged( int value ) +{ + mProfileModel->setKeyTouchScreenVibra( EProfileWrapperGeneralId, value ); + + HbDataFormModelItem *modelItem = profileItem(EProfileWrapperGeneralId,ProfileItemTouchScreenVibra); + if (modelItem) { + modelItem->setContentWidgetData( QString("value"), value ); + } + +} + +//////////////////////////////////////////////////// +//meeting Tones +void CpProfileSettingForm::on_meeting_notificationTones_stateChanged(int state) +{ + mProfileModel->setNotificationTone( EProfileWrapperMeetingId, checkBoxStateToBool( state ) ); +} + +void CpProfileSettingForm::on_meeting_keysAndScreenToneSlider_ValueChanged( int value ) +{ + mProfileModel->setKeyTouchScreenTone( EProfileWrapperMeetingId, value ); + + HbDataFormModelItem *modelItem = profileItem(EProfileWrapperMeetingId,ProfileItemKeyandTouchScreenTones); + if (modelItem) { + modelItem->setContentWidgetData( QString("value"), value ); + setMuteIcon(modelItem, (value == 0) ); + } +} + +void CpProfileSettingForm::on_meeting_screenVibra_ValueChanged( int value ) +{ + mProfileModel->setKeyTouchScreenVibra( EProfileWrapperMeetingId, value ); + + HbDataFormModelItem *modelItem = profileItem(EProfileWrapperMeetingId,ProfileItemTouchScreenVibra); + if (modelItem) { + modelItem->setContentWidgetData( QString("value"), value ); + } +} + +bool CpProfileSettingForm::checkBoxStateToBool( int state ) +{ + if( state == Qt::Checked ) { + return true; + } else { + 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 >::const_iterator it (mProfileModelItems.begin()); + for(; it != mProfileModelItems.end(); ++it ) { + for (int i = 0; i < sizeof(silenceSensitiveModelItemIds)/sizeof(silenceSensitiveModelItemIds[0]);++i) { + QHash::const_iterator found = it.value().find(silenceSensitiveModelItemIds[i]); + if (found != it.value().end()) { + if (found.key() == CpProfileSettingForm::ProfileItemKeyandTouchScreenTones) { + int currentValue = found.value()->contentWidgetData("value").toInt(); + // change the mute icon when the silence mode is changed + bool isMute = value.toBool() || (currentValue == 0); + setMuteIcon(found.value(), isMute); + } + found.value()->setEnabled(!value.toBool()); + } + } + } + } +} + +HbDataFormModelItem *CpProfileSettingForm::profileItem(int profileId,int profileItemId) +{ + return mProfileModelItems.value(profileId).value(profileItemId); +} + +/*! + * Set the slider icon to mute or unmute + * @param isMute: identified the icon of slider, mute or unmute + * @param profileId: identified which slider should be changed + */ + +void CpProfileSettingForm::setMuteIcon(HbDataFormModelItem *sliderItem, bool isMute) +{ + if (sliderItem == 0) { + return; + } + //VolumeSliderItem will be depreacted, so ignore the assert about it + if (sliderItem->type() != HbDataFormModelItem::SliderItem) { + return; + } + + QMap elements = sliderItem->contentWidgetData("elementIcons").toMap(); + + if (isMute) { + elements.insert(QString("IconElement"), QVariant(":/icon/hb_vol_slider_muted.svg")); + } + else { + elements.insert(QString("IconElement"), QVariant(":/icon/hb_vol_slider_unmuted.svg")); + } + sliderItem->setContentWidgetData( QString( "elementIcons" ), elements ); +} +//End of File