diff -r e14766a36cdc -r c44f9bb56771 radiohswidget/src/radiohswidget.cpp --- a/radiohswidget/src/radiohswidget.cpp Thu Sep 02 20:26:56 2010 +0300 +++ b/radiohswidget/src/radiohswidget.cpp Fri Sep 17 08:29:29 2010 +0300 @@ -74,9 +74,9 @@ const QString DOCML_OBJECT_NAME_ANIMATION_ICON("animationIcon"); /** Unknown favorite station count. */ -const int FAVORITE_STATION_COUNT_UNDEFINED(-1); -/** One favorite station set. */ -const int FAVORITE_STATION_COUNT_ONE(1); +const int FAVORITE_STATION_COUNT_UNDEFINED(0); +/** Unknown local station count. */ +const int LOCAL_STATION_COUNT_UNDEFINED(0); /** Favorite station count lower boundary including this number. */ const int FAVORITE_STATION_COUNT_LOWER_BOUNDARY(0); /** Favorite station count upper boundary including this number. */ @@ -143,6 +143,7 @@ mAnimationIcon(NULL), mFmRadioState(FmRadio::StateUndefined), mFavoriteStationCount(FAVORITE_STATION_COUNT_UNDEFINED), + mLocalStationCount(LOCAL_STATION_COUNT_UNDEFINED), mCurrentStationIsFavorite(false), mProfileMonitor(NULL), mRadioServiceClient(NULL) @@ -176,17 +177,23 @@ information.toInt() >= FAVORITE_STATION_COUNT_LOWER_BOUNDARY && information.toInt() <= FAVORITE_STATION_COUNT_UPPER_BOUNDARY) { mFavoriteStationCount = information.toInt(); - // If there are favorite stations, enable the next/previous + LOG_FORMAT("mFavoriteStationCount: %d", mFavoriteStationCount); + enableStationButtons(); + } + break; + + case RadioServiceNotification::LocalCount: + LOG("LocalCount"); + if (information.canConvert(QVariant::Int) && + information.toInt() >= FAVORITE_STATION_COUNT_LOWER_BOUNDARY && + information.toInt() <= FAVORITE_STATION_COUNT_UPPER_BOUNDARY) { + mLocalStationCount = information.toInt(); + // If there are local stations, enable the next/previous // buttons. - LOG_FORMAT("mFavoriteStationCount: %d", mFavoriteStationCount); - // Enable or disable buttons only if favoriteCount differs - // from 1. CurrentIsFavorite case handles situation when there - // is only one favorite station. - if (mFavoriteStationCount != FAVORITE_STATION_COUNT_ONE) { - enableStationButtons(); - } - } else { - mFavoriteStationCount = FAVORITE_STATION_COUNT_UNDEFINED; + LOG_FORMAT("mLocalStationCount: %d", mLocalStationCount); + // Enable or disable buttons only if localCount differs + // from 1. + enableStationButtons(); } break; @@ -195,10 +202,6 @@ if (information.canConvert(QVariant::Bool)) { mCurrentStationIsFavorite = information.toBool(); LOG_FORMAT("currentIsFavorite: %d", mCurrentStationIsFavorite); - // If current station is favorite disable next/prev buttons. - // Radio sends this information only when there is only one - // favorite station set. - enableStationButtons(); } break; @@ -316,6 +319,7 @@ mRadioServiceClient->stopMonitoring(); changePowerButtonOn(false); mFavoriteStationCount = FAVORITE_STATION_COUNT_UNDEFINED; + mLocalStationCount = LOCAL_STATION_COUNT_UNDEFINED; mCurrentStationIsFavorite = false; enableStationButtons(); clearRadioInformation(); @@ -329,6 +333,7 @@ mFmRadioState = FmRadio::StateStarting; changePowerButtonOn(true); mFavoriteStationCount = FAVORITE_STATION_COUNT_UNDEFINED; + mLocalStationCount = LOCAL_STATION_COUNT_UNDEFINED; mCurrentStationIsFavorite = false; enableStationButtons(); changeInformationAreaLayout(Animation); @@ -367,6 +372,7 @@ mFmRadioState = FmRadio::StateClosing; changePowerButtonOn(false); mFavoriteStationCount = FAVORITE_STATION_COUNT_UNDEFINED; + mLocalStationCount = LOCAL_STATION_COUNT_UNDEFINED; mCurrentStationIsFavorite = false; enableStationButtons(); clearRadioInformation(); @@ -478,7 +484,12 @@ { LOG_SLOT_CALLER; clearRadioInformation(); - mRadioServiceClient->commandFmRadio(RadioServiceCommand::Previous); + if (mFavoriteStationCount > 1) { + mRadioServiceClient->commandFmRadio(RadioServiceCommand::PreviousFavorite); + } + else { + mRadioServiceClient->commandFmRadio(RadioServiceCommand::Previous); + } } /*! @@ -488,7 +499,12 @@ { LOG_SLOT_CALLER; clearRadioInformation(); - mRadioServiceClient->commandFmRadio(RadioServiceCommand::Next); + if (mFavoriteStationCount > 1) { + mRadioServiceClient->commandFmRadio(RadioServiceCommand::NextFavorite); + } + else { + mRadioServiceClient->commandFmRadio(RadioServiceCommand::Next); + } } @@ -908,18 +924,16 @@ void RadioHsWidget::enableStationButtons() { LEVEL2(LOG_METHOD_ENTER); - LOG_FORMAT("RadioHsWidget::enableStationButtons count: %d", mFavoriteStationCount); + LOG_FORMAT("RadioHsWidget::enableStationButtons count: %d", mLocalStationCount); if (mFmRadioState == FmRadio::StateAntennaNotConnected){ changeButtonToDisabled(Next); changeButtonToDisabled(Previous); } - else if ((mFavoriteStationCount > 1) || (mFavoriteStationCount == 1 - && !mCurrentStationIsFavorite)) { + else if (mLocalStationCount + mFavoriteStationCount > 1) { changeButtonToEnabled(Next); changeButtonToEnabled(Previous); } - else if ((mFavoriteStationCount == 1 && mCurrentStationIsFavorite) - || (mFavoriteStationCount < 1)) { + else { changeButtonToDisabled(Next); changeButtonToDisabled(Previous); }