diff -r a5692c68d772 -r 593f946f4fec controlpanelui/src/cpringtoneview/src/cpringtoneview.cpp --- a/controlpanelui/src/cpringtoneview/src/cpringtoneview.cpp Fri Jun 25 17:12:20 2010 +0800 +++ b/controlpanelui/src/cpringtoneview/src/cpringtoneview.cpp Wed Sep 29 10:09:58 2010 +0800 @@ -34,14 +34,14 @@ CpRingToneView::CpRingToneView( QGraphicsItem *parent ): CpBaseSettingView(0, parent), mToneTypeList( new HbListWidget(this) ), - mReq(0) + mReq(0), mProcessing(false) { HbStyleLoader::registerFilePath(":/widgetml/cpdataformlistentryviewitem.css"); HbStyleLoader::registerFilePath(":/widgetml/cpdataformlistentryviewitem_color.css"); HbStyleLoader::registerFilePath(":/widgetml/cpdataformlistentryviewitem.widgetml"); HbDataForm *form = qobject_cast ( widget() ); - form->setHeading("txt_cp_subhead_select_tone_type"); + form->setHeading(hbTrId("txt_cp_subhead_select_tone_type")); HbDataFormModel *model = new HbDataFormModel(); QList< QPair > tonesTypeList; @@ -62,31 +62,43 @@ } CpRingToneView::~CpRingToneView() { - if(mReq) delete mReq; + if (mReq) { + delete mReq; + } } + void CpRingToneView::itemActivated( const QModelIndex &index ) { - int nRow = index.row(); - + //avoid responding to the second or later consecutive click + if (mProcessing) { + return; + } + mProcessing = true; + int nRow = index.row(); switch(nRow) { case 0: //no tone, set default no sound - emit selOK(QString("")); - emit aboutToClose(); - break; - case 1: //tone - launchMediaFetcher( "com.nokia.symbian.IToneFetch", "fetch()" ); - break; - case 2: //music - launchMediaFetcher("com.nokia.symbian.IMusicFetch", "fetch()" ); - break; + emit selOK(QString("")); + emit aboutToClose(); + break; + case 1: { //tone + launchMediaFetcher( "com.nokia.symbian.IToneFetch", "fetch()" ); + break; + } + case 2: { //music + XQRequestInfo requestInfo; + requestInfo.setInfo("WindowTitle", QVariant(hbTrId("txt_cp_title_control_panel"))); + launchMediaFetcher("com.nokia.symbian.IMusicFetch", "fetch()", QList(), requestInfo ); + break; + } case 3: //get more tones default: - break; + break; } } void CpRingToneView::handleOk(const QVariant &result) { - CPFW_LOG( "CpPersonalizationEntryItemData::handleOk" ); + mProcessing = false; + CPFW_LOG( "CpRingToneView::handleOk" ); if (!result.canConvert() || result.toString().length() == 0 ) //error result { return; @@ -97,12 +109,21 @@ } -void CpRingToneView::handleError(int errorCode, const QString& errorMessage) +void CpRingToneView::handleError(int errorCode, const QString &errorMessage) { + mProcessing = false; emit(selError( errorCode, errorMessage )); } -void CpRingToneView::launchMediaFetcher( const QString &strService, const QString &strItface ) +/*! + Launch media fetcher service. + \a strService, the service interface name. + \a srItface, the service operation name. + \a arguments, the request arguments, preserved. + \a info, the request info. +*/ +void CpRingToneView::launchMediaFetcher( const QString &strService, const QString &strItface,\ + const QList &arguments, const XQRequestInfo &info ) { CPFW_LOG("CpRingToneView::launchMediaFetcher, START"); if(mReq) @@ -112,20 +133,23 @@ } //launch media fetcher mReq = mAppMgr.create(strService, strItface, true); + mReq->setSynchronous(false); if (!mReq) { CPFW_LOG("CpRingToneView::launchMediaFetcher, Mediafetcher start failed"); return; } else - { - connect(mReq, SIGNAL( requestOk( const QVariant&)), SLOT( handleOk(const QVariant&)) ); - connect(mReq, SIGNAL( requestError( int,const QString&)), SLOT(handleError(int,const QString&)) ); + { //use QueuedConnection so that requestError will not be emitted when selecting one tone + connect(mReq, SIGNAL(requestOk(QVariant)), SLOT( handleOk(QVariant)), Qt::QueuedConnection); + connect(mReq, SIGNAL(requestError(int, QString)), SLOT(handleError(int, QString))); } - - QList args; - args << QVariant(QString("")); - mReq->setArguments(args); + if (!arguments.isEmpty()) { + mReq->setArguments(arguments); + } + if (info.isValid()) { + mReq->setInfo(info); + } // Make the request if (!mReq->send()) {