--- /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 <QStringList>
+#include <hbdataformmodel.h>
+#include <hbabstractviewitem.h>
+#include <cpitemdatahelper.h>
+#include <cpprofilemodel.h>
+#include <hbslider.h>
+
+#include <QFileInfo>
+#include <QFileIconProvider>
+#include <QAbstractItemModel>
+#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 ), 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<int,HbDataFormModelItem*> 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<QVariant> 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<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()) {
+ 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<QString, QVariant> 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