Revision: 201015
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 03 May 2010 12:31:41 +0300
changeset 16 f54ebcfc1b80
parent 14 63aabac4416d
child 17 2cf3bab7c5c6
child 19 afea38384506
Revision: 201015 Kit: 201018
hswidgetplugin/fmradiohswidgetplugin/fmradiohswidgetplugin.pro
hswidgetplugin/fmradiohswidgetplugin/fmradiohswidgetplugin.xml
hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidgetradioserviceclient.h
hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidgetplugin.s60xml
hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidgetplugin.xml
hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidget.cpp
hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetplugin.cpp
hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetradioserviceclient.cpp
hswidgetplugin/fmradiohswidgetplugininstaller/fmradiohswidgetplugininstaller.cpp
hswidgetplugin/rom/fmradiohswidgetplugin.iby
hswidgetplugin/sis/fmradiohswidgetplugin.pkg
radioapp/bin/fmradio_en_US.qm
radioapp/buildflags.pri
radioapp/bwins/radioenginewrapperu.def
radioapp/bwins/radiouiengineu.def
radioapp/bwins/radiowidgetsu.def
radioapp/commoninc/radio_global.h
radioapp/commoninc/radiologger.h
radioapp/commoninc/radionotificationdata.h
radioapp/commoninc/radioservicedef.h
radioapp/eabi/radioenginewrapperu.def
radioapp/eabi/radiouiengineu.def
radioapp/eabi/radiowidgetsu.def
radioapp/radioapp.pro
radioapp/radioapplication/inc/testwindow_win32.h
radioapp/radioapplication/radioapplication.pro
radioapp/radioapplication/resources/compile_ts.bat
radioapp/radioapplication/resources/fmradio.ts
radioapp/radioapplication/src/main.cpp
radioapp/radioapplication/src/radioapplication.cpp
radioapp/radioapplication/src/testwindow_win32.cpp
radioapp/radioenginewrapper/commoninc/radio_global.h
radioapp/radioenginewrapper/commoninc/radiologger.h
radioapp/radioenginewrapper/commoninc/radiowrapperexport.h
radioapp/radioenginewrapper/commoninc/settings.xml
radioapp/radioenginewrapper/inc/radioenginewrapper.h
radioapp/radioenginewrapper/inc/radioenginewrapper_p.h
radioapp/radioenginewrapper/inc/radioenginewrapper_win32_p.h
radioapp/radioenginewrapper/inc/radioenginewrapperobserver.h
radioapp/radioenginewrapper/inc/radiofrequencyscanninghandler.h
radioapp/radioenginewrapper/inc/radiosettings.h
radioapp/radioenginewrapper/inc/radiowrapperexport.h
radioapp/radioenginewrapper/inc/settings.xml
radioapp/radioenginewrapper/radioenginewrapper.pro
radioapp/radioenginewrapper/src/cradioenginehandler.cpp
radioapp/radioenginewrapper/src/radiocontroleventlistener.cpp
radioapp/radioenginewrapper/src/radioenginewrapper.cpp
radioapp/radioenginewrapper/src/radioenginewrapper_p.cpp
radioapp/radioenginewrapper/src/radioenginewrapper_win32.cpp
radioapp/radioenginewrapper/src/radioenginewrapper_win32_p.cpp
radioapp/radioenginewrapper/src/radioenginewrapperobserver.cpp
radioapp/radioenginewrapper/src/radiofrequencyscanninghandler.cpp
radioapp/radioenginewrapper/src/radiordslistener.cpp
radioapp/radioenginewrapper/src/radiosettings.cpp
radioapp/radiopresetstorage/radiopresetstorage.pro
radioapp/radiopresetstorage/src/radiopresetstorage.cpp
radioapp/radiopresetstorage/tsrc/t_radiopresetstorage.pro
radioapp/radiouiengine/inc/radiohistoryitem.h
radioapp/radiouiengine/inc/radiohistoryitem_p.h
radioapp/radiouiengine/inc/radiohistorymodel.h
radioapp/radiouiengine/inc/radiohistorymodel_p.h
radioapp/radiouiengine/inc/radiolocalization.h
radioapp/radiouiengine/inc/radiomonitorservice.h
radioapp/radiouiengine/inc/radiomonitorservice_win32.h
radioapp/radiouiengine/inc/radioplaylogitem.h
radioapp/radiouiengine/inc/radioplaylogitem_p.h
radioapp/radiouiengine/inc/radioplaylogmodel.h
radioapp/radiouiengine/inc/radioplaylogmodel_p.h
radioapp/radiouiengine/inc/radioscannerengine.h
radioapp/radiouiengine/inc/radioscannerengine_p.h
radioapp/radiouiengine/inc/radioserviceconst.h
radioapp/radiouiengine/inc/radiostation.h
radioapp/radiouiengine/inc/radiostationmodel.h
radioapp/radiouiengine/inc/radiostationmodel_p.h
radioapp/radiouiengine/inc/radiouiengine.h
radioapp/radiouiengine/inc/radiouiengine_p.h
radioapp/radiouiengine/radiouiengine.pro
radioapp/radiouiengine/src/radiocontrolservice.cpp
radioapp/radiouiengine/src/radiohistoryitem.cpp
radioapp/radiouiengine/src/radiohistoryitem_p.cpp
radioapp/radiouiengine/src/radiohistorymodel.cpp
radioapp/radiouiengine/src/radiohistorymodel_p.cpp
radioapp/radiouiengine/src/radiomonitorservice.cpp
radioapp/radiouiengine/src/radiomonitorservice_win32.cpp
radioapp/radiouiengine/src/radioplaylogitem.cpp
radioapp/radiouiengine/src/radioplaylogitem_p.cpp
radioapp/radiouiengine/src/radioplaylogmodel.cpp
radioapp/radiouiengine/src/radioplaylogmodel_p.cpp
radioapp/radiouiengine/src/radioscannerengine.cpp
radioapp/radiouiengine/src/radioscannerengine_p.cpp
radioapp/radiouiengine/src/radiostation.cpp
radioapp/radiouiengine/src/radiostationmodel.cpp
radioapp/radiouiengine/src/radiostationmodel_p.cpp
radioapp/radiouiengine/src/radiouiengine.cpp
radioapp/radiouiengine/src/radiouiengine_p.cpp
radioapp/radiouiengine/tsrc/inc/t_radiostation.h
radioapp/radiouiengine/tsrc/src/t_radiostation.cpp
radioapp/radiouiengine/tsrc/t_radiouiengine.pro
radioapp/radiowidgets/inc/radiobannerlabel.h
radioapp/radiowidgets/inc/radiocontextmenu.h
radioapp/radiowidgets/inc/radiofadinglabel.h
radioapp/radiowidgets/inc/radiofrequencyscanner.h
radioapp/radiowidgets/inc/radiofrequencystrip.h
radioapp/radiowidgets/inc/radiohistoryview.h
radioapp/radiowidgets/inc/radiomainwindow.h
radioapp/radiowidgets/inc/radioplaylogview.h
radioapp/radiowidgets/inc/radiostationcarousel.h
radioapp/radiowidgets/inc/radiostationcontrolwidget.h
radioapp/radiowidgets/inc/radiostationitem.h
radioapp/radiowidgets/inc/radiostationsview.h
radioapp/radiowidgets/inc/radiostripbase.h
radioapp/radiowidgets/inc/radiotuningview.h
radioapp/radiowidgets/inc/radiouiutilities.h
radioapp/radiowidgets/inc/radioviewbase.h
radioapp/radiowidgets/inc/radiowizardview.h
radioapp/radiowidgets/inc/radioxmluiloader.h
radioapp/radiowidgets/radiowidgets.pro
radioapp/radiowidgets/res/fmradioui.qrc
radioapp/radiowidgets/res/images/buttonleft.png
radioapp/radiowidgets/res/images/buttonright.png
radioapp/radiowidgets/res/images/controlwidgetbackground.png
radioapp/radiowidgets/res/images/favoriteiconactive.png
radioapp/radiowidgets/res/images/favoriteiconinactive.png
radioapp/radiowidgets/res/images/identifysongbuttonicon.png
radioapp/radiowidgets/res/images/infowidgetbackground.png
radioapp/radiowidgets/res/images/pri_small_shazam.svg
radioapp/radiowidgets/res/images/pri_small_star.svg
radioapp/radiowidgets/res/images/pri_small_star_inactive.svg
radioapp/radiowidgets/res/images/qtg_fr_lcd.svg
radioapp/radiowidgets/res/images/qtg_fr_lcd_overlay.svg
radioapp/radiowidgets/res/images/qtg_fr_tuner.svg
radioapp/radiowidgets/res/images/qtg_mono_next.svg
radioapp/radiowidgets/res/images/qtg_mono_play_history.svg
radioapp/radiowidgets/res/images/qtg_mono_previous.svg
radioapp/radiowidgets/res/images/qtg_mono_radio_stations.svg
radioapp/radiowidgets/res/images/qtg_mono_speaker.svg
radioapp/radiowidgets/res/images/qtg_mono_speaker_off.svg
radioapp/radiowidgets/res/images/qtg_mono_station_scan.svg
radioapp/radiowidgets/res/images/qtg_mono_tag.svg
radioapp/radiowidgets/res/images/removefavoriteicon.png
radioapp/radiowidgets/res/images/stationsbuttonicon.png
radioapp/radiowidgets/res/images/stripbackground.png
radioapp/radiowidgets/res/images/tagsongbuttonicon.png
radioapp/radiowidgets/res/layout/radiostationcontrolwidget.css
radioapp/radiowidgets/res/layout/radiostationcontrolwidget.widgetml
radioapp/radiowidgets/res/layout/radiostationitem.css
radioapp/radiowidgets/res/layout/radiostationitem.widgetml
radioapp/radiowidgets/src/radiocontextmenu.cpp
radioapp/radiowidgets/src/radiofrequencyitem.cpp
radioapp/radiowidgets/src/radiofrequencyscanner.cpp
radioapp/radiowidgets/src/radiofrequencystrip.cpp
radioapp/radiowidgets/src/radiohistoryview.cpp
radioapp/radiowidgets/src/radiomainwindow.cpp
radioapp/radiowidgets/src/radioplaylogview.cpp
radioapp/radiowidgets/src/radiostationcarousel.cpp
radioapp/radiowidgets/src/radiostationcontrolwidget.cpp
radioapp/radiowidgets/src/radiostationitem.cpp
radioapp/radiowidgets/src/radiostationsview.cpp
radioapp/radiowidgets/src/radiostripbase.cpp
radioapp/radiowidgets/src/radiotuningview.cpp
radioapp/radiowidgets/src/radiouiutilities.cpp
radioapp/radiowidgets/src/radioviewbase.cpp
radioapp/radiowidgets/src/radiowizardview.cpp
radioapp/radiowidgets/src/radioxmluiloader.cpp
radioapp/radiowidgetsplugin/main.cpp
radioapp/radiowidgetsplugin/radiowidgetsplugin.pro
rom/fmradio.iby
--- a/hswidgetplugin/fmradiohswidgetplugin/fmradiohswidgetplugin.pro	Fri Apr 16 14:58:55 2010 +0300
+++ b/hswidgetplugin/fmradiohswidgetplugin/fmradiohswidgetplugin.pro	Mon May 03 12:31:41 2010 +0300
@@ -28,8 +28,9 @@
 SOURCES += ./src/*.cpp
 
 INCLUDEPATH += ./inc
+INCLUDEPATH += ../../radioapp/commoninc
 
-UID = E0022EEE
+UID = 2002E6D6
 
 RESOURCES = resources.qrc
 #exportResources(./resource/$${TARGET}_icon*.png, $$PLUGIN_SUBDIR)
--- a/hswidgetplugin/fmradiohswidgetplugin/fmradiohswidgetplugin.xml	Fri Apr 16 14:58:55 2010 +0300
+++ b/hswidgetplugin/fmradiohswidgetplugin/fmradiohswidgetplugin.xml	Mon May 03 12:31:41 2010 +0300
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <service>
     <name>fmradiohswidgetplugin</name>
-    <filepath>c:/private/20022F35/import/widgetregistry/E0022EEE/fmradiohswidgetplugin.qtplugin</filepath>
+    <filepath>c:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.qtplugin</filepath>
     <description>FM Radio homescreen widget</description>
     <interface>
         <name>com.nokia.IHomeScreenWidget</name>
--- a/hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidgetradioserviceclient.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidgetradioserviceclient.h	Mon May 03 12:31:41 2010 +0300
@@ -32,8 +32,10 @@
 const QString KRadioServiceControlOperation = "command(int)";
 /**  Radio monitor interface name. */
 const QString KRadioServiceMonitorInterfaceName = "IRadioMonitor";
-/**  Radio monitor interface name. */
+/**  Radio monitor operation name. */
 const QString KRadioServiceMonitorOperation = "requestNotifications()";
+/**  Radio refresh operation name. */
+const QString KRadioServiceRefreshOperation = "requestAllData()";
 
 class FmRadioHsWidgetRadioServiceClient : public QObject
 {
@@ -68,6 +70,7 @@
         InformationTypePty
     };
 
+    void init();
 
 signals:
     void radioInformationChanged(int notificationId, QVariant value);
@@ -105,6 +108,8 @@
     
     XQApplicationManager mApplicationManager;
     
+    bool                mDataInitialized;
+
 };
 
 #endif /* FMRADIOHSWIDGETRADIOSERVICECLIENT_H_ */
--- a/hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidgetplugin.s60xml	Fri Apr 16 14:58:55 2010 +0300
+++ b/hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidgetplugin.s60xml	Mon May 03 12:31:41 2010 +0300
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <service>
     <name>fmradiohswidgetplugin</name>
-    <filepath>c:/private/20022F35/import/widgetregistry/E0022EEE/fmradiohswidgetplugin.qtplugin</filepath>
+    <filepath>c:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.qtplugin</filepath>
     <description>FM Radio homescreen widget</description>
     <interface>
         <name>com.nokia.IHomeScreenWidget</name>
--- a/hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidgetplugin.xml	Fri Apr 16 14:58:55 2010 +0300
+++ b/hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidgetplugin.xml	Mon May 03 12:31:41 2010 +0300
@@ -4,7 +4,7 @@
     <filepath>fmradiohswidgetplugin</filepath>
     <description>FM Radio homescreen widget</description>
     <interface>
-        <name>com.nokia.IHomeScreenWidget</name>
+        <name>com.nokia.symbian.IHomeScreenWidget</name>
         <version>1.0</version>
         <description>FM Radio homescreen widget</description>
         <capabilities></capabilities>
--- a/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidget.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidget.cpp	Mon May 03 12:31:41 2010 +0300
@@ -26,6 +26,8 @@
 #include "fmradiohswidgetprocesshandler.h"
 #include "fmradiohswidgetprofilereader.h"
 #include "fmradiohswidgetradioserviceclient.h"
+#include "radioservicedef.h"
+#include "radio_global.h"
 
 /*!
     \ingroup group_fmradiohs_widget
@@ -64,6 +66,8 @@
     load(DOCML_WIDGET);
     
     handleRadioStateChange(QVariant(NotRunning));
+
+    mRadioServiceClient->init();
 }
 
 /*!
@@ -280,27 +284,28 @@
 void FmRadioHsWidget::handleRadioInformationChange(
     int notificationId, QVariant value)
 {
-    QString informationText;
-    if (value.canConvert(QVariant::String)) {
-        informationText = value.toString();
-    } else {
-        return;
-    }
-    
-    switch (notificationId) {
-    /*
-     Name = 0,
-     Genre,
-     RadioText,
-     Homepage,
-     Song
-     */
-    case 0: // Name
-        if (updateRadioInformation(KRadioInformationStationName,
-            informationText)) {
-            radioInformationChanged();
+    switch ( notificationId ) {
+
+        case RadioServiceNotification::FavoriteCount:
+            break;
+
+        case RadioServiceNotification::Frequency:
+        {
+            const uint frequency = value.toUInt();
+            QString freqString;
+            freqString.sprintf( "%.1f", qreal( frequency ) / KFrequencyMultiplier );
+            if (updateRadioInformation( KRadioInformationFrequency, freqString )) {
+                radioInformationChanged();
+            }
         }
         break;
+
+        case RadioServiceNotification::Name:
+            if (updateRadioInformation( KRadioInformationStationName, value.toString() )) {
+                radioInformationChanged();
+            }
+        break;
+
 /*    case FmRadioHsWidgetRadioServiceClient::InformationTypeCallSign:
         if (updateRadioInformation(KRadioInformationCallSign, informationText)) {
 
@@ -312,22 +317,32 @@
 
         }
         break;
- */   case 2: // RadioText
-        if (updateRadioInformation(KRadioInformationRt, informationText)) {
-            radioInformationChanged();
-        }
+        */
+        case RadioServiceNotification::RadioText:
+            if (updateRadioInformation( KRadioInformationRt, value.toString() )) {
+                radioInformationChanged();
+            }
         break;
+
 /*    case FmRadioHsWidgetRadioServiceClient::InformationTypeDynamicPsName:
         if (updateRadioInformation(KRadioInformationDynamicPsName,
             informationText)) {
 
         }
         break;
-*/    case 1: // Genre
-        if (updateRadioInformation(KRadioInformationPty, informationText)) {
-            radioInformationChanged();
-        }
+        */
+        case RadioServiceNotification::Genre:
+            if (updateRadioInformation( KRadioInformationPty, value.toString() )) {
+                radioInformationChanged();
+            }
         break;
+
+        case RadioServiceNotification::HomePage:
+        break;
+
+        case RadioServiceNotification::Song:
+        break;
+
     default:
         break;
     }
--- a/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetplugin.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetplugin.cpp	Mon May 03 12:31:41 2010 +0300
@@ -34,7 +34,7 @@
     Q_UNUSED(context);
     Q_UNUSED(session);
 
-    if (descriptor.interfaceName() == QLatin1String("com.nokia.IHomeScreenWidget")) {
+    if (descriptor.interfaceName() == QLatin1String("com.nokia.symbian.IHomeScreenWidget")) {
         return new FmRadioHsWidget();
     } else {
         return 0;
--- a/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetradioserviceclient.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetradioserviceclient.cpp	Mon May 03 12:31:41 2010 +0300
@@ -21,14 +21,17 @@
 // User includes
 #include "fmradiohswidgetradioserviceclient.h"
 #include "fmradiohswidget.h"
+#include "radioservicedef.h"
+#include "radionotificationdata.h"
 
 /*!
  Constructor
  */
 FmRadioHsWidgetRadioServiceClient::FmRadioHsWidgetRadioServiceClient(QObject *parent) :
     QObject(parent),
-    mRadioInformationServiceRequest(0),
-    mRadioControlServiceRequest(0)
+    mRadioInformationServiceRequest( 0 ),
+    mRadioControlServiceRequest(0),
+    mDataInitialized( false )
 {
 }
 
@@ -41,15 +44,25 @@
 }
 
 /*!
+ * Initialize all data
+ */
+void FmRadioHsWidgetRadioServiceClient::init()
+{
+    const bool radioIsRunning = false; //TODO: Find out if radio is running. Use P&S key for now
+    if ( radioIsRunning ) {
+        startMonitoring();
+    }
+}
+
+
+/*!
  Starting of FM Radio.
- 
- /param startupState 
+
+ /param startupState
  */
 void FmRadioHsWidgetRadioServiceClient::doStartFmRadio(FmRadioStartupState startupState)
 {
-    if (!mRadioControlServiceRequest) {
-        createControlServiceRequest();
-    }
+    createControlServiceRequest();
 
     int commandId = 0;
 
@@ -81,9 +94,7 @@
  */
 void FmRadioHsWidgetRadioServiceClient::doBringFmRadioToForeground(bool toForeground)
 {
-    if (!mRadioControlServiceRequest) {
-        createControlServiceRequest();
-    }
+    createControlServiceRequest();
     QVariant commandArgument;
     if (toForeground) {
         // TODO: Include header and remove comment.
@@ -144,9 +155,7 @@
     /*req = mApplicationManager.create(KRadioServiceMonitorInterfaceName, KRadioServiceMonitorOperation,
         false);*/
     
-    if (!mRadioInformationServiceRequest) {
-        createMonitorServiceRequest();
-    }
+    createMonitorServiceRequest();
     bool res = mRadioInformationServiceRequest->send();
 
     /*if (req) {*/
@@ -196,8 +205,7 @@
 void FmRadioHsWidgetRadioServiceClient::doChangeFmRadioChannel(
     FmRadioChannelChangeCommand command)
 {
-    if (!mRadioControlServiceRequest) {
-        createControlServiceRequest();    }
+    createControlServiceRequest();
     int commandId;
     
     switch (command) {
@@ -238,8 +246,7 @@
 void FmRadioHsWidgetRadioServiceClient::doControlFmRadioAudio(
     FmRadioAudioControlCommand command)
 {
-    if (!mRadioControlServiceRequest) {
-        createControlServiceRequest();    }
+    createControlServiceRequest();
 
     int commandId;
 
@@ -282,20 +289,18 @@
  */
 void FmRadioHsWidgetRadioServiceClient::handleFmRadioInformationChange(const QVariant& value)
 {
+    if ( !mDataInitialized ) {
+        mRadioInformationServiceRequest->setMessage( KRadioServiceMonitorOperation );
+        mDataInitialized = true;
+    }
+
     startMonitoring();
-    if (value.isValid() && value.canConvert(QVariant::String)) {
-        QString str = value.toString();
-        // Extract the number from the beginning of the string.
-        int i = str.indexOf(" ");
-        QString notificationIdStr = str.left(i);
-        bool conversionOk;
-        int notificationId = notificationIdStr.toInt(&conversionOk);
-        // Rest is the actual string.
-        QString msg = str.mid(i);
-        
-        // If the type was converted ok
-        if (conversionOk) {
-            emit radioInformationChanged(notificationId, msg);
+    if ( value.isValid() && value.canConvert( QVariant::List ) ) {
+        QVariantList notificationList = value.toList();
+        foreach ( const QVariant& variant, notificationList ) {
+            RadioNotificationData notification = variant.value<RadioNotificationData>();
+            const int notificationId = notification.mType;
+            emit radioInformationChanged( notificationId, notification.mData );
         }
     }
 }
@@ -450,6 +455,7 @@
         QString fullServiceName = KRadioServiceName + "." + KRadioServiceControlInterfaceName;
         mRadioControlServiceRequest = new XQServiceRequest(fullServiceName,
             KRadioServiceControlOperation, false);
+
         bool a = connect(mRadioControlServiceRequest, SIGNAL(requestCompleted(QVariant)), this,
             SLOT(requestCompleted(QVariant)));
         bool b = connect(mRadioControlServiceRequest, SIGNAL(requestError(int)), this,
@@ -463,13 +469,13 @@
 void FmRadioHsWidgetRadioServiceClient::createMonitorServiceRequest()
 {
     if (!mRadioInformationServiceRequest) {
+        QString operation = mDataInitialized ? KRadioServiceMonitorOperation : KRadioServiceRefreshOperation;
         QString fullServiceName = KRadioServiceName + "." + KRadioServiceMonitorInterfaceName;
-        mRadioInformationServiceRequest = new XQServiceRequest(fullServiceName,
-            KRadioServiceMonitorOperation, false);
-        bool a = connect(mRadioInformationServiceRequest, SIGNAL(requestCompleted(QVariant)), this,
-            SLOT(handleFmRadioInformationChange(QVariant)));
-        bool b = connect(mRadioInformationServiceRequest, SIGNAL(requestError(int)), this,
-            SLOT(handleRequestError(int)));
+        mRadioInformationServiceRequest = new XQServiceRequest(fullServiceName, operation, false);
+        bool a = connect( mRadioInformationServiceRequest, SIGNAL(requestCompleted(QVariant)),
+                          this,                            SLOT(handleFmRadioInformationChange(QVariant)));
+        bool b = connect( mRadioInformationServiceRequest, SIGNAL(requestError(int)),
+                         this,                             SLOT(handleRequestError(int)));
     }
 }
 
@@ -478,9 +484,7 @@
  */
 void FmRadioHsWidgetRadioServiceClient::startMonitoring()
 {
-    if (!mRadioInformationServiceRequest) {
-        createMonitorServiceRequest();
-    }
+    createMonitorServiceRequest();
     doGetFmRadioInformation();
 }
 
@@ -489,12 +493,6 @@
  */
 void FmRadioHsWidgetRadioServiceClient::stopMonitoring()
 {
-    if (mRadioInformationServiceRequest) {
-        delete mRadioInformationServiceRequest;
-        mRadioInformationServiceRequest = NULL;
-    }
-    if (mRadioControlServiceRequest) {
-        delete mRadioControlServiceRequest;
-        mRadioControlServiceRequest = NULL;
-    }
+    delete mRadioInformationServiceRequest;
+    delete mRadioControlServiceRequest;
 }
--- a/hswidgetplugin/fmradiohswidgetplugininstaller/fmradiohswidgetplugininstaller.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/hswidgetplugin/fmradiohswidgetplugininstaller/fmradiohswidgetplugininstaller.cpp	Mon May 03 12:31:41 2010 +0300
@@ -21,7 +21,7 @@
 
 QTM_USE_NAMESPACE
 
-const QString KXml = "c:/private/20022F35/import/widgetregistry/E0022EEE/fmradiohswidgetplugin.xml";
+const QString KXml = "c:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.xml";
 
 int main(int argc, char *argv[])
 {
--- a/hswidgetplugin/rom/fmradiohswidgetplugin.iby	Fri Apr 16 14:58:55 2010 +0300
+++ b/hswidgetplugin/rom/fmradiohswidgetplugin.iby	Mon May 03 12:31:41 2010 +0300
@@ -19,9 +19,9 @@
 #define __FMRADIOHSWIDGETPLUGIN_IBY__
 
 file=ABI_DIR\BUILD_DIR\fmradiohswidgetplugin.dll                                            SHARED_LIB_DIR\fmradiohswidgetplugin.dll
-data=ZPRIVATE\20022f35\import\widgetregistry\E0022EEE\fmradiohswidgetplugin.qtplugin        private\20022f35\import\widgetregistry\E0022EEE\fmradiohswidgetplugin.qtplugin
-data=ZPRIVATE\20022f35\import\widgetregistry\E0022EEE\fmradiohswidgetplugin.manifest        private\20022f35\import\widgetregistry\E0022EEE\fmradiohswidgetplugin.manifest
-data=ZPRIVATE\20022f35\import\widgetregistry\E0022EEE\fmradiohswidgetplugin.xml             private\20022f35\import\widgetregistry\E0022EEE\fmradiohswidgetplugin.xml
+data=ZPRIVATE\20022f35\import\widgetregistry\2002E6D6\fmradiohswidgetplugin.qtplugin        private\20022f35\import\widgetregistry\2002E6D6\fmradiohswidgetplugin.qtplugin
+data=ZPRIVATE\20022f35\import\widgetregistry\2002E6D6\fmradiohswidgetplugin.manifest        private\20022f35\import\widgetregistry\2002E6D6\fmradiohswidgetplugin.manifest
+data=ZPRIVATE\20022f35\import\widgetregistry\2002E6D6\fmradiohswidgetplugin.xml             private\20022f35\import\widgetregistry\2002E6D6\fmradiohswidgetplugin.xml
 
 
 #endif //__FMRADIOHSWIDGETPLUGIN_IBY__
--- a/hswidgetplugin/sis/fmradiohswidgetplugin.pkg	Fri Apr 16 14:58:55 2010 +0300
+++ b/hswidgetplugin/sis/fmradiohswidgetplugin.pkg	Mon May 03 12:31:41 2010 +0300
@@ -18,7 +18,7 @@
 &EN
 
 ; SIS header: name, uid, version
-#{"fmradiohswidgetplugin"},(0xE0022EEE),1,0,0
+#{"fmradiohswidgetplugin"},(0x2002E6D6),1,0,0
 
 ; Localised Vendor name
 %{"Vendor"}
@@ -34,11 +34,11 @@
 [0x1028315F],0,0,0,{"S60ProductID"}
  
 "/epoc32/release/armv5/urel/fmradiohswidgetplugin.dll"                                           - "c:/sys/bin/fmradiohswidgetplugin.dll"
-"../fmradiohswidgetplugin/qmakepluginstubs/fmradiohswidgetplugin.qtplugin"  - "c:/private/20022F35/import/widgetregistry/E0022EEE/fmradiohswidgetplugin.qtplugin"
-"../fmradiohswidgetplugin/resource/fmradiohswidgetplugin.manifest"  - "c:/private/20022F35/import/widgetregistry/E0022EEE/fmradiohswidgetplugin.manifest"
-"../fmradiohswidgetplugin/resource/fmradiohswidgetplugin.s60xml"       - "c:/private/20022F35/import/widgetregistry/E0022EEE/fmradiohswidgetplugin.xml"
-;"/epoc32/data/z/private/20022F35/import/widgetregistry/E0022EEE/fmradiohswidgetplugin.s60xml"       - "c:/private/20022F35/import/widgetregistry/E0022EEE/fmradiohswidgetplugin.xml"
-;"../fmradiohswidgetplugin/resource/fmradiohswidgetplugin.xml"       - "c:/private/20022F35/import/widgetregistry/E0022EEE/fmradiohswidgetplugin.xml"
-;"../fmradiohswidgetplugin/resource/fmradiohswidgetplugin_icon.png"    - "!:\private\20022F35\import\widgetregistry\E0022EEE\fmradiohswidgetplugin_icon.png"
+"../fmradiohswidgetplugin/qmakepluginstubs/fmradiohswidgetplugin.qtplugin"  - "c:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.qtplugin"
+"../fmradiohswidgetplugin/resource/fmradiohswidgetplugin.manifest"  - "c:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.manifest"
+"../fmradiohswidgetplugin/resource/fmradiohswidgetplugin.s60xml"       - "c:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.xml"
+;"/epoc32/data/z/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.s60xml"       - "c:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.xml"
+;"../fmradiohswidgetplugin/resource/fmradiohswidgetplugin.xml"       - "c:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.xml"
+;"../fmradiohswidgetplugin/resource/fmradiohswidgetplugin_icon.png"    - "!:\private\20022F35\import\widgetregistry\2002E6D6\fmradiohswidgetplugin_icon.png"
 
 "/epoc32/release/armv5/urel/fmradiohswidgetplugininstaller.exe"                                  - "c:/sys/bin/fmradiohswidgetplugininstaller.exe", FR, RB, RW
Binary file radioapp/bin/fmradio_en_US.qm has changed
--- a/radioapp/buildflags.pri	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/buildflags.pri	Mon May 03 12:31:41 2010 +0300
@@ -26,12 +26,6 @@
 # Reads the layout docml files and images from e:/radiotest/ folder
 # RADIOFLAGS += USE_LAYOUT_FROM_E_DRIVE
 
-# Usage of the Mobile Extensions APIs
-# RADIOFLAGS += USE_MOBILE_EXTENSIONS_API
-
-# Usage of stubbed radio engine
-# RADIOFLAGS += USE_STUBBED_RADIOENGINE
-
 # Flag to use dummy radio data read from XML file
 # RADIOFLAGS += USE_DUMMY_RADIO_DATA
 
@@ -39,7 +33,7 @@
 # RADIOFLAGS += SHOW_CALLSIGN_IN_ANY_REGION
 
 # Build flag to enable usage of the new preset utility
-# RADIOFLAGS += COMPILE_WITH_NEW_PRESET_UTILITY
+RADIOFLAGS += COMPILE_WITH_NEW_PRESET_UTILITY
 
 # Build flag to add EXPORTUNFROZEN to the pro file
 # RADIOFLAGS += USE_UNFROZEN_EXPORTS
@@ -95,24 +89,23 @@
 CONFIG += $$RADIOFLAGS
 CONFIG += $$LOGGING_FLAGS
 
-win32:DEFINES += BUILD_WIN32
-
-# Mobile extension headers are in a special path
-MOBILE_EXTENSIONS_PATH = /mobile_extensions/include
-!exists($$MOBILE_EXTENSIONS_PATH) {
-    CONFIG -= USE_MOBILE_EXTENSIONS_API
-    DEFINES -= USE_MOBILE_EXTENSIONS_API
-}
-USE_MOBILE_EXTENSIONS_API {
-    INCLUDEPATH += $$MOBILE_EXTENSIONS_PATH
+symbian: {
+    DEFINES += SYMBIAN
+    TARGET.EPOCALLOWDLLDATA = 1
+    TARGET.VID              = VID_DEFAULT
+    TARGET.CAPABILITY       = CAP_GENERAL_DLL
 }
 
-USE_STUBBED_RADIOENGINE {
-    INCLUDEPATH += /epoc32/include/radioengine_stub
+win32: {
+    DEFINES     += BUILD_WIN32
+    DESTDIR     = ../bin
+    LIBS        += -L../bin
+    INCLUDEPATH += ../radioenginewrapper/inc
 }
 
 USE_UNFROZEN_EXPORTS {
-    symbian:MMP_RULES +=  "exportunfrozen"
+    symbian:MMP_RULES   +=  "exportunfrozen"
+    symbian:DEF_FILE    = not_used.def
 }
 
 # $$_PRO_FILE_PWD_ points to the directory of the pro file
--- a/radioapp/bwins/radioenginewrapperu.def	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/bwins/radioenginewrapperu.def	Mon May 03 12:31:41 2010 +0300
@@ -1,39 +1,50 @@
 EXPORTS
-	?frequencyStepSize@RadioEngineWrapper@@QBEIXZ @ 1 NONAME ; unsigned int RadioEngineWrapper::frequencyStepSize(void) const
-	?region@RadioEngineWrapper@@QBE?AW4Region@RadioRegion@@XZ @ 2 NONAME ; enum RadioRegion::Region RadioEngineWrapper::region(void) const
-	??0MethodLogger@@QAE@PBD0@Z @ 3 NONAME ; MethodLogger::MethodLogger(char const *, char const *)
+	?skipPrevious@RadioEngineWrapperObserver@@UAEXXZ @ 1 NONAME ; void RadioEngineWrapperObserver::skipPrevious(void)
+	?volumeChanged@RadioEngineWrapperObserver@@UAEXH@Z @ 2 NONAME ; void RadioEngineWrapperObserver::volumeChanged(int)
+	?region@RadioEngineWrapper@@QBE?AW4Region@RadioRegion@@XZ @ 3 NONAME ; enum RadioRegion::Region RadioEngineWrapper::region(void) const
 	?tuneFrequency@RadioEngineWrapper@@QAEXIH@Z @ 4 NONAME ; void RadioEngineWrapper::tuneFrequency(unsigned int, int)
 	?initCombinedLogger@RadioLogger@@SAXXZ @ 5 NONAME ; void RadioLogger::initCombinedLogger(void)
 	??0RadioSettings@@AAE@XZ @ 6 NONAME ; RadioSettings::RadioSettings(void)
-	?d_func@RadioSettings@@ABEPBVRadioSettingsPrivate@@XZ @ 7 NONAME ; class RadioSettingsPrivate const * RadioSettings::d_func(void) const
-	?logMsg@RadioLogger@@SAXPBDW4Mode@1@@Z @ 8 NONAME ; void RadioLogger::logMsg(char const *, enum RadioLogger::Mode)
-	?isRadioOn@RadioEngineWrapper@@QBE_NXZ @ 9 NONAME ; bool RadioEngineWrapper::isRadioOn(void) const
-	?isMuted@RadioEngineWrapper@@QBE_NXZ @ 10 NONAME ; bool RadioEngineWrapper::isMuted(void) const
-	?scanFrequencyBand@RadioEngineWrapper@@QAEXXZ @ 11 NONAME ; void RadioEngineWrapper::scanFrequencyBand(void)
-	?isUsingLoudspeaker@RadioEngineWrapper@@QBE_NXZ @ 12 NONAME ; bool RadioEngineWrapper::isUsingLoudspeaker(void) const
-	?currentFrequency@RadioEngineWrapper@@QBEIXZ @ 13 NONAME ; unsigned int RadioEngineWrapper::currentFrequency(void) const
-	?isScanning@RadioEngineWrapper@@QBE_NXZ @ 14 NONAME ; bool RadioEngineWrapper::isScanning(void) const
-	?cancelScanFrequencyBand@RadioEngineWrapper@@QAEXXZ @ 15 NONAME ; void RadioEngineWrapper::cancelScanFrequencyBand(void)
-	?isAntennaAttached@RadioEngineWrapper@@QBE_NXZ @ 16 NONAME ; bool RadioEngineWrapper::isAntennaAttached(void) const
-	?isEngineConstructed@RadioEngineWrapper@@QAE_NXZ @ 17 NONAME ; bool RadioEngineWrapper::isEngineConstructed(void)
-	?toggleAudioRoute@RadioEngineWrapper@@QAEXXZ @ 18 NONAME ; void RadioEngineWrapper::toggleAudioRoute(void)
-	?d_func@RadioSettings@@AAEPAVRadioSettingsPrivate@@XZ @ 19 NONAME ; class RadioSettingsPrivate * RadioSettings::d_func(void)
-	?setVolume@RadioEngineWrapper@@QAEXH@Z @ 20 NONAME ; void RadioEngineWrapper::setVolume(int)
-	?d_func@RadioEngineWrapper@@AAEPAVRadioEngineWrapperPrivate@@XZ @ 21 NONAME ; class RadioEngineWrapperPrivate * RadioEngineWrapper::d_func(void)
-	?toggleShowFavorites@RadioSettings@@QAE_NXZ @ 22 NONAME ; bool RadioSettings::toggleShowFavorites(void)
-	?toggleMute@RadioEngineWrapper@@QAEXXZ @ 23 NONAME ; void RadioEngineWrapper::toggleMute(void)
-	?startSeeking@RadioEngineWrapper@@QAEXW4Direction@Seeking@@@Z @ 24 NONAME ; void RadioEngineWrapper::startSeeking(enum Seeking::Direction)
-	?showFavorites@RadioSettings@@QBE_NXZ @ 25 NONAME ; bool RadioSettings::showFavorites(void) const
-	?d_func@RadioEngineWrapper@@ABEPBVRadioEngineWrapperPrivate@@XZ @ 26 NONAME ; class RadioEngineWrapperPrivate const * RadioEngineWrapper::d_func(void) const
-	?isFrequencyValid@RadioEngineWrapper@@QAE_NI@Z @ 27 NONAME ; bool RadioEngineWrapper::isFrequencyValid(unsigned int)
-	?isFirstTimeStart@RadioSettings@@QAE_NXZ @ 28 NONAME ; bool RadioSettings::isFirstTimeStart(void)
-	?minFrequency@RadioEngineWrapper@@QBEIXZ @ 29 NONAME ; unsigned int RadioEngineWrapper::minFrequency(void) const
-	?tuneWithDelay@RadioEngineWrapper@@QAEXIH@Z @ 30 NONAME ; void RadioEngineWrapper::tuneWithDelay(unsigned int, int)
-	?setShowFavorites@RadioSettings@@QAEX_N@Z @ 31 NONAME ; void RadioSettings::setShowFavorites(bool)
-	?releaseCombinedLogger@RadioLogger@@SAXXZ @ 32 NONAME ; void RadioLogger::releaseCombinedLogger(void)
-	??1RadioEngineWrapper@@QAE@XZ @ 33 NONAME ; RadioEngineWrapper::~RadioEngineWrapper(void)
-	??1MethodLogger@@QAE@XZ @ 34 NONAME ; MethodLogger::~MethodLogger(void)
-	?settings@RadioEngineWrapper@@QAEAAVRadioSettings@@XZ @ 35 NONAME ; class RadioSettings & RadioEngineWrapper::settings(void)
-	?maxFrequency@RadioEngineWrapper@@QBEIXZ @ 36 NONAME ; unsigned int RadioEngineWrapper::maxFrequency(void) const
-	??0RadioEngineWrapper@@QAE@AAVRadioStationHandlerIf@@AAVRadioEngineWrapperObserver@@@Z @ 37 NONAME ; RadioEngineWrapper::RadioEngineWrapper(class RadioStationHandlerIf &, class RadioEngineWrapperObserver &)
+	?removeObserver@RadioEngineWrapper@@QAEXPAVRadioEngineWrapperObserver@@@Z @ 7 NONAME ; void RadioEngineWrapper::removeObserver(class RadioEngineWrapperObserver *)
+	?startSeeking@RadioEngineWrapper@@QAEXW4Direction@Seeking@@H@Z @ 8 NONAME ; void RadioEngineWrapper::startSeeking(enum Seeking::Direction, int)
+	?d_func@RadioSettings@@ABEPBVRadioSettingsPrivate@@XZ @ 9 NONAME ; class RadioSettingsPrivate const * RadioSettings::d_func(void) const
+	?isRadioOn@RadioEngineWrapper@@QBE_NXZ @ 10 NONAME ; bool RadioEngineWrapper::isRadioOn(void) const
+	?addObserver@RadioEngineWrapper@@QAEXPAVRadioEngineWrapperObserver@@@Z @ 11 NONAME ; void RadioEngineWrapper::addObserver(class RadioEngineWrapperObserver *)
+	?isAntennaAttached@RadioEngineWrapper@@QBE_NXZ @ 12 NONAME ; bool RadioEngineWrapper::isAntennaAttached(void) const
+	?isEngineConstructed@RadioEngineWrapper@@QAE_NXZ @ 13 NONAME ; bool RadioEngineWrapper::isEngineConstructed(void)
+	?toggleAudioRoute@RadioEngineWrapper@@QAEXXZ @ 14 NONAME ; void RadioEngineWrapper::toggleAudioRoute(void)
+	?setVolume@RadioEngineWrapper@@QAEXH@Z @ 15 NONAME ; void RadioEngineWrapper::setVolume(int)
+	??0RadioEngineWrapper@@QAE@AAVRadioStationHandlerIf@@@Z @ 16 NONAME ; RadioEngineWrapper::RadioEngineWrapper(class RadioStationHandlerIf &)
+	?cancelSeeking@RadioEngineWrapper@@QAEXXZ @ 17 NONAME ; void RadioEngineWrapper::cancelSeeking(void)
+	?d_func@RadioEngineWrapper@@AAEPAVRadioEngineWrapperPrivate@@XZ @ 18 NONAME ; class RadioEngineWrapperPrivate * RadioEngineWrapper::d_func(void)
+	?toggleShowFavorites@RadioSettings@@QAE_NXZ @ 19 NONAME ; bool RadioSettings::toggleShowFavorites(void)
+	?toggleMute@RadioEngineWrapper@@QAEXXZ @ 20 NONAME ; void RadioEngineWrapper::toggleMute(void)
+	?d_func@RadioEngineWrapper@@ABEPBVRadioEngineWrapperPrivate@@XZ @ 21 NONAME ; class RadioEngineWrapperPrivate const * RadioEngineWrapper::d_func(void) const
+	??1RadioSettings@@QAE@XZ @ 22 NONAME ; RadioSettings::~RadioSettings(void)
+	?releaseCombinedLogger@RadioLogger@@SAXXZ @ 23 NONAME ; void RadioLogger::releaseCombinedLogger(void)
+	??1RadioEngineWrapper@@QAE@XZ @ 24 NONAME ; RadioEngineWrapper::~RadioEngineWrapper(void)
+	?radioStatusChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 25 NONAME ; void RadioEngineWrapperObserver::radioStatusChanged(bool)
+	?frequencyStepSize@RadioEngineWrapper@@QBEIXZ @ 26 NONAME ; unsigned int RadioEngineWrapper::frequencyStepSize(void) const
+	??0MethodLogger@@QAE@PBD0@Z @ 27 NONAME ; MethodLogger::MethodLogger(char const *, char const *)
+	??_ERadioSettings@@QAE@I@Z @ 28 NONAME ABSENT ; RadioSettings::~RadioSettings(unsigned int)
+	?logMsg@RadioLogger@@SAXPBDW4Mode@1@@Z @ 29 NONAME ; void RadioLogger::logMsg(char const *, enum RadioLogger::Mode)
+	?audioRouteChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 30 NONAME ; void RadioEngineWrapperObserver::audioRouteChanged(bool)
+	?isMuted@RadioEngineWrapper@@QBE_NXZ @ 31 NONAME ; bool RadioEngineWrapper::isMuted(void) const
+	?isUsingLoudspeaker@RadioEngineWrapper@@QBE_NXZ @ 32 NONAME ; bool RadioEngineWrapper::isUsingLoudspeaker(void) const
+	?currentFrequency@RadioEngineWrapper@@QBEIXZ @ 33 NONAME ; unsigned int RadioEngineWrapper::currentFrequency(void) const
+	?skipNext@RadioEngineWrapperObserver@@UAEXXZ @ 34 NONAME ; void RadioEngineWrapperObserver::skipNext(void)
+	?d_func@RadioSettings@@AAEPAVRadioSettingsPrivate@@XZ @ 35 NONAME ; class RadioSettingsPrivate * RadioSettings::d_func(void)
+	?showFavorites@RadioSettings@@QBE_NXZ @ 36 NONAME ; bool RadioSettings::showFavorites(void) const
+	?muteChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 37 NONAME ; void RadioEngineWrapperObserver::muteChanged(bool)
+	?isFirstTimeStart@RadioSettings@@QAE_NXZ @ 38 NONAME ; bool RadioSettings::isFirstTimeStart(void)
+	?isFrequencyValid@RadioEngineWrapper@@QAE_NI@Z @ 39 NONAME ; bool RadioEngineWrapper::isFrequencyValid(unsigned int)
+	?minFrequency@RadioEngineWrapper@@QBEIXZ @ 40 NONAME ; unsigned int RadioEngineWrapper::minFrequency(void) const
+	?rdsAvailabilityChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 41 NONAME ; void RadioEngineWrapperObserver::rdsAvailabilityChanged(bool)
+	?tunedToFrequency@RadioEngineWrapperObserver@@UAEXIH@Z @ 42 NONAME ; void RadioEngineWrapperObserver::tunedToFrequency(unsigned int, int)
+	?tuneWithDelay@RadioEngineWrapper@@QAEXIH@Z @ 43 NONAME ; void RadioEngineWrapper::tuneWithDelay(unsigned int, int)
+	?setShowFavorites@RadioSettings@@QAEX_N@Z @ 44 NONAME ; void RadioSettings::setShowFavorites(bool)
+	??1MethodLogger@@QAE@XZ @ 45 NONAME ; MethodLogger::~MethodLogger(void)
+	?antennaStatusChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 46 NONAME ; void RadioEngineWrapperObserver::antennaStatusChanged(bool)
+	?settings@RadioEngineWrapper@@QAEAAVRadioSettings@@XZ @ 47 NONAME ; class RadioSettings & RadioEngineWrapper::settings(void)
+	?maxFrequency@RadioEngineWrapper@@QBEIXZ @ 48 NONAME ; unsigned int RadioEngineWrapper::maxFrequency(void) const
 
--- a/radioapp/bwins/radiouiengineu.def	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/bwins/radiouiengineu.def	Mon May 03 12:31:41 2010 +0300
@@ -1,240 +1,256 @@
 EXPORTS
-	?detach@RadioPlayLogItem@@QAEXXZ @ 1 NONAME ; void RadioPlayLogItem::detach(void)
-	?tr@RadioUiEngine@@SA?AVQString@@PBD0@Z @ 2 NONAME ; class QString RadioUiEngine::tr(char const *, char const *)
+	?tr@RadioUiEngine@@SA?AVQString@@PBD0@Z @ 1 NONAME ; class QString RadioUiEngine::tr(char const *, char const *)
+	?setFrequency@RadioHistoryItem@@QAEXI@Z @ 2 NONAME ; void RadioHistoryItem::setFrequency(unsigned int)
 	?isOfflineProfile@RadioUiEngine@@SA_NXZ @ 3 NONAME ; bool RadioUiEngine::isOfflineProfile(void)
 	?currentStation@RadioStationModel@@QBEABVRadioStation@@XZ @ 4 NONAME ; class RadioStation const & RadioStationModel::currentStation(void) const
-	?qt_metacast@RadioUiEngine@@UAEPAXPBD@Z @ 5 NONAME ; void * RadioUiEngine::qt_metacast(char const *)
-	?parseFrequency@RadioUiEngine@@SA?AVQString@@I@Z @ 6 NONAME ; class QString RadioUiEngine::parseFrequency(unsigned int)
-	?setStation@RadioPlayLogItem@@QAEXABVQString@@@Z @ 7 NONAME ; void RadioPlayLogItem::setStation(class QString const &)
-	?d_func@RadioPlayLogModel@@ABEPBVRadioPlayLogModelPrivate@@XZ @ 8 NONAME ; class RadioPlayLogModelPrivate const * RadioPlayLogModel::d_func(void) const
-	?index@RadioStationFilterModel@@UBE?AVQModelIndex@@HHABV2@@Z @ 9 NONAME ; class QModelIndex RadioStationFilterModel::index(int, int, class QModelIndex const &) const
-	?parseFrequency@RadioStation@@SA?AVQString@@I@Z @ 10 NONAME ; class QString RadioStation::parseFrequency(unsigned int)
-	??0RadioStation@@QAE@ABV0@@Z @ 11 NONAME ; RadioStation::RadioStation(class RadioStation const &)
-	?region@RadioUiEngine@@QBE?AW4Region@RadioRegion@@XZ @ 12 NONAME ; enum RadioRegion::Region RadioUiEngine::region(void) const
-	?frequency@RadioStation@@QBEIXZ @ 13 NONAME ; unsigned int RadioStation::frequency(void) const
-	?skipPrevious@RadioUiEngine@@QAEXXZ @ 14 NONAME ; void RadioUiEngine::skipPrevious(void)
-	?setFavoriteByFrequency@RadioStationModel@@QAEXI_N@Z @ 15 NONAME ; void RadioStationModel::setFavoriteByFrequency(unsigned int, bool)
-	?findFrequency@RadioStationModel@@QAE_NIAAVRadioStation@@@Z @ 16 NONAME ; bool RadioStationModel::findFrequency(unsigned int, class RadioStation &)
-	??4RadioPlayLogItem@@QAEAAV0@ABV0@@Z @ 17 NONAME ; class RadioPlayLogItem & RadioPlayLogItem::operator=(class RadioPlayLogItem const &)
-	??0RadioPlayLogItem@@QAE@ABV0@@Z @ 18 NONAME ; RadioPlayLogItem::RadioPlayLogItem(class RadioPlayLogItem const &)
-	?staticMetaObject@RadioUiEngine@@2UQMetaObject@@B @ 19 NONAME ; struct QMetaObject const RadioUiEngine::staticMetaObject
-	?qt_metacast@RadioPlayLogModel@@UAEPAXPBD@Z @ 20 NONAME ; void * RadioPlayLogModel::qt_metacast(char const *)
-	?stationsInRange@RadioStationModel@@QAE?AV?$QList@VRadioStation@@@@II@Z @ 21 NONAME ; class QList<class RadioStation> RadioStationModel::stationsInRange(unsigned int, unsigned int)
+	?rowCount@RadioHistoryModel@@UBEHABVQModelIndex@@@Z @ 5 NONAME ; int RadioHistoryModel::rowCount(class QModelIndex const &) const
+	?qt_metacast@RadioUiEngine@@UAEPAXPBD@Z @ 6 NONAME ; void * RadioUiEngine::qt_metacast(char const *)
+	?index@RadioStationFilterModel@@UBE?AVQModelIndex@@HHABV2@@Z @ 7 NONAME ; class QModelIndex RadioStationFilterModel::index(int, int, class QModelIndex const &) const
+	?parseFrequency@RadioStation@@SA?AVQString@@I@Z @ 8 NONAME ; class QString RadioStation::parseFrequency(unsigned int)
+	??0RadioStation@@QAE@ABV0@@Z @ 9 NONAME ; RadioStation::RadioStation(class RadioStation const &)
+	?setFavorite@RadioHistoryItem@@QAEXXZ @ 10 NONAME ; void RadioHistoryItem::setFavorite(void)
+	?region@RadioUiEngine@@QBE?AW4Region@RadioRegion@@XZ @ 11 NONAME ; enum RadioRegion::Region RadioUiEngine::region(void) const
+	?frequency@RadioStation@@QBEIXZ @ 12 NONAME ; unsigned int RadioStation::frequency(void) const
+	?skipPrevious@RadioUiEngine@@QAEXXZ @ 13 NONAME ; void RadioUiEngine::skipPrevious(void)
+	?setFavoriteByFrequency@RadioStationModel@@QAEXI_N@Z @ 14 NONAME ; void RadioStationModel::setFavoriteByFrequency(unsigned int, bool)
+	??_ERadioHistoryItem@@UAE@I@Z @ 15 NONAME ; RadioHistoryItem::~RadioHistoryItem(unsigned int)
+	?playCount@RadioHistoryItem@@QBEHXZ @ 16 NONAME ; int RadioHistoryItem::playCount(void) const
+	?findFrequency@RadioStationModel@@QAE_NIAAVRadioStation@@@Z @ 17 NONAME ; bool RadioStationModel::findFrequency(unsigned int, class RadioStation &)
+	?staticMetaObject@RadioUiEngine@@2UQMetaObject@@B @ 18 NONAME ; struct QMetaObject const RadioUiEngine::staticMetaObject
+	?setFavorite@RadioHistoryModel@@QAEXXZ @ 19 NONAME ; void RadioHistoryModel::setFavorite(void)
+	?stationsInRange@RadioStationModel@@QAE?AV?$QList@VRadioStation@@@@II@Z @ 20 NONAME ; class QList<class RadioStation> RadioStationModel::stationsInRange(unsigned int, unsigned int)
+	?setName@RadioStation@@QAEXABVQString@@@Z @ 21 NONAME ; void RadioStation::setName(class QString const &)
 	?seekDown@RadioUiEngine@@QAEXXZ @ 22 NONAME ; void RadioUiEngine::seekDown(void)
-	?setCurrentTime@RadioPlayLogItem@@QAEXXZ @ 23 NONAME ; void RadioPlayLogItem::setCurrentTime(void)
-	?removeAll@RadioPlayLogModel@@QAEXXZ @ 24 NONAME ; void RadioPlayLogModel::removeAll(void)
-	?tuneWithDelay@RadioUiEngine@@QAEXIH@Z @ 25 NONAME ; void RadioUiEngine::tuneWithDelay(unsigned int, int)
-	?trUtf8@RadioPlayLogModel@@SA?AVQString@@PBD0@Z @ 26 NONAME ; class QString RadioPlayLogModel::trUtf8(char const *, char const *)
-	?hasPiCode@RadioStation@@QBE_NXZ @ 27 NONAME ; bool RadioStation::hasPiCode(void) const
-	?setFavoriteByPreset@RadioStationModel@@QAEXH_N@Z @ 28 NONAME ; void RadioStationModel::setFavoriteByPreset(int, bool)
-	?scanAndSaveFinished@RadioUiEngine@@IAEXXZ @ 29 NONAME ; void RadioUiEngine::scanAndSaveFinished(void)
-	?rdsAvailabilityChanged@RadioUiEngine@@IAEX_N@Z @ 30 NONAME ; void RadioUiEngine::rdsAvailabilityChanged(bool)
+	?tuneWithDelay@RadioUiEngine@@QAEXIH@Z @ 23 NONAME ; void RadioUiEngine::tuneWithDelay(unsigned int, int)
+	?emitAntennaStatusChanged@RadioUiEngine@@AAEX_N@Z @ 24 NONAME ; void RadioUiEngine::emitAntennaStatusChanged(bool)
+	?hasPiCode@RadioStation@@QBE_NXZ @ 25 NONAME ; bool RadioStation::hasPiCode(void) const
+	??_ERadioScannerEngine@@UAE@I@Z @ 26 NONAME ; RadioScannerEngine::~RadioScannerEngine(unsigned int)
+	?setFavoriteByPreset@RadioStationModel@@QAEXH_N@Z @ 27 NONAME ; void RadioStationModel::setFavoriteByPreset(int, bool)
+	?rdsAvailabilityChanged@RadioUiEngine@@IAEX_N@Z @ 28 NONAME ; void RadioUiEngine::rdsAvailabilityChanged(bool)
+	?decrementReferenceCount@RadioHistoryItem@@AAEXXZ @ 29 NONAME ; void RadioHistoryItem::decrementReferenceCount(void)
+	?increasePlayCount@RadioHistoryItem@@QAEXXZ @ 30 NONAME ; void RadioHistoryItem::increasePlayCount(void)
 	?findPresetIndex@RadioStationModel@@QAEHHAAVRadioStation@@@Z @ 31 NONAME ; int RadioStationModel::findPresetIndex(int, class RadioStation &)
 	?stationHandlerIf@RadioStationModel@@QAEAAVRadioStationHandlerIf@@XZ @ 32 NONAME ; class RadioStationHandlerIf & RadioStationModel::stationHandlerIf(void)
-	?resetCurrentSong@RadioPlayLogModel@@QAEXXZ @ 33 NONAME ; void RadioPlayLogModel::resetCurrentSong(void)
-	?emitVolumeChanged@RadioUiEngine@@AAEXH@Z @ 34 NONAME ; void RadioUiEngine::emitVolumeChanged(int)
-	?seekUp@RadioUiEngine@@QAEXXZ @ 35 NONAME ; void RadioUiEngine::seekUp(void)
-	?qt_metacall@RadioUiEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 36 NONAME ; int RadioUiEngine::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?emitSeekingStarted@RadioUiEngine@@AAEXW4Direction@Seeking@@@Z @ 37 NONAME ; void RadioUiEngine::emitSeekingStarted(enum Seeking::Direction)
-	?reset@RadioStation@@AAEXXZ @ 38 NONAME ; void RadioStation::reset(void)
-	?isFavorite@RadioPlayLogItem@@QBE_NXZ @ 39 NONAME ; bool RadioPlayLogItem::isFavorite(void) const
-	??1RadioStationFilterModel@@UAE@XZ @ 40 NONAME ; RadioStationFilterModel::~RadioStationFilterModel(void)
-	?emitAudioRouteChanged@RadioUiEngine@@AAEX_N@Z @ 41 NONAME ; void RadioUiEngine::emitAudioRouteChanged(bool)
-	??_ERadioPlayLogModel@@UAE@I@Z @ 42 NONAME ; RadioPlayLogModel::~RadioPlayLogModel(unsigned int)
-	??4RadioStation@@QAEAAV0@ABV0@@Z @ 43 NONAME ; class RadioStation & RadioStation::operator=(class RadioStation const &)
-	?toggleAudioRoute@RadioUiEngine@@QAEXXZ @ 44 NONAME ; void RadioUiEngine::toggleAudioRoute(void)
-	?unsetType@RadioStation@@QAEXV?$QFlags@W4TypeFlag@RadioStation@@@@@Z @ 45 NONAME ; void RadioStation::unsetType(class QFlags<enum RadioStation::TypeFlag>)
-	?muteChanged@RadioUiEngine@@IAEX_N@Z @ 46 NONAME ; void RadioUiEngine::muteChanged(bool)
-	?maxFrequency@RadioUiEngine@@QBEIXZ @ 47 NONAME ; unsigned int RadioUiEngine::maxFrequency(void) const
-	?setIcons@RadioStationModel@@QAEXABVQIcon@@0@Z @ 48 NONAME ; void RadioStationModel::setIcons(class QIcon const &, class QIcon const &)
-	?saveStation@RadioStationModel@@QAEXAAVRadioStation@@@Z @ 49 NONAME ; void RadioStationModel::saveStation(class RadioStation &)
-	?findUnusedPresetIndex@RadioStationModel@@AAEHXZ @ 50 NONAME ; int RadioStationModel::findUnusedPresetIndex(void)
-	?hasChanged@RadioStation@@QBE_NXZ @ 51 NONAME ; bool RadioStation::hasChanged(void) const
-	?isScanning@RadioUiEngine@@QBE_NXZ @ 52 NONAME ; bool RadioUiEngine::isScanning(void) const
-	?dynamicPsCheckEnded@RadioStationModel@@AAEXXZ @ 53 NONAME ; void RadioStationModel::dynamicPsCheckEnded(void)
-	?itemAdded@RadioPlayLogModel@@IAEXXZ @ 54 NONAME ; void RadioPlayLogModel::itemAdded(void)
-	??0RadioPlayLogModel@@AAE@AAVRadioUiEngine@@@Z @ 55 NONAME ; RadioPlayLogModel::RadioPlayLogModel(class RadioUiEngine &)
-	?setFrequency@RadioStation@@AAEXI@Z @ 56 NONAME ; void RadioStation::setFrequency(unsigned int)
-	?piCodeToCallSign@RadioStation@@AAE?AVQString@@I@Z @ 57 NONAME ; class QString RadioStation::piCodeToCallSign(unsigned int)
-	?hasLooped@RadioStationFilterModel@@QBE_NABVQModelIndex@@@Z @ 58 NONAME ; bool RadioStationFilterModel::hasLooped(class QModelIndex const &) const
-	?setFavorite@RadioPlayLogItem@@QAEXXZ @ 59 NONAME ; void RadioPlayLogItem::setFavorite(void)
-	?favoriteChanged@RadioStationModel@@IAEXABVRadioStation@@@Z @ 60 NONAME ; void RadioStationModel::favoriteChanged(class RadioStation const &)
-	?radioStatusChanged@RadioUiEngine@@IAEX_N@Z @ 61 NONAME ; void RadioUiEngine::radioStatusChanged(bool)
-	?playCount@RadioPlayLogItem@@QBEHXZ @ 62 NONAME ; int RadioPlayLogItem::playCount(void) const
-	?addStation@RadioStationModel@@QAEXABVRadioStation@@@Z @ 63 NONAME ; void RadioStationModel::addStation(class RadioStation const &)
-	?tr@RadioPlayLogModel@@SA?AVQString@@PBD0H@Z @ 64 NONAME ; class QString RadioPlayLogModel::tr(char const *, char const *, int)
-	?emitheadsetStatusChanged@RadioUiEngine@@AAEX_N@Z @ 65 NONAME ; void RadioUiEngine::emitheadsetStatusChanged(bool)
-	?createNewFilterModel@RadioUiEngine@@QAEPAVRadioStationFilterModel@@PAVQObject@@@Z @ 66 NONAME ; class RadioStationFilterModel * RadioUiEngine::createNewFilterModel(class QObject *)
-	?tunedToFrequency@RadioUiEngine@@IAEXIH@Z @ 67 NONAME ; void RadioUiEngine::tunedToFrequency(unsigned int, int)
-	?tr@RadioUiEngine@@SA?AVQString@@PBD0H@Z @ 68 NONAME ; class QString RadioUiEngine::tr(char const *, char const *, int)
-	?startRadio@RadioUiEngine@@QAE_NXZ @ 69 NONAME ; bool RadioUiEngine::startRadio(void)
-	?tunePreset@RadioUiEngine@@QAEXH@Z @ 70 NONAME ; void RadioUiEngine::tunePreset(int)
-	?emitDataChanged@RadioStationModel@@AAEXABVRadioStation@@@Z @ 71 NONAME ; void RadioStationModel::emitDataChanged(class RadioStation const &)
-	?decrementReferenceCount@RadioPlayLogItem@@AAEXXZ @ 72 NONAME ; void RadioPlayLogItem::decrementReferenceCount(void)
-	?isRadioOn@RadioUiEngine@@QBE_NXZ @ 73 NONAME ; bool RadioUiEngine::isRadioOn(void) const
-	?increasePlayCount@RadioPlayLogItem@@QAEXXZ @ 74 NONAME ; void RadioPlayLogItem::increasePlayCount(void)
-	?modelIndexFromFrequency@RadioStationModel@@QAE?AVQModelIndex@@I@Z @ 75 NONAME ; class QModelIndex RadioStationModel::modelIndexFromFrequency(unsigned int)
-	?data@RadioStationFilterModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 76 NONAME ; class QVariant RadioStationFilterModel::data(class QModelIndex const &, int) const
-	?list@RadioStationModel@@QBEABV?$QMap@IVRadioStation@@@@XZ @ 77 NONAME ; class QMap<unsigned int, class RadioStation> const & RadioStationModel::list(void) const
-	?addRadioTextPlus@RadioPlayLogModel@@AAEXHABVQString@@ABVRadioStation@@@Z @ 78 NONAME ; void RadioPlayLogModel::addRadioTextPlus(int, class QString const &, class RadioStation const &)
-	?tr@RadioStationModel@@SA?AVQString@@PBD0@Z @ 79 NONAME ; class QString RadioStationModel::tr(char const *, char const *)
-	?hasRds@RadioStation@@QBE_NXZ @ 80 NONAME ; bool RadioStation::hasRds(void) const
-	?flags@RadioStationModel@@UBE?AV?$QFlags@W4ItemFlag@Qt@@@@ABVQModelIndex@@@Z @ 81 NONAME ; class QFlags<enum Qt::ItemFlag> RadioStationModel::flags(class QModelIndex const &) const
-	?detach@RadioStation@@QAEXXZ @ 82 NONAME ; void RadioStation::detach(void)
-	?getStaticMetaObject@RadioPlayLogModel@@SAABUQMetaObject@@XZ @ 83 NONAME ; struct QMetaObject const & RadioPlayLogModel::getStaticMetaObject(void)
-	?stationsInRange@RadioUiEngine@@QAE?AV?$QList@VRadioStation@@@@II@Z @ 84 NONAME ; class QList<class RadioStation> RadioUiEngine::stationsInRange(unsigned int, unsigned int)
-	?trUtf8@RadioUiEngine@@SA?AVQString@@PBD0@Z @ 85 NONAME ; class QString RadioUiEngine::trUtf8(char const *, char const *)
-	?setFrequency@RadioPlayLogItem@@QAEXI@Z @ 86 NONAME ; void RadioPlayLogItem::setFrequency(unsigned int)
-	?setPiCode@RadioStation@@AAE_NHW4Region@RadioRegion@@@Z @ 87 NONAME ; bool RadioStation::setPiCode(int, enum RadioRegion::Region)
-	?radioText@RadioStation@@QBE?AVQString@@XZ @ 88 NONAME ; class QString RadioStation::radioText(void) const
-	?setData@RadioStationModel@@UAE_NABVQModelIndex@@ABVQVariant@@H@Z @ 89 NONAME ; bool RadioStationModel::setData(class QModelIndex const &, class QVariant const &, int)
-	??_ERadioPlayLogItem@@UAE@I@Z @ 90 NONAME ; RadioPlayLogItem::~RadioPlayLogItem(unsigned int)
-	?setVolume@RadioUiEngine@@QAEXH@Z @ 91 NONAME ; void RadioUiEngine::setVolume(int)
-	?setFavorite@RadioStation@@QAEX_N@Z @ 92 NONAME ; void RadioStation::setFavorite(bool)
-	?setFavorite@RadioPlayLogModel@@QAEXXZ @ 93 NONAME ; void RadioPlayLogModel::setFavorite(void)
-	?d_func@RadioStationModel@@ABEPBVRadioStationModelPrivate@@XZ @ 94 NONAME ; class RadioStationModelPrivate const * RadioStationModel::d_func(void) const
-	?emitChangeSignals@RadioStationModel@@AAEXABVRadioStation@@V?$QFlags@W4ChangeFlag@RadioStation@@@@@Z @ 95 NONAME ; void RadioStationModel::emitChangeSignals(class RadioStation const &, class QFlags<enum RadioStation::ChangeFlag>)
-	?tr@RadioStationModel@@SA?AVQString@@PBD0H@Z @ 96 NONAME ; class QString RadioStationModel::tr(char const *, char const *, int)
-	?setCyclic@RadioStationFilterModel@@QAEX_N@Z @ 97 NONAME ; void RadioStationFilterModel::setCyclic(bool)
-	??1RadioStationModel@@UAE@XZ @ 98 NONAME ; RadioStationModel::~RadioStationModel(void)
-	?isMuted@RadioUiEngine@@QBE_NXZ @ 99 NONAME ; bool RadioUiEngine::isMuted(void) const
-	?renameStation@RadioStationModel@@QAEXHABVQString@@@Z @ 100 NONAME ; void RadioStationModel::renameStation(int, class QString const &)
-	?genreToString@RadioUiEngine@@QAE?AVQString@@H@Z @ 101 NONAME ; class QString RadioUiEngine::genreToString(int)
-	?currentFrequency@RadioUiEngine@@QBEIXZ @ 102 NONAME ; unsigned int RadioUiEngine::currentFrequency(void) const
-	?d_func@RadioPlayLogModel@@AAEPAVRadioPlayLogModelPrivate@@XZ @ 103 NONAME ; class RadioPlayLogModelPrivate * RadioPlayLogModel::d_func(void)
-	?setUserDefinedName@RadioStation@@QAEXABVQString@@@Z @ 104 NONAME ; void RadioStation::setUserDefinedName(class QString const &)
-	?data@RadioPlayLogModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 105 NONAME ; class QVariant RadioPlayLogModel::data(class QModelIndex const &, int) const
-	?setUrl@RadioStation@@AAEXABVQString@@@Z @ 106 NONAME ; void RadioStation::setUrl(class QString const &)
-	?setArtist@RadioPlayLogItem@@QAEXABVQString@@@Z @ 107 NONAME ; void RadioPlayLogItem::setArtist(class QString const &)
+	?qt_metacall@RadioHistoryModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 33 NONAME ; int RadioHistoryModel::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?findItem@RadioHistoryModel@@AAEHABVQString@@0AAVRadioHistoryItem@@@Z @ 34 NONAME ; int RadioHistoryModel::findItem(class QString const &, class QString const &, class RadioHistoryItem &)
+	?emitVolumeChanged@RadioUiEngine@@AAEXH@Z @ 35 NONAME ; void RadioUiEngine::emitVolumeChanged(int)
+	?seekUp@RadioUiEngine@@QAEXXZ @ 36 NONAME ; void RadioUiEngine::seekUp(void)
+	?qt_metacall@RadioUiEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 37 NONAME ; int RadioUiEngine::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?emitSeekingStarted@RadioUiEngine@@AAEXW4Direction@Seeking@@@Z @ 38 NONAME ; void RadioUiEngine::emitSeekingStarted(enum Seeking::Direction)
+	??1RadioStationFilterModel@@UAE@XZ @ 39 NONAME ; RadioStationFilterModel::~RadioStationFilterModel(void)
+	?emitAudioRouteChanged@RadioUiEngine@@AAEX_N@Z @ 40 NONAME ; void RadioUiEngine::emitAudioRouteChanged(bool)
+	??1RadioHistoryModel@@EAE@XZ @ 41 NONAME ; RadioHistoryModel::~RadioHistoryModel(void)
+	?addItem@RadioHistoryModel@@AAEXABVQString@@0ABVRadioStation@@@Z @ 42 NONAME ; void RadioHistoryModel::addItem(class QString const &, class QString const &, class RadioStation const &)
+	?d_func@RadioScannerEngine@@ABEPBVRadioScannerEnginePrivate@@XZ @ 43 NONAME ; class RadioScannerEnginePrivate const * RadioScannerEngine::d_func(void) const
+	?setGenre@RadioStation@@QAEXH@Z @ 44 NONAME ; void RadioStation::setGenre(int)
+	??4RadioStation@@QAEAAV0@ABV0@@Z @ 45 NONAME ; class RadioStation & RadioStation::operator=(class RadioStation const &)
+	?toggleAudioRoute@RadioUiEngine@@QAEXXZ @ 46 NONAME ; void RadioUiEngine::toggleAudioRoute(void)
+	?unsetType@RadioStation@@QAEXV?$QFlags@W4TypeFlag@RadioStation@@@@@Z @ 47 NONAME ; void RadioStation::unsetType(class QFlags<enum RadioStation::TypeFlag>)
+	?muteChanged@RadioUiEngine@@IAEX_N@Z @ 48 NONAME ; void RadioUiEngine::muteChanged(bool)
+	?maxFrequency@RadioUiEngine@@QBEIXZ @ 49 NONAME ; unsigned int RadioUiEngine::maxFrequency(void) const
+	?setIcons@RadioStationModel@@QAEXABVQIcon@@0@Z @ 50 NONAME ; void RadioStationModel::setIcons(class QIcon const &, class QIcon const &)
+	?saveStation@RadioStationModel@@QAEXAAVRadioStation@@@Z @ 51 NONAME ; void RadioStationModel::saveStation(class RadioStation &)
+	?flags@RadioHistoryModel@@UBE?AV?$QFlags@W4ItemFlag@Qt@@@@ABVQModelIndex@@@Z @ 52 NONAME ; class QFlags<enum Qt::ItemFlag> RadioHistoryModel::flags(class QModelIndex const &) const
+	?getStaticMetaObject@RadioHistoryModel@@SAABUQMetaObject@@XZ @ 53 NONAME ; struct QMetaObject const & RadioHistoryModel::getStaticMetaObject(void)
+	?findUnusedPresetIndex@RadioStationModel@@AAEHXZ @ 54 NONAME ; int RadioStationModel::findUnusedPresetIndex(void)
+	?hasChanged@RadioStation@@QBE_NXZ @ 55 NONAME ; bool RadioStation::hasChanged(void) const
+	?trUtf8@RadioScannerEngine@@SA?AVQString@@PBD0H@Z @ 56 NONAME ; class QString RadioScannerEngine::trUtf8(char const *, char const *, int)
+	?isScanning@RadioUiEngine@@QBE_NXZ @ 57 NONAME ; bool RadioUiEngine::isScanning(void) const
+	?dynamicPsCheckEnded@RadioStationModel@@AAEXXZ @ 58 NONAME ; void RadioStationModel::dynamicPsCheckEnded(void)
+	?d_func@RadioHistoryModel@@AAEPAVRadioHistoryModelPrivate@@XZ @ 59 NONAME ; class RadioHistoryModelPrivate * RadioHistoryModel::d_func(void)
+	?piCodeToCallSign@RadioStation@@AAE?AVQString@@I@Z @ 60 NONAME ; class QString RadioStation::piCodeToCallSign(unsigned int)
+	?hasLooped@RadioStationFilterModel@@QBE_NABVQModelIndex@@@Z @ 61 NONAME ; bool RadioStationFilterModel::hasLooped(class QModelIndex const &) const
+	?setPiCode@RadioStation@@QAE_NHW4Region@RadioRegion@@@Z @ 62 NONAME ; bool RadioStation::setPiCode(int, enum RadioRegion::Region)
+	?favoriteChanged@RadioStationModel@@IAEXABVRadioStation@@@Z @ 63 NONAME ; void RadioStationModel::favoriteChanged(class RadioStation const &)
+	?radioStatusChanged@RadioUiEngine@@IAEX_N@Z @ 64 NONAME ; void RadioUiEngine::radioStatusChanged(bool)
+	?isCurrentSongRecognized@RadioHistoryModel@@QBE_NXZ @ 65 NONAME ; bool RadioHistoryModel::isCurrentSongRecognized(void) const
+	?clearRadioTextPlus@RadioHistoryModel@@AAEXXZ @ 66 NONAME ; void RadioHistoryModel::clearRadioTextPlus(void)
+	?addStation@RadioStationModel@@QAEXABVRadioStation@@@Z @ 67 NONAME ; void RadioStationModel::addStation(class RadioStation const &)
+	?favoriteCount@RadioStationModel@@QAEHXZ @ 68 NONAME ; int RadioStationModel::favoriteCount(void)
+	?createNewFilterModel@RadioUiEngine@@QAEPAVRadioStationFilterModel@@PAVQObject@@@Z @ 69 NONAME ; class RadioStationFilterModel * RadioUiEngine::createNewFilterModel(class QObject *)
+	??1RadioScannerEngine@@UAE@XZ @ 70 NONAME ; RadioScannerEngine::~RadioScannerEngine(void)
+	?tunedToFrequency@RadioUiEngine@@IAEXIH@Z @ 71 NONAME ; void RadioUiEngine::tunedToFrequency(unsigned int, int)
+	?tr@RadioUiEngine@@SA?AVQString@@PBD0H@Z @ 72 NONAME ; class QString RadioUiEngine::tr(char const *, char const *, int)
+	?startRadio@RadioUiEngine@@QAE_NXZ @ 73 NONAME ; bool RadioUiEngine::startRadio(void)
+	?tunePreset@RadioUiEngine@@QAEXH@Z @ 74 NONAME ; void RadioUiEngine::tunePreset(int)
+	?trUtf8@RadioScannerEngine@@SA?AVQString@@PBD0@Z @ 75 NONAME ; class QString RadioScannerEngine::trUtf8(char const *, char const *)
+	?emitDataChanged@RadioStationModel@@AAEXABVRadioStation@@@Z @ 76 NONAME ; void RadioStationModel::emitDataChanged(class RadioStation const &)
+	?isRadioOn@RadioUiEngine@@QBE_NXZ @ 77 NONAME ; bool RadioUiEngine::isRadioOn(void) const
+	?continueScanning@RadioScannerEngine@@QAEXXZ @ 78 NONAME ; void RadioScannerEngine::continueScanning(void)
+	?trUtf8@RadioHistoryModel@@SA?AVQString@@PBD0H@Z @ 79 NONAME ; class QString RadioHistoryModel::trUtf8(char const *, char const *, int)
+	?modelIndexFromFrequency@RadioStationModel@@QAE?AVQModelIndex@@I@Z @ 80 NONAME ; class QModelIndex RadioStationModel::modelIndexFromFrequency(unsigned int)
+	?data@RadioStationFilterModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 81 NONAME ; class QVariant RadioStationFilterModel::data(class QModelIndex const &, int) const
+	?list@RadioStationModel@@QBEABV?$QMap@IVRadioStation@@@@XZ @ 82 NONAME ; class QMap<unsigned int, class RadioStation> const & RadioStationModel::list(void) const
+	?tr@RadioStationModel@@SA?AVQString@@PBD0@Z @ 83 NONAME ; class QString RadioStationModel::tr(char const *, char const *)
+	?setChangeFlags@RadioStation@@QAEXV?$QFlags@W4ChangeFlag@RadioStation@@@@@Z @ 84 NONAME ; void RadioStation::setChangeFlags(class QFlags<enum RadioStation::ChangeFlag>)
+	?hasRds@RadioStation@@QBE_NXZ @ 85 NONAME ; bool RadioStation::hasRds(void) const
+	?flags@RadioStationModel@@UBE?AV?$QFlags@W4ItemFlag@Qt@@@@ABVQModelIndex@@@Z @ 86 NONAME ; class QFlags<enum Qt::ItemFlag> RadioStationModel::flags(class QModelIndex const &) const
+	?detach@RadioStation@@QAEXXZ @ 87 NONAME ; void RadioStation::detach(void)
+	?staticMetaObject@RadioScannerEngine@@2UQMetaObject@@B @ 88 NONAME ; struct QMetaObject const RadioScannerEngine::staticMetaObject
+	?stationsInRange@RadioUiEngine@@QAE?AV?$QList@VRadioStation@@@@II@Z @ 89 NONAME ; class QList<class RadioStation> RadioUiEngine::stationsInRange(unsigned int, unsigned int)
+	?trUtf8@RadioUiEngine@@SA?AVQString@@PBD0@Z @ 90 NONAME ; class QString RadioUiEngine::trUtf8(char const *, char const *)
+	?tr@RadioScannerEngine@@SA?AVQString@@PBD0H@Z @ 91 NONAME ; class QString RadioScannerEngine::tr(char const *, char const *, int)
+	?radioText@RadioStation@@QBE?AVQString@@XZ @ 92 NONAME ; class QString RadioStation::radioText(void) const
+	?setData@RadioStationModel@@UAE_NABVQModelIndex@@ABVQVariant@@H@Z @ 93 NONAME ; bool RadioStationModel::setData(class QModelIndex const &, class QVariant const &, int)
+	??0RadioStation@@QAE@HI@Z @ 94 NONAME ; RadioStation::RadioStation(int, unsigned int)
+	?setPsType@RadioStation@@QAEXV?$QFlags@W4PsTypeFlag@RadioStation@@@@@Z @ 95 NONAME ; void RadioStation::setPsType(class QFlags<enum RadioStation::PsTypeFlag>)
+	?setVolume@RadioUiEngine@@QAEXH@Z @ 96 NONAME ; void RadioUiEngine::setVolume(int)
+	?setFavorite@RadioStation@@QAEX_N@Z @ 97 NONAME ; void RadioStation::setFavorite(bool)
+	?emitChangeSignals@RadioStationModel@@AAEXABVRadioStation@@V?$QFlags@W4ChangeFlag@RadioStation@@@@@Z @ 98 NONAME ; void RadioStationModel::emitChangeSignals(class RadioStation const &, class QFlags<enum RadioStation::ChangeFlag>)
+	?d_func@RadioStationModel@@ABEPBVRadioStationModelPrivate@@XZ @ 99 NONAME ; class RadioStationModelPrivate const * RadioStationModel::d_func(void) const
+	?setPresetIndex@RadioStation@@QAEXH@Z @ 100 NONAME ; void RadioStation::setPresetIndex(int)
+	?tr@RadioStationModel@@SA?AVQString@@PBD0H@Z @ 101 NONAME ; class QString RadioStationModel::tr(char const *, char const *, int)
+	?setCyclic@RadioStationFilterModel@@QAEX_N@Z @ 102 NONAME ; void RadioStationFilterModel::setCyclic(bool)
+	??1RadioStationModel@@UAE@XZ @ 103 NONAME ; RadioStationModel::~RadioStationModel(void)
+	?isMuted@RadioUiEngine@@QBE_NXZ @ 104 NONAME ; bool RadioUiEngine::isMuted(void) const
+	?renameStation@RadioStationModel@@QAEXHABVQString@@@Z @ 105 NONAME ; void RadioStationModel::renameStation(int, class QString const &)
+	?currentFrequency@RadioUiEngine@@QBEIXZ @ 106 NONAME ; unsigned int RadioUiEngine::currentFrequency(void) const
+	?setUserDefinedName@RadioStation@@QAEXABVQString@@@Z @ 107 NONAME ; void RadioStation::setUserDefinedName(class QString const &)
 	??1RadioStation@@UAE@XZ @ 108 NONAME ; RadioStation::~RadioStation(void)
-	?isCurrentSongRecognized@RadioPlayLogModel@@QBE_NXZ @ 109 NONAME ; bool RadioPlayLogModel::isCurrentSongRecognized(void) const
+	?getStaticMetaObject@RadioScannerEngine@@SAABUQMetaObject@@XZ @ 109 NONAME ; struct QMetaObject const & RadioScannerEngine::getStaticMetaObject(void)
 	?callSignString@RadioStation@@AAE?AVQString@@I@Z @ 110 NONAME ; class QString RadioStation::callSignString(unsigned int)
 	?isValid@RadioStation@@QBE_NXZ @ 111 NONAME ; bool RadioStation::isValid(void) const
 	?isEqual@RadioStationFilterModel@@QBE_NABVQModelIndex@@0@Z @ 112 NONAME ; bool RadioStationFilterModel::isEqual(class QModelIndex const &, class QModelIndex const &) const
-	?setTitle@RadioPlayLogItem@@QAEXABVQString@@@Z @ 113 NONAME ; void RadioPlayLogItem::setTitle(class QString const &)
-	??1RadioPlayLogModel@@EAE@XZ @ 114 NONAME ; RadioPlayLogModel::~RadioPlayLogModel(void)
-	?decrementReferenceCount@RadioStation@@AAEXXZ @ 115 NONAME ; void RadioStation::decrementReferenceCount(void)
-	?trUtf8@RadioUiEngine@@SA?AVQString@@PBD0H@Z @ 116 NONAME ; class QString RadioUiEngine::trUtf8(char const *, char const *, int)
-	??0RadioPlayLogItem@@QAE@ABVQString@@0@Z @ 117 NONAME ; RadioPlayLogItem::RadioPlayLogItem(class QString const &, class QString const &)
-	?trUtf8@RadioStationModel@@SA?AVQString@@PBD0@Z @ 118 NONAME ; class QString RadioStationModel::trUtf8(char const *, char const *)
-	?cancelScanFrequencyBand@RadioUiEngine@@QAEXXZ @ 119 NONAME ; void RadioUiEngine::cancelScanFrequencyBand(void)
-	?setRadioTextPlus@RadioStation@@AAEXHABVQString@@@Z @ 120 NONAME ; void RadioStation::setRadioTextPlus(int, class QString const &)
-	?setChangeFlags@RadioStation@@AAEXV?$QFlags@W4ChangeFlag@RadioStation@@@@@Z @ 121 NONAME ; void RadioStation::setChangeFlags(class QFlags<enum RadioStation::ChangeFlag>)
-	?modelIndexFromFrequency@RadioStationFilterModel@@QAE?AVQModelIndex@@I@Z @ 122 NONAME ; class QModelIndex RadioStationFilterModel::modelIndexFromFrequency(unsigned int)
-	?tuneFrequency@RadioUiEngine@@QAEXIH@Z @ 123 NONAME ; void RadioUiEngine::tuneFrequency(unsigned int, int)
-	?stationDataChanged@RadioStationModel@@IAEXABVRadioStation@@@Z @ 124 NONAME ; void RadioStationModel::stationDataChanged(class RadioStation const &)
-	?model@RadioUiEngine@@QAEAAVRadioStationModel@@XZ @ 125 NONAME ; class RadioStationModel & RadioUiEngine::model(void)
-	?headsetStatusChanged@RadioUiEngine@@IAEX_N@Z @ 126 NONAME ; void RadioUiEngine::headsetStatusChanged(bool)
-	?currentStation@RadioStationModel@@QAEAAVRadioStation@@XZ @ 127 NONAME ; class RadioStation & RadioStationModel::currentStation(void)
-	?genre@RadioStation@@QBEHXZ @ 128 NONAME ; int RadioStation::genre(void) const
-	?emitTunedToFrequency@RadioUiEngine@@AAEXIH@Z @ 129 NONAME ; void RadioUiEngine::emitTunedToFrequency(unsigned int, int)
-	?updateItem@RadioPlayLogModel@@AAEXHABVRadioPlayLogItem@@_N@Z @ 130 NONAME ; void RadioPlayLogModel::updateItem(int, class RadioPlayLogItem const &, bool)
-	?flags@RadioPlayLogModel@@UBE?AV?$QFlags@W4ItemFlag@Qt@@@@ABVQModelIndex@@@Z @ 131 NONAME ; class QFlags<enum Qt::ItemFlag> RadioPlayLogModel::flags(class QModelIndex const &) const
-	??0RadioStation@@QAE@XZ @ 132 NONAME ; RadioStation::RadioStation(void)
-	?metaObject@RadioPlayLogModel@@UBEPBUQMetaObject@@XZ @ 133 NONAME ; struct QMetaObject const * RadioPlayLogModel::metaObject(void) const
-	?psType@RadioStation@@QBE?AV?$QFlags@W4PsTypeFlag@RadioStation@@@@XZ @ 134 NONAME ; class QFlags<enum RadioStation::PsTypeFlag> RadioStation::psType(void) const
-	?d_func@RadioUiEngine@@ABEPBVRadioUiEnginePrivate@@XZ @ 135 NONAME ; class RadioUiEnginePrivate const * RadioUiEngine::d_func(void) const
-	?qt_metacall@RadioPlayLogModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 136 NONAME ; int RadioPlayLogModel::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?isSongRecognitionAppAvailable@RadioUiEngine@@QAE_NXZ @ 137 NONAME ; bool RadioUiEngine::isSongRecognitionAppAvailable(void)
-	?clearRadioTextPlus@RadioPlayLogModel@@AAEXXZ @ 138 NONAME ; void RadioPlayLogModel::clearRadioTextPlus(void)
-	?findCurrentStation@RadioStationModel@@AAE?AVRadioStation@@I@Z @ 139 NONAME ; class RadioStation RadioStationModel::findCurrentStation(unsigned int)
-	?setPsType@RadioStation@@AAEXV?$QFlags@W4PsTypeFlag@RadioStation@@@@@Z @ 140 NONAME ; void RadioStation::setPsType(class QFlags<enum RadioStation::PsTypeFlag>)
-	?realIndex@RadioStationFilterModel@@QBE?AVQModelIndex@@ABV2@@Z @ 141 NONAME ; class QModelIndex RadioStationFilterModel::realIndex(class QModelIndex const &) const
-	?url@RadioStation@@QBE?AVQString@@XZ @ 142 NONAME ; class QString RadioStation::url(void) const
-	?setData@RadioPlayLogModel@@UAE_NABVQModelIndex@@ABVQVariant@@H@Z @ 143 NONAME ; bool RadioPlayLogModel::setData(class QModelIndex const &, class QVariant const &, int)
-	?emitRdsAvailabilityChanged@RadioUiEngine@@AAEX_N@Z @ 144 NONAME ; void RadioUiEngine::emitRdsAvailabilityChanged(bool)
-	?frequencyMhz@RadioStation@@QBE?AVQString@@XZ @ 145 NONAME ; class QString RadioStation::frequencyMhz(void) const
-	?isAntennaAttached@RadioUiEngine@@QBE_NXZ @ 146 NONAME ; bool RadioUiEngine::isAntennaAttached(void) const
-	?qt_metacast@RadioStationModel@@UAEPAXPBD@Z @ 147 NONAME ; void * RadioStationModel::qt_metacast(char const *)
-	?emitScanAndSaveFinished@RadioUiEngine@@AAEXXZ @ 148 NONAME ; void RadioUiEngine::emitScanAndSaveFinished(void)
-	??0RadioStationFilterModel@@QAE@AAVRadioUiEngine@@PAVQObject@@@Z @ 149 NONAME ; RadioStationFilterModel::RadioStationFilterModel(class RadioUiEngine &, class QObject *)
-	?filterAcceptsRow@RadioStationFilterModel@@EBE_NHABVQModelIndex@@@Z @ 150 NONAME ; bool RadioStationFilterModel::filterAcceptsRow(int, class QModelIndex const &) const
-	?presetIndex@RadioStation@@QBEHXZ @ 151 NONAME ; int RadioStation::presetIndex(void) const
-	?staticMetaObject@RadioStationModel@@2UQMetaObject@@B @ 152 NONAME ; struct QMetaObject const RadioStationModel::staticMetaObject
-	?addRecognizedSong@RadioUiEngine@@QAEXABVQString@@0ABVRadioStation@@@Z @ 153 NONAME ; void RadioUiEngine::addRecognizedSong(class QString const &, class QString const &, class RadioStation const &)
-	?emitMuteChanged@RadioUiEngine@@AAEX_N@Z @ 154 NONAME ; void RadioUiEngine::emitMuteChanged(bool)
-	?setDynamicPsText@RadioStation@@AAEXABVQString@@@Z @ 155 NONAME ; void RadioStation::setDynamicPsText(class QString const &)
-	?removeByPresetIndex@RadioStationModel@@QAEXH@Z @ 156 NONAME ; void RadioStationModel::removeByPresetIndex(int)
-	?isRenamed@RadioStation@@QBE_NXZ @ 157 NONAME ; bool RadioStation::isRenamed(void) const
-	?stationAt@RadioStationModel@@QBE?AVRadioStation@@H@Z @ 158 NONAME ; class RadioStation RadioStationModel::stationAt(int) const
-	?removeStation@RadioStationModel@@QAEXABVRadioStation@@@Z @ 159 NONAME ; void RadioStationModel::removeStation(class RadioStation const &)
-	?metaObject@RadioUiEngine@@UBEPBUQMetaObject@@XZ @ 160 NONAME ; struct QMetaObject const * RadioUiEngine::metaObject(void) const
-	?addItem@RadioPlayLogModel@@AAEXABVQString@@0ABVRadioStation@@@Z @ 161 NONAME ; void RadioPlayLogModel::addItem(class QString const &, class QString const &, class RadioStation const &)
+	?decrementReferenceCount@RadioStation@@AAEXXZ @ 113 NONAME ; void RadioStation::decrementReferenceCount(void)
+	?trUtf8@RadioUiEngine@@SA?AVQString@@PBD0H@Z @ 114 NONAME ; class QString RadioUiEngine::trUtf8(char const *, char const *, int)
+	?trUtf8@RadioStationModel@@SA?AVQString@@PBD0@Z @ 115 NONAME ; class QString RadioStationModel::trUtf8(char const *, char const *)
+	?modelIndexFromFrequency@RadioStationFilterModel@@QAE?AVQModelIndex@@I@Z @ 116 NONAME ; class QModelIndex RadioStationFilterModel::modelIndexFromFrequency(unsigned int)
+	??0RadioStationModel@@QAE@AAVRadioUiEnginePrivate@@@Z @ 117 NONAME ; RadioStationModel::RadioStationModel(class RadioUiEnginePrivate &)
+	?tuneFrequency@RadioUiEngine@@QAEXIH@Z @ 118 NONAME ; void RadioUiEngine::tuneFrequency(unsigned int, int)
+	?stationDataChanged@RadioStationModel@@IAEXABVRadioStation@@@Z @ 119 NONAME ; void RadioStationModel::stationDataChanged(class RadioStation const &)
+	?model@RadioUiEngine@@QAEAAVRadioStationModel@@XZ @ 120 NONAME ; class RadioStationModel & RadioUiEngine::model(void)
+	?frequency@RadioHistoryItem@@QBEIXZ @ 121 NONAME ; unsigned int RadioHistoryItem::frequency(void) const
+	?currentStation@RadioStationModel@@QAEAAVRadioStation@@XZ @ 122 NONAME ; class RadioStation & RadioStationModel::currentStation(void)
+	?isDetached@RadioHistoryItem@@QBE_NXZ @ 123 NONAME ; bool RadioHistoryItem::isDetached(void) const
+	?genre@RadioStation@@QBEHXZ @ 124 NONAME ; int RadioStation::genre(void) const
+	?reset@RadioStation@@QAEXXZ @ 125 NONAME ; void RadioStation::reset(void)
+	?qt_metacall@RadioScannerEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 126 NONAME ; int RadioScannerEngine::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?emitTunedToFrequency@RadioUiEngine@@AAEXIH@Z @ 127 NONAME ; void RadioUiEngine::emitTunedToFrequency(unsigned int, int)
+	??0RadioStation@@QAE@XZ @ 128 NONAME ; RadioStation::RadioStation(void)
+	?updateItem@RadioHistoryModel@@AAEXHABVRadioHistoryItem@@_N@Z @ 129 NONAME ; void RadioHistoryModel::updateItem(int, class RadioHistoryItem const &, bool)
+	?psType@RadioStation@@QBE?AV?$QFlags@W4PsTypeFlag@RadioStation@@@@XZ @ 130 NONAME ; class QFlags<enum RadioStation::PsTypeFlag> RadioStation::psType(void) const
+	?d_func@RadioUiEngine@@ABEPBVRadioUiEnginePrivate@@XZ @ 131 NONAME ; class RadioUiEnginePrivate const * RadioUiEngine::d_func(void) const
+	?isSongRecognitionAppAvailable@RadioUiEngine@@QAE_NXZ @ 132 NONAME ; bool RadioUiEngine::isSongRecognitionAppAvailable(void)
+	?startScanning@RadioScannerEngine@@QAEXXZ @ 133 NONAME ; void RadioScannerEngine::startScanning(void)
+	?emitStationFound@RadioScannerEngine@@AAEXABVRadioStation@@@Z @ 134 NONAME ; void RadioScannerEngine::emitStationFound(class RadioStation const &)
+	?findCurrentStation@RadioStationModel@@AAE?AVRadioStation@@I@Z @ 135 NONAME ; class RadioStation RadioStationModel::findCurrentStation(unsigned int)
+	?setUrl@RadioStation@@QAEXABVQString@@@Z @ 136 NONAME ; void RadioStation::setUrl(class QString const &)
+	?realIndex@RadioStationFilterModel@@QBE?AVQModelIndex@@ABV2@@Z @ 137 NONAME ; class QModelIndex RadioStationFilterModel::realIndex(class QModelIndex const &) const
+	?data@RadioHistoryModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 138 NONAME ; class QVariant RadioHistoryModel::data(class QModelIndex const &, int) const
+	??4RadioHistoryItem@@QAEAAV0@ABV0@@Z @ 139 NONAME ; class RadioHistoryItem & RadioHistoryItem::operator=(class RadioHistoryItem const &)
+	?url@RadioStation@@QBE?AVQString@@XZ @ 140 NONAME ; class QString RadioStation::url(void) const
+	?historyModel@RadioUiEngine@@QAEAAVRadioHistoryModel@@XZ @ 141 NONAME ; class RadioHistoryModel & RadioUiEngine::historyModel(void)
+	?emitRdsAvailabilityChanged@RadioUiEngine@@AAEX_N@Z @ 142 NONAME ; void RadioUiEngine::emitRdsAvailabilityChanged(bool)
+	?frequencyMhz@RadioStation@@QBE?AVQString@@XZ @ 143 NONAME ; class QString RadioStation::frequencyMhz(void) const
+	?isAntennaAttached@RadioUiEngine@@QBE_NXZ @ 144 NONAME ; bool RadioUiEngine::isAntennaAttached(void) const
+	?setStation@RadioHistoryItem@@QAEXABVQString@@@Z @ 145 NONAME ; void RadioHistoryItem::setStation(class QString const &)
+	?qt_metacast@RadioStationModel@@UAEPAXPBD@Z @ 146 NONAME ; void * RadioStationModel::qt_metacast(char const *)
+	??0RadioStationFilterModel@@QAE@AAVRadioUiEngine@@PAVQObject@@@Z @ 147 NONAME ; RadioStationFilterModel::RadioStationFilterModel(class RadioUiEngine &, class QObject *)
+	?filterAcceptsRow@RadioStationFilterModel@@EBE_NHABVQModelIndex@@@Z @ 148 NONAME ; bool RadioStationFilterModel::filterAcceptsRow(int, class QModelIndex const &) const
+	?presetIndex@RadioStation@@QBEHXZ @ 149 NONAME ; int RadioStation::presetIndex(void) const
+	?cancel@RadioScannerEngine@@QAEXXZ @ 150 NONAME ; void RadioScannerEngine::cancel(void)
+	?staticMetaObject@RadioStationModel@@2UQMetaObject@@B @ 151 NONAME ; struct QMetaObject const RadioStationModel::staticMetaObject
+	?addRecognizedSong@RadioUiEngine@@QAEXABVQString@@0ABVRadioStation@@@Z @ 152 NONAME ; void RadioUiEngine::addRecognizedSong(class QString const &, class QString const &, class RadioStation const &)
+	?emitMuteChanged@RadioUiEngine@@AAEX_N@Z @ 153 NONAME ; void RadioUiEngine::emitMuteChanged(bool)
+	?currentSongReset@RadioHistoryModel@@IAEXXZ @ 154 NONAME ; void RadioHistoryModel::currentSongReset(void)
+	?removeByPresetIndex@RadioStationModel@@QAEXH@Z @ 155 NONAME ; void RadioStationModel::removeByPresetIndex(int)
+	?d_func@RadioScannerEngine@@AAEPAVRadioScannerEnginePrivate@@XZ @ 156 NONAME ; class RadioScannerEnginePrivate * RadioScannerEngine::d_func(void)
+	?setFrequency@RadioStation@@QAEXI@Z @ 157 NONAME ; void RadioStation::setFrequency(unsigned int)
+	?isRenamed@RadioStation@@QBE_NXZ @ 158 NONAME ; bool RadioStation::isRenamed(void) const
+	?stationAt@RadioStationModel@@QBE?AVRadioStation@@H@Z @ 159 NONAME ; class RadioStation RadioStationModel::stationAt(int) const
+	?removeStation@RadioStationModel@@QAEXABVRadioStation@@@Z @ 160 NONAME ; void RadioStationModel::removeStation(class RadioStation const &)
+	?metaObject@RadioUiEngine@@UBEPBUQMetaObject@@XZ @ 161 NONAME ; struct QMetaObject const * RadioUiEngine::metaObject(void) const
 	?dynamicPsChanged@RadioStationModel@@IAEXABVRadioStation@@@Z @ 162 NONAME ; void RadioStationModel::dynamicPsChanged(class RadioStation const &)
-	?frequency@RadioPlayLogItem@@QBEIXZ @ 163 NONAME ; unsigned int RadioPlayLogItem::frequency(void) const
-	?setType@RadioStation@@QAEXV?$QFlags@W4TypeFlag@RadioStation@@@@@Z @ 164 NONAME ; void RadioStation::setType(class QFlags<enum RadioStation::TypeFlag>)
+	?setType@RadioStation@@QAEXV?$QFlags@W4TypeFlag@RadioStation@@@@@Z @ 163 NONAME ; void RadioStation::setType(class QFlags<enum RadioStation::TypeFlag>)
+	??0RadioHistoryItem@@QAE@XZ @ 164 NONAME ; RadioHistoryItem::RadioHistoryItem(void)
 	?removeByFrequency@RadioStationModel@@QAEXI@Z @ 165 NONAME ; void RadioStationModel::removeByFrequency(unsigned int)
 	?removeAll@RadioStationModel@@QAEXXZ @ 166 NONAME ; void RadioStationModel::removeAll(void)
 	?isUsingLoudspeaker@RadioUiEngine@@QBE_NXZ @ 167 NONAME ; bool RadioUiEngine::isUsingLoudspeaker(void) const
 	?findPresetIndex@RadioStationModel@@QAEHH@Z @ 168 NONAME ; int RadioStationModel::findPresetIndex(int)
-	?getStaticMetaObject@RadioStationModel@@SAABUQMetaObject@@XZ @ 169 NONAME ; struct QMetaObject const & RadioStationModel::getStaticMetaObject(void)
-	?metaObject@RadioStationModel@@UBEPBUQMetaObject@@XZ @ 170 NONAME ; struct QMetaObject const * RadioStationModel::metaObject(void) const
-	?audioRouteChanged@RadioUiEngine@@IAEX_N@Z @ 171 NONAME ; void RadioUiEngine::audioRouteChanged(bool)
-	?dynamicPsText@RadioStation@@QBE?AVQString@@XZ @ 172 NONAME ; class QString RadioStation::dynamicPsText(void) const
-	?isFirstTimeStart@RadioUiEngine@@QAE_NXZ @ 173 NONAME ; bool RadioUiEngine::isFirstTimeStart(void)
-	?setGenre@RadioStation@@AAEXH@Z @ 174 NONAME ; void RadioStation::setGenre(int)
-	?scanFrequencyBand@RadioUiEngine@@QAEXXZ @ 175 NONAME ; void RadioUiEngine::scanFrequencyBand(void)
-	?rowCount@RadioPlayLogModel@@UBEHABVQModelIndex@@@Z @ 176 NONAME ; int RadioPlayLogModel::rowCount(class QModelIndex const &) const
-	?stationAdded@RadioStationModel@@IAEXABVRadioStation@@@Z @ 177 NONAME ; void RadioStationModel::stationAdded(class RadioStation const &)
-	?data_ptr@RadioPlayLogItem@@QAEAAPAVRadioPlayLogItemPrivate@@XZ @ 178 NONAME ; class RadioPlayLogItemPrivate * & RadioPlayLogItem::data_ptr(void)
-	?emitRadioStatusChanged@RadioUiEngine@@AAEX_N@Z @ 179 NONAME ; void RadioUiEngine::emitRadioStatusChanged(bool)
-	??_ERadioUiEngine@@UAE@I@Z @ 180 NONAME ; RadioUiEngine::~RadioUiEngine(unsigned int)
-	??0RadioStationModel@@QAE@AAVRadioUiEngine@@@Z @ 181 NONAME ; RadioStationModel::RadioStationModel(class RadioUiEngine &)
-	?setRadioText@RadioStation@@AAEXABVQString@@@Z @ 182 NONAME ; void RadioStation::setRadioText(class QString const &)
-	?setShowDetails@RadioPlayLogModel@@QAEX_N@Z @ 183 NONAME ; void RadioPlayLogModel::setShowDetails(bool)
-	?changeFlags@RadioStation@@QBE?AV?$QFlags@W4ChangeFlag@RadioStation@@@@XZ @ 184 NONAME ; class QFlags<enum RadioStation::ChangeFlag> RadioStation::changeFlags(void) const
-	?d_func@RadioStationModel@@AAEPAVRadioStationModelPrivate@@XZ @ 185 NONAME ; class RadioStationModelPrivate * RadioStationModel::d_func(void)
-	?skipNext@RadioUiEngine@@QAEXXZ @ 186 NONAME ; void RadioUiEngine::skipNext(void)
-	?setDetail@RadioStationModel@@QAEXV?$QFlags@W4DetailFlag@RadioStationModel@@@@@Z @ 187 NONAME ; void RadioStationModel::setDetail(class QFlags<enum RadioStationModel::DetailFlag>)
-	?nameOrFrequency@RadioUiEngine@@SA?AVQString@@ABVRadioStation@@I@Z @ 188 NONAME ; class QString RadioUiEngine::nameOrFrequency(class RadioStation const &, unsigned int)
-	?rowCount@RadioStationFilterModel@@UBEHABVQModelIndex@@@Z @ 189 NONAME ; int RadioStationFilterModel::rowCount(class QModelIndex const &) const
-	??1RadioUiEngine@@UAE@XZ @ 190 NONAME ; RadioUiEngine::~RadioUiEngine(void)
-	?findItem@RadioPlayLogModel@@AAEHABVQString@@0AAVRadioPlayLogItem@@@Z @ 191 NONAME ; int RadioPlayLogModel::findItem(class QString const &, class QString const &, class RadioPlayLogItem &)
-	?initialize@RadioStationModel@@QAEXPAVRadioPresetStorage@@PAVRadioEngineWrapper@@@Z @ 192 NONAME ; void RadioStationModel::initialize(class RadioPresetStorage *, class RadioEngineWrapper *)
-	?playLogModel@RadioUiEngine@@QAEAAVRadioPlayLogModel@@XZ @ 193 NONAME ; class RadioPlayLogModel & RadioUiEngine::playLogModel(void)
-	?isType@RadioStation@@QBE_NV?$QFlags@W4TypeFlag@RadioStation@@@@@Z @ 194 NONAME ; bool RadioStation::isType(class QFlags<enum RadioStation::TypeFlag>) const
-	?trUtf8@RadioPlayLogModel@@SA?AVQString@@PBD0H@Z @ 195 NONAME ; class QString RadioPlayLogModel::trUtf8(char const *, char const *, int)
-	?setTypeFilter@RadioStationFilterModel@@QAEXV?$QFlags@W4TypeFlag@RadioStation@@@@@Z @ 196 NONAME ; void RadioStationFilterModel::setTypeFilter(class QFlags<enum RadioStation::TypeFlag>)
-	?isDetached@RadioPlayLogItem@@QBE_NXZ @ 197 NONAME ; bool RadioPlayLogItem::isDetached(void) const
-	?volumeChanged@RadioUiEngine@@IAEXH@Z @ 198 NONAME ; void RadioUiEngine::volumeChanged(int)
-	??0RadioPlayLogItem@@QAE@XZ @ 199 NONAME ; RadioPlayLogItem::RadioPlayLogItem(void)
-	?resetChangeFlags@RadioStation@@QAEXXZ @ 200 NONAME ; void RadioStation::resetChangeFlags(void)
-	??_ERadioStationFilterModel@@UAE@I@Z @ 201 NONAME ; RadioStationFilterModel::~RadioStationFilterModel(unsigned int)
-	?data_ptr@RadioStation@@QAEAAPAVRadioStationPrivate@@XZ @ 202 NONAME ; class RadioStationPrivate * & RadioStation::data_ptr(void)
-	?time@RadioPlayLogItem@@QBE?AVQString@@XZ @ 203 NONAME ; class QString RadioPlayLogItem::time(void) const
-	?artist@RadioPlayLogItem@@QBE?AVQString@@XZ @ 204 NONAME ; class QString RadioPlayLogItem::artist(void) const
-	?callSignChar@RadioStation@@AAEDI@Z @ 205 NONAME ; char RadioStation::callSignChar(unsigned int)
-	??_ERadioStation@@UAE@I@Z @ 206 NONAME ; RadioStation::~RadioStation(unsigned int)
-	?stationRemoved@RadioStationModel@@IAEXABVRadioStation@@@Z @ 207 NONAME ; void RadioStationModel::stationRemoved(class RadioStation const &)
-	?title@RadioPlayLogItem@@QBE?AVQString@@XZ @ 208 NONAME ; class QString RadioPlayLogItem::title(void) const
-	??0RadioStation@@AAE@HI@Z @ 209 NONAME ; RadioStation::RadioStation(int, unsigned int)
-	?qt_metacall@RadioStationModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 210 NONAME ; int RadioStationModel::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?isDetached@RadioStation@@QBE_NXZ @ 211 NONAME ; bool RadioStation::isDetached(void) const
-	?hasDataChanged@RadioStation@@QBE_NV?$QFlags@W4ChangeFlag@RadioStation@@@@@Z @ 212 NONAME ; bool RadioStation::hasDataChanged(class QFlags<enum RadioStation::ChangeFlag>) const
-	?name@RadioStation@@QBE?AVQString@@XZ @ 213 NONAME ; class QString RadioStation::name(void) const
-	?data@RadioStationModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 214 NONAME ; class QVariant RadioStationModel::data(class QModelIndex const &, int) const
-	?getStaticMetaObject@RadioUiEngine@@SAABUQMetaObject@@XZ @ 215 NONAME ; struct QMetaObject const & RadioUiEngine::getStaticMetaObject(void)
-	?launchSongRecognition@RadioUiEngine@@QAEXXZ @ 216 NONAME ; void RadioUiEngine::launchSongRecognition(void)
-	?staticMetaObject@RadioPlayLogModel@@2UQMetaObject@@B @ 217 NONAME ; struct QMetaObject const RadioPlayLogModel::staticMetaObject
-	?rowCount@RadioStationModel@@UBEHABVQModelIndex@@@Z @ 218 NONAME ; int RadioStationModel::rowCount(class QModelIndex const &) const
-	?iterateCallSign@RadioStation@@AAE?AVQString@@HH@Z @ 219 NONAME ; class QString RadioStation::iterateCallSign(int, int)
-	?toggleMute@RadioUiEngine@@QAEXXZ @ 220 NONAME ; void RadioUiEngine::toggleMute(void)
-	??0RadioUiEngine@@QAE@PAVQObject@@@Z @ 221 NONAME ; RadioUiEngine::RadioUiEngine(class QObject *)
-	?tr@RadioPlayLogModel@@SA?AVQString@@PBD0@Z @ 222 NONAME ; class QString RadioPlayLogModel::tr(char const *, char const *)
-	?d_func@RadioUiEngine@@AAEPAVRadioUiEnginePrivate@@XZ @ 223 NONAME ; class RadioUiEnginePrivate * RadioUiEngine::d_func(void)
-	?currentSongReset@RadioPlayLogModel@@IAEXXZ @ 224 NONAME ; void RadioPlayLogModel::currentSongReset(void)
-	?minFrequency@RadioUiEngine@@QBEIXZ @ 225 NONAME ; unsigned int RadioUiEngine::minFrequency(void) const
-	?setPresetIndex@RadioStation@@AAEXH@Z @ 226 NONAME ; void RadioStation::setPresetIndex(int)
-	?setName@RadioStation@@AAEXABVQString@@@Z @ 227 NONAME ; void RadioStation::setName(class QString const &)
-	?frequencyStepSize@RadioUiEngine@@QBEIXZ @ 228 NONAME ; unsigned int RadioUiEngine::frequencyStepSize(void) const
-	?trUtf8@RadioStationModel@@SA?AVQString@@PBD0H@Z @ 229 NONAME ; class QString RadioStationModel::trUtf8(char const *, char const *, int)
-	?radioTextReceived@RadioStationModel@@IAEXABVRadioStation@@@Z @ 230 NONAME ; void RadioStationModel::radioTextReceived(class RadioStation const &)
-	?isFavorite@RadioStation@@QBE_NXZ @ 231 NONAME ; bool RadioStation::isFavorite(void) const
-	?station@RadioPlayLogItem@@QBE?AVQString@@XZ @ 232 NONAME ; class QString RadioPlayLogItem::station(void) const
-	?settings@RadioUiEngine@@QAEAAVRadioSettings@@XZ @ 233 NONAME ; class RadioSettings & RadioUiEngine::settings(void)
-	?seekingStarted@RadioUiEngine@@IAEXH@Z @ 234 NONAME ; void RadioUiEngine::seekingStarted(int)
-	?setFavorites@RadioStationModel@@QAEXABV?$QList@VQModelIndex@@@@@Z @ 235 NONAME ; void RadioStationModel::setFavorites(class QList<class QModelIndex> const &)
-	??_ERadioStationModel@@UAE@I@Z @ 236 NONAME ; RadioStationModel::~RadioStationModel(unsigned int)
-	??1RadioPlayLogItem@@UAE@XZ @ 237 NONAME ; RadioPlayLogItem::~RadioPlayLogItem(void)
-	?monitor@RadioUiEngine@@QAEAAVRadioMonitorService@@XZ @ 238 NONAME ; class RadioMonitorService & RadioUiEngine::monitor(void)
+	?setRadioTextPlus@RadioStation@@QAEXHABVQString@@@Z @ 169 NONAME ; void RadioStation::setRadioTextPlus(int, class QString const &)
+	?setData@RadioHistoryModel@@UAE_NABVQModelIndex@@ABVQVariant@@H@Z @ 170 NONAME ; bool RadioHistoryModel::setData(class QModelIndex const &, class QVariant const &, int)
+	??0RadioHistoryItem@@QAE@ABV0@@Z @ 171 NONAME ; RadioHistoryItem::RadioHistoryItem(class RadioHistoryItem const &)
+	?metaObject@RadioStationModel@@UBEPBUQMetaObject@@XZ @ 172 NONAME ; struct QMetaObject const * RadioStationModel::metaObject(void) const
+	?getStaticMetaObject@RadioStationModel@@SAABUQMetaObject@@XZ @ 173 NONAME ; struct QMetaObject const & RadioStationModel::getStaticMetaObject(void)
+	?tr@RadioScannerEngine@@SA?AVQString@@PBD0@Z @ 174 NONAME ; class QString RadioScannerEngine::tr(char const *, char const *)
+	?audioRouteChanged@RadioUiEngine@@IAEX_N@Z @ 175 NONAME ; void RadioUiEngine::audioRouteChanged(bool)
+	?tr@RadioHistoryModel@@SA?AVQString@@PBD0H@Z @ 176 NONAME ; class QString RadioHistoryModel::tr(char const *, char const *, int)
+	?dynamicPsText@RadioStation@@QBE?AVQString@@XZ @ 177 NONAME ; class QString RadioStation::dynamicPsText(void) const
+	?isFirstTimeStart@RadioUiEngine@@QAE_NXZ @ 178 NONAME ; bool RadioUiEngine::isFirstTimeStart(void)
+	?stationAdded@RadioStationModel@@IAEXABVRadioStation@@@Z @ 179 NONAME ; void RadioStationModel::stationAdded(class RadioStation const &)
+	?createScannerEngine@RadioUiEngine@@QAEPAVRadioScannerEngine@@XZ @ 180 NONAME ; class RadioScannerEngine * RadioUiEngine::createScannerEngine(void)
+	??0RadioScannerEngine@@QAE@AAVRadioUiEnginePrivate@@@Z @ 181 NONAME ; RadioScannerEngine::RadioScannerEngine(class RadioUiEnginePrivate &)
+	?emitRadioStatusChanged@RadioUiEngine@@AAEX_N@Z @ 182 NONAME ; void RadioUiEngine::emitRadioStatusChanged(bool)
+	?monitor@RadioUiEngine@@QAEAAVRadioMonitorService@@XZ @ 183 NONAME ; class RadioMonitorService & RadioUiEngine::monitor(void)
+	??_ERadioUiEngine@@UAE@I@Z @ 184 NONAME ; RadioUiEngine::~RadioUiEngine(unsigned int)
+	?setDynamicPsText@RadioStation@@QAEXABVQString@@@Z @ 185 NONAME ; void RadioStation::setDynamicPsText(class QString const &)
+	?changeFlags@RadioStation@@QBE?AV?$QFlags@W4ChangeFlag@RadioStation@@@@XZ @ 186 NONAME ; class QFlags<enum RadioStation::ChangeFlag> RadioStation::changeFlags(void) const
+	?d_func@RadioStationModel@@AAEPAVRadioStationModelPrivate@@XZ @ 187 NONAME ; class RadioStationModelPrivate * RadioStationModel::d_func(void)
+	?addRadioTextPlus@RadioHistoryModel@@AAEXHABVQString@@ABVRadioStation@@@Z @ 188 NONAME ; void RadioHistoryModel::addRadioTextPlus(int, class QString const &, class RadioStation const &)
+	?qt_metacast@RadioHistoryModel@@UAEPAXPBD@Z @ 189 NONAME ; void * RadioHistoryModel::qt_metacast(char const *)
+	?skipNext@RadioUiEngine@@QAEXXZ @ 190 NONAME ; void RadioUiEngine::skipNext(void)
+	?setDetail@RadioStationModel@@QAEXV?$QFlags@W4DetailFlag@RadioStationModel@@@@@Z @ 191 NONAME ; void RadioStationModel::setDetail(class QFlags<enum RadioStationModel::DetailFlag>)
+	?rowCount@RadioStationFilterModel@@UBEHABVQModelIndex@@@Z @ 192 NONAME ; int RadioStationFilterModel::rowCount(class QModelIndex const &) const
+	?removeAll@RadioHistoryModel@@QAEXXZ @ 193 NONAME ; void RadioHistoryModel::removeAll(void)
+	??1RadioUiEngine@@UAE@XZ @ 194 NONAME ; RadioUiEngine::~RadioUiEngine(void)
+	?tr@RadioHistoryModel@@SA?AVQString@@PBD0@Z @ 195 NONAME ; class QString RadioHistoryModel::tr(char const *, char const *)
+	?time@RadioHistoryItem@@QBE?AVQString@@XZ @ 196 NONAME ; class QString RadioHistoryItem::time(void) const
+	?artist@RadioHistoryItem@@QBE?AVQString@@XZ @ 197 NONAME ; class QString RadioHistoryItem::artist(void) const
+	?initialize@RadioStationModel@@QAEXPAVRadioPresetStorage@@PAVRadioEngineWrapper@@@Z @ 198 NONAME ; void RadioStationModel::initialize(class RadioPresetStorage *, class RadioEngineWrapper *)
+	?isType@RadioStation@@QBE_NV?$QFlags@W4TypeFlag@RadioStation@@@@@Z @ 199 NONAME ; bool RadioStation::isType(class QFlags<enum RadioStation::TypeFlag>) const
+	?setTypeFilter@RadioStationFilterModel@@QAEXV?$QFlags@W4TypeFlag@RadioStation@@@@@Z @ 200 NONAME ; void RadioStationFilterModel::setTypeFilter(class QFlags<enum RadioStation::TypeFlag>)
+	?resetCurrentSong@RadioHistoryModel@@QAEXXZ @ 201 NONAME ; void RadioHistoryModel::resetCurrentSong(void)
+	?d_func@RadioHistoryModel@@ABEPBVRadioHistoryModelPrivate@@XZ @ 202 NONAME ; class RadioHistoryModelPrivate const * RadioHistoryModel::d_func(void) const
+	?volumeChanged@RadioUiEngine@@IAEXH@Z @ 203 NONAME ; void RadioUiEngine::volumeChanged(int)
+	?title@RadioHistoryItem@@QBE?AVQString@@XZ @ 204 NONAME ; class QString RadioHistoryItem::title(void) const
+	?isFavorite@RadioHistoryItem@@QBE_NXZ @ 205 NONAME ; bool RadioHistoryItem::isFavorite(void) const
+	?stationFound@RadioScannerEngine@@IAEXABVRadioStation@@@Z @ 206 NONAME ; void RadioScannerEngine::stationFound(class RadioStation const &)
+	?resetChangeFlags@RadioStation@@QAEXXZ @ 207 NONAME ; void RadioStation::resetChangeFlags(void)
+	??_ERadioStationFilterModel@@UAE@I@Z @ 208 NONAME ; RadioStationFilterModel::~RadioStationFilterModel(unsigned int)
+	?data_ptr@RadioStation@@QAEAAPAVRadioStationPrivate@@XZ @ 209 NONAME ; class RadioStationPrivate * & RadioStation::data_ptr(void)
+	?metaObject@RadioScannerEngine@@UBEPBUQMetaObject@@XZ @ 210 NONAME ; struct QMetaObject const * RadioScannerEngine::metaObject(void) const
+	?qt_metacast@RadioScannerEngine@@UAEPAXPBD@Z @ 211 NONAME ; void * RadioScannerEngine::qt_metacast(char const *)
+	?callSignChar@RadioStation@@AAEDI@Z @ 212 NONAME ; char RadioStation::callSignChar(unsigned int)
+	??_ERadioStation@@UAE@I@Z @ 213 NONAME ; RadioStation::~RadioStation(unsigned int)
+	??1RadioHistoryItem@@UAE@XZ @ 214 NONAME ; RadioHistoryItem::~RadioHistoryItem(void)
+	?stationRemoved@RadioStationModel@@IAEXABVRadioStation@@@Z @ 215 NONAME ; void RadioStationModel::stationRemoved(class RadioStation const &)
+	?detach@RadioHistoryItem@@QAEXXZ @ 216 NONAME ; void RadioHistoryItem::detach(void)
+	?antennaStatusChanged@RadioUiEngine@@IAEX_N@Z @ 217 NONAME ; void RadioUiEngine::antennaStatusChanged(bool)
+	?staticMetaObject@RadioHistoryModel@@2UQMetaObject@@B @ 218 NONAME ; struct QMetaObject const RadioHistoryModel::staticMetaObject
+	?qt_metacall@RadioStationModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 219 NONAME ; int RadioStationModel::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?isDetached@RadioStation@@QBE_NXZ @ 220 NONAME ; bool RadioStation::isDetached(void) const
+	?setRadioText@RadioStation@@QAEXABVQString@@@Z @ 221 NONAME ; void RadioStation::setRadioText(class QString const &)
+	??0RadioHistoryItem@@QAE@ABVQString@@0@Z @ 222 NONAME ; RadioHistoryItem::RadioHistoryItem(class QString const &, class QString const &)
+	?name@RadioStation@@QBE?AVQString@@XZ @ 223 NONAME ; class QString RadioStation::name(void) const
+	?hasDataChanged@RadioStation@@QBE_NV?$QFlags@W4ChangeFlag@RadioStation@@@@@Z @ 224 NONAME ; bool RadioStation::hasDataChanged(class QFlags<enum RadioStation::ChangeFlag>) const
+	?data@RadioStationModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 225 NONAME ; class QVariant RadioStationModel::data(class QModelIndex const &, int) const
+	?itemAdded@RadioHistoryModel@@IAEXXZ @ 226 NONAME ; void RadioHistoryModel::itemAdded(void)
+	?data_ptr@RadioHistoryItem@@QAEAAPAVRadioHistoryItemPrivate@@XZ @ 227 NONAME ; class RadioHistoryItemPrivate * & RadioHistoryItem::data_ptr(void)
+	?getStaticMetaObject@RadioUiEngine@@SAABUQMetaObject@@XZ @ 228 NONAME ; struct QMetaObject const & RadioUiEngine::getStaticMetaObject(void)
+	?setShowDetails@RadioHistoryModel@@QAEX_N@Z @ 229 NONAME ; void RadioHistoryModel::setShowDetails(bool)
+	?launchSongRecognition@RadioUiEngine@@QAEXXZ @ 230 NONAME ; void RadioUiEngine::launchSongRecognition(void)
+	?rowCount@RadioStationModel@@UBEHABVQModelIndex@@@Z @ 231 NONAME ; int RadioStationModel::rowCount(class QModelIndex const &) const
+	?iterateCallSign@RadioStation@@AAE?AVQString@@HH@Z @ 232 NONAME ; class QString RadioStation::iterateCallSign(int, int)
+	?toggleMute@RadioUiEngine@@QAEXXZ @ 233 NONAME ; void RadioUiEngine::toggleMute(void)
+	?genreToString@RadioUiEngine@@QAE?AVQString@@HW4Target@GenreTarget@@@Z @ 234 NONAME ; class QString RadioUiEngine::genreToString(int, enum GenreTarget::Target)
+	??0RadioUiEngine@@QAE@PAVQObject@@@Z @ 235 NONAME ; RadioUiEngine::RadioUiEngine(class QObject *)
+	?setCurrentTime@RadioHistoryItem@@QAEXXZ @ 236 NONAME ; void RadioHistoryItem::setCurrentTime(void)
+	?d_func@RadioUiEngine@@AAEPAVRadioUiEnginePrivate@@XZ @ 237 NONAME ; class RadioUiEnginePrivate * RadioUiEngine::d_func(void)
+	?station@RadioHistoryItem@@QBE?AVQString@@XZ @ 238 NONAME ; class QString RadioHistoryItem::station(void) const
+	??_ERadioHistoryModel@@UAE@I@Z @ 239 NONAME ; RadioHistoryModel::~RadioHistoryModel(unsigned int)
+	?minFrequency@RadioUiEngine@@QBEIXZ @ 240 NONAME ; unsigned int RadioUiEngine::minFrequency(void) const
+	?addScannedFrequency@RadioScannerEngine@@QAEXI@Z @ 241 NONAME ; void RadioScannerEngine::addScannedFrequency(unsigned int)
+	?trUtf8@RadioHistoryModel@@SA?AVQString@@PBD0@Z @ 242 NONAME ; class QString RadioHistoryModel::trUtf8(char const *, char const *)
+	?frequencyStepSize@RadioUiEngine@@QBEIXZ @ 243 NONAME ; unsigned int RadioUiEngine::frequencyStepSize(void) const
+	??0RadioHistoryModel@@AAE@AAVRadioUiEngine@@@Z @ 244 NONAME ; RadioHistoryModel::RadioHistoryModel(class RadioUiEngine &)
+	?trUtf8@RadioStationModel@@SA?AVQString@@PBD0H@Z @ 245 NONAME ; class QString RadioStationModel::trUtf8(char const *, char const *, int)
+	?radioTextReceived@RadioStationModel@@IAEXABVRadioStation@@@Z @ 246 NONAME ; void RadioStationModel::radioTextReceived(class RadioStation const &)
+	?isFavorite@RadioStation@@QBE_NXZ @ 247 NONAME ; bool RadioStation::isFavorite(void) const
+	?settings@RadioUiEngine@@QAEAAVRadioSettings@@XZ @ 248 NONAME ; class RadioSettings & RadioUiEngine::settings(void)
+	?metaObject@RadioHistoryModel@@UBEPBUQMetaObject@@XZ @ 249 NONAME ; struct QMetaObject const * RadioHistoryModel::metaObject(void) const
+	?seekingStarted@RadioUiEngine@@IAEXH@Z @ 250 NONAME ; void RadioUiEngine::seekingStarted(int)
+	?setFavorites@RadioStationModel@@QAEXABV?$QList@VQModelIndex@@@@@Z @ 251 NONAME ; void RadioStationModel::setFavorites(class QList<class QModelIndex> const &)
+	?setArtist@RadioHistoryItem@@QAEXABVQString@@@Z @ 252 NONAME ; void RadioHistoryItem::setArtist(class QString const &)
+	??_ERadioStationModel@@UAE@I@Z @ 253 NONAME ; RadioStationModel::~RadioStationModel(unsigned int)
+	?setTitle@RadioHistoryItem@@QAEXABVQString@@@Z @ 254 NONAME ; void RadioHistoryItem::setTitle(class QString const &)
 
--- a/radioapp/bwins/radiowidgetsu.def	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/bwins/radiowidgetsu.def	Mon May 03 12:31:41 2010 +0300
@@ -1,109 +1,230 @@
 EXPORTS
-	?initListView@RadioStationsView@@AAEXXZ @ 1 NONAME ; void RadioStationsView::initListView(void)
-	?engineStatusChanged@RadioWizardView@@AAEX_N@Z @ 2 NONAME ; void RadioWizardView::engineStatusChanged(bool)
-	?startScanning@RadioWizardView@@AAEXXZ @ 3 NONAME ; void RadioWizardView::startScanning(void)
-	??1RadioWizardView@@UAE@XZ @ 4 NONAME ; RadioWizardView::~RadioWizardView(void)
-	?tr@RadioTuningView@@SA?AVQString@@PBD0H@Z @ 5 NONAME ; class QString RadioTuningView::tr(char const *, char const *, int)
-	?qt_metacast@RadioWizardView@@UAEPAXPBD@Z @ 6 NONAME ; void * RadioWizardView::qt_metacast(char const *)
-	?prepareToShowDialog@RadioMainWindow@@AAE?AV?$QSharedPointer@VHbView@@@@XZ @ 7 NONAME ; class QSharedPointer<class HbView> RadioMainWindow::prepareToShowDialog(void)
-	?trUtf8@RadioPlayLogView@@SA?AVQString@@PBD0H@Z @ 8 NONAME ; class QString RadioPlayLogView::trUtf8(char const *, char const *, int)
-	?headsetStatusChanged@RadioMainWindow@@AAEX_N@Z @ 9 NONAME ; void RadioMainWindow::headsetStatusChanged(bool)
-	?init@RadioStationsView@@EAEXPAVRadioMainWindow@@PAVRadioStationModel@@@Z @ 10 NONAME ; void RadioStationsView::init(class RadioMainWindow *, class RadioStationModel *)
-	?listItemLongPressed@RadioPlayLogView@@AAEXPAVHbAbstractViewItem@@ABVQPointF@@@Z @ 11 NONAME ; void RadioPlayLogView::listItemLongPressed(class HbAbstractViewItem *, class QPointF const &)
-	??_ERadioWizardView@@UAE@I@Z @ 12 NONAME ; RadioWizardView::~RadioWizardView(unsigned int)
-	??_ERadioStationsView@@UAE@I@Z @ 13 NONAME ; RadioStationsView::~RadioStationsView(unsigned int)
-	?activateStationsView@RadioMainWindow@@QAEXXZ @ 14 NONAME ; void RadioMainWindow::activateStationsView(void)
-	?activateView@RadioMainWindow@@AAEXAAV?$QPointer@VRadioViewBase@@@@ABVQString@@V?$QFlags@W4ViewSwitchFlag@Hb@@@@@Z @ 15 NONAME ; void RadioMainWindow::activateView(class QPointer<class RadioViewBase> &, class QString const &, class QFlags<enum Hb::ViewSwitchFlag>)
-	??0RadioWizardView@@QAE@PAVRadioXmlUiLoader@@@Z @ 16 NONAME ; RadioWizardView::RadioWizardView(class RadioXmlUiLoader *)
-	?getStaticMetaObject@RadioMainWindow@@SAABUQMetaObject@@XZ @ 17 NONAME ; struct QMetaObject const & RadioMainWindow::getStaticMetaObject(void)
-	??0RadioMainWindow@@QAE@PAVQWidget@@@Z @ 18 NONAME ; RadioMainWindow::RadioMainWindow(class QWidget *)
-	?updateVisibilities@RadioPlayLogView@@AAEXXZ @ 19 NONAME ; void RadioPlayLogView::updateVisibilities(void)
-	?startScanAndSavePresets@RadioStationsView@@AAEXXZ @ 20 NONAME ; void RadioStationsView::startScanAndSavePresets(void)
-	?activateWizardView@RadioMainWindow@@QAEXXZ @ 21 NONAME ; void RadioMainWindow::activateWizardView(void)
-	?tr@RadioMainWindow@@SA?AVQString@@PBD0H@Z @ 22 NONAME ; class QString RadioMainWindow::tr(char const *, char const *, int)
-	?isOfflineUsageAllowed@RadioMainWindow@@QAE_NXZ @ 23 NONAME ; bool RadioMainWindow::isOfflineUsageAllowed(void)
-	?getStaticMetaObject@RadioStationsView@@SAABUQMetaObject@@XZ @ 24 NONAME ; struct QMetaObject const & RadioStationsView::getStaticMetaObject(void)
-	??1RadioPlayLogView@@UAE@XZ @ 25 NONAME ; RadioPlayLogView::~RadioPlayLogView(void)
-	?listItemClicked@RadioStationsView@@AAEXABVQModelIndex@@@Z @ 26 NONAME ; void RadioStationsView::listItemClicked(class QModelIndex const &)
-	?qt_metacall@RadioPlayLogView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 27 NONAME ; int RadioPlayLogView::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?clearList@RadioPlayLogView@@AAEXXZ @ 28 NONAME ; void RadioPlayLogView::clearList(void)
-	?qt_metacall@RadioTuningView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 29 NONAME ; int RadioTuningView::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@RadioMainWindow@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 30 NONAME ; int RadioMainWindow::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?staticMetaObject@RadioMainWindow@@2UQMetaObject@@B @ 31 NONAME ; struct QMetaObject const RadioMainWindow::staticMetaObject
-	??_ERadioPlayLogView@@UAE@I@Z @ 32 NONAME ; RadioPlayLogView::~RadioPlayLogView(unsigned int)
-	??1RadioTuningView@@UAE@XZ @ 33 NONAME ; RadioTuningView::~RadioTuningView(void)
-	?updateHeading@RadioStationsView@@AAEXXZ @ 34 NONAME ; void RadioStationsView::updateHeading(void)
-	?showEvent@RadioWizardView@@EAEXPAVQShowEvent@@@Z @ 35 NONAME ; void RadioWizardView::showEvent(class QShowEvent *)
-	?metaObject@RadioWizardView@@UBEPBUQMetaObject@@XZ @ 36 NONAME ; struct QMetaObject const * RadioWizardView::metaObject(void) const
-	??0RadioTuningView@@QAE@PAVRadioXmlUiLoader@@@Z @ 37 NONAME ; RadioTuningView::RadioTuningView(class RadioXmlUiLoader *)
-	?init@RadioPlayLogView@@EAEXPAVRadioMainWindow@@PAVRadioStationModel@@@Z @ 38 NONAME ; void RadioPlayLogView::init(class RadioMainWindow *, class RadioStationModel *)
-	?trUtf8@RadioTuningView@@SA?AVQString@@PBD0H@Z @ 39 NONAME ; class QString RadioTuningView::trUtf8(char const *, char const *, int)
-	?tr@RadioStationsView@@SA?AVQString@@PBD0H@Z @ 40 NONAME ; class QString RadioStationsView::tr(char const *, char const *, int)
-	?dialogShown@RadioMainWindow@@AAEXV?$QSharedPointer@VHbView@@@@@Z @ 41 NONAME ; void RadioMainWindow::dialogShown(class QSharedPointer<class HbView>)
-	?saveSelectedAsFavorites@RadioWizardView@@AAEXXZ @ 42 NONAME ; void RadioWizardView::saveSelectedAsFavorites(void)
-	?deckButtonPressed@RadioPlayLogView@@AAEXXZ @ 43 NONAME ; void RadioPlayLogView::deckButtonPressed(void)
-	?updateHeadsetStatus@RadioStationsView@@AAEX_N@Z @ 44 NONAME ; void RadioStationsView::updateHeadsetStatus(bool)
-	?setNowPlayingIcon@RadioStationsView@@QAEXABVHbIcon@@@Z @ 45 NONAME ; void RadioStationsView::setNowPlayingIcon(class HbIcon const &)
-	?tr@RadioStationsView@@SA?AVQString@@PBD0@Z @ 46 NONAME ; class QString RadioStationsView::tr(char const *, char const *)
-	?trUtf8@RadioWizardView@@SA?AVQString@@PBD0@Z @ 47 NONAME ; class QString RadioWizardView::trUtf8(char const *, char const *)
-	?trUtf8@RadioMainWindow@@SA?AVQString@@PBD0H@Z @ 48 NONAME ; class QString RadioMainWindow::trUtf8(char const *, char const *, int)
-	?tr@RadioWizardView@@SA?AVQString@@PBD0@Z @ 49 NONAME ; class QString RadioWizardView::tr(char const *, char const *)
-	?showErrorMessage@RadioMainWindow@@QAEXABVQString@@@Z @ 50 NONAME ; void RadioMainWindow::showErrorMessage(class QString const &)
-	??0RadioStationsView@@QAE@PAVRadioXmlUiLoader@@@Z @ 51 NONAME ; RadioStationsView::RadioStationsView(class RadioXmlUiLoader *)
-	?favoriteIcon@RadioStationsView@@QBE?AVHbIcon@@XZ @ 52 NONAME ; class HbIcon RadioStationsView::favoriteIcon(void) const
-	?setFavoriteIcon@RadioStationsView@@QAEXABVHbIcon@@@Z @ 53 NONAME ; void RadioStationsView::setFavoriteIcon(class HbIcon const &)
-	?showVolumeLevel@RadioMainWindow@@AAEXH@Z @ 54 NONAME ; void RadioMainWindow::showVolumeLevel(int)
-	?trUtf8@RadioStationsView@@SA?AVQString@@PBD0H@Z @ 55 NONAME ; class QString RadioStationsView::trUtf8(char const *, char const *, int)
-	?updateCurrentStation@RadioStationsView@@AAEXXZ @ 56 NONAME ; void RadioStationsView::updateCurrentStation(void)
-	?qt_metacast@RadioMainWindow@@UAEPAXPBD@Z @ 57 NONAME ; void * RadioMainWindow::qt_metacast(char const *)
-	?tr@RadioPlayLogView@@SA?AVQString@@PBD0@Z @ 58 NONAME ; class QString RadioPlayLogView::tr(char const *, char const *)
-	?getStaticMetaObject@RadioPlayLogView@@SAABUQMetaObject@@XZ @ 59 NONAME ; struct QMetaObject const & RadioPlayLogView::getStaticMetaObject(void)
-	?init@RadioWizardView@@EAEXPAVRadioMainWindow@@PAVRadioStationModel@@@Z @ 60 NONAME ; void RadioWizardView::init(class RadioMainWindow *, class RadioStationModel *)
-	?showContextMenu@RadioPlayLogView@@AAEXABVQModelIndex@@@Z @ 61 NONAME ; void RadioPlayLogView::showContextMenu(class QModelIndex const &)
-	??_ERadioMainWindow@@UAE@I@Z @ 62 NONAME ; RadioMainWindow::~RadioMainWindow(unsigned int)
-	?trUtf8@RadioTuningView@@SA?AVQString@@PBD0@Z @ 63 NONAME ; class QString RadioTuningView::trUtf8(char const *, char const *)
-	?tr@RadioWizardView@@SA?AVQString@@PBD0H@Z @ 64 NONAME ; class QString RadioWizardView::tr(char const *, char const *, int)
-	?init@RadioTuningView@@EAEXPAVRadioMainWindow@@PAVRadioStationModel@@@Z @ 65 NONAME ; void RadioTuningView::init(class RadioMainWindow *, class RadioStationModel *)
-	?tr@RadioTuningView@@SA?AVQString@@PBD0@Z @ 66 NONAME ; class QString RadioTuningView::tr(char const *, char const *)
-	??_ERadioTuningView@@UAE@I@Z @ 67 NONAME ; RadioTuningView::~RadioTuningView(unsigned int)
-	?staticMetaObject@RadioStationsView@@2UQMetaObject@@B @ 68 NONAME ; struct QMetaObject const RadioStationsView::staticMetaObject
-	?nowPlayingIcon@RadioStationsView@@QBE?AVHbIcon@@XZ @ 69 NONAME ; class HbIcon RadioStationsView::nowPlayingIcon(void) const
-	?uiEngine@RadioMainWindow@@QAEAAVRadioUiEngine@@XZ @ 70 NONAME ; class RadioUiEngine & RadioMainWindow::uiEngine(void)
-	?qt_metacast@RadioTuningView@@UAEPAXPBD@Z @ 71 NONAME ; void * RadioTuningView::qt_metacast(char const *)
-	?qt_metacall@RadioWizardView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 72 NONAME ; int RadioWizardView::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?staticMetaObject@RadioPlayLogView@@2UQMetaObject@@B @ 73 NONAME ; struct QMetaObject const RadioPlayLogView::staticMetaObject
-	??0RadioPlayLogView@@QAE@PAVRadioXmlUiLoader@@@Z @ 74 NONAME ; RadioPlayLogView::RadioPlayLogView(class RadioXmlUiLoader *)
-	??1RadioStationsView@@UAE@XZ @ 75 NONAME ; RadioStationsView::~RadioStationsView(void)
-	?listItemClicked@RadioPlayLogView@@AAEXABVQModelIndex@@@Z @ 76 NONAME ; void RadioPlayLogView::listItemClicked(class QModelIndex const &)
-	?showEvent@RadioStationsView@@EAEXPAVQShowEvent@@@Z @ 77 NONAME ; void RadioStationsView::showEvent(class QShowEvent *)
-	?getStaticMetaObject@RadioWizardView@@SAABUQMetaObject@@XZ @ 78 NONAME ; struct QMetaObject const & RadioWizardView::getStaticMetaObject(void)
+	?qt_metacast@RadioHistoryView@@UAEPAXPBD@Z @ 1 NONAME ; void * RadioHistoryView::qt_metacast(char const *)
+	?qt_metacast@RadioFadingLabel@@UAEPAXPBD@Z @ 2 NONAME ; void * RadioFadingLabel::qt_metacast(char const *)
+	?tr@RadioBannerLabel@@SA?AVQString@@PBD0@Z @ 3 NONAME ; class QString RadioBannerLabel::tr(char const *, char const *)
+	?toggleButtons@RadioFrequencyStrip@@AAEXXZ @ 4 NONAME ; void RadioFrequencyStrip::toggleButtons(void)
+	?animateNewStation@RadioStationCarousel@@QAEXABVRadioStation@@@Z @ 5 NONAME ; void RadioStationCarousel::animateNewStation(class RadioStation const &)
+	?getStaticMetaObject@RadioBannerLabel@@SAABUQMetaObject@@XZ @ 6 NONAME ; struct QMetaObject const & RadioBannerLabel::getStaticMetaObject(void)
+	?frequencyChanged@RadioFrequencyStrip@@IAEXIH@Z @ 7 NONAME ; void RadioFrequencyStrip::frequencyChanged(unsigned int, int)
+	?rename@RadioStationsView@@AAEXXZ @ 8 NONAME ; void RadioStationsView::rename(void)
+	?init@RadioHistoryView@@EAEXPAVRadioXmlUiLoader@@PAVRadioMainWindow@@@Z @ 9 NONAME ; void RadioHistoryView::init(class RadioXmlUiLoader *, class RadioMainWindow *)
+	?seekingFinished@RadioTuningView@@AAEXXZ @ 10 NONAME ; void RadioTuningView::seekingFinished(void)
+	??1RadioBannerLabel@@UAE@XZ @ 11 NONAME ; RadioBannerLabel::~RadioBannerLabel(void)
+	?setFavoriteIcon@RadioStationCarousel@@QAEXABVHbIcon@@@Z @ 12 NONAME ; void RadioStationCarousel::setFavoriteIcon(class HbIcon const &)
+	?prepareToShowDialog@RadioMainWindow@@AAE?AV?$QSharedPointer@VHbView@@@@XZ @ 13 NONAME ; class QSharedPointer<class HbView> RadioMainWindow::prepareToShowDialog(void)
+	?update@RadioStationCarousel@@AAEXABVRadioStation@@@Z @ 14 NONAME ; void RadioStationCarousel::update(class RadioStation const &)
+	?seekingStarted@RadioTuningView@@AAEXXZ @ 15 NONAME ; void RadioTuningView::seekingStarted(void)
+	?stationAdded@RadioFrequencyStrip@@QAEXABVRadioStation@@@Z @ 16 NONAME ; void RadioFrequencyStrip::stationAdded(class RadioStation const &)
+	?addFrequencyPos@RadioFrequencyStrip@@AAEXHIPAVRadioFrequencyItem@@@Z @ 17 NONAME ; void RadioFrequencyStrip::addFrequencyPos(int, unsigned int, class RadioFrequencyItem *)
+	?trUtf8@RadioFadingLabel@@SA?AVQString@@PBD0@Z @ 18 NONAME ; class QString RadioFadingLabel::trUtf8(char const *, char const *)
+	?setScanningMode@RadioFrequencyStrip@@QAEX_N@Z @ 19 NONAME ; void RadioFrequencyStrip::setScanningMode(bool)
+	?mouseReleaseEvent@RadioStationCarousel@@EAEXPAVQGraphicsSceneMouseEvent@@@Z @ 20 NONAME ; void RadioStationCarousel::mouseReleaseEvent(class QGraphicsSceneMouseEvent *)
+	?delayedScroll@RadioStationCarousel@@AAEXXZ @ 21 NONAME ; void RadioStationCarousel::delayedScroll(void)
+	?createItemPrimitive@RadioFrequencyStrip@@EAEPAVQGraphicsItem@@PAV2@@Z @ 22 NONAME ; class QGraphicsItem * RadioFrequencyStrip::createItemPrimitive(class QGraphicsItem *)
+	?activateStationsView@RadioMainWindow@@QAEXXZ @ 23 NONAME ; void RadioMainWindow::activateStationsView(void)
+	??_ERadioStationsView@@UAE@I@Z @ 24 NONAME ; RadioStationsView::~RadioStationsView(unsigned int)
+	?setTextWithoutFading@RadioFadingLabel@@QAEXABVQString@@@Z @ 25 NONAME ; void RadioFadingLabel::setTextWithoutFading(class QString const &)
+	??0RadioMainWindow@@QAE@PAVQWidget@@@Z @ 26 NONAME ; RadioMainWindow::RadioMainWindow(class QWidget *)
+	?resizeEvent@RadioFrequencyStrip@@EAEXPAVQGraphicsSceneResizeEvent@@@Z @ 27 NONAME ; void RadioFrequencyStrip::resizeEvent(class QGraphicsSceneResizeEvent *)
+	?tr@RadioMainWindow@@SA?AVQString@@PBD0H@Z @ 28 NONAME ; class QString RadioMainWindow::tr(char const *, char const *, int)
+	?startScanning@RadioStationsView@@AAEXXZ @ 29 NONAME ; void RadioStationsView::startScanning(void)
+	?initButtons@RadioFrequencyStrip@@AAEXXZ @ 30 NONAME ; void RadioFrequencyStrip::initButtons(void)
+	?qt_metacall@RadioStationCarousel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 31 NONAME ; int RadioStationCarousel::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?leftButtonIcon@RadioFrequencyStrip@@QBE?AVHbIcon@@XZ @ 32 NONAME ; class HbIcon RadioFrequencyStrip::leftButtonIcon(void) const
+	?qt_metacall@RadioMainWindow@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 33 NONAME ; int RadioMainWindow::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?staticMetaObject@RadioMainWindow@@2UQMetaObject@@B @ 34 NONAME ; struct QMetaObject const RadioMainWindow::staticMetaObject
+	?insertFrequency@RadioStationCarousel@@AAEXABVQModelIndex@@HH@Z @ 35 NONAME ; void RadioStationCarousel::insertFrequency(class QModelIndex const &, int, int)
+	?tr@RadioBannerLabel@@SA?AVQString@@PBD0H@Z @ 36 NONAME ; class QString RadioBannerLabel::tr(char const *, char const *, int)
+	?startScanning@RadioTuningView@@AAEXXZ @ 37 NONAME ; void RadioTuningView::startScanning(void)
+	?updateLoopedPos@RadioStationCarousel@@AAEXXZ @ 38 NONAME ; void RadioStationCarousel::updateLoopedPos(void)
+	?setAutoScrollTime@RadioStationCarousel@@QAEXH@Z @ 39 NONAME ; void RadioStationCarousel::setAutoScrollTime(int)
+	?setLeftButtonIcon@RadioFrequencyStrip@@QAEXABVHbIcon@@@Z @ 40 NONAME ; void RadioFrequencyStrip::setLeftButtonIcon(class HbIcon const &)
+	?trUtf8@RadioStationCarousel@@SA?AVQString@@PBD0@Z @ 41 NONAME ; class QString RadioStationCarousel::trUtf8(char const *, char const *)
+	?tr@RadioStationCarousel@@SA?AVQString@@PBD0@Z @ 42 NONAME ; class QString RadioStationCarousel::tr(char const *, char const *)
+	?selectorPos@RadioFrequencyStrip@@ABEHXZ @ 43 NONAME ; int RadioFrequencyStrip::selectorPos(void) const
+	?currentStationItem@RadioStationCarousel@@AAEPAVRadioStationItem@@XZ @ 44 NONAME ; class RadioStationItem * RadioStationCarousel::currentStationItem(void)
+	?trUtf8@RadioTuningView@@SA?AVQString@@PBD0H@Z @ 45 NONAME ; class QString RadioTuningView::trUtf8(char const *, char const *, int)
+	?updateFrequencies@RadioStationCarousel@@AAEXXZ @ 46 NONAME ; void RadioStationCarousel::updateFrequencies(void)
+	?metaObject@RadioBannerLabel@@UBEPBUQMetaObject@@XZ @ 47 NONAME ; struct QMetaObject const * RadioBannerLabel::metaObject(void) const
+	?dialogShown@RadioMainWindow@@AAEXV?$QSharedPointer@VHbView@@@@@Z @ 48 NONAME ; void RadioMainWindow::dialogShown(class QSharedPointer<class HbView>)
+	?updateAntennaStatus@RadioMainWindow@@AAEX_N@Z @ 49 NONAME ; void RadioMainWindow::updateAntennaStatus(bool)
+	?stationRemoved@RadioFrequencyStrip@@QAEXABVRadioStation@@@Z @ 50 NONAME ; void RadioFrequencyStrip::stationRemoved(class RadioStation const &)
+	?init@RadioStationsView@@EAEXPAVRadioXmlUiLoader@@PAVRadioMainWindow@@@Z @ 51 NONAME ; void RadioStationsView::init(class RadioXmlUiLoader *, class RadioMainWindow *)
+	?setText@RadioFadingLabel@@QAEXABVQString@@@Z @ 52 NONAME ; void RadioFadingLabel::setText(class QString const &)
+	?setNowPlayingIcon@RadioStationsView@@QAEXABVHbIcon@@@Z @ 53 NONAME ; void RadioStationsView::setNowPlayingIcon(class HbIcon const &)
+	?trUtf8@RadioFrequencyStrip@@SA?AVQString@@PBD0@Z @ 54 NONAME ; class QString RadioFrequencyStrip::trUtf8(char const *, char const *)
+	?tr@RadioStationsView@@SA?AVQString@@PBD0@Z @ 55 NONAME ; class QString RadioStationsView::tr(char const *, char const *)
+	?favoriteIcon@RadioStationCarousel@@QBE?AVHbIcon@@XZ @ 56 NONAME ; class HbIcon RadioStationCarousel::favoriteIcon(void) const
+	?qt_metacall@RadioBannerLabel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 57 NONAME ; int RadioBannerLabel::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?showErrorMessage@RadioMainWindow@@QAEXABVQString@@@Z @ 58 NONAME ; void RadioMainWindow::showErrorMessage(class QString const &)
+	?favoriteIcon@RadioStationsView@@QBE?AVHbIcon@@XZ @ 59 NONAME ; class HbIcon RadioStationsView::favoriteIcon(void) const
+	??1RadioFrequencyStrip@@UAE@XZ @ 60 NONAME ; RadioFrequencyStrip::~RadioFrequencyStrip(void)
+	?showVolumeLevel@RadioMainWindow@@AAEXH@Z @ 61 NONAME ; void RadioMainWindow::showVolumeLevel(int)
+	?trUtf8@RadioStationsView@@SA?AVQString@@PBD0H@Z @ 62 NONAME ; class QString RadioStationsView::trUtf8(char const *, char const *, int)
+	?updateFavorites@RadioFrequencyStrip@@AAEXPAVRadioFrequencyItem@@@Z @ 63 NONAME ; void RadioFrequencyStrip::updateFavorites(class RadioFrequencyItem *)
+	?showContextMenu@RadioHistoryView@@AAEXABVQModelIndex@@@Z @ 64 NONAME ; void RadioHistoryView::showContextMenu(class QModelIndex const &)
+	?changeEvent@RadioFrequencyStrip@@EAEXPAVQEvent@@@Z @ 65 NONAME ; void RadioFrequencyStrip::changeEvent(class QEvent *)
+	?staticMetaObject@RadioStationCarousel@@2UQMetaObject@@B @ 66 NONAME ; struct QMetaObject const RadioStationCarousel::staticMetaObject
+	?qt_metacall@RadioFadingLabel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 67 NONAME ; int RadioFadingLabel::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?trUtf8@RadioBannerLabel@@SA?AVQString@@PBD0H@Z @ 68 NONAME ; class QString RadioBannerLabel::trUtf8(char const *, char const *, int)
+	?rightGesture@RadioStationCarousel@@EAEXH@Z @ 69 NONAME ; void RadioStationCarousel::rightGesture(int)
+	?resizeEvent@RadioStationCarousel@@EAEXPAVQGraphicsSceneResizeEvent@@@Z @ 70 NONAME ; void RadioStationCarousel::resizeEvent(class QGraphicsSceneResizeEvent *)
+	?setRightButtonIcon@RadioFrequencyStrip@@QAEXABVHbIcon@@@Z @ 71 NONAME ; void RadioFrequencyStrip::setRightButtonIcon(class HbIcon const &)
+	??_ERadioTuningView@@UAE@I@Z @ 72 NONAME ; RadioTuningView::~RadioTuningView(unsigned int)
+	?listItemClicked@RadioHistoryView@@AAEXABVQModelIndex@@@Z @ 73 NONAME ; void RadioHistoryView::listItemClicked(class QModelIndex const &)
+	?staticMetaObject@RadioStationsView@@2UQMetaObject@@B @ 74 NONAME ; struct QMetaObject const RadioStationsView::staticMetaObject
+	??_ERadioBannerLabel@@UAE@I@Z @ 75 NONAME ; RadioBannerLabel::~RadioBannerLabel(unsigned int)
+	?qt_metacast@RadioTuningView@@UAEPAXPBD@Z @ 76 NONAME ; void * RadioTuningView::qt_metacast(char const *)
+	?removeInfoText@RadioTuningView@@AAEXXZ @ 77 NONAME ; void RadioTuningView::removeInfoText(void)
+	?tr@RadioFrequencyStrip@@SA?AVQString@@PBD0@Z @ 78 NONAME ; class QString RadioFrequencyStrip::tr(char const *, char const *)
 	?qt_metacast@RadioStationsView@@UAEPAXPBD@Z @ 79 NONAME ; void * RadioStationsView::qt_metacast(char const *)
-	?metaObject@RadioTuningView@@UBEPBUQMetaObject@@XZ @ 80 NONAME ; struct QMetaObject const * RadioTuningView::metaObject(void) const
-	?trUtf8@RadioStationsView@@SA?AVQString@@PBD0@Z @ 81 NONAME ; class QString RadioStationsView::trUtf8(char const *, char const *)
-	?tr@RadioPlayLogView@@SA?AVQString@@PBD0H@Z @ 82 NONAME ; class QString RadioPlayLogView::tr(char const *, char const *, int)
-	?qt_metacast@RadioPlayLogView@@UAEPAXPBD@Z @ 83 NONAME ; void * RadioPlayLogView::qt_metacast(char const *)
-	?qt_metacall@RadioStationsView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 84 NONAME ; int RadioStationsView::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?staticMetaObject@RadioWizardView@@2UQMetaObject@@B @ 85 NONAME ; struct QMetaObject const RadioWizardView::staticMetaObject
-	?updateControlVisibilities@RadioStationsView@@AAEXXZ @ 86 NONAME ; void RadioStationsView::updateControlVisibilities(void)
-	?listItemLongPressed@RadioStationsView@@AAEXPAVHbAbstractViewItem@@ABVQPointF@@@Z @ 87 NONAME ; void RadioStationsView::listItemLongPressed(class HbAbstractViewItem *, class QPointF const &)
-	?trUtf8@RadioPlayLogView@@SA?AVQString@@PBD0@Z @ 88 NONAME ; class QString RadioPlayLogView::trUtf8(char const *, char const *)
-	?setOrientation@RadioPlayLogView@@EAEXXZ @ 89 NONAME ; void RadioPlayLogView::setOrientation(void)
-	?activatePlayLogView@RadioMainWindow@@QAEXXZ @ 90 NONAME ; void RadioMainWindow::activatePlayLogView(void)
-	?init@RadioMainWindow@@QAEXPAVRadioUiEngine@@@Z @ 91 NONAME ; void RadioMainWindow::init(class RadioUiEngine *)
-	?setOrientation@RadioTuningView@@EAEXXZ @ 92 NONAME ; void RadioTuningView::setOrientation(void)
-	?listItemClicked@RadioWizardView@@AAEXABVQModelIndex@@@Z @ 93 NONAME ; void RadioWizardView::listItemClicked(class QModelIndex const &)
-	?staticMetaObject@RadioTuningView@@2UQMetaObject@@B @ 94 NONAME ; struct QMetaObject const RadioTuningView::staticMetaObject
-	??1RadioMainWindow@@UAE@XZ @ 95 NONAME ; RadioMainWindow::~RadioMainWindow(void)
-	?metaObject@RadioMainWindow@@UBEPBUQMetaObject@@XZ @ 96 NONAME ; struct QMetaObject const * RadioMainWindow::metaObject(void) const
-	?deckButtonPressed@RadioStationsView@@AAEXXZ @ 97 NONAME ; void RadioStationsView::deckButtonPressed(void)
-	?metaObject@RadioPlayLogView@@UBEPBUQMetaObject@@XZ @ 98 NONAME ; struct QMetaObject const * RadioPlayLogView::metaObject(void) const
-	?trUtf8@RadioMainWindow@@SA?AVQString@@PBD0@Z @ 99 NONAME ; class QString RadioMainWindow::trUtf8(char const *, char const *)
-	?getStaticMetaObject@RadioTuningView@@SAABUQMetaObject@@XZ @ 100 NONAME ; struct QMetaObject const & RadioTuningView::getStaticMetaObject(void)
-	?trUtf8@RadioWizardView@@SA?AVQString@@PBD0H@Z @ 101 NONAME ; class QString RadioWizardView::trUtf8(char const *, char const *, int)
-	?activateTuningView@RadioMainWindow@@QAEXXZ @ 102 NONAME ; void RadioMainWindow::activateTuningView(void)
-	?tr@RadioMainWindow@@SA?AVQString@@PBD0@Z @ 103 NONAME ; class QString RadioMainWindow::tr(char const *, char const *)
-	?metaObject@RadioStationsView@@UBEPBUQMetaObject@@XZ @ 104 NONAME ; struct QMetaObject const * RadioStationsView::metaObject(void) const
-	?orientationSection@RadioMainWindow@@QAE?AVQString@@XZ @ 105 NONAME ; class QString RadioMainWindow::orientationSection(void)
-	?toggleFavorite@RadioTuningView@@AAEXXZ @ 106 NONAME ; void RadioTuningView::toggleFavorite(void)
-	?updateOrientation@RadioMainWindow@@AAEXW4Orientation@Qt@@@Z @ 107 NONAME ; void RadioMainWindow::updateOrientation(enum Qt::Orientation)
+	?initSelector@RadioFrequencyStrip@@AAEXXZ @ 80 NONAME ; void RadioFrequencyStrip::initSelector(void)
+	?qt_metacall@RadioFrequencyStrip@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 81 NONAME ; int RadioFrequencyStrip::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?metaObject@RadioTuningView@@UBEPBUQMetaObject@@XZ @ 82 NONAME ; struct QMetaObject const * RadioTuningView::metaObject(void) const
+	?metaObject@RadioFrequencyStrip@@UBEPBUQMetaObject@@XZ @ 83 NONAME ; struct QMetaObject const * RadioFrequencyStrip::metaObject(void) const
+	?startEffect@RadioFadingLabel@@AAEXABVQString@@PBD@Z @ 84 NONAME ; void RadioFadingLabel::startEffect(class QString const &, char const *)
+	?trUtf8@RadioStationsView@@SA?AVQString@@PBD0@Z @ 85 NONAME ; class QString RadioStationsView::trUtf8(char const *, char const *)
+	?activateHistoryView@RadioMainWindow@@QAEXXZ @ 86 NONAME ; void RadioMainWindow::activateHistoryView(void)
+	?qt_metacast@RadioBannerLabel@@UAEPAXPBD@Z @ 87 NONAME ; void * RadioBannerLabel::qt_metacast(char const *)
+	?qt_metacall@RadioStationsView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 88 NONAME ; int RadioStationsView::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?updateAntennaStatus@RadioTuningView@@AAEX_N@Z @ 89 NONAME ; void RadioTuningView::updateAntennaStatus(bool)
+	?swipedRight@RadioFrequencyStrip@@IAEXXZ @ 90 NONAME ; void RadioFrequencyStrip::swipedRight(void)
+	??_ERadioStationCarousel@@UAE@I@Z @ 91 NONAME ; RadioStationCarousel::~RadioStationCarousel(unsigned int)
+	?tr@RadioFadingLabel@@SA?AVQString@@PBD0@Z @ 92 NONAME ; class QString RadioFadingLabel::tr(char const *, char const *)
+	?getStaticMetaObject@RadioFadingLabel@@SAABUQMetaObject@@XZ @ 93 NONAME ; struct QMetaObject const & RadioFadingLabel::getStaticMetaObject(void)
+	?trUtf8@RadioHistoryView@@SA?AVQString@@PBD0@Z @ 94 NONAME ; class QString RadioHistoryView::trUtf8(char const *, char const *)
+	?staticMetaObject@RadioTuningView@@2UQMetaObject@@B @ 95 NONAME ; struct QMetaObject const RadioTuningView::staticMetaObject
+	??1RadioMainWindow@@UAE@XZ @ 96 NONAME ; RadioMainWindow::~RadioMainWindow(void)
+	??0RadioTuningView@@QAE@XZ @ 97 NONAME ; RadioTuningView::RadioTuningView(void)
+	?clearList@RadioHistoryView@@AAEXXZ @ 98 NONAME ; void RadioHistoryView::clearList(void)
+	?getStaticMetaObject@RadioTuningView@@SAABUQMetaObject@@XZ @ 99 NONAME ; struct QMetaObject const & RadioTuningView::getStaticMetaObject(void)
+	?init@RadioStationCarousel@@QAEXPAVRadioUiEngine@@@Z @ 100 NONAME ; void RadioStationCarousel::init(class RadioUiEngine *)
+	?trimHtml@RadioFadingLabel@@AAE?AVQString@@ABV2@@Z @ 101 NONAME ; class QString RadioFadingLabel::trimHtml(class QString const &)
+	?leftGesture@RadioStationCarousel@@EAEXH@Z @ 102 NONAME ; void RadioStationCarousel::leftGesture(int)
+	?setStationModel@RadioStationCarousel@@QAEXPAVRadioStationModel@@@Z @ 103 NONAME ; void RadioStationCarousel::setStationModel(class RadioStationModel *)
+	?listItemLongPressed@RadioHistoryView@@AAEXPAVHbAbstractViewItem@@ABVQPointF@@@Z @ 104 NONAME ; void RadioHistoryView::listItemLongPressed(class HbAbstractViewItem *, class QPointF const &)
+	?scanningFinished@RadioTuningView@@AAEXXZ @ 105 NONAME ; void RadioTuningView::scanningFinished(void)
+	?orientationSection@RadioMainWindow@@QAE?AVQString@@XZ @ 106 NONAME ; class QString RadioMainWindow::orientationSection(void)
+	?toggleFavorite@RadioTuningView@@AAEXXZ @ 107 NONAME ; void RadioTuningView::toggleFavorite(void)
+	?buttonPressed@RadioTuningView@@AAEXXZ @ 108 NONAME ; void RadioTuningView::buttonPressed(void)
+	?mouseReleaseEvent@RadioFrequencyStrip@@EAEXPAVQGraphicsSceneMouseEvent@@@Z @ 109 NONAME ; void RadioFrequencyStrip::mouseReleaseEvent(class QGraphicsSceneMouseEvent *)
+	?updateItemPrimitive@RadioFrequencyStrip@@EAEXPAVQGraphicsItem@@H@Z @ 110 NONAME ; void RadioFrequencyStrip::updateItemPrimitive(class QGraphicsItem *, int)
+	?getStaticMetaObject@RadioFrequencyStrip@@SAABUQMetaObject@@XZ @ 111 NONAME ; struct QMetaObject const & RadioFrequencyStrip::getStaticMetaObject(void)
+	?removeFrequency@RadioStationCarousel@@AAEXABVQModelIndex@@HH@Z @ 112 NONAME ; void RadioStationCarousel::removeFrequency(class QModelIndex const &, int, int)
+	??0RadioFadingLabel@@QAE@PAVQGraphicsItem@@@Z @ 113 NONAME ; RadioFadingLabel::RadioFadingLabel(class QGraphicsItem *)
+	?frequency@RadioFrequencyStrip@@QBEIPA_N@Z @ 114 NONAME ; unsigned int RadioFrequencyStrip::frequency(bool *) const
+	?initListView@RadioStationsView@@AAEXXZ @ 115 NONAME ; void RadioStationsView::initListView(void)
+	?setScanningMode@RadioTuningView@@QAEX_N@Z @ 116 NONAME ; void RadioTuningView::setScanningMode(bool)
+	?initModel@RadioFrequencyStrip@@AAEXXZ @ 117 NONAME ; void RadioFrequencyStrip::initModel(void)
+	?tr@RadioTuningView@@SA?AVQString@@PBD0H@Z @ 118 NONAME ; class QString RadioTuningView::tr(char const *, char const *, int)
+	??0RadioStationsView@@QAE@XZ @ 119 NONAME ; RadioStationsView::RadioStationsView(void)
+	?panGesture@RadioFrequencyStrip@@EAEXABVQPointF@@@Z @ 120 NONAME ; void RadioFrequencyStrip::panGesture(class QPointF const &)
+	??0RadioBannerLabel@@QAE@PAVQGraphicsItem@@@Z @ 121 NONAME ; RadioBannerLabel::RadioBannerLabel(class QGraphicsItem *)
+	??1RadioStationCarousel@@UAE@XZ @ 122 NONAME ; RadioStationCarousel::~RadioStationCarousel(void)
+	?deckButtonPressed@RadioHistoryView@@AAEXXZ @ 123 NONAME ; void RadioHistoryView::deckButtonPressed(void)
+	?stationModel@RadioStationCarousel@@ABEPAVRadioStationModel@@XZ @ 124 NONAME ; class RadioStationModel * RadioStationCarousel::stationModel(void) const
+	?setFrequency@RadioStationCarousel@@QAEXI@Z @ 125 NONAME ; void RadioStationCarousel::setFrequency(unsigned int)
+	??_ERadioFrequencyStrip@@UAE@I@Z @ 126 NONAME ; RadioFrequencyStrip::~RadioFrequencyStrip(unsigned int)
+	?setFadingEnabled@RadioFadingLabel@@QAEX_N@Z @ 127 NONAME ; void RadioFadingLabel::setFadingEnabled(bool)
+	?activateView@RadioMainWindow@@AAEXAAV?$QPointer@VRadioViewBase@@@@ABVQString@@V?$QFlags@W4ViewSwitchFlag@Hb@@@@@Z @ 128 NONAME ; void RadioMainWindow::activateView(class QPointer<class RadioViewBase> &, class QString const &, class QFlags<enum Hb::ViewSwitchFlag>)
+	?scrollToIndex@RadioStationCarousel@@AAEXABVQModelIndex@@H@Z @ 129 NONAME ; void RadioStationCarousel::scrollToIndex(class QModelIndex const &, int)
+	?frequencyChanged@RadioStationCarousel@@IAEXIH@Z @ 130 NONAME ; void RadioStationCarousel::frequencyChanged(unsigned int, int)
+	?getStaticMetaObject@RadioMainWindow@@SAABUQMetaObject@@XZ @ 131 NONAME ; struct QMetaObject const & RadioMainWindow::getStaticMetaObject(void)
+	?mousePressEvent@RadioFrequencyStrip@@EAEXPAVQGraphicsSceneMouseEvent@@@Z @ 132 NONAME ; void RadioFrequencyStrip::mousePressEvent(class QGraphicsSceneMouseEvent *)
+	?drawPixmap@RadioFrequencyStrip@@AAE?AVQPixmap@@IV?$QList@VRadioStation@@@@PAVRadioFrequencyItem@@@Z @ 133 NONAME ; class QPixmap RadioFrequencyStrip::drawPixmap(unsigned int, class QList<class RadioStation>, class RadioFrequencyItem *)
+	?getStaticMetaObject@RadioStationsView@@SAABUQMetaObject@@XZ @ 134 NONAME ; struct QMetaObject const & RadioStationsView::getStaticMetaObject(void)
+	?isOfflineUsageAllowed@RadioMainWindow@@QAE_NXZ @ 135 NONAME ; bool RadioMainWindow::isOfflineUsageAllowed(void)
+	?listItemClicked@RadioStationsView@@AAEXABVQModelIndex@@@Z @ 136 NONAME ; void RadioStationsView::listItemClicked(class QModelIndex const &)
+	?updateAntennaStatus@RadioStationsView@@AAEX_N@Z @ 137 NONAME ; void RadioStationsView::updateAntennaStatus(bool)
+	?tr@RadioFadingLabel@@SA?AVQString@@PBD0H@Z @ 138 NONAME ; class QString RadioFadingLabel::tr(char const *, char const *, int)
+	?updateRadioText@RadioStationCarousel@@AAEXABVRadioStation@@@Z @ 139 NONAME ; void RadioStationCarousel::updateRadioText(class RadioStation const &)
+	?qt_metacall@RadioTuningView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 140 NONAME ; int RadioTuningView::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?frequencyIsFavorite@RadioFrequencyStrip@@IAEX_N@Z @ 141 NONAME ; void RadioFrequencyStrip::frequencyIsFavorite(bool)
+	?updateAntennaStatus@RadioStationCarousel@@QAEX_N@Z @ 142 NONAME ; void RadioStationCarousel::updateAntennaStatus(bool)
+	?paint@RadioBannerLabel@@EAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 143 NONAME ; void RadioBannerLabel::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *)
+	?updateAudioRoute@RadioTuningView@@AAEX_N@Z @ 144 NONAME ; void RadioTuningView::updateAudioRoute(bool)
+	??1RadioTuningView@@UAE@XZ @ 145 NONAME ; RadioTuningView::~RadioTuningView(void)
+	?staticMetaObject@RadioFadingLabel@@2UQMetaObject@@B @ 146 NONAME ; struct QMetaObject const RadioFadingLabel::staticMetaObject
+	?trUtf8@RadioFrequencyStrip@@SA?AVQString@@PBD0H@Z @ 147 NONAME ; class QString RadioFrequencyStrip::trUtf8(char const *, char const *, int)
+	?tr@RadioFrequencyStrip@@SA?AVQString@@PBD0H@Z @ 148 NONAME ; class QString RadioFrequencyStrip::tr(char const *, char const *, int)
+	?trUtf8@RadioBannerLabel@@SA?AVQString@@PBD0@Z @ 149 NONAME ; class QString RadioBannerLabel::trUtf8(char const *, char const *)
+	?getStaticMetaObject@RadioStationCarousel@@SAABUQMetaObject@@XZ @ 150 NONAME ; struct QMetaObject const & RadioStationCarousel::getStaticMetaObject(void)
+	?metaObject@RadioFadingLabel@@UBEPBUQMetaObject@@XZ @ 151 NONAME ; struct QMetaObject const * RadioFadingLabel::metaObject(void) const
+	?staticMetaObject@RadioFrequencyStrip@@2UQMetaObject@@B @ 152 NONAME ; struct QMetaObject const RadioFrequencyStrip::staticMetaObject
+	?tr@RadioStationsView@@SA?AVQString@@PBD0H@Z @ 153 NONAME ; class QString RadioStationsView::tr(char const *, char const *, int)
+	?autoScrollTime@RadioStationCarousel@@QBEHXZ @ 154 NONAME ; int RadioStationCarousel::autoScrollTime(void) const
+	?qt_metacast@RadioStationCarousel@@UAEPAXPBD@Z @ 155 NONAME ; void * RadioStationCarousel::qt_metacast(char const *)
+	?showEvent@RadioFrequencyStrip@@EAEXPAVQShowEvent@@@Z @ 156 NONAME ; void RadioFrequencyStrip::showEvent(class QShowEvent *)
+	?init@RadioTuningView@@EAEXPAVRadioXmlUiLoader@@PAVRadioMainWindow@@@Z @ 157 NONAME ; void RadioTuningView::init(class RadioXmlUiLoader *, class RadioMainWindow *)
+	?setFrequency@RadioFrequencyStrip@@QAEXIH@Z @ 158 NONAME ; void RadioFrequencyStrip::setFrequency(unsigned int, int)
+	?setItemVisibility@RadioStationCarousel@@QAEX_N@Z @ 159 NONAME ; void RadioStationCarousel::setItemVisibility(bool)
+	?trUtf8@RadioMainWindow@@SA?AVQString@@PBD0H@Z @ 160 NONAME ; class QString RadioMainWindow::trUtf8(char const *, char const *, int)
+	?favoriteChanged@RadioFrequencyStrip@@QAEXABVRadioStation@@@Z @ 161 NONAME ; void RadioFrequencyStrip::favoriteChanged(class RadioStation const &)
+	?tr@RadioHistoryView@@SA?AVQString@@PBD0H@Z @ 162 NONAME ; class QString RadioHistoryView::tr(char const *, char const *, int)
+	?setFavoriteIcon@RadioStationsView@@QAEXABVHbIcon@@@Z @ 163 NONAME ; void RadioStationsView::setFavoriteIcon(class HbIcon const &)
+	??0RadioHistoryView@@QAE@XZ @ 164 NONAME ; RadioHistoryView::RadioHistoryView(void)
+	?metaObject@RadioStationCarousel@@UBEPBUQMetaObject@@XZ @ 165 NONAME ; struct QMetaObject const * RadioStationCarousel::metaObject(void) const
+	?emitFavoriteSelected@RadioFrequencyStrip@@AAEX_N@Z @ 166 NONAME ; void RadioFrequencyStrip::emitFavoriteSelected(bool)
+	?effectFinished@RadioFadingLabel@@AAEXUEffectStatus@HbEffect@@@Z @ 167 NONAME ; void RadioFadingLabel::effectFinished(struct HbEffect::EffectStatus)
+	?updateCurrentStation@RadioStationsView@@AAEXXZ @ 168 NONAME ; void RadioStationsView::updateCurrentStation(void)
+	?setOrientation@RadioHistoryView@@EAEXXZ @ 169 NONAME ; void RadioHistoryView::setOrientation(void)
+	?nonFavoriteIcon@RadioStationCarousel@@QBE?AVHbIcon@@XZ @ 170 NONAME ; class HbIcon RadioStationCarousel::nonFavoriteIcon(void) const
+	?scrollToFrequency@RadioFrequencyStrip@@AAEXIH@Z @ 171 NONAME ; void RadioFrequencyStrip::scrollToFrequency(unsigned int, int)
+	?qt_metacast@RadioMainWindow@@UAEPAXPBD@Z @ 172 NONAME ; void * RadioMainWindow::qt_metacast(char const *)
+	?uiEngine@RadioStationCarousel@@QAEPAVRadioUiEngine@@XZ @ 173 NONAME ; class RadioUiEngine * RadioStationCarousel::uiEngine(void)
+	?trUtf8@RadioFadingLabel@@SA?AVQString@@PBD0H@Z @ 174 NONAME ; class QString RadioFadingLabel::trUtf8(char const *, char const *, int)
+	?scrollPosChanged@RadioFrequencyStrip@@EAEXVQPointF@@@Z @ 175 NONAME ; void RadioFrequencyStrip::scrollPosChanged(class QPointF)
+	?deleteStation@RadioStationsView@@AAEXXZ @ 176 NONAME ; void RadioStationsView::deleteStation(void)
+	?rightButtonIcon@RadioFrequencyStrip@@QBE?AVHbIcon@@XZ @ 177 NONAME ; class HbIcon RadioFrequencyStrip::rightButtonIcon(void) const
+	?setScanningMode@RadioStationCarousel@@QAEX_N@Z @ 178 NONAME ; void RadioStationCarousel::setScanningMode(bool)
+	?setNonFavoriteIcon@RadioStationCarousel@@QAEXABVHbIcon@@@Z @ 179 NONAME ; void RadioStationCarousel::setNonFavoriteIcon(class HbIcon const &)
+	??1RadioFadingLabel@@UAE@XZ @ 180 NONAME ; RadioFadingLabel::~RadioFadingLabel(void)
+	?isInScanningMode@RadioStationCarousel@@QBE_NXZ @ 181 NONAME ; bool RadioStationCarousel::isInScanningMode(void) const
+	?tr@RadioHistoryView@@SA?AVQString@@PBD0@Z @ 182 NONAME ; class QString RadioHistoryView::tr(char const *, char const *)
+	?staticMetaObject@RadioBannerLabel@@2UQMetaObject@@B @ 183 NONAME ; struct QMetaObject const RadioBannerLabel::staticMetaObject
+	?getStaticMetaObject@RadioHistoryView@@SAABUQMetaObject@@XZ @ 184 NONAME ; struct QMetaObject const & RadioHistoryView::getStaticMetaObject(void)
+	??_ERadioMainWindow@@UAE@I@Z @ 185 NONAME ; RadioMainWindow::~RadioMainWindow(unsigned int)
+	?isAntennaAttached@RadioStationCarousel@@QBE_NXZ @ 186 NONAME ; bool RadioStationCarousel::isAntennaAttached(void) const
+	?metaObject@RadioHistoryView@@UBEPBUQMetaObject@@XZ @ 187 NONAME ; struct QMetaObject const * RadioHistoryView::metaObject(void) const
+	?trUtf8@RadioTuningView@@SA?AVQString@@PBD0@Z @ 188 NONAME ; class QString RadioTuningView::trUtf8(char const *, char const *)
+	?connectRightButton@RadioFrequencyStrip@@QAEXPBDPAVQObject@@0@Z @ 189 NONAME ; void RadioFrequencyStrip::connectRightButton(char const *, class QObject *, char const *)
+	?tr@RadioStationCarousel@@SA?AVQString@@PBD0H@Z @ 190 NONAME ; class QString RadioStationCarousel::tr(char const *, char const *, int)
+	??_ERadioHistoryView@@UAE@I@Z @ 191 NONAME ; RadioHistoryView::~RadioHistoryView(unsigned int)
+	?tr@RadioTuningView@@SA?AVQString@@PBD0@Z @ 192 NONAME ; class QString RadioTuningView::tr(char const *, char const *)
+	?leftGesture@RadioFrequencyStrip@@EAEXH@Z @ 193 NONAME ; void RadioFrequencyStrip::leftGesture(int)
+	?qt_metacall@RadioHistoryView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 194 NONAME ; int RadioHistoryView::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?trUtf8@RadioStationCarousel@@SA?AVQString@@PBD0H@Z @ 195 NONAME ; class QString RadioStationCarousel::trUtf8(char const *, char const *, int)
+	?nowPlayingIcon@RadioStationsView@@QBE?AVHbIcon@@XZ @ 196 NONAME ; class HbIcon RadioStationsView::nowPlayingIcon(void) const
+	?radioTextPlusCheckEnded@RadioStationCarousel@@AAEXXZ @ 197 NONAME ; void RadioStationCarousel::radioTextPlusCheckEnded(void)
+	?toggleFavorite@RadioStationsView@@AAEXXZ @ 198 NONAME ; void RadioStationsView::toggleFavorite(void)
+	?uiEngine@RadioMainWindow@@QAEAAVRadioUiEngine@@XZ @ 199 NONAME ; class RadioUiEngine & RadioMainWindow::uiEngine(void)
+	?rightGesture@RadioFrequencyStrip@@EAEXH@Z @ 200 NONAME ; void RadioFrequencyStrip::rightGesture(int)
+	??1RadioStationsView@@UAE@XZ @ 201 NONAME ; RadioStationsView::~RadioStationsView(void)
+	?initItems@RadioFrequencyStrip@@AAEXXZ @ 202 NONAME ; void RadioFrequencyStrip::initItems(void)
+	?showEvent@RadioStationsView@@EAEXPAVQShowEvent@@@Z @ 203 NONAME ; void RadioStationsView::showEvent(class QShowEvent *)
+	?emitFrequencyChanged@RadioFrequencyStrip@@AAEXI@Z @ 204 NONAME ; void RadioFrequencyStrip::emitFrequencyChanged(unsigned int)
+	??_ERadioFadingLabel@@UAE@I@Z @ 205 NONAME ; RadioFadingLabel::~RadioFadingLabel(unsigned int)
+	?trUtf8@RadioHistoryView@@SA?AVQString@@PBD0H@Z @ 206 NONAME ; class QString RadioHistoryView::trUtf8(char const *, char const *, int)
+	?updateVisibilities@RadioHistoryView@@AAEXXZ @ 207 NONAME ; void RadioHistoryView::updateVisibilities(void)
+	?updateControlVisibilities@RadioStationsView@@AAEXXZ @ 208 NONAME ; void RadioStationsView::updateControlVisibilities(void)
+	?listItemLongPressed@RadioStationsView@@AAEXPAVHbAbstractViewItem@@ABVQPointF@@@Z @ 209 NONAME ; void RadioStationsView::listItemLongPressed(class HbAbstractViewItem *, class QPointF const &)
+	?init@RadioMainWindow@@QAEXPAVRadioUiEngine@@@Z @ 210 NONAME ; void RadioMainWindow::init(class RadioUiEngine *)
+	??0RadioFrequencyStrip@@QAE@PAVRadioUiEngine@@@Z @ 211 NONAME ; RadioFrequencyStrip::RadioFrequencyStrip(class RadioUiEngine *)
+	?setOrientation@RadioTuningView@@EAEXXZ @ 212 NONAME ; void RadioTuningView::setOrientation(void)
+	??1RadioHistoryView@@UAE@XZ @ 213 NONAME ; RadioHistoryView::~RadioHistoryView(void)
+	?metaObject@RadioMainWindow@@UBEPBUQMetaObject@@XZ @ 214 NONAME ; struct QMetaObject const * RadioMainWindow::metaObject(void) const
+	?swipedLeft@RadioFrequencyStrip@@IAEXXZ @ 215 NONAME ; void RadioFrequencyStrip::swipedLeft(void)
+	?deckButtonPressed@RadioStationsView@@AAEXXZ @ 216 NONAME ; void RadioStationsView::deckButtonPressed(void)
+	?qt_metacast@RadioFrequencyStrip@@UAEPAXPBD@Z @ 217 NONAME ; void * RadioFrequencyStrip::qt_metacast(char const *)
+	??0RadioStationCarousel@@QAE@PAVRadioUiEngine@@@Z @ 218 NONAME ; RadioStationCarousel::RadioStationCarousel(class RadioUiEngine *)
+	?trUtf8@RadioMainWindow@@SA?AVQString@@PBD0@Z @ 219 NONAME ; class QString RadioMainWindow::trUtf8(char const *, char const *)
+	?mouseMoveEvent@RadioStationCarousel@@EAEXPAVQGraphicsSceneMouseEvent@@@Z @ 220 NONAME ; void RadioStationCarousel::mouseMoveEvent(class QGraphicsSceneMouseEvent *)
+	?connectLeftButton@RadioFrequencyStrip@@QAEXPBDPAVQObject@@0@Z @ 221 NONAME ; void RadioFrequencyStrip::connectLeftButton(char const *, class QObject *, char const *)
+	?activateTuningView@RadioMainWindow@@QAEXXZ @ 222 NONAME ; void RadioMainWindow::activateTuningView(void)
+	?tr@RadioMainWindow@@SA?AVQString@@PBD0@Z @ 223 NONAME ; class QString RadioMainWindow::tr(char const *, char const *)
+	?staticMetaObject@RadioHistoryView@@2UQMetaObject@@B @ 224 NONAME ; struct QMetaObject const RadioHistoryView::staticMetaObject
+	?metaObject@RadioStationsView@@UBEPBUQMetaObject@@XZ @ 225 NONAME ; struct QMetaObject const * RadioStationsView::metaObject(void) const
+	?cleanRdsData@RadioStationCarousel@@QAEXXZ @ 226 NONAME ; void RadioStationCarousel::cleanRdsData(void)
+	?updateOrientation@RadioMainWindow@@AAEXW4Orientation@Qt@@@Z @ 227 NONAME ; void RadioMainWindow::updateOrientation(enum Qt::Orientation)
+	?scanAnimationFinished@RadioStationCarousel@@IAEXXZ @ 228 NONAME ; void RadioStationCarousel::scanAnimationFinished(void)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/commoninc/radio_global.h	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,170 @@
+/*
+* 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:
+*
+*/
+
+#ifndef RADIO_GLOBAL_H_
+#define RADIO_GLOBAL_H_
+
+// System includes
+#include <QtGlobal>
+
+// Constants
+
+/**
+ * Radio frequency multiplier
+ */
+const int KFrequencyMultiplier = 1000000;
+
+const int KOneHertz = KFrequencyMultiplier;
+
+/**
+ * Desired amount of steps in the volume control in the UI
+ */
+const int KMaximumVolumeLevel = 20;
+
+/**
+ * Id of the offline profile
+ */
+const int KOfflineProfileId = 5;
+
+/**
+ * Radio Text Plus tag ids
+ */
+namespace RtPlus
+{
+    enum Tag { Title = 1, Artist = 4, Homepage = 39 };
+}
+
+namespace Seeking
+{
+    enum Direction
+    {
+        Down,
+        Up
+    };
+
+    enum State
+    {
+        NotSeeking,
+        SeekingUp,
+        SeekingDown
+    };
+}
+
+namespace TuneReason
+{
+    enum Reason
+    {
+        Unspecified,
+        FrequencyStrip,
+        StationCarousel,
+        Seek,
+        StationScanInitialization,
+        StationScan,
+    };
+}
+
+namespace RadioRegion
+{
+    enum Region
+    {
+        None = -1,
+        Default,
+        Japan,
+        America,
+        Poland
+    };
+}
+
+namespace GenreEurope
+{
+    enum Europe
+    {
+        RdsNone,
+        RdsNews,
+        RdsCurrentAffairs,
+        RdsInformation,
+        RdsSport,
+        RdsEducation,
+        RdsDrama,
+        RdsCulture,
+        RdsScience,
+        RdsVariedSpeech,
+        RdsPopMusic,
+        RdsRockMusic,
+        RdsEasyListening,
+        RdsLightClassical,
+        RdsSeriousClassical,
+        RdsOtherMusic,
+        RdsWeather,
+        RdsFinance,
+        RdsChildrensProgrammes,
+        RdsSocialAffairs,
+        RdsReligion,
+        RdsPhoneIn,
+        RdsTravel,
+        RdsLeisure,
+        RdsJazzMusic,
+        RdsCountryMusic,
+        RdsNationalMusic,
+        RdsOldiesMusic,
+        RdsFolkMusic,
+        RdsDocumentary,
+        RdsAlarmTest,
+        RdsAlarm
+    };
+}
+
+namespace GenreAmerica
+{
+    enum America
+    {
+        RbdsNone,
+        RbdsNews,
+        RbdsInformation,
+        RbdsSports,
+        RbdsTalk,
+        RbdsRock,
+        RbdsClassicRock,
+        RbdsAdultHits,
+        RbdsSoftRock,
+        RbdsTop40,
+        RbdsCountry,
+        RbdsOldies,
+        RbdsSoft,
+        RbdsNostalgia,
+        RbdsJazz,
+        RbdsClassical,
+        RbdsRhythmAndBlues,
+        RbdsSoftRhythmAndBlues,
+        RbdsLanguage,
+        RbdsReligiousMusic,
+        RbdsReligiousTalk,
+        RbdsPersonality,
+        RbdsPublic,
+        RbdsCollege,
+        RbdsUnassigned1,
+        RbdsUnassigned2,
+        RbdsUnassigned3,
+        RbdsUnassigned4,
+        RbdsUnassigned5,
+        RbdsWeather,
+        RbdsEmergencyTest,
+        RbdsEmergency
+    };
+}
+
+#endif // RADIO_GLOBAL_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/commoninc/radiologger.h	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,291 @@
+/*
+* 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:
+*
+*/
+
+#ifndef _RADIOLOGGER_H_
+#define _RADIOLOGGER_H_
+
+// System includes
+#include <QObject>
+
+// User includes
+
+#ifdef BUILD_WRAPPER_DLL
+    #define WRAPPER_DLL_EXPORT Q_DECL_EXPORT
+#else
+    #define WRAPPER_DLL_EXPORT Q_DECL_IMPORT
+#endif
+
+class WRAPPER_DLL_EXPORT RadioLogger
+{
+public:
+
+    enum Mode { Normal, MethodEnter, MethodExit, DecIndent };
+
+    static void initCombinedLogger();
+    static void releaseCombinedLogger();
+
+    static void logMsg( const char* msg, Mode mode = Normal );
+
+private:
+    RadioLogger();
+    ~RadioLogger();
+};
+
+// ============================================================================
+// START TIMESTAMP LOGGING
+// ============================================================================
+
+#ifdef TIMESTAMP_LOGGING_ENABLED
+
+#include <QTime>
+#include <QDebug>
+
+/**
+ * Timestamp logging macro.
+ * When the macro is defined, timestamp logging is on
+ *
+ * Example. These lines in the code...
+ *  LOG_TIMESTAMP( "Start operation" );
+ *  ...
+ *  LOG_TIMESTAMP( "End operation" );
+ *
+ * ... print the following log lines
+ *  FMRadio: Start operation "14:13:09.042"
+ *  FMRadio: End operation "14:13:09.250"
+ */
+//#define LOG_TIMESTAMP(comment) do{ qDebug() << LOGMARKER << comment << QTime::currentTime().toString("hh:mm:ss.zzz"); }while(0)
+#define LOG_TIMESTAMP(comment) LOG_FORMAT( comment ## " %s", GETSTRING( QTime::currentTime().toString("hh:mm:ss.zzz") ) )
+
+#else
+
+#define LOG_TIMESTAMP(comment)
+
+#endif // TIMESTAMP_LOGGING_ENABLED
+
+// ============================================================================
+// END TIMESTAMP LOGGING
+// ============================================================================
+
+// ============================================================================
+// START FULL LOGGING
+// ============================================================================
+
+#ifdef LOGGING_ENABLED
+
+#include <QtGlobal>
+#include <QDebug>
+
+// UI logs can be combined with engine logs by making the UI feed its log prints into
+// the engine logger. This requires that we initialize the radio engine utils right here
+// because the engine won't start up until much later. This is a bit ugly since the macros
+// call Symbian code directly, but it was considered to be worth it to see UI and engine
+// traces in the same file.
+#if defined COMBINE_WITH_ENGINE_LOGGER && defined LOGGING_ENABLED && !defined BUILD_WIN32
+#   include "../../../radioengine/utils/api/mradioenginelogger.h"
+#   include "../../../radioengine/utils/api/radioengineutils.h"
+#   define WRITELOG(msg) RadioLogger::logMsg( msg );
+#   define WRITELOG_METHOD_ENTER(msg) RadioLogger::logMsg( GETSTRING( msg ), RadioLogger::MethodEnter );
+#   define WRITELOG_METHOD_EXIT(msg) RadioLogger::logMsg( GETSTRING( msg ), RadioLogger::MethodExit );
+#   define LOGGER_DEC_INDENT RadioLogger::logMsg( "", RadioLogger::DecIndent );
+#   define WRITELOG_GETSTRING(msg) WRITELOG( GETSTRING( msg ) )
+#   define INIT_COMBINED_LOGGER RadioLogger::initCombinedLogger();
+#   define RELEASE_COMBINED_LOGGER RadioLogger::releaseCombinedLogger();
+#else
+#   define WRITELOG(msg) qDebug() << LOGMARKER << msg;
+#   define WRITELOG_METHOD_ENTER(msg) WRITELOG(msg)
+#   define WRITELOG_METHOD_EXIT(msg) WRITELOG(msg)
+#   define WRITELOG_GETSTRING(msg) WRITELOG(msg)
+#   define LOGGER_INC_INDENT
+#   define LOGGER_DEC_INDENT
+#   define INIT_COMBINED_LOGGER
+#   define RELEASE_COMBINED_LOGGER
+#endif
+
+// Macro that simply logs a string
+// Example:
+// LOG( "This is a test" );
+#define LOG(string) do{ WRITELOG( string ) }while(0)
+
+// Helper macro to get a const char* out of a QString so that it can be logged. Can be used with LOG_FORMAT()
+#define GETSTRING(qstring) qstring.toAscii().constData()
+
+// Macro that logs a string with multiple parameters
+// Examples:
+// LOG_FORMAT( "This is an integer %d, and this is a float with two digits %.2f", 42, 3.14 );
+// LOG_FORMAT( "This is a QString %s", GETSTRING(someQString) );
+#define LOG_FORMAT(fmt,args...) do{ QString tmp; WRITELOG_GETSTRING( tmp.sprintf(fmt,args) ) }while(0)
+
+// Macro that logs function enter, exit and exception
+// Example (Simply put it in the beginning of a function):
+// LOG_METHOD;
+// Output:
+// -> SomeFunction(int,const char*)
+// <- SomeFunction(int,const char*)
+// <- SomeFunction(int,const char*): Exception raised!
+#define LOG_METHOD MethodLogger ___methodLogger( __PRETTY_FUNCTION__, "" )
+
+// Same as the previous function logging macro with the addition of logging the return value
+// Note! The return value can only be retrieved in the emulator.
+// Example (Simply put it in the beginning of a function):
+// LOG_METHOD_RET( "%d" );
+// Output:
+// -> SomeFunction(int,const char*)
+// <- SomeFunction(int,const char*) returning 42
+#define LOG_METHOD_RET(fmt) MethodLogger ___methodLogger( __PRETTY_FUNCTION__, fmt )
+
+// Logs function enter but does not log exit or leave. This is meant to be lighter than LOG_METHOD macro
+#define LOG_METHOD_ENTER LOG_FORMAT( "Enter: %s", __PRETTY_FUNCTION__ )
+
+// Assert macro for logging. If the condition is false, the expression is performed
+// Example:
+// LOG_ASSERT( thisMustBeTrue, LOG_FORMAT( "OMG! That was not true: %d", thisMustBeTrue ) );
+#define LOG_ASSERT(cond,expr) do{ if (!cond) { expr; } }while(0)
+
+// Macro to hide a function variable that is used only when debugging is enabled.
+// Expands to the variable name when debugging is enabled and to nothing when it is not
+#define DEBUGVAR(a) a
+
+// Macro to log slot function caller by its class name.
+#define LOG_SLOT_CALLER do { \
+        QObject* caller = sender(); \
+        if ( caller ) { \
+            LOG_FORMAT( "SLOT %s called by %s. Objectname: %s", __PRETTY_FUNCTION__, \
+                caller->metaObject()->className(), GETSTRING( caller->objectName() ) ); \
+        } else { \
+            LOG_FORMAT( "SLOT %s called as regular function. ", __PRETTY_FUNCTION__ ); \
+        } \
+    } while (0)
+
+// Class declaration
+class WRAPPER_DLL_EXPORT MethodLogger
+{
+public:
+
+    MethodLogger( const char* function, const char* format );
+    ~MethodLogger();
+
+private:
+
+    const char* mFunction;
+    const char* mFormat;
+
+};
+
+#else // LOGGING_ENABLED
+
+#   define LOG(string)
+#   define GETSTRING(qstring)
+#   define LOG_FORMAT(fmt,args...)
+#   define LOG_METHOD
+#   define LOG_METHOD_RET(fmt)
+#   define LOG_METHOD_ENTER
+#   define LOG_ASSERT(cond,expr)
+#   define DEBUGVAR(a)
+#   define LOG_SLOT_CALLER
+#   define INIT_COMBINED_LOGGER
+#   define RELEASE_COMBINED_LOGGER
+
+
+// Dummy class
+class WRAPPER_DLL_EXPORT MethodLogger
+{
+public:
+    MethodLogger( const char*, const char* );
+    ~MethodLogger();
+};
+
+#endif // LOGGING_ENABLED
+
+#ifdef TRACE_TO_FILE
+
+#   define INSTALL_MESSAGE_HANDLER FileLogger::installMessageHandler(QString(TRACE_OUTPUT_FILE), FILTER_BY_LOGMARKER);
+#   define UNINSTALL_MESSAGE_HANDLER FileLogger::uninstallMessageHandler();
+
+// Class declaration
+class WRAPPER_DLL_EXPORT FileLogger
+{
+public:
+
+    static void installMessageHandler( const QString& fileName, bool filterByMarker = true );
+    static void uninstallMessageHandler();
+
+private:
+
+    static void handleMessage( QtMsgType type, const char* msg );
+
+};
+
+#else
+#   define INSTALL_MESSAGE_HANDLER
+#   define UNINSTALL_MESSAGE_HANDLER
+#endif // TRACE_TO_FILE
+
+// ============================================================================
+// END FULL LOGGING
+// ============================================================================
+
+// ============================================================================
+// SIGNAL/SLOT CONNECTION CHECKER
+// ============================================================================
+static bool connectAndTest( const QObject* sender, const char* signal,
+                            const QObject* receiver, const char* member,
+                            Qt::ConnectionType type = Qt::AutoConnection )
+{
+    bool connected = QObject::connect( sender, signal, receiver, member, type );
+
+#   ifdef CONNECT_TEST_MODE
+
+    if ( !connected )
+    {
+        LOG( "Failed to make a signal-slot connection!" );
+        LOG_FORMAT( "sender: %s", sender->metaObject()->className() );
+        LOG_FORMAT( "signal: %s", signal );
+        LOG_FORMAT( "receiver: %s", receiver->metaObject()->className() );
+        LOG_FORMAT( "slot/signal: %s", signal );
+
+        #if CONNECT_TEST_MODE == 2
+            Q_ASSERT( false );
+        #endif
+
+        // ----------------------------------------------------------------
+        // SIGNAL-SLOT CONNECTION FAILED!
+        // ----------------------------------------------------------------
+    }
+
+#   endif
+
+    return connected;
+}
+
+#ifdef ENABLE_ASSERTS
+
+    #define RADIO_ASSERT(cond,where,what) Q_ASSERT_X(cond,where,what)
+
+#else
+#   ifdef LOGGING_ENABLED
+#       define RADIO_ASSERT(cond,where,what) \
+            do { \
+                if ( !cond ) { \
+                    LOG_FORMAT( "ASSERT Failed! %s, %s", where, what ); \
+                } \
+            } while ( false )
+#   else
+#       define RADIO_ASSERT(cond,where,what)
+#   endif // LOGGING_ENABLED
+#endif // ENABLE_ASSERTS
+
+#endif // _RADIOLOGGER_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/commoninc/radionotificationdata.h	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,57 @@
+/*
+* 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:
+*
+*/
+
+#ifndef RADIONOTIFICATIONDATA_H
+#define RADIONOTIFICATIONDATA_H
+
+class RadioNotificationData
+{
+public:
+
+    RadioNotificationData() : mType( 0 ) {}
+    RadioNotificationData( int type, const QVariant& data ) :
+        mType( type ),
+        mData( data )
+    {}
+
+    virtual ~RadioNotificationData() {}
+
+    template <typename Stream> void serialize( Stream& stream ) const;
+    template <typename Stream> void deserialize( Stream& stream );
+
+    int         mType;
+    QVariant    mData;
+
+};
+
+Q_DECLARE_USER_METATYPE(RadioNotificationData)
+
+template <typename Stream> void RadioNotificationData::serialize( Stream& stream ) const
+{
+    stream << mType;
+    stream << mData;
+}
+
+template <typename Stream> void RadioNotificationData::deserialize( Stream& stream )
+{
+    stream >> mType;
+    stream >> mData;
+}
+
+Q_IMPLEMENT_USER_METATYPE(RadioNotificationData)
+
+#endif // RADIONOTIFICATIONDATA_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/commoninc/radioservicedef.h	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,66 @@
+/*
+* 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:
+*
+*/
+
+#ifndef RADIOSERVICES_H
+#define RADIOSERVICES_H
+
+static const char* RADIO_CONTROL_SERVICE = "com.nokia.services.Radio.IRadioControl";
+static const char* RADIO_MONITOR_SERVICE = "com.nokia.services.Radio.IRadioMonitor";
+
+const long KRadioPSUid = 0x101FF976;
+const unsigned long KRadioStartupKey = 0x00000014;
+
+namespace RadioServiceCommand
+{
+    enum CommandId
+    {
+        Play,
+        Pause,
+        Previous,
+        Next,
+        SeekUp,
+        SeekDown,
+        Foreground,
+        Background
+    };
+}
+
+namespace RadioServiceNotification
+{
+    enum Type {
+        FavoriteCount = 1,
+        AntennaConnected,
+        RadioStatus,
+        Frequency,
+        Name,
+        Genre,
+        RadioText,
+        HomePage,
+        Song
+    };
+}
+
+namespace RadioStatus
+{
+    enum Status {
+        Playing,
+        Muted,
+        Seeking
+    };
+}
+
+#endif // RADIOSERVICES_H
--- a/radioapp/eabi/radioenginewrapperu.def	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/eabi/radioenginewrapperu.def	Mon May 03 12:31:41 2010 +0300
@@ -2,39 +2,52 @@
 	_ZN11RadioLogger18initCombinedLoggerEv @ 1 NONAME
 	_ZN11RadioLogger21releaseCombinedLoggerEv @ 2 NONAME
 	_ZN11RadioLogger6logMsgEPKcNS_4ModeE @ 3 NONAME
-	_ZN13RadioSettings16isFirstTimeStartEv @ 4 NONAME
-	_ZN13RadioSettings16setShowFavoritesEb @ 5 NONAME
-	_ZN13RadioSettings19toggleShowFavoritesEv @ 6 NONAME
-	_ZN13RadioSettingsC1Ev @ 7 NONAME
-	_ZN13RadioSettingsC2Ev @ 8 NONAME
-	_ZN18RadioEngineWrapper10toggleMuteEv @ 9 NONAME
-	_ZN18RadioEngineWrapper12startSeekingEN7Seeking9DirectionE @ 10 NONAME
-	_ZN18RadioEngineWrapper13tuneFrequencyEji @ 11 NONAME
-	_ZN18RadioEngineWrapper13tuneWithDelayEji @ 12 NONAME
-	_ZN18RadioEngineWrapper16isFrequencyValidEj @ 13 NONAME
-	_ZN18RadioEngineWrapper16toggleAudioRouteEv @ 14 NONAME
-	_ZN18RadioEngineWrapper17scanFrequencyBandEv @ 15 NONAME
-	_ZN18RadioEngineWrapper19isEngineConstructedEv @ 16 NONAME
-	_ZN18RadioEngineWrapper23cancelScanFrequencyBandEv @ 17 NONAME
-	_ZN18RadioEngineWrapper8settingsEv @ 18 NONAME
-	_ZN18RadioEngineWrapper9setVolumeEi @ 19 NONAME
-	_ZN18RadioEngineWrapperC1ER21RadioStationHandlerIfR26RadioEngineWrapperObserver @ 20 NONAME
-	_ZN18RadioEngineWrapperC2ER21RadioStationHandlerIfR26RadioEngineWrapperObserver @ 21 NONAME
-	_ZN18RadioEngineWrapperD1Ev @ 22 NONAME
-	_ZN18RadioEngineWrapperD2Ev @ 23 NONAME
-	_ZNK13RadioSettings13showFavoritesEv @ 24 NONAME
-	_ZNK18RadioEngineWrapper10isScanningEv @ 25 NONAME
-	_ZNK18RadioEngineWrapper12maxFrequencyEv @ 26 NONAME
-	_ZNK18RadioEngineWrapper12minFrequencyEv @ 27 NONAME
-	_ZNK18RadioEngineWrapper16currentFrequencyEv @ 28 NONAME
-	_ZNK18RadioEngineWrapper17frequencyStepSizeEv @ 29 NONAME
-	_ZNK18RadioEngineWrapper17isAntennaAttachedEv @ 30 NONAME
-	_ZNK18RadioEngineWrapper18isUsingLoudspeakerEv @ 31 NONAME
-	_ZNK18RadioEngineWrapper6regionEv @ 32 NONAME
-	_ZNK18RadioEngineWrapper7isMutedEv @ 33 NONAME
-	_ZNK18RadioEngineWrapper9isRadioOnEv @ 34 NONAME
-	_ZN12MethodLoggerC1EPKcS1_ @ 35 NONAME
-	_ZN12MethodLoggerC2EPKcS1_ @ 36 NONAME
-	_ZN12MethodLoggerD1Ev @ 37 NONAME
-	_ZN12MethodLoggerD2Ev @ 38 NONAME
+	_ZN12MethodLoggerC1EPKcS1_ @ 4 NONAME
+	_ZN12MethodLoggerC2EPKcS1_ @ 5 NONAME
+	_ZN12MethodLoggerD1Ev @ 6 NONAME
+	_ZN12MethodLoggerD2Ev @ 7 NONAME
+	_ZN13RadioSettings16isFirstTimeStartEv @ 8 NONAME
+	_ZN13RadioSettings16setShowFavoritesEb @ 9 NONAME
+	_ZN13RadioSettings19toggleShowFavoritesEv @ 10 NONAME
+	_ZN13RadioSettingsC1Ev @ 11 NONAME
+	_ZN13RadioSettingsC2Ev @ 12 NONAME
+	_ZN13RadioSettingsD1Ev @ 13 NONAME
+	_ZN13RadioSettingsD2Ev @ 14 NONAME
+	_ZN18RadioEngineWrapper10toggleMuteEv @ 15 NONAME
+	_ZN18RadioEngineWrapper11addObserverEP26RadioEngineWrapperObserver @ 16 NONAME
+	_ZN18RadioEngineWrapper12startSeekingEN7Seeking9DirectionEi @ 17 NONAME
+	_ZN18RadioEngineWrapper13cancelSeekingEv @ 18 NONAME
+	_ZN18RadioEngineWrapper13tuneFrequencyEji @ 19 NONAME
+	_ZN18RadioEngineWrapper13tuneWithDelayEji @ 20 NONAME
+	_ZN18RadioEngineWrapper14removeObserverEP26RadioEngineWrapperObserver @ 21 NONAME
+	_ZN18RadioEngineWrapper16isFrequencyValidEj @ 22 NONAME
+	_ZN18RadioEngineWrapper16toggleAudioRouteEv @ 23 NONAME
+	_ZN18RadioEngineWrapper19isEngineConstructedEv @ 24 NONAME
+	_ZN18RadioEngineWrapper8settingsEv @ 25 NONAME
+	_ZN18RadioEngineWrapper9setVolumeEi @ 26 NONAME
+	_ZN18RadioEngineWrapperC1ER21RadioStationHandlerIf @ 27 NONAME
+	_ZN18RadioEngineWrapperC2ER21RadioStationHandlerIf @ 28 NONAME
+	_ZN18RadioEngineWrapperD1Ev @ 29 NONAME
+	_ZN18RadioEngineWrapperD2Ev @ 30 NONAME
+	_ZN26RadioEngineWrapperObserver11muteChangedEb @ 31 NONAME
+	_ZN26RadioEngineWrapperObserver12skipPreviousEv @ 32 NONAME
+	_ZN26RadioEngineWrapperObserver13volumeChangedEi @ 33 NONAME
+	_ZN26RadioEngineWrapperObserver16tunedToFrequencyEji @ 34 NONAME
+	_ZN26RadioEngineWrapperObserver17audioRouteChangedEb @ 35 NONAME
+	_ZN26RadioEngineWrapperObserver18radioStatusChangedEb @ 36 NONAME
+	_ZN26RadioEngineWrapperObserver20antennaStatusChangedEb @ 37 NONAME
+	_ZN26RadioEngineWrapperObserver22rdsAvailabilityChangedEb @ 38 NONAME
+	_ZN26RadioEngineWrapperObserver8skipNextEv @ 39 NONAME
+	_ZNK13RadioSettings13showFavoritesEv @ 40 NONAME
+	_ZNK18RadioEngineWrapper12maxFrequencyEv @ 41 NONAME
+	_ZNK18RadioEngineWrapper12minFrequencyEv @ 42 NONAME
+	_ZNK18RadioEngineWrapper16currentFrequencyEv @ 43 NONAME
+	_ZNK18RadioEngineWrapper17frequencyStepSizeEv @ 44 NONAME
+	_ZNK18RadioEngineWrapper17isAntennaAttachedEv @ 45 NONAME
+	_ZNK18RadioEngineWrapper18isUsingLoudspeakerEv @ 46 NONAME
+	_ZNK18RadioEngineWrapper6regionEv @ 47 NONAME
+	_ZNK18RadioEngineWrapper7isMutedEv @ 48 NONAME
+	_ZNK18RadioEngineWrapper9isRadioOnEv @ 49 NONAME
+	_ZTI26RadioEngineWrapperObserver @ 50 NONAME
+	_ZTV26RadioEngineWrapperObserver @ 51 NONAME
 
--- a/radioapp/eabi/radiouiengineu.def	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/eabi/radiouiengineu.def	Mon May 03 12:31:41 2010 +0300
@@ -39,210 +39,224 @@
 	_ZN13RadioUiEngine11muteChangedEb @ 38 NONAME
 	_ZN13RadioUiEngine11qt_metacallEN11QMetaObject4CallEiPPv @ 39 NONAME
 	_ZN13RadioUiEngine11qt_metacastEPKc @ 40 NONAME
-	_ZN13RadioUiEngine12playLogModelEv @ 41 NONAME
+	_ZN13RadioUiEngine12historyModelEv @ 41 NONAME
 	_ZN13RadioUiEngine12skipPreviousEv @ 42 NONAME
-	_ZN13RadioUiEngine13genreToStringEi @ 43 NONAME
+	_ZN13RadioUiEngine13genreToStringEiN11GenreTarget6TargetE @ 43 NONAME
 	_ZN13RadioUiEngine13tuneFrequencyEji @ 44 NONAME
 	_ZN13RadioUiEngine13tuneWithDelayEji @ 45 NONAME
 	_ZN13RadioUiEngine13volumeChangedEi @ 46 NONAME
-	_ZN13RadioUiEngine14parseFrequencyEj @ 47 NONAME
-	_ZN13RadioUiEngine14seekingStartedEi @ 48 NONAME
-	_ZN13RadioUiEngine15emitMuteChangedEb @ 49 NONAME
-	_ZN13RadioUiEngine15nameOrFrequencyERK12RadioStationj @ 50 NONAME
-	_ZN13RadioUiEngine15stationsInRangeEjj @ 51 NONAME
-	_ZN13RadioUiEngine16isFirstTimeStartEv @ 52 NONAME
-	_ZN13RadioUiEngine16isOfflineProfileEv @ 53 NONAME
-	_ZN13RadioUiEngine16staticMetaObjectE @ 54 NONAME DATA 16
-	_ZN13RadioUiEngine16toggleAudioRouteEv @ 55 NONAME
-	_ZN13RadioUiEngine16tunedToFrequencyEji @ 56 NONAME
-	_ZN13RadioUiEngine17addRecognizedSongERK7QStringS2_RK12RadioStation @ 57 NONAME
-	_ZN13RadioUiEngine17audioRouteChangedEb @ 58 NONAME
-	_ZN13RadioUiEngine17emitVolumeChangedEi @ 59 NONAME
-	_ZN13RadioUiEngine17scanFrequencyBandEv @ 60 NONAME
-	_ZN13RadioUiEngine18emitSeekingStartedEN7Seeking9DirectionE @ 61 NONAME
-	_ZN13RadioUiEngine18radioStatusChangedEb @ 62 NONAME
-	_ZN13RadioUiEngine19getStaticMetaObjectEv @ 63 NONAME
-	_ZN13RadioUiEngine19scanAndSaveFinishedEv @ 64 NONAME
-	_ZN13RadioUiEngine20createNewFilterModelEP7QObject @ 65 NONAME
-	_ZN13RadioUiEngine20emitTunedToFrequencyEji @ 66 NONAME
-	_ZN13RadioUiEngine20headsetStatusChangedEb @ 67 NONAME
-	_ZN13RadioUiEngine21emitAudioRouteChangedEb @ 68 NONAME
-	_ZN13RadioUiEngine21launchSongRecognitionEv @ 69 NONAME
-	_ZN13RadioUiEngine22emitRadioStatusChangedEb @ 70 NONAME
-	_ZN13RadioUiEngine22rdsAvailabilityChangedEb @ 71 NONAME
-	_ZN13RadioUiEngine23cancelScanFrequencyBandEv @ 72 NONAME
-	_ZN13RadioUiEngine23emitScanAndSaveFinishedEv @ 73 NONAME
-	_ZN13RadioUiEngine24emitheadsetStatusChangedEb @ 74 NONAME
-	_ZN13RadioUiEngine26emitRdsAvailabilityChangedEb @ 75 NONAME
-	_ZN13RadioUiEngine29isSongRecognitionAppAvailableEv @ 76 NONAME
-	_ZN13RadioUiEngine5modelEv @ 77 NONAME
-	_ZN13RadioUiEngine6seekUpEv @ 78 NONAME
-	_ZN13RadioUiEngine8seekDownEv @ 79 NONAME
-	_ZN13RadioUiEngine8settingsEv @ 80 NONAME
-	_ZN13RadioUiEngine8skipNextEv @ 81 NONAME
-	_ZN13RadioUiEngine9setVolumeEi @ 82 NONAME
-	_ZN13RadioUiEngineC1EP7QObject @ 83 NONAME
-	_ZN13RadioUiEngineC2EP7QObject @ 84 NONAME
-	_ZN13RadioUiEngineD0Ev @ 85 NONAME
-	_ZN13RadioUiEngineD1Ev @ 86 NONAME
-	_ZN13RadioUiEngineD2Ev @ 87 NONAME
-	_ZN16RadioPlayLogItem10setStationERK7QString @ 88 NONAME
-	_ZN16RadioPlayLogItem11setFavoriteEv @ 89 NONAME
-	_ZN16RadioPlayLogItem12setFrequencyEj @ 90 NONAME
-	_ZN16RadioPlayLogItem14setCurrentTimeEv @ 91 NONAME
-	_ZN16RadioPlayLogItem17increasePlayCountEv @ 92 NONAME
-	_ZN16RadioPlayLogItem23decrementReferenceCountEv @ 93 NONAME
-	_ZN16RadioPlayLogItem6detachEv @ 94 NONAME
-	_ZN16RadioPlayLogItem8setTitleERK7QString @ 95 NONAME
-	_ZN16RadioPlayLogItem9setArtistERK7QString @ 96 NONAME
-	_ZN16RadioPlayLogItemC1ERK7QStringS2_ @ 97 NONAME
-	_ZN16RadioPlayLogItemC1ERKS_ @ 98 NONAME
-	_ZN16RadioPlayLogItemC1Ev @ 99 NONAME
-	_ZN16RadioPlayLogItemC2ERK7QStringS2_ @ 100 NONAME
-	_ZN16RadioPlayLogItemC2ERKS_ @ 101 NONAME
-	_ZN16RadioPlayLogItemC2Ev @ 102 NONAME
-	_ZN16RadioPlayLogItemD0Ev @ 103 NONAME
-	_ZN16RadioPlayLogItemD1Ev @ 104 NONAME
-	_ZN16RadioPlayLogItemD2Ev @ 105 NONAME
-	_ZN16RadioPlayLogItemaSERKS_ @ 106 NONAME
-	_ZN17RadioPlayLogModel10updateItemEiRK16RadioPlayLogItemb @ 107 NONAME
-	_ZN17RadioPlayLogModel11qt_metacallEN11QMetaObject4CallEiPPv @ 108 NONAME
-	_ZN17RadioPlayLogModel11qt_metacastEPKc @ 109 NONAME
-	_ZN17RadioPlayLogModel11setFavoriteEv @ 110 NONAME
-	_ZN17RadioPlayLogModel14setShowDetailsEb @ 111 NONAME
-	_ZN17RadioPlayLogModel16addRadioTextPlusEiRK7QStringRK12RadioStation @ 112 NONAME
-	_ZN17RadioPlayLogModel16currentSongResetEv @ 113 NONAME
-	_ZN17RadioPlayLogModel16resetCurrentSongEv @ 114 NONAME
-	_ZN17RadioPlayLogModel16staticMetaObjectE @ 115 NONAME DATA 16
-	_ZN17RadioPlayLogModel18clearRadioTextPlusEv @ 116 NONAME
-	_ZN17RadioPlayLogModel19getStaticMetaObjectEv @ 117 NONAME
-	_ZN17RadioPlayLogModel7addItemERK7QStringS2_RK12RadioStation @ 118 NONAME
-	_ZN17RadioPlayLogModel7setDataERK11QModelIndexRK8QVarianti @ 119 NONAME
-	_ZN17RadioPlayLogModel8findItemERK7QStringS2_R16RadioPlayLogItem @ 120 NONAME
-	_ZN17RadioPlayLogModel9itemAddedEv @ 121 NONAME
-	_ZN17RadioPlayLogModel9removeAllEv @ 122 NONAME
-	_ZN17RadioPlayLogModelC1ER13RadioUiEngine @ 123 NONAME
-	_ZN17RadioPlayLogModelC2ER13RadioUiEngine @ 124 NONAME
-	_ZN17RadioPlayLogModelD0Ev @ 125 NONAME
-	_ZN17RadioPlayLogModelD1Ev @ 126 NONAME
-	_ZN17RadioPlayLogModelD2Ev @ 127 NONAME
-	_ZN17RadioStationModel10addStationERK12RadioStation @ 128 NONAME
-	_ZN17RadioStationModel10initializeEP18RadioPresetStorageP18RadioEngineWrapper @ 129 NONAME
-	_ZN17RadioStationModel11qt_metacallEN11QMetaObject4CallEiPPv @ 130 NONAME
-	_ZN17RadioStationModel11qt_metacastEPKc @ 131 NONAME
-	_ZN17RadioStationModel11saveStationER12RadioStation @ 132 NONAME
-	_ZN17RadioStationModel12setFavoritesERK5QListI11QModelIndexE @ 133 NONAME
-	_ZN17RadioStationModel12stationAddedERK12RadioStation @ 134 NONAME
-	_ZN17RadioStationModel13findFrequencyEjR12RadioStation @ 135 NONAME
-	_ZN17RadioStationModel13removeStationERK12RadioStation @ 136 NONAME
-	_ZN17RadioStationModel13renameStationEiRK7QString @ 137 NONAME
-	_ZN17RadioStationModel14currentStationEv @ 138 NONAME
-	_ZN17RadioStationModel14stationRemovedERK12RadioStation @ 139 NONAME
-	_ZN17RadioStationModel15emitDataChangedERK12RadioStation @ 140 NONAME
-	_ZN17RadioStationModel15favoriteChangedERK12RadioStation @ 141 NONAME
-	_ZN17RadioStationModel15findPresetIndexEi @ 142 NONAME
-	_ZN17RadioStationModel15findPresetIndexEiR12RadioStation @ 143 NONAME
-	_ZN17RadioStationModel15stationsInRangeEjj @ 144 NONAME
-	_ZN17RadioStationModel16dynamicPsChangedERK12RadioStation @ 145 NONAME
-	_ZN17RadioStationModel16staticMetaObjectE @ 146 NONAME DATA 16
-	_ZN17RadioStationModel16stationHandlerIfEv @ 147 NONAME
-	_ZN17RadioStationModel17emitChangeSignalsERK12RadioStation6QFlagsINS0_10ChangeFlagEE @ 148 NONAME
-	_ZN17RadioStationModel17radioTextReceivedERK12RadioStation @ 149 NONAME
-	_ZN17RadioStationModel17removeByFrequencyEj @ 150 NONAME
-	_ZN17RadioStationModel18findCurrentStationEj @ 151 NONAME
-	_ZN17RadioStationModel18stationDataChangedERK12RadioStation @ 152 NONAME
-	_ZN17RadioStationModel19dynamicPsCheckEndedEv @ 153 NONAME
-	_ZN17RadioStationModel19getStaticMetaObjectEv @ 154 NONAME
-	_ZN17RadioStationModel19removeByPresetIndexEi @ 155 NONAME
-	_ZN17RadioStationModel19setFavoriteByPresetEib @ 156 NONAME
-	_ZN17RadioStationModel21findUnusedPresetIndexEv @ 157 NONAME
-	_ZN17RadioStationModel22setFavoriteByFrequencyEjb @ 158 NONAME
-	_ZN17RadioStationModel23modelIndexFromFrequencyEj @ 159 NONAME
-	_ZN17RadioStationModel7setDataERK11QModelIndexRK8QVarianti @ 160 NONAME
-	_ZN17RadioStationModel8setIconsERK5QIconS2_ @ 161 NONAME
-	_ZN17RadioStationModel9removeAllEv @ 162 NONAME
-	_ZN17RadioStationModel9setDetailE6QFlagsINS_10DetailFlagEE @ 163 NONAME
-	_ZN17RadioStationModelC1ER13RadioUiEngine @ 164 NONAME
-	_ZN17RadioStationModelC2ER13RadioUiEngine @ 165 NONAME
-	_ZN17RadioStationModelD0Ev @ 166 NONAME
-	_ZN17RadioStationModelD1Ev @ 167 NONAME
-	_ZN17RadioStationModelD2Ev @ 168 NONAME
-	_ZN23RadioStationFilterModel13setTypeFilterE6QFlagsIN12RadioStation8TypeFlagEE @ 169 NONAME
-	_ZN23RadioStationFilterModel23modelIndexFromFrequencyEj @ 170 NONAME
-	_ZN23RadioStationFilterModel9setCyclicEb @ 171 NONAME
-	_ZN23RadioStationFilterModelC1ER13RadioUiEngineP7QObject @ 172 NONAME
-	_ZN23RadioStationFilterModelC2ER13RadioUiEngineP7QObject @ 173 NONAME
-	_ZN23RadioStationFilterModelD0Ev @ 174 NONAME
-	_ZN23RadioStationFilterModelD1Ev @ 175 NONAME
-	_ZN23RadioStationFilterModelD2Ev @ 176 NONAME
-	_ZNK12RadioStation10hasChangedEv @ 177 NONAME
-	_ZNK12RadioStation10isDetachedEv @ 178 NONAME
-	_ZNK12RadioStation10isFavoriteEv @ 179 NONAME
-	_ZNK12RadioStation11changeFlagsEv @ 180 NONAME
-	_ZNK12RadioStation11presetIndexEv @ 181 NONAME
-	_ZNK12RadioStation12frequencyMhzEv @ 182 NONAME
-	_ZNK12RadioStation13dynamicPsTextEv @ 183 NONAME
-	_ZNK12RadioStation14hasDataChangedE6QFlagsINS_10ChangeFlagEE @ 184 NONAME
-	_ZNK12RadioStation3urlEv @ 185 NONAME
-	_ZNK12RadioStation4nameEv @ 186 NONAME
-	_ZNK12RadioStation5genreEv @ 187 NONAME
-	_ZNK12RadioStation6hasRdsEv @ 188 NONAME
-	_ZNK12RadioStation6isTypeE6QFlagsINS_8TypeFlagEE @ 189 NONAME
-	_ZNK12RadioStation6psTypeEv @ 190 NONAME
-	_ZNK12RadioStation7isValidEv @ 191 NONAME
-	_ZNK12RadioStation9frequencyEv @ 192 NONAME
-	_ZNK12RadioStation9hasPiCodeEv @ 193 NONAME
-	_ZNK12RadioStation9isRenamedEv @ 194 NONAME
-	_ZNK12RadioStation9radioTextEv @ 195 NONAME
-	_ZNK13RadioUiEngine10isScanningEv @ 196 NONAME
-	_ZNK13RadioUiEngine10metaObjectEv @ 197 NONAME
-	_ZNK13RadioUiEngine12maxFrequencyEv @ 198 NONAME
-	_ZNK13RadioUiEngine12minFrequencyEv @ 199 NONAME
-	_ZNK13RadioUiEngine16currentFrequencyEv @ 200 NONAME
-	_ZNK13RadioUiEngine17frequencyStepSizeEv @ 201 NONAME
-	_ZNK13RadioUiEngine17isAntennaAttachedEv @ 202 NONAME
-	_ZNK13RadioUiEngine18isUsingLoudspeakerEv @ 203 NONAME
-	_ZNK13RadioUiEngine6regionEv @ 204 NONAME
-	_ZNK13RadioUiEngine7isMutedEv @ 205 NONAME
-	_ZNK13RadioUiEngine9isRadioOnEv @ 206 NONAME
-	_ZNK16RadioPlayLogItem10isDetachedEv @ 207 NONAME
-	_ZNK16RadioPlayLogItem10isFavoriteEv @ 208 NONAME
-	_ZNK16RadioPlayLogItem4timeEv @ 209 NONAME
-	_ZNK16RadioPlayLogItem5titleEv @ 210 NONAME
-	_ZNK16RadioPlayLogItem6artistEv @ 211 NONAME
-	_ZNK16RadioPlayLogItem7stationEv @ 212 NONAME
-	_ZNK16RadioPlayLogItem9frequencyEv @ 213 NONAME
-	_ZNK16RadioPlayLogItem9playCountEv @ 214 NONAME
-	_ZNK17RadioPlayLogModel10metaObjectEv @ 215 NONAME
-	_ZNK17RadioPlayLogModel23isCurrentSongRecognizedEv @ 216 NONAME
-	_ZNK17RadioPlayLogModel4dataERK11QModelIndexi @ 217 NONAME
-	_ZNK17RadioPlayLogModel5flagsERK11QModelIndex @ 218 NONAME
-	_ZNK17RadioPlayLogModel8rowCountERK11QModelIndex @ 219 NONAME
-	_ZNK17RadioStationModel10metaObjectEv @ 220 NONAME
-	_ZNK17RadioStationModel14currentStationEv @ 221 NONAME
-	_ZNK17RadioStationModel4dataERK11QModelIndexi @ 222 NONAME
-	_ZNK17RadioStationModel4listEv @ 223 NONAME
-	_ZNK17RadioStationModel5flagsERK11QModelIndex @ 224 NONAME
-	_ZNK17RadioStationModel8rowCountERK11QModelIndex @ 225 NONAME
-	_ZNK17RadioStationModel9stationAtEi @ 226 NONAME
-	_ZNK23RadioStationFilterModel16filterAcceptsRowEiRK11QModelIndex @ 227 NONAME
-	_ZNK23RadioStationFilterModel4dataERK11QModelIndexi @ 228 NONAME
-	_ZNK23RadioStationFilterModel5indexEiiRK11QModelIndex @ 229 NONAME
-	_ZNK23RadioStationFilterModel7isEqualERK11QModelIndexS2_ @ 230 NONAME
-	_ZNK23RadioStationFilterModel8rowCountERK11QModelIndex @ 231 NONAME
-	_ZNK23RadioStationFilterModel9hasLoopedERK11QModelIndex @ 232 NONAME
-	_ZNK23RadioStationFilterModel9realIndexERK11QModelIndex @ 233 NONAME
-	_ZTI12RadioStation @ 234 NONAME
-	_ZTI13RadioUiEngine @ 235 NONAME
-	_ZTI16RadioPlayLogItem @ 236 NONAME
-	_ZTI17RadioPlayLogModel @ 237 NONAME
-	_ZTI17RadioStationModel @ 238 NONAME
-	_ZTI23RadioStationFilterModel @ 239 NONAME
-	_ZTV12RadioStation @ 240 NONAME
-	_ZTV13RadioUiEngine @ 241 NONAME
-	_ZTV16RadioPlayLogItem @ 242 NONAME
-	_ZTV17RadioPlayLogModel @ 243 NONAME
-	_ZTV17RadioStationModel @ 244 NONAME
-	_ZTV23RadioStationFilterModel @ 245 NONAME
-	_ZN13RadioUiEngine7monitorEv @ 246 NONAME
+	_ZN13RadioUiEngine14seekingStartedEi @ 47 NONAME
+	_ZN13RadioUiEngine15emitMuteChangedEb @ 48 NONAME
+	_ZN13RadioUiEngine15stationsInRangeEjj @ 49 NONAME
+	_ZN13RadioUiEngine16isFirstTimeStartEv @ 50 NONAME
+	_ZN13RadioUiEngine16isOfflineProfileEv @ 51 NONAME
+	_ZN13RadioUiEngine16staticMetaObjectE @ 52 NONAME DATA 16
+	_ZN13RadioUiEngine16toggleAudioRouteEv @ 53 NONAME
+	_ZN13RadioUiEngine16tunedToFrequencyEji @ 54 NONAME
+	_ZN13RadioUiEngine17addRecognizedSongERK7QStringS2_RK12RadioStation @ 55 NONAME
+	_ZN13RadioUiEngine17audioRouteChangedEb @ 56 NONAME
+	_ZN13RadioUiEngine17emitVolumeChangedEi @ 57 NONAME
+	_ZN13RadioUiEngine18emitSeekingStartedEN7Seeking9DirectionE @ 58 NONAME
+	_ZN13RadioUiEngine18radioStatusChangedEb @ 59 NONAME
+	_ZN13RadioUiEngine19createScannerEngineEv @ 60 NONAME
+	_ZN13RadioUiEngine19getStaticMetaObjectEv @ 61 NONAME
+	_ZN13RadioUiEngine20antennaStatusChangedEb @ 62 NONAME
+	_ZN13RadioUiEngine20createNewFilterModelEP7QObject @ 63 NONAME
+	_ZN13RadioUiEngine20emitTunedToFrequencyEji @ 64 NONAME
+	_ZN13RadioUiEngine21emitAudioRouteChangedEb @ 65 NONAME
+	_ZN13RadioUiEngine21launchSongRecognitionEv @ 66 NONAME
+	_ZN13RadioUiEngine22emitRadioStatusChangedEb @ 67 NONAME
+	_ZN13RadioUiEngine22rdsAvailabilityChangedEb @ 68 NONAME
+	_ZN13RadioUiEngine24emitAntennaStatusChangedEb @ 69 NONAME
+	_ZN13RadioUiEngine26emitRdsAvailabilityChangedEb @ 70 NONAME
+	_ZN13RadioUiEngine29isSongRecognitionAppAvailableEv @ 71 NONAME
+	_ZN13RadioUiEngine5modelEv @ 72 NONAME
+	_ZN13RadioUiEngine6seekUpEv @ 73 NONAME
+	_ZN13RadioUiEngine7monitorEv @ 74 NONAME
+	_ZN13RadioUiEngine8seekDownEv @ 75 NONAME
+	_ZN13RadioUiEngine8settingsEv @ 76 NONAME
+	_ZN13RadioUiEngine8skipNextEv @ 77 NONAME
+	_ZN13RadioUiEngine9setVolumeEi @ 78 NONAME
+	_ZN13RadioUiEngineC1EP7QObject @ 79 NONAME
+	_ZN13RadioUiEngineC2EP7QObject @ 80 NONAME
+	_ZN13RadioUiEngineD0Ev @ 81 NONAME
+	_ZN13RadioUiEngineD1Ev @ 82 NONAME
+	_ZN13RadioUiEngineD2Ev @ 83 NONAME
+	_ZN16RadioHistoryItem10setStationERK7QString @ 84 NONAME
+	_ZN16RadioHistoryItem11setFavoriteEv @ 85 NONAME
+	_ZN16RadioHistoryItem12setFrequencyEj @ 86 NONAME
+	_ZN16RadioHistoryItem14setCurrentTimeEv @ 87 NONAME
+	_ZN16RadioHistoryItem17increasePlayCountEv @ 88 NONAME
+	_ZN16RadioHistoryItem23decrementReferenceCountEv @ 89 NONAME
+	_ZN16RadioHistoryItem6detachEv @ 90 NONAME
+	_ZN16RadioHistoryItem8setTitleERK7QString @ 91 NONAME
+	_ZN16RadioHistoryItem9setArtistERK7QString @ 92 NONAME
+	_ZN16RadioHistoryItemC1ERK7QStringS2_ @ 93 NONAME
+	_ZN16RadioHistoryItemC1ERKS_ @ 94 NONAME
+	_ZN16RadioHistoryItemC1Ev @ 95 NONAME
+	_ZN16RadioHistoryItemC2ERK7QStringS2_ @ 96 NONAME
+	_ZN16RadioHistoryItemC2ERKS_ @ 97 NONAME
+	_ZN16RadioHistoryItemC2Ev @ 98 NONAME
+	_ZN16RadioHistoryItemD0Ev @ 99 NONAME
+	_ZN16RadioHistoryItemD1Ev @ 100 NONAME
+	_ZN16RadioHistoryItemD2Ev @ 101 NONAME
+	_ZN16RadioHistoryItemaSERKS_ @ 102 NONAME
+	_ZN17RadioHistoryModel10updateItemEiRK16RadioHistoryItemb @ 103 NONAME
+	_ZN17RadioHistoryModel11qt_metacallEN11QMetaObject4CallEiPPv @ 104 NONAME
+	_ZN17RadioHistoryModel11qt_metacastEPKc @ 105 NONAME
+	_ZN17RadioHistoryModel11setFavoriteEv @ 106 NONAME
+	_ZN17RadioHistoryModel14setShowDetailsEb @ 107 NONAME
+	_ZN17RadioHistoryModel16addRadioTextPlusEiRK7QStringRK12RadioStation @ 108 NONAME
+	_ZN17RadioHistoryModel16currentSongResetEv @ 109 NONAME
+	_ZN17RadioHistoryModel16resetCurrentSongEv @ 110 NONAME
+	_ZN17RadioHistoryModel16staticMetaObjectE @ 111 NONAME DATA 16
+	_ZN17RadioHistoryModel18clearRadioTextPlusEv @ 112 NONAME
+	_ZN17RadioHistoryModel19getStaticMetaObjectEv @ 113 NONAME
+	_ZN17RadioHistoryModel7addItemERK7QStringS2_RK12RadioStation @ 114 NONAME
+	_ZN17RadioHistoryModel7setDataERK11QModelIndexRK8QVarianti @ 115 NONAME
+	_ZN17RadioHistoryModel8findItemERK7QStringS2_R16RadioHistoryItem @ 116 NONAME
+	_ZN17RadioHistoryModel9itemAddedEv @ 117 NONAME
+	_ZN17RadioHistoryModel9removeAllEv @ 118 NONAME
+	_ZN17RadioHistoryModelC1ER13RadioUiEngine @ 119 NONAME
+	_ZN17RadioHistoryModelC2ER13RadioUiEngine @ 120 NONAME
+	_ZN17RadioHistoryModelD0Ev @ 121 NONAME
+	_ZN17RadioHistoryModelD1Ev @ 122 NONAME
+	_ZN17RadioHistoryModelD2Ev @ 123 NONAME
+	_ZN17RadioStationModel10addStationERK12RadioStation @ 124 NONAME
+	_ZN17RadioStationModel10initializeEP18RadioPresetStorageP18RadioEngineWrapper @ 125 NONAME
+	_ZN17RadioStationModel11qt_metacallEN11QMetaObject4CallEiPPv @ 126 NONAME
+	_ZN17RadioStationModel11qt_metacastEPKc @ 127 NONAME
+	_ZN17RadioStationModel11saveStationER12RadioStation @ 128 NONAME
+	_ZN17RadioStationModel12setFavoritesERK5QListI11QModelIndexE @ 129 NONAME
+	_ZN17RadioStationModel12stationAddedERK12RadioStation @ 130 NONAME
+	_ZN17RadioStationModel13favoriteCountEv @ 131 NONAME
+	_ZN17RadioStationModel13findFrequencyEjR12RadioStation @ 132 NONAME
+	_ZN17RadioStationModel13removeStationERK12RadioStation @ 133 NONAME
+	_ZN17RadioStationModel13renameStationEiRK7QString @ 134 NONAME
+	_ZN17RadioStationModel14currentStationEv @ 135 NONAME
+	_ZN17RadioStationModel14stationRemovedERK12RadioStation @ 136 NONAME
+	_ZN17RadioStationModel15emitDataChangedERK12RadioStation @ 137 NONAME
+	_ZN17RadioStationModel15favoriteChangedERK12RadioStation @ 138 NONAME
+	_ZN17RadioStationModel15findPresetIndexEi @ 139 NONAME
+	_ZN17RadioStationModel15findPresetIndexEiR12RadioStation @ 140 NONAME
+	_ZN17RadioStationModel15stationsInRangeEjj @ 141 NONAME
+	_ZN17RadioStationModel16dynamicPsChangedERK12RadioStation @ 142 NONAME
+	_ZN17RadioStationModel16staticMetaObjectE @ 143 NONAME DATA 16
+	_ZN17RadioStationModel16stationHandlerIfEv @ 144 NONAME
+	_ZN17RadioStationModel17emitChangeSignalsERK12RadioStation6QFlagsINS0_10ChangeFlagEE @ 145 NONAME
+	_ZN17RadioStationModel17radioTextReceivedERK12RadioStation @ 146 NONAME
+	_ZN17RadioStationModel17removeByFrequencyEj @ 147 NONAME
+	_ZN17RadioStationModel18findCurrentStationEj @ 148 NONAME
+	_ZN17RadioStationModel18stationDataChangedERK12RadioStation @ 149 NONAME
+	_ZN17RadioStationModel19dynamicPsCheckEndedEv @ 150 NONAME
+	_ZN17RadioStationModel19getStaticMetaObjectEv @ 151 NONAME
+	_ZN17RadioStationModel19removeByPresetIndexEi @ 152 NONAME
+	_ZN17RadioStationModel19setFavoriteByPresetEib @ 153 NONAME
+	_ZN17RadioStationModel21findUnusedPresetIndexEv @ 154 NONAME
+	_ZN17RadioStationModel22setFavoriteByFrequencyEjb @ 155 NONAME
+	_ZN17RadioStationModel23modelIndexFromFrequencyEj @ 156 NONAME
+	_ZN17RadioStationModel7setDataERK11QModelIndexRK8QVarianti @ 157 NONAME
+	_ZN17RadioStationModel8setIconsERK5QIconS2_ @ 158 NONAME
+	_ZN17RadioStationModel9removeAllEv @ 159 NONAME
+	_ZN17RadioStationModel9setDetailE6QFlagsINS_10DetailFlagEE @ 160 NONAME
+	_ZN17RadioStationModelC1ER20RadioUiEnginePrivate @ 161 NONAME
+	_ZN17RadioStationModelC2ER20RadioUiEnginePrivate @ 162 NONAME
+	_ZN17RadioStationModelD0Ev @ 163 NONAME
+	_ZN17RadioStationModelD1Ev @ 164 NONAME
+	_ZN17RadioStationModelD2Ev @ 165 NONAME
+	_ZN18RadioScannerEngine11qt_metacallEN11QMetaObject4CallEiPPv @ 166 NONAME
+	_ZN18RadioScannerEngine11qt_metacastEPKc @ 167 NONAME
+	_ZN18RadioScannerEngine12stationFoundERK12RadioStation @ 168 NONAME
+	_ZN18RadioScannerEngine13startScanningEv @ 169 NONAME
+	_ZN18RadioScannerEngine16continueScanningEv @ 170 NONAME
+	_ZN18RadioScannerEngine16emitStationFoundERK12RadioStation @ 171 NONAME
+	_ZN18RadioScannerEngine16staticMetaObjectE @ 172 NONAME DATA 16
+	_ZN18RadioScannerEngine19addScannedFrequencyEj @ 173 NONAME
+	_ZN18RadioScannerEngine19getStaticMetaObjectEv @ 174 NONAME
+	_ZN18RadioScannerEngine6cancelEv @ 175 NONAME
+	_ZN18RadioScannerEngineC1ER20RadioUiEnginePrivate @ 176 NONAME
+	_ZN18RadioScannerEngineC2ER20RadioUiEnginePrivate @ 177 NONAME
+	_ZN18RadioScannerEngineD0Ev @ 178 NONAME
+	_ZN18RadioScannerEngineD1Ev @ 179 NONAME
+	_ZN18RadioScannerEngineD2Ev @ 180 NONAME
+	_ZN23RadioStationFilterModel13setTypeFilterE6QFlagsIN12RadioStation8TypeFlagEE @ 181 NONAME
+	_ZN23RadioStationFilterModel23modelIndexFromFrequencyEj @ 182 NONAME
+	_ZN23RadioStationFilterModel9setCyclicEb @ 183 NONAME
+	_ZN23RadioStationFilterModelC1ER13RadioUiEngineP7QObject @ 184 NONAME
+	_ZN23RadioStationFilterModelC2ER13RadioUiEngineP7QObject @ 185 NONAME
+	_ZN23RadioStationFilterModelD0Ev @ 186 NONAME
+	_ZN23RadioStationFilterModelD1Ev @ 187 NONAME
+	_ZN23RadioStationFilterModelD2Ev @ 188 NONAME
+	_ZNK12RadioStation10hasChangedEv @ 189 NONAME
+	_ZNK12RadioStation10isDetachedEv @ 190 NONAME
+	_ZNK12RadioStation10isFavoriteEv @ 191 NONAME
+	_ZNK12RadioStation11changeFlagsEv @ 192 NONAME
+	_ZNK12RadioStation11presetIndexEv @ 193 NONAME
+	_ZNK12RadioStation12frequencyMhzEv @ 194 NONAME
+	_ZNK12RadioStation13dynamicPsTextEv @ 195 NONAME
+	_ZNK12RadioStation14hasDataChangedE6QFlagsINS_10ChangeFlagEE @ 196 NONAME
+	_ZNK12RadioStation3urlEv @ 197 NONAME
+	_ZNK12RadioStation4nameEv @ 198 NONAME
+	_ZNK12RadioStation5genreEv @ 199 NONAME
+	_ZNK12RadioStation6hasRdsEv @ 200 NONAME
+	_ZNK12RadioStation6isTypeE6QFlagsINS_8TypeFlagEE @ 201 NONAME
+	_ZNK12RadioStation6psTypeEv @ 202 NONAME
+	_ZNK12RadioStation7isValidEv @ 203 NONAME
+	_ZNK12RadioStation9frequencyEv @ 204 NONAME
+	_ZNK12RadioStation9hasPiCodeEv @ 205 NONAME
+	_ZNK12RadioStation9isRenamedEv @ 206 NONAME
+	_ZNK12RadioStation9radioTextEv @ 207 NONAME
+	_ZNK13RadioUiEngine10isScanningEv @ 208 NONAME
+	_ZNK13RadioUiEngine10metaObjectEv @ 209 NONAME
+	_ZNK13RadioUiEngine12maxFrequencyEv @ 210 NONAME
+	_ZNK13RadioUiEngine12minFrequencyEv @ 211 NONAME
+	_ZNK13RadioUiEngine16currentFrequencyEv @ 212 NONAME
+	_ZNK13RadioUiEngine17frequencyStepSizeEv @ 213 NONAME
+	_ZNK13RadioUiEngine17isAntennaAttachedEv @ 214 NONAME
+	_ZNK13RadioUiEngine18isUsingLoudspeakerEv @ 215 NONAME
+	_ZNK13RadioUiEngine6regionEv @ 216 NONAME
+	_ZNK13RadioUiEngine7isMutedEv @ 217 NONAME
+	_ZNK13RadioUiEngine9isRadioOnEv @ 218 NONAME
+	_ZNK16RadioHistoryItem10isDetachedEv @ 219 NONAME
+	_ZNK16RadioHistoryItem10isFavoriteEv @ 220 NONAME
+	_ZNK16RadioHistoryItem4timeEv @ 221 NONAME
+	_ZNK16RadioHistoryItem5titleEv @ 222 NONAME
+	_ZNK16RadioHistoryItem6artistEv @ 223 NONAME
+	_ZNK16RadioHistoryItem7stationEv @ 224 NONAME
+	_ZNK16RadioHistoryItem9frequencyEv @ 225 NONAME
+	_ZNK16RadioHistoryItem9playCountEv @ 226 NONAME
+	_ZNK17RadioHistoryModel10metaObjectEv @ 227 NONAME
+	_ZNK17RadioHistoryModel23isCurrentSongRecognizedEv @ 228 NONAME
+	_ZNK17RadioHistoryModel4dataERK11QModelIndexi @ 229 NONAME
+	_ZNK17RadioHistoryModel5flagsERK11QModelIndex @ 230 NONAME
+	_ZNK17RadioHistoryModel8rowCountERK11QModelIndex @ 231 NONAME
+	_ZNK17RadioStationModel10metaObjectEv @ 232 NONAME
+	_ZNK17RadioStationModel14currentStationEv @ 233 NONAME
+	_ZNK17RadioStationModel4dataERK11QModelIndexi @ 234 NONAME
+	_ZNK17RadioStationModel4listEv @ 235 NONAME
+	_ZNK17RadioStationModel5flagsERK11QModelIndex @ 236 NONAME
+	_ZNK17RadioStationModel8rowCountERK11QModelIndex @ 237 NONAME
+	_ZNK17RadioStationModel9stationAtEi @ 238 NONAME
+	_ZNK18RadioScannerEngine10metaObjectEv @ 239 NONAME
+	_ZNK23RadioStationFilterModel16filterAcceptsRowEiRK11QModelIndex @ 240 NONAME
+	_ZNK23RadioStationFilterModel4dataERK11QModelIndexi @ 241 NONAME
+	_ZNK23RadioStationFilterModel5indexEiiRK11QModelIndex @ 242 NONAME
+	_ZNK23RadioStationFilterModel7isEqualERK11QModelIndexS2_ @ 243 NONAME
+	_ZNK23RadioStationFilterModel8rowCountERK11QModelIndex @ 244 NONAME
+	_ZNK23RadioStationFilterModel9hasLoopedERK11QModelIndex @ 245 NONAME
+	_ZNK23RadioStationFilterModel9realIndexERK11QModelIndex @ 246 NONAME
+	_ZTI12RadioStation @ 247 NONAME
+	_ZTI13RadioUiEngine @ 248 NONAME
+	_ZTI16RadioHistoryItem @ 249 NONAME
+	_ZTI17RadioHistoryModel @ 250 NONAME
+	_ZTI17RadioStationModel @ 251 NONAME
+	_ZTI18RadioScannerEngine @ 252 NONAME
+	_ZTI23RadioStationFilterModel @ 253 NONAME
+	_ZTV12RadioStation @ 254 NONAME
+	_ZTV13RadioUiEngine @ 255 NONAME
+	_ZTV16RadioHistoryItem @ 256 NONAME
+	_ZTV17RadioHistoryModel @ 257 NONAME
+	_ZTV17RadioStationModel @ 258 NONAME
+	_ZTV18RadioScannerEngine @ 259 NONAME
+	_ZTV23RadioStationFilterModel @ 260 NONAME
 
--- a/radioapp/eabi/radiowidgetsu.def	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/eabi/radiowidgetsu.def	Mon May 03 12:31:41 2010 +0300
@@ -8,92 +8,216 @@
 	_ZN15RadioMainWindow16staticMetaObjectE @ 7 NONAME DATA 16
 	_ZN15RadioMainWindow17updateOrientationEN2Qt11OrientationE @ 8 NONAME
 	_ZN15RadioMainWindow18activateTuningViewEv @ 9 NONAME
-	_ZN15RadioMainWindow18activateWizardViewEv @ 10 NONAME
-	_ZN15RadioMainWindow18orientationSectionEv @ 11 NONAME
-	_ZN15RadioMainWindow19activatePlayLogViewEv @ 12 NONAME
-	_ZN15RadioMainWindow19getStaticMetaObjectEv @ 13 NONAME
-	_ZN15RadioMainWindow19prepareToShowDialogEv @ 14 NONAME
+	_ZN15RadioMainWindow18orientationSectionEv @ 10 NONAME
+	_ZN15RadioMainWindow19activateHistoryViewEv @ 11 NONAME
+	_ZN15RadioMainWindow19getStaticMetaObjectEv @ 12 NONAME
+	_ZN15RadioMainWindow19prepareToShowDialogEv @ 13 NONAME
+	_ZN15RadioMainWindow19updateAntennaStatusEb @ 14 NONAME
 	_ZN15RadioMainWindow20activateStationsViewEv @ 15 NONAME
-	_ZN15RadioMainWindow20headsetStatusChangedEb @ 16 NONAME
-	_ZN15RadioMainWindow21isOfflineUsageAllowedEv @ 17 NONAME
-	_ZN15RadioMainWindow4initEP13RadioUiEngine @ 18 NONAME
-	_ZN15RadioMainWindow8uiEngineEv @ 19 NONAME
-	_ZN15RadioMainWindowC1EP7QWidget @ 20 NONAME
-	_ZN15RadioMainWindowC2EP7QWidget @ 21 NONAME
-	_ZN15RadioMainWindowD0Ev @ 22 NONAME
-	_ZN15RadioMainWindowD1Ev @ 23 NONAME
-	_ZN15RadioMainWindowD2Ev @ 24 NONAME
-	_ZN15RadioTuningView11qt_metacallEN11QMetaObject4CallEiPPv @ 25 NONAME
-	_ZN15RadioTuningView11qt_metacastEPKc @ 26 NONAME
-	_ZN15RadioTuningView14setOrientationEv @ 27 NONAME
-	_ZN15RadioTuningView14toggleFavoriteEv @ 28 NONAME
-	_ZN15RadioTuningView16staticMetaObjectE @ 29 NONAME DATA 16
-	_ZN15RadioTuningView19getStaticMetaObjectEv @ 30 NONAME
-	_ZN15RadioTuningView4initEP15RadioMainWindowP17RadioStationModel @ 31 NONAME
-	_ZN15RadioTuningViewC1EP16RadioXmlUiLoader @ 32 NONAME
-	_ZN15RadioTuningViewC2EP16RadioXmlUiLoader @ 33 NONAME
-	_ZN15RadioWizardView11qt_metacallEN11QMetaObject4CallEiPPv @ 34 NONAME
-	_ZN15RadioWizardView11qt_metacastEPKc @ 35 NONAME
-	_ZN15RadioWizardView13startScanningEv @ 36 NONAME
-	_ZN15RadioWizardView15listItemClickedERK11QModelIndex @ 37 NONAME
-	_ZN15RadioWizardView16staticMetaObjectE @ 38 NONAME DATA 16
-	_ZN15RadioWizardView19engineStatusChangedEb @ 39 NONAME
-	_ZN15RadioWizardView19getStaticMetaObjectEv @ 40 NONAME
-	_ZN15RadioWizardView23saveSelectedAsFavoritesEv @ 41 NONAME
-	_ZN15RadioWizardView4initEP15RadioMainWindowP17RadioStationModel @ 42 NONAME
-	_ZN15RadioWizardView9showEventEP10QShowEvent @ 43 NONAME
-	_ZN15RadioWizardViewC1EP16RadioXmlUiLoader @ 44 NONAME
-	_ZN15RadioWizardViewC2EP16RadioXmlUiLoader @ 45 NONAME
-	_ZN16RadioPlayLogView11qt_metacallEN11QMetaObject4CallEiPPv @ 46 NONAME
-	_ZN16RadioPlayLogView11qt_metacastEPKc @ 47 NONAME
-	_ZN16RadioPlayLogView14setOrientationEv @ 48 NONAME
-	_ZN16RadioPlayLogView15listItemClickedERK11QModelIndex @ 49 NONAME
-	_ZN16RadioPlayLogView15showContextMenuERK11QModelIndex @ 50 NONAME
-	_ZN16RadioPlayLogView16staticMetaObjectE @ 51 NONAME DATA 16
-	_ZN16RadioPlayLogView17deckButtonPressedEv @ 52 NONAME
-	_ZN16RadioPlayLogView18updateVisibilitiesEv @ 53 NONAME
-	_ZN16RadioPlayLogView19getStaticMetaObjectEv @ 54 NONAME
-	_ZN16RadioPlayLogView19listItemLongPressedEP18HbAbstractViewItemRK7QPointF @ 55 NONAME
-	_ZN16RadioPlayLogView4initEP15RadioMainWindowP17RadioStationModel @ 56 NONAME
-	_ZN16RadioPlayLogView9clearListEv @ 57 NONAME
-	_ZN16RadioPlayLogViewC1EP16RadioXmlUiLoader @ 58 NONAME
-	_ZN16RadioPlayLogViewC2EP16RadioXmlUiLoader @ 59 NONAME
-	_ZN17RadioStationsView11qt_metacallEN11QMetaObject4CallEiPPv @ 60 NONAME
-	_ZN17RadioStationsView11qt_metacastEPKc @ 61 NONAME
-	_ZN17RadioStationsView12initListViewEv @ 62 NONAME
-	_ZN17RadioStationsView13updateHeadingEv @ 63 NONAME
-	_ZN17RadioStationsView15listItemClickedERK11QModelIndex @ 64 NONAME
-	_ZN17RadioStationsView15setFavoriteIconERK6HbIcon @ 65 NONAME
-	_ZN17RadioStationsView16staticMetaObjectE @ 66 NONAME DATA 16
-	_ZN17RadioStationsView17deckButtonPressedEv @ 67 NONAME
-	_ZN17RadioStationsView17setNowPlayingIconERK6HbIcon @ 68 NONAME
-	_ZN17RadioStationsView19getStaticMetaObjectEv @ 69 NONAME
-	_ZN17RadioStationsView19listItemLongPressedEP18HbAbstractViewItemRK7QPointF @ 70 NONAME
-	_ZN17RadioStationsView19updateHeadsetStatusEb @ 71 NONAME
-	_ZN17RadioStationsView20updateCurrentStationEv @ 72 NONAME
-	_ZN17RadioStationsView23startScanAndSavePresetsEv @ 73 NONAME
-	_ZN17RadioStationsView25updateControlVisibilitiesEv @ 74 NONAME
-	_ZN17RadioStationsView4initEP15RadioMainWindowP17RadioStationModel @ 75 NONAME
-	_ZN17RadioStationsView9showEventEP10QShowEvent @ 76 NONAME
-	_ZN17RadioStationsViewC1EP16RadioXmlUiLoader @ 77 NONAME
-	_ZN17RadioStationsViewC2EP16RadioXmlUiLoader @ 78 NONAME
-	_ZNK15RadioMainWindow10metaObjectEv @ 79 NONAME
-	_ZNK15RadioTuningView10metaObjectEv @ 80 NONAME
-	_ZNK15RadioWizardView10metaObjectEv @ 81 NONAME
-	_ZNK16RadioPlayLogView10metaObjectEv @ 82 NONAME
-	_ZNK17RadioStationsView10metaObjectEv @ 83 NONAME
-	_ZNK17RadioStationsView12favoriteIconEv @ 84 NONAME
-	_ZNK17RadioStationsView14nowPlayingIconEv @ 85 NONAME
-	_ZTI15RadioMainWindow @ 86 NONAME
-	_ZTI15RadioTuningView @ 87 NONAME
-	_ZTI15RadioWizardView @ 88 NONAME
-	_ZTI16RadioPlayLogView @ 89 NONAME
-	_ZTI17RadioStationsView @ 90 NONAME
-	_ZTV15RadioMainWindow @ 91 NONAME
-	_ZTV15RadioTuningView @ 92 NONAME
-	_ZTV15RadioWizardView @ 93 NONAME
-	_ZTV16RadioPlayLogView @ 94 NONAME
-	_ZTV17RadioStationsView @ 95 NONAME
-	_ZThn8_N15RadioMainWindowD0Ev @ 96 NONAME
-	_ZThn8_N15RadioMainWindowD1Ev @ 97 NONAME
+	_ZN15RadioMainWindow21isOfflineUsageAllowedEv @ 16 NONAME
+	_ZN15RadioMainWindow4initEP13RadioUiEngine @ 17 NONAME
+	_ZN15RadioMainWindow8uiEngineEv @ 18 NONAME
+	_ZN15RadioMainWindowC1EP7QWidget @ 19 NONAME
+	_ZN15RadioMainWindowC2EP7QWidget @ 20 NONAME
+	_ZN15RadioMainWindowD0Ev @ 21 NONAME
+	_ZN15RadioMainWindowD1Ev @ 22 NONAME
+	_ZN15RadioMainWindowD2Ev @ 23 NONAME
+	_ZN15RadioTuningView11qt_metacallEN11QMetaObject4CallEiPPv @ 24 NONAME
+	_ZN15RadioTuningView11qt_metacastEPKc @ 25 NONAME
+	_ZN15RadioTuningView13buttonPressedEv @ 26 NONAME
+	_ZN15RadioTuningView13startScanningEv @ 27 NONAME
+	_ZN15RadioTuningView14removeInfoTextEv @ 28 NONAME
+	_ZN15RadioTuningView14seekingStartedEv @ 29 NONAME
+	_ZN15RadioTuningView14setOrientationEv @ 30 NONAME
+	_ZN15RadioTuningView14toggleFavoriteEv @ 31 NONAME
+	_ZN15RadioTuningView15seekingFinishedEv @ 32 NONAME
+	_ZN15RadioTuningView15setScanningModeEb @ 33 NONAME
+	_ZN15RadioTuningView16scanningFinishedEv @ 34 NONAME
+	_ZN15RadioTuningView16staticMetaObjectE @ 35 NONAME DATA 16
+	_ZN15RadioTuningView16updateAudioRouteEb @ 36 NONAME
+	_ZN15RadioTuningView19getStaticMetaObjectEv @ 37 NONAME
+	_ZN15RadioTuningView19updateAntennaStatusEb @ 38 NONAME
+	_ZN15RadioTuningView4initEP16RadioXmlUiLoaderP15RadioMainWindow @ 39 NONAME
+	_ZN15RadioTuningViewC1Ev @ 40 NONAME
+	_ZN15RadioTuningViewC2Ev @ 41 NONAME
+	_ZN16RadioBannerLabel11qt_metacallEN11QMetaObject4CallEiPPv @ 42 NONAME
+	_ZN16RadioBannerLabel11qt_metacastEPKc @ 43 NONAME
+	_ZN16RadioBannerLabel16staticMetaObjectE @ 44 NONAME DATA 16
+	_ZN16RadioBannerLabel19getStaticMetaObjectEv @ 45 NONAME
+	_ZN16RadioBannerLabel5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 46 NONAME
+	_ZN16RadioBannerLabelC1EP13QGraphicsItem @ 47 NONAME
+	_ZN16RadioBannerLabelC2EP13QGraphicsItem @ 48 NONAME
+	_ZN16RadioFadingLabel11qt_metacallEN11QMetaObject4CallEiPPv @ 49 NONAME
+	_ZN16RadioFadingLabel11qt_metacastEPKc @ 50 NONAME
+	_ZN16RadioFadingLabel11startEffectERK7QStringPKc @ 51 NONAME
+	_ZN16RadioFadingLabel14effectFinishedEN8HbEffect12EffectStatusE @ 52 NONAME
+	_ZN16RadioFadingLabel16setFadingEnabledEb @ 53 NONAME
+	_ZN16RadioFadingLabel16staticMetaObjectE @ 54 NONAME DATA 16
+	_ZN16RadioFadingLabel19getStaticMetaObjectEv @ 55 NONAME
+	_ZN16RadioFadingLabel20setTextWithoutFadingERK7QString @ 56 NONAME
+	_ZN16RadioFadingLabel7setTextERK7QString @ 57 NONAME
+	_ZN16RadioFadingLabel8trimHtmlERK7QString @ 58 NONAME
+	_ZN16RadioFadingLabelC1EP13QGraphicsItem @ 59 NONAME
+	_ZN16RadioFadingLabelC2EP13QGraphicsItem @ 60 NONAME
+	_ZN16RadioHistoryView11qt_metacallEN11QMetaObject4CallEiPPv @ 61 NONAME
+	_ZN16RadioHistoryView11qt_metacastEPKc @ 62 NONAME
+	_ZN16RadioHistoryView14setOrientationEv @ 63 NONAME
+	_ZN16RadioHistoryView15listItemClickedERK11QModelIndex @ 64 NONAME
+	_ZN16RadioHistoryView15showContextMenuERK11QModelIndex @ 65 NONAME
+	_ZN16RadioHistoryView16staticMetaObjectE @ 66 NONAME DATA 16
+	_ZN16RadioHistoryView17deckButtonPressedEv @ 67 NONAME
+	_ZN16RadioHistoryView18updateVisibilitiesEv @ 68 NONAME
+	_ZN16RadioHistoryView19getStaticMetaObjectEv @ 69 NONAME
+	_ZN16RadioHistoryView19listItemLongPressedEP18HbAbstractViewItemRK7QPointF @ 70 NONAME
+	_ZN16RadioHistoryView4initEP16RadioXmlUiLoaderP15RadioMainWindow @ 71 NONAME
+	_ZN16RadioHistoryView9clearListEv @ 72 NONAME
+	_ZN16RadioHistoryViewC1Ev @ 73 NONAME
+	_ZN16RadioHistoryViewC2Ev @ 74 NONAME
+	_ZN17RadioStationsView11qt_metacallEN11QMetaObject4CallEiPPv @ 75 NONAME
+	_ZN17RadioStationsView11qt_metacastEPKc @ 76 NONAME
+	_ZN17RadioStationsView12initListViewEv @ 77 NONAME
+	_ZN17RadioStationsView13deleteStationEv @ 78 NONAME
+	_ZN17RadioStationsView13startScanningEv @ 79 NONAME
+	_ZN17RadioStationsView14toggleFavoriteEv @ 80 NONAME
+	_ZN17RadioStationsView15listItemClickedERK11QModelIndex @ 81 NONAME
+	_ZN17RadioStationsView15setFavoriteIconERK6HbIcon @ 82 NONAME
+	_ZN17RadioStationsView16staticMetaObjectE @ 83 NONAME DATA 16
+	_ZN17RadioStationsView17deckButtonPressedEv @ 84 NONAME
+	_ZN17RadioStationsView17setNowPlayingIconERK6HbIcon @ 85 NONAME
+	_ZN17RadioStationsView19getStaticMetaObjectEv @ 86 NONAME
+	_ZN17RadioStationsView19listItemLongPressedEP18HbAbstractViewItemRK7QPointF @ 87 NONAME
+	_ZN17RadioStationsView19updateAntennaStatusEb @ 88 NONAME
+	_ZN17RadioStationsView20updateCurrentStationEv @ 89 NONAME
+	_ZN17RadioStationsView25updateControlVisibilitiesEv @ 90 NONAME
+	_ZN17RadioStationsView4initEP16RadioXmlUiLoaderP15RadioMainWindow @ 91 NONAME
+	_ZN17RadioStationsView6renameEv @ 92 NONAME
+	_ZN17RadioStationsView9showEventEP10QShowEvent @ 93 NONAME
+	_ZN17RadioStationsViewC1Ev @ 94 NONAME
+	_ZN17RadioStationsViewC2Ev @ 95 NONAME
+	_ZN17RadioStationsViewD0Ev @ 96 NONAME
+	_ZN17RadioStationsViewD1Ev @ 97 NONAME
+	_ZN17RadioStationsViewD2Ev @ 98 NONAME
+	_ZN19RadioFrequencyStrip10drawPixmapEj5QListI12RadioStationEP18RadioFrequencyItem @ 99 NONAME
+	_ZN19RadioFrequencyStrip10panGestureERK7QPointF @ 100 NONAME
+	_ZN19RadioFrequencyStrip10swipedLeftEv @ 101 NONAME
+	_ZN19RadioFrequencyStrip11changeEventEP6QEvent @ 102 NONAME
+	_ZN19RadioFrequencyStrip11initButtonsEv @ 103 NONAME
+	_ZN19RadioFrequencyStrip11leftGestureEi @ 104 NONAME
+	_ZN19RadioFrequencyStrip11qt_metacallEN11QMetaObject4CallEiPPv @ 105 NONAME
+	_ZN19RadioFrequencyStrip11qt_metacastEPKc @ 106 NONAME
+	_ZN19RadioFrequencyStrip11resizeEventEP25QGraphicsSceneResizeEvent @ 107 NONAME
+	_ZN19RadioFrequencyStrip11swipedRightEv @ 108 NONAME
+	_ZN19RadioFrequencyStrip12initSelectorEv @ 109 NONAME
+	_ZN19RadioFrequencyStrip12rightGestureEi @ 110 NONAME
+	_ZN19RadioFrequencyStrip12setFrequencyEji @ 111 NONAME
+	_ZN19RadioFrequencyStrip12stationAddedERK12RadioStation @ 112 NONAME
+	_ZN19RadioFrequencyStrip13toggleButtonsEv @ 113 NONAME
+	_ZN19RadioFrequencyStrip14stationRemovedERK12RadioStation @ 114 NONAME
+	_ZN19RadioFrequencyStrip15addFrequencyPosEijP18RadioFrequencyItem @ 115 NONAME
+	_ZN19RadioFrequencyStrip15favoriteChangedERK12RadioStation @ 116 NONAME
+	_ZN19RadioFrequencyStrip15mousePressEventEP24QGraphicsSceneMouseEvent @ 117 NONAME
+	_ZN19RadioFrequencyStrip15setScanningModeEb @ 118 NONAME
+	_ZN19RadioFrequencyStrip15updateFavoritesEP18RadioFrequencyItem @ 119 NONAME
+	_ZN19RadioFrequencyStrip16frequencyChangedEji @ 120 NONAME
+	_ZN19RadioFrequencyStrip16scrollPosChangedE7QPointF @ 121 NONAME
+	_ZN19RadioFrequencyStrip16staticMetaObjectE @ 122 NONAME DATA 16
+	_ZN19RadioFrequencyStrip17connectLeftButtonEPKcP7QObjectS1_ @ 123 NONAME
+	_ZN19RadioFrequencyStrip17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 124 NONAME
+	_ZN19RadioFrequencyStrip17scrollToFrequencyEji @ 125 NONAME
+	_ZN19RadioFrequencyStrip17setLeftButtonIconERK6HbIcon @ 126 NONAME
+	_ZN19RadioFrequencyStrip18connectRightButtonEPKcP7QObjectS1_ @ 127 NONAME
+	_ZN19RadioFrequencyStrip18setRightButtonIconERK6HbIcon @ 128 NONAME
+	_ZN19RadioFrequencyStrip19createItemPrimitiveEP13QGraphicsItem @ 129 NONAME
+	_ZN19RadioFrequencyStrip19frequencyIsFavoriteEb @ 130 NONAME
+	_ZN19RadioFrequencyStrip19getStaticMetaObjectEv @ 131 NONAME
+	_ZN19RadioFrequencyStrip19updateItemPrimitiveEP13QGraphicsItemi @ 132 NONAME
+	_ZN19RadioFrequencyStrip20emitFavoriteSelectedEb @ 133 NONAME
+	_ZN19RadioFrequencyStrip20emitFrequencyChangedEj @ 134 NONAME
+	_ZN19RadioFrequencyStrip9initItemsEv @ 135 NONAME
+	_ZN19RadioFrequencyStrip9initModelEv @ 136 NONAME
+	_ZN19RadioFrequencyStrip9showEventEP10QShowEvent @ 137 NONAME
+	_ZN19RadioFrequencyStripC1EP13RadioUiEngine @ 138 NONAME
+	_ZN19RadioFrequencyStripC2EP13RadioUiEngine @ 139 NONAME
+	_ZN20RadioStationCarousel11leftGestureEi @ 140 NONAME
+	_ZN20RadioStationCarousel11qt_metacallEN11QMetaObject4CallEiPPv @ 141 NONAME
+	_ZN20RadioStationCarousel11qt_metacastEPKc @ 142 NONAME
+	_ZN20RadioStationCarousel11resizeEventEP25QGraphicsSceneResizeEvent @ 143 NONAME
+	_ZN20RadioStationCarousel12cleanRdsDataEv @ 144 NONAME
+	_ZN20RadioStationCarousel12rightGestureEi @ 145 NONAME
+	_ZN20RadioStationCarousel12setFrequencyEj @ 146 NONAME
+	_ZN20RadioStationCarousel13delayedScrollEv @ 147 NONAME
+	_ZN20RadioStationCarousel13scrollToIndexERK11QModelIndexi @ 148 NONAME
+	_ZN20RadioStationCarousel14mouseMoveEventEP24QGraphicsSceneMouseEvent @ 149 NONAME
+	_ZN20RadioStationCarousel15insertFrequencyERK11QModelIndexii @ 150 NONAME
+	_ZN20RadioStationCarousel15removeFrequencyERK11QModelIndexii @ 151 NONAME
+	_ZN20RadioStationCarousel15setFavoriteIconERK6HbIcon @ 152 NONAME
+	_ZN20RadioStationCarousel15setScanningModeEb @ 153 NONAME
+	_ZN20RadioStationCarousel15setStationModelEP17RadioStationModel @ 154 NONAME
+	_ZN20RadioStationCarousel15updateLoopedPosEv @ 155 NONAME
+	_ZN20RadioStationCarousel15updateRadioTextERK12RadioStation @ 156 NONAME
+	_ZN20RadioStationCarousel16frequencyChangedEji @ 157 NONAME
+	_ZN20RadioStationCarousel16staticMetaObjectE @ 158 NONAME DATA 16
+	_ZN20RadioStationCarousel17animateNewStationERK12RadioStation @ 159 NONAME
+	_ZN20RadioStationCarousel17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 160 NONAME
+	_ZN20RadioStationCarousel17setAutoScrollTimeEi @ 161 NONAME
+	_ZN20RadioStationCarousel17setItemVisibilityEb @ 162 NONAME
+	_ZN20RadioStationCarousel17updateFrequenciesEv @ 163 NONAME
+	_ZN20RadioStationCarousel18currentStationItemEv @ 164 NONAME
+	_ZN20RadioStationCarousel18setNonFavoriteIconERK6HbIcon @ 165 NONAME
+	_ZN20RadioStationCarousel19getStaticMetaObjectEv @ 166 NONAME
+	_ZN20RadioStationCarousel19updateAntennaStatusEb @ 167 NONAME
+	_ZN20RadioStationCarousel21scanAnimationFinishedEv @ 168 NONAME
+	_ZN20RadioStationCarousel23radioTextPlusCheckEndedEv @ 169 NONAME
+	_ZN20RadioStationCarousel4initEP13RadioUiEngine @ 170 NONAME
+	_ZN20RadioStationCarousel6updateERK12RadioStation @ 171 NONAME
+	_ZN20RadioStationCarousel8uiEngineEv @ 172 NONAME
+	_ZN20RadioStationCarouselC1EP13RadioUiEngine @ 173 NONAME
+	_ZN20RadioStationCarouselC2EP13RadioUiEngine @ 174 NONAME
+	_ZNK15RadioMainWindow10metaObjectEv @ 175 NONAME
+	_ZNK15RadioTuningView10metaObjectEv @ 176 NONAME
+	_ZNK16RadioBannerLabel10metaObjectEv @ 177 NONAME
+	_ZNK16RadioFadingLabel10metaObjectEv @ 178 NONAME
+	_ZNK16RadioHistoryView10metaObjectEv @ 179 NONAME
+	_ZNK17RadioStationsView10metaObjectEv @ 180 NONAME
+	_ZNK17RadioStationsView12favoriteIconEv @ 181 NONAME
+	_ZNK17RadioStationsView14nowPlayingIconEv @ 182 NONAME
+	_ZNK19RadioFrequencyStrip10metaObjectEv @ 183 NONAME
+	_ZNK19RadioFrequencyStrip11selectorPosEv @ 184 NONAME
+	_ZNK19RadioFrequencyStrip14leftButtonIconEv @ 185 NONAME
+	_ZNK19RadioFrequencyStrip15rightButtonIconEv @ 186 NONAME
+	_ZNK19RadioFrequencyStrip9frequencyEPb @ 187 NONAME
+	_ZNK20RadioStationCarousel10metaObjectEv @ 188 NONAME
+	_ZNK20RadioStationCarousel12favoriteIconEv @ 189 NONAME
+	_ZNK20RadioStationCarousel12stationModelEv @ 190 NONAME
+	_ZNK20RadioStationCarousel14autoScrollTimeEv @ 191 NONAME
+	_ZNK20RadioStationCarousel15nonFavoriteIconEv @ 192 NONAME
+	_ZNK20RadioStationCarousel16isInScanningModeEv @ 193 NONAME
+	_ZNK20RadioStationCarousel17isAntennaAttachedEv @ 194 NONAME
+	_ZTI15RadioMainWindow @ 195 NONAME
+	_ZTI15RadioTuningView @ 196 NONAME
+	_ZTI16RadioBannerLabel @ 197 NONAME
+	_ZTI16RadioFadingLabel @ 198 NONAME
+	_ZTI16RadioHistoryView @ 199 NONAME
+	_ZTI17RadioStationsView @ 200 NONAME
+	_ZTI19RadioFrequencyStrip @ 201 NONAME
+	_ZTI20RadioStationCarousel @ 202 NONAME
+	_ZTV15RadioMainWindow @ 203 NONAME
+	_ZTV15RadioTuningView @ 204 NONAME
+	_ZTV16RadioBannerLabel @ 205 NONAME
+	_ZTV16RadioFadingLabel @ 206 NONAME
+	_ZTV16RadioHistoryView @ 207 NONAME
+	_ZTV17RadioStationsView @ 208 NONAME
+	_ZTV19RadioFrequencyStrip @ 209 NONAME
+	_ZTV20RadioStationCarousel @ 210 NONAME
+	_ZThn16_N17RadioStationsViewD0Ev @ 211 NONAME
+	_ZThn16_N17RadioStationsViewD1Ev @ 212 NONAME
+	_ZThn8_N15RadioMainWindowD0Ev @ 213 NONAME
+	_ZThn8_N15RadioMainWindowD1Ev @ 214 NONAME
+	_ZThn8_N16RadioBannerLabel5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 215 NONAME
+	_ZThn8_N17RadioStationsViewD0Ev @ 216 NONAME
+	_ZThn8_N17RadioStationsViewD1Ev @ 217 NONAME
+	_ZThn8_N19RadioFrequencyStrip15mousePressEventEP24QGraphicsSceneMouseEvent @ 218 NONAME
+	_ZThn8_N19RadioFrequencyStrip17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 219 NONAME
+	_ZThn8_N20RadioStationCarousel14mouseMoveEventEP24QGraphicsSceneMouseEvent @ 220 NONAME
+	_ZThn8_N20RadioStationCarousel17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 221 NONAME
 
--- a/radioapp/radioapp.pro	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioapp.pro	Mon May 03 12:31:41 2010 +0300
@@ -23,6 +23,7 @@
 SUBDIRS += radiopresetstorage
 SUBDIRS += radiouiengine
 SUBDIRS += radiowidgets
+SUBDIRS += radiowidgetsplugin
 SUBDIRS += radioapplication
 
 symbian {
--- a/radioapp/radioapplication/inc/testwindow_win32.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioapplication/inc/testwindow_win32.h	Mon May 03 12:31:41 2010 +0300
@@ -24,6 +24,7 @@
 // Forward declarations
 class HbMainWindow;
 class QPushButton;
+class QComboBox;
 class QGridLayout;
 
 class Win32Window : public QWidget
@@ -48,10 +49,13 @@
     void addSong();
     void clearSong();
     void toggleOffline();
-    void updateWindow();
+    void changeTheme( const QString& theme );
 
 private:
 
+    void initThemes();
+    QStringList themeRootPaths();
+
 private: // data
 
     QPushButton*    mOrientationButton;
@@ -67,7 +71,7 @@
 
     QPushButton*    mOfflineButton;
 
-    QPushButton*    mUpdateButton;
+    QComboBox*      mThemeBox;
 
     QGridLayout*    mToolbarLayout;
 
--- a/radioapp/radioapplication/radioapplication.pro	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioapplication/radioapplication.pro	Mon May 03 12:31:41 2010 +0300
@@ -19,50 +19,48 @@
 TEMPLATE        = app
 TARGET          = qtfmradio
 TRANSLATIONS    += fmradio.ts 
-win32:DESTDIR   = ../bin
 
 symbian: {
-    DEFINES += SYMBIAN
-    TARGET.CAPABILITY = CAP_APPLICATION MultimediaDD
-    TARGET.VID = VID_DEFAULT
-    TARGET.UID3 = 0x101FF976 # Old visual radio uid
-    TARGET.EPOCSTACKSIZE = 0x14000
-    TARGET.EPOCHEAPSIZE = 0x020000 0x2400000
+    TARGET.CAPABILITY       = CAP_APPLICATION MultimediaDD
+    TARGET.VID              = VID_DEFAULT
+    TARGET.UID3             = 0x101FF976 # Old visual radio uid
+    TARGET.EPOCSTACKSIZE    = 0x14000
+    TARGET.EPOCHEAPSIZE     = 0x020000 0x2400000
 }
 
-QT          = core
 CONFIG      += hb service
-CONFIG      -= gui network svg
 
 # Service provider specific configuration.
 SERVICE.FILE = resources/service_conf.xml
-#SERVICE.OPTIONS = embeddable
 
 INCLUDEPATH += . inc
-INCLUDEPATH += ../radioenginewrapper/commoninc
+INCLUDEPATH += ../commoninc
 INCLUDEPATH += ../radiouiengine/inc
 INCLUDEPATH += ../radiowidgets/inc
 
-win32:INCLUDEPATH += ../radioenginewrapper/inc
-win32:LIBS += -L../bin
-
-LIBS += -lradiouiengine
-LIBS += -lradiowidgets
+LIBS        += -lradiouiengine
+LIBS        += -lradiowidgets
 
 # UI does not normally depend on the wrapper, but it does on two special cases
 # 1. Logging is enabled. The logger is in the wrapper module
-# 2. Radio is built for win32 target. The test window needs to access wrapper
+# 2. Radio is built for win32 target. The test window needs to access the wrapper
 LOGGING_ENABLED:LIBS += -lradioenginewrapper
-win32:LIBS += -lradioenginewrapper
-
-DEPENDPATH  += $$INCLUDEPATH src
 
 # Sources
-HEADERS += radioapplication.h
+HEADERS     += radioapplication.h
 
-win32:HEADERS += testwindow_win32.h
+SOURCES     += main.cpp
+SOURCES     += radioapplication.cpp
+
+# Win32 specific stuff
+win32: {
+    LIBS += -lradioenginewrapper
 
-SOURCES += main.cpp
-SOURCES += radioapplication.cpp
+    HEADERS += testwindow_win32.h
+
+    SOURCES += testwindow_win32.cpp
 
-win32:SOURCES += testwindow_win32.cpp
+    DEFINES += HB_RESOURCES_DIR=\"\\\"$${HB_RESOURCES_DIR}\\\"\"
+}
+
+DEPENDPATH  += $$INCLUDEPATH src
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radioapplication/resources/compile_ts.bat	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,36 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+@echo off
+
+set QM_FILE_US=fmradio_en_US.qm
+set QM_FILE=fmradio_en.qm
+set QM_LOCATION=..\..\bin\%QM_FILE_US%
+
+ECHO Creating QM file
+call lrelease -idbased fmradio.ts -qm %QM_LOCATION%
+
+IF EXIST \epoc32\tools\epoc.bat (
+    echo Copying files to epoc32
+    xcopy /y fmradio.ts \epoc32\include\platform\qt\translations\fmradio_en.ts
+    xcopy /y fmradio.ts \epoc32\include\platform\qt\translations\fmradio_en_US.ts
+    
+    xcopy /y %QM_LOCATION% \epoc32\data\z\resource\qt\translations\%QM_FILE%
+    xcopy /y %QM_LOCATION% \epoc32\release\winscw\udeb\z\resource\qt\translations\%QM_FILE%
+    xcopy /y %QM_LOCATION% \epoc32\release\winscw\urel\z\resource\qt\translations\%QM_FILE%
+    xcopy /y %QM_LOCATION% \epoc32\data\z\resource\qt\translations\%QM_FILE_US%
+    xcopy /y %QM_LOCATION% \epoc32\release\winscw\udeb\z\resource\qt\translations\%QM_FILE_US%
+    xcopy /y %QM_LOCATION% \epoc32\release\winscw\urel\z\resource\qt\translations\%QM_FILE_US%
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radioapplication/resources/fmradio.ts	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,2178 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="3.0" language="en_GB" sourcelanguage="en_GB">
+<context>
+<message numerus="no" id="txt_rad_dialog_new_name">
+    <comment>Dialog title for renaming the station. </comment>        
+    <source>New name:</source>
+    <translation variants="no">New name:</translation>
+    <extra-loc-layout_id>qtl_dialog_pri_heading</extra-loc-layout_id>    
+    <extra-loc-viewid>rad</extra-loc-viewid>
+    <extra-loc-positionid>dialog</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_rock_music">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 11.</comment>        
+    <source>Rock Music</source>
+    <translation variants="no">Rock Music</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_personality">
+    <comment>Main view Information area item. Displayed if PTY is available. Used only in US region.</comment>        
+    <source>Personality</source>
+    <translation variants="no">Personality</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_clear_recently_played_songs_list">
+    <comment>Dialog text displayed when user is about to clear all recently played songs in Recently played songs view.</comment>        
+    <source>Clear Recently played songs list?</source>
+    <translation variants="no">Clear Recently played songs list?</translation>
+    <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>    
+    <extra-loc-viewid>rad</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_opt_play_history">
+    <comment>Options list item in main view. Opens Play history view.</comment>        
+    <source>Play history</source>
+    <translation variants="no">Play history</translation>
+    <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>opt</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_recently_played_songs_collects_song2">
+    <comment>Info text in main pane area if Recently played songs has no item (e.g. after the user has emptied the list). Note that &quot;Identify song&quot; must be the same string as txt_rad_list_identify_song. &quot;Recently played songs&quot; text must be the same as &quot;Recently played songs&quot; text must be the same as txt_rad_button_recently_played_songs. Displayed if Shazam (song identification) application is NOT installed to the device.</comment>        
+    <source>Recently played songs collects song information from radio stations which send the song information using RDS+ technology.</source>
+    <translation variants="no">Recently played songs collects song information from radio stations which send the song information using RDS+ technology.</translation>
+    <extra-loc-layout_id>qtl_view_empty_description_sec</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_03</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_common_button_cancel">
+    <comment>Button. Ignores the dialog and returns previous view</comment>        
+    <source>Cancel</source>
+    <translation variants="no">Cancel</translation>
+    <extra-loc-layout_id>qtl_dialog_softkey</extra-loc-layout_id>    
+    <extra-loc-viewid>common</extra-loc-viewid>
+    <extra-loc-positionid>button</extra-loc-positionid>
+    <extra-loc-feature>co</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_alarm_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Alarm</source>
+    <translation variants="no">Alarm</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_news">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 1.</comment>        
+    <source>News</source>
+    <translation variants="no">News</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_opt_search_all_stations">
+    <comment>Options list item. Initiates a functionality that scans through the whole frequency range and saves the found stations. Note! Displayed in main view and in Stations view.</comment>        
+    <source>Search all stations</source>
+    <translation variants="no">Search all stations</translation>
+    <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01, rad_02</extra-loc-viewid>
+    <extra-loc-positionid>opt</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_light_classical_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Light classical</source>
+    <translation variants="no">Light classical</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_culture">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 7.</comment>        
+    <source>Culture</source>
+    <translation variants="no">Culture</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_soft_rhythm_and_blues">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Soft rhythm and blues</source>
+    <translation variants="no">Soft rhythm and blues</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_country_music">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 25.</comment>        
+    <source>Country Music</source>
+    <translation variants="no">Country Music</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_fmradio_info_local_frequency_band_automaticall">
+    <comment>Discreet popup notification text. Displayed after region has been automatically selected.</comment>        
+    <source>Local frequency band automatically set for radio.</source>
+    <translation variants="no">Local frequency band automatically set for radio.</translation>
+    <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>    
+    <extra-loc-viewid>fmradio</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>fm</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_val_l1_mhz">
+    <comment>Two row list, second row. %L1 frequency of a station. Note! Only used if the station does not have a name. Only in landscape.</comment>        
+    <source>%L1 MHz</source>
+    <translation variants="no">%L1 MHz</translation>
+    <extra-loc-layout_id>qtl_list_sec2_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_03</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_rock_music">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Rock Music</source>
+    <translation variants="no">Rock Music</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_button_tagged_songs">
+    <comment>Button text. Expresses that the list contains songs which have been marked as favorite songs.</comment>        
+    <source>Tagged songs</source>
+    <translation variants="no">Tagged songs</translation>
+    <extra-loc-layout_id>qtl_toolbar_tiny_2</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_03</extra-loc-viewid>
+    <extra-loc-positionid>button</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_soft_rock">
+    <comment>Main view Information area item. Displayed if PTY is available. Used only in US region.</comment>        
+    <source>Soft rock</source>
+    <translation variants="no">Soft rock</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_religious_talk_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Religious talk</source>
+    <translation variants="no">Religious talk</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_culture">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Culture</source>
+    <translation variants="no">Culture</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_menu_search_via_shazam">
+    <comment>Item specific menu item. Opens a Shazam application where user can search song related services.</comment>        
+    <source>Search via Shazam</source>
+    <translation variants="no">Search via Shazam</translation>
+    <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_03</extra-loc-viewid>
+    <extra-loc-positionid>menu</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_nostalgia">
+    <comment>Main view Information area item. Displayed if PTY is available. Used only in US region.</comment>        
+    <source>Nostalgia</source>
+    <translation variants="no">Nostalgia</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_social_affairs">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 19.</comment>        
+    <source>Social Affairs</source>
+    <translation variants="no">Social Affairs</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_opt_clear_list">
+    <comment>Options list item. Empties the Recently played songs or Tagged songs list. </comment>        
+    <source>Clear list</source>
+    <translation variants="no">Clear list</translation>
+    <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_03</extra-loc-viewid>
+    <extra-loc-positionid>opt</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_other_music">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Other Music</source>
+    <translation variants="no">Other Music</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_classical_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Classical</source>
+    <translation variants="no">Classical</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_national_music_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>National Music</source>
+    <translation variants="no">National Music</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_rhythm_and_blues">
+    <comment>Main view Information area item. Displayed if PTY is available. Used only in US region.</comment>        
+    <source>Rhythm and blues</source>
+    <translation variants="no">Rhythm and blues</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_religious_talk">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Religious talk</source>
+    <translation variants="no">Religious talk</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_button_activate_loudspeaker">
+    <comment>A button text in main view. Displayed if volume is coming from the headset. Activating the function routes audio to the loudspeaker.</comment>        
+    <source>Activate loudspeaker</source>
+    <translation variants="no">Activate loudspeaker</translation>
+    <extra-loc-layout_id>txt_rad_button_stations</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>button</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_other_music_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Other Music</source>
+    <translation variants="no">Other Music</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_religion_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Religion</source>
+    <translation variants="no">Religion</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_nostalgia">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Nostalgia</source>
+    <translation variants="no">Nostalgia</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_common_menu_delete">
+    <comment>Item specific menu item. Allows the user to delete a station.</comment>        
+    <source>Delete</source>
+    <translation variants="no">Delete</translation>
+    <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>    
+    <extra-loc-viewid>common</extra-loc-viewid>
+    <extra-loc-positionid>menu</extra-loc-positionid>
+    <extra-loc-feature>co</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_language">
+    <comment>Main view Information area item. Displayed if PTY is available. Used only in US region.</comment>        
+    <source>Language</source>
+    <translation variants="no">Language</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_talk">
+    <comment>Main view Information area item. Displayed if PTY is available. Used only in US region.</comment>        
+    <source>Talk</source>
+    <translation variants="no">Talk</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_common_menu_rename_item">
+    <comment>Item specific menu item. Allows the user to define a new name for a station.</comment>        
+    <source>Rename</source>
+    <translation variants="no">Rename</translation>
+    <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>    
+    <extra-loc-viewid>common</extra-loc-viewid>
+    <extra-loc-positionid>menu</extra-loc-positionid>
+    <extra-loc-feature>co</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_soft_rhythm_and_blues">
+    <comment>Main view Information area item. Displayed if PTY is available. Used only in US region.</comment>        
+    <source>Soft rhythm and blues</source>
+    <translation variants="no">Soft rhythm and blues</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_documentary_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Documentary</source>
+    <translation variants="no">Documentary</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_education_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Education</source>
+    <translation variants="no">Education</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_national_music">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>National Music</source>
+    <translation variants="no">National Music</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_science">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 8.</comment>        
+    <source>Science</source>
+    <translation variants="no">Science</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_pop_music_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Pop Music</source>
+    <translation variants="no">Pop Music</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_list_l1_mhz">
+    <comment>Text in a home screen widget information area. %L1 is the radio station&apos;s frequency.</comment>        
+    <source>%L1 Mhz</source>
+    <translation variants="no">%L1 Mhz</translation>
+    <extra-loc-layout_id>txt_rad_list_l1_mhz</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>list</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_weather">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Weather</source>
+    <translation variants="no">Weather</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_drama">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Drama</source>
+    <translation variants="no">Drama</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_national_music">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 26.</comment>        
+    <source>National Music</source>
+    <translation variants="no">National Music</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_culture_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Culture</source>
+    <translation variants="no">Culture</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_finance_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Finance</source>
+    <translation variants="no">Finance</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_religious_music">
+    <comment>Main view Information area item. Displayed if PTY is available. Used only in US region.</comment>        
+    <source>Religious music</source>
+    <translation variants="no">Religious music</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_oldies_music">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Oldies Music</source>
+    <translation variants="no">Oldies Music</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_education">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 5.</comment>        
+    <source>Education</source>
+    <translation variants="no">Education</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_common_button_no">
+    <comment>Button. Pressing this button rejects the selected operation.</comment>        
+    <source>No</source>
+    <translation variants="no">No</translation>
+    <extra-loc-layout_id>qtl_dialog_softkey</extra-loc-layout_id>    
+    <extra-loc-viewid>common</extra-loc-viewid>
+    <extra-loc-positionid>button</extra-loc-positionid>
+    <extra-loc-feature>co</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_common_button_ok">
+    <comment>Button. Allows the user to accept the dialog and return to previous view</comment>        
+    <source>OK</source>
+    <translation variants="no">OK</translation>
+    <extra-loc-layout_id>qtl_dialog_softkey</extra-loc-layout_id>    
+    <extra-loc-viewid>common</extra-loc-viewid>
+    <extra-loc-positionid>button</extra-loc-positionid>
+    <extra-loc-feature>co</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_social_affairs_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Social Affairs</source>
+    <translation variants="no">Social Affairs</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_no_favourites_add_favourites_to_see">
+    <comment>Info text in main pane if &quot;Favourites&quot; list has no items. &quot;Favourite stations&quot; text must be same localization as txt_rad_subhead_favorite_stations. Favourite icon refers to a star -icon in the main view.</comment>        
+    <source>You can mark your favourite stations in All stations view by long tapping the station and selecting Add favourite. You can also tap the favourite icon in main view to mark it as a favorite.</source>
+    <translation variants="no">You can mark your favourite stations in All stations view by long tapping the station and selecting Add favourite. You can also tap the favourite icon in main view to mark it as a favorite.</translation>
+    <extra-loc-layout_id>qtl_view_empty_description_sec</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_clear_favourite_stations_list">
+    <comment>Dialog text displayed when user is about to clear the all stations in Favourite stations view.</comment>        
+    <source>Clear Favourite stations list?</source>
+    <translation variants="no">Clear Favourite stations list?</translation>
+    <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>    
+    <extra-loc-viewid>rad</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_adult_hits">
+    <comment>Main view Information area item. Displayed if PTY is available. Used only in US region.</comment>        
+    <source>Adult hits</source>
+    <translation variants="no">Adult hits</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_no_favourite_stations">
+    <comment>Title of the info text in main pane if &quot;Favourite stations&quot; list has no items. </comment>        
+    <source>(No favourite stations)</source>
+    <translation variants="no">(No favourite stations)</translation>
+    <extra-loc-layout_id>qtl_view_empty_title_pri</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_button_stations">
+    <comment>A button text in main view. Opens a Stations list view, which lists All stations and Favourite stations views.</comment>        
+    <source>Stations</source>
+    <translation variants="no">Stations</translation>
+    <extra-loc-layout_id>txt_rad_button_stations</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>button</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dialog_long_press_arrow_keys_to_search_str">
+    <comment>Help text displayed in main view station information area. Displayed if no stations have been marked as favourites and user presses previous or next button.</comment>        
+    <source>Mark favourite stations by pressing the star icon to enable navigation with short arrow presses. You can also swipe here to navigate between all stations. Long press arrow keys to search strong signal stations. </source>
+    <translation variants="no">Mark favourite stations by pressing the star icon to enable navigation with short arrow presses. You can also swipe here to navigate between all stations. Long press arrow keys to search strong signal stations. </translation>
+    <extra-loc-layout_id>txt_rad_dialog_long_press_arrow_keys_to_search_str</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_pop_music">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 10.</comment>        
+    <source>Pop Music</source>
+    <translation variants="no">Pop Music</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_varied">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 9.</comment>        
+    <source>Varied</source>
+    <translation variants="no">Varied</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_alarm_test_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Alarm Test</source>
+    <translation variants="no">Alarm Test</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_alarm">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 31.</comment>        
+    <source>Alarm</source>
+    <translation variants="no">Alarm</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_other_music">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 15.</comment>        
+    <source>Other Music</source>
+    <translation variants="no">Other Music</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_long_caption_fm_radio">
+    <comment>Application menu item name in list. Long caption.</comment>        
+    <source>FM Radio</source>
+    <translation variants="no">FM Radio</translation>
+    <extra-loc-layout_id>qtl_list_pri_large_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>fmradio</extra-loc-viewid>
+    <extra-loc-positionid>list</extra-loc-positionid>
+    <extra-loc-feature>fm</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_childrens_programmes">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 18.</comment>        
+    <source>Children’s programmes</source>
+    <translation variants="no">Children’s programmes</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_varied">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Varied</source>
+    <translation variants="no">Varied</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_leisure">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 23.</comment>        
+    <source>Leisure</source>
+    <translation variants="no">Leisure</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_alarm">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Alarm</source>
+    <translation variants="no">Alarm</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_remove_station_from_favorites">
+    <comment>Dialog text displayed when user is about to remove a station from Favorite list in Stations view.</comment>        
+    <source>Remove station from favorites?</source>
+    <translation variants="no">Remove station from favorites?</translation>
+    <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>    
+    <extra-loc-viewid>rad</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_information">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Information</source>
+    <translation variants="no">Information</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_menu_remove_favourite">
+    <comment>Item specific menu item. Allows the user to remove station from the favourite station list.</comment>        
+    <source>Remove from favourites</source>
+    <translation variants="no">Remove from favourites</translation>
+    <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>menu</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_recently_played_songs_collects_song_i">
+    <comment>Info text in main pane area if Recently played songs list has no item (e.g. after the user has emptied the list). Note that &quot;Identify song&quot; must be the same string as txt_rad_list_identify_song. &quot;Recently played songs&quot; text must be the same as txt_rad_button_recently_played_songs. Displayed if Shazam (song identification) application is installed to the device.</comment>        
+    <source>Recently played songs collects song information from radio stations which send the song information using RDS+ technology.
+Also songs which are identified with ”Identify song” functionality in main view are displayed here.</source>
+    <translation variants="no">Recently played songs collects song information from radio stations which send the song information using RDS+ technology.
+Also songs which are identified with ”Identify song” functionality in main view are displayed here.</translation>
+    <extra-loc-layout_id>qtl_view_empty_description_sec</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_03</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_title_fm_radio">
+    <comment>View title, shown in all FM Radio views.</comment>        
+    <source>FM Radio</source>
+    <translation variants="no">FM Radio</translation>
+    <extra-loc-layout_id>qtl_titlebar</extra-loc-layout_id>    
+    <extra-loc-viewid>rad</extra-loc-viewid>
+    <extra-loc-positionid>title</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_button_cancel">
+    <comment>Button which is displayed during the search all stations function on the main view.</comment>        
+    <source>Cancel</source>
+    <translation variants="no">Cancel</translation>
+    <extra-loc-layout_id>txt_rad_button_cancel</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>button</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_religious_music_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Religious music</source>
+    <translation variants="no">Religious music</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_delete_station">
+    <comment>Confirmation query for deleting a selected station.</comment>        
+    <source>Delete station?</source>
+    <translation variants="no">Delete station?</translation>
+    <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>    
+    <extra-loc-viewid>rad</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_religion">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Religion</source>
+    <translation variants="no">Religion</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_soft_rock_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Soft rock</source>
+    <translation variants="no">Soft rock</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_menu_add_to_favourites">
+    <comment>Item specific menu item. Allows the user to add a local station to favourite stations list. Available only if the station item is not already in the favourites.</comment>        
+    <source>Add to favourites</source>
+    <translation variants="no">Add to favourites</translation>
+    <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>menu</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_current_affairs">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 2.</comment>        
+    <source>Current affairs</source>
+    <translation variants="no">Current affairs</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_drama_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Drama</source>
+    <translation variants="no">Drama</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_you_can_add_song_to_the_tagged_songs">
+    <comment>Info text in main pane area if Tagged songs list has no item (e.g. after the user has deleted all content from the list). Note that &quot;tagged songs&quot; must use the same localisation as txt_rad_button_tagged_songs. Recently played songs must be same as &quot;Recently played songs&quot; text must be the same as txt_rad_button_recently_played_songs..</comment>        
+    <source>You can add song to the tagged songs list from Recently played songs or from main view if song is identified by FM Radio. </source>
+    <translation variants="no">You can add song to the tagged songs list from Recently played songs or from main view if song is identified by FM Radio. </translation>
+    <extra-loc-layout_id>qtl_view_empty_description_sec</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_03</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_social_affairs">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Social Affairs</source>
+    <translation variants="no">Social Affairs</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_education">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Education</source>
+    <translation variants="no">Education</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_jazz_music">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Jazz Music</source>
+    <translation variants="no">Jazz Music</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_religious_music">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Religious music</source>
+    <translation variants="no">Religious music</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_continue_using_the_radio_in_offline">
+    <comment>Confirmation query text which is displayed when the FM radio is on and device is switched to offline mode.</comment>        
+    <source>Continue using the Radio in off-line mode?</source>
+    <translation variants="no">Continue using the Radio in off-line mode?</translation>
+    <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>    
+    <extra-loc-viewid>rad</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_list_unknown">
+    <comment>First row of the two row list item. Displayed only on landscape! Displayed when the artist name is not available for the identified song. %1 is the song name. In landscape the whole string is &quot;(Unknown) - Song name&quot; e.g. &quot;(Unknown) - Like a Virgin</comment>        
+    <source>(Unknown) - %1</source>
+    <translation variants="no">(Unknown) - %1</translation>
+    <extra-loc-layout_id>qtl_list_pri_large_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_03</extra-loc-viewid>
+    <extra-loc-positionid>dblist</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_travel">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Travel</source>
+    <translation variants="no">Travel</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_soft_rhythm_and_blues_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Soft rhythm and blues</source>
+    <translation variants="no">Soft rhythm and blues</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_clear_all_stations_list">
+    <comment>Dialog text displayed when user is about to clear the all stations in All stations view.</comment>        
+    <source>Clear All stations list?</source>
+    <translation variants="no">Clear All stations list?</translation>
+    <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>    
+    <extra-loc-viewid>rad</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_classical">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Classical</source>
+    <translation variants="no">Classical</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dpophead_song_was_added_to_favorite_songs">
+    <comment>Discreet popup heading text. Displayed in main view when a song has been tagged. </comment>        
+    <source>Song was added to Tagged songs.</source>
+    <translation variants="no">Song was added to Tagged songs.</translation>
+    <extra-loc-layout_id>qtl_notifdialog_pri2_medium_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad</extra-loc-viewid>
+    <extra-loc-positionid>dpophead</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_talk">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Talk</source>
+    <translation variants="no">Talk</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_common_button_yes">
+    <comment>Button. Pressing this button confirms the selected operation.</comment>        
+    <source>Yes</source>
+    <translation variants="no">Yes</translation>
+    <extra-loc-layout_id>qtl_dialog_softkey</extra-loc-layout_id>    
+    <extra-loc-viewid>common</extra-loc-viewid>
+    <extra-loc-positionid>button</extra-loc-positionid>
+    <extra-loc-feature>co</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_finance">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Finance</source>
+    <translation variants="no">Finance</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_country_music_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Country Music</source>
+    <translation variants="no">Country Music</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_activate_radio_in_offline_mode">
+    <comment>Confirmation query which is displayed when the FM Radio is launched while the device is in offline mode.</comment>        
+    <source>Activate Fm Radio in off-line mode?</source>
+    <translation variants="no">Activate Fm Radio in off-line mode?</translation>
+    <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>    
+    <extra-loc-viewid>rad</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_searching_local_stations_please_wait">
+    <comment>Progress dialog text. Displayed when the system is scanning the whole frequency range for strong signal stations. </comment>        
+    <source>Searching local stations. Please wait.</source>
+    <translation variants="no">Searching local stations. Please wait.</translation>
+    <extra-loc-layout_id>qtl_dialog_pri3</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_04</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz2">
+    <comment>Second row of two row list item. %L1 is the frequency value of the station. Displayed if station HAS a name which is displayed on the first row.</comment>        
+    <source>%L1 MHz</source>
+    <translation variants="no">%L1 MHz</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_soft_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Soft</source>
+    <translation variants="no">Soft</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_drama">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 6.</comment>        
+    <source>Drama</source>
+    <translation variants="no">Drama</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_common_opt_deactivate_loudspeaker">
+    <comment>Options list item. Deactivates the loudspeaker. Only available if audio can be routed to the headset</comment>        
+    <source>Deactivate loudspeaker</source>
+    <translation variants="no">Deactivate loudspeaker</translation>
+    <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>    
+    <extra-loc-viewid>common</extra-loc-viewid>
+    <extra-loc-positionid>opt</extra-loc-positionid>
+    <extra-loc-feature>co</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_clear_tagged_songs_list">
+    <comment>Dialog text displayed when user is about to clear all tagged songs in Tagged songs view.</comment>        
+    <source>Clear Tagged songs list?</source>
+    <translation variants="no">Clear Tagged songs list?</translation>
+    <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>    
+    <extra-loc-viewid>rad</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_top_40">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Top 40</source>
+    <translation variants="no">Top 40</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_phone_in_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Phone In</source>
+    <translation variants="no">Phone In</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_list_searching_all_available_stations_ple">
+    <comment>Main pane Information area item. Displayed below the tuning animation during the first time startup.</comment>        
+    <source>Searching all available stations. Please wait.</source>
+    <translation variants="no">Searching all available stations. Please wait.</translation>
+    <extra-loc-layout_id>txt_rad_info_connect_wired_headset</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_leisure_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Leisure</source>
+    <translation variants="no">Leisure</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_college">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>College</source>
+    <translation variants="no">College</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_all_stations_in_stations_list_will_be">
+    <comment>Confirmation query displayed when user is about to start scanning of all the available stations. </comment>        
+    <source>Stations in station list will be replaced. Favourite stations won&apos;t be touched. Continue?</source>
+    <translation variants="no">Stations in station list will be replaced. Favourite stations won&apos;t be touched. Continue?</translation>
+    <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>    
+    <extra-loc-viewid>rad</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_menu_tag_song">
+    <comment>Item specific menu item. Allows the user to add a song in play history list to tagged songs list. Available only if the item is not already in the tagged songs.</comment>        
+    <source>Tag song</source>
+    <translation variants="no">Tag song</translation>
+    <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01, rad_03</extra-loc-viewid>
+    <extra-loc-positionid>menu</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_no_stations_search_stations_automat">
+    <comment>Info text in main pane if &quot;All stations&quot; list has no items. Activates the search all station function if user taps the text.</comment>        
+    <source>Search stations automatically by tapping here.</source>
+    <translation variants="no">Search stations automatically by tapping here.</translation>
+    <extra-loc-layout_id>qtl_view_empty_description_sec</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_college">
+    <comment>Main view Information area item. Displayed if PTY is available. Used only in US region.</comment>        
+    <source>College</source>
+    <translation variants="no">College</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_news_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>News</source>
+    <translation variants="no">News</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_pop_music">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Pop Music</source>
+    <translation variants="no">Pop Music</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_top_40_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Top 40</source>
+    <translation variants="no">Top 40</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_public">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Public</source>
+    <translation variants="no">Public</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_nostalgia_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Nostalgia</source>
+    <translation variants="no">Nostalgia</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_fmradio_info_fm_radio_could_not_be_started">
+    <comment>Dialog text which is displayed if FM Radio cannot be started for e.g. very low system memory or other rare cases.</comment>        
+    <source>FM Radio could not be started. </source>
+    <translation variants="no">FM Radio could not be started. </translation>
+    <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>    
+    <extra-loc-viewid>fmradio</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>fm</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_no_stations">
+    <comment>Title of the info text in main pane if &quot;All stations&quot; list has no items. </comment>        
+    <source>(No stations)</source>
+    <translation variants="no">(No stations)</translation>
+    <extra-loc-layout_id>qtl_view_empty_title_pri</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_short_caption_fm_radio">
+    <comment>Application menu item name in grid. Short caption.</comment>        
+    <source>FM Radio</source>
+    <translation variants="no">FM Radio</translation>
+    <extra-loc-layout_id>qtl_grid_applications_sec</extra-loc-layout_id>    
+    <extra-loc-viewid>fmradio</extra-loc-viewid>
+    <extra-loc-positionid>grid</extra-loc-positionid>
+    <extra-loc-feature>fm</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_common_opt_exit">
+    <comment>Options list item. With the exit option, the user can close the currently active application and return to the Home screen.</comment>        
+    <source>Exit</source>
+    <translation variants="no">Exit</translation>
+    <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>    
+    <extra-loc-viewid>common</extra-loc-viewid>
+    <extra-loc-positionid>opt</extra-loc-positionid>
+    <extra-loc-feature>co</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_serious_classical">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 14.</comment>        
+    <source>Serious classical</source>
+    <translation variants="no">Serious classical</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_religion">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 20.</comment>        
+    <source>Religion</source>
+    <translation variants="no">Religion</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_easy_listening">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 12.</comment>        
+    <source>Easy Listening</source>
+    <translation variants="no">Easy Listening</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_classical">
+    <comment>Main view Information area item. Displayed if PTY is available. Used only in US region.</comment>        
+    <source>Classical</source>
+    <translation variants="no">Classical</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_rock_music_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Rock Music</source>
+    <translation variants="no">Rock Music</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dpophead_no_stations_found_try_searching">
+    <comment>Discreet popup heading text. Displayed when no stations were found after search all stations function has been finished.</comment>        
+    <source>No stations found. Try searching stations by scrolling the frequency strip.</source>
+    <translation variants="no">No stations found. Try searching stations by scrolling the frequency strip.</translation>
+    <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>    
+    <extra-loc-viewid>rad</extra-loc-viewid>
+    <extra-loc-positionid>dpophead</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_sport">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Sport</source>
+    <translation variants="no">Sport</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_tsw_caption_fm_radio">
+    <comment>Application name in Task switcher.</comment>        
+    <source>FM Radio</source>
+    <translation variants="no">FM Radio</translation>
+    <extra-loc-layout_id>txt_tsw_caption_fmradio</extra-loc-layout_id>    
+    <extra-loc-viewid>tsw_01</extra-loc-viewid>
+    <extra-loc-positionid>caption</extra-loc-positionid>
+    <extra-loc-feature>ts</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_subhead_play_history">
+    <comment>Heading text for the Play history view.</comment>        
+    <source>Play history</source>
+    <translation variants="no">Play history</translation>
+    <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_03</extra-loc-viewid>
+    <extra-loc-positionid>subhead</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_oldies_music_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Oldies Music</source>
+    <translation variants="no">Oldies Music</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_menu_remove_tag">
+    <comment>Item specific menu item. Allows the user to remove a song from the tagged songs list.</comment>        
+    <source>Remove tag</source>
+    <translation variants="no">Remove tag</translation>
+    <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_03</extra-loc-viewid>
+    <extra-loc-positionid>menu</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_sport_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Sport</source>
+    <translation variants="no">Sport</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_classic_rock_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Classic rock</source>
+    <translation variants="no">Classic rock</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_personality">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Personality</source>
+    <translation variants="no">Personality</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_language">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Language</source>
+    <translation variants="no">Language</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_current_affairs">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Current affairs</source>
+    <translation variants="no">Current affairs</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_soft">
+    <comment>Main view Information area item. Displayed if PTY is available. Used only in US region.</comment>        
+    <source>Soft</source>
+    <translation variants="no">Soft</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_button_local_stations">
+    <comment>Toolbar button. Displays list of all radio stations.</comment>        
+    <source>All stations</source>
+    <translation variants="no">All stations</translation>
+    <extra-loc-layout_id>qtl_toolbar_tiny_2</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>button</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_serious_classical">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Serious classical</source>
+    <translation variants="no">Serious classical</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_sport">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 4.</comment>        
+    <source>Sport</source>
+    <translation variants="no">Sport</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_weather">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 16.</comment>        
+    <source>Weather</source>
+    <translation variants="no">Weather</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_science">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Science</source>
+    <translation variants="no">Science</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_classic_rock">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Classic rock</source>
+    <translation variants="no">Classic rock</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_soft_rock">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Soft rock</source>
+    <translation variants="no">Soft rock</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_light_classical">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 13.</comment>        
+    <source>Light classical</source>
+    <translation variants="no">Light classical</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_folk_music">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Folk Music</source>
+    <translation variants="no">Folk Music</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_phone_in">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 21.</comment>        
+    <source>Phone In</source>
+    <translation variants="no">Phone In</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_button_favourites">
+    <comment>Toolbar button. Displays list of all favourite radio stations.</comment>        
+    <source>Favourite stations</source>
+    <translation variants="no">Favourite stations</translation>
+    <extra-loc-layout_id>qtl_toolbar_tiny_2</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>button</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_weather_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Weather</source>
+    <translation variants="no">Weather</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_1_2">
+    <comment>Two row list item first row. Displays artist and song name. Only in landscape. %1 is the artist&apos;s name and %2 is the song name.</comment>        
+    <source>%1 - %2</source>
+    <translation variants="no">%1 - %2</translation>
+    <extra-loc-layout_id>qtl_list_pri2_graphic_add</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_03</extra-loc-viewid>
+    <extra-loc-positionid>dblist</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_personality_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Personality</source>
+    <translation variants="no">Personality</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_rhythm_and_blues_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Rhythm and blues</source>
+    <translation variants="no">Rhythm and blues</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_information_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Information</source>
+    <translation variants="no">Information</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_leisure">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Leisure</source>
+    <translation variants="no">Leisure</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_alarm_test">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 30.</comment>        
+    <source>Alarm Test</source>
+    <translation variants="no">Alarm Test</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_current_affairs_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Current affairs</source>
+    <translation variants="no">Current affairs</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_childrens_programmes_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Children’s programmes</source>
+    <translation variants="no">Children’s programmes</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_button_recently_played_songs">
+    <comment>Button text. Opens the Recently played songs list view.</comment>        
+    <source>Recently played songs</source>
+    <translation variants="no">Recently played songs</translation>
+    <extra-loc-layout_id>qtl_toolbar_tiny_2</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_03</extra-loc-viewid>
+    <extra-loc-positionid>button</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_jazz_music">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 24.</comment>        
+    <source>Jazz Music</source>
+    <translation variants="no">Jazz Music</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_soft">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Soft</source>
+    <translation variants="no">Soft</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_information">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 3.</comment>        
+    <source>Information</source>
+    <translation variants="no">Information</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_alarm_test">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Alarm Test</source>
+    <translation variants="no">Alarm Test</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_rhythm_and_blues">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Rhythm and blues</source>
+    <translation variants="no">Rhythm and blues</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_subhead_favorite_stations">
+    <comment>Heading text for the Stations view&apos;s Favorite stations view</comment>        
+    <source>Favorite stations</source>
+    <translation variants="no">Favorite stations</translation>
+    <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>subhead</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_unknown">
+    <comment>First row of the two row list item. Displayed only in portrait and only when the artist name is not available for the identified song.</comment>        
+    <source>(Unknown)</source>
+    <translation variants="no">(Unknown)</translation>
+    <extra-loc-layout_id>qtl_list_pri_large_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_03</extra-loc-viewid>
+    <extra-loc-positionid>dblist</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_common_menu_play_music">
+    <comment>Item specific menu item. Starts to play the station when selected. Not displayed if station is already playing.</comment>        
+    <source>Play</source>
+    <translation variants="no">Play</translation>
+    <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>    
+    <extra-loc-viewid>common</extra-loc-viewid>
+    <extra-loc-positionid>menu</extra-loc-positionid>
+    <extra-loc-feature>co</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_easy_listening_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Easy Listening</source>
+    <translation variants="no">Easy Listening</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_adult_hits">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Adult hits</source>
+    <translation variants="no">Adult hits</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_play_history_is_empty">
+    <comment>Title of the info text in main pane if &quot;Recently played songs&quot; or &quot;Tagged songs&quot; list has no items. </comment>        
+    <source>(No songs)</source>
+    <translation variants="no">(No songs)</translation>
+    <extra-loc-layout_id>qtl_view_empty_title_pri</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_03</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_public_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Public</source>
+    <translation variants="no">Public</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_varied_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Varied</source>
+    <translation variants="no">Varied</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_menu_search_from_music_store">
+    <comment>Item specific menu item. Allows the user to search the song/artist from Nokia Music Store</comment>        
+    <source>Search from Ovi Music</source>
+    <translation variants="no">Search from Ovi Music</translation>
+    <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01, rad_03</extra-loc-viewid>
+    <extra-loc-positionid>menu</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_button_identify_song">
+    <comment>A button text in main view. Allows the user to identify the currently playing song. Launches Shazam application which does the actual song identification. Displayed if Shazam application is available in the device.</comment>        
+    <source>Identify song</source>
+    <translation variants="no">Identify song</translation>
+    <extra-loc-layout_id>txt_rad_button_stations</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>button</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_science_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Science</source>
+    <translation variants="no">Science</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_jazz_music_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Jazz Music</source>
+    <translation variants="no">Jazz Music</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_documentary">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Documentary</source>
+    <translation variants="no">Documentary</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_list_seeking">
+    <comment>Main pane Information area item. Displayed on the center of the area when searching for a strong signal station.</comment>        
+    <source>Seeking</source>
+    <translation variants="no">Seeking</translation>
+    <extra-loc-layout_id>txt_rad_info_connect_wired_headset</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_folk_music_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Folk Music</source>
+    <translation variants="no">Folk Music</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_list_l1_mhz_big">
+    <comment>Main pane information area item for the frequency. %L1 is the radio station&apos;s frequency. Displayed in big font. Displayed if station name is not available. Note that the &quot;Mhz&quot; text is displayed smaller than the actual frequency.</comment>        
+    <source>%L1 MHz</source>
+    <translation variants="no">%L1 MHz</translation>
+    <extra-loc-layout_id>txt_rad_list_l1_mhz_big</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>list</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_top_40">
+    <comment>Main view Information area item. Displayed if PTY is available. Used only in US region.</comment>        
+    <source>Top 40</source>
+    <translation variants="no">Top 40</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_news">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>News</source>
+    <translation variants="no">News</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_connect_wired_headset1">
+    <comment>Main pane Information area item. Displayed if an antenna is not connected and no internal antenna is available. </comment>        
+    <source>Connect wired headset.</source>
+    <translation variants="no">Connect wired headset.</translation>
+    <extra-loc-layout_id>txt_rad_info_connect_wired_headset</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_easy_listening">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Easy Listening</source>
+    <translation variants="no">Easy Listening</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_finance">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 17.</comment>        
+    <source>Finance</source>
+    <translation variants="no">Finance</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_childrens_programmes">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Children’s programmes</source>
+    <translation variants="no">Children’s programmes</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_adult_hits_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Adult hits</source>
+    <translation variants="no">Adult hits</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_serious_classical_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Serious classical</source>
+    <translation variants="no">Serious classical</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_documentary">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 29.</comment>        
+    <source>Documentary</source>
+    <translation variants="no">Documentary</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_college_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>College</source>
+    <translation variants="no">College</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_button_tag_song">
+    <comment>A button text in main view. Adds the currently playing song to the Tagged songs list.</comment>        
+    <source>Tag song</source>
+    <translation variants="no">Tag song</translation>
+    <extra-loc-layout_id>txt_rad_button_stations</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>button</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_connect_wired_headset">
+    <comment>Notification text which is displayed in home screen widget, when the headset antenna is not connected.</comment>        
+    <source>Connect wired headset.</source>
+    <translation variants="no">Connect wired headset.</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_light_classical">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Light classical</source>
+    <translation variants="no">Light classical</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_button_deactivate_loudspeaker">
+    <comment>A button text in main view. Displayed if volume is coming from the integrated loudspeaker. Activating the function routes audio to the headset.</comment>        
+    <source>Deactivate loudspeaker</source>
+    <translation variants="no">Deactivate loudspeaker</translation>
+    <extra-loc-layout_id>txt_rad_button_stations</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>button</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_religious_talk">
+    <comment>Main view Information area item. Displayed if PTY is available. Used only in US region.</comment>        
+    <source>Religious talk</source>
+    <translation variants="no">Religious talk</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_language_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Language</source>
+    <translation variants="no">Language</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_button_search_all_stations">
+    <comment>A button text in main view. Starts the automatic frequency scanning for seeking all the available local stations</comment>        
+    <source>Search all stations</source>
+    <translation variants="no">Search all stations</translation>
+    <extra-loc-layout_id>txt_rad_button_stations</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>button</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_travel">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 22.</comment>        
+    <source>Travel</source>
+    <translation variants="no">Travel</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dpophead_connect_wired_headset">
+    <comment>Discreet popup notification text. Displayed in all other views but main view when headset antenna is removed.</comment>        
+    <source>Connect wired headset.</source>
+    <translation variants="no">Connect wired headset.</translation>
+    <extra-loc-layout_id>qtl_notifdialog_pri2_medium_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad</extra-loc-viewid>
+    <extra-loc-positionid>dpophead</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_phone_in">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Phone In</source>
+    <translation variants="no">Phone In</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_oldies_music">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 27.</comment>        
+    <source>Oldies Music</source>
+    <translation variants="no">Oldies Music</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_public">
+    <comment>Main view Information area item. Displayed if PTY is available. Used only in US region.</comment>        
+    <source>Public</source>
+    <translation variants="no">Public</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_talk_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Talk</source>
+    <translation variants="no">Talk</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz">
+    <comment>First row of the the two row list item. %L1 is the frequency value of the station. Displayed only if the station does not have a name.</comment>        
+    <source>%L1 MHz</source>
+    <translation variants="no">%L1 MHz</translation>
+    <extra-loc-layout_id>qtl_list_pri_graphic_add</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_list_l1_mhz_small">
+    <comment>Main pane information area item for the frequency. %L1 is the radio station&apos;s frequency. Displayed in small font if station name IS available.</comment>        
+    <source>%L1 MHz</source>
+    <translation variants="no">%L1 MHz</translation>
+    <extra-loc-layout_id>txt_rad_list_l1_mhz_small</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>list</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_dblist_l1_mhz_val_country_music">
+    <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
+    <source>Country Music</source>
+    <translation variants="no">Country Music</translation>
+    <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>dblist_val</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_remove_song_from_tagged_songs">
+    <comment>Dialog text displayed when user is about to remove a song from Favorite list in Favorite songs view.</comment>        
+    <source>Remove song from tagged songs?</source>
+    <translation variants="no">Remove song from tagged songs?</translation>
+    <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>    
+    <extra-loc-viewid>rad</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_classic_rock">
+    <comment>Main view Information area item. Displayed if PTY is available. Used only in US region.</comment>        
+    <source>Classic rock</source>
+    <translation variants="no">Classic rock</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_travel_hs">
+    <comment>Displayed in FM Radio home screen widget&apos;s information area.</comment>        
+    <source>Travel</source>
+    <translation variants="no">Travel</translation>
+    <extra-loc-layout_id>txt_rad_info_news_hs</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_05</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_common_opt_activate_loudspeaker">
+    <comment>Options list item. Switches the audio from handset or handsfree to loudspeaker. Only available if audio can be routed to the loudspeaker.</comment>        
+    <source>Activate loudspeaker</source>
+    <translation variants="no">Activate loudspeaker</translation>
+    <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>    
+    <extra-loc-viewid>common</extra-loc-viewid>
+    <extra-loc-positionid>opt</extra-loc-positionid>
+    <extra-loc-feature>co</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_subhead_all_stations">
+    <comment>Heading text for the Stations view&apos;s Play history view</comment>        
+    <source>All stations</source>
+    <translation variants="no">All stations</translation>
+    <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_02</extra-loc-viewid>
+    <extra-loc-positionid>subhead</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_rad_info_folk_music">
+    <comment>Main view Information area item. Displayed if PTY is available. RDS Programme Type identifier for PTY code 28.</comment>        
+    <source>Folk Music</source>
+    <translation variants="no">Folk Music</translation>
+    <extra-loc-layout_id>txt_rad_info_news</extra-loc-layout_id>    
+    <extra-loc-viewid>rad_01</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>ra</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+</context>
+</TS>
--- a/radioapp/radioapplication/src/main.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioapplication/src/main.cpp	Mon May 03 12:31:41 2010 +0300
@@ -35,11 +35,16 @@
 
     LOG_TIMESTAMP( "Tesla started" );
 
+#ifdef BUILD_WIN32
+    QString path = ".";
+    QString localizedRadio = "fmradio_en_US.qm";
+#else
     const QString localizedRadio = "fmradio_" + QLocale::system().name();
-    QString path = QString( TRANSLATIONS_PATH_FORMAT ).arg( "C" );  
+    QString path = QString( TRANSLATIONS_PATH_FORMAT ).arg( "C" );
     if ( !QFile::exists( path + localizedRadio ) ) {
         path = QString( TRANSLATIONS_PATH_FORMAT ).arg( "Z" );
     }
+#endif // BUILD_WIN32
     
     QTranslator translator;
     translator.load( localizedRadio, path );
--- a/radioapp/radioapplication/src/radioapplication.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioapplication/src/radioapplication.cpp	Mon May 03 12:31:41 2010 +0300
@@ -22,7 +22,6 @@
 #include "radioapplication.h"
 #include "radiomainwindow.h"
 #include "radiouiengine.h"
-#include "radiolocalization.h"
 #include "radio_global.h"
 #include "radiologger.h"
 
@@ -87,7 +86,8 @@
         // Start the engine
         mUiEngine = new RadioUiEngine( this );
         if ( !mUiEngine->startRadio() ) {
-            mMainWindow->showErrorMessage( TRANSLATE( KErrorEngineStartFailed ) );
+            //TODO: Get error message
+//            mMainWindow->showErrorMessage( TRANSLATE( KErrorEngineStartFailed ) );
             quit();
             return;
         }
--- a/radioapp/radioapplication/src/testwindow_win32.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioapplication/src/testwindow_win32.cpp	Mon May 03 12:31:41 2010 +0300
@@ -22,6 +22,13 @@
 #include <HbMainWindow>
 #include <QTimer>
 #include <QMessageBox>
+#include <QComboBox>
+#include <QLocalSocket>
+#include <QDir>
+#include <QStringListModel>
+#include <QSettings>
+#include <HbInstance>
+#include <QLabel>
 
 // User includes
 #include "testwindow_win32.h"
@@ -64,16 +71,21 @@
     mOrientationButton( new QPushButton( "Change Orientation", this ) ),
     mVolUpButton( new QPushButton( "Volume Up", this ) ),
     mVolDownButton( new QPushButton( "Volume Down", this ) ),
-    mHeadsetButton( new QPushButton( KBtnDisconnectHeadset, this ) ),
     mAddSongButton( new QPushButton( "Add Song", this ) ),
     mClearSongButton( new QPushButton( "Clear Song", this ) ),
+    mHeadsetButton( new QPushButton( KBtnDisconnectHeadset, this ) ),
+    mHeadsetConnected( true ),
     mOfflineButton( new QPushButton( KBtnGoOffline, this ) ),
-    mUpdateButton( new QPushButton( "Update", this ) ),
-    mHeadsetConnected( true ),
+    mThemeBox( new QComboBox( this ) ),
+    mToolbarLayout( 0 ),
     mVolume( 5 ),
     mRadioWindow( 0 ),
+    mOrientation( Qt::Vertical ),
     mSongIndex( 0 )
 {
+    mThemeBox->setEditable( false );
+    initThemes();    
+
     connectAndTest( mOrientationButton, SIGNAL(clicked()), this, SLOT(changeOrientation()) );
     connectAndTest( mVolUpButton, SIGNAL(clicked()), this, SLOT(volumeUp()) );
     connectAndTest( mVolDownButton, SIGNAL(clicked()), this, SLOT(volumeDown()) );
@@ -81,7 +93,7 @@
     connectAndTest( mAddSongButton, SIGNAL(clicked()), this, SLOT(addSong()) );
     connectAndTest( mClearSongButton, SIGNAL(clicked()), this, SLOT(clearSong()) );
     connectAndTest( mOfflineButton, SIGNAL(clicked()), this, SLOT(toggleOffline()) );
-    connectAndTest( mUpdateButton, SIGNAL(clicked()), this, SLOT(updateWindow()) );
+    connectAndTest( mThemeBox, SIGNAL(activated(QString)), this, SLOT(changeTheme(QString)) );
 
     QTimer::singleShot( 0, this, SLOT(updateWindowSize()) );
 }
@@ -117,7 +129,15 @@
     mToolbarLayout->addWidget( mAddSongButton, 2, 0 );
     mToolbarLayout->addWidget( mClearSongButton, 2, 1 );
     mToolbarLayout->addWidget( mOfflineButton, 3, 0 );
-    mToolbarLayout->addWidget( mUpdateButton, 3, 1 );
+
+    QGridLayout* themeLayout = new QGridLayout( this );
+    themeLayout->addWidget( new QLabel( "Theme:", this ), 0, 0 );
+    themeLayout->addWidget( mThemeBox, 0, 1 );
+    themeLayout->setColumnStretch( 1, 2 );
+
+    mToolbarLayout->addLayout( themeLayout, 3, 1 );
+    mToolbarLayout->setColumnStretch( 0, 1 );
+    mToolbarLayout->setColumnStretch( 1, 1 );
 
     layout->addItem( mToolbarLayout );
     layout->addWidget( radioWindow );
@@ -244,7 +264,83 @@
 /*!
  * Private slot
  */
-void Win32Window::updateWindow()
+void Win32Window::changeTheme( const QString& theme )
+{
+    QLocalSocket socket;
+    socket.connectToServer( "hbthemeserver" );
+    if ( socket.waitForConnected( 3000 ) ) {
+        QByteArray outputByteArray;
+        QDataStream outputDataStream( &outputByteArray, QIODevice::WriteOnly );
+        outputDataStream << 4; // EThemeSelection from HbThemeServerRequest in hbthemecommon_p.h
+        outputDataStream << theme;
+        socket.write( outputByteArray );
+        socket.flush();
+    }
+}
+
+/*!
+ *
+ */
+void Win32Window::initThemes()
 {
-    update();
+    QStringList themeList;
+    foreach ( const QString& themeRootPath, themeRootPaths() ) {
+        QDir dir( themeRootPath ) ;
+        QStringList list = dir.entryList( QDir::AllDirs | QDir::NoDotAndDotDot, QDir::Name );
+
+        if ( list.contains( "themes", Qt::CaseSensitive ) ) {
+            QDir root = themeRootPath;
+            dir.setPath( root.path() + "/themes/icons/" );
+            QStringList iconthemeslist = dir.entryList( QDir::AllDirs | QDir::NoDotAndDotDot, QDir::Name );
+            foreach ( QString themefolder, iconthemeslist ) {
+                QDir iconThemePath( root.path() + "/themes/icons/" + themefolder );
+                if ( iconThemePath.exists( "index.theme" ) ) {
+                    QSettings iniSetting( iconThemePath.path() + "/index.theme", QSettings::IniFormat );
+                    iniSetting.beginGroup( "Icon Theme" );
+                    QString hidden = iniSetting.value( "Hidden" ).toString();
+                    QString name = iniSetting.value( "Name" ).toString();
+                    iniSetting.endGroup();
+                    if ( (hidden == "true") || ( hidden == "" ) || ( name != themefolder ) ) {
+                        iconthemeslist.removeOne( themefolder );
+                    }
+                }
+                else {
+                     iconthemeslist.removeOne( themefolder );
+                }
+
+            }
+
+            themeList.append( iconthemeslist );
+        }
+    }
+
+    if ( themeList.count() == 0 ) {
+        themeList.insert( 0, "hbdefault" ); //adding one default entry
+        mThemeBox->setEnabled( false );
+    }
+
+    mThemeBox->setModel( new QStringListModel( themeList, mThemeBox ) );
+
+    for ( int i = 0; i < themeList.count(); ++i ) {
+        QString theme = themeList.at( i );
+        if ( theme == HbInstance::instance()->theme()->name() ) {
+            mThemeBox->setCurrentIndex( i );
+        }
+    }
 }
+
+/*!
+ *
+ */
+QStringList Win32Window::themeRootPaths()
+{
+    QStringList rootDirs;
+    QString envDir = qgetenv( "HB_THEMES_DIR" );
+    if ( !envDir.isEmpty() ) {
+        rootDirs << envDir;
+    }
+
+    rootDirs << HB_RESOURCES_DIR;
+
+    return rootDirs;
+}
--- a/radioapp/radioenginewrapper/commoninc/radio_global.h	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,246 +0,0 @@
-/*
-* 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:
-*
-*/
-
-#ifndef RADIO_GLOBAL_H_
-#define RADIO_GLOBAL_H_
-
-// System includes
-#include <QtGlobal>
-
-// Constants
-
-/**
- * Radio frequency multiplier
- */
-const int KFrequencyMultiplier = 1000000;
-
-/**
- * Desired amount of steps in the volume control in the UI
- */
-const int KMaximumVolumeLevel = 20;
-
-/**
- * Id of the offline profile
- */
-const int KOfflineProfileId = 5;
-
-/**
- * Radio Text Plus tag ids
- */
-namespace RtPlus
-{
-    enum Tag { Title = 1, Artist = 4, Homepage = 39 };
-}
-
-namespace Seeking
-{
-    enum Direction
-    {
-        Down,
-        Up
-    };
-
-    enum State
-    {
-        NotSeeking,
-        SeekingUp,
-        SeekingDown
-    };
-}
-
-namespace CommandSender
-{
-    enum Sender
-    {
-        Unspecified,
-        FrequencyStrip,
-        StationCarousel
-    };
-}
-
-namespace RadioRegion
-{
-    enum Region
-    {
-        None = -1,
-        Default,
-        Japan,
-        America,
-        Poland
-    };
-}
-
-namespace GenreEurope
-{
-    enum Europe
-    {
-        RdsNone,
-        RdsNews,
-        RdsCurrentAffairs,
-        RdsInformation,
-        RdsSport,
-        RdsEducation,
-        RdsDrama,
-        RdsCulture,
-        RdsScience,
-        RdsVariedSpeech,
-        RdsPopMusic,
-        RdsRockMusic,
-        RdsEasyListening,
-        RdsLightClassical,
-        RdsSeriousClassical,
-        RdsOtherMusic,
-        RdsWeather,
-        RdsFinance,
-        RdsChildrensProgrammes,
-        RdsSocialAffairs,
-        RdsReligion,
-        RdsPhoneIn,
-        RdsTravel,
-        RdsLeisure,
-        RdsJazzMusic,
-        RdsCountryMusic,
-        RdsNationalMusic,
-        RdsOldiesMusic,
-        RdsFolkMusic,
-        RdsDocumentary,
-        RdsAlarmTest,
-        RdsAlarm
-    };
-}
-
-namespace GenreAmerica
-{
-    enum America
-    {
-        RbdsNone,
-        RbdsNews,
-        RbdsInformation,
-        RbdsSports,
-        RbdsTalk,
-        RbdsRock,
-        RbdsClassicRock,
-        RbdsAdultHits,
-        RbdsSoftRock,
-        RbdsTop40,
-        RbdsCountry,
-        RbdsOldies,
-        RbdsSoft,
-        RbdsNostalgia,
-        RbdsJazz,
-        RbdsClassical,
-        RbdsRhythmAndBlues,
-        RbdsSoftRhythmAndBlues,
-        RbdsLanguage,
-        RbdsReligiousMusic,
-        RbdsReligiousTalk,
-        RbdsPersonality,
-        RbdsPublic,
-        RbdsCollege,
-        RbdsUnassigned1,
-        RbdsUnassigned2,
-        RbdsUnassigned3,
-        RbdsUnassigned4,
-        RbdsUnassigned5,
-        RbdsWeather,
-        RbdsEmergencyTest,
-        RbdsEmergency
-    };
-}
-
-struct GenreStruct
-    {
-    int mGenreCode;
-    struct{ const char *source; const char *comment; } mTranslation;
-    };
-
-//static const char* GenreContext = "Genre";
-
-const GenreStruct EuropeanGenres[] =
-    {
-     { GenreEurope::RdsNone,                QT_TRANSLATE_NOOP3( GenreContext, "None",                 "txt_genre_europe_none" ) }
-    ,{ GenreEurope::RdsNews,                QT_TRANSLATE_NOOP3( GenreContext, "News",                 "txt_genre_europe_news" ) }
-    ,{ GenreEurope::RdsCurrentAffairs,      QT_TRANSLATE_NOOP3( GenreContext, "Current affairs",      "txt_genre_europe_current_affairs" ) }
-    ,{ GenreEurope::RdsInformation,         QT_TRANSLATE_NOOP3( GenreContext, "Information",          "txt_genre_europe_information" ) }
-    ,{ GenreEurope::RdsSport,               QT_TRANSLATE_NOOP3( GenreContext, "Sport",                "txt_genre_europe_sport" ) }
-    ,{ GenreEurope::RdsEducation,           QT_TRANSLATE_NOOP3( GenreContext, "Education",            "txt_genre_europe_education" ) }
-    ,{ GenreEurope::RdsDrama,               QT_TRANSLATE_NOOP3( GenreContext, "Drama",                "txt_genre_europe_drama" ) }
-    ,{ GenreEurope::RdsCulture,             QT_TRANSLATE_NOOP3( GenreContext, "Culture",              "txt_genre_europe_culture" ) }
-    ,{ GenreEurope::RdsScience,             QT_TRANSLATE_NOOP3( GenreContext, "Science",              "txt_genre_europe_science" ) }
-    ,{ GenreEurope::RdsVariedSpeech,        QT_TRANSLATE_NOOP3( GenreContext, "Varied speech",        "txt_genre_europe_varied_speech" ) }
-    ,{ GenreEurope::RdsPopMusic,            QT_TRANSLATE_NOOP3( GenreContext, "Pop music",            "txt_genre_europe_pop_music" ) }
-    ,{ GenreEurope::RdsRockMusic,           QT_TRANSLATE_NOOP3( GenreContext, "Rock music",           "txt_genre_europe_rock_music" ) }
-    ,{ GenreEurope::RdsEasyListening,       QT_TRANSLATE_NOOP3( GenreContext, "Easy listening",       "txt_genre_europe_easy_listening" ) }
-    ,{ GenreEurope::RdsLightClassical,      QT_TRANSLATE_NOOP3( GenreContext, "Light classical",      "txt_genre_europe_light_classical" ) }
-    ,{ GenreEurope::RdsSeriousClassical,    QT_TRANSLATE_NOOP3( GenreContext, "Serious classical",    "txt_genre_europe_serious_classical" ) }
-    ,{ GenreEurope::RdsOtherMusic,          QT_TRANSLATE_NOOP3( GenreContext, "Other music",          "txt_genre_europe_other_music" ) }
-    ,{ GenreEurope::RdsWeather,             QT_TRANSLATE_NOOP3( GenreContext, "Weather",              "txt_genre_europe_weather" ) }
-    ,{ GenreEurope::RdsFinance,             QT_TRANSLATE_NOOP3( GenreContext, "Finance",              "txt_genre_europe_finance" ) }
-    ,{ GenreEurope::RdsChildrensProgrammes, QT_TRANSLATE_NOOP3( GenreContext, "Childrens programmes", "txt_genre_europe_childrens_programmes" ) }
-    ,{ GenreEurope::RdsSocialAffairs,       QT_TRANSLATE_NOOP3( GenreContext, "Social affairs",       "txt_genre_europe_social_affairs" ) }
-    ,{ GenreEurope::RdsReligion,            QT_TRANSLATE_NOOP3( GenreContext, "Religion",             "txt_genre_europe_religion" ) }
-    ,{ GenreEurope::RdsPhoneIn,             QT_TRANSLATE_NOOP3( GenreContext, "Phone in",             "txt_genre_europe_phone_in" ) }
-    ,{ GenreEurope::RdsTravel,              QT_TRANSLATE_NOOP3( GenreContext, "Travel",               "txt_genre_europe_travel" ) }
-    ,{ GenreEurope::RdsLeisure,             QT_TRANSLATE_NOOP3( GenreContext, "Leisure",              "txt_genre_europe_leisure" ) }
-    ,{ GenreEurope::RdsJazzMusic,           QT_TRANSLATE_NOOP3( GenreContext, "Jazz music",           "txt_genre_europe_jazz_music" ) }
-    ,{ GenreEurope::RdsCountryMusic,        QT_TRANSLATE_NOOP3( GenreContext, "Country music",        "txt_genre_europe_country_music" ) }
-    ,{ GenreEurope::RdsNationalMusic,       QT_TRANSLATE_NOOP3( GenreContext, "National music",       "txt_genre_europe_national_music" ) }
-    ,{ GenreEurope::RdsOldiesMusic,         QT_TRANSLATE_NOOP3( GenreContext, "Oldies music",         "txt_genre_europe_oldies_music" ) }
-    ,{ GenreEurope::RdsFolkMusic,           QT_TRANSLATE_NOOP3( GenreContext, "Folk music",           "txt_genre_europe_folk_music" ) }
-    ,{ GenreEurope::RdsDocumentary,         QT_TRANSLATE_NOOP3( GenreContext, "Documentary",          "txt_genre_europe_documentary" ) }
-    ,{ GenreEurope::RdsAlarmTest,           QT_TRANSLATE_NOOP3( GenreContext, "Alarm test",           "txt_genre_europe_alarm_test" ) }
-    ,{ GenreEurope::RdsAlarm,               QT_TRANSLATE_NOOP3( GenreContext, "Alarm",                "txt_genre_europe_alarm" ) }
-    };
-const int EuropeanGenresCount = sizeof( EuropeanGenres ) / sizeof ( EuropeanGenres[0] );
-
-const GenreStruct AmericanGenres[] =
-    {
-     { GenreAmerica::RbdsNone,               QT_TRANSLATE_NOOP3( GenreContext, "None",                  "txt_genre_america_none" ) }
-    ,{ GenreAmerica::RbdsNews,               QT_TRANSLATE_NOOP3( GenreContext, "News",                  "txt_genre_america_news" ) }
-    ,{ GenreAmerica::RbdsInformation,        QT_TRANSLATE_NOOP3( GenreContext, "Information",           "txt_genre_america_information" ) }
-    ,{ GenreAmerica::RbdsSports,             QT_TRANSLATE_NOOP3( GenreContext, "Sports",                "txt_genre_america_sports" ) }
-    ,{ GenreAmerica::RbdsRock,               QT_TRANSLATE_NOOP3( GenreContext, "Rock",                  "txt_genre_america_rock" ) }
-    ,{ GenreAmerica::RbdsClassicRock,        QT_TRANSLATE_NOOP3( GenreContext, "Classic rock",          "txt_genre_america_classic_rock" ) }
-    ,{ GenreAmerica::RbdsAdultHits,          QT_TRANSLATE_NOOP3( GenreContext, "Adult hits",            "txt_genre_america_adult_hits" ) }
-    ,{ GenreAmerica::RbdsSoftRock,           QT_TRANSLATE_NOOP3( GenreContext, "Soft rock",             "txt_genre_america_soft_rock" ) }
-    ,{ GenreAmerica::RbdsTop40,              QT_TRANSLATE_NOOP3( GenreContext, "Top 40",                "txt_genre_america_top_40" ) }
-    ,{ GenreAmerica::RbdsCountry,            QT_TRANSLATE_NOOP3( GenreContext, "Country",               "txt_genre_america_country" ) }
-    ,{ GenreAmerica::RbdsOldies,             QT_TRANSLATE_NOOP3( GenreContext, "Oldies",                "txt_genre_america_oldies" ) }
-    ,{ GenreAmerica::RbdsSoft,               QT_TRANSLATE_NOOP3( GenreContext, "Soft",                  "txt_genre_america_soft" ) }
-    ,{ GenreAmerica::RbdsNostalgia,          QT_TRANSLATE_NOOP3( GenreContext, "Nostalgia",             "txt_genre_america_nostalgia" ) }
-    ,{ GenreAmerica::RbdsJazz,               QT_TRANSLATE_NOOP3( GenreContext, "Jazz",                  "txt_genre_america_jazz" ) }
-    ,{ GenreAmerica::RbdsClassical,          QT_TRANSLATE_NOOP3( GenreContext, "Classical",             "txt_genre_america_classical" ) }
-    ,{ GenreAmerica::RbdsRhythmAndBlues,     QT_TRANSLATE_NOOP3( GenreContext, "Rhythm and blues",      "txt_genre_america_rhythm_and_blues" ) }
-    ,{ GenreAmerica::RbdsSoftRhythmAndBlues, QT_TRANSLATE_NOOP3( GenreContext, "Soft rhythm and blues", "txt_genre_america_soft_rhythm_and_blues" ) }
-    ,{ GenreAmerica::RbdsLanguage,           QT_TRANSLATE_NOOP3( GenreContext, "Language",              "txt_genre_america_language" ) }
-    ,{ GenreAmerica::RbdsReligiousMusic,     QT_TRANSLATE_NOOP3( GenreContext, "Religuous music",       "txt_genre_america_religuous_music" ) }
-    ,{ GenreAmerica::RbdsReligiousTalk,      QT_TRANSLATE_NOOP3( GenreContext, "Religuous talk",        "txt_genre_america_religuous_talk" ) }
-    ,{ GenreAmerica::RbdsPersonality,        QT_TRANSLATE_NOOP3( GenreContext, "Personality",           "txt_genre_america_personality" ) }
-    ,{ GenreAmerica::RbdsPublic,             QT_TRANSLATE_NOOP3( GenreContext, "Public",                "txt_genre_america_public" ) }
-    ,{ GenreAmerica::RbdsCollege,            QT_TRANSLATE_NOOP3( GenreContext, "College",               "txt_genre_america_college" ) }
-    ,{ GenreAmerica::RbdsUnassigned1,        QT_TRANSLATE_NOOP3( GenreContext, "Unassigned 1",          "txt_genre_america_unassigned_1" ) }
-    ,{ GenreAmerica::RbdsUnassigned2,        QT_TRANSLATE_NOOP3( GenreContext, "Unassigned 2",          "txt_genre_america_unassigned_2" ) }
-    ,{ GenreAmerica::RbdsUnassigned3,        QT_TRANSLATE_NOOP3( GenreContext, "Unassigned 3",          "txt_genre_america_unassigned_3" ) }
-    ,{ GenreAmerica::RbdsUnassigned4,        QT_TRANSLATE_NOOP3( GenreContext, "Unassigned 4",          "txt_genre_america_unassigned_4" ) }
-    ,{ GenreAmerica::RbdsUnassigned5,        QT_TRANSLATE_NOOP3( GenreContext, "Unassigned 5",          "txt_genre_america_unassigned_5" ) }
-    ,{ GenreAmerica::RbdsWeather,            QT_TRANSLATE_NOOP3( GenreContext, "Weather",               "txt_genre_america_weather" ) }
-    ,{ GenreAmerica::RbdsEmergencyTest,      QT_TRANSLATE_NOOP3( GenreContext, "Emergency test",        "txt_genre_america_emergency_test" ) }
-    ,{ GenreAmerica::RbdsEmergency,          QT_TRANSLATE_NOOP3( GenreContext, "Emergency",             "txt_genre_america_emergency" ) }
-    };
-const int AmericanGenresCount = sizeof( AmericanGenres ) / sizeof ( AmericanGenres[0] );
-
-#endif // RADIO_GLOBAL_H_
--- a/radioapp/radioenginewrapper/commoninc/radiologger.h	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,286 +0,0 @@
-/*
-* 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:
-*
-*/
-
-#ifndef _RADIOLOGGER_H_
-#define _RADIOLOGGER_H_
-
-// System includes
-#include <QObject>
-
-// User includes
-#include "radiowrapperexport.h"
-
-class WRAPPER_DLL_EXPORT RadioLogger
-{
-public:
-
-    enum Mode { Normal, MethodEnter, MethodExit, DecIndent };
-
-    static void initCombinedLogger();
-    static void releaseCombinedLogger();
-
-    static void logMsg( const char* msg, Mode mode = Normal );
-
-private:
-    RadioLogger();
-    ~RadioLogger();
-};
-
-// ============================================================================
-// START TIMESTAMP LOGGING
-// ============================================================================
-
-#ifdef TIMESTAMP_LOGGING_ENABLED
-
-#include <QTime>
-#include <QDebug>
-
-/**
- * Timestamp logging macro.
- * When the macro is defined, timestamp logging is on
- *
- * Example. These lines in the code...
- *  LOG_TIMESTAMP( "Start operation" );
- *  ...
- *  LOG_TIMESTAMP( "End operation" );
- *
- * ... print the following log lines
- *  FMRadio: Start operation "14:13:09.042"
- *  FMRadio: End operation "14:13:09.250"
- */
-//#define LOG_TIMESTAMP(comment) do{ qDebug() << LOGMARKER << comment << QTime::currentTime().toString("hh:mm:ss.zzz"); }while(0)
-#define LOG_TIMESTAMP(comment) LOG_FORMAT( comment ## " %s", GETSTRING( QTime::currentTime().toString("hh:mm:ss.zzz") ) )
-
-#else
-
-#define LOG_TIMESTAMP(comment)
-
-#endif // TIMESTAMP_LOGGING_ENABLED
-
-// ============================================================================
-// END TIMESTAMP LOGGING
-// ============================================================================
-
-// ============================================================================
-// START FULL LOGGING
-// ============================================================================
-
-#ifdef LOGGING_ENABLED
-
-#include <QtGlobal>
-#include <QDebug>
-
-// UI logs can be combined with engine logs by making the UI feed its log prints into
-// the engine logger. This requires that we initialize the radio engine utils right here
-// because the engine won't start up until much later. This is a bit ugly since the macros
-// call Symbian code directly, but it was considered to be worth it to see UI and engine
-// traces in the same file.
-#if defined COMBINE_WITH_ENGINE_LOGGER && defined LOGGING_ENABLED && !defined BUILD_WIN32
-#   include "../../../radioengine/utils/api/mradioenginelogger.h"
-#   include "../../../radioengine/utils/api/radioengineutils.h"
-#   define WRITELOG(msg) RadioLogger::logMsg( msg );
-#   define WRITELOG_METHOD_ENTER(msg) RadioLogger::logMsg( GETSTRING( msg ), RadioLogger::MethodEnter );
-#   define WRITELOG_METHOD_EXIT(msg) RadioLogger::logMsg( GETSTRING( msg ), RadioLogger::MethodExit );
-#   define LOGGER_DEC_INDENT RadioLogger::logMsg( "", RadioLogger::DecIndent );
-#   define WRITELOG_GETSTRING(msg) WRITELOG( GETSTRING( msg ) )
-#   define INIT_COMBINED_LOGGER RadioLogger::initCombinedLogger();
-#   define RELEASE_COMBINED_LOGGER RadioLogger::releaseCombinedLogger();
-#else
-#   define WRITELOG(msg) qDebug() << LOGMARKER << msg;
-#   define WRITELOG_METHOD_ENTER(msg) WRITELOG(msg)
-#   define WRITELOG_METHOD_EXIT(msg) WRITELOG(msg)
-#   define WRITELOG_GETSTRING(msg) WRITELOG(msg)
-#   define LOGGER_INC_INDENT
-#   define LOGGER_DEC_INDENT
-#   define INIT_COMBINED_LOGGER
-#   define RELEASE_COMBINED_LOGGER
-#endif
-
-// Macro that simply logs a string
-// Example:
-// LOG( "This is a test" );
-#define LOG(string) do{ WRITELOG( string ) }while(0)
-
-// Helper macro to get a const char* out of a QString so that it can be logged. Can be used with LOG_FORMAT()
-#define GETSTRING(qstring) qstring.toAscii().constData()
-
-// Macro that logs a string with multiple parameters
-// Examples:
-// LOG_FORMAT( "This is an integer %d, and this is a float with two digits %.2f", 42, 3.14 );
-// LOG_FORMAT( "This is a QString %s", GETSTRING(someQString) );
-#define LOG_FORMAT(fmt,args...) do{ QString tmp; WRITELOG_GETSTRING( tmp.sprintf(fmt,args) ) }while(0)
-
-// Macro that logs function enter, exit and exception
-// Example (Simply put it in the beginning of a function):
-// LOG_METHOD;
-// Output:
-// -> SomeFunction(int,const char*)
-// <- SomeFunction(int,const char*)
-// <- SomeFunction(int,const char*): Exception raised!
-#define LOG_METHOD MethodLogger ___methodLogger( __PRETTY_FUNCTION__, "" )
-
-// Same as the previous function logging macro with the addition of logging the return value
-// Note! The return value can only be retrieved in the emulator.
-// Example (Simply put it in the beginning of a function):
-// LOG_METHOD_RET( "%d" );
-// Output:
-// -> SomeFunction(int,const char*)
-// <- SomeFunction(int,const char*) returning 42
-#define LOG_METHOD_RET(fmt) MethodLogger ___methodLogger( __PRETTY_FUNCTION__, fmt )
-
-// Logs function enter but does not log exit or leave. This is meant to be lighter than LOG_METHOD macro
-#define LOG_METHOD_ENTER LOG_FORMAT( "Enter: %s", __PRETTY_FUNCTION__ )
-
-// Assert macro for logging. If the condition is false, the expression is performed
-// Example:
-// LOG_ASSERT( thisMustBeTrue, LOG_FORMAT( "OMG! That was not true: %d", thisMustBeTrue ) );
-#define LOG_ASSERT(cond,expr) do{ if (!cond) { expr; } }while(0)
-
-// Macro to hide a function variable that is used only when debugging is enabled.
-// Expands to the variable name when debugging is enabled and to nothing when it is not
-#define DEBUGVAR(a) a
-
-// Macro to log slot function caller by its class name.
-#define LOG_SLOT_CALLER do { \
-        QObject* caller = sender(); \
-        if ( caller ) { \
-            LOG_FORMAT( "SLOT %s called by %s. Objectname: %s", __PRETTY_FUNCTION__, \
-                caller->metaObject()->className(), GETSTRING( caller->objectName() ) ); \
-        } else { \
-            LOG_FORMAT( "SLOT %s called as regular function. ", __PRETTY_FUNCTION__ ); \
-        } \
-    } while (0)
-
-// Class declaration
-class WRAPPER_DLL_EXPORT MethodLogger
-{
-public:
-
-    MethodLogger( const char* function, const char* format );
-    ~MethodLogger();
-
-private:
-
-    const char* mFunction;
-    const char* mFormat;
-
-};
-
-#else // LOGGING_ENABLED
-
-#   define LOG(string)
-#   define GETSTRING(qstring)
-#   define LOG_FORMAT(fmt,args...)
-#   define LOG_METHOD
-#   define LOG_METHOD_RET(fmt)
-#   define LOG_METHOD_ENTER
-#   define LOG_ASSERT(cond,expr)
-#   define DEBUGVAR(a)
-#   define LOG_SLOT_CALLER
-#   define INIT_COMBINED_LOGGER
-#   define RELEASE_COMBINED_LOGGER
-
-
-// Dummy class
-class WRAPPER_DLL_EXPORT MethodLogger
-{
-public:
-    MethodLogger( const char*, const char* );
-    ~MethodLogger();
-};
-
-#endif // LOGGING_ENABLED
-
-#ifdef TRACE_TO_FILE
-
-#   define INSTALL_MESSAGE_HANDLER FileLogger::installMessageHandler(QString(TRACE_OUTPUT_FILE), FILTER_BY_LOGMARKER);
-#   define UNINSTALL_MESSAGE_HANDLER FileLogger::uninstallMessageHandler();
-
-// Class declaration
-class WRAPPER_DLL_EXPORT FileLogger
-{
-public:
-
-    static void installMessageHandler( const QString& fileName, bool filterByMarker = true );
-    static void uninstallMessageHandler();
-
-private:
-
-    static void handleMessage( QtMsgType type, const char* msg );
-
-};
-
-#else
-#   define INSTALL_MESSAGE_HANDLER
-#   define UNINSTALL_MESSAGE_HANDLER
-#endif // TRACE_TO_FILE
-
-// ============================================================================
-// END FULL LOGGING
-// ============================================================================
-
-// ============================================================================
-// SIGNAL/SLOT CONNECTION CHECKER
-// ============================================================================
-static bool connectAndTest( const QObject* sender, const char* signal,
-                            const QObject* receiver, const char* member,
-                            Qt::ConnectionType type = Qt::AutoConnection )
-{
-    bool connected = QObject::connect( sender, signal, receiver, member, type );
-
-#   ifdef CONNECT_TEST_MODE
-
-    if ( !connected )
-    {
-        LOG( "Failed to make a signal-slot connection!" );
-        LOG_FORMAT( "sender: %s", sender->metaObject()->className() );
-        LOG_FORMAT( "signal: %s", signal );
-        LOG_FORMAT( "receiver: %s", receiver->metaObject()->className() );
-        LOG_FORMAT( "slot/signal: %s", signal );
-
-        #if CONNECT_TEST_MODE == 2
-            Q_ASSERT( false );
-        #endif
-
-        // ----------------------------------------------------------------
-        // SIGNAL-SLOT CONNECTION FAILED!
-        // ----------------------------------------------------------------
-    }
-
-#   endif
-
-    return connected;
-}
-
-#ifdef ENABLE_ASSERTS
-
-    #define RADIO_ASSERT(cond,where,what) Q_ASSERT_X(cond,where,what)
-
-#else
-#   ifdef LOGGING_ENABLED
-#       define RADIO_ASSERT(cond,where,what) \
-            do { \
-                if ( !cond ) { \
-                    LOG_FORMAT( "ASSERT Failed! %s, %s", where, what ); \
-                } \
-            } while ( false )
-#   else
-#       define RADIO_ASSERT(cond,where,what)
-#   endif // LOGGING_ENABLED
-#endif // ENABLE_ASSERTS
-
-#endif // _RADIOLOGGER_H_
--- a/radioapp/radioenginewrapper/commoninc/radiowrapperexport.h	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
-* 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:
-*
-*/
-
-#ifndef RADIO_WRAPPER_EXPORT_H_
-#define RADIO_WRAPPER_EXPORT_H_
-
-// System includes
-#include <QtGlobal>
-
-#ifdef BUILD_WRAPPER_DLL
-    #define WRAPPER_DLL_EXPORT Q_DECL_EXPORT
-#else
-    #define WRAPPER_DLL_EXPORT Q_DECL_IMPORT
-#endif
-
-#endif // RADIO_WRAPPER_EXPORT_H_
--- a/radioapp/radioenginewrapper/commoninc/settings.xml	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-<radiosettings>
-    <setting name="maxvolume" value="10000" />
-    <setting name="FrequencyStepSize" value="100000" />
-    <setting name="Region" value="0" />
-    <setting name="MinFrequency" value="87500000" />
-    <setting name="MaxFrequency" value="108000000" />
-
-    <Station>
-        <setting name="Frequency" value="9500000" />
-        <RdsGroup interval="3" count="100">
-            <RdsItem type="PiCode" delay="0">0x54A8</RdsItem>
-            <RdsItem type="PsName" delay="1">Yle Suomi</RdsItem>
-        </RdsGroup>
-        <RdsGroup interval="3" count="100">
-            <RdsItem type="PiCode" delay="0">0x5fA8</RdsItem>
-            <RdsItem type="PsName" delay="1">Yle Oulu</RdsItem>
-            </Rds>
-        </RdsGroup>
-    </Station>
-
-    <Station>
-        <setting name="Frequency" value="88000000" />
-        <Rds type="PsName"><!-- Static PS -->
-            <setting name="SendInterval" value="8" />
-            <setting name="SendCount" value="4" />
-            <setting name="RdsContent" value="Radio Nova" />
-        </Rds>
-        <Rds type="PiCode">
-            <setting name="SendInterval" value="8" />
-            <setting name="RdsContent" value="0x54A8" />
-        </Rds>
-        <Rds type="Rt">
-            <setting name="SendInterval" value="4" />
-            <setting name="RdsContent" value="Radio Nova runs" />
-            <setting name="RdsContent" value="some ads in the" />
-            <setting name="RdsContent" value="radio text." />
-        </Rds>
-    </Station>
-    
-    <Station>
-        <setting name="Frequency" value="89000000" />
-        <Rds type="PsName">
-            <setting name="SendInterval" value="5" />
-            <setting name="SendCount" value="4" />
-            <setting name="RdsContent" value="Radio Rock" />
-        </Rds>
-        <Rds type="Pty">
-            <setting name="SendInterval" value="4" />
-            <setting name="RdsContent" value="12" />
-        </Rds>
-    </Station>
-    
-    <Station>
-        <setting name="Frequency" value="98000000" />
-        <Rds type="PsName">
-            <setting name="SendInterval" value="5" />
-            <setting name="RdsContent" value="Radio Mega" />
-        </Rds>
-        <Rds type="Rt">
-            <setting name="SendInterval" value="8" />
-            <setting name="RtPlusItem" value="Now playing: [artist] - [title]">
-                <setting name="RtPlusTag" value="artist">
-                    <setting name="delay" value="2" />
-                    <setting name="RdsContent" value="Metallica" />
-                </setting>
-                <setting name="RtPlusTag" value="title">
-                    <setting name="delay" value="2" />
-                    <setting name="RdsContent" value="One" />
-                </setting>
-            </setting>
-        </Rds>
-    </Station>
-    
-    <Station>
-        <setting name="Frequency" value="103000000" />
-        <Rds type="PsName"><!-- Dynamic PS -->
-            <setting name="SendInterval" value="2" />
-            <setting name="RdsContent" value="Radio Mega" />
-            <setting name="RdsContent" value="iskee" />
-            <setting name="RdsContent" value="makkarat" />
-            <setting name="RdsContent" value="ruutuun" />
-        </Rds>
-        <Rds type="Rt">
-            <setting name="SendInterval" value="4" />
-            <setting name="RdsContent" value="This is" />
-            <setting name="RdsContent" value="an example usage of" />
-            <setting name="RdsContent" value="radio text in a" />
-            <setting name="RdsContent" value="radio station." />
-        </Rds>
-    </Station>
-
-</radiosettings>
\ No newline at end of file
--- a/radioapp/radioenginewrapper/inc/radioenginewrapper.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioenginewrapper/inc/radioenginewrapper.h	Mon May 03 12:31:41 2010 +0300
@@ -41,9 +41,12 @@
     /**
      * Constructor and destructor
      */
-    RadioEngineWrapper( RadioStationHandlerIf& stationHandler, RadioEngineWrapperObserver& observer );
+    RadioEngineWrapper( RadioStationHandlerIf& stationHandler );
     ~RadioEngineWrapper();
 
+    void addObserver( RadioEngineWrapperObserver* observer );
+    void removeObserver( RadioEngineWrapperObserver* observer );
+
     /**
      * Checks if the radio engine has been constructed properly
      */
@@ -67,28 +70,26 @@
      * Getters for current radio status
      */
     bool isRadioOn() const;
-    bool isScanning() const;
     uint currentFrequency() const;
     bool isMuted() const;
     bool isAntennaAttached() const;
     bool isUsingLoudspeaker() const;
 
     /**
-     * Slots to tune to given frequency or preset
+     * Functions to tune to given frequency or preset
      */
-    void tuneFrequency( uint frequency, const int sender = CommandSender::Unspecified );
-    void tuneWithDelay( uint frequency, const int sender = CommandSender::Unspecified );
+    void tuneFrequency( uint frequency, const int reason = TuneReason::Unspecified );
+    void tuneWithDelay( uint frequency, const int reason = TuneReason::Unspecified );
 
     /*!
-     * volume update command slot for the engine
+     * Audio update command functions for the engine
      */
     void setVolume( int volume );
     void toggleMute();
     void toggleAudioRoute();
 
-    void startSeeking( Seeking::Direction direction );
-    void scanFrequencyBand();
-    void cancelScanFrequencyBand();
+    void startSeeking( Seeking::Direction direction, const int reason = TuneReason::Unspecified );
+    void cancelSeeking();
 
 private: // data
 
--- a/radioapp/radioenginewrapper/inc/radioenginewrapper_p.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioenginewrapper/inc/radioenginewrapper_p.h	Mon May 03 12:31:41 2010 +0300
@@ -21,6 +21,7 @@
 // System includes
 #include <e32std.h>
 #include <QScopedPointer>
+#include <QList>
 
 // User includes
 #include "radioenginewrapper.h"
@@ -31,12 +32,18 @@
 class RadioControlEventListener;
 class RadioRdsListener;
 class RadioSettings;
-class RadioFrequencyScanningHandler;
 class RadioStationHandlerIf;
 class RadioEngineWrapperObserver;
 
+typedef QList<RadioEngineWrapperObserver*> ObserverList;
+
 // Constants
 
+#define RUN_NOTIFY_LOOP( list, func ) \
+        foreach( RadioEngineWrapperObserver* observer, list ) { \
+            observer->func; \
+        }
+
 // Class declaration
 class RadioEngineWrapperPrivate : public MRadioEngineHandlerObserver
 {
@@ -48,8 +55,7 @@
 public:
 
     RadioEngineWrapperPrivate( RadioEngineWrapper* wrapper,
-                               RadioStationHandlerIf& stationHandler,
-                               RadioEngineWrapperObserver& observer );
+                               RadioStationHandlerIf& stationHandler );
 
     virtual ~RadioEngineWrapperPrivate();
 
@@ -73,12 +79,12 @@
     /**
      * Functions called from slots to tune to given frequency or preset
      */
-    void tuneFrequency( uint frequency, const int sender );
-    void tuneWithDelay( uint frequency, const int sender );
+    void tuneFrequency( uint frequency, const int reason );
+    void tuneWithDelay( uint frequency, const int reason );
 
-    RadioEngineWrapperObserver& observer();
+    ObserverList& observers();
 
-    void startSeeking( Seeking::Direction direction );
+    void startSeeking( Seeking::Direction direction, const int reason = TuneReason::Unspecified );
 
 private:
 
@@ -110,13 +116,6 @@
     void HandleRepositoryValueChangeL( const TUid& /*aUid*/, TUint32 /*aKey*/, const TDesC8& /*aValue*/, TInt /*aError*/ ) {}
     void HandleRepositoryValueChangeL( const TUid& /*aUid*/, TUint32 /*aKey*/, const TDesC16& /*aValue*/, TInt /*aError*/ ) {}
 
-// New functions
-
-    /**
-     * Called by RadioFrequencyScanningHandler when the scanning has finished
-     */
-    void frequencyScannerFinished();
-
 private: // data
 
     /**
@@ -134,7 +133,7 @@
     /**
      * Reference to the wrapper observer
      */
-    RadioEngineWrapperObserver&                     mObserver;
+    ObserverList                                    mObservers;
 
     /**
      * Radio settings handler
@@ -161,26 +160,15 @@
     QScopedPointer<RadioRdsListener>                mRdsListener;
 
     /**
-     * Preset scanning handler
-     * Own.
+     * Reason for the tune event. Can be FrequencyStrip, Carousel or station scanner
      */
-    QScopedPointer<RadioFrequencyScanningHandler>   mFrequencyScanningHandler;
-
-    /**
-     * Id of the sender of the last tune command. RadioFrequencyStrip or someone else
-     */
-    int                                             mCommandSender;
+    int                                             mTuneReason;
 
     /**
      * Flag to indicate whether or not audio should be routed to loudspeaker
      */
     bool                                            mUseLoudspeaker;
 
-    /**
-     * Flag to indicate whether or not the engine is seeking
-     */
-    bool                                            mIsSeeking;
-
 };
 
 #endif // RADIOENGINEWRAPPER_P_H
--- a/radioapp/radioenginewrapper/inc/radioenginewrapper_win32_p.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioenginewrapper/inc/radioenginewrapper_win32_p.h	Mon May 03 12:31:41 2010 +0300
@@ -36,6 +36,13 @@
 class QSettings;
 class QTimer;
 
+typedef QList<RadioEngineWrapperObserver*> ObserverList;
+
+#define RUN_NOTIFY_LOOP( list, func ) \
+        foreach( RadioEngineWrapperObserver* observer, list ) { \
+            observer->func; \
+        }
+
 // Class declaration
 class WRAPPER_DLL_EXPORT RadioEngineWrapperPrivate : public QObject
 {
@@ -48,8 +55,7 @@
 public:
 
     RadioEngineWrapperPrivate( RadioEngineWrapper* wrapper,
-                               RadioStationHandlerIf& stationHandler,
-                               RadioEngineWrapperObserver& observer );
+                               RadioStationHandlerIf& stationHandler );
 
     ~RadioEngineWrapperPrivate();
 
@@ -69,12 +75,15 @@
     /**
      * Functions called from slots to tune to given frequency or preset
      */
-    void tuneFrequency( uint frequency, const int sender );
-    void tuneWithDelay( uint frequency, const int sender );
+    void tuneFrequency( uint frequency, const int reason );
+    void tuneWithDelay( uint frequency, const int reason );
+
+    ObserverList& observers();
 
-    RadioEngineWrapperObserver& observer();
+    void startSeeking( Seeking::Direction direction, const int reason );
+    void cancelSeeking();
 
-    void startSeeking( Seeking::Direction direction );
+    void toggleAudioRoute();
 
 // Functions used by the win32 test window
 
@@ -100,11 +109,6 @@
 
 // New functions
 
-    /**
-     * Called by RadioFrequencyScanningHandler when the scanning has finished
-     */
-    void frequencyScannerFinished();
-
     void parseData();
 
 private: // data
@@ -124,7 +128,7 @@
     /**
      * Reference to the wrapper observer
      */
-    RadioEngineWrapperObserver&                     mObserver;
+    ObserverList                                    mObservers;
 
     /**
      * Radio settings handler
@@ -145,20 +149,15 @@
     QString                                         mParsingError;
 
     /**
-     * Id of the sender of the last tune command. RadioFrequencyStrip or someone else
+     * Reason for the tune event. RadioFrequencyStrip or someone else
      */
-    int                                             mCommandSender;
+    int                                             mTuneReason;
 
     /**
      * Flag to indicate whether or not audio should be routed to loudspeaker
      */
     bool                                            mUseLoudspeaker;
 
-    /**
-     * Flag to indicate whether or not the engine is seeking
-     */
-    bool                                            mIsSeeking;
-
     QScopedPointer<QSettings>                       mEngineSettings;
 
     bool                                            mAntennaAttached;
--- a/radioapp/radioenginewrapper/inc/radioenginewrapperobserver.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioenginewrapper/inc/radioenginewrapperobserver.h	Mon May 03 12:31:41 2010 +0300
@@ -19,26 +19,26 @@
 #define RADIOENGINEWRAPPEROBSERVER_H_
 
 #include "radio_global.h"
+#include "radiowrapperexport.h"
 
-class RadioEngineWrapperObserver
+class WRAPPER_DLL_EXPORT RadioEngineWrapperObserver
 {
 public:
 
-    virtual void tunedToFrequency( uint frequency, int commandSender ) = 0;
-    virtual void seekingStarted( Seeking::Direction direction ) = 0;
-    virtual void radioStatusChanged( bool radioIsOn ) = 0;
+    virtual void tunedToFrequency( uint frequency, int reason );
 
-    virtual void rdsAvailabilityChanged( bool available ) = 0;
+    virtual void radioStatusChanged( bool radioIsOn );
+
+    virtual void rdsAvailabilityChanged( bool available );
 
-    virtual void volumeChanged( int volume ) = 0;
-    virtual void muteChanged( bool muted ) = 0;
+    virtual void volumeChanged( int volume );
+    virtual void muteChanged( bool muted );
 
-    virtual void audioRouteChanged( bool loudspeaker ) = 0;
-    virtual void scanAndSaveFinished() = 0;
-    virtual void headsetStatusChanged( bool connected ) = 0;
+    virtual void audioRouteChanged( bool loudspeaker );
+    virtual void antennaStatusChanged( bool connected );
 
-    virtual void skipPrevious() = 0;
-    virtual void skipNext() = 0;
+    virtual void skipPrevious();
+    virtual void skipNext();
 
 };
 
--- a/radioapp/radioenginewrapper/inc/radiofrequencyscanninghandler.h	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-/*
-* 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:
-*
-*/
-
-#ifndef RADIOFREQUENCYSCANNINGHANDLER_H
-#define RADIOFREQUENCYSCANNINGHANDLER_H
-
-// System includes
-#include <QObject>
-#include <QMap>
-
-// User includes
-#include "mradioscanobserver.h"
-
-// Forward declarations
-class RadioEngineWrapperPrivate;
-
-// Constants
-
-// Class declaration
-class RadioFrequencyScanningHandler : public QObject
-                                    , public MRadioScanObserver
-    {
-    Q_OBJECT
-public:
-
-    explicit RadioFrequencyScanningHandler( RadioEngineWrapperPrivate& radioEngine );
-
-// from base class MRadioScanObserver
-
-    void ScanFrequencyEventL( TUint32 aFrequency );
-    void ScanCompletedEventL( TInt aError );
-
-// New functions
-
-    /*!
-     * Starts the scanning
-     * @param muted flag to indicate if the audio was already muted when scanning began
-     */
-    void startScanning( bool muted );
-
-    /*!
-     * Adds a new station that was found
-     * @param frequency Frequency of the found station
-     */
-    void addFoundStation( const uint frequency );
-
-    /*!
-     * Cancels the scanning process
-     */
-    void cancel();
-
-private slots:
-
-    void delayedStart();
-
-private: // data
-
-    /**
-     * Reference to the engine
-     */
-    RadioEngineWrapperPrivate&  mEngine;
-
-    /**
-     * Last scanned frequency. Used to know when the scanning has looped around the
-     * frequency band and it should stop
-     */
-    uint                        mLastFoundFrequency;
-    };
-
-#endif // RADIOFREQUENCYSCANNINGHANDLER_H
--- a/radioapp/radioenginewrapper/inc/radiosettings.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioenginewrapper/inc/radiosettings.h	Mon May 03 12:31:41 2010 +0300
@@ -34,6 +34,8 @@
 
 public:
 
+    ~RadioSettings();
+
     // First time start
     bool isFirstTimeStart();
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radioenginewrapper/inc/radiowrapperexport.h	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,30 @@
+/*
+* 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:
+*
+*/
+
+#ifndef RADIO_WRAPPER_EXPORT_H_
+#define RADIO_WRAPPER_EXPORT_H_
+
+// System includes
+#include <QtGlobal>
+
+#ifdef BUILD_WRAPPER_DLL
+    #define WRAPPER_DLL_EXPORT Q_DECL_EXPORT
+#else
+    #define WRAPPER_DLL_EXPORT Q_DECL_IMPORT
+#endif
+
+#endif // RADIO_WRAPPER_EXPORT_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radioenginewrapper/inc/settings.xml	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,92 @@
+<radiosettings>
+    <setting name="maxvolume" value="10000" />
+    <setting name="FrequencyStepSize" value="100000" />
+    <setting name="Region" value="0" />
+    <setting name="MinFrequency" value="87500000" />
+    <setting name="MaxFrequency" value="108000000" />
+
+    <Station>
+        <setting name="Frequency" value="9500000" />
+        <RdsGroup interval="3" count="100">
+            <RdsItem type="PiCode" delay="0">0x54A8</RdsItem>
+            <RdsItem type="PsName" delay="1">Yle Suomi</RdsItem>
+        </RdsGroup>
+        <RdsGroup interval="3" count="100">
+            <RdsItem type="PiCode" delay="0">0x5fA8</RdsItem>
+            <RdsItem type="PsName" delay="1">Yle Oulu</RdsItem>
+            </Rds>
+        </RdsGroup>
+    </Station>
+
+    <Station>
+        <setting name="Frequency" value="88000000" />
+        <Rds type="PsName"><!-- Static PS -->
+            <setting name="SendInterval" value="8" />
+            <setting name="SendCount" value="4" />
+            <setting name="RdsContent" value="Radio Nova" />
+        </Rds>
+        <Rds type="PiCode">
+            <setting name="SendInterval" value="8" />
+            <setting name="RdsContent" value="0x54A8" />
+        </Rds>
+        <Rds type="Rt">
+            <setting name="SendInterval" value="4" />
+            <setting name="RdsContent" value="Radio Nova runs" />
+            <setting name="RdsContent" value="some ads in the" />
+            <setting name="RdsContent" value="radio text." />
+        </Rds>
+    </Station>
+    
+    <Station>
+        <setting name="Frequency" value="89000000" />
+        <Rds type="PsName">
+            <setting name="SendInterval" value="5" />
+            <setting name="SendCount" value="4" />
+            <setting name="RdsContent" value="Radio Rock" />
+        </Rds>
+        <Rds type="Pty">
+            <setting name="SendInterval" value="4" />
+            <setting name="RdsContent" value="12" />
+        </Rds>
+    </Station>
+    
+    <Station>
+        <setting name="Frequency" value="98000000" />
+        <Rds type="PsName">
+            <setting name="SendInterval" value="5" />
+            <setting name="RdsContent" value="Radio Mega" />
+        </Rds>
+        <Rds type="Rt">
+            <setting name="SendInterval" value="8" />
+            <setting name="RtPlusItem" value="Now playing: [artist] - [title]">
+                <setting name="RtPlusTag" value="artist">
+                    <setting name="delay" value="2" />
+                    <setting name="RdsContent" value="Metallica" />
+                </setting>
+                <setting name="RtPlusTag" value="title">
+                    <setting name="delay" value="2" />
+                    <setting name="RdsContent" value="One" />
+                </setting>
+            </setting>
+        </Rds>
+    </Station>
+    
+    <Station>
+        <setting name="Frequency" value="103000000" />
+        <Rds type="PsName"><!-- Dynamic PS -->
+            <setting name="SendInterval" value="2" />
+            <setting name="RdsContent" value="Radio Mega" />
+            <setting name="RdsContent" value="iskee" />
+            <setting name="RdsContent" value="makkarat" />
+            <setting name="RdsContent" value="ruutuun" />
+        </Rds>
+        <Rds type="Rt">
+            <setting name="SendInterval" value="4" />
+            <setting name="RdsContent" value="This is" />
+            <setting name="RdsContent" value="an example usage of" />
+            <setting name="RdsContent" value="radio text in a" />
+            <setting name="RdsContent" value="radio station." />
+        </Rds>
+    </Station>
+
+</radiosettings>
\ No newline at end of file
--- a/radioapp/radioenginewrapper/radioenginewrapper.pro	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioenginewrapper/radioenginewrapper.pro	Mon May 03 12:31:41 2010 +0300
@@ -20,83 +20,67 @@
 TARGET      = radioenginewrapper
 CONFIG      += dll
 DEFINES     += BUILD_WRAPPER_DLL
-win32:DESTDIR = ../bin
 
-# Wrapper does not depend on QtGui or Orbit
-QT          = core
-CONFIG      -= gui hb
 USE_DUMMY_RADIO_DATA:QT += xml
 
+INCLUDEPATH += inc
+INCLUDEPATH += ../commoninc
+
+# Common headers
+HEADERS     += radiowrapperexport.h
+HEADERS     += radio_global.h
+HEADERS     += radiologger.h
+HEADERS     += radioenginewrapper.h
+HEADERS     += radiosettings.h
+HEADERS     += radiostationhandlerif.h
+HEADERS     += radioenginewrapperobserver.h
+
+INTERNAL_HEADERS += radiosettings_p.h
+
+#USE_DUMMY_RADIO_DATA:HEADERS += t_radiodataparser.h
+
+# Common sources
+SOURCES     += radiosettings.cpp
+SOURCES     += radiologger.cpp
+SOURCES     += radioenginewrapperobserver.cpp
+
+# Symbian specific stuff
 symbian: {
-    DEFINES += SYMBIAN
-    TARGET.EPOCALLOWDLLDATA = 1
-    TARGET.CAPABILITY = CAP_GENERAL_DLL
-    
     INCLUDEPATH += ../../radioengine/utils/api
     INCLUDEPATH += ../../radioengine/settings/api
     INCLUDEPATH += ../../radioengine/engine/api
-}
-
-win32: {
-    INCLUDEPATH += inc/win32
-}
-INCLUDEPATH += inc
-INCLUDEPATH += commoninc
-
-
-USE_STUBBED_RADIOENGINE {
-    symbian:LIBS += -lfmradioengine_stub
-} else {
-    symbian:LIBS *= -lradioengineutils
-    symbian:LIBS *= -lradioenginesettings
-    symbian:LIBS *= -lradioengine
-}
 
-DEPENDPATH += $$INCLUDEPATH src
-
-# $$_PRO_FILE_PWD_ points to the directory of the pro file
-MOC_DIR = $$_PRO_FILE_PWD_/tmp
+    LIBS *= -lradioengineutils
+    LIBS *= -lradioenginesettings
+    LIBS *= -lradioengine
 
-# Input
-HEADERS += radiowrapperexport.h
-HEADERS += radio_global.h
-HEADERS += radiologger.h
-HEADERS += radioenginewrapper.h
-HEADERS += radiosettings.h
-HEADERS += radiostationhandlerif.h
-
-INTERNAL_HEADERS += radiosettings_p.h
-
-symbian: {
     HEADERS += cradioenginehandler.h
     HEADERS += mradioenginehandlerobserver.h
-    HEADERS += radiofrequencyscanninghandler.h
     HEADERS += radiocontroleventlistener.h
     HEADERS += radiordslistener.h
-    
-    INTERNAL_HEADERS += radioenginewrapper_p.h
-}
-
-#USE_DUMMY_RADIO_DATA:HEADERS += t_radiodataparser.h
 
-win32:HEADERS += radioenginewrapper_win32_p.h
-win32:HEADERS += $$INTERNAL_HEADERS
+    INTERNAL_HEADERS += radioenginewrapper_p.h
 
-SOURCES += radiosettings.cpp
-SOURCES += radiologger.cpp
-
-symbian: {
     SOURCES += radiosettings_p.cpp
     SOURCES += radioenginewrapper.cpp
     SOURCES += radioenginewrapper_p.cpp
     SOURCES += cradioenginehandler.cpp
-    SOURCES += radiofrequencyscanninghandler.cpp
     SOURCES += radiocontroleventlistener.cpp
     SOURCES += radiordslistener.cpp
 }
 
 #USE_DUMMY_RADIO_DATA:SOURCES += t_radiodataparser.cpp
 
-win32:SOURCES += radiosettings_win32_p.cpp
-win32:SOURCES += radioenginewrapper_win32.cpp
-win32:SOURCES += radioenginewrapper_win32_p.cpp
+# Win32 specific stuff
+win32: {
+    INCLUDEPATH += inc/win32
+
+    HEADERS += radioenginewrapper_win32_p.h
+    HEADERS += $$INTERNAL_HEADERS
+
+    SOURCES += radiosettings_win32_p.cpp
+    SOURCES += radioenginewrapper_win32.cpp
+    SOURCES += radioenginewrapper_win32_p.cpp
+}
+
+DEPENDPATH  += $$INCLUDEPATH src
--- a/radioapp/radioenginewrapper/src/cradioenginehandler.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioenginewrapper/src/cradioenginehandler.cpp	Mon May 03 12:31:41 2010 +0300
@@ -15,21 +15,15 @@
 *
 */
 
-
-#ifdef USE_STUBBED_RADIOENGINE
-#   include "t_cradioengine.h"
-#   include "t_mrdshandler.h"
-#else
-#   include "cradioengine.h"
-#   include "cradioaudiorouter.h"
-#   include "cradiosystemeventcollector.h"
-#   include "cradiosettings.h"
-#   include "mradioenginesettings.h"
-#   include "cradiopubsub.h"
-#   include "cradiorepositorymanager.h"
-#   include "mradiordsreceiver.h"
-#endif
-
+// User includes
+#include "cradioengine.h"
+#include "cradioaudiorouter.h"
+#include "cradiosystemeventcollector.h"
+#include "cradiosettings.h"
+#include "mradioenginesettings.h"
+#include "cradiopubsub.h"
+#include "cradiorepositorymanager.h"
+#include "mradiordsreceiver.h"
 #include "cradioenginehandler.h"
 #include "mradioenginehandlerobserver.h"
 #include "radio_global.h"
--- a/radioapp/radioenginewrapper/src/radiocontroleventlistener.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioenginewrapper/src/radiocontroleventlistener.cpp	Mon May 03 12:31:41 2010 +0300
@@ -157,10 +157,9 @@
  */
 void RadioControlEventListener::ForwardL( TBool aDownPressed )
 {
-    if( aDownPressed )
-        {
-        mEngine.observer().skipNext();
-        }
+    if( aDownPressed ) {
+        RUN_NOTIFY_LOOP( mEngine.observers(), skipNext() );
+    }
 }
 
 /*!
@@ -179,10 +178,9 @@
  */
 void RadioControlEventListener::BackwardL( TBool aDownPressed )
 {
-    if( aDownPressed )
-        {
-        mEngine.observer().skipPrevious();
-        }
+    if( aDownPressed ) {
+        RUN_NOTIFY_LOOP( mEngine.observers(), skipPrevious() );
+    }
 }
 
 /*!
@@ -190,8 +188,7 @@
  */
 void RadioControlEventListener::RewindL( TBool aDownPressed )
 {
-    if( aDownPressed )
-    {
+    if( aDownPressed ) {
         mEngine.startSeeking( Seeking::Down );
     }
 }
@@ -217,9 +214,8 @@
  */
 void RadioControlEventListener::VolumeUpL( TBool aDownPressed )
 {
-    if ( aDownPressed )
-    {
-    mEngine.RadioEnginehandler().IncreaseVolume();
+    if ( aDownPressed ) {
+        mEngine.RadioEnginehandler().IncreaseVolume();
     }
 }
 
@@ -228,9 +224,8 @@
  */
 void RadioControlEventListener::VolumeDownL( TBool aDownPressed )
 {
-    if ( aDownPressed )
-    {
-    mEngine.RadioEnginehandler().DecreaseVolume();
+    if ( aDownPressed ) {
+        mEngine.RadioEnginehandler().DecreaseVolume();
     }
 }
 
@@ -255,5 +250,5 @@
  */
 void RadioControlEventListener::AnswerEndCallL()
 {
-    mEngine.observer().skipNext();
+    RUN_NOTIFY_LOOP( mEngine.observers(), skipNext() );
 }
--- a/radioapp/radioenginewrapper/src/radioenginewrapper.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioenginewrapper/src/radioenginewrapper.cpp	Mon May 03 12:31:41 2010 +0300
@@ -19,14 +19,12 @@
 #include "radioenginewrapper.h"
 #include "radioenginewrapper_p.h"
 #include "cradioenginehandler.h"
-#include "radiofrequencyscanninghandler.h"
 
 /*!
  * Constructor
  */
-RadioEngineWrapper::RadioEngineWrapper( RadioStationHandlerIf& stationHandler,
-                                        RadioEngineWrapperObserver& observer ) :
-    d_ptr( new RadioEngineWrapperPrivate( this, stationHandler, observer ) )
+RadioEngineWrapper::RadioEngineWrapper( RadioStationHandlerIf& stationHandler ) :
+    d_ptr( new RadioEngineWrapperPrivate( this, stationHandler ) )
 {
     Q_D( RadioEngineWrapper );
     d->init();
@@ -41,6 +39,24 @@
 }
 
 /*!
+ *
+ */
+void RadioEngineWrapper::addObserver( RadioEngineWrapperObserver* observer )
+{
+    Q_D( RadioEngineWrapper );
+    d->mObservers.append( observer );
+}
+
+/*!
+ *
+ */
+void RadioEngineWrapper::removeObserver( RadioEngineWrapperObserver* observer )
+{
+    Q_D( RadioEngineWrapper );
+    d->mObservers.removeAll( observer );
+}
+
+/*!
  * Checks if the radio engine has been constructed properly
  */
 bool RadioEngineWrapper::isEngineConstructed()
@@ -113,15 +129,6 @@
 }
 
 /*!
- * Checks if the scan is on
- */
-bool RadioEngineWrapper::isScanning() const
-{
-    Q_D( const RadioEngineWrapper );
-    return !d->mFrequencyScanningHandler.isNull();
-}
-
-/*!
  * Returns the currently tuned frequency
  */
 uint RadioEngineWrapper::currentFrequency() const
@@ -140,7 +147,7 @@
 }
 
 /*!
- * Returns the headset connection status
+ * Returns the antenna connection status
  */
 bool RadioEngineWrapper::isAntennaAttached() const
 {
@@ -160,19 +167,19 @@
 /*!
  * Tunes to the given frequency
  */
-void RadioEngineWrapper::tuneFrequency( uint frequency, const int sender )
+void RadioEngineWrapper::tuneFrequency( uint frequency, const int reason )
 {
     Q_D( RadioEngineWrapper );
-    d->tuneFrequency( frequency, sender );
+    d->tuneFrequency( frequency, reason );
 }
 
 /*!
  * Tunes to the given frequency after a delay
  */
-void RadioEngineWrapper::tuneWithDelay( uint frequency, const int sender )
+void RadioEngineWrapper::tuneWithDelay( uint frequency, const int reason )
 {
     Q_D( RadioEngineWrapper );
-    d->tuneWithDelay( frequency, sender );
+    d->tuneWithDelay( frequency, reason );
 }
 
 /*!
@@ -206,30 +213,17 @@
 /*!
  *
  */
-void RadioEngineWrapper::startSeeking( Seeking::Direction direction )
+void RadioEngineWrapper::startSeeking( Seeking::Direction direction, const int reason )
 {
     Q_D( RadioEngineWrapper );
-    d->startSeeking( direction );
+    d->startSeeking( direction, reason );
 }
 
 /*!
  *
  */
-void RadioEngineWrapper::scanFrequencyBand()
+void RadioEngineWrapper::cancelSeeking()
 {
     Q_D( RadioEngineWrapper );
-    if ( !d->mFrequencyScanningHandler ) {
-        d->mFrequencyScanningHandler.reset( new RadioFrequencyScanningHandler( *d ) );
-    }
-    d->mFrequencyScanningHandler->startScanning( d->mEngineHandler->IsMuted() );
+    d->mEngineHandler->CancelSeek();
 }
-
-/*!
- *
- */
-void RadioEngineWrapper::cancelScanFrequencyBand()
-{
-    Q_D( RadioEngineWrapper );
-    d->mFrequencyScanningHandler->cancel();
-    d->frequencyScannerFinished();
-}
--- a/radioapp/radioenginewrapper/src/radioenginewrapper_p.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioenginewrapper/src/radioenginewrapper_p.cpp	Mon May 03 12:31:41 2010 +0300
@@ -24,7 +24,6 @@
 #include "radiologger.h"
 #include "radio_global.h"
 #include "cradioenginehandler.h"
-#include "radiofrequencyscanninghandler.h"
 #include "radiostationhandlerif.h"
 #include "cradiopubsub.h"
 #include "radiocontroleventlistener.h"
@@ -38,17 +37,14 @@
  *
  */
 RadioEngineWrapperPrivate::RadioEngineWrapperPrivate( RadioEngineWrapper* wrapper,
-                                                      RadioStationHandlerIf& stationHandler,
-                                                      RadioEngineWrapperObserver& observer ) :
+                                                      RadioStationHandlerIf& stationHandler ) :
     q_ptr( wrapper ),
     mStationHandler( stationHandler ),
-    mObserver( observer ),
     mEngineHandler( new CRadioEngineHandler( *this ) ),
     mControlEventListener( new RadioControlEventListener( *this ) ),
     mRdsListener ( new RadioRdsListener( mStationHandler, *this ) ),
-    mCommandSender( 0 ),
-    mUseLoudspeaker( false ),
-    mIsSeeking( false )
+    mTuneReason( 0 ),
+    mUseLoudspeaker( false )
 {
 }
 
@@ -86,7 +82,7 @@
 
     mUseLoudspeaker = mEngineHandler->IsAudioRoutedToLoudspeaker();
     if ( !mUseLoudspeaker ) {
-        mObserver.audioRouteChanged( false );
+        RUN_NOTIFY_LOOP( mObservers, audioRouteChanged( false ) );
     }
 }
 
@@ -121,36 +117,40 @@
 /*!
  * Tunes to the given frequency
  */
-void RadioEngineWrapperPrivate::tuneFrequency( uint frequency, const int sender )
+void RadioEngineWrapperPrivate::tuneFrequency( uint frequency, const int reason )
 {
-    mCommandSender = sender;
-    mEngineHandler->Tune( frequency );
+    if ( mEngineHandler->TunedFrequency() != frequency ) {
+        mTuneReason = reason;
+        mEngineHandler->Tune( frequency );
+    }
 }
 
 /*!
  * Tunes to the given frequency after a delay
  */
-void RadioEngineWrapperPrivate::tuneWithDelay( uint frequency, const int sender )
+void RadioEngineWrapperPrivate::tuneWithDelay( uint frequency, const int reason )
 {
-    mCommandSender = sender;
-    mEngineHandler->TuneWithDelay( frequency );
+    if ( mEngineHandler->TunedFrequency() != frequency ) {
+        mTuneReason = reason;
+        mEngineHandler->TuneWithDelay( frequency );
+    }
 }
 
 /*!
  *
  */
-RadioEngineWrapperObserver& RadioEngineWrapperPrivate::observer()
+ObserverList& RadioEngineWrapperPrivate::observers()
 {
-    return mObserver;
+    return mObservers;
 }
 
 /*!
  *
  */
-void RadioEngineWrapperPrivate::startSeeking( Seeking::Direction direction )
+void RadioEngineWrapperPrivate::startSeeking( Seeking::Direction direction, const int reason )
 {
+    mTuneReason = reason;
     mEngineHandler->Seek( direction );
-    mObserver.seekingStarted( direction );
 }
 
 /*!
@@ -159,8 +159,7 @@
 void RadioEngineWrapperPrivate::PowerEventL( TBool aPowerState, TInt DEBUGVAR( aError ) )
 {
     LOG_FORMAT( "RadioEngineWrapperPrivate::PowerEventL, PowerState: %d, Error: %d", aPowerState, aError );
-    mObserver.radioStatusChanged( aPowerState );
-    mEngineHandler->PubSub().PublishPowerState( aPowerState );
+    RUN_NOTIFY_LOOP( mObservers, radioStatusChanged( aPowerState ) );
 }
 
 /*!
@@ -170,35 +169,12 @@
                                                  RadioEngine::TRadioFrequencyEventReason aReason,
                                                  TInt aError )
 {
+    Q_UNUSED( aReason );
     LOG_FORMAT( "RadioEngineWrapperPrivate::FrequencyEventL - Frequency: %d, Reason: %d, Error: %d", aFrequency, aReason, aError );
 
-    if ( mFrequencyScanningHandler )
-    {
-        // frequencyevents not handled during scanning //TODO remove
-        return;
-    }
-
     if ( !aError ) {
         const uint frequency = static_cast<uint>( aFrequency );
-
-        mStationHandler.setCurrentStation( frequency );
-
-        // Stations found by seeking (autotune) are saved as local stations
-        if ( aReason == RadioEngine::ERadioFrequencyEventReasonSeekUp
-             || aReason == RadioEngine::ERadioFrequencyEventReasonSeekDown  )
-        {
-            mStationHandler.addScannedFrequency( frequency );
-            mCommandSender = 0;
-        }
-
-        //mEngineHandler->SetMuted( EFalse );
-        LOG_TIMESTAMP( "Channel change finished" );
-
-        mObserver.tunedToFrequency( frequency, mCommandSender );
-
-        mStationHandler.startDynamicPsCheck();
-
-        mEngineHandler->PubSub().PublishFrequency( aFrequency );
+        RUN_NOTIFY_LOOP( mObservers, tunedToFrequency( frequency, mTuneReason ) );
     }
 }
 
@@ -208,8 +184,7 @@
 void RadioEngineWrapperPrivate::VolumeEventL( TInt aVolume, TInt aError )
 {
     Q_UNUSED( aError );
-    mObserver.volumeChanged( aVolume );
-    mEngineHandler->PubSub().PublishVolume( aVolume );
+    RUN_NOTIFY_LOOP( mObservers, volumeChanged( aVolume ) );
 }
 
 /*!
@@ -218,8 +193,7 @@
 void RadioEngineWrapperPrivate::MuteEventL( TBool aMuteState, TInt aError )
 {
     Q_UNUSED( aError );
-    mObserver.muteChanged( aMuteState );
-    mEngineHandler->PubSub().PublishRadioMuteState( aMuteState );
+    RUN_NOTIFY_LOOP( mObservers, muteChanged( aMuteState ) );
 }
 
 /*!
@@ -236,8 +210,7 @@
 void RadioEngineWrapperPrivate::AntennaEventL( TBool aAntennaAttached, TInt aError )
 {
     Q_UNUSED( aError );
-    mObserver.headsetStatusChanged( aAntennaAttached );
-//    doc->PubSubL().PublishHeadsetStatusL( EVRPSHeadsetConnected );
+    RUN_NOTIFY_LOOP( mObservers, antennaStatusChanged( aAntennaAttached ) );
 }
 
 /*!
@@ -248,7 +221,6 @@
     //TODO: Check how this event differs from AudioRoutingChangedL
     Q_UNUSED( aAudioDestination )
     Q_UNUSED( aError )
-//    doc->PubSubL().PublishLoudspeakerStatusL( EVRPSLoudspeakerNotInUse );
 //    Q_Q( RadioEngineWrapper );
 //    q->audioRouteChanged( aAudioDestination == RadioEngine::ERadioSpeaker );
 }
@@ -264,7 +236,6 @@
 //        // We only set the flag here. It is reset in the FrequencyEventL
 //        mIsSeeking = true;
 //    }
-//    Document()->PubSubL().PublishTuningStateL( EVRPSTuningStarted );
 }
 
 /*!
@@ -273,8 +244,6 @@
 void RadioEngineWrapperPrivate::RegionEventL( TInt DEBUGVAR( aRegion ), TInt DEBUGVAR( aError ) )
 {
     LOG_FORMAT( "RadioEngineWrapperPrivate::RegionEventL, aRegion: %d, Error: %d", aRegion, aError );
-//    Document()->PubSubL().PublishFrequencyDecimalCountL(
-//        static_cast<TVRPSFrequencyDecimalCount>( Document()->RadioSettings()->DecimalCount() ) );
 }
 
 /*!
@@ -283,7 +252,7 @@
 void RadioEngineWrapperPrivate::AudioRouteChangedL( RadioEngine::TRadioAudioRoute aRoute )
 {
     mUseLoudspeaker = aRoute == RadioEngine::ERadioSpeaker;
-    mObserver.audioRouteChanged( mUseLoudspeaker );
+    RUN_NOTIFY_LOOP( mObservers, audioRouteChanged( mUseLoudspeaker ) );
 }
 
 /*!
@@ -316,13 +285,3 @@
         LOG( "RadioEngineWrapperPrivate::HandleRepositoryValueChangeL: Offline profile activated" );
     }
 }
-
-/*!
- *
- */
-void RadioEngineWrapperPrivate::frequencyScannerFinished()
-{
-    RadioFrequencyScanningHandler* handler = mFrequencyScanningHandler.take(); // Nulls the pointer
-    handler->deleteLater();
-    mObserver.scanAndSaveFinished();
-}
--- a/radioapp/radioenginewrapper/src/radioenginewrapper_win32.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioenginewrapper/src/radioenginewrapper_win32.cpp	Mon May 03 12:31:41 2010 +0300
@@ -23,9 +23,8 @@
 /*!
  * Constructor
  */
-RadioEngineWrapper::RadioEngineWrapper( RadioStationHandlerIf& stationHandler,
-                                        RadioEngineWrapperObserver& observer ) :
-    d_ptr( new RadioEngineWrapperPrivate( this, stationHandler, observer ) )
+RadioEngineWrapper::RadioEngineWrapper( RadioStationHandlerIf& stationHandler ) :
+    d_ptr( new RadioEngineWrapperPrivate( this, stationHandler ) )
 {
     Q_D( RadioEngineWrapper );
     d->init();
@@ -40,6 +39,24 @@
 }
 
 /*!
+ *
+ */
+void RadioEngineWrapper::addObserver( RadioEngineWrapperObserver* observer )
+{
+    Q_D( RadioEngineWrapper );
+    d->mObservers.append( observer );
+}
+
+/*!
+ *
+ */
+void RadioEngineWrapper::removeObserver( RadioEngineWrapperObserver* observer )
+{
+    Q_D( RadioEngineWrapper );
+    d->mObservers.removeAll( observer );
+}
+
+/*!
  * Checks if the radio engine has been constructed properly
  */
 bool RadioEngineWrapper::isEngineConstructed()
@@ -111,14 +128,6 @@
 }
 
 /*!
- * Checks if the scan is on
- */
-bool RadioEngineWrapper::isScanning() const
-{
-    return false;
-}
-
-/*!
  * Returns the currently tuned frequency
  */
 uint RadioEngineWrapper::currentFrequency() const
@@ -136,7 +145,7 @@
 }
 
 /*!
- * Returns the headset connection status
+ * Returns the antenna connection status
  */
 bool RadioEngineWrapper::isAntennaAttached() const
 {
@@ -193,31 +202,23 @@
 void RadioEngineWrapper::toggleAudioRoute()
 {
     Q_D( RadioEngineWrapper );
-    d->mUseLoudspeaker = !d->mUseLoudspeaker;
-    d->mObserver.audioRouteChanged( d->mUseLoudspeaker );
+    d->toggleAudioRoute();
 }
 
 /*!
  *
  */
-void RadioEngineWrapper::startSeeking( Seeking::Direction direction )
+void RadioEngineWrapper::startSeeking( Seeking::Direction direction, const int reason )
 {
     Q_D( RadioEngineWrapper );
-    d->startSeeking( direction );
+    d->startSeeking( direction, reason );
 }
 
 /*!
  *
  */
-void RadioEngineWrapper::scanFrequencyBand()
-{
-}
-
-/*!
- *
- */
-void RadioEngineWrapper::cancelScanFrequencyBand()
+void RadioEngineWrapper::cancelSeeking()
 {
     Q_D( RadioEngineWrapper );
-    d->frequencyScannerFinished();
+    d->cancelSeeking();
 }
--- a/radioapp/radioenginewrapper/src/radioenginewrapper_win32_p.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioenginewrapper/src/radioenginewrapper_win32_p.cpp	Mon May 03 12:31:41 2010 +0300
@@ -55,15 +55,12 @@
  *
  */
 RadioEngineWrapperPrivate::RadioEngineWrapperPrivate( RadioEngineWrapper* wrapper,
-                                                      RadioStationHandlerIf& stationHandler,
-                                                      RadioEngineWrapperObserver& observer ) :
+                                                      RadioStationHandlerIf& stationHandler ) :
     q_ptr( wrapper ),
     mStationHandler( stationHandler ),
-    mObserver( observer ),
     mTuneTimer( new QTimer( this ) ),
-    mCommandSender( 0 ),
+    mTuneReason( 0 ),
     mUseLoudspeaker( false ),
-    mIsSeeking( false ),
     mAntennaAttached( true ),
     mFrequency( 0 ),
     mNextFrequency( 0 ),
@@ -110,7 +107,7 @@
 {
     mUseLoudspeaker = false;
     if ( !mUseLoudspeaker ) {
-        mObserver.audioRouteChanged( false );
+        RUN_NOTIFY_LOOP( mObservers, audioRouteChanged( false ) );
     }
 
     parseData();
@@ -139,11 +136,10 @@
 /*!
  * Tunes to the given frequency
  */
-void RadioEngineWrapperPrivate::tuneFrequency( uint frequency, const int sender )
+void RadioEngineWrapperPrivate::tuneFrequency( uint frequency, const int reason )
 {
-    mFrequency = frequency;
-    mEngineSettings->setValue( KKeyFrequency, mFrequency );
-    mCommandSender = sender;
+    mNextFrequency = frequency;
+    mTuneReason = reason;
     mTuneTimer->stop();
     mTuneTimer->start( 500 );
 }
@@ -151,11 +147,10 @@
 /*!
  * Tunes to the given frequency after a delay
  */
-void RadioEngineWrapperPrivate::tuneWithDelay( uint frequency, const int sender )
+void RadioEngineWrapperPrivate::tuneWithDelay( uint frequency, const int reason )
 {
-    mFrequency = frequency;
-    mEngineSettings->setValue( KKeyFrequency, mFrequency );
-    mCommandSender = sender;
+    mNextFrequency = frequency;
+    mTuneReason = reason;
     mTuneTimer->stop();
     mTuneTimer->start( 1500 );
 }
@@ -163,24 +158,24 @@
 /*!
  *
  */
-RadioEngineWrapperObserver& RadioEngineWrapperPrivate::observer()
+ObserverList& RadioEngineWrapperPrivate::observers()
 {
-    return mObserver;
+    return mObservers;
 }
 
 /*!
  *
  */
-void RadioEngineWrapperPrivate::startSeeking( Seeking::Direction direction )
+void RadioEngineWrapperPrivate::startSeeking( Seeking::Direction direction, const int reason )
 {
-    mObserver.seekingStarted( direction );
+    mTuneReason = reason;
 
     // Find the previous and next favorite from current frequency
     uint previous = 0;
     uint next = 0;
     for( int i = 0; i < KScanFrequencyCount; ++i ) {
-        int testFreq = KScanFrequencies[i];
-        if ( testFreq > mFrequency ) {
+        const uint testFreq = KScanFrequencies[i];
+        if ( KScanFrequencies[i] > mFrequency ) {
             next = testFreq;
             break;
         }
@@ -206,6 +201,24 @@
 /*!
  *
  */
+void RadioEngineWrapperPrivate::cancelSeeking()
+{
+    mTuneTimer->stop();
+    mNextFrequency = 0;
+}
+
+/*!
+ *
+ */
+void RadioEngineWrapperPrivate::toggleAudioRoute()
+{
+    mUseLoudspeaker = !mUseLoudspeaker;
+    RUN_NOTIFY_LOOP( mObservers, audioRouteChanged( mUseLoudspeaker ) );
+}
+
+/*!
+ *
+ */
 QString RadioEngineWrapperPrivate::dataParsingError() const
 {
     return mParsingError;
@@ -217,7 +230,7 @@
 void RadioEngineWrapperPrivate::setHeadsetStatus( bool connected )
 {
     mAntennaAttached = connected;
-    mObserver.headsetStatusChanged( mAntennaAttached );
+    RUN_NOTIFY_LOOP( mObservers, antennaStatusChanged( mAntennaAttached ) );
 }
 
 /*!
@@ -226,7 +239,7 @@
 void RadioEngineWrapperPrivate::setVolume( int volume )
 {
     mVolume = volume;
-    mObserver.volumeChanged( mVolume );
+    RUN_NOTIFY_LOOP( mObservers, volumeChanged( mVolume ) );
 }
 
 /*!
@@ -273,14 +286,10 @@
  */
 void RadioEngineWrapperPrivate::frequencyEvent()
 {
-    if ( mNextFrequency ) { // Seeking
-        mFrequency = mNextFrequency;
-        mStationHandler.addScannedFrequency( mFrequency );
-    }
+    mFrequency = mNextFrequency;
+    mEngineSettings->setValue( KKeyFrequency, mFrequency );
 
-    mStationHandler.setCurrentStation( mFrequency );
-    mObserver.tunedToFrequency( mFrequency, mCommandSender );
-    mStationHandler.startDynamicPsCheck();
+    RUN_NOTIFY_LOOP( mObservers, tunedToFrequency( mFrequency, mTuneReason ) );
 }
 
 /*!
@@ -298,14 +307,6 @@
 /*!
  *
  */
-void RadioEngineWrapperPrivate::frequencyScannerFinished()
-{
-    mObserver.scanAndSaveFinished();
-}
-
-/*!
- *
- */
 void RadioEngineWrapperPrivate::parseData()
 {
     /*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radioenginewrapper/src/radioenginewrapperobserver.cpp	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,107 @@
+/*
+* 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 "radioenginewrapperobserver.h"
+
+/*!
+ *
+ * @param frequency
+ * @param commandSender
+ */
+void RadioEngineWrapperObserver::tunedToFrequency( uint frequency, int reason )
+{
+    // Default implementation does nothing
+    Q_UNUSED( frequency );
+    Q_UNUSED( reason );
+}
+
+/*!
+ *
+ * @param radioIsOn
+ */
+void RadioEngineWrapperObserver::radioStatusChanged( bool radioIsOn )
+{
+    // Default implementation does nothing
+    Q_UNUSED( radioIsOn );
+}
+
+/*!
+ *
+ * @param available
+ */
+void RadioEngineWrapperObserver::rdsAvailabilityChanged( bool available )
+{
+    // Default implementation does nothing
+    Q_UNUSED( available );
+}
+
+/*!
+ *
+ * @param volume
+ */
+void RadioEngineWrapperObserver::volumeChanged( int volume )
+{
+    // Default implementation does nothing
+    Q_UNUSED( volume );
+}
+
+/*!
+ *
+ * @param muted
+ */
+void RadioEngineWrapperObserver::muteChanged( bool muted )
+{
+    // Default implementation does nothing
+    Q_UNUSED( muted );
+}
+
+/*!
+ *
+ * @param loudspeaker
+ */
+void RadioEngineWrapperObserver::audioRouteChanged( bool loudspeaker )
+{
+    // Default implementation does nothing
+    Q_UNUSED( loudspeaker );
+}
+
+/*!
+ *
+ * @param connected
+ */
+void RadioEngineWrapperObserver::antennaStatusChanged( bool connected )
+{
+    // Default implementation does nothing
+    Q_UNUSED( connected );
+}
+
+/*!
+ *
+ */
+void RadioEngineWrapperObserver::skipPrevious()
+{
+    // Default implementation does nothing
+}
+
+/*!
+ *
+ */
+void RadioEngineWrapperObserver::skipNext()
+{
+    // Default implementation does nothing
+}
+
--- a/radioapp/radioenginewrapper/src/radiofrequencyscanninghandler.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,110 +0,0 @@
-/*
-* 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:
-*
-*/
-
-// System includes
-#include <QTimer>
-
-// User includes
-#include "radiofrequencyscanninghandler.h"
-#include "radioenginewrapper_p.h"
-#include "cradioenginehandler.h"
-#include "radiostationhandlerif.h"
-
-/*!
- *
- */
-RadioFrequencyScanningHandler::RadioFrequencyScanningHandler( RadioEngineWrapperPrivate& radioEngine ) :
-    QObject( 0 ),
-    mEngine( radioEngine ),
-    mLastFoundFrequency( 0 )
-{
-}
-
-/*!
- * From MRadioScanObserver
- *
- */
-void RadioFrequencyScanningHandler::ScanFrequencyEventL( TUint32 aFrequency )
-{
-    // The scanning logic starts from the minimun frequency and advances as long as
-    // the found frequency is higher than the last one. When it loops around from the highest
-    // frequency back to the lowest one we check if it stops at the minimun frequency and
-    // add the station there. This logic handles the special case where there is a station in the
-    // minimum frequency, but does not work if there are no stations at all. The adaptation has a
-    // timeout timer that stops the scanning if nothing is found and reports the scanning start
-    // frequency which is this case will be the minimum frequency. In that case this logic will
-    // assume that it was an audible station and adds it.
-
-    uint frequency = static_cast<uint>( aFrequency );
-    mEngine.mStationHandler.setCurrentStation( frequency );
-    if ( frequency > mLastFoundFrequency ) {
-        mLastFoundFrequency = frequency;
-        addFoundStation( frequency );
-    } else if ( frequency == mEngine.mEngineHandler->MinFrequency() ) {
-        // Special case. A station has been found in the mininmum frequency
-        addFoundStation( frequency );
-    }
-}
-
-/*!
- * From MRadioScanObserver
- *
- */
-void RadioFrequencyScanningHandler::ScanCompletedEventL( TInt aError )
-{
-    Q_UNUSED( aError )
-  
-    mEngine.frequencyScannerFinished(); // Causes the scanner to be deleted so nothing can be done after this
-}
-
-
-/*!
- * Starts the scanning
- */
-void RadioFrequencyScanningHandler::startScanning( bool muted )
-{
-    Q_UNUSED( muted )
-    cancel();
-    QTimer::singleShot( 1000, this, SLOT(delayedStart()) );
-}
-
-/*!
- * Adds a new station that was found
- */
-void RadioFrequencyScanningHandler::addFoundStation( const uint frequency )
-{
-    mEngine.mStationHandler.addScannedFrequency( frequency );
-}
-
-/*!
- * Cancels the scanning process
- */
-void RadioFrequencyScanningHandler::cancel()
-{
-    mEngine.mEngineHandler->StopScan();
-}
-
-/*!
- *
- */
-void RadioFrequencyScanningHandler::delayedStart()
-{
-    mEngine.mStationHandler.removeLocalStations();
-
-    mLastFoundFrequency = mEngine.mEngineHandler->MinFrequency();
-    mEngine.mEngineHandler->StartScan( *this );
-}
--- a/radioapp/radioenginewrapper/src/radiordslistener.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioenginewrapper/src/radiordslistener.cpp	Mon May 03 12:31:41 2010 +0300
@@ -44,7 +44,7 @@
  */
 void RadioRdsListener::RdsAvailable( TUint32 /*aFrequency*/, TBool aAvailable )
 {
-    mWrapper.observer().rdsAvailabilityChanged( aAvailable );
+    RUN_NOTIFY_LOOP( mWrapper.observers(), rdsAvailabilityChanged( aAvailable ) );
 }
 
 /*!
@@ -78,9 +78,6 @@
         const uint frequency = static_cast<uint>( aFrequency );
         mStationHandler.setCurrentPsName( frequency, convertString( aProgramService ) );
 
-        // TODO: Remove below when RdsDataPTY callback is available
-        RdsDataGenre( frequency, GenreEurope::RdsRockMusic );
-
 #ifdef SHOW_CALLSIGN_IN_ANY_REGION
         RdsDataPiCode( frequency, 0x3BB7 ); //KQOL-FM - Las Vegas, NV
 #endif
--- a/radioapp/radioenginewrapper/src/radiosettings.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radioenginewrapper/src/radiosettings.cpp	Mon May 03 12:31:41 2010 +0300
@@ -43,6 +43,14 @@
 /*!
  *
  */
+RadioSettings::~RadioSettings()
+{
+    delete d_ptr;
+}
+
+/*!
+ *
+ */
 bool RadioSettings::isFirstTimeStart()
 {
     Q_D( RadioSettings );
--- a/radioapp/radiopresetstorage/radiopresetstorage.pro	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiopresetstorage/radiopresetstorage.pro	Mon May 03 12:31:41 2010 +0300
@@ -20,17 +20,6 @@
 TARGET      = radiopresetstorage
 CONFIG      += dll
 DEFINES     += BUILD_PRESET_STORAGE_DLL
-win32:DESTDIR = ../bin
-
-# Wrapper does not depend on QtGui or Orbit
-QT          = core
-CONFIG      -= hb
-
-symbian: {
-    DEFINES += SYMBIAN
-    TARGET.EPOCALLOWDLLDATA = 1
-    TARGET.CAPABILITY = CAP_GENERAL_DLL
-}
 
 INCLUDEPATH += inc
 
@@ -43,16 +32,19 @@
 
 DEPENDPATH += $$INCLUDEPATH src
 
-# $$_PRO_FILE_PWD_ points to the directory of the pro file
-MOC_DIR = $$_PRO_FILE_PWD_/tmp
+# Input
+HEADERS     += radiopresetstorage.h
+HEADERS     += radiostationif.h
+HEADERS     += radiopresetstorageexport.h
 
-# Input
-HEADERS += radiopresetstorage.h
-HEADERS += radiostationif.h
-HEADERS += radiopresetstorageexport.h
+# Symbian specific stuff
+symbian: {
+    INTERNAL_HEADERS += radiopresetstorage_p.h
+    SOURCES += radiopresetstorage.cpp
+}
 
-symbian:INTERNAL_HEADERS += radiopresetstorage_p.h
-symbian:SOURCES += radiopresetstorage.cpp
-
-win32:HEADERS += radiopresetstorage_win32_p.h
-win32:SOURCES += radiopresetstorage_win32.cpp
+# Win32 specific stuff
+win32: {
+    HEADERS += radiopresetstorage_win32_p.h
+    SOURCES += radiopresetstorage_win32.cpp
+}
--- a/radioapp/radiopresetstorage/src/radiopresetstorage.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiopresetstorage/src/radiopresetstorage.cpp	Mon May 03 12:31:41 2010 +0300
@@ -53,6 +53,7 @@
  */
 RadioPresetStorage::~RadioPresetStorage()
 {
+    delete d_ptr;
 }
 
 /*!
--- a/radioapp/radiopresetstorage/tsrc/t_radiopresetstorage.pro	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiopresetstorage/tsrc/t_radiopresetstorage.pro	Mon May 03 12:31:41 2010 +0300
@@ -35,7 +35,7 @@
     stub/inc \
     ../../../inc \
     ../inc \
-    ../../radioenginewrapper/commoninc \
+    ../../commoninc \
     ../../radioenginewrapper/inc \
     ../../radiopresetstorage/inc \
     ../../radiouiengine/inc \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiouiengine/inc/radiohistoryitem.h	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,109 @@
+/*
+* 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:
+*
+*/
+
+#ifndef RADIOHISTORYITEM_H
+#define RADIOHISTORYITEM_H
+
+// System includes
+#include <QMetaType>
+#include <QObject>
+
+// User includes
+#include "radiouiengineexport.h"
+
+// Forward declarations
+class RadioHistoryItemPrivate;
+
+/*!
+ * Radio history item implements a song recognized from the radio broadcast
+ *
+ * Note! It is derived from QObject even though architecturally it shouldn't be.
+ * It is done only to satisfy the WINSCW build which doesn't export the destructor in UREL
+ * build. This causes mismatching def files and annoying warnings. Deriving from QObject fixes this
+ */
+class UI_ENGINE_DLL_EXPORT RadioHistoryItem : public QObject
+{
+public:
+
+    RadioHistoryItem();
+    RadioHistoryItem( const QString& artist, const QString& title );
+    RadioHistoryItem( const RadioHistoryItem& other );
+
+    ~RadioHistoryItem();
+
+    RadioHistoryItem& operator=( const RadioHistoryItem& other );
+
+    QString artist() const;
+    void setArtist( const QString& artist );
+
+    QString title() const;
+    void setTitle( const QString& title );
+
+    QString station() const;
+    void setStation( const QString& station );
+
+    uint frequency() const;
+    void setFrequency( uint frequency );
+
+    QString time() const;
+    void setCurrentTime();
+
+    bool isFavorite() const;
+    void setFavorite();
+
+    void increasePlayCount();
+    int playCount() const;
+
+private:
+
+    /**
+     * Decrements the reference count of the implicitly shared data.
+     * Data is deleted if no instance uses it anymore.
+     */
+    void decrementReferenceCount();
+
+private: // data
+
+    /**
+     * Pointer to the implicitly shared private implementation
+     * Own.
+     */
+    class RadioHistoryItemPrivate* mData;
+
+public:
+
+    /**
+     * Detach from the implicitly shared data
+     */
+    void detach();
+
+    /**
+     * Checks if the class is detached from implicitly shared data
+     * Required by many QT convenience functions for implicitly shared classes
+     */
+    bool isDetached() const;
+
+    typedef RadioHistoryItemPrivate* DataPtr;
+    inline DataPtr &data_ptr() { return mData; }
+
+};
+
+Q_DECLARE_TYPEINFO( RadioHistoryItem, Q_MOVABLE_TYPE );  // Can be moved around in memory by containers if necessary
+Q_DECLARE_SHARED( RadioHistoryItem )                     // Uses implicit sharing
+Q_DECLARE_METATYPE( RadioHistoryItem )                   // To be usable in a QVariant
+
+#endif // RADIOHISTORYITEM_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiouiengine/inc/radiohistoryitem_p.h	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,61 @@
+/*
+* 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:
+*
+*/
+
+#ifndef RADIOHISTORYITEM_P_H
+#define RADIOHISTORYITEM_H
+
+// System includes
+#include <QString>
+#include <QDateTime>
+
+// User includes
+
+class RadioHistoryItemPrivate
+{
+public:
+
+    RadioHistoryItemPrivate();
+    RadioHistoryItemPrivate( const QString& artist, const QString& title );
+
+    void init( const QString& artist, const QString& title );
+
+public: // data
+
+    /**
+     * Reference count used for implicit sharing.
+     * Has to be named "ref" instead having the 'm' prefix like all other member variables in Radio
+     * This is because convenience functions like qAtomicAssign() expect it to be named "ref"
+     */
+    QAtomicInt      ref;
+
+    QString         mArtist;
+
+    QString         mTitle;
+
+    QString         mStation;
+
+    QDateTime       mTime;
+
+    uint            mFrequency;
+
+    int             mPlayCount;
+
+    bool            mFavorite;
+
+};
+
+#endif // RADIOHISTORYITEM_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiouiengine/inc/radiohistorymodel.h	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,98 @@
+/*
+* 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:
+*
+*/
+
+#ifndef RADIOHISTORYMODEL_H
+#define RADIOHISTORYMODEL_H
+
+// System includes
+#include <QAbstractListModel>
+
+// User includes
+#include "radiouiengineexport.h"
+#include "radiohistoryitem.h"
+
+// Forward declarations
+class RadioHistoryModelPrivate;
+class RadioUiEngine;
+class RadioStation;
+
+class UI_ENGINE_DLL_EXPORT RadioHistoryModel : public QAbstractListModel
+{
+    Q_OBJECT
+    Q_DECLARE_PRIVATE_D( d_ptr, RadioHistoryModel )
+    Q_DISABLE_COPY( RadioHistoryModel )
+
+    friend class RadioUiEngine;
+    friend class RadioStationModelPrivate;
+    friend class TestRadioUiEngine;
+    
+public:
+
+    enum HistoryRole
+    {
+        HistoryItemRole = Qt::UserRole + 100,
+        SetFavoriteRole
+    };
+
+// from base class QAbstractListModel
+
+    Qt::ItemFlags flags ( const QModelIndex& index ) const;
+    int rowCount( const QModelIndex& parent = QModelIndex() ) const;
+    QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const;
+    bool setData( const QModelIndex& index, const QVariant& value, int role = Qt::EditRole );
+
+// New functions
+
+    bool isCurrentSongRecognized() const;
+    void setShowDetails( bool showDetails );
+
+signals:
+
+    void itemAdded();
+    void currentSongReset();
+
+public slots:
+
+    void resetCurrentSong();
+    void setFavorite();
+    void removeAll();
+
+private:
+
+    explicit RadioHistoryModel( RadioUiEngine& uiEngine );
+
+    ~RadioHistoryModel();
+
+    void addItem( const QString& artist, const QString& title, const RadioStation& station );
+
+    void clearRadioTextPlus();
+    void addRadioTextPlus( int rtClass, const QString& rtItem, const RadioStation& station );
+
+    int findItem( const QString& artist, const QString& title, RadioHistoryItem& item );
+
+    void updateItem( int index, const RadioHistoryItem& item, bool prepend = false );
+
+private: // data
+
+    /**
+     * Unmodifiable pointer to the private implementation
+     */
+    RadioHistoryModelPrivate* const d_ptr;
+
+};
+
+#endif // RADIOHISTORYMODEL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiouiengine/inc/radiohistorymodel_p.h	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,64 @@
+/*
+* 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:
+*
+*/
+
+#ifndef RADIOHISTORYMODEL_P_H
+#define RADIOHISTORYMODEL_P_H
+
+// System includes
+#include <QList>
+#include <QString>
+
+// Forward declarations
+class RadioHistoryModel;
+class RadioUiEngine;
+class RadioHistoryItem;
+
+class RadioHistoryModelPrivate
+{
+public:
+
+    explicit RadioHistoryModelPrivate( RadioHistoryModel* model, RadioUiEngine& uiEngine );
+
+    ~RadioHistoryModelPrivate();
+
+public: // data
+
+    /**
+     * Pointer to the public class
+     * Not own.
+     */
+    RadioHistoryModel*          q_ptr;
+
+    /**
+     * Reference to the ui engine
+     */
+    RadioUiEngine&              mUiEngine;
+
+    /**
+     * List of history items
+     */
+    QList<RadioHistoryItem>     mItems;
+
+    QString                     mRtItemHolder;
+
+    bool                        mTopItemIsPlaying;
+
+    bool                        mShowDetails;
+
+};
+
+#endif // RADIOHISTORYMODEL_P_H
--- a/radioapp/radiouiengine/inc/radiolocalization.h	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,297 +0,0 @@
-/*
-* 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:
-*
-*/
-
-// System includes
-#include <QObject>
-
-typedef struct{ const char* source; const char* comment; } Translation;
-
-#define TRANSLATE(string) tr( string.source, string.comment )
-#define QTRANSLATE(string) QObject::tr( string.source, string.comment )
-
-static const char* KContextApplication      = "RadioApplication";
-static const char* KContextViewBase         = "RadioViewBase";
-static const char* KContextModel            = "RadioStationModel";
-static const char* KContextTuningView       = "RadioTuningView";
-static const char* KContextStationControl   = "RadioStationControlWidget";
-static const char* KContextStationsView     = "RadioStationsView";
-static const char* KContextWizardView       = "RadioWizardView";
-static const char* KContextPresetScanner    = "RadioFrequencyScanner";
-static const char* KContextMenuBar          = "Menu";
-
-//:
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KConnectHeadsetAntenna = QT_TRANSLATE_NOOP3( KContextTuningView, "Connect headset antenna", "txt_rad_list_connect_headset_antenna" );
-
-//: Headset disconnected popup title
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KTitleHeadsetDisconnectedPopup = QT_TRANSLATE_NOOP3( KContextApplication, "Headset disconnected", "txt_fmradio_popup_headset_disconnected" );
-
-//: FMRadio application name
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KApplicationName = QT_TRANSLATE_NOOP3( KContextViewBase, "FM Radio", "txt_fmradio_appname" );
-
-//: Error message telling that radio receiver startup failed
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KErrorEngineStartFailed = QT_TRANSLATE_NOOP3( KContextApplication, "Failed to start radio receiver", "txt_fmradio_popup_start_failed" );
-
-//: Radio frequency megahertz abbreviation
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KFrequencyMhz = QT_TRANSLATE_NOOP3( KContextModel, "%1 Mhz", "txt_fmradio_model_mhz" );
-
-// TUNING VIEW
-
-//: Menu item in the tuning view menu to activate the stations view
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KMenuActivateStationsView = QT_TRANSLATE_NOOP3( KContextTuningView, "Go to Stations View", "txt_fmradio_action_activate_stationsview" );
-
-//: Text in the Station information area when seeking is ongoing
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KHeadingSeeking = QT_TRANSLATE_NOOP3( KContextTuningView, "Seeking", "txt_fmradio_heading_seeking" );
-
-// STATIONS VIEW
-
-//: Menu item in the stations view menu to activate Wizard view
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KMenuScanLocalStations = QT_TRANSLATE_NOOP3( KContextStationsView, "Scan local stations", "txt_fmradio_action_scan_local_stations" );
-
-//: Menu item in the stations view menu to activate the tuning view
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KMenuActivateTuningView = QT_TRANSLATE_NOOP3( KContextStationsView, "Go to Tuning View", "txt_fmradio_action_activate_tuningview" );
-
-//: Filter button to show only the favorite stations in the stations view
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KBtnTextFavorites = QT_TRANSLATE_NOOP3( KContextStationsView, "Favorites", "txt_fmradio_show_favorites" );
-
-//: Filter button to show only the local stations in the stations view
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KBtnTextLocalStations = QT_TRANSLATE_NOOP3( KContextStationsView, "Local stations", "txt_fmradio_show_local_stations" );
-
-//: Heading text to indicate that stations list is currently displaying favorite stations
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KHeadingTextFavorites = QT_TRANSLATE_NOOP3( KContextStationsView, "Favorites", "txt_fmradio_heading_favorites" );
-
-//: Prefix of the text in a button that changes view to tuning view.
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KBtnTextNowPlaying = QT_TRANSLATE_NOOP3( KContextStationsView, "Now Playing: %1", "txt_fmradio_btn_now_playing" );
-
-//: Text in a button that changes view to tuning view (headset disconnected case).
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KBtnTextConnectHeadsetAntenna = QT_TRANSLATE_NOOP3( KContextStationsView, "Connect headset antenna", "txt_fmradio_btn_connect_headset_antenna" );
-
-//: Heading text to indicate that stations list is currently displaying local stations
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KHeadingTextLocalStations = QT_TRANSLATE_NOOP3( KContextStationsView, "Local stations", "txt_fmradio_heading_local_stations" );
-
-//: Title for the progress note for scanning local stations
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KProgressTitleScanStations = QT_TRANSLATE_NOOP3( KContextPresetScanner, "Scanning local stations", "txt_fmradio_title_scan_stations" );
-
-//: Title for the progress note for scanning local stations. Shows the amount of stations found so far
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KProgressTitleStationsFound = QT_TRANSLATE_NOOP3( KContextPresetScanner, "%1 stations found", "txt_fmradio_title_stations_found" );
-
-// Stations view context sentive menu texts
-
-//: Title for the "rename station" menu item in the stationsview context sensitive menu
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KMenuItemRenameStation = QT_TRANSLATE_NOOP3( KContextStationsView, "Rename station", "txt_fmradio_menu_rename_station" );
-
-//: Title for the "remove renaming" menu item in the stationsview context sensitive menu
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KMenuItemRemoveRenaming = QT_TRANSLATE_NOOP3( KContextStationsView, "Remove renaming", "txt_fmradio_menu_remove_renaming" );
-
-//: Title for the input query used to rename the station
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KQueryEnterStationName = QT_TRANSLATE_NOOP3( KContextStationsView, "Enter station name", "txt_fmradio_query_enter_station_name" );
-
-//: Title for the "set as favorite" menu item in the stationsview context sensitive menu
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KMenuItemSetAsFavorite = QT_TRANSLATE_NOOP3( KContextStationsView, "Set as favorite", "txt_fmradio_menu_set_favorite" );
-
-//: Title for the "remove favorite" menu item in the stationsview context sensitive menu
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KMenuItemRemoveFavorite = QT_TRANSLATE_NOOP3( KContextStationsView, "Remove favorite", "txt_fmradio_menu_remove_favorite" );
-
-//: Title for the "remove station" menu item in the stationsview context sensitive menu
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KMenuItemRemoveStation = QT_TRANSLATE_NOOP3( KContextStationsView, "Remove station", "txt_fmradio_menu_remove_station" );
-
-// WIZARD VIEW
-
-//: Heading text to indicate that user can select favourite stations from the stations list
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KHeadingTextSelectFavorites = QT_TRANSLATE_NOOP3( KContextWizardView, "Select favourite stations", "txt_fmradio_heading_select_favorites" );
-
-//: Button for marking all Wizard view station listbox items
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KBtnTextMarkAll = QT_TRANSLATE_NOOP3( KContextWizardView, "Mark All", "txt_fmradio_mark_all" );
-
-//: Button for unmarking all Wizard view station listbox items
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KBtnTextUnmarkAll = QT_TRANSLATE_NOOP3( KContextWizardView, "Unmark All", "txt_fmradio_unmark_all" );
-
-//: Confirmation query for starting in offline mode
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KQueryTextStartOffline = QT_TRANSLATE_NOOP3( KContextWizardView, "Start in offline mode?", "txt_fmradio_start_offline" );
-//: Confirmation for favourite station selections in Wizard view
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KBtnTextDone = QT_TRANSLATE_NOOP3( KContextWizardView, "Done", "txt_fmradio_done" );
-
-// STATION CONTROL WIDGET
-
-//: Button to tag the current song in the station control widget in tuning view
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KBtnTagSong = QT_TRANSLATE_NOOP3( KContextStationControl, "Tag this song", "txt_fmradio_btn_tag_song" );
-
-//: Button to open play history in the station control widget in tuning view
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KBtnPlayHistory = QT_TRANSLATE_NOOP3( KContextStationControl, "Play history", "txt_fmradio_btn_play_history" );
-
-//: Button to open a web address in the station control widget in tuning view
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KBtnGotoWeb = QT_TRANSLATE_NOOP3( KContextStationControl, "Go to web address", "txt_fmradio_btn_goto_web" );
-
-//: Button to mark current station as favorite in the station control widget in tuning view
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KBtnSetFavorite = QT_TRANSLATE_NOOP3( KContextStationControl, "Set as favorite", "txt_fmradio_btn_set_favorite" );
-
-//: Button to remove the favorite status from the current station in the station control widget in tuning view
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KBtnRemoveFavorite = QT_TRANSLATE_NOOP3( KContextStationControl, "Remove favorite", "txt_fmradio_btn_remove_favorite" );
-
-// Generic texts
-
-//: Menu item in the view menu to exit the application
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KMenuExit = QT_TRANSLATE_NOOP3( KContextMenuBar, "Exit", "txt_fmradio_action_exit" );
-
-//: Menu item to route audio to loudspeaker
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KMenuUseLoudspeaker = QT_TRANSLATE_NOOP3( KContextMenuBar, "Use loudspeaker", "txt_fmradio_menu_use_loudspeaker" );
-
-//: Menu item to route audio to headset
-//* loc-layout_id foo_dialog
-//* loc-blank False
-//* loc-viewid vid1
-//* loc-positionid pid1
-const Translation KMenuUseHeadset = QT_TRANSLATE_NOOP3( KContextMenuBar, "Use headset", "txt_fmradio_menu_use_headset" );
--- a/radioapp/radiouiengine/inc/radiomonitorservice.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiouiengine/inc/radiomonitorservice.h	Mon May 03 12:31:41 2010 +0300
@@ -22,6 +22,7 @@
 #include <xqserviceprovider.h>
 
 // User includes
+#include "radioservicedef.h"
 
 // Forward declarations
 class RadioUiEngine;
@@ -35,25 +36,31 @@
     RadioMonitorService( RadioUiEngine& engine );
     virtual ~RadioMonitorService();
 
+    void notifyFavoriteCount( const int favoriteCount );
+    void notifyAntennaStatus( bool connected );
+    void notifyRadioStatus( RadioStatus::Status radioStatus );
+    void notifyFrequency( const uint frequency );
     void notifyName( const QString& name );
     void notifyGenre( const QString& genre );
     void notifyRadioText( const QString& radioText );
-    void notifyHomepage( const QString& homepage );
+    void notifyHomePage( const QString& homePage );
     void notifySong( const QString& song );
 
 public slots:
 
     void requestNotifications();
+    void requestAllData();
 
 private:
     
-    void notify( int notificationId, const QString& message );
+    void notify( const QVariant& notification );
+    void notifyList( const QVariantList& list );
     
 private: // data
 
     RadioUiEngine&  mUiEngine;
     
-    int mRequestIndex;
+    QList<int>      mRequestIndexes;
 
 };
 
--- a/radioapp/radiouiengine/inc/radiomonitorservice_win32.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiouiengine/inc/radiomonitorservice_win32.h	Mon May 03 12:31:41 2010 +0300
@@ -22,6 +22,7 @@
 #include <QObject>
 
 // User includes
+#include "radioservicedef.h"
 
 // Forward declarations
 class RadioUiEngine;
@@ -35,10 +36,14 @@
     RadioMonitorService( RadioUiEngine& engine );
     virtual ~RadioMonitorService();
 
+    void notifyFavoriteCount( const int favoriteCount );
+    void notifyAntennaStatus( bool connected );
+    void notifyRadioStatus( RadioStatus::Status radioStatus );
+    void notifyFrequency( const uint frequency );
     void notifyName( const QString& name );
     void notifyGenre( const QString& genre );
     void notifyRadioText( const QString& radioText );
-    void notifyHomepage( const QString& homepage );
+    void notifyHomePage( const QString& homePage );
     void notifySong( const QString& song );
 
 private:
--- a/radioapp/radiouiengine/inc/radioplaylogitem.h	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-/*
-* 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:
-*
-*/
-
-#ifndef RADIOPLAYLOGITEM_H
-#define RADIOPLAYLOGITEM_H
-
-// System includes
-#include <QMetaType>
-#include <QObject>
-
-// User includes
-#include "radiouiengineexport.h"
-
-// Forward declarations
-class RadioPlayLogItemPrivate;
-
-/*!
- * Radio play log item implements a song recognized from the radio broadcast
- *
- * Note! It is derived from QObject even though architecturally it shouldn't be.
- * It is done only to satisfy the WINSCW build which doesn't export the destructor in UREL
- * build. This causes mismatching def files and annoying warnings. Deriving from QObject fixes this
- */
-class UI_ENGINE_DLL_EXPORT RadioPlayLogItem : public QObject
-{
-public:
-
-    RadioPlayLogItem();
-    RadioPlayLogItem( const QString& artist, const QString& title );
-    RadioPlayLogItem( const RadioPlayLogItem& other );
-
-    ~RadioPlayLogItem();
-
-    RadioPlayLogItem& operator=( const RadioPlayLogItem& other );
-
-    QString artist() const;
-    void setArtist( const QString& artist );
-
-    QString title() const;
-    void setTitle( const QString& title );
-
-    QString station() const;
-    void setStation( const QString& station );
-
-    uint frequency() const;
-    void setFrequency( uint frequency );
-
-    QString time() const;
-    void setCurrentTime();
-
-    bool isFavorite() const;
-    void setFavorite();
-
-    void increasePlayCount();
-    int playCount() const;
-
-private:
-
-    /**
-     * Decrements the reference count of the implicitly shared data.
-     * Data is deleted if no instance uses it anymore.
-     */
-    void decrementReferenceCount();
-
-private: // data
-
-    /**
-     * Pointer to the implicitly shared private implementation
-     * Own.
-     */
-    class RadioPlayLogItemPrivate* mData;
-
-public:
-
-    /**
-     * Detach from the implicitly shared data
-     */
-    void detach();
-
-    /**
-     * Checks if the class is detached from implicitly shared data
-     * Required by many QT convenience functions for implicitly shared classes
-     */
-    bool isDetached() const;
-
-    typedef RadioPlayLogItemPrivate* DataPtr;
-    inline DataPtr &data_ptr() { return mData; }
-
-};
-
-Q_DECLARE_TYPEINFO( RadioPlayLogItem, Q_MOVABLE_TYPE );  // Can be moved around in memory by containers if necessary
-Q_DECLARE_SHARED( RadioPlayLogItem )                     // Uses implicit sharing
-Q_DECLARE_METATYPE( RadioPlayLogItem )                   // To be usable in a QVariant
-
-#endif // RADIOPLAYLOGITEM_H
--- a/radioapp/radiouiengine/inc/radioplaylogitem_p.h	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/*
-* 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:
-*
-*/
-
-#ifndef RADIOPLAYLOGITEM_P_H
-#define RADIOPLAYLOGITEM_P_H
-
-// System includes
-#include <QString>
-#include <QDateTime>
-
-// User includes
-
-class RadioPlayLogItemPrivate
-{
-public:
-
-    RadioPlayLogItemPrivate();
-    RadioPlayLogItemPrivate( const QString& artist, const QString& title );
-
-    void init( const QString& artist, const QString& title );
-
-public: // data
-
-    /**
-     * Reference count used for implicit sharing.
-     * Has to be named "ref" instead having the 'm' prefix like all other member variables in Radio
-     * This is because convenience functions like qAtomicAssign() expect it to be named "ref"
-     */
-    QAtomicInt      ref;
-
-    QString         mArtist;
-
-    QString         mTitle;
-
-    QString         mStation;
-
-    QDateTime       mTime;
-
-    uint            mFrequency;
-
-    int             mPlayCount;
-
-    bool            mFavorite;
-
-};
-
-#endif // RADIOPLAYLOGITEM_P_H
--- a/radioapp/radiouiengine/inc/radioplaylogmodel.h	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-/*
-* 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:
-*
-*/
-
-#ifndef RADIOPLAYLOGMODEL_H
-#define RADIOPLAYLOGMODEL_H
-
-// System includes
-#include <QAbstractListModel>
-
-// User includes
-#include "radiouiengineexport.h"
-#include "radioplaylogitem.h"
-
-// Forward declarations
-class RadioPlayLogModelPrivate;
-class RadioUiEngine;
-class RadioStation;
-
-class UI_ENGINE_DLL_EXPORT RadioPlayLogModel : public QAbstractListModel
-{
-    Q_OBJECT
-    Q_DECLARE_PRIVATE_D( d_ptr, RadioPlayLogModel )
-    Q_DISABLE_COPY( RadioPlayLogModel )
-
-    friend class RadioUiEngine;
-    friend class RadioStationModelPrivate;
-    friend class TestRadioUiEngine;
-    
-public:
-
-    enum PlayLogRole
-    {
-        PlayLogItemRole = Qt::UserRole + 100,
-        SetFavoriteRole
-    };
-
-// from base class QAbstractListModel
-
-    Qt::ItemFlags flags ( const QModelIndex& index ) const;
-    int rowCount( const QModelIndex& parent = QModelIndex() ) const;
-    QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const;
-    bool setData( const QModelIndex& index, const QVariant& value, int role = Qt::EditRole );
-
-// New functions
-
-    bool isCurrentSongRecognized() const;
-    void setShowDetails( bool showDetails );
-
-signals:
-
-    void itemAdded();
-    void currentSongReset();
-
-public slots:
-
-    void resetCurrentSong();
-    void setFavorite();
-    void removeAll();
-
-private:
-
-    explicit RadioPlayLogModel( RadioUiEngine& uiEngine );
-
-    ~RadioPlayLogModel();
-
-    void addItem( const QString& artist, const QString& title, const RadioStation& station );
-
-    void clearRadioTextPlus();
-    void addRadioTextPlus( int rtClass, const QString& rtItem, const RadioStation& station );
-
-    int findItem( const QString& artist, const QString& title, RadioPlayLogItem& item );
-
-    void updateItem( int index, const RadioPlayLogItem& item, bool prepend = false );
-
-private: // data
-
-    /**
-     * Unmodifiable pointer to the private implementation
-     */
-    RadioPlayLogModelPrivate* const d_ptr;
-
-};
-
-#endif // RADIOPLAYLOGMODEL_H
--- a/radioapp/radiouiengine/inc/radioplaylogmodel_p.h	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/*
-* 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:
-*
-*/
-
-#ifndef RADIOPLAYLOGMODEL_P_H
-#define RADIOPLAYLOGMODEL_P_H
-
-// System includes
-#include <QList>
-#include <QString>
-
-// Forward declarations
-class RadioPlayLogModel;
-class RadioUiEngine;
-class RadioPlayLogItem;
-
-class RadioPlayLogModelPrivate
-{
-public:
-
-    explicit RadioPlayLogModelPrivate( RadioPlayLogModel* model, RadioUiEngine& uiEngine );
-
-    ~RadioPlayLogModelPrivate();
-
-public: // data
-
-    /**
-     * Pointer to the public class
-     * Not own.
-     */
-    RadioPlayLogModel*          q_ptr;
-
-    /**
-     * Reference to the ui engine
-     */
-    RadioUiEngine&              mUiEngine;
-
-    /**
-     * List of play log items
-     */
-    QList<RadioPlayLogItem>     mItems;
-
-    QString                     mRtItemHolder;
-
-    bool                        mTopItemIsPlaying;
-
-    bool                        mShowDetails;
-
-};
-
-#endif // RADIOPLAYLOGMODEL_P_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiouiengine/inc/radioscannerengine.h	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,90 @@
+/*
+* 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:
+*
+*/
+
+#ifndef RADIOSCANNERENGINE_H
+#define RADIOSCANNERENGINE_H
+
+// System includes
+#include <QObject>
+#include <QMap>
+
+// User includes
+#include "radiouiengineexport.h"
+
+// Forward declarations
+class RadioScannerEnginePrivate;
+class RadioUiEnginePrivate;
+class RadioStationHandlerIf;
+class RadioStation;
+
+// Constants
+
+// Class declaration
+class UI_ENGINE_DLL_EXPORT RadioScannerEngine : public QObject
+    {
+    Q_OBJECT
+    Q_DECLARE_PRIVATE_D( d_ptr, RadioScannerEngine )
+    Q_DISABLE_COPY( RadioScannerEngine )
+
+    friend class RadioUiEngine;
+    
+public:
+
+    explicit RadioScannerEngine( RadioUiEnginePrivate& uiEngine );
+    ~RadioScannerEngine();
+
+// New functions
+
+    /*!
+     * Starts the scanning from minimum frequency
+     */
+    void startScanning();
+
+    /*!
+     * Continues the scanning upwards from current frequency
+     */
+    void continueScanning();
+
+    /*!
+     * Cancels the scanning process
+     */
+    void cancel();
+
+    /*!
+     * Adds a new station that was found
+     * @param frequency Frequency of the found station
+     */
+    void addScannedFrequency( const uint frequency );
+
+signals:
+
+    void stationFound( const RadioStation& station );
+
+private:
+
+    void emitStationFound( const RadioStation& station );
+
+private: // data
+
+    /**
+     * Unmodifiable pointer to the private implementation
+     */
+    RadioScannerEnginePrivate* const d_ptr;
+
+    };
+
+#endif // RADIOSCANNERENGINE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiouiengine/inc/radioscannerengine_p.h	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,109 @@
+/*
+* 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:
+*
+*/
+
+#ifndef RADIOSCANNERENGINE_P_H_
+#define RADIOSCANNERENGINE_P_H_
+
+#include <QObject>
+#include <QMap>
+
+// User includes
+#include "radioenginewrapperobserver.h"
+
+// Forward declarations
+class RadioScannerEngine;
+class RadioUiEnginePrivate;
+class RadioStationHandlerIf;
+class RadioStation;
+class RadioEngineWrapper;
+
+// Constants
+
+// Class declaration
+class RadioScannerEnginePrivate : public RadioEngineWrapperObserver
+    {
+    Q_DECLARE_PUBLIC( RadioScannerEngine )
+    Q_DISABLE_COPY( RadioScannerEnginePrivate )
+
+public:
+
+    RadioScannerEnginePrivate( RadioScannerEngine* scanner, RadioUiEnginePrivate& uiEngine );
+    ~RadioScannerEnginePrivate();
+
+// New functions
+
+    /*!
+     * Starts the scanning from minimum frequency
+     */
+    void startScanning();
+
+    /*!
+     * Continues the scanning upwards from current frequency
+     */
+    void continueScanning();
+
+    /*!
+     * Cancels the scanning process
+     */
+    void cancel();
+
+    /*!
+     * Adds a new station that was found
+     * @param frequency Frequency of the found station
+     */
+    void addScannedFrequency( const uint frequency );
+
+signals:
+
+    void stationFound( const RadioStation& station );
+
+private slots:
+
+    void delayedStart();
+
+private:
+
+// from base class RadioEngineWrapperObserver
+
+    void tunedToFrequency( uint frequency, int reason );
+
+// New functions
+
+    void addFrequencyAndReport( const uint frequency );
+
+private: // data
+
+    /**
+     * Pointer to the public class
+     * Not own.
+     */
+    RadioScannerEngine*     q_ptr;
+
+    RadioUiEnginePrivate&   mUiEngine;
+
+    /**
+     * Last scanned frequency. Used to know when the scanning has looped around the
+     * frequency band and it should stop
+     */
+    uint                    mLastFoundFrequency;
+
+    bool                    mMutedByScanner;
+
+    };
+
+
+#endif // RADIOSCANNERENGINE_P_H_
--- a/radioapp/radiouiengine/inc/radioserviceconst.h	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-/*
-* 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:
-*
-*/
-
-#ifndef RADIOSERVICECONST_H
-#define RADIOSERVICECONST_H
-
-static const char* RADIO_CONTROL_SERVICE = "com.nokia.services.Radio.IRadioControl";
-static const char* RADIO_MONITOR_SERVICE = "com.nokia.services.Radio.IRadioMonitor";
-
-const long KRadioPSUid = 0x101FF976;
-const unsigned long KRadioStartupKey = 0x00000014;
-
-namespace RadioServiceCommand
-{
-    enum CommandId
-    {
-        Play,
-        Pause,
-        Previous,
-        Next,
-        SeekUp,
-        SeekDown,
-        Foreground,
-        Background
-    };
-}
-
-namespace RadioServiceNotification
-{
-    enum NotificationId
-    {
-        Name,
-        Genre,
-        RadioText,
-        Homepage,
-        Song
-    };
-}
-
-#endif // RADIOSERVICECONST_H
--- a/radioapp/radiouiengine/inc/radiostation.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiouiengine/inc/radiostation.h	Mon May 03 12:31:41 2010 +0300
@@ -123,7 +123,7 @@
 
     RadioStation& operator=( const RadioStation& other );
 
-private:
+public:
 
     explicit RadioStation( int presetIndex, uint frequency );
 
--- a/radioapp/radiouiengine/inc/radiostationmodel.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiouiengine/inc/radiostationmodel.h	Mon May 03 12:31:41 2010 +0300
@@ -31,8 +31,8 @@
 class RadioPresetStorage;
 class RadioStationHandlerIf;
 class RadioEngineWrapper;
-class RadioUiEngine;
 class RadioStation;
+class RadioUiEnginePrivate;
 class QIcon;
 
 // Constants
@@ -61,7 +61,7 @@
     };
     Q_DECLARE_FLAGS( Detail, DetailFlag )
 
-    explicit RadioStationModel( RadioUiEngine& uiEngine );
+    explicit RadioStationModel( RadioUiEnginePrivate& uiEngine );
 
     ~RadioStationModel();
 
@@ -75,9 +75,9 @@
 // New functions
 
     /*!
-     * Called by the wrapper to initialize the list with given amount of presets
+     * Called by the engine to initialize the list with given amount of presets
      */
-    void initialize( RadioPresetStorage* storage, RadioEngineWrapper* engine );
+    void initialize( RadioPresetStorage* storage, RadioEngineWrapper* wrapper );
 
     /*!
      * Sets the icons to be used in the lists
@@ -106,6 +106,11 @@
     bool findFrequency( uint frequency, RadioStation& station );
 
     /*!
+    * Function to check the number of favorite stations
+    */
+    int favoriteCount();
+
+    /*!
      * Functions to find stations by preset index
      */
     int findPresetIndex( int presetIndex );
--- a/radioapp/radiouiengine/inc/radiostationmodel_p.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiouiengine/inc/radiostationmodel_p.h	Mon May 03 12:31:41 2010 +0300
@@ -25,24 +25,25 @@
 #include <QIcon>
 
 // User includes
-//#include "radiostation.h"
+#include "radioenginewrapperobserver.h"
 #include "radiostationhandlerif.h"
 
 // Forward declarations
-class RadioUiEngine;
+class RadioUiEnginePrivate;
 class RadioPresetStorage;
 class RadioEngineWrapper;
 class QTimer;
 
 // Class declaration
 class RadioStationModelPrivate : public RadioStationHandlerIf
+                               , public RadioEngineWrapperObserver
 {
     Q_DECLARE_PUBLIC( RadioStationModel )
     Q_DISABLE_COPY( RadioStationModelPrivate )
 
 public:
 
-    explicit RadioStationModelPrivate( RadioStationModel* model, RadioUiEngine& uiEngine );
+    explicit RadioStationModelPrivate( RadioStationModel* model, RadioUiEnginePrivate& uiEngine );
 
     virtual ~RadioStationModelPrivate();
 
@@ -64,6 +65,14 @@
     void setCurrentPiCode( uint frequency, int piCode );
     void setCurrentGenre( uint frequency, int genre );
 
+// from base class RadioEngineWrapperObserver
+
+    void tunedToFrequency( uint frequency, int reason );
+
+// New functions
+
+    void doSaveStation( RadioStation& station, bool persistentSave = true );
+
 private: // data
 
     /**
@@ -75,7 +84,7 @@
     /**
      * Reference to the ui engine
      */
-    RadioUiEngine&              mUiEngine;
+    RadioUiEnginePrivate&       mUiEngine;
 
     /**
      * Pointer to the preset storage
@@ -85,7 +94,7 @@
     /**
      * Pointer to the radio engine wrapper
      */
-    RadioEngineWrapper*         mEngine;
+    RadioEngineWrapper*         mWrapper;
 
     /**
      * List of station items
--- a/radioapp/radiouiengine/inc/radiouiengine.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiouiengine/inc/radiouiengine.h	Mon May 03 12:31:41 2010 +0300
@@ -32,10 +32,21 @@
 class RadioStationModel;
 class RadioSettings;
 class RadioStation;
-class RadioPlayLogModel;
+class RadioHistoryModel;
 class RadioStationFilterModel;
+class RadioScannerEngine;
 class RadioMonitorService;
 
+namespace GenreTarget
+{
+    enum Target{
+        Carousel,
+        StationsList,
+        HomeScreen
+    };
+}
+
+
 class UI_ENGINE_DLL_EXPORT RadioUiEngine : public QObject
 {
     Q_OBJECT
@@ -45,8 +56,6 @@
 public:
 
     static bool isOfflineProfile();
-    static QString parseFrequency( uint frequency );
-    static QString nameOrFrequency( const RadioStation& station, uint frequency = 0 );
 
     RadioUiEngine( QObject* parent = 0 );
     ~RadioUiEngine();
@@ -60,8 +69,9 @@
      */
     RadioSettings& settings();
     RadioStationModel& model();
-    RadioPlayLogModel& playLogModel();
+    RadioHistoryModel& historyModel();
     RadioStationFilterModel* createNewFilterModel( QObject* parent = 0 );
+    RadioScannerEngine* createScannerEngine();
     RadioMonitorService& monitor();
 
     bool isRadioOn() const;
@@ -76,12 +86,9 @@
     uint maxFrequency() const;
     uint frequencyStepSize() const;
 
-    void scanFrequencyBand();
-    void cancelScanFrequencyBand();
-
     QList<RadioStation> stationsInRange( uint minFrequency, uint maxFrequency );
 
-    QString genreToString( int genre );
+    QString genreToString( int genre, GenreTarget::Target target );
 
     bool isSongRecognitionAppAvailable();
 
@@ -99,16 +106,15 @@
     void muteChanged( bool muted );
 
     void audioRouteChanged( bool loudspeaker );
-    void scanAndSaveFinished();
-    void headsetStatusChanged( bool connected );
+    void antennaStatusChanged( bool connected );
 
 public slots:
 
     /**
      * Slots to tune to given frequency or preset
      */
-    void tuneFrequency( uint frequency, const int sender = CommandSender::Unspecified );
-    void tuneWithDelay( uint frequency, const int sender = CommandSender::Unspecified );
+    void tuneFrequency( uint frequency, const int sender = TuneReason::Unspecified );
+    void tuneWithDelay( uint frequency, const int sender = TuneReason::Unspecified );
     void tunePreset( int presetIndex );
 
     /*!
@@ -138,8 +144,7 @@
     void emitVolumeChanged( int volume );
     void emitMuteChanged( bool muted );
     void emitAudioRouteChanged( bool loudspeaker );
-    void emitScanAndSaveFinished();
-    void emitheadsetStatusChanged( bool connected );
+    void emitAntennaStatusChanged( bool connected );
 
 private: // data
 
--- a/radioapp/radiouiengine/inc/radiouiengine_p.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiouiengine/inc/radiouiengine_p.h	Mon May 03 12:31:41 2010 +0300
@@ -20,6 +20,7 @@
 
 // System includes
 #include <QScopedPointer>
+#include <QPointer>
 
 #include "radioenginewrapperobserver.h"
 
@@ -27,10 +28,11 @@
 class RadioUiEngine;
 class RadioEngineWrapper;
 class RadioStationModel;
-class RadioPlayLogModel;
+class RadioHistoryModel;
 class RadioPresetStorage;
 class RadioControlService;
 class RadioMonitorService;
+class RadioScannerEngine;
 
 class RadioUiEnginePrivate : public RadioEngineWrapperObserver
 {
@@ -42,23 +44,27 @@
     enum TuneDirection{ Next, Previous };
 
     RadioUiEnginePrivate( RadioUiEngine* engine );
-    ~RadioUiEnginePrivate();
+    virtual ~RadioUiEnginePrivate();
+
+    RadioUiEngine& api();
 
     bool startRadio();
 
+    void cancelSeeking();
+
+    RadioEngineWrapper& wrapper();
+
 private:
 
 // from base class RadioEngineWrapperObserver
 
-    void tunedToFrequency( uint frequency, int commandSender );
-    void seekingStarted( Seeking::Direction direction );
+    void tunedToFrequency( uint frequency, int reason );
     void radioStatusChanged( bool radioIsOn );
     void rdsAvailabilityChanged( bool available );
     void volumeChanged( int volume );
     void muteChanged( bool muted );
     void audioRouteChanged( bool loudspeaker );
-    void scanAndSaveFinished();
-    void headsetStatusChanged( bool connected );
+    void antennaStatusChanged( bool connected );
     void skipPrevious();
     void skipNext();
 
@@ -75,19 +81,21 @@
      * Pointer to the public class
      * Not own.
      */
-    RadioUiEngine*                      q_ptr;
+    RadioUiEngine*                          q_ptr;
+
+    QScopedPointer<RadioEngineWrapper>      mEngineWrapper;
 
-    QScopedPointer<RadioEngineWrapper>  mEngineWrapper;
+    QScopedPointer<RadioPresetStorage>      mPresetStorage;
 
-    QScopedPointer<RadioPresetStorage>  mPresetStorage;
+    RadioStationModel*                      mStationModel;
 
-    RadioStationModel*                  mStationModel;
+    RadioHistoryModel*                      mHistoryModel;
 
-    RadioPlayLogModel*                  mPlayLogModel;
+    RadioControlService*                    mControlService;
 
-    RadioControlService*                mControlService;
+    RadioMonitorService*                    mMonitorService;
 
-    RadioMonitorService*                mMonitorService;
+    QPointer<RadioScannerEngine>            mScannerEngine;
 
 };
 
--- a/radioapp/radiouiengine/radiouiengine.pro	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiouiengine/radiouiengine.pro	Mon May 03 12:31:41 2010 +0300
@@ -37,7 +37,7 @@
 INCLUDEPATH += inc
 INCLUDEPATH += ../radiopresetstorage/inc
 INCLUDEPATH += ../radioenginewrapper/inc
-INCLUDEPATH += ../radioenginewrapper/commoninc
+INCLUDEPATH += ../commoninc
 
 win32:LIBS += -L../bin
 
@@ -54,24 +54,27 @@
 MOC_DIR = $$_PRO_FILE_PWD_/tmp
 
 # Input
+HEADERS += radiouiengineexport.h
 HEADERS += radiostation.h
 HEADERS += radiostationmodel.h
 HEADERS += radiostationfiltermodel.h
 HEADERS += radiouiengine.h
-HEADERS += radioplaylogitem.h
-HEADERS += radioplaylogmodel.h
-HEADERS += radiolocalization.h
-HEADERS += radiouiengineexport.h
+HEADERS += radiohistoryitem.h
+HEADERS += radiohistorymodel.h
+HEADERS += radioscannerengine.h
+HEADERS += radioservicedef.h
+HEADERS += radionotificationdata.h
+
 symbian:HEADERS += radiocontrolservice.h
 symbian:HEADERS += radiomonitorservice.h
 win32:HEADERS += radiomonitorservice_win32.h
-HEADERS += radioserviceconst.h
 
 INTERNAL_HEADERS += radiostation_p.h
-INTERNAL_HEADERS += radioplaylogitem_p.h
-INTERNAL_HEADERS += radioplaylogmodel_p.h
+INTERNAL_HEADERS += radiohistoryitem_p.h
+INTERNAL_HEADERS += radiohistorymodel_p.h
 INTERNAL_HEADERS += radiouiengine_p.h
 INTERNAL_HEADERS += radiostationmodel_p.h
+INTERNAL_HEADERS += radioscannerengine_p.h
 
 win32:HEADERS += $$INTERNAL_HEADERS
 
@@ -82,10 +85,13 @@
 SOURCES += radiostationfiltermodel.cpp
 SOURCES += radiouiengine.cpp
 SOURCES += radiouiengine_p.cpp
-SOURCES += radioplaylogitem.cpp
-SOURCES += radioplaylogitem_p.cpp
-SOURCES += radioplaylogmodel.cpp
-SOURCES += radioplaylogmodel_p.cpp
+SOURCES += radiohistoryitem.cpp
+SOURCES += radiohistoryitem_p.cpp
+SOURCES += radiohistorymodel.cpp
+SOURCES += radiohistorymodel_p.cpp
+SOURCES += radioscannerengine.cpp
+SOURCES += radioscannerengine_p.cpp
+
 symbian:SOURCES += radiocontrolservice.cpp
 symbian:SOURCES += radiomonitorservice.cpp
 win32:SOURCES += radiomonitorservice_win32.cpp
--- a/radioapp/radiouiengine/src/radiocontrolservice.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiouiengine/src/radiocontrolservice.cpp	Mon May 03 12:31:41 2010 +0300
@@ -21,7 +21,7 @@
 // User includes
 #include "radiocontrolservice.h"
 #include "radiouiengine.h"
-#include "radioserviceconst.h"
+#include "radioservicedef.h"
 
 /*!
  *
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiouiengine/src/radiohistoryitem.cpp	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,236 @@
+/*
+* 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:
+*
+*/
+
+// User includes
+#include "radiohistoryitem.h"
+#include "radiohistoryitem_p.h"
+
+/**
+ * Static shared data instance that is used by all default-constructed RadioStation instances
+ */
+Q_GLOBAL_STATIC( RadioHistoryItemPrivate, shared_null )
+
+
+/*!
+ *
+ */
+RadioHistoryItem::RadioHistoryItem() :
+    QObject( 0 )
+{
+    mData = shared_null();
+    mData->ref.ref();
+}
+
+/*!
+ *
+ */
+RadioHistoryItem::RadioHistoryItem( const QString& artist, const QString& title ) :
+    QObject( 0 )
+{
+    mData = new RadioHistoryItemPrivate( artist, title );
+}
+
+/*!
+ *
+ */
+RadioHistoryItem::RadioHistoryItem( const RadioHistoryItem& other ) :
+    QObject( 0 )
+{
+    mData = other.mData;
+    mData->ref.ref();
+}
+
+/*!
+ *
+ */
+RadioHistoryItem::~RadioHistoryItem()
+{
+    decrementReferenceCount();
+}
+
+/*!
+ *
+ */
+RadioHistoryItem& RadioHistoryItem::operator=( const RadioHistoryItem& other )
+{
+    qAtomicAssign( mData, other.mData );
+    return *this;
+}
+
+/*!
+ *
+ */
+QString RadioHistoryItem::artist() const
+{
+    return mData->mArtist;
+}
+
+/*!
+ *
+ */
+void RadioHistoryItem::setArtist( const QString& artist )
+{
+    if ( artist.compare( mData->mArtist ) != 0 ) {
+        detach();
+        mData->mArtist = artist;
+    }
+}
+
+/*!
+ *
+ */
+QString RadioHistoryItem::title() const
+{
+    return mData->mTitle;
+}
+
+/*!
+ *
+ */
+void RadioHistoryItem::setTitle( const QString& title )
+{
+    if ( title.compare( mData->mTitle ) != 0 ) {
+        detach();
+        mData->mTitle = title;
+    }
+}
+
+/*!
+ *
+ */
+QString RadioHistoryItem::station() const
+{
+    return mData->mStation;
+}
+
+/*!
+ *
+ */
+void RadioHistoryItem::setStation( const QString& station )
+{
+    if ( station.compare( mData->mStation ) != 0 ) {
+        detach();
+        mData->mStation = station;
+    }
+}
+
+/*!
+ *
+ */
+uint RadioHistoryItem::frequency() const
+{
+    return mData->mFrequency;
+}
+
+/*!
+ *
+ */
+void RadioHistoryItem::setFrequency( uint frequency )
+{
+    if ( frequency != mData->mFrequency ) {
+        detach();
+        mData->mFrequency = frequency;
+    }
+}
+
+/*!
+ *
+ */
+QString RadioHistoryItem::time() const
+{
+    return mData->mTime.toString();
+}
+
+/*!
+ *
+ */
+void RadioHistoryItem::setCurrentTime()
+{
+    detach();
+    mData->mTime.currentDateTime();
+}
+
+
+/*!
+ *
+ */
+bool RadioHistoryItem::isFavorite() const
+{
+    return mData->mFavorite;
+}
+
+/*!
+ *
+ */
+void RadioHistoryItem::setFavorite()
+{
+    if ( !mData->mFavorite ) {
+        detach();
+        mData->mFavorite = true;
+    }
+}
+
+/*!
+ *
+ */
+void RadioHistoryItem::increasePlayCount()
+{
+    detach();
+    ++mData->mPlayCount;
+}
+
+/*!
+ *
+ */
+int RadioHistoryItem::playCount() const
+{
+    return mData->mPlayCount;
+}
+
+/**
+ * Decrements the reference count of the implicitly shared data.
+ */
+void RadioHistoryItem::decrementReferenceCount()
+{
+    if ( !mData->ref.deref() ) {
+        delete mData;
+        mData = 0;
+    }
+}
+
+/**
+ * Detach from the implicitly shared data
+ */
+void RadioHistoryItem::detach()
+{
+    if ( !isDetached() ) {
+        RadioHistoryItemPrivate* newData = new RadioHistoryItemPrivate( *mData );
+
+        decrementReferenceCount();
+
+        newData->ref = 1;
+        mData = newData;
+    }
+}
+
+/**
+ * Checks if the class is detached from implicitly shared data
+ */
+bool RadioHistoryItem::isDetached() const
+{
+    return mData->ref == 1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiouiengine/src/radiohistoryitem_p.cpp	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,49 @@
+/*
+* 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 "radiohistoryitem.h"
+#include "radiohistoryitem_p.h"
+
+/*!
+ *
+ */
+RadioHistoryItemPrivate::RadioHistoryItemPrivate()
+{
+    init( "", "" );
+}
+
+/*!
+ *
+ */
+RadioHistoryItemPrivate::RadioHistoryItemPrivate( const QString& artist,
+                                                  const QString& title )
+{
+    init( artist, title );
+}
+
+/*!
+ *
+ */
+void RadioHistoryItemPrivate::init( const QString& artist, const QString& title )
+{
+    ref = 1;
+    mArtist = artist;
+    mTitle = title;
+    mFrequency = 0;
+    mFavorite = false;
+    mPlayCount = 1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiouiengine/src/radiohistorymodel.cpp	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,269 @@
+/*
+* 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:
+*
+*/
+
+// System includes
+#include <QStringList>
+
+// User includes
+#include "radiohistorymodel.h"
+#include "radiohistorymodel_p.h"
+#include "radiouiengine.h"
+#include "radiohistoryitem.h"
+#include "radiostation.h"
+#include "radiouiengine.h"
+#include "radio_global.h"
+#include "radiologger.h"
+
+/*!
+ *
+ */
+RadioHistoryModel::RadioHistoryModel( RadioUiEngine& uiEngine ) :
+    QAbstractListModel( &uiEngine ),
+    d_ptr( new RadioHistoryModelPrivate( this, uiEngine ) )
+{
+    connectAndTest( &uiEngine,  SIGNAL(tunedToFrequency(uint,int)),
+                    this,       SLOT(resetCurrentSong()) );
+    connectAndTest( &uiEngine,  SIGNAL(seekingStarted(int)),
+                    this,       SLOT(resetCurrentSong()) );
+}
+
+/*!
+ *
+ */
+RadioHistoryModel::~RadioHistoryModel()
+{
+    Q_D( RadioHistoryModel );
+    d->mItems.clear();
+    delete d_ptr;
+}
+
+/*!
+ * \reimp
+ */
+Qt::ItemFlags RadioHistoryModel::flags ( const QModelIndex& index ) const
+{
+    Qt::ItemFlags flags = QAbstractListModel::flags( index );
+    flags |= Qt::ItemIsEditable;
+    return flags;
+}
+
+/*!
+ * \reimp
+ */
+int RadioHistoryModel::rowCount( const QModelIndex& parent ) const
+{
+    Q_UNUSED( parent );
+    Q_D( const RadioHistoryModel );
+    return d->mItems.count();
+}
+
+/*!
+ * \reimp
+ */
+QVariant RadioHistoryModel::data( const QModelIndex& index, int role ) const
+{
+    if ( !index.isValid() ) {
+        return QVariant();
+    }
+
+    Q_D( const RadioHistoryModel );
+    if ( role == Qt::DisplayRole ) {
+        RadioHistoryItem item = d->mItems.at( index.row() );
+
+        QStringList list;
+        if ( d->mShowDetails ) {
+            list.append( item.artist() + " - " + item.title() );
+            list.append( item.time() + " " + item.station() + " " /*+ RadioUiEngine::parseFrequency( item.frequency() ) */ );
+        } else {
+            list.append( item.artist() );
+            list.append( item.title() );
+        }
+
+        return list;
+    }
+
+    return QVariant();
+}
+
+/*!
+ * \reimp
+ */
+bool RadioHistoryModel::setData( const QModelIndex& index, const QVariant& value, int role )
+{
+    Q_UNUSED( value );
+    if ( !index.isValid() ) {
+        return false;
+    }
+
+    if ( role == RadioHistoryModel::SetFavoriteRole ) {
+        Q_D( RadioHistoryModel );
+        RadioHistoryItem item = d->mItems.at( index.row() );
+        item.setFavorite();
+        updateItem( index.row(), item );
+        return true;
+    }
+
+    return false;
+}
+
+/*!
+ * Public slot
+ */
+void RadioHistoryModel::resetCurrentSong()
+{
+    Q_D( RadioHistoryModel );
+    d->mTopItemIsPlaying = false;
+    emit currentSongReset();
+}
+
+/*!
+ * Public slot
+ */
+void RadioHistoryModel::setFavorite()
+{
+    Q_D( RadioHistoryModel );
+    RadioHistoryItem item = d->mItems.first();
+    item.setFavorite();
+    updateItem( 0, item );
+}
+
+/*!
+ * Public slot
+ */
+void RadioHistoryModel::removeAll()
+{
+    Q_D( RadioHistoryModel );
+
+    beginRemoveRows( QModelIndex(), 0, rowCount() - 1 );
+
+    d->mItems.clear();
+
+    endRemoveRows();
+}
+
+/*!
+ *
+ */
+bool RadioHistoryModel::isCurrentSongRecognized() const
+{
+    Q_D( const RadioHistoryModel );
+    return d->mTopItemIsPlaying;
+}
+
+/*!
+ *
+ */
+void RadioHistoryModel::setShowDetails( bool showDetails )
+{
+    Q_D( RadioHistoryModel );
+    d->mShowDetails = showDetails;
+    reset();
+}
+
+/*!
+ *
+ */
+void RadioHistoryModel::addItem( const QString& artist, const QString& title, const RadioStation& station )
+{
+    Q_D( RadioHistoryModel );
+
+    RadioHistoryItem item;
+    const int itemIndex = findItem( artist, title, item );
+    if ( itemIndex != -1 ) {
+        item.increasePlayCount();
+        updateItem( itemIndex, item, true );
+    } else {
+        item.setArtist( artist );
+        item.setTitle( title );
+        item.setStation( station.name() );
+        item.setFrequency( station.frequency() );
+        item.setCurrentTime();
+
+        beginInsertRows( QModelIndex(), 0, 0 );
+
+        d->mItems.prepend( item );
+
+        endInsertRows();
+    }
+
+    d->mTopItemIsPlaying = true;
+    emit itemAdded();
+}
+
+/*!
+ *
+ */
+void RadioHistoryModel::clearRadioTextPlus()
+{
+    Q_D( RadioHistoryModel );
+    d->mRtItemHolder = "";
+    resetCurrentSong();
+}
+
+/*!
+ *
+ */
+void RadioHistoryModel::addRadioTextPlus( int rtClass, const QString& rtItem, const RadioStation& station )
+{
+    if ( rtClass == RtPlus::Artist || rtClass == RtPlus::Title ) {
+        Q_D( RadioHistoryModel );
+        if ( d->mRtItemHolder.isEmpty() ) {
+            d->mRtItemHolder = rtItem;
+        } else {
+            if ( rtClass == RtPlus::Title ) {
+                addItem( d->mRtItemHolder, rtItem, station );
+            } else {
+                addItem( rtItem, d->mRtItemHolder, station );
+            }
+            d->mRtItemHolder = "";
+        }
+    }
+}
+
+/*!
+ *
+ */
+int RadioHistoryModel::findItem( const QString& artist, const QString& title, RadioHistoryItem& item )
+{
+    Q_D( RadioHistoryModel );
+    const int itemCount = d->mItems.count();
+    for ( int i = 0; i < itemCount; ++i ) {
+        RadioHistoryItem existingItem = d->mItems.at( i );
+        if ( existingItem.artist().compare( artist ) == 0
+             && existingItem.title().compare( title ) == 0 ) {
+            item = existingItem;
+            return i;
+        }
+    }
+
+    return -1;
+}
+
+/*!
+ *
+ */
+void RadioHistoryModel::updateItem( int index, const RadioHistoryItem& item, bool prepend )
+{
+    Q_D( RadioHistoryModel );
+    d->mItems.removeAt( index );
+
+    if ( prepend ) {
+        d->mItems.prepend( item );
+    } else {
+        d->mItems.insert( index, item );
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiouiengine/src/radiohistorymodel_p.cpp	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,40 @@
+/*
+* 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 "radiohistorymodel_p.h"
+#include "radiohistoryitem.h"
+
+/*!
+ *
+ */
+RadioHistoryModelPrivate::RadioHistoryModelPrivate( RadioHistoryModel* model,
+                                                    RadioUiEngine& uiEngine ) :
+    q_ptr( model ),
+    mUiEngine( uiEngine ),
+    mTopItemIsPlaying( false ),
+    mShowDetails( false )
+{
+
+}
+
+/*!
+ *
+ */
+RadioHistoryModelPrivate::~RadioHistoryModelPrivate()
+{
+
+}
--- a/radioapp/radiouiengine/src/radiomonitorservice.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiouiengine/src/radiomonitorservice.cpp	Mon May 03 12:31:41 2010 +0300
@@ -18,15 +18,24 @@
 // User includes
 #include "radiomonitorservice.h"
 #include "radiouiengine.h"
-#include "radioserviceconst.h"
+#include "radiostationmodel.h"
+#include "radiostation.h"
+#include "radioservicedef.h"
+#include "radionotificationdata.h"
+
+#define RUN_NOTIFY( type, data ) \
+    do { \
+        QVariant variant; \
+        variant.setValue( RadioNotificationData( RadioServiceNotification::type, data ) ); \
+        notify( variant ); \
+    } while ( 0 )
 
 /*!
  *
  */
 RadioMonitorService::RadioMonitorService( RadioUiEngine& engine ) :
     XQServiceProvider( RADIO_MONITOR_SERVICE, &engine ),
-    mUiEngine( engine ),
-    mRequestIndex( 0 )
+    mUiEngine( engine )
 {
     publishAll();
 }
@@ -41,9 +50,41 @@
 /*!
  *
  */
+void RadioMonitorService::notifyFavoriteCount( const int favoriteCount )
+{
+    RUN_NOTIFY( FavoriteCount, favoriteCount );
+}
+
+/*!
+ *
+ */
+void RadioMonitorService::notifyAntennaStatus( bool connected )
+{
+    RUN_NOTIFY( AntennaConnected, connected );
+}
+
+/*!
+ *
+ */
+void RadioMonitorService::notifyRadioStatus( RadioStatus::Status radioStatus )
+{
+    RUN_NOTIFY( RadioStatus, radioStatus );
+}
+
+/*!
+ *
+ */
+void RadioMonitorService::notifyFrequency( const uint frequency )
+{
+    RUN_NOTIFY( Frequency, frequency );
+}
+
+/*!
+ *
+ */
 void RadioMonitorService::notifyName( const QString& name )
 {
-    notify( RadioServiceNotification::Name, name );
+    RUN_NOTIFY( Name, name );
 }
 
 /*!
@@ -51,7 +92,7 @@
  */
 void RadioMonitorService::notifyGenre( const QString& genre )
 {
-    notify( RadioServiceNotification::Genre, genre );
+    RUN_NOTIFY( Genre, genre );
 }
 
 /*!
@@ -59,15 +100,15 @@
  */
 void RadioMonitorService::notifyRadioText( const QString& radioText )
 {
-    notify( RadioServiceNotification::RadioText, radioText );
+    RUN_NOTIFY( RadioText, radioText );
 }
 
 /*!
  *
  */
-void RadioMonitorService::notifyHomepage( const QString& homepage )
+void RadioMonitorService::notifyHomePage( const QString& homePage )
 {
-    notify( RadioServiceNotification::Homepage, homepage );
+    RUN_NOTIFY( HomePage, homePage );
 }
 
 /*!
@@ -75,7 +116,7 @@
  */
 void RadioMonitorService::notifySong( const QString& song )
 {
-    notify( RadioServiceNotification::Song, song );
+    RUN_NOTIFY( Song, song );
 }
 
 /*!
@@ -84,16 +125,72 @@
  */
 void RadioMonitorService::requestNotifications()
 {
-    mRequestIndex = setCurrentRequestAsync();
+    mRequestIndexes.append( setCurrentRequestAsync() );
+}
+
+/*!
+ * Public slot
+ *
+ */
+void RadioMonitorService::requestAllData()
+{
+    const RadioStation station = mUiEngine.model().currentStation();
+
+    QVariantList notificationList;
+
+    QVariant notification;
+    notification.setValue( RadioNotificationData( RadioServiceNotification::FavoriteCount, mUiEngine.model().favoriteCount() ) );
+    notificationList.append( notification );
+
+    notification.setValue( RadioNotificationData( RadioServiceNotification::Frequency, station.frequency() ) );
+    notificationList.append( notification );
+
+    if ( !station.name().isEmpty() ) {
+        notification.setValue( RadioNotificationData( RadioServiceNotification::Name, station.name() ) );
+        notificationList.append( notification );
+    }
+
+    if ( station.genre() > 0 ) {
+        notification.setValue( RadioNotificationData( RadioServiceNotification::Genre, mUiEngine.genreToString( station.genre(), GenreTarget::HomeScreen ) ) );
+        notificationList.append( notification );
+    }
+
+    if ( !station.radioText().isEmpty() ) {
+        notification.setValue( RadioNotificationData( RadioServiceNotification::RadioText, station.radioText() ) );
+        notificationList.append( notification );
+    }
+
+    if ( !station.url().isEmpty() ) {
+        notification.setValue( RadioNotificationData( RadioServiceNotification::HomePage, station.url() ) );
+        notificationList.append( notification );
+    }
+
+    //TODO: To be implemented
+//    notification.setValue( RadioNotificationData( RadioServiceNotification::Song,  ) );
+//    notificationList.append( notification );
+
+    completeRequest( setCurrentRequestAsync(), notificationList );
 }
 
 /*!
  *
  */
-void RadioMonitorService::notify( int notificationId, const QString& message )
+void RadioMonitorService::notify( const QVariant& notification )
 {
-    if ( mRequestIndex > 0 ) {
-        completeRequest( mRequestIndex, QString( "%1 %2" ).arg( notificationId ).arg( message ) );
-        mRequestIndex = 0;
+    QVariantList list;
+    list.append( notification );
+    notifyList( list );
+}
+
+/*!
+ *
+ */
+void RadioMonitorService::notifyList( const QVariantList& list )
+{
+    if ( mRequestIndexes.count() > 0 ) {
+        foreach ( int requestIndex, mRequestIndexes ) {
+            completeRequest( requestIndex, list );
+        }
+        mRequestIndexes.clear();
     }
 }
--- a/radioapp/radiouiengine/src/radiomonitorservice_win32.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiouiengine/src/radiomonitorservice_win32.cpp	Mon May 03 12:31:41 2010 +0300
@@ -18,7 +18,7 @@
 // User includes
 #include "radiomonitorservice_win32.h"
 #include "radiouiengine.h"
-#include "radioserviceconst.h"
+#include "radioservicedef.h"
 
 /*!
  *
@@ -39,6 +39,38 @@
 /*!
  *
  */
+void RadioMonitorService::notifyFavoriteCount( const int favoriteCount )
+{
+    Q_UNUSED( favoriteCount )
+}
+
+/*!
+ *
+ */
+void RadioMonitorService::notifyAntennaStatus( bool connected )
+{
+    Q_UNUSED( connected )
+}
+
+/*!
+ *
+ */
+void RadioMonitorService::notifyRadioStatus( RadioStatus::Status radioStatus )
+{
+    Q_UNUSED( radioStatus )
+}
+
+/*!
+ *
+ */
+void RadioMonitorService::notifyFrequency( const uint frequency )
+{
+    Q_UNUSED( frequency )
+}
+
+/*!
+ *
+ */
 void RadioMonitorService::notifyName( const QString& name )
 {
     Q_UNUSED( name )
@@ -63,9 +95,9 @@
 /*!
  *
  */
-void RadioMonitorService::notifyHomepage( const QString& homepage )
+void RadioMonitorService::notifyHomePage( const QString& homePage )
 {
-    Q_UNUSED( homepage )
+    Q_UNUSED( homePage )
 }
 
 /*!
--- a/radioapp/radiouiengine/src/radioplaylogitem.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,236 +0,0 @@
-/*
-* 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:
-*
-*/
-
-// User includes
-#include "radioplaylogitem.h"
-#include "radioplaylogitem_p.h"
-
-/**
- * Static shared data instance that is used by all default-constructed RadioStation instances
- */
-Q_GLOBAL_STATIC( RadioPlayLogItemPrivate, shared_null )
-
-
-/*!
- *
- */
-RadioPlayLogItem::RadioPlayLogItem() :
-    QObject( 0 )
-{
-    mData = shared_null();
-    mData->ref.ref();
-}
-
-/*!
- *
- */
-RadioPlayLogItem::RadioPlayLogItem( const QString& artist, const QString& title ) :
-    QObject( 0 )
-{
-    mData = new RadioPlayLogItemPrivate( artist, title );
-}
-
-/*!
- *
- */
-RadioPlayLogItem::RadioPlayLogItem( const RadioPlayLogItem& other ) :
-    QObject( 0 )
-{
-    mData = other.mData;
-    mData->ref.ref();
-}
-
-/*!
- *
- */
-RadioPlayLogItem::~RadioPlayLogItem()
-{
-    decrementReferenceCount();
-}
-
-/*!
- *
- */
-RadioPlayLogItem& RadioPlayLogItem::operator=( const RadioPlayLogItem& other )
-{
-    qAtomicAssign( mData, other.mData );
-    return *this;
-}
-
-/*!
- *
- */
-QString RadioPlayLogItem::artist() const
-{
-    return mData->mArtist;
-}
-
-/*!
- *
- */
-void RadioPlayLogItem::setArtist( const QString& artist )
-{
-    if ( artist.compare( mData->mArtist ) != 0 ) {
-        detach();
-        mData->mArtist = artist;
-    }
-}
-
-/*!
- *
- */
-QString RadioPlayLogItem::title() const
-{
-    return mData->mTitle;
-}
-
-/*!
- *
- */
-void RadioPlayLogItem::setTitle( const QString& title )
-{
-    if ( title.compare( mData->mTitle ) != 0 ) {
-        detach();
-        mData->mTitle = title;
-    }
-}
-
-/*!
- *
- */
-QString RadioPlayLogItem::station() const
-{
-    return mData->mStation;
-}
-
-/*!
- *
- */
-void RadioPlayLogItem::setStation( const QString& station )
-{
-    if ( station.compare( mData->mStation ) != 0 ) {
-        detach();
-        mData->mStation = station;
-    }
-}
-
-/*!
- *
- */
-uint RadioPlayLogItem::frequency() const
-{
-    return mData->mFrequency;
-}
-
-/*!
- *
- */
-void RadioPlayLogItem::setFrequency( uint frequency )
-{
-    if ( frequency != mData->mFrequency ) {
-        detach();
-        mData->mFrequency = frequency;
-    }
-}
-
-/*!
- *
- */
-QString RadioPlayLogItem::time() const
-{
-    return mData->mTime.toString();
-}
-
-/*!
- *
- */
-void RadioPlayLogItem::setCurrentTime()
-{
-    detach();
-    mData->mTime.currentDateTime();
-}
-
-
-/*!
- *
- */
-bool RadioPlayLogItem::isFavorite() const
-{
-    return mData->mFavorite;
-}
-
-/*!
- *
- */
-void RadioPlayLogItem::setFavorite()
-{
-    if ( !mData->mFavorite ) {
-        detach();
-        mData->mFavorite = true;
-    }
-}
-
-/*!
- *
- */
-void RadioPlayLogItem::increasePlayCount()
-{
-    detach();
-    ++mData->mPlayCount;
-}
-
-/*!
- *
- */
-int RadioPlayLogItem::playCount() const
-{
-    return mData->mPlayCount;
-}
-
-/**
- * Decrements the reference count of the implicitly shared data.
- */
-void RadioPlayLogItem::decrementReferenceCount()
-{
-    if ( !mData->ref.deref() ) {
-        delete mData;
-        mData = 0;
-    }
-}
-
-/**
- * Detach from the implicitly shared data
- */
-void RadioPlayLogItem::detach()
-{
-    if ( !isDetached() ) {
-        RadioPlayLogItemPrivate* newData = new RadioPlayLogItemPrivate( *mData );
-
-        decrementReferenceCount();
-
-        newData->ref = 1;
-        mData = newData;
-    }
-}
-
-/**
- * Checks if the class is detached from implicitly shared data
- */
-bool RadioPlayLogItem::isDetached() const
-{
-    return mData->ref == 1;
-}
--- a/radioapp/radiouiengine/src/radioplaylogitem_p.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
-* 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 "radioplaylogitem.h"
-#include "radioplaylogitem_p.h"
-
-/*!
- *
- */
-RadioPlayLogItemPrivate::RadioPlayLogItemPrivate()
-{
-    init( "", "" );
-}
-
-/*!
- *
- */
-RadioPlayLogItemPrivate::RadioPlayLogItemPrivate( const QString& artist,
-                                                  const QString& title )
-{
-    init( artist, title );
-}
-
-/*!
- *
- */
-void RadioPlayLogItemPrivate::init( const QString& artist, const QString& title )
-{
-    ref = 1;
-    mArtist = artist;
-    mTitle = title;
-    mFrequency = 0;
-    mFavorite = false;
-    mPlayCount = 1;
-}
--- a/radioapp/radiouiengine/src/radioplaylogmodel.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,268 +0,0 @@
-/*
-* 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:
-*
-*/
-
-// System includes
-#include <QStringList>
-
-// User includes
-#include "radioplaylogmodel.h"
-#include "radioplaylogmodel_p.h"
-#include "radiouiengine.h"
-#include "radioplaylogitem.h"
-#include "radiostation.h"
-#include "radiouiengine.h"
-#include "radio_global.h"
-#include "radiologger.h"
-
-/*!
- *
- */
-RadioPlayLogModel::RadioPlayLogModel( RadioUiEngine& uiEngine ) :
-    QAbstractListModel( &uiEngine ),
-    d_ptr( new RadioPlayLogModelPrivate( this, uiEngine ) )
-{
-    connectAndTest( &uiEngine,  SIGNAL(tunedToFrequency(uint,int)),
-                    this,       SLOT(resetCurrentSong()) );
-    connectAndTest( &uiEngine,  SIGNAL(seekingStarted(int)),
-                    this,       SLOT(resetCurrentSong()) );
-}
-
-/*!
- *
- */
-RadioPlayLogModel::~RadioPlayLogModel()
-{
-    Q_D( RadioPlayLogModel );
-    d->mItems.clear();
-}
-
-/*!
- * \reimp
- */
-Qt::ItemFlags RadioPlayLogModel::flags ( const QModelIndex& index ) const
-{
-    Qt::ItemFlags flags = QAbstractListModel::flags( index );
-    flags |= Qt::ItemIsEditable;
-    return flags;
-}
-
-/*!
- * \reimp
- */
-int RadioPlayLogModel::rowCount( const QModelIndex& parent ) const
-{
-    Q_UNUSED( parent );
-    Q_D( const RadioPlayLogModel );
-    return d->mItems.count();
-}
-
-/*!
- * \reimp
- */
-QVariant RadioPlayLogModel::data( const QModelIndex& index, int role ) const
-{
-    if ( !index.isValid() ) {
-        return QVariant();
-    }
-
-    Q_D( const RadioPlayLogModel );
-    if ( role == Qt::DisplayRole ) {
-        RadioPlayLogItem item = d->mItems.at( index.row() );
-
-        QStringList list;
-        if ( d->mShowDetails ) {
-            list.append( item.artist() + " - " + item.title() );
-            list.append( item.time() + " " + item.station() + " " + RadioUiEngine::parseFrequency( item.frequency() ) );
-        } else {
-            list.append( item.artist() );
-            list.append( item.title() );
-        }
-
-        return list;
-    }
-
-    return QVariant();
-}
-
-/*!
- * \reimp
- */
-bool RadioPlayLogModel::setData( const QModelIndex& index, const QVariant& value, int role )
-{
-    Q_UNUSED( value );
-    if ( !index.isValid() ) {
-        return false;
-    }
-
-    if ( role == RadioPlayLogModel::SetFavoriteRole ) {
-        Q_D( RadioPlayLogModel );
-        RadioPlayLogItem item = d->mItems.at( index.row() );
-        item.setFavorite();
-        updateItem( index.row(), item );
-        return true;
-    }
-
-    return false;
-}
-
-/*!
- * Public slot
- */
-void RadioPlayLogModel::resetCurrentSong()
-{
-    Q_D( RadioPlayLogModel );
-    d->mTopItemIsPlaying = false;
-    emit currentSongReset();
-}
-
-/*!
- * Public slot
- */
-void RadioPlayLogModel::setFavorite()
-{
-    Q_D( RadioPlayLogModel );
-    RadioPlayLogItem item = d->mItems.first();
-    item.setFavorite();
-    updateItem( 0, item );
-}
-
-/*!
- * Public slot
- */
-void RadioPlayLogModel::removeAll()
-{
-    Q_D( RadioPlayLogModel );
-
-    beginRemoveRows( QModelIndex(), 0, rowCount() - 1 );
-
-    d->mItems.clear();
-
-    endRemoveRows();
-}
-
-/*!
- *
- */
-bool RadioPlayLogModel::isCurrentSongRecognized() const
-{
-    Q_D( const RadioPlayLogModel );
-    return d->mTopItemIsPlaying;
-}
-
-/*!
- *
- */
-void RadioPlayLogModel::setShowDetails( bool showDetails )
-{
-    Q_D( RadioPlayLogModel );
-    d->mShowDetails = showDetails;
-    reset();
-}
-
-/*!
- *
- */
-void RadioPlayLogModel::addItem( const QString& artist, const QString& title, const RadioStation& station )
-{
-    Q_D( RadioPlayLogModel );
-
-    RadioPlayLogItem item;
-    const int itemIndex = findItem( artist, title, item );
-    if ( itemIndex != -1 ) {
-        item.increasePlayCount();
-        updateItem( itemIndex, item, true );
-    } else {
-        item.setArtist( artist );
-        item.setTitle( title );
-        item.setStation( station.name() );
-        item.setFrequency( station.frequency() );
-        item.setCurrentTime();
-
-        beginInsertRows( QModelIndex(), 0, 0 );
-
-        d->mItems.prepend( item );
-
-        endInsertRows();
-    }
-
-    d->mTopItemIsPlaying = true;
-    emit itemAdded();
-}
-
-/*!
- *
- */
-void RadioPlayLogModel::clearRadioTextPlus()
-{
-    Q_D( RadioPlayLogModel );
-    d->mRtItemHolder = "";
-    resetCurrentSong();
-}
-
-/*!
- *
- */
-void RadioPlayLogModel::addRadioTextPlus( int rtClass, const QString& rtItem, const RadioStation& station )
-{
-    if ( rtClass == RtPlus::Artist || rtClass == RtPlus::Title ) {
-        Q_D( RadioPlayLogModel );
-        if ( d->mRtItemHolder.isEmpty() ) {
-            d->mRtItemHolder = rtItem;
-        } else {
-            if ( rtClass == RtPlus::Title ) {
-                addItem( d->mRtItemHolder, rtItem, station );
-            } else {
-                addItem( rtItem, d->mRtItemHolder, station );
-            }
-            d->mRtItemHolder = "";
-        }
-    }
-}
-
-/*!
- *
- */
-int RadioPlayLogModel::findItem( const QString& artist, const QString& title, RadioPlayLogItem& item )
-{
-    Q_D( RadioPlayLogModel );
-    const int itemCount = d->mItems.count();
-    for ( int i = 0; i < itemCount; ++i ) {
-        RadioPlayLogItem existingItem = d->mItems.at( i );
-        if ( existingItem.artist().compare( artist ) == 0
-             && existingItem.title().compare( title ) == 0 ) {
-            item = existingItem;
-            return i;
-        }
-    }
-
-    return -1;
-}
-
-/*!
- *
- */
-void RadioPlayLogModel::updateItem( int index, const RadioPlayLogItem& item, bool prepend )
-{
-    Q_D( RadioPlayLogModel );
-    d->mItems.removeAt( index );
-
-    if ( prepend ) {
-        d->mItems.prepend( item );
-    } else {
-        d->mItems.insert( index, item );
-    }
-}
--- a/radioapp/radiouiengine/src/radioplaylogmodel_p.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*
-* 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 "radioplaylogmodel_p.h"
-#include "radioplaylogitem.h"
-
-/*!
- *
- */
-RadioPlayLogModelPrivate::RadioPlayLogModelPrivate( RadioPlayLogModel* model,
-                                                    RadioUiEngine& uiEngine ) :
-    q_ptr( model ),
-    mUiEngine( uiEngine ),
-    mTopItemIsPlaying( false ),
-    mShowDetails( false )
-{
-
-}
-
-/*!
- *
- */
-RadioPlayLogModelPrivate::~RadioPlayLogModelPrivate()
-{
-
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiouiengine/src/radioscannerengine.cpp	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,119 @@
+/*
+* 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:
+*
+*/
+
+// System includes
+#include <QTimer>
+
+// User includes
+#include "radioscannerengine.h"
+#include "radioscannerengine_p.h"
+#include "radiouiengine.h"
+#include "radiouiengine_p.h"
+#include "radioenginewrapper.h"
+#include "radiostationhandlerif.h"
+#include "radiostationmodel.h"
+#include "radiostation.h"
+
+/*!
+ *
+ */
+RadioScannerEngine::RadioScannerEngine( RadioUiEnginePrivate& uiEngine ) :
+    QObject( &uiEngine.api() ),
+    d_ptr( new RadioScannerEnginePrivate( this, uiEngine ) )
+{
+}
+
+/*!
+ *
+ */
+RadioScannerEngine::~RadioScannerEngine()
+{
+    cancel();
+    Q_D( RadioScannerEngine );
+    if ( d->mMutedByScanner ) {
+        d->mUiEngine.api().toggleMute();
+    }
+    delete d_ptr;
+}
+
+/*!
+ * Starts the scanning from minimum frequency
+ */
+void RadioScannerEngine::startScanning()
+{
+    cancel();
+    Q_D( RadioScannerEngine );
+    if ( !d->mUiEngine.api().isMuted() ) {
+        d->mUiEngine.api().toggleMute();
+        d->mMutedByScanner = true;
+    }
+
+    d->mUiEngine.api().model().stationHandlerIf().removeLocalStations();
+    d->mLastFoundFrequency = d->mUiEngine.api().minFrequency();
+    d->mUiEngine.wrapper().tuneFrequency( d->mLastFoundFrequency, TuneReason::StationScanInitialization );
+}
+
+/*!
+ * Continues the scanning upwards from current frequency
+ */
+void RadioScannerEngine::continueScanning()
+{
+    Q_D( RadioScannerEngine );
+    d->mUiEngine.wrapper().startSeeking( Seeking::Up, TuneReason::StationScan );
+}
+
+/*!
+ * Cancels the scanning process
+ */
+void RadioScannerEngine::cancel()
+{
+    Q_D( RadioScannerEngine );
+    if ( d->mUiEngine.api().isScanning() ) {
+        d->mUiEngine.cancelSeeking();
+    }
+    if ( d->mMutedByScanner ) {
+        d->mUiEngine.api().toggleMute();
+        d->mMutedByScanner = false;
+    }
+}
+
+/*!
+ * Adds a new station that was found
+ */
+void RadioScannerEngine::addScannedFrequency( const uint frequency )
+{
+    Q_D( RadioScannerEngine );
+    if ( frequency > d->mLastFoundFrequency ) {
+        // Station has been found normally
+        d->mLastFoundFrequency = frequency;
+        d->addFrequencyAndReport( frequency );
+    } else if ( frequency == d->mUiEngine.api().minFrequency() ) {
+        // Special case. A station has been found in the mininmum frequency
+        d->addFrequencyAndReport( frequency );
+    } else {
+        // Seeking looped around the frequency band. Send invalid station as indicator that the scanning should stop
+        emit stationFound( RadioStation() );
+    }
+}
+
+/*!
+ *
+ */
+void RadioScannerEngine::emitStationFound( const RadioStation& station )
+{
+    emit stationFound( station );
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiouiengine/src/radioscannerengine_p.cpp	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,86 @@
+/*
+* 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 "radioscannerengine_p.h"
+#include "radioscannerengine.h"
+#include "radiouiengine_p.h"
+#include "radiouiengine.h"
+#include "radiostationhandlerif.h"
+#include "radioenginewrapper.h"
+#include "radiostation.h"
+#include "radiostationmodel.h"
+
+/*!
+ *
+ * @param scanner
+ * @param uiEngine
+ * @return
+ */
+RadioScannerEnginePrivate::RadioScannerEnginePrivate( RadioScannerEngine* scanner, RadioUiEnginePrivate& uiEngine ) :
+    q_ptr( scanner ),
+    mUiEngine( uiEngine ),
+    mLastFoundFrequency( 0 ),
+    mMutedByScanner( false )
+{
+    mUiEngine.wrapper().addObserver( this );
+}
+
+/*!
+ *
+ * @return
+ */
+RadioScannerEnginePrivate::~RadioScannerEnginePrivate()
+{
+    mUiEngine.wrapper().removeObserver( this );
+}
+
+/*!
+ * \reimp
+ */
+void RadioScannerEnginePrivate::tunedToFrequency( uint frequency, int reason )
+{
+    Q_Q( RadioScannerEngine );
+    if ( reason == TuneReason::StationScanInitialization ) {
+        mUiEngine.wrapper().startSeeking( Seeking::Up, TuneReason::StationScan );
+    } else if ( reason == TuneReason::StationScan ) {
+        if ( frequency > mLastFoundFrequency ) {
+            // Station has been found normally
+            mLastFoundFrequency = frequency;
+            addFrequencyAndReport( frequency );
+        } else if ( frequency == mUiEngine.api().minFrequency() ) {
+            // Special case. A station has been found in the mininmum frequency
+            addFrequencyAndReport( frequency );
+        } else {
+            // Seeking looped around the frequency band. Send invalid station as indicator that the scanning should stop
+            q->emitStationFound( RadioStation() );
+        }
+    }
+
+}
+
+/*!
+ *
+ */
+void RadioScannerEnginePrivate::addFrequencyAndReport( const uint frequency )
+{
+    mUiEngine.api().model().stationHandlerIf().addScannedFrequency( frequency );
+    RadioStation station;
+    mUiEngine.api().model().findFrequency( frequency, station );
+    Q_Q( RadioScannerEngine );
+    q->emitStationFound( station );
+}
+
--- a/radioapp/radiouiengine/src/radiostation.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiouiengine/src/radiostation.cpp	Mon May 03 12:31:41 2010 +0300
@@ -67,7 +67,7 @@
 QString RadioStation::parseFrequency( uint frequency )
 {
     QString freqString;
-    freqString.sprintf( "%.2f", qreal( frequency ) / KFrequencyMultiplier );
+    freqString.sprintf( "%.1f", qreal( frequency ) / KFrequencyMultiplier );
     return freqString;
 }
 
@@ -169,7 +169,7 @@
 {
     // Name emptiness is checked because this name setter is used by incoming RDS PS name
     // and empty names should be ignored
-    if ( !name.isEmpty() && mData->mName.compare( name ) != 0 ) {
+    if ( !name.isEmpty() && !mData->mRenamedByUser && mData->mName.compare( name ) != 0 ) {
         detach();
         mData->mName = name.trimmed();
         mData->mChangeFlags |= RadioStation::PersistentDataChanged | RadioStation::NameChanged;
@@ -347,7 +347,7 @@
  */
 QString RadioStation::name() const
 {
-    return mData->mName;
+    return mData->mName.isEmpty() ? "" : mData->mName;
 }
 
 /*!
--- a/radioapp/radiouiengine/src/radiostationmodel.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiouiengine/src/radiostationmodel.cpp	Mon May 03 12:31:41 2010 +0300
@@ -23,6 +23,7 @@
 #include "radiopresetstorage.h"
 #include "radioenginewrapper.h"
 #include "radiouiengine.h"
+#include "radiouiengine_p.h"
 #include "radiostation.h"
 #include "radiostation_p.h"
 #ifndef BUILD_WIN32
@@ -38,7 +39,8 @@
 static QString parseLine( const RadioStation& station )
 {
     QString line = "";
-    line.append( RadioUiEngine::parseFrequency( station.frequency() ) );
+    const QString parsedFrequency = qtTrId( "txt_rad_dblist_l1_mhz" ).arg( RadioStation::parseFrequency( station.frequency() ) );
+    line.append( parsedFrequency );
 
     QString name = station.name();
     if ( !name.isEmpty() )
@@ -54,8 +56,8 @@
 /*!
  *
  */
-RadioStationModel::RadioStationModel( RadioUiEngine& uiEngine ) :
-    QAbstractListModel( &uiEngine ),
+RadioStationModel::RadioStationModel( RadioUiEnginePrivate& uiEngine ) :
+    QAbstractListModel( &uiEngine.api() ),
     d_ptr( new RadioStationModelPrivate( this, uiEngine ) )
 {
 }
@@ -65,6 +67,7 @@
  */
 RadioStationModel::~RadioStationModel()
 {
+    delete d_ptr;
 }
 
 /*!
@@ -106,7 +109,7 @@
             list.append( firstLine );
             QString genre = " "; // Empty space so that the listbox generates the second row
             if ( station.genre() != -1 ) {
-                genre = d->mUiEngine.genreToString( station.genre() );
+                genre = d->mUiEngine.api().genreToString( station.genre(), GenreTarget::StationsList );
             }
             list.append( genre );
 
@@ -159,13 +162,13 @@
 }
 
 /*!
- * Called by the wrapper to initialize the list with given amount of presets
+ * Called by the engine to initialize the list with given amount of presets
  */
-void RadioStationModel::initialize( RadioPresetStorage* storage, RadioEngineWrapper* engine )
+void RadioStationModel::initialize( RadioPresetStorage* storage, RadioEngineWrapper* wrapper )
 {
     Q_D( RadioStationModel );
     d->mPresetStorage = storage;
-    d->mEngine = engine;
+    d->mWrapper = wrapper;
     const int presetCount = d->mPresetStorage->presetCount();
     int index = d->mPresetStorage->firstPreset();
     LOG_FORMAT( "RadioStationModelPrivate::initialize: presetCount: %d, firstIndex: %d", presetCount, index );
@@ -189,13 +192,15 @@
                 d->mStations.insert( station.frequency(), station );
                 }
         }
-        ++index;
+
 #ifdef COMPILE_WITH_NEW_PRESET_UTILITY
         index = d->mPresetStorage->nextPreset( index );
 #endif
     }
 
-    d->setCurrentStation( d->mEngine->currentFrequency() );
+    d->setCurrentStation( d->mWrapper->currentFrequency() );
+
+    wrapper->addObserver( d );
 }
 
 /*!
@@ -255,6 +260,21 @@
 }
 
 /*!
+ * Finds number of favorite stations
+ */
+int RadioStationModel::favoriteCount()
+{
+    Q_D( const RadioStationModel );
+    int count = 0;
+    foreach( const RadioStation& tempStation, d->mStations ) {
+        if ( tempStation.isFavorite() ) {
+            ++count;
+        }
+    }
+    return count;
+}
+
+/*!
  * Finds a station by preset index
  */
 int RadioStationModel::findPresetIndex( int presetIndex )
@@ -334,10 +354,14 @@
 
         endRemoveRows();
 
-        d->setCurrentStation( d->mEngine->currentFrequency() );
+        d->mCurrentStation = NULL;
+        d->setCurrentStation( d->mWrapper->currentFrequency() );
 
         emit stationRemoved( tempStation );
 
+        if ( tempStation.isFavorite() ) {
+            d->mUiEngine.api().monitor().notifyFavoriteCount( favoriteCount() );
+        }
     }
 }
 
@@ -356,34 +380,35 @@
 
     // We have to call beginInsertRows() BEFORE the addition is actually done so we must figure out where
     // the new station will go in the sorted frequency order
-//    int row = 0;
-//    const int count = rowCount();
-//    if ( count > 1 ) {
-//        Stations::const_iterator iter = d->mStations.upperBound( newStation.frequency() );
-//        uint iterFreq = iter.key();
-//        if ( d->mStations.contains( iter.key() ) ) {
-//            row = d->mStations.keys().indexOf( iter.key() );
-//        } else {
-//            row = count;
-//        }
-//    } else if ( count == 1 ) {
-//        uint existingFreq = d->mStations.keys().first();
-//        if ( station.frequency() > existingFreq ) {
-//            row = 1;
-//        }
-//    }
-//
-    emit layoutAboutToBeChanged();
-//    beginInsertRows( QModelIndex(), row, row );
+    int row = 0;
+    const int count = rowCount();
+    if ( count > 1 ) {
+        Stations::const_iterator iter = d->mStations.upperBound( newStation.frequency() );
+        uint iterFreq = iter.key();
+        if ( d->mStations.contains( iter.key() ) ) {
+            row = d->mStations.keys().indexOf( iter.key() );
+        } else {
+            row = count;
+        }
+    } else if ( count == 1 ) {
+        uint existingFreq = d->mStations.keys().first();
+        if ( station.frequency() > existingFreq ) {
+            row = 1;
+        }
+    }
+
+//    emit layoutAboutToBeChanged();
+    beginInsertRows( QModelIndex(), row, row );
     // We must add the station here because saveStation() will only update an existing station
-    d->mStations.insert( newStation.frequency(), newStation );
+//    d->mStations.insert( newStation.frequency(), newStation );
+
+    d->doSaveStation( newStation );
 
-    saveStation( newStation );
-    d->setCurrentStation( d->mEngine->currentFrequency() );
+    d->setCurrentStation( d->mWrapper->currentFrequency() );
 
-//    endInsertRows();
+    endInsertRows();
 
-    emit layoutChanged();
+//    emit layoutChanged();
     emit stationAdded( station );
 }
 
@@ -403,12 +428,7 @@
 
     } else if ( station.isValid() && stationHasChanged && d->mStations.contains( station.frequency() )) {
 
-        d->mStations.insert( station.frequency(), station );
-
-        if ( changeFlags.testFlag( RadioStation::PersistentDataChanged ) ) {
-            const bool success = d->mPresetStorage->savePreset( *station.data_ptr() );
-            RADIO_ASSERT( success, "RadioStationModelPrivate::saveStation", "Failed to add station" );
-        }
+        d->doSaveStation( station, changeFlags.testFlag( RadioStation::PersistentDataChanged ) );
 
         emitChangeSignals( station, changeFlags );
     }
@@ -421,20 +441,15 @@
 void RadioStationModel::setFavoriteByFrequency( uint frequency, bool favorite )
 {
     Q_D( RadioStationModel );
-    if ( d->mEngine->isFrequencyValid( frequency ) )
-    {
+    if ( d->mWrapper->isFrequencyValid( frequency ) ) {
         LOG_FORMAT( "RadioStationModelPrivate::setFavoriteByFrequency, frequency: %d", frequency );
         RadioStation station;
-        if ( findFrequency( frequency, station ) )  // Update existing preset
-        {
-            if ( station.isFavorite() != favorite )
-            {
+        if ( findFrequency( frequency, station ) ) { // Update existing preset
+            if ( station.isFavorite() != favorite ) {
                 station.setFavorite( favorite );
                 saveStation( station );
             }
-        }
-        else if ( favorite )                    // Add new preset if setting as favorite
-        {
+        } else if ( favorite ) {                    // Add new preset if setting as favorite
             RadioStation newStation;
             if ( d->mCurrentStation->frequency() == frequency ) {
                 newStation = *d->mCurrentStation;
@@ -455,6 +470,9 @@
             addStation( newStation );
             d->setCurrentStation( frequency );
         }
+
+        Q_D( RadioStationModel );
+        d->mUiEngine.api().monitor().notifyFavoriteCount( favoriteCount() );
     }
 }
 
@@ -465,10 +483,12 @@
 {
     LOG_FORMAT( "RadioStationModelPrivate::setFavoriteByPreset, presetIndex: %d", presetIndex );
     RadioStation station;
-    if ( findPresetIndex( presetIndex, station ) != RadioStation::NotFound )
-    {
+    if ( findPresetIndex( presetIndex, station ) != RadioStation::NotFound ) {
         station.setFavorite( favorite );
         saveStation( station );
+
+        Q_D( RadioStationModel );
+        d->mUiEngine.api().monitor().notifyFavoriteCount( favoriteCount() );
     }
 }
 
@@ -479,10 +499,11 @@
 {
     LOG_FORMAT( "RadioStationModelPrivate::renameStation, presetIndex: %d, name: %s", presetIndex, GETSTRING(name) );
     RadioStation station;
-    if ( findPresetIndex( presetIndex, station ) != RadioStation::NotFound )
-    {
+    if ( findPresetIndex( presetIndex, station ) != RadioStation::NotFound ) {
         station.setUserDefinedName( name );
         saveStation( station );
+        Q_D( RadioStationModel );
+        d->mUiEngine.api().monitor().notifyName( name );
     }
 }
 
@@ -496,6 +517,9 @@
         RADIO_ASSERT( station.isValid() , "RadioStationModel::setFavorites", "invalid RadioStation");
         setFavoriteByPreset( station.presetIndex(), true );
     }
+
+    Q_D( RadioStationModel );
+    d->mUiEngine.api().monitor().notifyFavoriteCount( favoriteCount() );
 }
 
 /*!
@@ -567,7 +591,6 @@
 
     QList<RadioStation> tempStations = d->mStations.values();
 
-
     beginRemoveRows( QModelIndex(), 0, rowCount() - 1 );
 
     // Preset utility deletes all presets with index -1
@@ -575,13 +598,18 @@
     RADIO_ASSERT( success, "FMRadio", "Failed to remove station" );
 
     d->mStations.clear();
-    d->setCurrentStation( d->mEngine->currentFrequency() );
+    d->mCurrentStation = NULL;
+    d->setCurrentStation( d->mWrapper->currentFrequency() );
 
     endRemoveRows();
 
     foreach( RadioStation station, tempStations ) {
         emit stationRemoved( station );
     }
+
+    reset(); // TODO: Remove. this is a workaround to HbGridView update problem
+
+    d->mUiEngine.api().monitor().notifyFavoriteCount( favoriteCount() );
 }
 
 /*!
@@ -598,7 +626,7 @@
         d->mCurrentStation->setName( d->mCurrentStation->dynamicPsText() );
         d->mCurrentStation->setDynamicPsText( "" );
         saveStation( *d->mCurrentStation );
-        d->mUiEngine.monitor().notifyName( d->mCurrentStation->name() );
+        d->mUiEngine.api().monitor().notifyName( d->mCurrentStation->name() );
     }
 }
 
--- a/radioapp/radiouiengine/src/radiostationmodel_p.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiouiengine/src/radiostationmodel_p.cpp	Mon May 03 12:31:41 2010 +0300
@@ -25,8 +25,10 @@
 #include "radiopresetstorage.h"
 #include "radioenginewrapper.h"
 #include "radiouiengine.h"
+#include "radiouiengine_p.h"
 #include "radiostation.h"
-#include "radioplaylogmodel.h"
+#include "radiostation_p.h"
+#include "radiohistorymodel.h"
 #ifndef BUILD_WIN32
 #   include "radiomonitorservice.h"
 #else
@@ -43,7 +45,7 @@
  *
  */
 RadioStationModelPrivate::RadioStationModelPrivate( RadioStationModel* model,
-                                                    RadioUiEngine& uiEngine ) :
+                                                    RadioUiEnginePrivate& uiEngine ) :
     q_ptr( model ),
     mUiEngine( uiEngine ),
     mCurrentStation( &mManualStation ),
@@ -85,6 +87,7 @@
 void RadioStationModelPrivate::setCurrentStation( uint frequency )
 {
     LOG_METHOD;
+    RadioStation* oldStation = mCurrentStation;
     if ( mStations.contains( frequency ) ) {
         // We have to be careful to check that key exists before using operator[]
         // with QMap since it will insert a default-constructed value if it doesn't exist yet.
@@ -95,8 +98,13 @@
         mCurrentStation = &mManualStation;
     }
 
-    mUiEngine.monitor().notifyName( mCurrentStation->name().isEmpty() ? mCurrentStation->frequencyMhz() 
-                                                                      : mCurrentStation->name() );
+    Q_Q( RadioStationModel );
+    if ( oldStation && oldStation->isValid() ) {
+        q->emitDataChanged( *oldStation );
+    }
+
+    mUiEngine.api().monitor().notifyName( mCurrentStation->name().isEmpty() ? mCurrentStation->frequencyMhz()
+                                                                            : mCurrentStation->name() );
 }
 
 /*!
@@ -113,7 +121,21 @@
     }
     station.setGenre( genre );
     q->saveStation( station );
-    mUiEngine.monitor().notifyGenre( mUiEngine.genreToString( genre ) );
+    mUiEngine.api().monitor().notifyGenre( mUiEngine.api().genreToString( genre, GenreTarget::HomeScreen ) );
+}
+
+/*!
+ * \reimp
+ *
+ */
+void RadioStationModelPrivate::tunedToFrequency( uint frequency, int reason )
+{
+    if ( reason == TuneReason::Seek ) {
+        addScannedFrequency( frequency );
+    }
+
+    setCurrentStation( frequency );
+    startDynamicPsCheck();
 }
 
 /*!
@@ -181,6 +203,7 @@
             q->removeStation( station );
         }
     }
+    q->reset();
 }
 
 /*!
@@ -190,7 +213,7 @@
 void RadioStationModelPrivate::setCurrentPsName( uint frequency, const QString& name )
 {
     Q_Q( RadioStationModel );
-    LOG_FORMAT( "RadioEngineWrapperPrivate::updateCurrentStationName: %s", GETSTRING( name ) );
+    LOG_FORMAT( "void RadioStationModelPrivate::setCurrentPsName: %s", GETSTRING( name ) );
     RadioStation station = q->findCurrentStation( frequency );
     if ( !station.isValid() ) {
         LOG( "Unable to find current station. Ignoring RDS" );
@@ -202,7 +225,7 @@
         if ( name.compare( station.name() ) != 0 && !station.isRenamed() ) {
             station.setName( name );
             q->saveStation( station );
-            mUiEngine.monitor().notifyName( name );
+            mUiEngine.api().monitor().notifyName( name );
         }
 
     } else {
@@ -219,7 +242,7 @@
                 // Cleanup the station name if region is not America
                 if ( !station.name().isEmpty()
                      && !station.isRenamed()
-                     && mEngine->region() != RadioRegion::America )
+                     && mWrapper->region() != RadioRegion::America )
                 {
                     LOG( "Station name cleanup" );
                     station.setName( "" );
@@ -260,8 +283,8 @@
     }
     station.setRadioText( radioText );
     q->saveStation( station );
-    mUiEngine.playLogModel().clearRadioTextPlus();
-    mUiEngine.monitor().notifyRadioText( radioText );
+    mUiEngine.api().historyModel().clearRadioTextPlus();
+    mUiEngine.api().monitor().notifyRadioText( radioText );
 }
 
 /*!
@@ -278,7 +301,7 @@
     }
     station.setRadioTextPlus( rtClass, rtItem );
     q->saveStation( station );
-    mUiEngine.playLogModel().addRadioTextPlus( rtClass, rtItem, station );
+    mUiEngine.api().historyModel().addRadioTextPlus( rtClass, rtItem, station );
 }
 
 /*!
@@ -296,10 +319,22 @@
 #ifdef SHOW_CALLSIGN_IN_ANY_REGION
     RadioRegion::Region region = RadioRegion::America;
 #else
-    RadioRegion::Region region =  mEngine->region();
+    RadioRegion::Region region =  mWrapper->region();
 #endif
 
     station.setPiCode( piCode, region );
     q->saveStation( station );
 }
 
+/*!
+ *
+ */
+void RadioStationModelPrivate::doSaveStation( RadioStation& station, bool persistentSave )
+{
+    mStations.insert( station.frequency(), station );
+
+    if ( persistentSave ) {
+        const bool success = mPresetStorage->savePreset( *station.data_ptr() );
+        RADIO_ASSERT( success, "RadioStationModelPrivate::saveStation", "Failed to add station" );
+    }
+}
--- a/radioapp/radiouiengine/src/radiouiengine.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiouiengine/src/radiouiengine.cpp	Mon May 03 12:31:41 2010 +0300
@@ -33,10 +33,15 @@
 #include "radiologger.h"
 #include "radioenginewrapper.h"
 #include "radiostationmodel.h"
-#include "radioplaylogmodel.h"
+#include "radiohistorymodel.h"
 #include "radiosettings.h"
 #include "radiostationfiltermodel.h"
-#include "radiolocalization.h"
+#include "radioscannerengine.h"
+#ifdef BUILD_WIN32
+#   include "radiomonitorservice_win32.h"
+#else
+#   include "radiomonitorservice.h"
+#endif
 
 // Constants
 const QString KPathFormatter = "%1:%2%3";
@@ -44,6 +49,88 @@
 const QString KSongRecognitionApp = "Shazam_0x200265B3.exe";
 const QString KSongRecognitionAppParams = "-listen";
 
+struct GenreStruct
+    {
+    int mGenreCode;
+    const char* mInCarousel;
+    const char* mInStationsList;
+    const char* mInHomeScreen;
+    };
+
+const GenreStruct EuropeanGenres[] =
+    {
+     { GenreEurope::RdsNone, "", "", "" }
+    ,{ GenreEurope::RdsNews, "txt_rad_info_news", "txt_rad_dblist_l1_mhz_val_news", "txt_rad_info_news_hs" }
+    ,{ GenreEurope::RdsCurrentAffairs, "txt_rad_info_current_affairs", "txt_rad_dblist_l1_mhz_val_current_affairs", "txt_rad_info_current_affairs_hs" }
+    ,{ GenreEurope::RdsInformation, "txt_rad_info_information", "txt_rad_dblist_l1_mhz_val_information", "txt_rad_info_information_hs" }
+    ,{ GenreEurope::RdsSport, "txt_rad_info_sport", "txt_rad_dblist_l1_mhz_val_sport", "txt_rad_info_sport_hs" }
+    ,{ GenreEurope::RdsEducation, "txt_rad_info_education", "txt_rad_dblist_l1_mhz_val_education", "txt_rad_info_education_hs" }
+    ,{ GenreEurope::RdsDrama, "txt_rad_info_drama", "txt_rad_dblist_l1_mhz_val_drama", "txt_rad_info_drama_hs" }
+    ,{ GenreEurope::RdsCulture, "txt_rad_info_culture", "txt_rad_dblist_l1_mhz_val_culture", "txt_rad_info_culture_hs" }
+    ,{ GenreEurope::RdsScience, "txt_rad_info_science", "txt_rad_dblist_l1_mhz_val_science", "txt_rad_info_science_hs" }
+    ,{ GenreEurope::RdsVariedSpeech, "txt_rad_info_varied", "txt_rad_dblist_l1_mhz_val_varied", "txt_rad_info_varied_hs" }
+    ,{ GenreEurope::RdsPopMusic, "txt_rad_info_pop_music", "txt_rad_dblist_l1_mhz_val_pop_music", "txt_rad_info_pop_music_hs" }
+    ,{ GenreEurope::RdsRockMusic, "txt_rad_info_rock_music", "txt_rad_dblist_l1_mhz_val_rock_music", "txt_rad_info_rock_music_hs" }
+    ,{ GenreEurope::RdsEasyListening, "txt_rad_info_easy_listening", "txt_rad_dblist_l1_mhz_val_easy_listening", "txt_rad_info_easy_listening_hs" }
+    ,{ GenreEurope::RdsLightClassical, "txt_rad_info_light_classical", "txt_rad_dblist_l1_mhz_val_light_classical", "txt_rad_info_light_classical_hs" }
+    ,{ GenreEurope::RdsSeriousClassical, "txt_rad_info_serious_classical", "txt_rad_dblist_l1_mhz_val_serious_classical", "txt_rad_info_serious_classical_hs" }
+    ,{ GenreEurope::RdsOtherMusic, "txt_rad_info_other_music", "txt_rad_dblist_l1_mhz_val_other_music", "txt_rad_info_other_music_hs" }
+    ,{ GenreEurope::RdsWeather, "txt_rad_info_weather", "txt_rad_dblist_l1_mhz_val_weather", "txt_rad_info_weather_hs" }
+    ,{ GenreEurope::RdsFinance, "txt_rad_info_finance", "txt_rad_dblist_l1_mhz_val_finance", "txt_rad_info_finance_hs" }
+    ,{ GenreEurope::RdsChildrensProgrammes, "txt_rad_info_childrens_programmes", "txt_rad_dblist_l1_mhz_val_childrens_programmes", "txt_rad_info_childrens_programmes_hs" }
+    ,{ GenreEurope::RdsSocialAffairs, "txt_rad_info_social_affairs", "txt_rad_dblist_l1_mhz_val_social_affairs", "txt_rad_info_social_affairs_hs" }
+    ,{ GenreEurope::RdsReligion, "txt_rad_info_religion", "txt_rad_dblist_l1_mhz_val_religion", "txt_rad_info_religion_hs" }
+    ,{ GenreEurope::RdsPhoneIn, "txt_rad_info_phone_in", "txt_rad_dblist_l1_mhz_val_phone_in", "txt_rad_info_phone_in_hs" }
+    ,{ GenreEurope::RdsTravel, "txt_rad_info_travel", "txt_rad_dblist_l1_mhz_val_travel", "txt_rad_info_travel_hs" }
+    ,{ GenreEurope::RdsLeisure, "txt_rad_info_leisure", "txt_rad_dblist_l1_mhz_val_leisure", "txt_rad_info_leisure_hs" }
+    ,{ GenreEurope::RdsJazzMusic, "txt_rad_info_jazz_music", "txt_rad_dblist_l1_mhz_val_jazz_music", "txt_rad_info_jazz_music_hs" }
+    ,{ GenreEurope::RdsCountryMusic, "txt_rad_info_country_music", "txt_rad_dblist_l1_mhz_val_country_music", "txt_rad_info_country_music_hs" }
+    ,{ GenreEurope::RdsNationalMusic, "txt_rad_info_national_music", "txt_rad_dblist_l1_mhz_val_national_music", "txt_rad_info_national_music_hs" }
+    ,{ GenreEurope::RdsOldiesMusic, "txt_rad_info_oldies_music", "txt_rad_dblist_l1_mhz_val_oldies_music", "txt_rad_info_oldies_music_hs" }
+    ,{ GenreEurope::RdsFolkMusic, "txt_rad_info_folk_music", "txt_rad_dblist_l1_mhz_val_folk_music", "txt_rad_info_folk_music_hs" }
+    ,{ GenreEurope::RdsDocumentary, "txt_rad_info_documentary", "txt_rad_dblist_l1_mhz_val_documentary", "txt_rad_info_documentary_hs" }
+    ,{ GenreEurope::RdsAlarmTest, "txt_rad_info_alarm_test", "txt_rad_dblist_l1_mhz_val_alarm_test", "txt_rad_info_alarm_test_hs" }
+    ,{ GenreEurope::RdsAlarm, "txt_rad_info_alarm", "txt_rad_dblist_l1_mhz_val_alarm", "txt_rad_info_alarm_hs" }
+    };
+const int EuropeanGenresCount = sizeof( EuropeanGenres ) / sizeof ( EuropeanGenres[0] );
+
+const GenreStruct AmericanGenres[] =
+    {
+     { GenreAmerica::RbdsNone, "", "", "" }
+    ,{ GenreAmerica::RbdsNews, "txt_rad_info_news", "txt_rad_dblist_l1_mhz_val_news", "txt_rad_info_news_hs" }
+    ,{ GenreAmerica::RbdsInformation, "txt_rad_info_information", "txt_rad_dblist_l1_mhz_val_information", "txt_rad_info_information_hs" }
+    ,{ GenreAmerica::RbdsSports, "txt_rad_info_sport", "txt_rad_dblist_l1_mhz_val_sport", "txt_rad_info_sport_hs" }
+    ,{ GenreAmerica::RbdsTalk, "txt_rad_info_talk", "txt_rad_dblist_l1_mhz_val_talk", "txt_rad_info_talk_hs" }
+    ,{ GenreAmerica::RbdsRock, "txt_rad_info_rock_music", "txt_rad_dblist_l1_mhz_val_rock_music", "txt_rad_info_rock_music_hs" } //TODO: Check
+    ,{ GenreAmerica::RbdsClassicRock, "txt_rad_info_classic_rock", "txt_rad_dblist_l1_mhz_val_classic_rock", "txt_rad_info_classic_rock_hs" }
+    ,{ GenreAmerica::RbdsAdultHits, "txt_rad_info_adult_hits", "txt_rad_dblist_l1_mhz_val_adult_hits", "txt_rad_info_adult_hits_hs" }
+    ,{ GenreAmerica::RbdsSoftRock, "txt_rad_info_soft_rock", "txt_rad_dblist_l1_mhz_val_soft_rock", "txt_rad_info_soft_rock_hs" }
+    ,{ GenreAmerica::RbdsTop40, "txt_rad_info_top_40", "txt_rad_dblist_l1_mhz_val_top_40", "txt_rad_info_top_40_hs" }
+    ,{ GenreAmerica::RbdsCountry, "txt_rad_info_country_music", "txt_rad_dblist_l1_mhz_val_country_music", "txt_rad_info_country_music_hs" }  //TODO: Check
+    ,{ GenreAmerica::RbdsOldies, "txt_rad_info_oldies_music", "txt_rad_dblist_l1_mhz_val_oldies_music", "txt_rad_info_oldies_music_hs" }  //TODO: Check
+    ,{ GenreAmerica::RbdsSoft, "txt_rad_info_soft", "txt_rad_dblist_l1_mhz_val_soft", "txt_rad_info_soft_hs" }
+    ,{ GenreAmerica::RbdsNostalgia, "txt_rad_info_nostalgia", "txt_rad_dblist_l1_mhz_val_nostalgia", "txt_rad_info_nostalgia_hs" }
+    ,{ GenreAmerica::RbdsJazz, "txt_rad_info_jazz_music", "txt_rad_dblist_l1_mhz_val_jazz_music", "txt_rad_info_jazz_music_hs" } //TODO: Check
+    ,{ GenreAmerica::RbdsClassical, "txt_rad_info_classical", "txt_rad_dblist_l1_mhz_val_classical", "txt_rad_info_classical_hs" }
+    ,{ GenreAmerica::RbdsRhythmAndBlues, "txt_rad_info_rhythm_and_blues", "txt_rad_dblist_l1_mhz_val_rhythm_and_blues", "txt_rad_info_rhythm_and_blues_hs" }
+    ,{ GenreAmerica::RbdsSoftRhythmAndBlues, "txt_rad_info_soft_rhythm_and_blues", "txt_rad_dblist_l1_mhz_val_soft_rhythm_and_blues", "txt_rad_info_soft_rhythm_and_blues_hs" }
+    ,{ GenreAmerica::RbdsLanguage, "txt_rad_info_language", "txt_rad_dblist_l1_mhz_val_language", "txt_rad_info_language_hs" }
+    ,{ GenreAmerica::RbdsReligiousMusic, "txt_rad_info_religious_music", "txt_rad_dblist_l1_mhz_val_religious_music", "txt_rad_info_religious_music_hs" }
+    ,{ GenreAmerica::RbdsReligiousTalk, "txt_rad_info_religious_talk", "txt_rad_dblist_l1_mhz_val_religious_talk", "txt_rad_info_religious_talk_hs" }
+    ,{ GenreAmerica::RbdsPersonality, "txt_rad_info_personality", "txt_rad_dblist_l1_mhz_val_personality", "txt_rad_info_personality_hs" }
+    ,{ GenreAmerica::RbdsPublic, "txt_rad_info_public", "txt_rad_dblist_l1_mhz_val_public", "txt_rad_info_public_hs" }
+    ,{ GenreAmerica::RbdsCollege, "txt_rad_info_college", "txt_rad_dblist_l1_mhz_val_college", "txt_rad_info_college_hs" }
+    ,{ GenreAmerica::RbdsUnassigned1, "", "", "" }
+    ,{ GenreAmerica::RbdsUnassigned2, "", "", "" }
+    ,{ GenreAmerica::RbdsUnassigned3, "", "", "" }
+    ,{ GenreAmerica::RbdsUnassigned4, "", "", "" }
+    ,{ GenreAmerica::RbdsUnassigned5, "", "", "" }
+    ,{ GenreAmerica::RbdsWeather, "txt_rad_info_weather", "txt_rad_dblist_l1_mhz_val_weather", "txt_rad_info_weather_hs" }//TODO: Check
+    ,{ GenreAmerica::RbdsEmergencyTest, "txt_rad_info_alarm_test", "txt_rad_dblist_l1_mhz_val_alarm_test", "txt_rad_info_alarm_test_hs" }//TODO: Check
+    ,{ GenreAmerica::RbdsEmergency, "txt_rad_info_alarm", "txt_rad_dblist_l1_mhz_val_alarm", "txt_rad_info_alarm_hs" }//TODO: Check
+    };
+const int AmericanGenresCount = sizeof( AmericanGenres ) / sizeof ( AmericanGenres[0] );
+
 /*!
  *
  */
@@ -67,37 +154,6 @@
 /*!
  *
  */
-QString RadioUiEngine::parseFrequency( uint frequency )
-{
-    return QTRANSLATE( KFrequencyMhz ).arg( RadioStation::parseFrequency( frequency ) );
-}
-
-/*!
- *
- */
-QString RadioUiEngine::nameOrFrequency( const RadioStation& station, uint frequency )
-{
-    if ( frequency == 0 )
-    {
-        frequency = station.frequency();
-    }
-
-    QString text = "";
-    if ( station.isValid() && !station.name().isEmpty() )
-    {
-        text = station.name();
-    }
-    else
-    {
-        text = parseFrequency( frequency );
-    }
-
-    return text;
-}
-
-/*!
- *
- */
 RadioUiEngine::RadioUiEngine( QObject* parent ) :
     QObject( parent ),
     d_ptr( new RadioUiEnginePrivate( this ) )
@@ -109,6 +165,7 @@
  */
 RadioUiEngine::~RadioUiEngine()
 {
+    delete d_ptr;
 }
 
 /*!
@@ -148,16 +205,16 @@
 }
 
 /*!
- * Returns the play log model
+ * Returns the history model
  */
-RadioPlayLogModel& RadioUiEngine::playLogModel()
+RadioHistoryModel& RadioUiEngine::historyModel()
 {
     Q_D( RadioUiEngine );
-    if ( !d->mPlayLogModel ) {
-        d->mPlayLogModel = new RadioPlayLogModel( *this );
+    if ( !d->mHistoryModel ) {
+        d->mHistoryModel = new RadioHistoryModel( *this );
     }
 
-    return *d->mPlayLogModel;
+    return *d->mHistoryModel;
 }
 
 /*!
@@ -169,6 +226,18 @@
 }
 
 /*!
+ *
+ */
+RadioScannerEngine* RadioUiEngine::createScannerEngine()
+{
+    Q_D( RadioUiEngine );
+    if ( d->mScannerEngine.isNull() ) {
+        d->mScannerEngine = new RadioScannerEngine( *d );
+    }
+    return d->mScannerEngine;
+}
+
+/*!
  * Returns the stations list
  */
 RadioMonitorService& RadioUiEngine::monitor()
@@ -192,7 +261,7 @@
 bool RadioUiEngine::isScanning() const
 {
     Q_D( const RadioUiEngine );
-    return d->mEngineWrapper->isScanning();
+    return d->mScannerEngine != 0;
 }
 
 /*!
@@ -270,24 +339,6 @@
 /*!
  *
  */
-void RadioUiEngine::scanFrequencyBand()
-{
-    Q_D( RadioUiEngine );
-    d->mEngineWrapper->scanFrequencyBand();
-}
-
-/*!
- *
- */
-void RadioUiEngine::cancelScanFrequencyBand()
-{
-    Q_D( RadioUiEngine );
-    d->mEngineWrapper->cancelScanFrequencyBand();
-}
-
-/*!
- *
- */
 QList<RadioStation> RadioUiEngine::stationsInRange( uint minFrequency, uint maxFrequency )
 {
     Q_D( RadioUiEngine );
@@ -297,7 +348,7 @@
 /*!
  *
  */
-QString RadioUiEngine::genreToString( int genre )
+QString RadioUiEngine::genreToString( int genre, GenreTarget::Target target )
 {
     RadioRegion::Region currentRegion = region();
 
@@ -306,10 +357,13 @@
 
     for( int i = 0; i < genreCount; ++i ) {
         if ( genreArray[i].mGenreCode == genre ) {
-            return TRANSLATE( genreArray[i].mTranslation );
-//            return qApp->translate( GenreContext,
-//                    genreArray[i].mTranslation.source,
-//                    genreArray[i].mTranslation.comment );
+            if ( target == GenreTarget::Carousel ) {
+                return qtTrId( genreArray[i].mInCarousel );
+            } else if ( target == GenreTarget::StationsList ) {
+                return qtTrId( genreArray[i].mInStationsList );
+            } else if ( target == GenreTarget::HomeScreen ) {
+                return qtTrId( genreArray[i].mInHomeScreen );
+            }
         }
     }
 
@@ -351,7 +405,7 @@
 void RadioUiEngine::addRecognizedSong( const QString& artist, const QString& title, const RadioStation& station )
 {
     Q_D( RadioUiEngine );
-    d->mPlayLogModel->addItem( artist, title, station );
+    d->mHistoryModel->addItem( artist, title, station );
 }
 
 /*!
@@ -363,6 +417,7 @@
     Q_D( RadioUiEngine );
     if ( frequency != d->mStationModel->currentStation().frequency() && d->mEngineWrapper->isFrequencyValid( frequency ) ) {
         LOG_FORMAT( "RadioUiEngine::tuneFrequency, frequency: %d", frequency );
+        d->cancelSeeking();
         d->mEngineWrapper->tuneFrequency( frequency, sender );
     }
 }
@@ -376,6 +431,7 @@
     Q_D( RadioUiEngine );
     if ( frequency != d->mStationModel->currentStation().frequency() &&  d->mEngineWrapper->isFrequencyValid( frequency ) ) {
         LOG_FORMAT( "RadioEngineWrapperPrivate::tuneWithDelay, frequency: %d", frequency );
+        d->cancelSeeking();
         d->mEngineWrapper->tuneWithDelay( frequency, sender );
     }
 }
@@ -393,7 +449,7 @@
                 d->mEngineWrapper->isFrequencyValid( station.frequency() ) ) {
             LOG_FORMAT( "RadioEngineWrapperPrivate::tunePreset, presetIndexPosition: %d", presetIndex );
 
-            d->mEngineWrapper->tuneFrequency( station.frequency(), CommandSender::Unspecified );
+            d->mEngineWrapper->tuneFrequency( station.frequency(), TuneReason::Unspecified );
         }
     }
 }
@@ -454,8 +510,11 @@
  */
 void RadioUiEngine::seekUp()
 {
-    Q_D( RadioUiEngine );
-    d->mEngineWrapper->startSeeking( Seeking::Up );
+    if ( isAntennaAttached() ) {
+        Q_D( RadioUiEngine );
+        emitSeekingStarted( Seeking::Up );
+        d->mEngineWrapper->startSeeking( Seeking::Up, TuneReason::Seek );
+    }
 }
 
 /*!
@@ -464,8 +523,11 @@
  */
 void RadioUiEngine::seekDown()
 {
-    Q_D( RadioUiEngine );
-    d->mEngineWrapper->startSeeking( Seeking::Down );
+    if ( isAntennaAttached() ) {
+        Q_D( RadioUiEngine );
+        emitSeekingStarted( Seeking::Down );
+        d->mEngineWrapper->startSeeking( Seeking::Down, TuneReason::Seek );
+    }
 }
 
 /*!
@@ -496,9 +558,9 @@
  */
 void RadioUiEngine::emitSeekingStarted( Seeking::Direction direction )
 {
-    if ( isAntennaAttached() ) {
-        emit seekingStarted( direction );
-    }
+    emit seekingStarted( direction );
+    Q_D( RadioUiEngine );
+    d->mMonitorService->notifyRadioStatus( RadioStatus::Seeking );
 }
 
 /*!
@@ -542,17 +604,10 @@
 }
 
 /*!
- * Function used by the private implementation to emit a scanAndSaveFinished signal
+ * Function used by the private implementation to emit a antennaStatusChanged signal
  */
-void RadioUiEngine::emitScanAndSaveFinished()
+void RadioUiEngine::emitAntennaStatusChanged( bool connected )
 {
-    emit scanAndSaveFinished();
-}
-/*!
- * Function used by the private implementation to emit a headsetStatusChanged signal
- */
-void RadioUiEngine::emitheadsetStatusChanged( bool connected )
-{
-    emit headsetStatusChanged( connected );
+    emit antennaStatusChanged( connected );
 }
 
--- a/radioapp/radiouiengine/src/radiouiengine_p.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiouiengine/src/radiouiengine_p.cpp	Mon May 03 12:31:41 2010 +0300
@@ -30,16 +30,19 @@
 #include "radiouiengine_p.h"
 #include "radioenginewrapper.h"
 #include "radiostationmodel.h"
+#include "radiostationmodel_p.h"
 #include "radiopresetstorage.h"
 #include "radiosettings.h"
 #include "radiostation.h"
+#include "radioscannerengine.h"
+#include "radiostationhandlerif.h"
 #ifndef BUILD_WIN32
 #   include "radiocontrolservice.h"
 #   include "radiomonitorservice.h"
 #else
 #   include "radiomonitorservice_win32.h"
 #endif
-#include "radioserviceconst.h"
+#include "radioservicedef.h"
 #include "radiologger.h"
 
 /*!
@@ -49,7 +52,7 @@
     q_ptr( engine ),
     mEngineWrapper( 0 ),
     mStationModel( 0 ),
-    mPlayLogModel( 0 ),
+    mHistoryModel( 0 ),
     mControlService( 0 ),
     mMonitorService( 0 )
 {
@@ -71,14 +74,24 @@
 /*!
  *
  */
+RadioUiEngine& RadioUiEnginePrivate::api()
+{
+    Q_Q( RadioUiEngine );
+    return *q;
+}
+
+/*!
+ *
+ */
 bool RadioUiEnginePrivate::startRadio()
 {
 #ifndef BUILD_WIN32
     mControlService = new RadioControlService( *q_ptr );
 #endif
     mMonitorService = new RadioMonitorService( *q_ptr );
-    mStationModel = new RadioStationModel( *q_ptr );
-    mEngineWrapper.reset( new RadioEngineWrapper( mStationModel->stationHandlerIf(), *this ) );
+    mStationModel = new RadioStationModel( *this );
+    mEngineWrapper.reset( new RadioEngineWrapper( mStationModel->stationHandlerIf() ) );
+    mEngineWrapper->addObserver( this );
     mPresetStorage.reset( new RadioPresetStorage() );
     mStationModel->initialize( mPresetStorage.data(), mEngineWrapper.data() );
 
@@ -97,19 +110,28 @@
 /*!
  *
  */
-void RadioUiEnginePrivate::tunedToFrequency( uint frequency, int commandSender )
+void RadioUiEnginePrivate::cancelSeeking()
 {
-    Q_Q( RadioUiEngine );
-    q->emitTunedToFrequency( frequency, commandSender );
+    mEngineWrapper->cancelSeeking();
+    mMonitorService->notifyRadioStatus( mEngineWrapper->isMuted() ? RadioStatus::Muted : RadioStatus::Playing );
 }
 
 /*!
  *
  */
-void RadioUiEnginePrivate::seekingStarted( Seeking::Direction direction )
+RadioEngineWrapper& RadioUiEnginePrivate::wrapper()
+{
+    return *mEngineWrapper;
+}
+
+/*!
+ *
+ */
+void RadioUiEnginePrivate::tunedToFrequency( uint frequency, int reason )
 {
     Q_Q( RadioUiEngine );
-    q->emitSeekingStarted( direction );
+    q->emitTunedToFrequency( frequency, reason );
+    mMonitorService->notifyRadioStatus( RadioStatus::Playing );
 }
 
 /*!
@@ -173,6 +195,7 @@
 {
     Q_Q( RadioUiEngine );
     q->emitMuteChanged( muted );
+    mMonitorService->notifyRadioStatus( muted ? RadioStatus::Muted : RadioStatus::Playing );
 }
 
 /*!
@@ -187,19 +210,11 @@
 /*!
  *
  */
-void RadioUiEnginePrivate::scanAndSaveFinished()
+void RadioUiEnginePrivate::antennaStatusChanged( bool connected )
 {
     Q_Q( RadioUiEngine );
-    q->emitScanAndSaveFinished();
-}
-
-/*!
- *
- */
-void RadioUiEnginePrivate::headsetStatusChanged( bool connected )
-{
-    Q_Q( RadioUiEngine );
-    q->emitheadsetStatusChanged( connected );
+    q->emitAntennaStatusChanged( connected );
+    mMonitorService->notifyAntennaStatus( connected );
 }
 
 /*!
@@ -257,13 +272,13 @@
             previous = favorites.last();
         }
         LOG_FORMAT( "RadioUiEnginePrivate::skip. CurrentFreq: %u, tuning to: %u", currentFreq, previous );
-        mEngineWrapper->tuneFrequency( previous, CommandSender::Unspecified );
+        mEngineWrapper->tuneFrequency( previous, TuneReason::Unspecified );
     } else {
         if ( next == 0 ) {
             next = favorites.first();
         }
         LOG_FORMAT( "RadioUiEnginePrivate::skip. CurrentFreq: %u, tuning to: %u", currentFreq, next );
-        mEngineWrapper->tuneFrequency( next, CommandSender::Unspecified );
+        mEngineWrapper->tuneFrequency( next, TuneReason::Unspecified );
     }    
 }
 
--- a/radioapp/radiouiengine/tsrc/inc/t_radiostation.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiouiengine/tsrc/inc/t_radiostation.h	Mon May 03 12:31:41 2010 +0300
@@ -28,7 +28,7 @@
 
 class RadioUiEngine;
 class RadioStationModel;
-class RadioPlayLogModel;
+class RadioHistoryModel;
 class RadioPresetStorage;
 class RadioEngineWrapper;
 class RadioEngineWrapperObserver;
@@ -75,8 +75,8 @@
     void TestCallSignChar();
     void testPICodeToCallSign();
     void testRadioStationModel();
-    void testPlayLogModel();
-    void testPlayLogModelItem();
+    void testhistoryModel();
+    void testHistoryModelItem();
     
 private:
 
@@ -110,20 +110,20 @@
 
     void testRenameStation();
     void testSetRadioTextPlus();
-    void testPlayLogModelInit();
-    void testPlayLogModelAddItem();
-    void testPlayLogModelFindItem();
-    void testPlayLogModelUpdateItem();
-    void testPlayLogModelSetData();
+    void testHistoryModelInit();
+    void testHistoryModelAddItem();
+    void testHistoryModelFindItem();
+    void testHistoryModelUpdateItem();
+    void testHistoryModelSetData();
     void testAddRadioTextPlus();
     void testClearRadioTextPlus();
-    void testRadioPlayLogItem();
+    void testRadioHistoryItem();
     
 private:
 	RadioUiEngine* mUiEngine;
 	QScopedPointer<RadioEngineWrapper>  mEngineWrapper;
 	RadioStationModel* mRadioStationModel;
-	RadioPlayLogModel* mPlayLogModel;
+	RadioHistoryModel* mhistoryModel;
 	QScopedPointer<RadioPresetStorage>  mPresetStorage;
 	int mExpectedStationCount;	
 	/**
--- a/radioapp/radiouiengine/tsrc/src/t_radiostation.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiouiengine/tsrc/src/t_radiostation.cpp	Mon May 03 12:31:41 2010 +0300
@@ -24,7 +24,7 @@
 #include "radiopresetstorage.h"
 #include "radiostation.h"
 #include "radiostationmodel.h"
-#include "radioplaylogmodel.h"
+#include "radiohistorymodel.h"
 #include "radioenginewrapper.h"
 #include "radiouiengine.h"
 #include "radiologger.h" //connectAndTest
@@ -168,7 +168,7 @@
 #endif 
     mUiEngine = new RadioUiEngine;
     mRadioStationModel = new RadioStationModel( *mUiEngine );
-    mPlayLogModel = new RadioPlayLogModel( *mUiEngine );
+    mhistoryModel = new RadioHistoryModel( *mUiEngine );
     
     mEngineWrapper.reset( new RadioEngineWrapper( mRadioStationModel->stationHandlerIf(), *this ) );
     mPresetStorage.reset( new RadioPresetStorage() );
@@ -192,7 +192,7 @@
     connectAndTest( mRadioStationModel,           SIGNAL(favoriteChanged(RadioStation)),
         this,    SLOT(favoriteChanged(RadioStation)) );
     
-    connectAndTest( mPlayLogModel,           SIGNAL(itemAdded()),
+    connectAndTest( mhistoryModel,           SIGNAL(itemAdded()),
         this,    SLOT(itemAdded()) );
 }
 
@@ -873,109 +873,109 @@
 	testSetRadioTextPlus();
 }
 /*!
- * Test RadioPlayLogModel API
+ * Test RadioHistoryModel API
  */
-void TestRadioUiEngine::testPlayLogModel()
+void TestRadioUiEngine::testhistoryModel()
     {
-    testPlayLogModelInit();
-    testPlayLogModelAddItem();
-    testPlayLogModelFindItem();
-    testPlayLogModelUpdateItem();
-    testPlayLogModelSetData();
+    testHistoryModelInit();
+    testHistoryModelAddItem();
+    testHistoryModelFindItem();
+    testHistoryModelUpdateItem();
+    testHistoryModelSetData();
     testAddRadioTextPlus();
     testClearRadioTextPlus();
     }
 
 /*!
- * Testing of RadioPlayLogModel initial state
+ * Testing of RadioHistoryModel initial state
  */
-void TestRadioUiEngine::testPlayLogModelInit()
+void TestRadioUiEngine::testHistoryModelInit()
 {
-    //TODO:: Check why ASSERT fails when mPlayLogModel->rowCount() == 0 
-    if( mPlayLogModel->rowCount()>0 )
+    //TODO:: Check why ASSERT fails when mhistoryModel->rowCount() == 0 
+    if( mhistoryModel->rowCount()>0 )
     {       
-        mPlayLogModel->removeAll();
-        QVERIFY2((mRadioStationModel->rowCount()==0), "API:RadioPlayLogModel removeAll() 1");
+        mhistoryModel->removeAll();
+        QVERIFY2((mRadioStationModel->rowCount()==0), "API:RadioHistoryModel removeAll() 1");
     }
-    QVERIFY2((mPlayLogModel->rowCount()==0), "API:RadioPlayLogModel removeAll() 2");           
+    QVERIFY2((mhistoryModel->rowCount()==0), "API:RadioHistoryModel removeAll() 2");           
 }
 
 /*!
  *
  */
-void TestRadioUiEngine::testPlayLogModelAddItem()
+void TestRadioUiEngine::testHistoryModelAddItem()
 {
-    int expectedPlayLogItemCount( mPlayLogModel->rowCount() + 1 );
+    int expectedHistoryItemCount( mhistoryModel->rowCount() + 1 );
     mEnteredSlots = NoSlotsEntered;
-    mPlayLogModel->addItem( KTestArtist1, KTestTitle1 );    
+    mhistoryModel->addItem( KTestArtist1, KTestTitle1 );    
     bool correctSignalsReceived = mEnteredSlots.testFlag( ItemAdded );
     // check that correct signals received
-    QVERIFY2(correctSignalsReceived, "API:RadioPlayLogModel addItem() 1");
+    QVERIFY2(correctSignalsReceived, "API:RadioHistoryModel addItem() 1");
     // check that item count increases
-    QVERIFY2((mPlayLogModel->rowCount()==expectedPlayLogItemCount), "API:RadioPlayLogModel addItem() 2");
+    QVERIFY2((mhistoryModel->rowCount()==expectedHistoryItemCount), "API:RadioHistoryModel addItem() 2");
     
     // check that artist/title stored into the model conforms to the one read from the model
-    QModelIndex index = mPlayLogModel->index( 0, 0 );
-    QStringList stringList = mPlayLogModel->data( index, Qt::DisplayRole ).value<QStringList>();        
+    QModelIndex index = mhistoryModel->index( 0, 0 );
+    QStringList stringList = mhistoryModel->data( index, Qt::DisplayRole ).value<QStringList>();        
     QString artistTitle = stringList.at(0);    
-    QVERIFY2(!(artistTitle.compare(KTestArtist1+" - "+KTestTitle1)), "API:RadioPlayLogModel addItem() 3");
+    QVERIFY2(!(artistTitle.compare(KTestArtist1+" - "+KTestTitle1)), "API:RadioHistoryModel addItem() 3");
     
     
-    expectedPlayLogItemCount = mPlayLogModel->rowCount();
+    expectedHistoryItemCount = mhistoryModel->rowCount();
     // trying to add an item that allready exists must not increase the item count
-    mPlayLogModel->addItem( KTestArtist1, KTestTitle1 );
-    QVERIFY2((mPlayLogModel->rowCount()==expectedPlayLogItemCount), "API:RadioPlayLogModel addItem() 4");
+    mhistoryModel->addItem( KTestArtist1, KTestTitle1 );
+    QVERIFY2((mhistoryModel->rowCount()==expectedHistoryItemCount), "API:RadioHistoryModel addItem() 4");
 }
 
 /*!
  *
  */
-void TestRadioUiEngine::testPlayLogModelFindItem()
+void TestRadioUiEngine::testHistoryModelFindItem()
 {
-    RadioPlayLogItem item;
-    mPlayLogModel->findItem( KTestArtist1, KTestTitle1, item );
-    QVERIFY2((item.artist()==KTestArtist1), "API:RadioPlayLogModel findItem() 1");
-    QVERIFY2((item.title()==KTestTitle1), "API:RadioPlayLogModel findItem() 2");
+    RadioHistoryItem item;
+    mhistoryModel->findItem( KTestArtist1, KTestTitle1, item );
+    QVERIFY2((item.artist()==KTestArtist1), "API:RadioHistoryModel findItem() 1");
+    QVERIFY2((item.title()==KTestTitle1), "API:RadioHistoryModel findItem() 2");
     // try to find an item that doesn't exist
-    int ret = mPlayLogModel->findItem( KTestArtist1+"+", KTestTitle1, item );
-    QVERIFY2(ret==-1, "API:RadioPlayLogModel findItem() 3");
+    int ret = mhistoryModel->findItem( KTestArtist1+"+", KTestTitle1, item );
+    QVERIFY2(ret==-1, "API:RadioHistoryModel findItem() 3");
 }
 
 /*!
  *
  */
-void TestRadioUiEngine::testPlayLogModelUpdateItem()
+void TestRadioUiEngine::testHistoryModelUpdateItem()
 {
-    RadioPlayLogItem item;    
-    mPlayLogModel->findItem( KTestArtist1, KTestTitle1, item );
+    RadioHistoryItem item;    
+    mhistoryModel->findItem( KTestArtist1, KTestTitle1, item );
     item.setTitle( KTestTitle2 );    
     // update an existing item
-    mPlayLogModel->updateItem( 0, item, true );
+    mhistoryModel->updateItem( 0, item, true );
     
-    RadioPlayLogItem foundItem;
+    RadioHistoryItem foundItem;
     // original item must not be found any more
-    int ret = mPlayLogModel->findItem(KTestArtist1, KTestTitle1, foundItem);
-    QVERIFY2(ret==-1, "API:RadioPlayLogModel updateItem() 1");
+    int ret = mhistoryModel->findItem(KTestArtist1, KTestTitle1, foundItem);
+    QVERIFY2(ret==-1, "API:RadioHistoryModel updateItem() 1");
     // but the updated one instead
-    mPlayLogModel->findItem(KTestArtist1, KTestTitle2, foundItem);
-    QVERIFY2((foundItem.title()==KTestTitle2), "API:RadioPlayLogModel updateItem() 2"); 
+    mhistoryModel->findItem(KTestArtist1, KTestTitle2, foundItem);
+    QVERIFY2((foundItem.title()==KTestTitle2), "API:RadioHistoryModel updateItem() 2"); 
 }
 
 /*!
  *
  */
-void TestRadioUiEngine::testPlayLogModelSetData()
+void TestRadioUiEngine::testHistoryModelSetData()
 {
-   RadioPlayLogItem foundItem;
-   mPlayLogModel->findItem(KTestArtist1, KTestTitle2, foundItem);
-   QVERIFY2(!foundItem.isFavorite(), "API:RadioPlayLogModel SetData() 1");
+   RadioHistoryItem foundItem;
+   mhistoryModel->findItem(KTestArtist1, KTestTitle2, foundItem);
+   QVERIFY2(!foundItem.isFavorite(), "API:RadioHistoryModel SetData() 1");
    
-   QModelIndex index = mPlayLogModel->index( 0, 0 );
+   QModelIndex index = mhistoryModel->index( 0, 0 );
    QString artistTitle = KTestArtist1 + KTestTitle2;
-   mPlayLogModel->setData( index, artistTitle, RadioPlayLogModel::SetFavoriteRole );
-   mPlayLogModel->findItem(KTestArtist1, KTestTitle2, foundItem);
+   mhistoryModel->setData( index, artistTitle, RadioHistoryModel::SetFavoriteRole );
+   mhistoryModel->findItem(KTestArtist1, KTestTitle2, foundItem);
    // item should be now favorite
-   QVERIFY2(foundItem.isFavorite(), "API:RadioPlayLogModel SetData() 2");    
+   QVERIFY2(foundItem.isFavorite(), "API:RadioHistoryModel SetData() 2");    
 }
 
 /*!
@@ -983,8 +983,8 @@
  */
 void TestRadioUiEngine::testAddRadioTextPlus()
 {   
-    mPlayLogModel->addRadioTextPlus( RtPlus::Artist, KTestArtist1 );
-    mPlayLogModel->addRadioTextPlus( RtPlus::Title, KTestTitle1 );
+    mhistoryModel->addRadioTextPlus( RtPlus::Artist, KTestArtist1 );
+    mhistoryModel->addRadioTextPlus( RtPlus::Title, KTestTitle1 );
 }
 
 /*!
@@ -992,22 +992,22 @@
  */
 void TestRadioUiEngine::testClearRadioTextPlus()
 {   
-    mPlayLogModel->clearRadioTextPlus();
+    mhistoryModel->clearRadioTextPlus();
 }
 
 /*!
- * Test RadioPlayLogModelItem API
+ * Test RadioHistoryModelItem API
  */
-void TestRadioUiEngine::testPlayLogModelItem()
+void TestRadioUiEngine::testHistoryModelItem()
 {
-    RadioPlayLogItem* item = new RadioPlayLogItem( KTestArtist3, KTestTitle3 );
+    RadioHistoryItem* item = new RadioHistoryItem( KTestArtist3, KTestTitle3 );
     item->setArtist( KTestArtist3 );
-    QVERIFY2(!(item->artist().compare(KTestArtist3)), "API:testPlayLogModelItem setArtist()");
+    QVERIFY2(!(item->artist().compare(KTestArtist3)), "API:testHistoryModelItem setArtist()");
     item->setTitle( KTestTitle3 );
-    QVERIFY2(!(item->title().compare(KTestTitle3)), "API:testPlayLogModelItem setTitle()");
-    QVERIFY2(!item->isFavorite(), "API:testPlayLogModelItem isFavorite() 1");
+    QVERIFY2(!(item->title().compare(KTestTitle3)), "API:testHistoryModelItem setTitle()");
+    QVERIFY2(!item->isFavorite(), "API:testHistoryModelItem isFavorite() 1");
     item->setFavorite();
-    QVERIFY2(item->isFavorite(), "API:testPlayLogModelItem isFavorite() 2");
+    QVERIFY2(item->isFavorite(), "API:testHistoryModelItem isFavorite() 2");
     item->setFavorite();
     delete item;
     item = NULL;
--- a/radioapp/radiouiengine/tsrc/t_radiouiengine.pro	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiouiengine/tsrc/t_radiouiengine.pro	Mon May 03 12:31:41 2010 +0300
@@ -38,7 +38,7 @@
     stub/inc \
     ../../../inc \
     ../inc \
-    ../../radioenginewrapper/commoninc \
+    ../../commoninc \
     ../../radioenginewrapper/inc \
     ../../radiopresetstorage/inc \
     ../../../../inc
--- a/radioapp/radiowidgets/inc/radiobannerlabel.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/inc/radiobannerlabel.h	Mon May 03 12:31:41 2010 +0300
@@ -21,7 +21,10 @@
 // System includes
 #include <HbLabel>
 
-class RadioBannerLabel : public HbLabel
+// User includes
+#include "radiowidgetsexport.h"
+
+class WIDGETS_DLL_EXPORT RadioBannerLabel : public HbLabel
 {
     Q_OBJECT
 
--- a/radioapp/radiowidgets/inc/radiocontextmenu.h	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-/*
-* 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:
-*
-*/
-
-#ifndef RADIOCONTEXTMENU_H_
-#define RADIOCONTEXTMENU_H_
-
-// System includes
-#include <HbMenu>
-
-// User includes
-#include "radiostation.h"
-
-// Forward declarations
-class RadioUiEngine;
-class RadioStation;
-class RadioXmlUiLoader;
-
-// Class declaration
-class RadioContextMenu : public HbMenu
-{
-    Q_OBJECT
-
-public:
-
-    RadioContextMenu( RadioUiEngine& uiEngine, QGraphicsItem* parent = 0 );
-
-    /*!
-     * Initializes the menu
-     * @param station Reference to the station that the menu handles
-     * @param uiLoader Reference to UI loader
-     */
-    void init( const RadioStation& station, RadioXmlUiLoader& uiLoader );
-
-private slots:
-
-    void rename();
-    void toggleFavorite();
-    void deleteStation();
-
-private:
-
-// from base class QGraphicsWidget
-
-    void resizeEvent( QGraphicsSceneResizeEvent* event );
-
-private: // data
-
-    /*!
-     * Reference to the UI engine
-     */
-    RadioUiEngine&  mUiEngine;
-
-    RadioStation    mStation;
-
-    QPointF         mPos;
-
-};
-
-#endif // RADIOCONTEXTMENU_H_
--- a/radioapp/radiowidgets/inc/radiofadinglabel.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/inc/radiofadinglabel.h	Mon May 03 12:31:41 2010 +0300
@@ -22,7 +22,10 @@
 #include <HbLabel>
 #include <HbEffect>
 
-class RadioFadingLabel : public HbLabel //TODO: Derive from HbLineEdit
+// User includes
+#include "radiowidgetsexport.h"
+
+class WIDGETS_DLL_EXPORT RadioFadingLabel : public HbLabel //TODO: Derive from HbLineEdit
 {
     Q_OBJECT
 
--- a/radioapp/radiowidgets/inc/radiofrequencyscanner.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/inc/radiofrequencyscanner.h	Mon May 03 12:31:41 2010 +0300
@@ -20,11 +20,17 @@
 
 // System includes
 #include <QObject>
+#include <QScopedPointer>
 
 // Forward declarations
 class HbProgressDialog;
 class RadioStation;
 class RadioUiEngine;
+class RadioXmlUiLoader;
+class RadioMainWindow;
+class RadioFrequencyStrip;
+class RadioStationCarousel;
+class RadioScannerEngine;
 
 // Class declaration
 class RadioFrequencyScanner : public QObject
@@ -33,9 +39,10 @@
 
 public:
 
-    RadioFrequencyScanner( RadioUiEngine& uiEngine, QObject* parent = 0 );
+    RadioFrequencyScanner( RadioUiEngine& uiEngine, QObject* parent );
+    ~RadioFrequencyScanner();
 
-    void startScanning();
+    void startScanning( RadioXmlUiLoader& uiLoader );
 
 signals:
 
@@ -43,8 +50,14 @@
 
 private slots:
 
+    void delayedStart();
     void updateScanAndSaveProgress( const RadioStation& station );
+    void continueScanning();
     void scanAndSavePresetsCancelled();
+    void restoreUiControls();
+
+private:
+
     void scanAndSavePresetsFinished();
 
 private: // data
@@ -54,6 +67,10 @@
      */
     RadioUiEngine&      mUiEngine;
 
+    bool                mInTuningView;
+
+    QScopedPointer<RadioScannerEngine> mScannerEngine;
+
     /**
      * Scanning progress note
      * Own.
@@ -65,10 +82,8 @@
      */
     uint                mChannelCount;
 
-    /**
-     * Low frequency band edge. The lowest valid frequency at the current region
-     */
-    uint                mMinFrequency;
+    int                 mStripScrollTime;
+    int                 mCarouselScrollTime;
 
 };
 
--- a/radioapp/radiowidgets/inc/radiofrequencystrip.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/inc/radiofrequencystrip.h	Mon May 03 12:31:41 2010 +0300
@@ -23,10 +23,12 @@
 #include <QHash>
 #include <HbIcon>
 #include <HbEffect>
+#include <QColor>
 
 // User includes
 #include "radiostripbase.h"
 #include "radio_global.h"
+#include "radiowidgetsexport.h"
 
 // Forward declarations
 class RadioUiEngine;
@@ -35,17 +37,9 @@
 class HbPushButton;
 class QTimer;
 
-const int KOneHertz = KFrequencyMultiplier;
-const int KHalfHertz = KOneHertz / 2;
-const int KOneTabDistance = 15;
-const uint KOneTabInHz = 0.2 * KOneHertz;
-const qreal KPixelInHz = KOneTabInHz / KOneTabDistance;
-//const int KCharWidth = 8;                  // TODO: Remove hardcoding
-const int KWidth = KOneTabDistance * 5;
-const int KHeight = 50;                 //TODO: Remove hardcoding
 
 // Class declaration
-class RadioFrequencyStrip : public RadioStripBase
+class WIDGETS_DLL_EXPORT RadioFrequencyStrip : public RadioStripBase
 {
     Q_OBJECT
     Q_PROPERTY( HbIcon leftButtonIcon READ leftButtonIcon WRITE setLeftButtonIcon )
@@ -55,11 +49,7 @@
 
 public:
 
-    RadioFrequencyStrip( uint minFrequency,
-                         uint maxFrequency,
-                         uint stepSize,
-                         uint currentFrequency,
-                         RadioUiEngine* engine = 0 );
+    RadioFrequencyStrip( RadioUiEngine* engine = 0 );
 
     void setLeftButtonIcon( const HbIcon& leftButtonIcon );
     HbIcon leftButtonIcon() const;
@@ -79,7 +69,8 @@
     void favoriteChanged( const RadioStation& station );
     void stationAdded( const RadioStation& station );
     void stationRemoved( const RadioStation& station );
-    void setFrequency( const uint frequency, int commandSender = 0 );
+    void setFrequency( const uint frequency, int reason = 0 );
+    void setScanningMode( bool isScanning );
 
 signals:
 
@@ -107,6 +98,7 @@
 
     void resizeEvent ( QGraphicsSceneResizeEvent* event );
     void showEvent( QShowEvent* event );
+    void changeEvent( QEvent* event );
 
 // from base class HbScrollArea
 
@@ -164,13 +156,15 @@
 
     };
 
+    RadioUiEngine*              mUiEngine;
+
     uint                        mMinFrequency;
 
     uint                        mMaxFrequency;
 
     uint                        mFrequencyStepSize;
 
-    RadioUiEngine*              mEngine;
+    uint                        mFrequency;
 
     QGraphicsPixmapItem*        mSelectorImage;
 
@@ -180,8 +174,6 @@
 
     qreal                       mSelectorPos;
 
-    uint                        mFrequency;
-
     QList<RadioFrequencyItem*>  mFrequencyItems;
 
     bool                        mFavoriteSelected;
@@ -213,6 +205,8 @@
 
     bool                        mIsPanGesture;
 
+    QColor                      mForegroundColor;
+
 };
 
 #endif // FREQUENCYSTRIP_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/inc/radiohistoryview.h	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,69 @@
+/*
+* 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:
+*
+*/
+
+#ifndef RADIOHISTORYVIEW_H
+#define RADIOHISTORYVIEW_H
+
+// User includes
+#include "radioviewbase.h"
+#include "radiowidgetsexport.h"
+
+// Forward declarations
+class RadioXmlUiLoader;
+class HbListView;
+class HbAction;
+class RadioStationFilterModel;
+class HbAbstractViewItem;
+
+// Class declaration
+class WIDGETS_DLL_EXPORT RadioHistoryView : public RadioViewBase
+{
+    Q_OBJECT
+
+public:
+
+    explicit RadioHistoryView();
+
+private slots:
+
+    void deckButtonPressed();
+    void clearList();
+    void updateVisibilities();
+    void listItemClicked( const QModelIndex& index );
+    void listItemLongPressed( HbAbstractViewItem* item, const QPointF& coords );
+
+private:
+
+// from base class RadioViewBase
+
+    void init( RadioXmlUiLoader* uiLoader, RadioMainWindow* mainWindow );
+    void setOrientation();
+
+// New functions
+
+    void showContextMenu( const QModelIndex& index );
+
+private: //data
+
+    HbListView*                 mHistoryList;
+    HbAction*                   mAllSongsButton;
+    HbAction*                   mTaggedSongsButton;
+    RadioStationFilterModel*    mFilterModel;
+
+};
+
+#endif // RADIOHISTORYVIEW_H
--- a/radioapp/radiowidgets/inc/radiomainwindow.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/inc/radiomainwindow.h	Mon May 03 12:31:41 2010 +0300
@@ -23,8 +23,7 @@
 #include <HbEffect>
 #include <QPointer>
 
-//#define QT_SHAREDPOINTER_TRACK_POINTERS // Debugging support for QSharedPointer
-#include <QSharedPointer>
+#include <QScopedPointer>
 
 // User includes
 #include "radiowidgetsexport.h"
@@ -34,11 +33,11 @@
 class RadioUiEngine;
 class HbVolumeSliderPopup;
 
-typedef QSharedPointer<HbVolumeSliderPopup> VolumeSliderPtr;
+typedef QScopedPointer<HbVolumeSliderPopup> VolumeSliderPtr;
 
 /**
  * QPointer is used to store the views because it tracks the deletion of the object and nulls
- * the reference. Transient views like RadioWizardView and RadioPlayLogView are destroyed after they are closed
+ * the reference. Transient view like RadioHistoryView is destroyed after they are closed
  * and QPointer will notice it.
  */
 typedef QPointer<RadioViewBase> ViewPtr;
@@ -71,17 +70,15 @@
 
     void activateTuningView();
 
-    void activateWizardView();
-
     void activateStationsView();
 
-    void activatePlayLogView();
+    void activateHistoryView();
 
 private slots:
 
     void updateOrientation( Qt::Orientation orientation );
     void showVolumeLevel( int volume );
-    void headsetStatusChanged( bool connected );
+    void updateAntennaStatus( bool connected );
 
 private:
 
@@ -112,16 +109,10 @@
     ViewPtr         mStationsView;
 
     /**
-     * Wizard view
+     * Play history view
      * Own.
      */
-    ViewPtr         mWizardView;
-
-    /**
-     * Play log view
-     * Own.
-     */
-    ViewPtr         mPlayLogView;
+    ViewPtr         mHistoryView;
 
     /**
      * Pointer to the volume slider
--- a/radioapp/radiowidgets/inc/radioplaylogview.h	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
-* 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:
-*
-*/
-
-#ifndef RADIOPLAYLOGVIEW_H
-#define RADIOPLAYLOGVIEW_H
-
-// User includes
-#include "radioviewbase.h"
-#include "radiowidgetsexport.h"
-
-// Forward declarations
-class RadioXmlUiLoader;
-class HbListView;
-class HbAction;
-class RadioStationFilterModel;
-class HbAbstractViewItem;
-
-// Class declaration
-class WIDGETS_DLL_EXPORT RadioPlayLogView : public RadioViewBase
-{
-    Q_OBJECT
-
-public:
-
-    explicit RadioPlayLogView( RadioXmlUiLoader* uiLoader );
-
-private slots:
-
-    void deckButtonPressed();
-    void clearList();
-    void updateVisibilities();
-    void listItemClicked( const QModelIndex& index );
-    void listItemLongPressed( HbAbstractViewItem* item, const QPointF& coords );
-
-private:
-
-// from base class RadioViewBase
-
-    void init( RadioMainWindow* aMainWindow, RadioStationModel* aModel );
-    void setOrientation();
-
-// New functions
-
-    void showContextMenu( const QModelIndex& index );
-
-private: //data
-
-    HbListView*         mPlayLogList;
-    HbAction*           mAllSongsButton;
-    HbAction*           mFavoritesButton;
-    RadioStationFilterModel*   mFilterModel;
-
-};
-
-#endif // RADIOPLAYLOGVIEW_H
--- a/radioapp/radiowidgets/inc/radiostationcarousel.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/inc/radiostationcarousel.h	Mon May 03 12:31:41 2010 +0300
@@ -24,28 +24,59 @@
 #include <QAbstractItemModel>
 #include <HbIcon>
 
+// User includes
+#include "radiowidgetsexport.h"
+
 // Forward declarations
 class RadioUiEngine;
 class RadioStation;
 class RadioStationItem;
 class RadioStationCarousel;
-class RadioStationFilterModel;
+class RadioStationModel;
 class RadioFadingLabel;
+class QTimeLine;
 
 // Class declaration
-class RadioStationCarousel : public HbGridView
+class ScanningHelper : public QObject
 {
     Q_OBJECT
-    Q_PROPERTY(HbIcon background READ background WRITE setBackground)
-    Q_PROPERTY(HbIcon favoriteIcon READ favoriteIcon WRITE setFavoriteIcon)
-    Q_PROPERTY(HbIcon nonFavoriteIcon READ nonFavoriteIcon WRITE setNonFavoriteIcon)
+
+public:
+
+    ScanningHelper( RadioStationCarousel& carousel );
+
+    void start();
+
+private slots:
+
+    void startSlide();
+    void startNumberScroll();
+    void numberScrollUpdate( int value );
 
 public:
 
-    RadioStationCarousel( RadioUiEngine& uiEngine, QGraphicsItem* parent = 0 );
+    RadioStationCarousel&   mCarousel;
+    uint                    mCurrentFrequency;
+    uint                    mPreviousFrequency;
+    RadioStationItem*       mStationItem;
+    QTimeLine*              mNumberScrollingTimeLine;
+    QModelIndex             mModelIndex;
+
+};
 
-    void setBackground( const HbIcon& background );
-    HbIcon background() const;
+// Class declaration
+class WIDGETS_DLL_EXPORT RadioStationCarousel : public HbGridView
+{
+    Q_OBJECT
+    Q_PROPERTY(HbIcon favoriteIcon READ favoriteIcon WRITE setFavoriteIcon)
+    Q_PROPERTY(HbIcon nonFavoriteIcon READ nonFavoriteIcon WRITE setNonFavoriteIcon)
+    Q_PROPERTY( int autoScrollTime READ autoScrollTime WRITE setAutoScrollTime )
+
+    friend class ScanningHelper;
+
+public:
+
+    RadioStationCarousel( RadioUiEngine* uiEngine = 0 );
 
     void setFavoriteIcon( const HbIcon& favoriteIcon );
     HbIcon favoriteIcon() const;
@@ -53,19 +84,33 @@
     void setNonFavoriteIcon( const HbIcon& nonFavoriteIcon );
     HbIcon nonFavoriteIcon() const;
 
-    RadioUiEngine& uiEngine();
+    void setAutoScrollTime( const int time );
+    int autoScrollTime() const;
+
+    void init( RadioUiEngine* uiEngine );
+
+    void setStationModel( RadioStationModel* stationModel );
+
+    RadioUiEngine* uiEngine();
 
     bool isAntennaAttached() const;
 
+    void setScanningMode( bool scanning );
+    bool isInScanningMode() const;
+
+    void cleanRdsData();
+    void animateNewStation( const RadioStation& station );
+    void setItemVisibility( bool visible );
+
 signals:
 
     void frequencyChanged( uint frequency, int commandSender );
+    void scanAnimationFinished();
 
 public slots:
 
     void setFrequency( uint frequency );
-    void setSeekingText();
-    void updateHeadsetStatus( bool connected );
+    void updateAntennaStatus( bool connected );
 
 private slots:
 
@@ -78,6 +123,7 @@
     void updateFrequencies();
     void updateLoopedPos();
     void radioTextPlusCheckEnded();
+    void delayedScroll();
 
 #ifdef USE_DEBUGGING_CONTROLS
     void setRdsAvailable( bool available );
@@ -87,21 +133,19 @@
 
 // from base class QGraphicsItem
 
-    void paint( QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget );
-
     void mouseMoveEvent( QGraphicsSceneMouseEvent* event );
     void mouseReleaseEvent( QGraphicsSceneMouseEvent* event );
     void resizeEvent( QGraphicsSceneResizeEvent* event );
 
     RadioStationItem* currentStationItem();
 
-    RadioStationFilterModel* filterModel() const;
+    RadioStationModel* stationModel() const;
 
     void scrollToIndex( const QModelIndex& index, int time );
 
 private: // data
 
-    RadioUiEngine&          mUiEngine;
+    RadioUiEngine*          mUiEngine;
 
     bool                    mAntennaAttached;
 
@@ -115,13 +159,16 @@
 
     QMap<uint,QModelIndex>  mModelIndexes;
 
-    HbIcon                  mBackground;
     HbIcon                  mFavoriteIcon;
     HbIcon                  mNonFavoriteIcon;
 
     QTimer*                 mRadioTextTimer;
 
     QString                 mRadioTextHolder;
+    
+    int                     mScrollPos;
+
+    ScanningHelper*         mScanningHelper;
 	
 #ifdef USE_DEBUGGING_CONTROLS
     RadioFadingLabel*       mRdsLabel;
--- a/radioapp/radiowidgets/inc/radiostationcontrolwidget.h	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/*
-* 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:
-*
-*/
-
-#ifndef RADIOSTATIONCONTROLWIDGET_H
-#define RADIOSTATIONCONTROLWIDGET_H
-
-// System includes
-#include <HbWidget>
-#include <HbIcon>
-#include <HbEffect>
-
-// Forward declarations
-class RadioUiEngine;
-class HbPushButton;
-class RadioMainWindow;
-
-// Class declaration
-class RadioStationControlWidget : public HbWidget
-{
-    Q_OBJECT
-    Q_PROPERTY(HbIcon background READ background WRITE setBackground)
-    Q_PROPERTY(QString tagBtnText READ tagBtnText WRITE setTagBtnText)
-    Q_PROPERTY(QString recognizeBtnText READ recognizeBtnText WRITE setRecognizeBtnText)
-    Q_PROPERTY(QString stationsBtnText READ stationsBtnText WRITE setStationsBtnText)
-
-public:
-
-    RadioStationControlWidget( RadioUiEngine& uiEngine, QGraphicsItem* parent = 0 );
-    ~RadioStationControlWidget();
-
-    void setBackground( const HbIcon& background );
-    HbIcon background() const;
-    
-    void setTagBtnText( const QString& text );
-    QString tagBtnText() const;
-
-    void setRecognizeBtnText( const QString& text );
-    QString recognizeBtnText() const;
-
-    void setStationsBtnText( const QString& text );
-    QString stationsBtnText() const;
-
-    void init( RadioMainWindow* aMainWindow );
-
-private slots:
-
-    void updateStationsButton();
-    void recognizePressed();
-    void effectFinished( HbEffect::EffectStatus status );
-    void disableTagButton();
-    void enableTagButton();
-
-private:
-
-// from base class QGraphicsItem
-
-    void paint( QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget );
-    
-// New functions
-
-private: // data
-    
-    RadioUiEngine&      mUiEngine;
-
-    HbIcon              mBackground;
-    HbPushButton*       mTagSongButton;
-    HbPushButton*       mStationsViewButton;
-    HbPushButton*       mRecognizeButton;
-
-    RadioMainWindow*    mMainWindow;
-
-};
-
-#endif // RADIOSTATIONCONTROLWIDGET_H
--- a/radioapp/radiowidgets/inc/radiostationitem.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/inc/radiostationitem.h	Mon May 03 12:31:41 2010 +0300
@@ -46,11 +46,9 @@
 // New functions
 
     uint frequency() const;
-
     void update( const RadioStation* station = 0 );
-
     void setFrequency( uint frequency );
-    void setSeekingText();
+    void cleanRdsData();
 
 private slots:
 
@@ -62,6 +60,9 @@
 
     RadioStationCarousel* carousel();
 
+    QString parseFrequency( const uint frequency );
+    QString nameOrFrequency( const RadioStation& station, uint frequency = 0 );
+
 private: // data
 
     RadioStationCarousel&   mCarousel;
--- a/radioapp/radiowidgets/inc/radiostationsview.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/inc/radiostationsview.h	Mon May 03 12:31:41 2010 +0300
@@ -20,6 +20,7 @@
 
 // System includes
 #include <HbIcon>
+#include <QScopedPointer>
 
 // User includes
 #include "radioviewbase.h"
@@ -45,7 +46,8 @@
 
 public:
 
-    explicit RadioStationsView( RadioXmlUiLoader* uiLoader );
+    explicit RadioStationsView();
+    ~RadioStationsView();
 
     void setNowPlayingIcon( const HbIcon& nowPlayingIcon );
     HbIcon nowPlayingIcon() const;
@@ -57,17 +59,20 @@
 
     void listItemClicked( const QModelIndex& index );
     void listItemLongPressed( HbAbstractViewItem* item, const QPointF& coords );
-    void updateHeadsetStatus( bool connected );
+    void updateAntennaStatus( bool connected );
     void updateCurrentStation();
     void deckButtonPressed();
-    void startScanAndSavePresets();
+    void startScanning();
     void updateControlVisibilities();
+    void rename();          //contextmenu
+    void toggleFavorite();  //contextmenu
+    void deleteStation();   //contextmenu
 
 private:
 
 // from base class RadioViewBase
 
-    void init( RadioMainWindow* aMainWindow, RadioStationModel* aModel );
+    void init( RadioXmlUiLoader* uiLoader, RadioMainWindow* mainWindow );
 
 // from base class QGraphicsWidget
 
@@ -77,25 +82,26 @@
 
     void initListView();
 
-    void updateHeading();
-
 private: //data
 
-    RadioStationFilterModel*    mFilterModel;
+    RadioStationModel*              mModel;
+
+    RadioStationFilterModel*        mFilterModel;
 
-    HbAction*                   mScanStationsAction;
-    HbAction*                   mRemoveAllPresetsAction;
+    HbAction*                       mScanStationsAction;
+    HbAction*                       mClearListAction;
 
-    HbListView*                 mStationsList;
+    HbListView*                     mStationsList;
 
-    RadioBannerLabel*           mHeadingBanner;
+    RadioBannerLabel*               mHeadingBanner;
+
+    HbAction*                       mFavoritesButton;
+    HbAction*                       mLocalStationsButton;
 
-    HbAction*                   mFavoritesButton;
-    HbAction*                   mLocalStationsButton;
+    HbIcon                          mFavoriteIcon;
+    HbIcon                          mNowPlayingIcon;
 
-    HbIcon                      mFavoriteIcon;
-
-    HbIcon                      mNowPlayingIcon;
+    QScopedPointer<RadioStation>    mSelectedStation;
 
 };
 
--- a/radioapp/radiowidgets/inc/radiostripbase.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/inc/radiostripbase.h	Mon May 03 12:31:41 2010 +0300
@@ -29,15 +29,12 @@
 class RadioStripBase : public HbScrollArea
 {
     Q_OBJECT
-    Q_PROPERTY( HbIcon background READ background WRITE setBackground )
     Q_PROPERTY( int autoScrollTime READ autoScrollTime WRITE setAutoScrollTime )
 
 public:
 
     virtual ~RadioStripBase();
 
-    void setBackground( const HbIcon& background );
-    HbIcon background() const;
     void setAutoScrollTime( const int time );
     int autoScrollTime() const;
 
@@ -123,10 +120,6 @@
     QList<QGraphicsItem*>   mItemAtSlot;
     QList<int>              mIndexAtSlot; // Can be bigger than rowcount if cyclic is used
 
-    HbIcon                  mBackground;
-
-    QGraphicsPixmapItem*    mBackgroundImage;
-
 };
 
 
--- a/radioapp/radiowidgets/inc/radiotuningview.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/inc/radiotuningview.h	Mon May 03 12:31:41 2010 +0300
@@ -29,6 +29,8 @@
 class RadioStationModel;
 class HbPushButton;
 class RadioXmlUiLoader;
+class RadioFrequencyScanner;
+class RadioStationCarousel;
 
 // Class declaration
 class WIDGETS_DLL_EXPORT RadioTuningView : public RadioViewBase
@@ -37,23 +39,36 @@
 
 public:
 
-    explicit RadioTuningView( RadioXmlUiLoader* uiLoader );
+    explicit RadioTuningView();
+
+    void setScanningMode( bool scanning );
 
 private slots:
 
     void toggleFavorite();
+    void startScanning();
+    void scanningFinished();
+    void seekingStarted();
+    void seekingFinished();
+    void updateAntennaStatus( bool connected );
+    void updateAudioRoute( bool loudspeaker );
+    void buttonPressed();
+    void removeInfoText();
 
 private:
 
 // from base class RadioViewBase
 
-    void init( RadioMainWindow* aMainWindow, RadioStationModel* aModel );
+    void init( RadioXmlUiLoader* uiLoader, RadioMainWindow* mainWindow );
     void setOrientation();
 
 // New functions
 
 private: // data
 
+    RadioFrequencyScanner*        mFrequencyScanner;
+    RadioStationCarousel*         mCarousel;
+
     };
 
 #endif // _TUNINGVIEW_H_
--- a/radioapp/radiowidgets/inc/radiouiutilities.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/inc/radiouiutilities.h	Mon May 03 12:31:41 2010 +0300
@@ -18,7 +18,12 @@
 #ifndef _RADIOUIUTILITIES_H_
 #define _RADIOUIUTILITIES_H_
 
+// System includes
+#include <QPointer>
+
 // Forward declarations
+class RadioFrequencyStrip;
+class RadioStationCarousel;
 
 struct EffectInfo
 {
@@ -44,11 +49,25 @@
 
     static bool addEffects( QEffectList list );
 
+    static RadioFrequencyStrip* frequencyStrip();
+    static RadioStationCarousel* carousel();
+
+    static void setFrequencyStrip( RadioFrequencyStrip* frequencyStrip );
+    static void setCarousel( RadioStationCarousel* carousel );
+
 private:
 
     RadioUiUtilities();
     ~RadioUiUtilities();
 
+    static RadioUiUtilities& instance();
+
+private: // data
+
+    QPointer<RadioFrequencyStrip> mFrequencyStrip;
+
+    QPointer<RadioStationCarousel> mCarousel;
+
 };
 
 
--- a/radioapp/radiowidgets/inc/radioviewbase.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/inc/radioviewbase.h	Mon May 03 12:31:41 2010 +0300
@@ -21,8 +21,7 @@
 // System includes
 #include <HbView>
 
-//#define QT_SHAREDPOINTER_TRACK_POINTERS // Debugging support for QSharedPointer
-#include <QSharedPointer>
+#include <QScopedPointer>
 
 // User includes
 
@@ -48,11 +47,11 @@
     Q_DISABLE_COPY( RadioViewBase )
 
 public:
-    explicit RadioViewBase( RadioXmlUiLoader* uiLoader, bool transient = true );
+    explicit RadioViewBase( bool transient = true );
 
     virtual ~RadioViewBase();
 
-    virtual void init( RadioMainWindow* aMainWindow, RadioStationModel* aModel );
+    virtual void init( RadioXmlUiLoader* uiLoader, RadioMainWindow* mainWindow );
 
     bool isTransient() const;
 
@@ -70,14 +69,14 @@
 
     void initBackAction();
     
-    HbAction* addMenuItem( const QString& aTitle, QObject* aRecipient, const char* aSlot );
-
     void connectCommonMenuItem( int menuItem );
 
     void connectXmlElement( const char* name, const char* signal, QObject* receiver, const char* slot );
 
     void connectViewChangeMenuItem( QString name, const char* slot );
 
+    void loadSection( const QString& docml, const QString& section );
+
 private:
 
     virtual void setOrientation();
@@ -88,35 +87,29 @@
      * Pointer to the main window.
      * Not own.
      */
-    RadioMainWindow*                	mMainWindow;
-
-    /**
-     * Pointer to the radio data model.
-     * Not own.
-     */
-    RadioStationModel*                  mModel;
+    RadioMainWindow*                    mMainWindow;
 
     /**
      * Pointer to the XML UI (DocML) loader
      * Own.
      */
-    QSharedPointer<RadioXmlUiLoader>	mUiLoader;
+    QScopedPointer<RadioXmlUiLoader>    mUiLoader;
 
     /**
      * Flag indicating whether or not the view is transient
      * Transient views are deleted when they are hidden.
      */
-    bool                            	mTransientView;
+    bool                                mTransientView;
 
     /**
      * Route audio to Loudspeaker/Headset menu item
      */
-    HbAction*                       	mUseLoudspeakerAction;
+    HbAction*                           mUseLoudspeakerAction;
 
     /**
      * View orientation.
      */
-    Qt::Orientation                 	mOrientation;
+    Qt::Orientation                     mOrientation;
 
 };
 
--- a/radioapp/radiowidgets/inc/radiowizardview.h	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-/*
-* 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:
-*
-*/
-
-#ifndef RADIOWIZARDVIEW_H_
-#define RADIOWIZARDVIEW_H_
-
-// User includes
-#include "radioviewbase.h"
-#include "radiowidgetsexport.h"
-
-// Forward declarations
-class RadioMainWindow;
-class HbLabel;
-class HbPushButton;
-class HbListView;
-class RadioBannerLabel;
-
-// Class declaration
-class WIDGETS_DLL_EXPORT RadioWizardView : public RadioViewBase
-    {
-    Q_OBJECT
-
-public:
-
-    explicit RadioWizardView( RadioXmlUiLoader* uiLoader );
-
-private:
-
-// from base class RadioViewBase
-
-    void init( RadioMainWindow* aMainWindow, RadioStationModel* aModel );
-
-// from base class QGraphicsWidget
-
-    void showEvent( QShowEvent* event );
-
-private slots:
-
-    void saveSelectedAsFavorites();
-    void listItemClicked( const QModelIndex& index );
-    void engineStatusChanged( bool radioIsOn );
-
-private:
-
-    void setDoneAction();
-    void startScanning();
-
-private: // data
-
-    HbListView*        mList;
-    RadioBannerLabel*  mBannerLabel;
-    bool               mStartScanningRequested;
-
-    };
-
-#endif // RADIOWIZARDVIEW_H_
--- a/radioapp/radiowidgets/inc/radioxmluiloader.h	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/inc/radioxmluiloader.h	Mon May 03 12:31:41 2010 +0300
@@ -22,89 +22,87 @@
 #include <HbDocumentLoader>
 
 // Constants
-#ifdef USE_LAYOUT_FROM_E_DRIVE
-    static const char* DOCML_TUNINGVIEW_FILE           = "e:/radiotest/layout/tuningview.docml";
-    static const char* DOCML_STATIONSVIEW_FILE         = "e:/radiotest/layout/stationsview.docml";
-    static const char* DOCML_WIZARDVIEW_FILE           = "e:/radiotest/layout/wizardview.docml";
-    static const char* DOCML_PLAYLOGVIEW_FILE          = "e:/radiotest/layout/playlogview.docml";
-#else
-    static const char* DOCML_TUNINGVIEW_FILE           = ":/layout/tuningview.docml";
-    static const char* DOCML_STATIONSVIEW_FILE         = ":/layout/stationsview.docml";
-    static const char* DOCML_WIZARDVIEW_FILE           = ":/layout/wizardview.docml";
-    static const char* DOCML_PLAYLOGVIEW_FILE          = ":/layout/playlogview.docml";
-#endif
+
+namespace DOCML
+{
+
+    #ifdef USE_LAYOUT_FROM_E_DRIVE
+        static const char* FILE_TUNINGVIEW              = "e:/radiotest/layout/tuningview.docml";
+        static const char* FILE_STATIONSVIEW            = "e:/radiotest/layout/stationsview.docml";
+        static const char* FILE_HISTORYVIEW             = "e:/radiotest/layout/historyview.docml";
+    #else
+        static const char* FILE_TUNINGVIEW              = ":/layout/tuningview.docml";
+        static const char* FILE_STATIONSVIEW            = ":/layout/stationsview.docml";
+        static const char* FILE_HISTORYVIEW             = ":/layout/historyview.docml";
+    #endif
 
-// XML UI definitions
-static const char* DOCML_NAME_VIEW                 = "view";
-static const char* DOCML_LAYOUT_PORTRAIT           = "portrait";
-static const char* DOCML_LAYOUT_LANDSCAPE          = "landscape";
-static const char* DOCML_NAME_EXITACTION           = "mExitAction";
-static const char* DOCML_NAME_LOUDSPEAKERACTION    = "mLoudspeakerAction";
+    // Generic XML UI definitions
+    static const char* NAME_VIEW                        = "view";
+    static const char* SECTION_PORTRAIT                 = "portrait";
+    static const char* SECTION_LANDSCAPE                = "landscape";
+    static const char* NAME_LOUDSPEAKER_ACTION          = "loudspeaker_action";
 
-// RadioTuningView
-static const char* DOCML_NAME_FAVORITEACTION       = "tv:FavoriteAction";
-static const char* DOCML_NAME_PLAYLOGVIEWACTION    = "tv:PlayLogViewAction";
-static const char* DOCML_NAME_STATIONSVIEWACTION   = "tv:StationsViewAction";
-static const char* DOCML_NAME_STATIONCAROUSEL      = "tv:mStationCarousel";
-static const char* DOCML_NAME_STATIONCONTROLWIDGET = "tv:mStationControlWidget";
-static const char* DOCML_NAME_FREQUENCYSTRIP       = "tv:mFrequencyStrip";
+    // RadioTuningView
+    static const char* TV_NAME_HISTORYVIEW_ACTION       = "tv:historyview_action";
+    static const char* TV_NAME_STATION_CAROUSEL         = "tv:station_carousel";
+    static const char* TV_NAME_FREQUENCY_STRIP          = "tv:frequency_strip";
+    static const char* TV_NAME_STATIONS_BUTTON          = "tv:stations_button";
+    static const char* TV_NAME_SCAN_BUTTON              = "tv:scan_button";
+    static const char* TV_NAME_SPEAKER_BUTTON           = "tv:loudspeaker_button";
+    static const char* TV_SECTION_NO_ANTENNA            = "tv:no_antenna";
+    static const char* TV_SECTION_SEEKING               = "tv:seeking";
+    static const char* TV_SECTION_SCANNING              = "tv:scanning";
+    static const char* TV_SECTION_NO_FAVORITES          = "tv:no_favorites";
+    static const char* TV_SECTION_NORMAL                = "tv:normal";
 
-// RadioStationsView
-static const char* DOCML_NAME_HEADINGBANNER        = "sv:mHeadingBanner";
-static const char* DOCML_NAME_STATIONSLIST         = "sv:mStationsList";
-static const char* DOCML_NAME_FAVORITESBUTTON      = "sv:FavoritesButton";
-static const char* DOCML_NAME_LOCALSBUTTON         = "sv:LocalStationsButton";
-static const char* DOCML_NAME_TUNINGVIEWACTION     = "sv:mTuningViewAction";
-static const char* DOCML_NAME_WIZARDVIEWACTION     = "sv:mWizardViewAction";
-static const char* DOCML_NAME_SCANSTATIONSACTION   = "sv:mScanStationsAction";
-static const char* DOCML_NAME_REMOVESTATIONSACTION = "sv:mRemoveAllStations";
-static const char* DOCML_NAME_SCANBUTTON           = "sv:mScanButton";
+    // RadioStationsView
+    static const char* SV_NAME_HEADING_BANNER           = "sv:heading_banner";
+    static const char* SV_NAME_STATIONS_LIST            = "sv:stations_list";
+    static const char* SV_NAME_FAVORITES_BUTTON         = "sv:favorite_stations_button";
+    static const char* SV_NAME_LOCALS_BUTTON            = "sv:local_stations_button";
+    static const char* SV_NAME_SCAN_ACTION              = "sv:scan_action";
+    static const char* SV_NAME_CLEAR_LIST_ACTION        = "sv:clear_list_action";
+    static const char* SV_NAME_SCAN_BUTTON              = "sv:scan_button";
 
-// RadioStationsView Context Menu
-static const char* DOCML_NAME_CONTEXT_MENU         = "sv:mContextMenu";
-static const char* DOCML_NAME_CONTEXT_RENAME       = "sv:mRenameStationAction";
-static const char* DOCML_NAME_CONTEXT_FAVORITE     = "sv:mFavoriteAction";
-static const char* DOCML_NAME_CONTEXT_DELETE       = "sv:mDeleteStationAction";
-
-// Station Info Widget
-static const char* DOCML_NAME_INFO_FIRST_ROW       = "tv:InfoFirstRow";
-static const char* DOCML_NAME_INFO_SECOND_ROW      = "tv:InfoSecondRow";
-static const char* DOCML_NAME_INFO_THIRD_ROW       = "tv:InfoThirdRow";
-static const char* DOCML_NAME_INFO_FOURTH_ROW      = "tv:InfoFourthRow";
+    static const char* SV_SECTION_SHOW_ALL_STATIONS     = "show_all_stations";
+    static const char* SV_SECTION_SHOW_FAVORITES        = "show_favorites";
+    static const char* SV_SECTION_SHOW_SCAN_TEXT        = "show_scan_text";
+    static const char* SV_SECTION_HIDE_SCAN_TEXT        = "hide_scan_text";
 
-// Station Control Widget
-static const char* DOCML_NAME_STATIONSVIEWBUTTON   = "tv:mStationsViewButton";
-static const char* DOCML_NAME_TAGBUTTON            = "tv:mTagButton";
-static const char* DOCML_NAME_RECOGNIZEBUTTON      = "tv:mRecognizeButton";
+    // RadioStationsView Context Menu
+    static const char* NAME_CONTEXT_MENU                = "sv:context_menu";
+    static const char* NAME_CONTEXT_RENAME              = "sv:rename_action";
+    static const char* NAME_CONTEXT_FAVORITE            = "sv:toggle_favorite_action";
+    static const char* NAME_CONTEXT_DELETE              = "sv:delete_action";
+    static const char* NAME_INPUT_QUERY                 = "sv:station_name_query";
 
-// Wizard View
-static const char* DOCML_NAME_WV_STATIONSVIEWACTION = "wv:mStationsViewAction";
-static const char* DOCML_NAME_WV_HEADINGBANNER     = "wv:mHeadingBanner";
-static const char* DOCML_NAME_WV_STATIONSLIST      = "wv:mStationsList";
-static const char* DOCML_NAME_WV_MARKALLBUTTON     = "wv:mMarkAllButton";
-static const char* DOCML_NAME_WV_UNMARKALLBUTTON   = "wv:mUnMarkAllButton";
-static const char* DOCML_NAME_WV_DONEBUTTON        = "wv:mDoneButton";
+    // Station Carousel
+    static const char* NAME_INFO_FIRST_ROW              = "tv:InfoFirstRow";
+    static const char* NAME_INFO_SECOND_ROW             = "tv:InfoSecondRow";
+    static const char* NAME_INFO_THIRD_ROW              = "tv:InfoThirdRow";
+    static const char* NAME_INFO_FOURTH_ROW             = "tv:InfoFourthRow";
+    static const char* TV_NAME_INFO_TEXT                = "tv:info_text";
 
-// Play Log View
-static const char* DOCML_NAME_PLV_TUNINGVIEWACTION      = "plv:mTuningViewAction";
-static const char* DOCML_NAME_PLV_STATIONSVIEWACTION    = "plv:mStationsViewAction";
-static const char* DOCML_NAME_PLV_REMOVEALLACTION       = "plv:mRemoveAllAction";
-static const char* DOCML_NAME_PLAYLOGLIST               = "plv:mPlayLogList";
-static const char* DOCML_NAME_ALLSONGSBUTTON            = "plv:AllSongsButton";
-static const char* DOCML_NAME_FAVORITESONGSBUTTON       = "plv:FavoriteSongsButton";
+    // History View
+    static const char* HV_NAME_CLEAR_LIST_ACTION        = "hv:clear_list_action";
+    static const char* HV_NAME_HISTORY_LIST             = "hv:history_list";
+    static const char* HV_NAME_ALL_SONGS_BUTTON         = "hv:all_songs_button";
+    static const char* HV_NAME_TAGGED_SONGS_BUTTON      = "hv:tagged_songs_button";
+    static const char* HV_SECTION_SHOW_LIST             = "show_list";
+    static const char* HV_SECTION_HIDE_LIST             = "hide_list";
+    static const char* HV_SECTION_HISTORY_MODE          = "history_mode";
+    static const char* HV_SECTION_FAVORITE_MODE         = "favorite_mode";
 
-// Forward declarations
-class RadioMainWindow;
+}
 
 // Class declaration
 class RadioXmlUiLoader : public HbDocumentLoader
 {
-
 public:
 
-    RadioXmlUiLoader( RadioMainWindow& mainWindow );
+    RadioXmlUiLoader();
 
-    /**
+    /*!
      * Returns the requested widget casted to correct type
      *
      * @param name Name of the widget
@@ -116,7 +114,7 @@
         return qobject_cast<T*>( HbDocumentLoader::findWidget( name ) );
     }
 
-    /**
+    /*!
      * Returns the requested object casted to correct type
      *
      * @param name Name of the object
@@ -128,17 +126,6 @@
         return qobject_cast<T*>( HbDocumentLoader::findObject( name ) );
     }
 
-private:
-
-    QObject *createObject( const QString& type, const QString &name );
-
-private: // data
-
-    /*!
-     * Reference to the main window
-     */
-    RadioMainWindow& mMainWindow;
-
 };
 
 #endif // RADIOXMLUILOADER_H_
--- a/radioapp/radiowidgets/radiowidgets.pro	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/radiowidgets.pro	Mon May 03 12:31:41 2010 +0300
@@ -18,73 +18,51 @@
 
 TEMPLATE    = lib
 TARGET      = radiowidgets
-CONFIG      += dll
+CONFIG      += dll hb
 DEFINES     += BUILD_WIDGETS_DLL
-win32:DESTDIR = ../bin
-
-# Wrapper does not depend on QtGui or Orbit
-QT          = core gui
-CONFIG      += hb
-
-symbian: {
-    DEFINES += SYMBIAN
-    TARGET.EPOCALLOWDLLDATA = 1
-    TARGET.CAPABILITY = CAP_GENERAL_DLL
-}
 
 INCLUDEPATH += inc
 INCLUDEPATH += ../radiouiengine/inc
-INCLUDEPATH += ../radioenginewrapper/commoninc
+INCLUDEPATH += ../commoninc
 
-win32:LIBS += -L../bin
-
-LIBS += -lradiouiengine
+LIBS        += -lradiouiengine
 
 LOGGING_ENABLED:LIBS += -lradioenginewrapper
 
-DEPENDPATH += $$INCLUDEPATH src
-
-# $$_PRO_FILE_PWD_ points to the directory of the pro file
-MOC_DIR = $$_PRO_FILE_PWD_/tmp
+DEPENDPATH  += $$INCLUDEPATH src
 
 # Input
-HEADERS += radiowidgetsexport.h
-HEADERS += radiomainwindow.h
-HEADERS += radiouiutilities.h
-HEADERS += radioviewbase.h
-HEADERS += radioxmluiloader.h
-HEADERS += radiotuningview.h
-HEADERS += radiostripbase.h
-HEADERS += radiofrequencystrip.h
-HEADERS += radiofrequencyitem.h
-HEADERS += radiostationsview.h
-HEADERS += radiobannerlabel.h
-HEADERS += radiowizardview.h
-HEADERS += radiofrequencyscanner.h
-HEADERS += radiocontextmenu.h
-HEADERS += radiofadinglabel.h
-HEADERS += radiostationcarousel.h
-HEADERS += radiostationitem.h
-HEADERS += radiostationcontrolwidget.h
-HEADERS += radioplaylogview.h
+HEADERS     += radiowidgetsexport.h
+HEADERS     += radiomainwindow.h
+HEADERS     += radiouiutilities.h
+HEADERS     += radioviewbase.h
+HEADERS     += radioxmluiloader.h
+HEADERS     += radiotuningview.h
+HEADERS     += radiostripbase.h
+HEADERS     += radiofrequencystrip.h
+HEADERS     += radiofrequencyitem.h
+HEADERS     += radiostationsview.h
+HEADERS     += radiobannerlabel.h
+HEADERS     += radiofrequencyscanner.h
+HEADERS     += radiofadinglabel.h
+HEADERS     += radiostationcarousel.h
+HEADERS     += radiostationitem.h
+HEADERS     += radiohistoryview.h
 
-SOURCES += radiomainwindow.cpp
-SOURCES += radiouiutilities.cpp
-SOURCES += radioviewbase.cpp
-SOURCES += radioxmluiloader.cpp
-SOURCES += radiotuningview.cpp
-SOURCES += radiostripbase.cpp
-SOURCES += radiofrequencystrip.cpp
-SOURCES += radiofrequencyitem.cpp
-SOURCES += radiostationsview.cpp
-SOURCES += radiobannerlabel.cpp
-SOURCES += radiowizardview.cpp
-SOURCES += radiofrequencyscanner.cpp
-SOURCES += radiocontextmenu.cpp
-SOURCES += radiofadinglabel.cpp
-SOURCES += radiostationcarousel.cpp
-SOURCES += radiostationitem.cpp
-SOURCES += radiostationcontrolwidget.cpp
-SOURCES += radioplaylogview.cpp
+SOURCES     += radiomainwindow.cpp
+SOURCES     += radiouiutilities.cpp
+SOURCES     += radioviewbase.cpp
+SOURCES     += radioxmluiloader.cpp
+SOURCES     += radiotuningview.cpp
+SOURCES     += radiostripbase.cpp
+SOURCES     += radiofrequencystrip.cpp
+SOURCES     += radiofrequencyitem.cpp
+SOURCES     += radiostationsview.cpp
+SOURCES     += radiobannerlabel.cpp
+SOURCES     += radiofrequencyscanner.cpp
+SOURCES     += radiofadinglabel.cpp
+SOURCES     += radiostationcarousel.cpp
+SOURCES     += radiostationitem.cpp
+SOURCES     += radiohistoryview.cpp
 
-RESOURCES += res/fmradioui.qrc
+RESOURCES   += res/fmradioui.qrc
--- a/radioapp/radiowidgets/res/fmradioui.qrc	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/res/fmradioui.qrc	Mon May 03 12:31:41 2010 +0300
@@ -3,10 +3,7 @@
     <qresource>
         <file>layout/tuningview.docml</file>
         <file>layout/stationsview.docml</file>
-        <file>layout/wizardview.docml</file>
-        <file>layout/playlogview.docml</file>
-        <file>layout/radiostationcontrolwidget.css</file>
-        <file>layout/radiostationcontrolwidget.widgetml</file>
+        <file>layout/historyview.docml</file>
         <file>layout/radiostationitem.css</file>
         <file>layout/radiostationitem.widgetml</file>
     </qresource>
@@ -20,20 +17,24 @@
         <file>effects/slide_to_right.fxml</file>
         <file>effects/slide_from_right.fxml</file>
     </qresource>
-
+    
     <qresource>
         <file>images/stripbackground.png</file>
-        <file>images/buttonleft.png</file>
-        <file>images/buttonright.png</file>
-        <file>images/infowidgetbackground.png</file>
-        <file>images/controlwidgetbackground.png</file>
-        <file>images/removefavoriteicon.png</file>
         <file>images/setfavoriteicon.png</file>
         <file>images/nowplayingicon.png</file>
-        <file>images/identifysongbuttonicon.png</file>
-        <file>images/stationsbuttonicon.png</file>
-        <file>images/tagsongbuttonicon.png</file>
-        <file>images/favoriteiconactive.png</file>
-        <file>images/favoriteiconinactive.png</file>
+        <file>images/qtg_mono_previous.svg</file>
+        <file>images/qtg_mono_next.svg</file>
+        <file>images/qtg_mono_radio_stations.svg</file>
+        <file>images/qtg_mono_station_scan.svg</file>        
+        <file>images/qtg_mono_speaker.svg</file>
+        <file>images/qtg_mono_speaker_off.svg</file>        
+        <file>images/pri_small_shazam.svg</file>
+        <file>images/qtg_mono_play_history.svg</file>
+        <file>images/pri_small_star.svg</file>
+        <file>images/pri_small_star_inactive.svg</file>
+        <file>images/qtg_fr_lcd.svg</file>
+        <file>images/qtg_fr_lcd_overlay.svg</file>
+        <file>images/qtg_fr_tuner.svg</file>
     </qresource>
+    
 </RCC>
Binary file radioapp/radiowidgets/res/images/buttonleft.png has changed
Binary file radioapp/radiowidgets/res/images/buttonright.png has changed
Binary file radioapp/radiowidgets/res/images/controlwidgetbackground.png has changed
Binary file radioapp/radiowidgets/res/images/favoriteiconactive.png has changed
Binary file radioapp/radiowidgets/res/images/favoriteiconinactive.png has changed
Binary file radioapp/radiowidgets/res/images/identifysongbuttonicon.png has changed
Binary file radioapp/radiowidgets/res/images/infowidgetbackground.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/res/images/pri_small_shazam.svg	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve">
+<defs>
+</defs>
+<path opacity="0.6" d="M15,29C7.28,29,1,22.72,1,15C1,7.281,7.28,1,15,1s14,6.281,14,14C29,22.72,22.719,29,15,29L15,29z"/>
+<path d="M15,2c7.18,0,13,5.82,13,13c0,7.179-5.82,13-13,13C7.82,28,2,22.18,2,15C2,7.82,7.82,2,15,2z"/>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="305.8604" y1="367.5547" x2="305.8604" y2="392.4656" gradientTransform="matrix(1 0 0 1 -290.8594 -365.0547)">
+	<stop  offset="0" style="stop-color:#C9C9C9"/>
+	<stop  offset="0.0036" style="stop-color:#C5C5C5"/>
+	<stop  offset="0.1336" style="stop-color:#575757"/>
+	<stop  offset="0.2462" style="stop-color:#252525"/>
+	<stop  offset="0.4022" style="stop-color:#090909"/>
+	<stop  offset="0.5232" style="stop-color:#020202"/>
+	<stop  offset="0.8589" style="stop-color:#000000"/>
+	<stop  offset="0.9455" style="stop-color:#020202"/>
+	<stop  offset="1" style="stop-color:#303030"/>
+</linearGradient>
+<ellipse fill="url(#SVGID_1_)" cx="15" cy="15" rx="12.5" ry="12.5"/>
+<circle fill="#FFFFFF" cx="14.999" cy="15" r="0.693"/>
+<path fill="#FFFFFF" d="M12.267,21.033c1.907,0,3.698-0.736,5.045-2.078l0,0l1.592-1.583c0.329-0.329,0.494-0.754,0.494-1.185l0,0
+	c0-0.426-0.165-0.854-0.497-1.184l0,0c-0.327-0.329-0.755-0.492-1.187-0.493l0,0c-0.434,0.001-0.863,0.165-1.193,0.494l0,0
+	l-1.589,1.582c-0.709,0.702-1.657,1.097-2.657,1.097l0,0V17.68c-0.001,0.004-0.003,0.004-0.005,0.004l0,0h-0.025V17.68
+	c-1.001-0.004-1.941-0.393-2.642-1.094l0,0c-0.71-0.707-1.107-1.651-1.109-2.652l0,0c0.001-1,0.399-1.946,1.108-2.654l0,0
+	l3.941-3.92c0.329-0.33,0.493-0.756,0.493-1.188l0,0c0-0.43-0.164-0.856-0.491-1.184l0,0c-0.33-0.329-0.759-0.492-1.19-0.492l0,0
+	c-0.434,0-0.864,0.164-1.192,0.493l0,0L7.219,8.911c-1.347,1.34-2.09,3.124-2.093,5.024l0,0v0.004c0,1.899,0.746,3.676,2.093,5.014
+	l0,0C8.565,20.295,10.357,21.033,12.267,21.033L12.267,21.033"/>
+<path fill="#FFFFFF" d="M20.406,13.422c0.734,0.73,1.102,1.69,1.102,2.65l0,0c0,0.959-0.367,1.921-1.104,2.652l0,0l-3.942,3.921
+	c-0.33,0.331-0.492,0.758-0.492,1.19l0,0c0,0.43,0.161,0.854,0.492,1.184l0,0c0.328,0.326,0.76,0.488,1.192,0.488l0,0
+	c0.433,0,0.86-0.162,1.188-0.488l0,0l3.946-3.924c1.392-1.387,2.088-3.203,2.088-5.022l0,0c0-1.82-0.694-3.637-2.086-5.021l0,0
+	c-1.351-1.343-3.138-2.08-5.052-2.08l0,0c-1.907,0-3.695,0.738-5.045,2.079l0,0l-1.591,1.584c-0.33,0.329-0.493,0.754-0.493,1.183
+	l0,0c0,0.43,0.163,0.854,0.495,1.184l0,0c0.33,0.329,0.759,0.492,1.188,0.492l0,0c0.434,0,0.862-0.162,1.192-0.49l0,0l1.588-1.582
+	c0.737-0.732,1.705-1.098,2.666-1.098l0,0C18.702,12.325,19.67,12.691,20.406,13.422L20.406,13.422z"/>
+<rect fill="none" width="30" height="30"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/res/images/pri_small_star.svg	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve">
+<defs>
+</defs>
+<polygon opacity="0.6" points="15,0.734 19.635,10.126 30,11.632 22.5,18.943 24.27,29.266 15,24.393 5.73,29.266 7.5,18.943 
+	0,11.632 10.365,10.126 "/>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="15" y1="2.9937" x2="15" y2="27.438">
+	<stop  offset="0" style="stop-color:#FFE896"/>
+	<stop  offset="1" style="stop-color:#FFB701"/>
+</linearGradient>
+<polygon fill="url(#SVGID_1_)" points="15,23.262 7.058,27.438 8.574,18.594 2.149,12.331 11.029,11.04 15,2.994 18.971,11.04 
+	27.852,12.331 21.426,18.594 22.941,27.438 "/>
+<polygon fill="#FFFFFF" fill-opacity="0.4" points="11.693,11.954 15,5.253 18.307,11.954 26.959,13.201 27.852,12.331 
+	18.971,11.04 15,2.994 11.029,11.04 2.149,12.331 3.042,13.201 "/>
+<rect fill="none" width="30" height="30"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/res/images/pri_small_star_inactive.svg	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve">
+<path opacity="0.6" enable-background="new    " d="M30,11.632l-10.365-1.506L15,0.734l-4.635,9.392L0,11.632l7.5,7.312L5.73,29.266
+	L15,24.393l9.27,4.873L22.5,18.943L30,11.632z M22.941,27.438L15,23.262l-7.942,4.176l1.516-8.844l-6.425-6.263l8.88-1.291L15,2.994
+	l3.971,8.046l8.881,1.291l-6.426,6.263L22.941,27.438z"/>
+<rect fill="none" width="30" height="30"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/res/images/qtg_fr_lcd.svg	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="338px" height="224px" viewBox="0 0 338 224" enable-background="new 0 0 338 224" xml:space="preserve">
+<defs>
+</defs>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="169.0005" y1="224" x2="169.0005" y2="4.882813e-004">
+	<stop  offset="0" style="stop-color:#203956"/>
+	<stop  offset="1" style="stop-color:#09090D"/>
+</linearGradient>
+<path fill="url(#SVGID_1_)" d="M338,218c0,3.3-2.7,6-6,6H6c-3.3,0-6-2.7-6-6V6c0-3.3,2.7-6,6-6h326c3.3,0,6,2.7,6,6V218z"/>
+<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="2.0254" y1="222" x2="335.9746" y2="222">
+	<stop  offset="0" style="stop-color:#376294"/>
+	<stop  offset="0.5" style="stop-color:#BAE6FF"/>
+	<stop  offset="1" style="stop-color:#376294"/>
+</linearGradient>
+<path fill="url(#SVGID_2_)" fill-opacity="0.8" d="M335.975,221H2.025c0.914,1.207,2.348,2,3.975,2h326
+	C333.627,223,335.061,222.207,335.975,221z"/>
+<path opacity="0.4" fill="#FFFFFF" d="M332,0H6C2.7,0,0,2.7,0,6v212c0,3.3,2.7,6,6,6h326c3.3,0,6-2.7,6-6V6C338,2.7,335.3,0,332,0z
+	 M337,218c0,2.757-2.243,5-5,5H6c-2.757,0-5-2.243-5-5V6c0-2.757,2.243-5,5-5h326c2.757,0,5,2.243,5,5V218z"/>
+<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="169" y1="90" x2="169" y2="0">
+	<stop  offset="0" style="stop-color:#203956"/>
+	<stop  offset="1" style="stop-color:#CCE4FF"/>
+</linearGradient>
+<path fill="url(#SVGID_3_)" fill-opacity="0.4" d="M0,90V6c0-3.309,2.691-6,6-6h326c3.309,0,6,2.691,6,6v84H0z"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/res/images/qtg_fr_lcd_overlay.svg	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="338px" height="224px" viewBox="0 0 338 224" enable-background="new 0 0 338 224" xml:space="preserve">
+<defs>
+</defs>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="0" y1="112" x2="338" y2="112">
+	<stop  offset="0" style="stop-color:#09090D;stop-opacity:0.8"/>
+	<stop  offset="0.3" style="stop-color:#09090D;stop-opacity:0"/>
+	<stop  offset="0.7" style="stop-color:#09090D;stop-opacity:0"/>
+	<stop  offset="1" style="stop-color:#09090D;stop-opacity:0.8"/>
+</linearGradient>
+<path fill="url(#SVGID_1_)" d="M6,224c-3.309,0-6-2.691-6-6V6c0-3.309,2.691-6,6-6h326c3.309,0,6,2.691,6,6v212c0,3.309-2.691,6-6,6
+	H6z"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/res/images/qtg_fr_tuner.svg	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="102px" height="34px" viewBox="0 0 102 34" enable-background="new 0 0 102 34" xml:space="preserve">
+<defs>
+</defs>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="51.0005" y1="34" x2="51.0005" y2="4.882813e-004">
+	<stop  offset="0" style="stop-color:#264466"/>
+	<stop  offset="1" style="stop-color:#13131A"/>
+</linearGradient>
+<rect fill="url(#SVGID_1_)" width="102" height="34"/>
+<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="1" y1="32.5" x2="101" y2="32.5">
+	<stop  offset="0" style="stop-color:#376294"/>
+	<stop  offset="0.5" style="stop-color:#BAE6FF"/>
+	<stop  offset="1" style="stop-color:#376294"/>
+</linearGradient>
+<rect x="1" y="32" fill="url(#SVGID_2_)" fill-opacity="0.8" width="100" height="1"/>
+<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="1" y1="17" x2="101" y2="17">
+	<stop  offset="0" style="stop-color:#09090D;stop-opacity:0.8"/>
+	<stop  offset="0.2" style="stop-color:#09090D;stop-opacity:0"/>
+	<stop  offset="0.8" style="stop-color:#09090D;stop-opacity:0"/>
+	<stop  offset="1" style="stop-color:#09090D;stop-opacity:0.8"/>
+</linearGradient>
+<rect x="1" y="1" fill="url(#SVGID_3_)" width="100" height="32"/>
+<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="51" y1="13" x2="51" y2="3">
+	<stop  offset="0" style="stop-color:#203956"/>
+	<stop  offset="1" style="stop-color:#CCE4FF"/>
+</linearGradient>
+<rect x="3" y="3" fill="url(#SVGID_4_)" fill-opacity="0.5" width="96" height="10"/>
+<path opacity="0.4" fill="#FFFFFF" d="M101,1v32H1V1H101 M102,0H0v34h102V0L102,0z"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/res/images/qtg_mono_next.svg	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="30px" height="30px" viewBox="0 0.002 30 30" enable-background="new 0 0.002 30 30" xml:space="preserve">
+<defs>
+</defs>
+<g opacity="0.5">
+	<rect fill="none" width="30" height="30"/>
+</g>
+<polygon points="20,4 20,15 20,26 24,26 24,4 "/>
+<polygon points="6,26 20,15 6,4 "/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/res/images/qtg_mono_play_history.svg	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve">
+<defs>
+</defs>
+<g opacity="0.5">
+	<rect fill="none" width="30" height="30"/>
+</g>
+<path d="M22.5,13c0.232,0,0.461,0.019,0.688,0.035L25,12L4,0v24l9.998-5.713C15.555,15.159,18.776,13,22.5,13z"/>
+<path d="M22.5,15c-4.136,0-7.5,3.364-7.5,7.5s3.364,7.5,7.5,7.5s7.5-3.364,7.5-7.5S26.636,15,22.5,15z M22.5,28
+	c-3.033,0-5.5-2.468-5.5-5.5s2.467-5.5,5.5-5.5s5.5,2.468,5.5,5.5S25.533,28,22.5,28z"/>
+<polygon points="23,22 23,18 21,18 21,22 21,24 23,24 27,24 27,22 "/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/res/images/qtg_mono_previous.svg	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="30px" height="30px" viewBox="0 0.002 30 30" enable-background="new 0 0.002 30 30" xml:space="preserve">
+<defs>
+</defs>
+<g opacity="0.5">
+	<rect fill="none" width="30" height="30"/>
+</g>
+<polygon points="6,4 6,26 10,26 10,15 10,4 "/>
+<polygon points="10,15 24,26 24,4 "/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/res/images/qtg_mono_radio_stations.svg	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve">
+<g opacity="0.5">
+	<rect fill="none" width="30" height="30"/>
+</g>
+<rect x="7" y="6" width="2" height="2"/>
+<rect x="7" y="11" width="2" height="2"/>
+<rect x="7" y="16" width="2" height="2"/>
+<rect x="7" y="21" width="2" height="2"/>
+<rect x="10.059" y="6" width="9.942" height="2"/>
+<rect x="10.059" y="11" width="9.942" height="2"/>
+<rect x="10.059" y="21" width="4.941" height="2"/>
+<path d="M15,17c0-0.357,0.103-0.699,0.277-1h-5.219v2H15V17z"/>
+<path d="M11.322,26H5V3h18v10.841c0.23-0.124,0.473-0.216,0.727-0.243c0.101-0.24,0.246-0.461,0.435-0.648l1.362-1.363
+	c0.145-0.144,0.308-0.252,0.478-0.342V0H2v29h9.325c-0.18-0.469-0.296-0.963-0.296-1.486C11.029,26.982,11.135,26.473,11.322,26z"/>
+<path d="M22.579,23.634L23.945,25c0.06-0.055,0.119-0.104,0.179-0.163c2.506-2.506,2.502-6.587-0.006-9.097
+	c-0.058-0.057-0.117-0.104-0.173-0.154l-1.362,1.361c0.058,0.053,0.114,0.101,0.172,0.156c1.757,1.756,1.759,4.613,0.004,6.367
+	C22.7,23.529,22.637,23.578,22.579,23.634z"/>
+<path d="M27.107,13.155c-0.055-0.056-0.112-0.101-0.17-0.155l-1.362,1.363c0.055,0.052,0.114,0.1,0.17,0.155
+	c3.101,3.099,3.104,8.136,0.008,11.231c-0.058,0.058-0.121,0.108-0.183,0.164l1.367,1.366c0.06-0.057,0.123-0.107,0.183-0.166
+	C30.965,23.27,30.961,17.008,27.107,13.155z"/>
+<path d="M22.029,19L17,17v8.305c-0.254-0.152-0.666-0.244-1.107-0.244c-1.583,0-2.864,1.098-2.864,2.453S14.31,30,15.893,30
+	C17.475,30,19,29,19,27.514V21l3.029,1V19L22.029,19z"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/res/images/qtg_mono_speaker.svg	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve">
+<defs>
+</defs>
+<g opacity="0.5">
+	<rect fill="none" width="30" height="30"/>
+</g>
+<rect x="1" y="9" width="7" height="12"/>
+<polygon points="10,22 21,27 21,3 10,8 "/>
+<path d="M23.889,8.046L22.213,9.14C23.382,10.931,24,12.957,24,15s-0.618,4.069-1.787,5.86l1.676,1.094
+	C25.27,19.836,26,17.432,26,15S25.27,10.164,23.889,8.046z"/>
+<path d="M26.702,5.398l-1.598,1.203C26.999,9.118,28,12.021,28,15s-1.001,5.882-2.896,8.398l1.598,1.203
+	C28.859,21.735,30,18.416,30,15S28.859,8.265,26.702,5.398z"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/res/images/qtg_mono_speaker_off.svg	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve">
+<defs>
+</defs>
+<rect fill="none" width="30" height="30"/>
+<polygon points="4.853,9 1,9 1,21 8,21 8,12.148 "/>
+<polygon points="21,16.852 21,3 11.478,7.328 "/>
+<polygon points="10,14.148 10,22 21,27 21,25.146 "/>
+<rect x="13.74" y="-3.242" transform="matrix(0.7063 -0.7079 0.7079 0.7063 -6.0767 14.6963)" width="1.868" height="35.827"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/res/images/qtg_mono_station_scan.svg	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve">
+<defs>
+</defs>
+<g opacity="0.5">
+	<rect fill="none" width="30" height="30"/>
+</g>
+<rect x="13" y="8" width="4" height="15"/>
+<rect x="9" y="12" width="2" height="7"/>
+<rect x="5" y="12" width="2" height="7"/>
+<rect x="1" y="12" width="2" height="7"/>
+<rect x="27" y="12" width="2" height="7"/>
+<rect x="23" y="12" width="2" height="7"/>
+<rect x="19" y="12" width="2" height="7"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/res/images/qtg_mono_tag.svg	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve">
+<defs>
+</defs>
+<g opacity="0.5">
+	<rect fill="none" width="30" height="30"/>
+</g>
+<path d="M12.731,2H4.094L2,4.094v8.638l15.683,15.683l10.731-10.731L12.731,2z M4,11.903V4.922L4.922,4h6.981l13.683,13.683
+	l-7.903,7.903L4,11.903z"/>
+<rect x="12.385" y="10.071" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -6.6464 16.0459)" width="7.321" height="11.95"/>
+<circle cx="7" cy="7" r="2"/>
+</svg>
Binary file radioapp/radiowidgets/res/images/removefavoriteicon.png has changed
Binary file radioapp/radiowidgets/res/images/stationsbuttonicon.png has changed
Binary file radioapp/radiowidgets/res/images/stripbackground.png has changed
Binary file radioapp/radiowidgets/res/images/tagsongbuttonicon.png has changed
--- a/radioapp/radiowidgets/res/layout/radiostationcontrolwidget.css	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-RadioStationControlWidget {
-    layout: stationcontrol_vertical;
-}
-
-RadioStationControlWidget::background {
-}
-
-HbPushButton::background {
-    border-width: 0px;
-}
-
-RadioStationControlWidget::tag_song_button {
-    left: -var(hb-param-margin-gene-left);
-    right: var(hb-param-margin-gene-right);
-    top: -var(hb-param-margin-gene-top);
-}
-
-HbPushButton#tag_song_button::text {
-    text-align: left;
-    color: white;
-    font-variant: primary;
-}
-
-RadioStationControlWidget::recognize_button {
-    left: -var(hb-param-margin-gene-left);
-    right: var(hb-param-margin-gene-right);
-    top: -var(hb-param-margin-gene-top);
-}
-
-HbPushButton#recognize_button::text {
-    text-align: left;
-    color: white;
-    font-variant: primary;
-}
-
-RadioStationControlWidget::stations_button {
-    left: -var(hb-param-margin-gene-left);
-    right: var(hb-param-margin-gene-right);
-    top: -var(hb-param-margin-gene-top);
-    bottom: var(hb-param-margin-gene-bottom);
-}
-
-HbPushButton#stations_button::text {
-    text-align: left;
-    color: white;
-    font-variant: primary;
-}
--- a/radioapp/radiowidgets/res/layout/radiostationcontrolwidget.widgetml	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-<hbwidget type="RadioStationControlWidget" version="0.1">
-    <layout name="stationcontrol_vertical" type="mesh">
-        <meshitem dst="" dstEdge="TOP" src="tag_song_button" srcEdge="TOP"/>
-        <meshitem dst="" srcEdge="LEFT" src="tag_song_button" dstEdge="LEFT" />
-        <meshitem dst="" srcEdge="RIGHT" src="tag_song_button" dstEdge="RIGHT" />
-
-        <meshitem dst="tag_song_button" dstEdge="BOTTOM" src="recognize_button" srcEdge="TOP"/>
-        <meshitem dst="" srcEdge="LEFT" src="recognize_button" dstEdge="LEFT" />
-        <meshitem dst="" srcEdge="RIGHT" src="recognize_button" dstEdge="RIGHT" />
-
-        <meshitem dst="recognize_button" dstEdge="BOTTOM" src="stations_button" srcEdge="TOP"/>
-        <meshitem dst="" srcEdge="LEFT" src="stations_button" dstEdge="LEFT" />
-        <meshitem dst="" srcEdge="RIGHT" src="stations_button" dstEdge="RIGHT" />
-        <meshitem dst="" dstEdge="BOTTOM" src="stations_button" srcEdge="BOTTOM"/>
-    </layout>
-</hbwidget>
--- a/radioapp/radiowidgets/res/layout/radiostationitem.css	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/res/layout/radiostationitem.css	Mon May 03 12:31:41 2010 +0300
@@ -1,19 +1,19 @@
 RadioStationItem {
-    layout: default
+	layout: default
 }
 
 RadioStationItem::favorite_button {
-    top: -var(hb-param-margin-gene-top);
-    left: -var(hb-param-margin-gene-left)
-    max-width: 6un;
-    max-height: 6un;
+	max-width: 6un;
+	max-height: 6un;
+	top: -var(hb-param-margin-gene-top);
+	left: -var(hb-param-margin-gene-left)
 }
 
 RadioStationItem::genre_label {
-    top: -var(hb-param-margin-gene-top);
-    right: 8un;
-    left: -var(hb-param-margin-gene-left);
-    pref-height: 6un;
+	pref-height: 6un;
+	top: -var(hb-param-margin-gene-top);
+	right: 8un;
+	left: -var(hb-param-margin-gene-left);
 }
 
 RadioFadingLabel#genre_label::text {
@@ -23,10 +23,10 @@
 }
 
 RadioStationItem::name_label {
-    pref-height: 5un;
-    left: -var(hb-param-margin-gene-left);
-    top: -var(hb-param-margin-gene-top);
-    right: var(hb-param-margin-gene-right)
+	pref-height: 5un;
+	left: -var(hb-param-margin-gene-left);
+	top: -var(hb-param-margin-gene-top);
+	right: var(hb-param-margin-gene-right)
 }
 
 RadioFadingLabel#name_label::text {
@@ -36,10 +36,10 @@
 }
 
 RadioStationItem::rt_label {
-    pref-height: 15un;
-    left: -var(hb-param-margin-gene-left);
-    top: -var(hb-param-margin-gene-top);
-    right: var(hb-param-margin-gene-right);
+	pref-height: 21un;
+	left: -var(hb-param-margin-gene-left);
+	top: -var(hb-param-margin-gene-top);
+	right: var(hb-param-margin-gene-right);
 }
 
 RadioFadingLabel#rt_label::text {
@@ -49,11 +49,11 @@
 }
 
 RadioStationItem::url_label {
-    pref-height: 5un;
-    left: -var(hb-param-margin-gene-left);
-    top: -var(hb-param-margin-gene-top);
-    right: var(hb-param-margin-gene-right);
-    bottom: var(hb-param-margin-gene-bottom);
+	pref-height: 5un;
+	left: -var(hb-param-margin-gene-left);
+	top: -var(hb-param-margin-gene-top);
+	right: var(hb-param-margin-gene-right);
+	bottom: var(hb-param-margin-gene-bottom);
 }
 
 RadioFadingLabel#url_label::text {
--- a/radioapp/radiowidgets/res/layout/radiostationitem.widgetml	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/res/layout/radiostationitem.widgetml	Mon May 03 12:31:41 2010 +0300
@@ -8,7 +8,7 @@
         <meshitem dst="favorite_button" dstEdge="RIGHT" src="genre_label" srcEdge="LEFT"/>
         <meshitem dst="" dstEdge="RIGHT" src="genre_label" srcEdge="RIGHT"/>
     
-        <meshitem dst="genre_label" dstEdge="BOTTOM" src="name_label" srcEdge="TOP"/>
+        <meshitem dst="favorite_button" dstEdge="BOTTOM" src="name_label" srcEdge="TOP"/>
         <meshitem dst="" dstEdge="LEFT" src="name_label" srcEdge="LEFT"/>
         <meshitem dst="" dstEdge="RIGHT" src="name_label" srcEdge="RIGHT"/>
 
--- a/radioapp/radiowidgets/src/radiocontextmenu.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-/*
-* 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:
-*
-*/
-
-// System includes
-#include <HbAction>
-#include <HbInputDialog>
-#include <QGraphicsSceneResizeEvent>
-
-// User includes
-#include "radiocontextmenu.h"
-#include "radioxmluiloader.h"
-#include "radiolocalization.h"
-#include "radiouiengine.h"
-#include "radiostationmodel.h"
-#include "radiologger.h"
-
-/*!
- *
- */
-RadioContextMenu::RadioContextMenu( RadioUiEngine& uiEngine, QGraphicsItem* parent ) :
-    HbMenu( parent ),
-    mUiEngine( uiEngine )
-{
-}
-
-/*!
- * Initializes the menu
- */
-void RadioContextMenu::init( const RadioStation& station, RadioXmlUiLoader& uiLoader )
-{
-    mStation = station;
-
-    if ( station.isFavorite() )
-    {
-        uiLoader.findObject<HbAction>( DOCML_NAME_CONTEXT_FAVORITE )->setText( hbTrId( "txt_rad_menu_remove_favourite" ) );
-    }
-    else
-    {
-        uiLoader.findObject<HbAction>( DOCML_NAME_CONTEXT_FAVORITE )->setText( hbTrId( "txt_rad_menu_add_to_favourites" ) );
-    }
-}
-
-/*!
- * Private slot
- *
- */
-void RadioContextMenu::rename()
-{
-    HbInputDialog nameQuery;
-    nameQuery.setPromptText( hbTrId( "txt_rad_dialog_new_name" ) );
-    nameQuery.setInputMode( HbInputDialog::TextInput );
-    nameQuery.setValue( mStation.name() );
-    if ( nameQuery.exec() == nameQuery.primaryAction() )
-    {
-        mUiEngine.model().renameStation( mStation.presetIndex(), nameQuery.value().toString() );
-    }
-}
-
-/*!
- * Private slot
- *
- */
-void RadioContextMenu::toggleFavorite()
-{
-    mUiEngine.model().setFavoriteByPreset( mStation.presetIndex(), !mStation.isFavorite() );
-}
-
-/*!
- * Private slot
- *
- */
-void RadioContextMenu::deleteStation()
-{
-    mUiEngine.model().removeStation( mStation );
-}
-
-/*!
- * \reimp
- */
-void RadioContextMenu::resizeEvent( QGraphicsSceneResizeEvent* event )
-{
-    HbMenu::resizeEvent( event );
-    setPos( QPointF( mPos.x() - event->newSize().width() / 2, mPos.y() - event->newSize().height() / 2 ) );
-}
--- a/radioapp/radiowidgets/src/radiofrequencyitem.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/src/radiofrequencyitem.cpp	Mon May 03 12:31:41 2010 +0300
@@ -20,6 +20,7 @@
 // User includes
 #include "radiofrequencyitem.h"
 #include "radiofrequencystrip.h"
+#include "radio_global.h"
 
 /*!
  *
--- a/radioapp/radiowidgets/src/radiofrequencyscanner.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/src/radiofrequencyscanner.cpp	Mon May 03 12:31:41 2010 +0300
@@ -17,13 +17,21 @@
 
 // System includes
 #include <HbProgressDialog>
+#include <QTimer>
+#include <HbLabel>
+#include <HbPushButton>
 
 // User includes
 #include "radiofrequencyscanner.h"
-#include "radiolocalization.h"
+#include "radioscannerengine.h"
 #include "radiouiengine.h"
 #include "radiologger.h"
 #include "radiostationmodel.h"
+#include "radiofrequencystrip.h"
+#include "radiostationcarousel.h"
+#include "radiouiutilities.h"
+#include "radiotuningview.h"
+#include "radioxmluiloader.h"
 
 // Constants
 const int KExtraRoomToMaxValue = 100000;
@@ -34,38 +42,92 @@
 RadioFrequencyScanner::RadioFrequencyScanner( RadioUiEngine& uiEngine, QObject* parent ) :
     QObject( parent ),
     mUiEngine( uiEngine ),
+    mInTuningView( parent->metaObject()->className() == RadioTuningView::staticMetaObject.className() ),
+    mScannerEngine( mUiEngine.createScannerEngine() ),
     mScanningProgressNote( new HbProgressDialog( HbProgressDialog::ProgressDialog ) ),
     mChannelCount( 0 ),
-    mMinFrequency( 0 )
+    mStripScrollTime( 0 ),
+    mCarouselScrollTime( 0 )
 {
-    mScanningProgressNote->setModal( true );
-    mScanningProgressNote->setAutoClose( true );
-
-    mMinFrequency = mUiEngine.minFrequency();
+}
 
-    // Add some extra to the maximum value to allow room for the station at the low band edge
-    mScanningProgressNote->setRange( mMinFrequency, mUiEngine.maxFrequency() + KExtraRoomToMaxValue );
-    mScanningProgressNote->setProgressValue( mMinFrequency );
-    mScanningProgressNote->setText( TRANSLATE( KProgressTitleScanStations ) );
-
-    RadioStationModel* stationModel = &mUiEngine.model();
-    connectAndTest( stationModel,           SIGNAL(stationAdded(RadioStation)),
-                    this,                   SLOT(updateScanAndSaveProgress(RadioStation)) );
-
-    connectAndTest( &mUiEngine,             SIGNAL(scanAndSaveFinished()),
-                    this,                   SLOT(scanAndSavePresetsFinished()) );
-
-    connectAndTest( mScanningProgressNote,  SIGNAL(cancelled()),
-                    this,                   SLOT(scanAndSavePresetsCancelled()) );
+/*!
+ *
+ */
+RadioFrequencyScanner::~RadioFrequencyScanner()
+{
+    restoreUiControls();
 }
 
 /*!
  *
  */
-void RadioFrequencyScanner::startScanning()
+void RadioFrequencyScanner::startScanning( RadioXmlUiLoader& uiLoader )
 {
-    mUiEngine.scanFrequencyBand();
-    mScanningProgressNote->show();
+    mChannelCount = 0;
+    RadioFrequencyStrip* frequencyStrip = RadioUiUtilities::frequencyStrip();
+    RadioStationCarousel* carousel = RadioUiUtilities::carousel();
+
+    disconnect( &mUiEngine,         SIGNAL(tunedToFrequency(uint,int)),
+                frequencyStrip,     SLOT(setFrequency(uint,int)) );
+    disconnect( frequencyStrip,     SIGNAL(frequencyChanged(uint,int)),
+                &mUiEngine,         SLOT(tuneWithDelay(uint,int)) );
+    disconnect( carousel,           SIGNAL(frequencyChanged(uint,int)),
+                frequencyStrip,     SLOT(setFrequency(uint,int)) );
+    disconnect( frequencyStrip,     SIGNAL(frequencyChanged(uint,int)),
+                carousel,           SLOT(setFrequency(uint)) );
+
+    if ( mInTuningView ) {
+        bool ok = false;
+        uiLoader.load( DOCML::FILE_TUNINGVIEW, "scanning", &ok );
+
+        HbLabel* infoText = uiLoader.findWidget<HbLabel>( DOCML::TV_NAME_INFO_TEXT );
+        infoText->setAlignment( Qt::AlignBottom | Qt::AlignHCenter );
+        infoText->setTextWrapping( Hb::TextWordWrap );
+
+        mStripScrollTime = frequencyStrip->autoScrollTime();
+        mCarouselScrollTime = carousel->autoScrollTime();
+
+        carousel->setScanningMode( true );
+        carousel->setAutoScrollTime( 1000 );
+        frequencyStrip->setAutoScrollTime( 1100 );
+
+        connectAndTest( carousel,               SIGNAL(scanAnimationFinished()),
+                        this,                   SLOT(continueScanning()) );
+
+        static_cast<RadioTuningView*>( parent() )->setScanningMode( true );
+        frequencyStrip->setScanningMode( true );
+        frequencyStrip->setFrequency( mUiEngine.minFrequency() );
+        frequencyStrip->setFrequency( mUiEngine.minFrequency() + 100 ); // scanning jamming
+    } else {
+        mScanningProgressNote->setModal( true );
+        mScanningProgressNote->setAutoClose( true );
+
+        carousel->setStationModel( NULL );
+
+        // Add some extra to the maximum value to allow room for the station at the low band edge
+        mScanningProgressNote->setRange( mUiEngine.minFrequency(), mUiEngine.maxFrequency() + KExtraRoomToMaxValue );
+        mScanningProgressNote->setProgressValue( mUiEngine.minFrequency() );
+        mScanningProgressNote->setText( hbTrId( "txt_rad_info_searching_local_stations_please_wait" ) );
+        mScanningProgressNote->show();
+
+        connectAndTest( mScanningProgressNote,  SIGNAL(cancelled()),
+                        this,                   SLOT(scanAndSavePresetsCancelled()) );
+    }
+
+    connectAndTest( mScannerEngine.data(),  SIGNAL(stationFound(RadioStation)),
+                    this,                   SLOT(updateScanAndSaveProgress(RadioStation)) );
+
+    QTimer::singleShot( 1000, this, SLOT(delayedStart()) );
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioFrequencyScanner::delayedStart()
+{
+    mScannerEngine->startScanning();
 }
 
 /*!
@@ -74,37 +136,41 @@
  */
 void RadioFrequencyScanner::updateScanAndSaveProgress( const RadioStation& station )
 {
+    if ( !station.isValid() ) {
+        scanAndSavePresetsFinished();
+        return;
+    }
+
     const uint frequency = station.frequency();
     LOG_FORMAT( "RadioFrequencyScanner::updateScanAndSaveProgress frequency: %d", frequency );
 
-    // Check for special case that can happen during scanning.
-    // If there is a valid radio station at the low frequency band edge it will be reported last after
-    // all of the higher frequencies. We don't update the progress value here because the value would
-    // be lower than the previous one. The progress value is set to maximum when the scanner finishes.
-    if ( frequency != mMinFrequency ) {
-        mScanningProgressNote->setProgressValue( frequency );
-    }
+    if ( mInTuningView ) {
+
+        RadioUiUtilities::frequencyStrip()->setFrequency( frequency, TuneReason::Unspecified );
+        RadioUiUtilities::carousel()->animateNewStation( station );
 
-    ++mChannelCount;
-    mScanningProgressNote->setText( QString( TRANSLATE( KProgressTitleStationsFound ) ).arg( mChannelCount ) );
+    } else {
+        // Check for special case that can happen during scanning.
+        // If there is a valid radio station at the low frequency band edge it will be reported last after
+        // all of the higher frequencies. We don't update the progress value here because the value would
+        // be lower than the previous one. The progress value is set to maximum when the scanner finishes.
+        if ( frequency != mUiEngine.minFrequency() ) {
+            mScanningProgressNote->setProgressValue( frequency );
+        }
+
+        ++mChannelCount;
+//        mScanningProgressNote->setText( QString( TRANSLATE( KProgressTitleStationsFound ) ).arg( mChannelCount ) );
+        mScannerEngine->continueScanning();
+    }    
 }
 
 /*!
  * Private slot
  *
  */
-void RadioFrequencyScanner::scanAndSavePresetsFinished()
+void RadioFrequencyScanner::continueScanning()
 {
-    mScanningProgressNote->setProgressValue( mScanningProgressNote->maximum() );
-
-    disconnect( &mUiEngine.model(),     SIGNAL(stationAdded(RadioStation)),
-                this,                   SLOT(updateScanAndSaveProgress(RadioStation)) );
-    disconnect( &mUiEngine,             SIGNAL(scanAndSaveFinished()),
-                this,                   SLOT(scanAndSavePresetsFinished()) );
-
-    emit frequencyScannerFinished();
-    mScanningProgressNote->deleteLater();
-    deleteLater();
+    mScannerEngine->continueScanning();
 }
 
 /*!
@@ -113,8 +179,79 @@
  */
 void RadioFrequencyScanner::scanAndSavePresetsCancelled()
 {
-    mUiEngine.cancelScanFrequencyBand();
+    mScannerEngine->cancel();
     scanAndSavePresetsFinished();
     mScanningProgressNote = 0;
     mChannelCount = 0;
 }
+
+/*!
+ * Private slot
+ *
+ */
+void RadioFrequencyScanner::restoreUiControls()
+{
+    RadioUiUtilities::frequencyStrip()->setScanningMode( false );
+    static_cast<RadioTuningView*>( parent() )->setScanningMode( false );
+    RadioUiUtilities::carousel()->setScanningMode( false );
+//    disconnect( RadioUiUtilities::carousel(),   SIGNAL(scrollingEnded()),
+//                this,                           SLOT(restoreUiControls()) );
+}
+
+/*!
+ *
+ */
+void RadioFrequencyScanner::scanAndSavePresetsFinished()
+{
+    RadioFrequencyStrip* frequencyStrip = RadioUiUtilities::frequencyStrip();
+    RadioStationCarousel* carousel = RadioUiUtilities::carousel();
+
+    connectAndTest( &mUiEngine,         SIGNAL(tunedToFrequency(uint,int)),
+                    frequencyStrip,     SLOT(setFrequency(uint,int)) );
+    connectAndTest( frequencyStrip,     SIGNAL(frequencyChanged(uint,int)),
+                    &mUiEngine,         SLOT(tuneWithDelay(uint,int)), Qt::QueuedConnection );
+    connectAndTest( carousel,           SIGNAL(frequencyChanged(uint,int)),
+                    frequencyStrip,     SLOT(setFrequency(uint,int)) );
+    connectAndTest( frequencyStrip,     SIGNAL(frequencyChanged(uint,int)),
+                    carousel,           SLOT(setFrequency(uint)) );
+
+    if ( mInTuningView ) {
+        RadioStationModel& model = mUiEngine.model();
+
+        // Scroll the carousel and frequency strip through all of the scanned stations
+        const int stationCount = model.rowCount();
+        if ( stationCount > 1 ) {
+//            connectAndTest( carousel,       SIGNAL(scrollingEnded()),
+//                            this,           SLOT(restoreUiControls()) );
+
+            frequencyStrip->setAutoScrollTime( 1000 );
+            carousel->setAutoScrollTime( 1000 );
+            const uint frequency = model.data( model.index( 0, 0 ), RadioStationModel::RadioStationRole ).value<RadioStation>().frequency();
+            frequencyStrip->setFrequency( frequency );
+
+            frequencyStrip->setAutoScrollTime( mStripScrollTime );
+            carousel->setAutoScrollTime( mCarouselScrollTime );
+        } else {
+            QTimer::singleShot( 100, this, SLOT(restoreUiControls()) );
+        }
+
+        QTimer::singleShot( 1000, this, SLOT(deleteLater()) );
+
+    } else {
+        mScannerEngine->cancel();
+
+        mScanningProgressNote->setProgressValue( mScanningProgressNote->maximum() );
+        mScanningProgressNote->deleteLater();
+        deleteLater();
+
+        disconnect( mScanningProgressNote,  SIGNAL(cancelled()),
+                    this,                   SLOT(scanAndSavePresetsCancelled()) );
+
+        carousel->setStationModel( &mUiEngine.model() );
+    }
+
+    disconnect( mScannerEngine.data(),  SIGNAL(stationFound(RadioStation)),
+                this,                   SLOT(updateScanAndSaveProgress(RadioStation)) );
+
+    emit frequencyScannerFinished();
+}
--- a/radioapp/radiowidgets/src/radiofrequencystrip.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/src/radiofrequencystrip.cpp	Mon May 03 12:31:41 2010 +0300
@@ -22,6 +22,8 @@
 #include <QPen>
 #include <HbPushButton>
 #include <QTimer>
+#include <HbColorScheme>
+#include <HbEvent>
 
 #include "radiofrequencystrip.h"
 #include "radiofrequencyitem.h"
@@ -41,6 +43,14 @@
 const int KSelectorWidth = 2;
 const int KSelectorZPos = 100;
 
+const int KHalfHertz = KOneHertz / 2;
+const int KOneTabDistance = 15;
+const uint KOneTabInHz = 0.2 * KOneHertz;
+const qreal KPixelInHz = KOneTabInHz / KOneTabDistance;
+//const int KCharWidth = 8;                  // TODO: Remove hardcoding
+const int KWidth = KOneTabDistance * 5;
+const int KHeight = 50;                 //TODO: Remove hardcoding
+
 const int K100Khz = 100000;
 
 //const int KTouchPosThreshold = 30;
@@ -49,6 +59,10 @@
 const QString KSlideFromLeft    = "SlideFromLeft";
 const QString KSlideToRight     = "SlideToRight";
 const QString KSlideFromRight   = "SlideFromRight";
+static const char* BUTTON_LEFT  = "button_left";
+static const char* BUTTON_RIGHT = "button_right";
+
+static const char* TEXT_COLOR_ATTRIBUTE = "text";
 
 /*!
  *
@@ -61,27 +75,25 @@
 /*!
  *
  */
-RadioFrequencyStrip::RadioFrequencyStrip( uint minFrequency,
-                                          uint maxFrequency,
-                                          uint stepSize,
-                                          uint currentFrequency,
-                                          RadioUiEngine* engine ) :
+RadioFrequencyStrip::RadioFrequencyStrip( RadioUiEngine* engine ) :
     RadioStripBase( 0 ),
-    mMinFrequency( minFrequency ),
-    mMaxFrequency( maxFrequency ),
-    mFrequencyStepSize( stepSize ),
-    mEngine( engine ),
+    mUiEngine( engine ),
+    mMinFrequency( mUiEngine ? mUiEngine->minFrequency() : 87500000 ),
+    mMaxFrequency( mUiEngine ? mUiEngine->maxFrequency() : 108000000 ),
+    mFrequencyStepSize( mUiEngine ? mUiEngine->frequencyStepSize() : 100000 ),
+    mFrequency( mUiEngine ? mUiEngine->currentFrequency() : 87500000 ),
     mSelectorImage( new QGraphicsPixmapItem( this ) ),
     mSeparatorPos( 0.0 ),
     mMaxWidth( 0 ),
     mSelectorPos( 0.0 ),
-    mFrequency( currentFrequency ),
     mFavoriteSelected( false ),
     mLeftButton( new HbPushButton( this ) ),
     mRightButton( new HbPushButton( this ) ),
     mButtonTimer( new QTimer( this ) ),
-    mIsPanGesture( false )
+    mIsPanGesture( false ),
+    mForegroundColor( HbColorScheme::color( TEXT_COLOR_ATTRIBUTE ) )
 {
+    RadioUiUtilities::setFrequencyStrip( this );
     mButtonTimer->setInterval( 500 );
     mButtonTimer->setSingleShot( true );
     connectAndTest( mButtonTimer, SIGNAL(timeout()), this, SLOT(toggleButtons()) );
@@ -203,7 +215,7 @@
     uint frequency = station.frequency();
     if ( mFrequencies.contains( frequency ) ) {
         FrequencyPos pos = mFrequencies.value( frequency );
-        mFrequencies.remove( frequency );
+//        mFrequencies.remove( frequency );
         updateFavorites( pos.mItem );
     }
 }
@@ -212,11 +224,11 @@
  * Public slot
  *
  */
-void RadioFrequencyStrip::setFrequency( const uint frequency, int commandSender )
+void RadioFrequencyStrip::setFrequency( const uint frequency, int reason )
 {
 //    LOG_SLOT_CALLER;
 //    LOG_FORMAT( "RadioFrequencyStrip::setFrequency, frequency: %d, sender: %d", frequency, commandSender );
-    if ( commandSender != CommandSender::FrequencyStrip &&  // Not sent by the FrequencyStrip
+    if ( reason != TuneReason::FrequencyStrip &&            // Not sent by the FrequencyStrip
          frequency != mFrequency &&                         // Different from the current
          mFrequencies.contains( frequency ) )               // 0 frequency means any illegal value
     {
@@ -226,6 +238,26 @@
 }
 
 /*!
+ * Public slot
+ *
+ */
+void RadioFrequencyStrip::setScanningMode( bool isScanning )
+{
+    if (isScanning)
+    {
+        HbEffect::start( mLeftButton, KSlideToLeft );
+        HbEffect::start( mRightButton, KSlideToRight );
+    }
+    else
+    {
+        HbEffect::start( mLeftButton, KSlideFromLeft );
+        HbEffect::start( mRightButton, KSlideFromRight );
+
+    }
+    setEnabled( !isScanning );
+}
+
+/*!
  * Private slot
  *
  */
@@ -340,6 +372,22 @@
 /*!
  * \reimp
  */
+void RadioFrequencyStrip::changeEvent( QEvent* event )
+{
+    if ( event->type() == HbEvent::ThemeChanged ) {
+        // Update the foreground color and redraw each item
+        mForegroundColor = HbColorScheme::color( TEXT_COLOR_ATTRIBUTE );
+        foreach ( RadioFrequencyItem* item, mFrequencyItems ) {
+            updateFavorites( item );
+        }
+    }
+
+    return HbWidgetBase::changeEvent(event);
+}
+
+/*!
+ * \reimp
+ */
 void RadioFrequencyStrip::mousePressEvent( QGraphicsSceneMouseEvent* event )
 {
     RadioStripBase::mousePressEvent( event );
@@ -452,8 +500,8 @@
         updateFavorites( item );
     }
 
-    if ( mEngine ) {
-        QList<RadioStation> stations = mEngine->stationsInRange( mMinFrequency, mMaxFrequency );
+    if ( mUiEngine ) {
+        QList<RadioStation> stations = mUiEngine->stationsInRange( mMinFrequency, mMaxFrequency );
         foreach ( const RadioStation& station, stations ) {
             if ( station.isFavorite() ) {
                 mFrequencies[ station.frequency() ].mFavorite = true;
@@ -489,7 +537,9 @@
 void RadioFrequencyStrip::initButtons()
 {
     mLeftButton->setZValue( KSelectorZPos );
+    mLeftButton->setObjectName( BUTTON_LEFT );
     mRightButton->setZValue( KSelectorZPos );
+    mRightButton->setObjectName( BUTTON_RIGHT );
 
     QEffectList effectList;
     effectList.append( EffectInfo( mLeftButton, ":/effects/slide_to_left.fxml", KSlideToLeft ) );
@@ -513,21 +563,23 @@
  */
 void RadioFrequencyStrip::updateFavorites( RadioFrequencyItem* item )
 {
-    uint frequency = item->frequency();
-    QList<RadioStation> stations;
-    if ( mEngine ) {
-        stations = mEngine->stationsInRange( frequency - KHalfHertz, frequency + KHalfHertz );
-    }
+    if ( item ) {
+        uint frequency = item->frequency();
+        QList<RadioStation> stations;
+        if ( mUiEngine ) {
+            stations = mUiEngine->stationsInRange( frequency - KHalfHertz, frequency + KHalfHertz );
+        }
 
-    QPixmap pixmap = drawPixmap( frequency, stations, item );
-    item->setPixmap( pixmap );
+        QPixmap pixmap = drawPixmap( frequency, stations, item );
+        item->setPixmap( pixmap );
 
-    foreach ( const RadioStation& station, stations ) {
-        frequency = station.frequency();
-        FrequencyPos pos = mFrequencies.value( frequency );
-        pos.mFavorite = station.isFavorite();
-        pos.mLocalStation = station.isType( RadioStation::LocalStation );
-        mFrequencies.insert( frequency, pos );
+        foreach ( const RadioStation& station, stations ) {
+            frequency = station.frequency();
+            FrequencyPos pos = mFrequencies.value( frequency );
+            pos.mFavorite = station.isFavorite();
+            pos.mLocalStation = station.isType( RadioStation::LocalStation );
+            mFrequencies.insert( frequency, pos );
+        }
     }
 }
 
@@ -541,7 +593,7 @@
     QPainter painter( &pixmap );
     QPen normalPen = painter.pen();
     QPen favoritePen = normalPen;
-    normalPen.setColor( Qt::white );
+    normalPen.setColor( mForegroundColor );
     painter.setPen( normalPen );
 
     if ( frequency == 0 ) {
@@ -624,7 +676,7 @@
 //    LOG_FORMAT( "RadioFrequencyStrip::emitFrequencyChanged, frequency: %d", frequency );
     if ( frequency > 0 && frequency != mFrequency ) {
         mFrequency = frequency;
-        emit frequencyChanged( frequency, CommandSender::FrequencyStrip );
+        emit frequencyChanged( frequency, TuneReason::FrequencyStrip );
         emitFavoriteSelected( mFrequencies.value( frequency ).mFavorite );
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/src/radiohistoryview.cpp	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,169 @@
+/*
+* 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:
+*
+*/
+
+// System includes
+#include <HbListView>
+#include <HbAction>
+#include <HbAbstractViewItem>
+#include <HbMenu>
+#include <HbMessageBox>
+
+// User includes
+#include "radiohistoryview.h"
+#include "radiomainwindow.h"
+#include "radiologger.h"
+#include "radioxmluiloader.h"
+#include "radiouiengine.h"
+#include "radiostationfiltermodel.h"
+#include "radiohistorymodel.h"
+
+/*!
+ *
+ */
+RadioHistoryView::RadioHistoryView() :
+    RadioViewBase(),
+    mHistoryList( 0 ),
+    mAllSongsButton( 0 ),
+    mTaggedSongsButton( 0 ),
+    mFilterModel( 0 )
+{
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioHistoryView::deckButtonPressed()
+{
+    if ( sender() == mTaggedSongsButton ) {
+        loadSection( DOCML::FILE_HISTORYVIEW, DOCML::HV_SECTION_FAVORITE_MODE );
+    } else {
+        loadSection( DOCML::FILE_HISTORYVIEW, DOCML::HV_SECTION_HISTORY_MODE );
+    }
+
+    const bool showFavorites = mTaggedSongsButton->isChecked();
+//    mFilterModel->setTypeFilter( showFavorites ? RadioStation::Favorite
+//                                               : RadioStation::LocalStation );
+
+    updateVisibilities();
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioHistoryView::clearList()
+{
+    const bool answer = HbMessageBox::question( hbTrId( "txt_rad_info_clear_recently_played_songs_list" ) );
+
+    if ( answer ) {
+        mMainWindow->uiEngine().historyModel().removeAll();
+        updateVisibilities();
+    }
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioHistoryView::updateVisibilities()
+{
+    const int itemCount = mMainWindow->uiEngine().historyModel().rowCount();
+    loadSection( DOCML::FILE_HISTORYVIEW, itemCount ? DOCML::HV_SECTION_SHOW_LIST : DOCML::HV_SECTION_HIDE_LIST );
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioHistoryView::listItemClicked( const QModelIndex& index )
+{
+    showContextMenu( index );
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioHistoryView::listItemLongPressed( HbAbstractViewItem* item, const QPointF& coords )
+{
+    Q_UNUSED( coords );
+    showContextMenu( item->modelIndex() );
+}
+
+/*!
+ * \reimp
+ *
+ */
+void RadioHistoryView::init( RadioXmlUiLoader* uiLoader, RadioMainWindow* mainWindow )
+{
+    LOG_METHOD;
+    mUiLoader.reset( uiLoader );
+    mMainWindow = mainWindow;
+
+    RadioHistoryModel* historyModel = &mMainWindow->uiEngine().historyModel();
+    historyModel->setShowDetails( mOrientation == Qt::Horizontal );
+
+    mHistoryList = mUiLoader->findObject<HbListView>( DOCML::HV_NAME_HISTORY_LIST );
+    mHistoryList->setScrollingStyle( HbListView::PanOrFlick );
+    mFilterModel = mMainWindow->uiEngine().createNewFilterModel( this );
+    mFilterModel->setSourceModel( historyModel );
+    mHistoryList->setModel( mFilterModel );
+    mHistoryList->setSelectionMode( HbListView::NoSelection );
+    mHistoryList->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
+
+    mAllSongsButton     = mUiLoader->findObject<HbAction>( DOCML::HV_NAME_ALL_SONGS_BUTTON );
+    mTaggedSongsButton    = mUiLoader->findObject<HbAction>( DOCML::HV_NAME_TAGGED_SONGS_BUTTON );
+
+    HbAction* clearListAction = mUiLoader->findObject<HbAction>( DOCML::HV_NAME_CLEAR_LIST_ACTION );
+    connectAndTest( clearListAction, SIGNAL(triggered()), this, SLOT(clearList()) );
+
+    connectAndTest( mTaggedSongsButton,     SIGNAL(triggered() ),
+                    this,                   SLOT(deckButtonPressed() ) );
+    connectAndTest( mAllSongsButton,        SIGNAL(triggered() ),
+                    this,                   SLOT(deckButtonPressed() ) );
+    connectAndTest( historyModel,           SIGNAL(itemAdded() ),
+                    this,                   SLOT(updateVisibilities() ) );
+    updateVisibilities();
+    
+    initBackAction();
+}
+
+/*!
+ * \reimp
+ *
+ */
+void RadioHistoryView::setOrientation()
+{
+    RadioHistoryModel& model = mMainWindow->uiEngine().historyModel();
+    model.setShowDetails( mOrientation == Qt::Horizontal );
+}
+
+/*!
+ * \reimp
+ *
+ */
+void RadioHistoryView::showContextMenu( const QModelIndex& index )
+{
+    QModelIndex sourceIndex = mFilterModel->mapToSource( index );
+
+    HbMenu* menu = new HbMenu();
+    HbAction* action = menu->addAction( "Set favorite" );
+    menu->exec();
+
+//    RadioHistoryItem item = mFilterModel->data( index, )
+}
--- a/radioapp/radiowidgets/src/radiomainwindow.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/src/radiomainwindow.cpp	Mon May 03 12:31:41 2010 +0300
@@ -23,12 +23,10 @@
 #include "radiomainwindow.h"
 #include "radiotuningview.h"
 #include "radiostationsview.h"
-#include "radiowizardview.h"
 #include "radiouiengine.h"
 #include "radiostationmodel.h"
 #include "radiologger.h"
 #include "radioxmluiloader.h"
-#include "radiolocalization.h"
 
 // Constants
 
@@ -61,7 +59,17 @@
 {
     DummyViewPtr dummyView = prepareToShowDialog();
 
-    const bool answer = HbMessageBox::question( hbTrId( "txt_rad_info_activate_radio_in_offline_mode" ) );
+    HbMessageBox box( HbMessageBox::MessageTypeQuestion );
+    box.setText( hbTrId( "txt_rad_info_activate_radio_in_offline_mode" ) );
+    box.setTimeout( HbPopup::NoTimeout );
+    box.setDismissPolicy( HbPopup::NoDismiss );
+
+    HbAction* primaryAction = new HbAction( hbTrId( "txt_common_button_yes" ) );
+    box.setPrimaryAction( primaryAction );
+    HbAction* secondaryAction = new HbAction( hbTrId( "txt_common_button_no" ) );
+    box.setSecondaryAction( secondaryAction );
+
+    const bool answer = box.exec() == box.primaryAction();
 
     dialogShown( dummyView );
 
@@ -95,16 +103,10 @@
 
     connectAndTest( mUiEngine,  SIGNAL(volumeChanged(int)),
                     this,       SLOT(showVolumeLevel(int)) );
-    connectAndTest( mUiEngine,  SIGNAL(headsetStatusChanged(bool)),
-                    this,       SLOT(headsetStatusChanged(bool)) );
+    connectAndTest( mUiEngine,  SIGNAL(antennaStatusChanged(bool)),
+                    this,       SLOT(updateAntennaStatus(bool)) );
 
-    const bool firstTimeStart = mUiEngine->isFirstTimeStart();
-    const int rowCount = mUiEngine->model().rowCount();
-    if( firstTimeStart && rowCount == 0 ) {
-        activateWizardView();
-    } else {
-        activateTuningView();
-    }
+    activateTuningView();
 }
 
 /*!
@@ -120,7 +122,7 @@
  */
 QString RadioMainWindow::orientationSection()
 {
-    return orientation() == Qt::Vertical ? DOCML_LAYOUT_PORTRAIT : DOCML_LAYOUT_LANDSCAPE;
+    return orientation() == Qt::Vertical ? DOCML::SECTION_PORTRAIT : DOCML::SECTION_LANDSCAPE;
 }
 
 /*!
@@ -128,15 +130,7 @@
  */
 void RadioMainWindow::activateTuningView()
 {
-    activateView( mTuningView, DOCML_TUNINGVIEW_FILE, Hb::ViewSwitchUseBackAnim );
-}
-
-/*!
- *
- */
-void RadioMainWindow::activateWizardView()
-{
-    activateView( mWizardView, DOCML_WIZARDVIEW_FILE );
+    activateView( mTuningView, DOCML::FILE_TUNINGVIEW, Hb::ViewSwitchUseBackAnim );
 }
 
 /*!
@@ -144,15 +138,15 @@
  */
 void RadioMainWindow::activateStationsView()
 {
-    activateView( mStationsView, DOCML_STATIONSVIEW_FILE );
+    activateView( mStationsView, DOCML::FILE_STATIONSVIEW );
 }
 
 /*!
  *
  */
-void RadioMainWindow::activatePlayLogView()
+void RadioMainWindow::activateHistoryView()
 {
-    activateView( mPlayLogView, DOCML_PLAYLOGVIEW_FILE );
+    activateView( mHistoryView, DOCML::FILE_HISTORYVIEW );
 }
 
 /*!
@@ -174,9 +168,8 @@
  */
 void RadioMainWindow::showVolumeLevel( int volume )
 {
-    if ( !mVolSlider )
-    {
-        mVolSlider = VolumeSliderPtr( new HbVolumeSliderPopup() );
+    if ( !mVolSlider ) {
+        mVolSlider.reset( new HbVolumeSliderPopup() );
         mVolSlider->setRange( 0, KMaximumVolumeLevel );
         mVolSlider->setSingleStep( 1 );
         mVolSlider->setTimeout( KVolumeSliderDelay );
@@ -193,7 +186,7 @@
  * Private slot
  *
  */
-void RadioMainWindow::headsetStatusChanged( bool connected )
+void RadioMainWindow::updateAntennaStatus( bool connected )
 {
     if ( !connected ) {
         HbMessageBox infoBox( hbTrId( "txt_rad_dpophead_connect_wired_headset" ) );
@@ -221,11 +214,11 @@
     if ( !aMember ) {
         viewCreated = true;
 
-        RadioXmlUiLoader* uiLoader = new RadioXmlUiLoader( *this );
+        RadioXmlUiLoader* uiLoader = new RadioXmlUiLoader();
         bool ok = false;
 
         // View takes ownership of the ui loader when it is created inside the load function
-        uiLoader->load( docmlFile, &ok );
+        QObjectList objectList = uiLoader->load( docmlFile, &ok );
 
         RADIO_ASSERT( ok , "FMRadio", "invalid DocML file" );
         if ( !ok ) {
@@ -234,8 +227,16 @@
             return;
         }
 
-        aMember = ViewPtr( uiLoader->findObject<RadioViewBase>( DOCML_NAME_VIEW ) );
-        aMember->init( this, &mUiEngine->model() );
+        aMember = ViewPtr( uiLoader->findObject<RadioViewBase>( DOCML::NAME_VIEW ) );
+
+        foreach( QObject* object, objectList ) {
+            const QString className = object->metaObject()->className();
+            if ( !object->parent() && object != aMember.data() ) {
+                object->setParent( aMember.data() );
+            }
+        }
+
+        aMember->init( uiLoader, this );
 
         addView( aMember );
     }
--- a/radioapp/radiowidgets/src/radioplaylogview.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,179 +0,0 @@
-/*
-* 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:
-*
-*/
-
-// System includes
-#include <HbListView>
-#include <HbAction>
-#include <HbAbstractViewItem>
-#include <HbMenu>
-
-// User includes
-#include "radioplaylogview.h"
-#include "radiomainwindow.h"
-#include "radiologger.h"
-#include "radioxmluiloader.h"
-#include "radiouiengine.h"
-#include "radiostationfiltermodel.h"
-#include "radioplaylogmodel.h"
-
-const char* SECTION_SHOW_LIST = "show_list";
-const char* SECTION_HIDE_LIST = "hide_list";
-const char* SECTION_HISTORY_MODE = "history_mode";
-const char* SECTION_FAVORITE_MODE = "favorite_mode";
-
-/*!
- *
- */
-RadioPlayLogView::RadioPlayLogView( RadioXmlUiLoader* uiLoader ) :
-    RadioViewBase( uiLoader ),
-    mPlayLogList( 0 ),
-    mAllSongsButton( 0 ),
-    mFavoritesButton( 0 )
-{
-}
-
-/*!
- * Private slot
- *
- */
-void RadioPlayLogView::deckButtonPressed()
-{
-    bool ok = false;
-    if ( sender() == mFavoritesButton ) {
-        mUiLoader->load( DOCML_PLAYLOGVIEW_FILE, SECTION_FAVORITE_MODE, &ok );
-    } else {
-        mUiLoader->load( DOCML_PLAYLOGVIEW_FILE, SECTION_HISTORY_MODE, &ok );
-    }
-
-    const bool showFavorites = mFavoritesButton->isChecked();
-//    mFilterModel->setTypeFilter( showFavorites ? RadioStation::Favorite
-//                                               : RadioStation::LocalStation );
-
-    updateVisibilities();
-}
-
-/*!
- * Private slot
- *
- */
-void RadioPlayLogView::clearList()
-{
-    mMainWindow->uiEngine().playLogModel().removeAll();
-    updateVisibilities();
-}
-
-/*!
- * Private slot
- *
- */
-void RadioPlayLogView::updateVisibilities()
-{
-    const int itemCount = mMainWindow->uiEngine().playLogModel().rowCount();
-    bool ok = false;
-    mUiLoader->load( DOCML_PLAYLOGVIEW_FILE, itemCount ? SECTION_SHOW_LIST : SECTION_HIDE_LIST, &ok );
-}
-
-/*!
- * Private slot
- *
- */
-void RadioPlayLogView::listItemClicked( const QModelIndex& index )
-{
-    showContextMenu( index );
-}
-
-/*!
- * Private slot
- *
- */
-void RadioPlayLogView::listItemLongPressed( HbAbstractViewItem* item, const QPointF& coords )
-{
-    Q_UNUSED( coords );
-    showContextMenu( item->modelIndex() );
-}
-
-/*!
- * \reimp
- *
- */
-void RadioPlayLogView::init( RadioMainWindow* aMainWindow, RadioStationModel* aModel )
-{
-    LOG_METHOD;
-    mMainWindow = aMainWindow;
-    mModel = aModel;
-
-    RadioPlayLogModel* playLogModel = &mMainWindow->uiEngine().playLogModel();
-    playLogModel->setShowDetails( mOrientation == Qt::Horizontal );
-
-    mPlayLogList = mUiLoader->findObject<HbListView>( DOCML_NAME_PLAYLOGLIST );
-    mPlayLogList->setScrollingStyle( HbListView::PanOrFlick );
-    mFilterModel = mMainWindow->uiEngine().createNewFilterModel( this );
-    mFilterModel->setSourceModel( playLogModel );
-    mPlayLogList->setModel( mFilterModel );
-    mPlayLogList->setSelectionMode( HbListView::NoSelection );
-    mPlayLogList->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
-
-    mAllSongsButton     = mUiLoader->findObject<HbAction>( DOCML_NAME_ALLSONGSBUTTON );
-    mFavoritesButton    = mUiLoader->findObject<HbAction>( DOCML_NAME_FAVORITESONGSBUTTON );
-
-    HbAction* removeAction = mUiLoader->findObject<HbAction>( DOCML_NAME_PLV_REMOVEALLACTION );
-    connectAndTest( removeAction, SIGNAL(triggered()), this, SLOT(clearList()) );
-
-    connectAndTest( mFavoritesButton,       SIGNAL(triggered() ),
-                    this,                   SLOT(deckButtonPressed() ) );
-    connectAndTest( mAllSongsButton,        SIGNAL(triggered() ),
-                    this,                   SLOT(deckButtonPressed() ) );
-    connectAndTest( playLogModel,           SIGNAL(itemAdded() ),
-                    this,                   SLOT(updateVisibilities() ) );
-    updateVisibilities();
-    
-    initBackAction();
-}
-
-/*!
- * \reimp
- *
- */
-void RadioPlayLogView::setOrientation()
-{
-    RadioPlayLogModel& model = mMainWindow->uiEngine().playLogModel();
-    model.setShowDetails( mOrientation == Qt::Horizontal );
-}
-
-/*!
- * \reimp
- *
- */
-void RadioPlayLogView::showContextMenu( const QModelIndex& index )
-{
-    QModelIndex sourceIndex = mFilterModel->mapToSource( index );
-
-    HbMenu* menu = new HbMenu();
-    HbAction* action = menu->addAction( "Set favorite" );
-    menu->exec();
-
-//    RadioPlayLogItem item = mFilterModel->data( index, )
-
-    //    QModelIndex sourceIndex = mFilterModel->mapToSource( item->modelIndex() );
-    //    RadioStation station = mModel->stationAt( sourceIndex.row() );
-    //    RADIO_ASSERT( station.isValid() , "FMRadio", "invalid RadioStation");
-    //
-    //    RadioContextMenu* menu = mUiLoader->findObject<RadioContextMenu>( DOCML_NAME_CONTEXT_MENU );
-    //    menu->init( station, *mUiLoader );
-    //    menu->setPos( QPointF( size().width() / 2 - menu->size().width() / 2, coords.y() - menu->size().height() / 2 ) );
-    //    menu->exec();
-}
--- a/radioapp/radiowidgets/src/radiostationcarousel.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/src/radiostationcarousel.cpp	Mon May 03 12:31:41 2010 +0300
@@ -22,6 +22,7 @@
 #include <QGraphicsSceneMouseEvent>
 #include <HbEffect>
 #include <QTimer>
+#include <QTimeLine>
 
 // User includes
 #include "radiostationcarousel.h"
@@ -30,8 +31,8 @@
 #include "radiostationmodel.h"
 #include "radiofadinglabel.h"
 #include "radiologger.h"
-#include "radiolocalization.h"
-#include "radiostationfiltermodel.h"
+#include "radiostationmodel.h"
+#include "radiouiutilities.h"
 #include "radio_global.h"
 
 #ifdef USE_LAYOUT_FROM_E_DRIVE
@@ -43,24 +44,93 @@
 #endif
 
 const int KRadioTextPlusCheckTimeout = 700; // 700 ms
+const int KFreqScrollDivider = 100000;
+
+// ===============================================================
+//  Scanning helper
+// ===============================================================
+
+/*!
+ *
+ */
+ScanningHelper::ScanningHelper( RadioStationCarousel& carousel ) :
+    mCarousel( carousel ),
+    mCurrentFrequency( 0 ),
+    mPreviousFrequency( 0 ),
+    mStationItem( 0 ),
+    mNumberScrollingTimeLine( new QTimeLine( 1000, this ) )
+{
+    mNumberScrollingTimeLine->setCurveShape( QTimeLine::EaseInCurve );
+    connectAndTest( mNumberScrollingTimeLine,  SIGNAL(finished()),
+                    &mCarousel,                SIGNAL(scanAnimationFinished()) );
+    connectAndTest( mNumberScrollingTimeLine,  SIGNAL(frameChanged(int)),
+                    this,                      SLOT(numberScrollUpdate(int)) );
+}
 
 /*!
  *
  */
-RadioStationCarousel::RadioStationCarousel( RadioUiEngine& uiEngine, QGraphicsItem* parent ) :
-    HbGridView( parent ),
+void ScanningHelper::start()
+{
+    QTimer::singleShot( 0, this, SLOT(startSlide()) );
+}
+
+/*!
+ * Private slot
+ */
+void ScanningHelper::startSlide()
+{
+    mCarousel.scrollToIndex( mModelIndex, 1000 );
+    startNumberScroll();
+}
+
+/*!
+ * Private slot
+ */
+void ScanningHelper::startNumberScroll()
+{
+    //TODO: Take italy case into account
+    if ( mPreviousFrequency ) {
+        mNumberScrollingTimeLine->setFrameRange( mPreviousFrequency / KFreqScrollDivider, mCurrentFrequency / KFreqScrollDivider );
+        mNumberScrollingTimeLine->start();
+    } else {
+        emit mCarousel.scanAnimationFinished();
+    }
+}
+
+/*!
+ * Private slot
+ */
+void ScanningHelper::numberScrollUpdate( int value )
+{
+    if ( mStationItem ) {
+        mStationItem->setFrequency( value * KFreqScrollDivider );
+    }
+}
+
+// ===============================================================
+//  Carousel
+// ===============================================================
+
+/*!
+ *
+ */
+RadioStationCarousel::RadioStationCarousel( RadioUiEngine* uiEngine ) :
+    HbGridView( 0 ),
     mUiEngine( uiEngine ),
     mAntennaAttached( false ),
-    mAutoScrollTime( 1000 ),
+    mAutoScrollTime( 300 ),
     mPreviousButtonPos( 0.0 ),
     mMovingLeft( false ),
     mCurrentItem( 0 ),
-    mRadioTextTimer( new QTimer( this ) )
+    mRadioTextTimer( new QTimer( this ) ),
+    mScrollPos( 0 ),
+    mScanningHelper( 0 )
 #ifdef USE_DEBUGGING_CONTROLS
     ,mRdsLabel( new RadioFadingLabel( this ) )
 #endif // USE_DEBUGGING_CONTROLS
 {
-    mAntennaAttached = mUiEngine.isAntennaAttached();
+    RadioUiUtilities::setCarousel( this );
 
     setScrollDirections( Qt::Horizontal );
     setFrictionEnabled( true );
@@ -74,33 +144,6 @@
     setItemPrototype( new RadioStationItem( *this ) );
     setSelectionMode( SingleSelection );
 
-    RadioStationFilterModel* filterModel = mUiEngine.createNewFilterModel( this );
-    filterModel->setCyclic( false );
-
-    setModel( filterModel );
-    mCurrentItem = static_cast<RadioStationItem*>( itemByIndex( model()->index( 0, 0 ) ) );
-
-    updateFrequencies();
-
-    connectAndTest( model(),        SIGNAL(rowsInserted(QModelIndex,int,int)),
-                    this,           SLOT(insertFrequency(QModelIndex,int,int)) );
-    connectAndTest( model(),        SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
-                    this,           SLOT(removeFrequency(QModelIndex,int,int)) );
-//    connectAndTest( model(),        SIGNAL(layoutChanged()),
-//                    this,           SLOT(updateFrequencies()) );
-    connectAndTest( this,           SIGNAL(scrollingEnded()),
-                    this,           SLOT(updateLoopedPos()) );
-
-    RadioStationModel* stationModel = &mUiEngine.model();
-    connectAndTest( stationModel,   SIGNAL(favoriteChanged(RadioStation)),
-                    this,           SLOT(update(RadioStation)) );
-    connectAndTest( stationModel,   SIGNAL(stationDataChanged(RadioStation)),
-                    this,           SLOT(update(RadioStation)));
-    connectAndTest( stationModel,   SIGNAL(radioTextReceived(RadioStation)),
-                    this,           SLOT(updateRadioText(RadioStation)));
-    connectAndTest( stationModel,   SIGNAL(dynamicPsChanged(RadioStation)),
-                    this,           SLOT(update(RadioStation)));
-
     mRadioTextTimer->setSingleShot( true );
     mRadioTextTimer->setInterval( KRadioTextPlusCheckTimeout );
     connectAndTest( mRadioTextTimer,    SIGNAL(timeout()),
@@ -115,8 +158,10 @@
     spec.setRole( HbFontSpec::Secondary );
     mRdsLabel->setFontSpec( spec );
     mRdsLabel->setTextColor( Qt::gray );
-    connectAndTest( &mUiEngine,     SIGNAL(rdsAvailabilityChanged(bool)),
-                    this,           SLOT(setRdsAvailable(bool)) );
+    if ( mUiEngine ) {
+        connectAndTest( mUiEngine,      SIGNAL(rdsAvailabilityChanged(bool)),
+                        this,           SLOT(setRdsAvailable(bool)) );
+    }
 #endif // USE_DEBUGGING_CONTROLS
 }
 
@@ -124,24 +169,6 @@
  * Property
  *
  */
-void RadioStationCarousel::setBackground( const HbIcon& background )
-{
-    mBackground = background;
-}
-
-/*!
- * Property
- *
- */
-HbIcon RadioStationCarousel::background() const
-{
-    return mBackground;
-}
-
-/*!
- * Property
- *
- */
 void RadioStationCarousel::setFavoriteIcon( const HbIcon& favoriteIcon )
 {
     mFavoriteIcon = favoriteIcon;
@@ -177,7 +204,73 @@
 /*!
  *
  */
-RadioUiEngine& RadioStationCarousel::uiEngine()
+void RadioStationCarousel::setAutoScrollTime( const int time )
+{
+    mAutoScrollTime = time;
+}
+
+/*!
+ *
+ */
+int RadioStationCarousel::autoScrollTime() const
+{
+    return mAutoScrollTime;
+}
+
+/*!
+ *
+ */
+void RadioStationCarousel::init( RadioUiEngine* uiEngine )
+{
+    mUiEngine = uiEngine;
+    mAntennaAttached = mUiEngine->isAntennaAttached();
+
+    setStationModel( &mUiEngine->model() );
+
+    mCurrentItem = static_cast<RadioStationItem*>( itemByIndex( model()->index( 0, 0 ) ) );
+}
+
+/*!
+ *
+ */
+void RadioStationCarousel::setStationModel( RadioStationModel* stationModel )
+{
+    if ( stationModel ) {
+        connectAndTest( stationModel,   SIGNAL(rowsInserted(QModelIndex,int,int)),
+                        this,           SLOT(insertFrequency(QModelIndex,int,int)) );
+        connectAndTest( stationModel,   SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
+                        this,           SLOT(removeFrequency(QModelIndex,int,int)) );
+        connectAndTest( stationModel,   SIGNAL(favoriteChanged(RadioStation)),
+                        this,           SLOT(update(RadioStation)) );
+        connectAndTest( stationModel,   SIGNAL(stationDataChanged(RadioStation)),
+                        this,           SLOT(update(RadioStation)));
+        connectAndTest( stationModel,   SIGNAL(radioTextReceived(RadioStation)),
+                        this,           SLOT(updateRadioText(RadioStation)));
+        connectAndTest( stationModel,   SIGNAL(dynamicPsChanged(RadioStation)),
+                        this,           SLOT(update(RadioStation)));
+    } else {
+        QAbstractItemModel* currentModel = model();
+//        disconnect( currentModel,   SIGNAL(rowsInserted(QModelIndex,int,int)),
+//                    this,           SLOT(insertFrequency(QModelIndex,int,int)) );
+//        disconnect( currentModel,   SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
+//                    this,           SLOT(removeFrequency(QModelIndex,int,int)) );
+        disconnect( currentModel,   SIGNAL(favoriteChanged(RadioStation)),
+                    this,           SLOT(update(RadioStation)) );
+        disconnect( currentModel,   SIGNAL(stationDataChanged(RadioStation)),
+                    this,           SLOT(update(RadioStation)));
+        disconnect( currentModel,   SIGNAL(radioTextReceived(RadioStation)),
+                    this,           SLOT(updateRadioText(RadioStation)));
+        disconnect( currentModel,   SIGNAL(dynamicPsChanged(RadioStation)),
+                    this,           SLOT(update(RadioStation)));
+    }
+    setModel( stationModel );
+    updateFrequencies();
+}
+
+/*!
+ *
+ */
+RadioUiEngine* RadioStationCarousel::uiEngine()
 {
     return mUiEngine;
 }
@@ -191,12 +284,92 @@
 }
 
 /*!
+ *
+ */
+void RadioStationCarousel::setScanningMode( bool scanning )
+{
+    RadioStationItem* item = currentStationItem();
+
+    if ( scanning ) {
+        cleanRdsData();
+        if ( !mScanningHelper ) {
+            mScanningHelper = new ScanningHelper( *this );
+        }
+    } else {
+        delete mScanningHelper;
+        mScanningHelper = 0;
+        if ( item ) {
+            item->update();
+        }
+    }
+    setEnabled( !scanning );
+}
+
+/*!
+ *
+ */
+bool RadioStationCarousel::isInScanningMode() const
+{
+    return mScanningHelper != 0;
+}
+
+/*!
+ *
+ */
+void RadioStationCarousel::cleanRdsData()
+{
+    RadioStationItem* item = currentStationItem();
+    if ( item ) {
+        item->cleanRdsData();
+    }
+}
+
+/*!
+ *
+ */
+void RadioStationCarousel::animateNewStation( const RadioStation& station )
+{
+    if ( mScanningHelper ) {
+        RadioStationModel* model = stationModel();
+        const QModelIndex index = model->modelIndexFromFrequency( station.frequency() );
+        mScanningHelper->mModelIndex = index;
+        mScanningHelper->mCurrentFrequency = station.frequency();
+        mScanningHelper->mStationItem = static_cast<RadioStationItem*>( itemByIndex( index ) );
+
+        uint prevFrequency = 0;
+        if ( model->rowCount() > 1 ) {
+            QModelIndex prevIndex = model->index( index.row() - 1, 0 );
+            RadioStation prevStation = model->data( prevIndex, RadioStationModel::RadioStationRole ).value<RadioStation>();
+            prevFrequency = prevStation.frequency();
+        } else if ( mUiEngine ) {
+            prevFrequency = mUiEngine->minFrequency();
+        }
+        mScanningHelper->mPreviousFrequency = prevFrequency;
+        mScanningHelper->mStationItem->setFrequency( prevFrequency );
+        mScanningHelper->mStationItem->cleanRdsData();
+
+        mScanningHelper->start();
+    }
+}
+
+/*!
+ *
+ */
+void RadioStationCarousel::setItemVisibility( bool visible )
+{
+    RadioStationItem* item = currentStationItem();
+        if ( item ) {
+            item->setVisible( visible );
+        }
+}
+
+/*!
  * Private slot
  */
 void RadioStationCarousel::update( const RadioStation& station )
 {
     RadioStationItem* item = currentStationItem();
-    if ( item && item->frequency() == station.frequency() ) {
+    if ( item && item->frequency() == station.frequency() && !isInScanningMode() ) {
         item->update( &station );
     }
 }
@@ -206,7 +379,7 @@
  */
 void RadioStationCarousel::updateRadioText( const RadioStation& station )
 {
-    if ( isAntennaAttached() ) {
+    if ( isAntennaAttached() && !isInScanningMode() ) {
         if ( station.radioText().isEmpty() ) {
             RadioStationItem* item = currentStationItem();
             if ( item ) {
@@ -228,13 +401,16 @@
     Q_UNUSED( speedPixelsPerSecond );
     QModelIndex index = currentIndex();
 
-    if ( index == model()->index( model()->rowCount() - 1, 0 ) ) {
-        index = model()->index( 0, 0 );
-    } else {
-        index = nextIndex( index );
+//    if ( index == model()->index( model()->rowCount() - 1, 0 ) ) {
+//        index = model()->index( 0, 0 );
+//    } else {
+//        index = nextIndex( index );
+//    }
+
+    index = nextIndex( index );
+    if ( index.isValid() ) {
+        scrollToIndex( index, mAutoScrollTime );
     }
-
-    scrollToIndex( index, mAutoScrollTime );
 }
 
 /*!
@@ -245,13 +421,16 @@
     Q_UNUSED( speedPixelsPerSecond );
     QModelIndex index = currentIndex();
 
-    if ( index == model()->index( 0, 0 ) ) {
-        index = model()->index( model()->rowCount() - 1, 0 );
-    } else {
-        index = previousIndex( index );
+//    if ( index == model()->index( 0, 0 ) ) {
+//        index = model()->index( model()->rowCount() - 1, 0 );
+//    } else {
+//        index = previousIndex( index );
+//    }
+
+    index = previousIndex( index );
+    if ( index.isValid() ) {
+        scrollToIndex( index, mAutoScrollTime );
     }
-
-    scrollToIndex( index, mAutoScrollTime );
 }
 
 /*!
@@ -261,12 +440,15 @@
 {
     Q_UNUSED( parent );
     QAbstractItemModel* freqModel = model();
-    for ( int i = first; i <= last; ++i ) {
+
+    for ( int i = first; freqModel && i <= last; ++i ) {
         QModelIndex index = freqModel->index( i, 0 );
         RadioStation station = freqModel->data( index, RadioStationModel::RadioStationRole ).value<RadioStation>();
         mModelIndexes.insert( station.frequency(), index );
         LOG_FORMAT( "Added frequency %u", station.frequency() );
-        scrollToIndex( index, 0 );
+        if ( !isInScanningMode() ) {
+            scrollToIndex( index, mAutoScrollTime );
+        }
     }
 }
 
@@ -277,7 +459,7 @@
 {
     Q_UNUSED( parent );
     QAbstractItemModel* freqModel = model();
-    for ( int i = first; i <= last; ++i ) {
+    for ( int i = first; freqModel && i <= last; ++i ) {
         QModelIndex index = freqModel->index( i, 0 );
         RadioStation station = freqModel->data( index, RadioStationModel::RadioStationRole ).value<RadioStation>();
         mModelIndexes.remove( station.frequency() );
@@ -291,11 +473,13 @@
 {
     mModelIndexes.clear();
     QAbstractItemModel* itemModel = model();
-    const int count = itemModel->rowCount();
-    for ( int i = 0; i < count; ++i ) {
-        QModelIndex index = itemModel->index( i, 0 );
-        uint frequency = itemModel->data( index, RadioStationModel::RadioStationRole ).value<RadioStation>().frequency();
-        mModelIndexes.insert( frequency, index );
+    if ( itemModel ) {
+        const int count = itemModel->rowCount();
+        for ( int i = 0; i < count; ++i ) {
+            QModelIndex index = itemModel->index( i, 0 );
+            uint frequency = itemModel->data( index, RadioStationModel::RadioStationRole ).value<RadioStation>().frequency();
+            mModelIndexes.insert( frequency, index );
+        }
     }
 }
 
@@ -304,14 +488,14 @@
  */
 void RadioStationCarousel::updateLoopedPos()
 {
-    const int row = currentIndex().row();
-    if ( filterModel()->hasLooped( currentIndex() ) ) {
-        QModelIndex realIndex = filterModel()->realIndex( currentIndex() );
-        scrollTo( realIndex );
-        setCurrentIndex( realIndex, QItemSelectionModel::SelectCurrent );
-//        scrollToIndex( realIndex , 0 );
-        LOG_FORMAT( "Index %d has looped. real index is %d", row, realIndex.row() );
-    }
+//    const int row = currentIndex().row();
+//    if ( filterModel()->hasLooped( currentIndex() ) ) {
+//        QModelIndex realIndex = filterModel()->realIndex( currentIndex() );
+//        scrollTo( realIndex );
+//        setCurrentIndex( realIndex, QItemSelectionModel::SelectCurrent );
+////        scrollToIndex( realIndex , 0 );
+//        LOG_FORMAT( "Index %d has looped. real index is %d", row, realIndex.row() );
+//    }
 }
 
 /*!
@@ -327,6 +511,14 @@
     mRadioTextTimer->stop();
 }
 
+/*!
+ * Private slot
+ */
+void RadioStationCarousel::delayedScroll()
+{
+    scrollContentsTo( QPointF( mScrollPos, 0 ) , 1000 );
+}
+
 #ifdef USE_DEBUGGING_CONTROLS
 /*!
  * Public slot
@@ -334,7 +526,7 @@
 void RadioStationCarousel::setRdsAvailable( bool available )
 {
     QColor color = Qt::green;
-    if ( !available ) {
+    if ( !available && mUiEngine ) {
         LOG_FORMAT( "No RDS signal: Station has sent RDS earlier: %d", mUiEngine.model().currentStation().hasRds() );
         color = mUiEngine.model().currentStation().hasRds() ? Qt::yellow : Qt::gray;
         mRdsLabel->setText( "RDS" );
@@ -382,7 +574,7 @@
 
     if ( mModelIndexes.contains( frequency ) ) {
         QModelIndex index = mModelIndexes.value( frequency );
-        scrollToIndex( index, 0 );
+        scrollToIndex( index, mAutoScrollTime );
     } else {
         if ( item ) {
             item->setFrequency( frequency );
@@ -392,25 +584,8 @@
 
 /*!
  * Public slot
- *
  */
-void RadioStationCarousel::setSeekingText()
-{
-    mRadioTextTimer->stop();
-    RadioStationItem* item = currentStationItem();
-    if ( item ) {
-        item->setSeekingText();
-    }
-
-#ifdef USE_DEBUGGING_CONTROLS
-    mRdsLabel->setTextColor( Qt::gray );
-#endif //USE_DEBUGGING_CONTROLS
-}
-
-/*!
- * Public slot
- */
-void RadioStationCarousel::updateHeadsetStatus( bool connected )
+void RadioStationCarousel::updateAntennaStatus( bool connected )
 {
     mRadioTextTimer->stop();
     mAntennaAttached = connected;
@@ -422,16 +597,6 @@
 
 /*!
  * \reimp
- *
- */
-void RadioStationCarousel::paint( QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget )
-{
-    mBackground.paint( painter, QRectF( QPoint( 0, 0 ), size() ), Qt::IgnoreAspectRatio );
-    HbGridView::paint( painter, option, widget );
-}
-
-/*!
- * \reimp
  */
 void RadioStationCarousel::mouseMoveEvent( QGraphicsSceneMouseEvent* event )
 {
@@ -443,11 +608,11 @@
  */
 void RadioStationCarousel::mouseReleaseEvent( QGraphicsSceneMouseEvent* event )
 {
-    QPointF pos = QPointF( size().width() / 2, size().height() / 2 );
-    HbAbstractViewItem* item = itemAtPosition( pos );
-    if ( item ) {
-        scrollToIndex( item->modelIndex(), mAutoScrollTime );
-    }
+//    QPointF pos = QPointF( size().width() / 2, size().height() / 2 );
+//    HbAbstractViewItem* item = itemAtPosition( pos );
+//    if ( item ) {
+//        scrollToIndex( item->modelIndex(), mAutoScrollTime );
+//    }
 
     HbGridView::mouseReleaseEvent( event );
 }
@@ -458,9 +623,9 @@
 void RadioStationCarousel::resizeEvent( QGraphicsSceneResizeEvent* event )
 {
     HbGridView::resizeEvent( event );
-    QModelIndex index = filterModel()->modelIndexFromFrequency( mUiEngine.currentFrequency() );
-    setCurrentIndex( index, QItemSelectionModel::SelectCurrent );
-    scrollTo( index );
+//    QModelIndex index = filterModel()->modelIndexFromFrequency( mUiEngine.currentFrequency() );
+//    setCurrentIndex( index, QItemSelectionModel::SelectCurrent );
+//    scrollTo( index );
 }
 
 /*!
@@ -469,15 +634,14 @@
 RadioStationItem* RadioStationCarousel::currentStationItem()
 {
     return static_cast<RadioStationItem*>( currentViewItem() );
-//    return mCurrentItem;
 }
 
 /*!
  *
  */
-RadioStationFilterModel* RadioStationCarousel::filterModel() const
+RadioStationModel* RadioStationCarousel::stationModel() const
 {
-    return static_cast<RadioStationFilterModel*>( model() );
+    return static_cast<RadioStationModel*>( model() );
 }
 
 /*!
@@ -487,21 +651,21 @@
 {
     RadioStationItem* item = static_cast<RadioStationItem*>( itemByIndex( index ) );
     if ( index.isValid() && item ) {
-        int posX = item->pos().x();
+//        int posX = item->pos().x();
+        int width = this->size().width();
+        int posX = index.row() * width;
         const int currentRow = currentIndex().row();
         const int nextRow = index.row();
         if ( currentRow != nextRow ) {
             LOG_FORMAT( "Current row is %d, scrolling to row %d", currentRow, nextRow);
         }
-        if ( !filterModel()->isEqual( currentIndex(), index ) ) {
-            setCurrentIndex( index, QItemSelectionModel::SelectCurrent );
-            mCurrentItem = static_cast<RadioStationItem*>( item );
-            uint frequency = model()->data( index, RadioStationModel::RadioStationRole ).value<RadioStation>().frequency();
-            if ( item->frequency() != frequency ) {
-                item->setFrequency( frequency );
-            }
-            emit frequencyChanged( frequency, CommandSender::StationCarousel );
-        }
+
+        setCurrentIndex( index, QItemSelectionModel::SelectCurrent );
+        mCurrentItem = static_cast<RadioStationItem*>( item );
+        uint frequency = model()->data( index, RadioStationModel::RadioStationRole ).value<RadioStation>().frequency();
+        emit frequencyChanged( frequency, TuneReason::StationCarousel );
+
+        mScrollPos = posX;
         scrollContentsTo( QPointF( posX, 0 ) , time );
     }
 }
--- a/radioapp/radiowidgets/src/radiostationcontrolwidget.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,252 +0,0 @@
-/*
-* 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:
-*
-*/
-
-// System includes
-#include <HbStyleLoader>
-#include <HbPushButton>
-#include <HbMessageBox>
-#include <HbAnchorLayout>
-
-// User includes
-#include "radiostationcontrolwidget.h"
-#include "radiolocalization.h"
-#include "radiomainwindow.h"
-#include "radiologger.h"
-#include "radiostation.h"
-#include "radiouiengine.h"
-#include "radiostationmodel.h"
-#include "radioplaylogmodel.h"
-
-
-#ifdef USE_LAYOUT_FROM_E_DRIVE
-    const QString KBlinkEffectFile = "e:/radiotest/effects/blink_in_out_in.fxml";
-#else
-    const QString KBlinkEffectFile = ":/effects/blink_in_out_in.fxml";
-#endif
-const QString KBlinkEffect = "blink_in_out_in";
-
-static const char* FILE_PATH_WIDGETML = ":/layout/radiostationcontrolwidget.widgetml";
-static const char* FILE_PATH_CSS = ":/layout/radiostationcontrolwidget.css";
-static const char* TAG_BUTTON = "tag_song_button";
-static const char* RECOGNIZE_BUTTON = "recognize_button";
-static const char* STATIONS_BUTTON = "stations_button";
-
-/*!
- *
- */
-RadioStationControlWidget::RadioStationControlWidget( RadioUiEngine& uiEngine, QGraphicsItem* parent ) :
-    HbWidget( parent ),
-    mUiEngine( uiEngine ),
-    mTagSongButton( new HbPushButton( this ) ),
-    mStationsViewButton( new HbPushButton( this ) ),
-    mRecognizeButton( new HbPushButton( this ) ),
-    mMainWindow( 0 )
-{
-    bool registered = HbStyleLoader::registerFilePath( FILE_PATH_WIDGETML );
-    LOG_FORMAT( "registered: %d", registered );
-    registered = HbStyleLoader::registerFilePath( FILE_PATH_CSS );
-    LOG_FORMAT( "registered: %d", registered );
-
-    mTagSongButton->setStretched( true );
-    mStationsViewButton->setStretched( true );
-    mRecognizeButton->setStretched( true );
-    
-    HbStyle::setItemName( mTagSongButton, TAG_BUTTON );
-    mTagSongButton->setObjectName( TAG_BUTTON );
-    HbStyle::setItemName( mRecognizeButton, RECOGNIZE_BUTTON );
-    mRecognizeButton->setObjectName( RECOGNIZE_BUTTON );
-    HbStyle::setItemName( mStationsViewButton, STATIONS_BUTTON );
-    mStationsViewButton->setObjectName( STATIONS_BUTTON );
-}
-
-/*!
- *
- */
-RadioStationControlWidget::~RadioStationControlWidget()
-{
-    HbStyleLoader::unregisterFilePath( FILE_PATH_WIDGETML );
-    HbStyleLoader::unregisterFilePath( FILE_PATH_CSS );
-}
-
-/*!
- * Property
- *
- */
-void RadioStationControlWidget::setBackground( const HbIcon& background )
-{
-    mBackground = background;
-}
-
-/*!
- * Property
- */
-HbIcon RadioStationControlWidget::background() const
-{
-    return mBackground;
-}
-
-/*!
- * Property
- */
-void RadioStationControlWidget::setTagBtnText( const QString& text )
-{
-    mTagSongButton->setText( text );
-}
-
-/*!
- * Property
- */
-QString RadioStationControlWidget::tagBtnText() const
-{
-    return mTagSongButton->text();
-}
-
-/*!
- * Property
- */
-void RadioStationControlWidget::setRecognizeBtnText( const QString& text )
-{
-    mRecognizeButton->setText( text );
-}
-
-/*!
- * Property
- */
-QString RadioStationControlWidget::recognizeBtnText() const
-{
-    return mRecognizeButton->text();
-}
-
-/*!
- * Property
- */
-void RadioStationControlWidget::setStationsBtnText( const QString& text )
-{
-    mStationsViewButton->setText( text );
-}
-
-/*!
- * Property
- */
-QString RadioStationControlWidget::stationsBtnText() const
-{
-    return mStationsViewButton->text();
-}
-
-/*!
- *
- */
-void RadioStationControlWidget::init( RadioMainWindow* aMainWindow )
-{
-    mMainWindow = aMainWindow;
-
-    mTagSongButton->setBackground( HbIcon( " " ) );
-    mRecognizeButton->setBackground( HbIcon( " " ) );
-    mStationsViewButton->setBackground( HbIcon( " " ) );
-
-    mTagSongButton->setIcon( HbIcon( ":/images/tagsongbuttonicon.png" ) );
-    mRecognizeButton->setIcon( HbIcon( ":/images/identifysongbuttonicon.png" ) );
-    mStationsViewButton->setIcon( HbIcon( ":/images/stationsbuttonicon.png" ) );
-
-    RadioPlayLogModel* playLogModel = &mUiEngine.playLogModel();
-    if ( !playLogModel->isCurrentSongRecognized() ) {
-        disableTagButton();
-    } else {
-        enableTagButton();
-    }
-
-    connectAndTest( playLogModel,           SIGNAL(currentSongReset()),
-                    this,                   SLOT(disableTagButton()) );
-    connectAndTest( playLogModel,           SIGNAL(itemAdded()),
-                    this,                   SLOT(enableTagButton()) );
-
-//    if ( RadioUiUtilities::uiEngine().isSongRecognitionAppAvailable() ) {
-        connectAndTest( mRecognizeButton,       SIGNAL(clicked()),
-                        this,                   SLOT(recognizePressed()) );
-//    } else {
-//        mRecognizeButton->setOpacity( 0.4 );
-//    }
-
-    connectAndTest( mStationsViewButton,    SIGNAL(clicked()),
-                    this,                   SLOT(updateStationsButton()) );
-
-    HbEffect::add( mTagSongButton,      KBlinkEffectFile, KBlinkEffect );
-    HbEffect::add( mRecognizeButton,    KBlinkEffectFile, KBlinkEffect );
-    HbEffect::add( mStationsViewButton, KBlinkEffectFile, KBlinkEffect );
-}
-
-/*!
- * Private slot
- *
- */
-void RadioStationControlWidget::updateStationsButton()
-{
-    HbEffect::start( mStationsViewButton, KBlinkEffect, this, "effectFinished" );
-}
-
-/*!
- * Private slot
- *
- */
-void RadioStationControlWidget::recognizePressed()
-{
-    LOG_METHOD;
-    HbEffect::start( mRecognizeButton, KBlinkEffect );
-    mUiEngine.launchSongRecognition();
-}
-
-/*!
- * Private slot
- *
- */
-void RadioStationControlWidget::effectFinished( HbEffect::EffectStatus status )
-{
-    Q_UNUSED( status );
-    mMainWindow->activateStationsView();
-}
-
-/*!
- * Private slot
- *
- */
-void RadioStationControlWidget::disableTagButton()
-{
-    mTagSongButton->setOpacity( 0.5 );
-    disconnect( mTagSongButton, SIGNAL(clicked()) );
-}
-
-/*!
- * Private slot
- *
- */
-void RadioStationControlWidget::enableTagButton()
-{
-    mTagSongButton->setOpacity( 1 );
-    RadioPlayLogModel* playLogModel = &mUiEngine.playLogModel();
-    connectAndTest( mTagSongButton, SIGNAL(clicked()),
-                    playLogModel,   SLOT(setFavorite()) );
-}
-
-/*!
- * \reimp
- *
- */
-void RadioStationControlWidget::paint( QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget )
-{
-    HbWidget::paint( painter, option, widget );
-    mBackground.paint( painter, QRectF( QPoint( 0, 0 ), size() ), Qt::IgnoreAspectRatio );
-}
--- a/radioapp/radiowidgets/src/radiostationitem.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/src/radiostationitem.cpp	Mon May 03 12:31:41 2010 +0300
@@ -26,15 +26,14 @@
 #include "radiouiengine.h"
 #include "radiofadinglabel.h"
 #include "radiostationmodel.h"
-#include "radiolocalization.h"
 #include "radiologger.h"
 
 //static const char* FILE_PATH_WIDGETML   = ":/layout/radiostationitem.widgetml";
 //static const char* FILE_PATH_CSS        = ":/layout/radiostationitem.css";
-//static const char* GENRE_LABEL          = "genre_label";
-//static const char* NAME_LABEL           = "name_label";
-//static const char* RADIOTEXT_LABEL      = "radiotext_label";
-//static const char* URL_LABEL            = "url_label";
+static const char* GENRE_LABEL            = "tv:genre_label";
+static const char* NAME_LABEL             = "tv:name_label";
+static const char* RADIOTEXT_LABEL        = "tv:radiotext_label";
+static const char* URL_LABEL              = "tv:url_label";
 //static const char* FAVORITE_BUTTON      = "favorite_button";
 
 const char* SEEKING_TEXT = "txt_rad_list_tuning";
@@ -88,6 +87,7 @@
 
         mNameLabel = new RadioFadingLabel( this );
         mNameLabel->setAlignment( Qt::AlignCenter );
+        mNameLabel->setObjectName( NAME_LABEL );
         HbFontSpec spec = mNameLabel->fontSpec();
         spec.setRole( HbFontSpec::Primary );
         mNameLabel->setFontSpec( spec );
@@ -96,10 +96,12 @@
 
         mGenreLabel = new RadioFadingLabel( this );
         mGenreLabel->setAlignment( Qt::AlignCenter );
+        mGenreLabel->setObjectName( GENRE_LABEL );
         mGenreLabel->setTextColor( Qt::white );
 
         mRadiotextLabel = new RadioFadingLabel( this );
         mRadiotextLabel->setAlignment( Qt::AlignCenter );
+        mRadiotextLabel->setObjectName( RADIOTEXT_LABEL );
         mRadiotextLabel->setTextWrapping( Hb::TextWordWrap );
 //        mRadiotextLabel->setFadingEnabled( true );    TODO
 //        mRadiotextLabel->setFontSpec( spec );
@@ -107,6 +109,7 @@
 
         mUrlLabel = new RadioFadingLabel( this );
         mUrlLabel->setAlignment( Qt::AlignCenter );
+        mUrlLabel->setObjectName( URL_LABEL );
         mUrlLabel->setTextColor( Qt::white );
 
         mLayout = new HbAnchorLayout();
@@ -143,7 +146,10 @@
  */
 void RadioStationItem::toggleFavorite()
 {
-    carousel()->uiEngine().model().setData( modelIndex(), mFrequency, RadioStationModel::ToggleFavoriteRole );
+    RadioUiEngine* uiEngine = carousel()->uiEngine();
+    if ( uiEngine ) {
+        uiEngine->model().setData( modelIndex(), mFrequency, RadioStationModel::ToggleFavoriteRole );
+    }
 }
 
 /*!
@@ -164,14 +170,15 @@
         return;
     }
 
-    RadioStation tempStation = ( station && station->isValid() ) ? *station
-                    : index.data( RadioStationModel::RadioStationRole ).value<RadioStation>();
+    RadioUiEngine* uiEngine = carousel()->uiEngine();
+    if ( !mCarousel.isInScanningMode() && uiEngine ) {
+        RadioStation tempStation = ( station && station->isValid() ) ? *station
+                        : index.data( RadioStationModel::RadioStationRole ).value<RadioStation>();
 
-    mNameLabel->setTextWithoutFading( RadioUiEngine::nameOrFrequency( tempStation ) );
-    mGenreLabel->setText( carousel()->uiEngine().genreToString( tempStation.genre() ) );
-    if ( !carousel()->isAntennaAttached() ) {
-        mRadiotextLabel->setText( hbTrId( CONNECT_HEADSET_TEXT ) );
-    } else {
+        mNameLabel->setTextWithoutFading( nameOrFrequency( tempStation ) );
+
+        mGenreLabel->setText( uiEngine->genreToString( tempStation.genre(), GenreTarget::Carousel ) );
+
         if ( !tempStation.radioText().isEmpty() ) {
             mRadiotextLabel->setText( tempStation.radioText() );
         } else if ( !tempStation.dynamicPsText().isEmpty() ) {
@@ -179,13 +186,13 @@
         } else {
             mRadiotextLabel->setText( "" );
         }
-    }
 
-    mUrlLabel->setText( tempStation.url() );
+        mUrlLabel->setText( tempStation.url() );
 
-    mFrequency = tempStation.frequency();
+        mFrequency = tempStation.frequency();
 
-    updateFavoriteIcon( tempStation.isFavorite() );
+        updateFavoriteIcon( tempStation.isFavorite() );
+    }
 }
 
 /*!
@@ -193,10 +200,11 @@
  */
 void RadioStationItem::setFrequency( uint frequency )
 {
-    LOG_FORMAT( "RadioStationItem::setFrequency: %u", frequency );
-    mNameLabel->setTextWithoutFading( RadioUiEngine::parseFrequency( frequency ) );
+    LOG_FORMAT( "RadioStationItem::setFrequency: %d", frequency );
+
+    mNameLabel->setTextWithoutFading( parseFrequency( frequency ) );
     mGenreLabel->setTextWithoutFading( "" );
-    mRadiotextLabel->setTextWithoutFading( carousel()->isAntennaAttached() ? "" : hbTrId( CONNECT_HEADSET_TEXT ) );
+    mRadiotextLabel->setTextWithoutFading( "" );
     mUrlLabel->setTextWithoutFading( "" );
     mFrequency = frequency;
     updateFavoriteIcon( false );
@@ -205,12 +213,12 @@
 /*!
  *
  */
-void RadioStationItem::setSeekingText()
+void RadioStationItem::cleanRdsData()
 {
-    mNameLabel->setTextWithoutFading( hbTrId( SEEKING_TEXT ) );
+    mNameLabel->setTextWithoutFading( "" );
     mGenreLabel->setTextWithoutFading( "" );
+    mRadiotextLabel->setTextWithoutFading( "" );
     mUrlLabel->setTextWithoutFading( "" );
-    mRadiotextLabel->setTextWithoutFading( "" );
 }
 
 /*!
@@ -218,7 +226,11 @@
  */
 void RadioStationItem::updateFavoriteIcon( bool isFavorite )
 {
-    mIconButton->setIcon( isFavorite ? mCarousel.favoriteIcon() : mCarousel.nonFavoriteIcon() );
+    if ( !mCarousel.isInScanningMode() ) {
+        mIconButton->setIcon( isFavorite ? mCarousel.favoriteIcon() : mCarousel.nonFavoriteIcon() );
+    } else {
+        mIconButton->setIcon( HbIcon( "" ) );
+    }
 }
 
 /*!
@@ -229,3 +241,31 @@
     return static_cast<RadioStationCarousel*>( itemView() );
 }
 
+/*!
+ *
+ */
+QString RadioStationItem::parseFrequency( const uint frequency )
+{
+    //TODO: Frequency localization temporarily disabled
+    QString loc = "%L1 Mhz";// "txt_rad_list_l1_mhz_big" );
+    return loc.arg( RadioStation::parseFrequency( frequency ) );
+}
+
+/*!
+ *
+ */
+QString RadioStationItem::nameOrFrequency( const RadioStation& station, uint frequency )
+{
+    if ( frequency == 0 ) {
+        frequency = station.frequency();
+    }
+
+    QString text = "";
+    if ( station.isValid() && !station.name().isEmpty() ) {
+        text = station.name();
+    } else {
+        text = parseFrequency( frequency );
+    }
+
+    return text;
+}
--- a/radioapp/radiowidgets/src/radiostationsview.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/src/radiostationsview.cpp	Mon May 03 12:31:41 2010 +0300
@@ -21,34 +21,43 @@
 #include <HbPushButton>
 #include <HbEffect>
 #include <HbAction>
+#include <HbMessageBox>
+#include <HbInputDialog>
+#include <HbMenu>
 
 // User includes
 #include "radiostationsview.h"
 #include "radiologger.h"
 #include "radiomainwindow.h"
-#include "radiolocalization.h"
 #include "radiouiengine.h"
 #include "radiobannerlabel.h"
 #include "radiofrequencyscanner.h"
-#include "radiocontextmenu.h"
 #include "radioxmluiloader.h"
 #include "radiostationmodel.h"
+#include "radiostation.h"
 #include "radiostationfiltermodel.h"
 
-const char* SECTION_SHOW_ALL_STATIONS = "show_all_stations";
-const char* SECTION_SHOW_FAVORITES = "show_favorites";
-const char* SECTION_SHOW_SCAN_TEXT = "show_scan_text";
-const char* SECTION_HIDE_SCAN_TEXT = "hide_scan_text";
-
 /*!
  *
  */
-RadioStationsView::RadioStationsView( RadioXmlUiLoader* uiLoader ) :
-    RadioViewBase( uiLoader, false ),
+RadioStationsView::RadioStationsView() :
+    RadioViewBase( false ),
+    mModel( 0 ),
+    mFilterModel( 0 ),
+    mScanStationsAction( 0 ),
+    mClearListAction( 0 ),
     mStationsList( 0 ),
     mHeadingBanner( 0 ),
     mFavoritesButton( 0 ),
-    mLocalStationsButton( 0 )
+    mLocalStationsButton( 0 ),
+    mSelectedStation( new RadioStation )
+{
+}
+
+/*!
+ *
+ */
+RadioStationsView::~RadioStationsView()
 {
 }
 
@@ -92,9 +101,9 @@
 {
     LOG_TIMESTAMP( "Channel change started" );
     QModelIndex sourceIndex = mFilterModel->mapToSource( index );
-    RadioStation station = mModel->stationAt( sourceIndex.row() );
+    *mSelectedStation = mModel->stationAt( sourceIndex.row() );
     RADIO_ASSERT( station.isValid(), "FMRadio", "invalid RadioStation");
-    mMainWindow->uiEngine().tunePreset( station.presetIndex() );
+    mMainWindow->uiEngine().tunePreset( mSelectedStation->presetIndex() );
 }
 
 /*!
@@ -103,16 +112,19 @@
  */
 void RadioStationsView::listItemLongPressed( HbAbstractViewItem* item, const QPointF& coords )
 {
-    QModelIndex sourceIndex = mFilterModel->mapToSource( item->modelIndex() );
-    RadioStation station = mModel->stationAt( sourceIndex.row() );
-    RADIO_ASSERT( station.isValid() , "FMRadio", "invalid RadioStation");
+    Q_UNUSED( item );
+
+    HbMenu* menu = mUiLoader->findObject<HbMenu>( DOCML::NAME_CONTEXT_MENU );
+
+    *mSelectedStation = mFilterModel->data( item->modelIndex(), RadioStationModel::RadioStationRole ).value<RadioStation>();
 
-    //TODO: Remove this. This is a temporary workaround for an Orbit bug in HbMenu
-//    RadioContextMenu* menu = new RadioContextMenu( mMainWindow->uiEngine() );
-//    menu->init( station, QPointF( size().width() / 2, coords.y() ) );
+    HbAction* favoriteAction = mUiLoader->findObject<HbAction>( DOCML::NAME_CONTEXT_FAVORITE );
+    if ( mSelectedStation->isFavorite() ) {
+        favoriteAction->setText( hbTrId( "txt_rad_menu_remove_favourite" ) );
+    } else {
+        favoriteAction->setText( hbTrId( "txt_rad_menu_add_to_favourites" ) );
+    }
 
-    RadioContextMenu* menu = mUiLoader->findObject<RadioContextMenu>( DOCML_NAME_CONTEXT_MENU );
-    menu->init( station, *mUiLoader );
     menu->setPreferredPos( QPointF( size().width() / 2 - menu->size().width() / 2, coords.y() - menu->size().height() / 2 ) );
     menu->show();
 }
@@ -121,7 +133,7 @@
  * Private slot
  *
  */
-void RadioStationsView::updateHeadsetStatus( bool connected )
+void RadioStationsView::updateAntennaStatus( bool connected )
 {
     Q_UNUSED( connected );
     updateControlVisibilities();
@@ -140,14 +152,12 @@
  * Private slot
  *
  */
-
 void RadioStationsView::deckButtonPressed()
-{    
-    bool ok = false;
+{
     if ( sender() == mFavoritesButton ) {
-        mUiLoader->load( DOCML_STATIONSVIEW_FILE, SECTION_SHOW_FAVORITES, &ok );
+        loadSection( DOCML::FILE_STATIONSVIEW, DOCML::SV_SECTION_SHOW_FAVORITES );
     } else {
-        mUiLoader->load( DOCML_STATIONSVIEW_FILE, SECTION_SHOW_ALL_STATIONS, &ok );
+        loadSection( DOCML::FILE_STATIONSVIEW, DOCML::SV_SECTION_SHOW_ALL_STATIONS );
     }
 
     const bool showFavorites = mFavoritesButton->isChecked();
@@ -161,12 +171,22 @@
  * Private slot
  *
  */
-void RadioStationsView::startScanAndSavePresets()
+void RadioStationsView::startScanning()
 {
-    RadioFrequencyScanner* scanner = new RadioFrequencyScanner( mMainWindow->uiEngine(), this );
-    scanner->startScanning();
-    connectAndTest( scanner,    SIGNAL(frequencyScannerFinished()),
-                    this,       SLOT(updateControlVisibilities()) );
+    const int rowCount =  mMainWindow->uiEngine().model().rowCount();
+    bool scanAllowed = true;
+    if ( rowCount > 0 ) {
+        scanAllowed = HbMessageBox::question( hbTrId( "txt_rad_info_all_stations_in_stations_list_will_be" ) );
+    }
+
+    if ( scanAllowed ) {
+        RadioFrequencyScanner* scanner = new RadioFrequencyScanner( mMainWindow->uiEngine(), this );
+
+        connectAndTest( scanner,    SIGNAL(frequencyScannerFinished()),
+                        this,       SLOT(updateControlVisibilities()) );
+
+        scanner->startScanning( *mUiLoader );
+    }
 }
 
 /*!
@@ -180,41 +200,97 @@
     const bool localStationsMode = !mFavoritesButton->isChecked();
 
     mScanStationsAction->setVisible( mMainWindow->uiEngine().isAntennaAttached()
-                                     && localStationsMode
-                                     && !mMainWindow->uiEngine().isScanning() );
-    mRemoveAllPresetsAction->setVisible( !listEmpty && localStationsMode );
+                                     && localStationsMode );
+    mClearListAction->setVisible( !listEmpty && localStationsMode );
+
+    HbPushButton* scanButton = mUiLoader->findWidget<HbPushButton>( DOCML::SV_NAME_SCAN_BUTTON );
+
+    if ( !mMainWindow->uiEngine().isAntennaAttached() ) {
+        scanButton->setEnabled( false );
+    } else {
+        scanButton->setEnabled( true );
+    }
+
+    loadSection( DOCML::FILE_STATIONSVIEW, listEmpty ? DOCML::SV_SECTION_SHOW_SCAN_TEXT : DOCML::SV_SECTION_HIDE_SCAN_TEXT );
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioStationsView::rename()
+{
+    HbInputDialog nameQuery;
+    nameQuery.setPromptText( hbTrId( "txt_rad_dialog_new_name" ) );
+    nameQuery.setInputMode( HbInputDialog::TextInput );
+    nameQuery.setValue( mSelectedStation->name() );
+    nameQuery.setObjectName( DOCML::NAME_INPUT_QUERY );
 
-    bool ok = false;
-    mUiLoader->load( DOCML_STATIONSVIEW_FILE, listEmpty ? SECTION_SHOW_SCAN_TEXT : SECTION_HIDE_SCAN_TEXT, &ok );
+    if ( nameQuery.exec() == nameQuery.primaryAction() ) {
+        mModel->renameStation( mSelectedStation->presetIndex(), nameQuery.value().toString() );
+    }
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioStationsView::toggleFavorite()
+{
+    if ( mSelectedStation->isFavorite() ) {
+        const bool answer = HbMessageBox::question( hbTrId( "txt_rad_info_remove_station_from_favorites" ) );
+
+        if ( answer ){
+            mModel->setFavoriteByPreset( mSelectedStation->presetIndex(), !mSelectedStation->isFavorite() );
+        }
+    } else {
+        mModel->setFavoriteByPreset( mSelectedStation->presetIndex(), !mSelectedStation->isFavorite() );
+    }
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioStationsView::deleteStation()
+{
+    const bool answer = HbMessageBox::question( hbTrId( "txt_rad_menu_delete_station" ) );
+
+    if ( answer ) {
+        mModel->removeStation( mModel->currentStation() );
+    }
 }
 
 /*!
  * From RadioViewBase
  *
  */
-void RadioStationsView::init( RadioMainWindow* aMainWindow, RadioStationModel* aModel )
+void RadioStationsView::init( RadioXmlUiLoader* uiLoader, RadioMainWindow* mainWindow )
 {
     LOG_METHOD;
-    mMainWindow = aMainWindow;
-    mModel = aModel;
+    mUiLoader.reset( uiLoader );
+    mMainWindow = mainWindow;
+    mModel = &mMainWindow->uiEngine().model();
 
     RadioUiEngine* engine = &mMainWindow->uiEngine();
 
     mFilterModel = engine->createNewFilterModel( this );
     mFilterModel->setTypeFilter( RadioStation::LocalStation );
 
+    loadSection( DOCML::FILE_STATIONSVIEW, DOCML::SV_SECTION_SHOW_ALL_STATIONS );
+
     if ( !mFavoriteIcon.isNull() && !mNowPlayingIcon.isNull() ) {
         mModel->setIcons( mFavoriteIcon.qicon(), mNowPlayingIcon.qicon() );
     }
     mModel->setDetail( RadioStationModel::ShowIcons | RadioStationModel::ShowGenre );
 
-    mStationsList           = mUiLoader->findObject<HbListView>( DOCML_NAME_STATIONSLIST );
-    mHeadingBanner          = mUiLoader->findWidget<RadioBannerLabel>( DOCML_NAME_HEADINGBANNER );
-    mFavoritesButton        = mUiLoader->findObject<HbAction>( DOCML_NAME_FAVORITESBUTTON );
-    mLocalStationsButton    = mUiLoader->findObject<HbAction>( DOCML_NAME_LOCALSBUTTON );
+    mStationsList           = mUiLoader->findObject<HbListView>( DOCML::SV_NAME_STATIONS_LIST );
+    mHeadingBanner          = mUiLoader->findWidget<RadioBannerLabel>( DOCML::SV_NAME_HEADING_BANNER );
+    mFavoritesButton        = mUiLoader->findObject<HbAction>( DOCML::SV_NAME_FAVORITES_BUTTON );
+    mLocalStationsButton    = mUiLoader->findObject<HbAction>( DOCML::SV_NAME_LOCALS_BUTTON );
 
-    connectAndTest( engine,                 SIGNAL(headsetStatusChanged(bool)),
-                    this,                   SLOT(updateHeadsetStatus(bool)) );
+    connectAndTest( engine,                 SIGNAL(antennaStatusChanged(bool)),
+                    this,                   SLOT(updateAntennaStatus(bool)) );
     connectAndTest( mModel,                 SIGNAL(rowsInserted(QModelIndex,int,int)),
                     this,                   SLOT(updateControlVisibilities() ) );
     connectAndTest( mModel,                 SIGNAL(rowsRemoved(QModelIndex,int,int)),
@@ -228,20 +304,16 @@
 
     connectAndTest( engine, SIGNAL(tunedToFrequency(uint,int)), this, SLOT(updateCurrentStation()) );
 
-    // "Go to tuning view" menu item
-    connectViewChangeMenuItem( DOCML_NAME_TUNINGVIEWACTION, SLOT(activateTuningView()) );
-
     // "Scan local stations" menu item
-    mScanStationsAction = mUiLoader->findObject<HbAction>( DOCML_NAME_SCANSTATIONSACTION );
+    mScanStationsAction = mUiLoader->findObject<HbAction>( DOCML::SV_NAME_SCAN_ACTION );
     
     // "Remove all presets" menu item
-    mRemoveAllPresetsAction = mUiLoader->findObject<HbAction>( DOCML_NAME_REMOVESTATIONSACTION );
+    mClearListAction = mUiLoader->findObject<HbAction>( DOCML::SV_NAME_CLEAR_LIST_ACTION );
+    connectAndTest( mClearListAction,   SIGNAL(triggered() ),
+                    mModel,             SLOT(removeAll() ) );
 
     connectCommonMenuItem( MenuItem::UseLoudspeaker );
 
-    // Connect the "Remove all presets" menu item
-    connectXmlElement( DOCML_NAME_REMOVESTATIONSACTION, SIGNAL(triggered()), mModel, SLOT(removeAll()) );
-
     initListView();
     
     initBackAction();
@@ -255,7 +327,6 @@
     RadioViewBase::showEvent( event );
     mModel->setDetail( RadioStationModel::ShowIcons | RadioStationModel::ShowGenre );
     updateControlVisibilities();
-    updateHeading();
 }
 
 /*!
@@ -268,12 +339,3 @@
     mStationsList->setSelectionMode( HbListView::NoSelection );
     mStationsList->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
 }
-
-/*!
- *
- */
-void RadioStationsView::updateHeading()
-{
-//    mHeadingBanner->setPlainText( mFavoritesButton->isChecked() ? TRANSLATE( KHeadingTextFavorites )
-//                                                                : TRANSLATE( KHeadingTextLocalStations ) );
-}
--- a/radioapp/radiowidgets/src/radiostripbase.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/src/radiostripbase.cpp	Mon May 03 12:31:41 2010 +0300
@@ -39,8 +39,7 @@
     mCurrentIndex( 0 ),
     mPressedIndex( 0 ),
     mStripLength( 0 ),
-    mContentsLength( 0 ),
-    mBackgroundImage( 0 )
+    mContentsLength( 0 )
 {
     setClampingStyle( HbScrollArea::NoClamping );
     setScrollDirections( Qt::Horizontal );
@@ -69,29 +68,6 @@
 /*!
  *
  */
-void RadioStripBase::setBackground( const HbIcon& background )
-{
-    // Create background image for the entire widget
-    mBackground = background;
-    if ( !mBackgroundImage ) {
-        mBackgroundImage = new QGraphicsPixmapItem( this );
-    }
-    mBackgroundImage->setPixmap( mBackground.pixmap() );
-    mBackgroundImage->setOffset( QPointF( 0.0, 0.0 ) );
-    mBackgroundImage->setZValue( -10.0 );
-}
-
-/*!
- *
- */
-HbIcon RadioStripBase::background() const
-{
-    return mBackground;
-}
-
-/*!
- *
- */
 void RadioStripBase::setAutoScrollTime( const int time )
 {
     mAutoScrollTime = time;
@@ -218,10 +194,7 @@
  */
 void RadioStripBase::resizeEvent( QGraphicsSceneResizeEvent* event )
 {
-    if ( mBackgroundImage ) {
-        QPixmap background = mBackgroundImage->pixmap().scaledToWidth( event->newSize().width() );
-        mBackgroundImage->setPixmap( background );
-    }
+    Q_UNUSED( event );
     populateAndLayout();
 }
 
--- a/radioapp/radiowidgets/src/radiotuningview.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/src/radiotuningview.cpp	Mon May 03 12:31:41 2010 +0300
@@ -16,24 +16,31 @@
 */
 
 // System includes
+#include <QTimer>
+#include <HbLabel>
+#include <HbPushButton>
+#include <HbMessageBox>
 
 // User includes
 #include "radiomainwindow.h"
 #include "radiotuningview.h"
 #include "radiofrequencystrip.h"
-#include "radiolocalization.h"
 #include "radiouiengine.h"
 #include "radiologger.h"
 #include "radiostationcarousel.h"
-#include "radiostationcontrolwidget.h"
 #include "radioxmluiloader.h"
 #include "radiostationmodel.h"
+#include "radiofrequencyscanner.h"
+
+// Constants
 
 /*!
  *
  */
-RadioTuningView::RadioTuningView( RadioXmlUiLoader* uiLoader ) :
-    RadioViewBase( uiLoader, false )
+RadioTuningView::RadioTuningView() :
+    RadioViewBase( false ),
+    mFrequencyScanner( 0 ),
+    mCarousel( 0 )
 {
 }
 
@@ -41,55 +48,101 @@
  * From RadioViewBase
  *
  */
-void RadioTuningView::init( RadioMainWindow* aMainWindow, RadioStationModel* aModel )
+void RadioTuningView::setScanningMode( bool scanning )
+{
+    HbPushButton* scanButton = mUiLoader->findWidget<HbPushButton>( DOCML::TV_NAME_SCAN_BUTTON );
+    if ( scanning ) {
+        disconnect( scanButton,     SIGNAL(clicked()),
+                    this,           SLOT(startScanning()) );
+        connectAndTest( scanButton,         SIGNAL(clicked()),
+                        mFrequencyScanner,  SLOT(scanAndSavePresetsCancelled()) );
+        loadSection( DOCML::FILE_TUNINGVIEW, DOCML::TV_SECTION_SCANNING );
+    } else {
+        disconnect( scanButton, SIGNAL(clicked()) );
+        connectAndTest( scanButton,     SIGNAL(clicked()),
+                        this,           SLOT(startScanning()) );
+        loadSection( DOCML::FILE_TUNINGVIEW, DOCML::TV_SECTION_NORMAL );
+    }
+}
+
+/*!
+ * From RadioViewBase
+ *
+ */
+void RadioTuningView::init( RadioXmlUiLoader* uiLoader, RadioMainWindow* mainWindow )
 {
     LOG_METHOD;
-    mMainWindow = aMainWindow;
-    mModel = aModel;
+    mUiLoader.reset( uiLoader );
+    mMainWindow = mainWindow;
 
-    RadioStationCarousel* carousel = mUiLoader->findObject<RadioStationCarousel>( DOCML_NAME_STATIONCAROUSEL );
-
-    RadioStationControlWidget* stationControlWidget = mUiLoader->findObject<RadioStationControlWidget>( DOCML_NAME_STATIONCONTROLWIDGET );
-    stationControlWidget->init( mMainWindow );
+    mCarousel = mUiLoader->findObject<RadioStationCarousel>( DOCML::TV_NAME_STATION_CAROUSEL );
+    mCarousel->init( &mMainWindow->uiEngine() );
 
     // Note! UI connections are already made in the DocML file. Here we need to connect UI to engine
     RadioUiEngine* engine = &mMainWindow->uiEngine();
-    RadioFrequencyStrip* frequencyStrip = mUiLoader->findObject<RadioFrequencyStrip>( DOCML_NAME_FREQUENCYSTRIP );
+    RadioFrequencyStrip* frequencyStrip = mUiLoader->findObject<RadioFrequencyStrip>( DOCML::TV_NAME_FREQUENCY_STRIP );
     RadioStationModel* stationModel = &engine->model();
 
-    connectAndTest( frequencyStrip,     SIGNAL(frequencyChanged(uint,int)),
-                    engine,             SLOT(tuneWithDelay(uint,int)) );
-    connectAndTest( frequencyStrip,     SIGNAL(frequencyChanged(uint,int)),
-                    carousel,           SLOT(setFrequency(uint)) );
-    connectAndTest( carousel,           SIGNAL(frequencyChanged(uint,int)),
-                    frequencyStrip,     SLOT(setFrequency(uint,int)) );
-    connectAndTest( engine,             SIGNAL(tunedToFrequency(uint,int)),
-                    frequencyStrip,     SLOT(setFrequency(uint,int)) );
-    connectAndTest( stationModel,       SIGNAL(favoriteChanged(RadioStation)),
-                    frequencyStrip,     SLOT(favoriteChanged(RadioStation)) );
-    connectAndTest( stationModel,       SIGNAL(stationAdded(RadioStation)),
-                    frequencyStrip,     SLOT(stationAdded(RadioStation)) );
-    connectAndTest( stationModel,       SIGNAL(stationRemoved(RadioStation)),
-                    frequencyStrip,     SLOT(stationRemoved(RadioStation)) );
-    connectAndTest( frequencyStrip,     SIGNAL(swipedLeft()),
-                    engine,             SLOT(skipNext()) );
-    connectAndTest( frequencyStrip,     SIGNAL(swipedRight()),
-                    engine,             SLOT(skipPrevious()) );
-    connectAndTest( engine,             SIGNAL(seekingStarted(int)),
-                    carousel,           SLOT(setSeekingText()) );
-    connectAndTest( engine,             SIGNAL(headsetStatusChanged(bool)),
-                    carousel,           SLOT(updateHeadsetStatus(bool)) );
+    connectAndTest( frequencyStrip,             SIGNAL(frequencyChanged(uint,int)),
+                    engine,                     SLOT(tuneWithDelay(uint,int)) );
+    connectAndTest( frequencyStrip,             SIGNAL(frequencyChanged(uint,int)),
+                    mCarousel,                  SLOT(setFrequency(uint)) );
+    connectAndTest( mCarousel,                  SIGNAL(frequencyChanged(uint,int)),
+                    frequencyStrip,             SLOT(setFrequency(uint,int)) );
+    connectAndTest( engine,                     SIGNAL(tunedToFrequency(uint,int)),
+                    frequencyStrip,             SLOT(setFrequency(uint,int)) );
+    connectAndTest( engine,                     SIGNAL(tunedToFrequency(uint,int)),
+                    this,                       SLOT(seekingFinished()) );
+    connectAndTest( stationModel,               SIGNAL(favoriteChanged(RadioStation)),
+                    frequencyStrip,             SLOT(favoriteChanged(RadioStation)) );
+    connectAndTest( stationModel,               SIGNAL(stationAdded(RadioStation)),
+                    frequencyStrip,             SLOT(stationAdded(RadioStation)) );
+    connectAndTest( stationModel,               SIGNAL(stationRemoved(RadioStation)),
+                    frequencyStrip,             SLOT(stationRemoved(RadioStation)) );
+    connectAndTest( frequencyStrip,             SIGNAL(swipedLeft()),
+                    engine,                     SLOT(skipNext()) );
+    connectAndTest( frequencyStrip,             SIGNAL(swipedRight()),
+                    engine,                     SLOT(skipPrevious()) );
+    connectAndTest( engine,                     SIGNAL(seekingStarted(int)),
+                    this,                       SLOT(seekingStarted()) );
+    connectAndTest( engine,                     SIGNAL(antennaStatusChanged(bool)),
+                    mCarousel,                  SLOT(updateAntennaStatus(bool)) );
+    connectAndTest( engine,                     SIGNAL(antennaStatusChanged(bool)),
+                    this,                       SLOT(updateAntennaStatus(bool)) );
+    connectAndTest( engine,                     SIGNAL(audioRouteChanged(bool)),
+                    this,                       SLOT(updateAudioRoute(bool)) );
+
+    HbPushButton* stationsButton = mUiLoader->findWidget<HbPushButton>( DOCML::TV_NAME_STATIONS_BUTTON );
+    connectAndTest( stationsButton,             SIGNAL(clicked()),
+                    mMainWindow,                SLOT(activateStationsView()) );
+
+    HbPushButton* scanButton = mUiLoader->findWidget<HbPushButton>( DOCML::TV_NAME_SCAN_BUTTON );
+    connectAndTest( scanButton,                 SIGNAL(clicked()),
+                    this,                       SLOT(startScanning()) );
+
+    HbPushButton* loudspeakerButton = mUiLoader->findWidget<HbPushButton>( DOCML::TV_NAME_SPEAKER_BUTTON );
+    connectAndTest( loudspeakerButton,          SIGNAL(clicked()),
+                    engine,                     SLOT(toggleAudioRoute()) );
 
     frequencyStrip->connectLeftButton( SIGNAL(clicked()), engine, SLOT(skipPrevious()) );
     frequencyStrip->connectRightButton( SIGNAL(clicked()), engine, SLOT(skipNext()) );
+    frequencyStrip->connectLeftButton( SIGNAL(clicked()), this, SLOT(buttonPressed()) );
+    frequencyStrip->connectRightButton( SIGNAL(clicked()), this, SLOT(buttonPressed()) );
 
     frequencyStrip->connectLeftButton( SIGNAL(longPress(QPointF)), engine, SLOT(seekDown()) );
     frequencyStrip->connectRightButton( SIGNAL(longPress(QPointF)), engine, SLOT(seekUp()) );
 
-    // "Play log" menu item
-    connectViewChangeMenuItem( DOCML_NAME_PLAYLOGVIEWACTION, SLOT(activatePlayLogView()) );
+    // "Play history" menu item
+    connectViewChangeMenuItem( DOCML::TV_NAME_HISTORYVIEW_ACTION, SLOT(activateHistoryView()) );
+
+    const bool firsTimeStart = engine->isFirstTimeStart();
+    const int rowCount = engine->model().rowCount();
 
-    connectCommonMenuItem( MenuItem::UseLoudspeaker );
+    updateAudioRoute( mMainWindow->uiEngine().isUsingLoudspeaker() );
+
+    if ( firsTimeStart && rowCount == 0 ){
+        QTimer::singleShot( 100, this, SLOT(startScanning()) );
+    }
 }
 
 /*!
@@ -98,10 +151,7 @@
  */
 void RadioTuningView::setOrientation()
 {
-    bool ok = false;
-    QString section = mMainWindow->orientationSection();
-    mUiLoader->load( DOCML_TUNINGVIEW_FILE, section, &ok );
-//    LOG_ASSERT( ok, LOG_FORMAT( "Failed to set orientation %1 from docml %2", section, *DOCML_TUNINGVIEW_FILE ) );
+    loadSection( DOCML::FILE_TUNINGVIEW, mMainWindow->orientationSection() );
 }
 
 /*!
@@ -110,6 +160,119 @@
 void RadioTuningView::toggleFavorite()
 {
     bool favorite = false;
-    uint frequency = mUiLoader->findObject<RadioFrequencyStrip>( DOCML_NAME_FREQUENCYSTRIP )->frequency( &favorite );
-    mModel->setFavoriteByFrequency( frequency, !favorite );
+    uint frequency = mUiLoader->findObject<RadioFrequencyStrip>( DOCML::TV_NAME_FREQUENCY_STRIP )->frequency( &favorite );
+    mMainWindow->uiEngine().model().setFavoriteByFrequency( frequency, !favorite );
+}
+
+/*!
+ * Private slot
+ */
+void RadioTuningView::startScanning()
+{
+    const int rowCount =  mMainWindow->uiEngine().model().rowCount();
+    bool scanAllowed = true;
+    if ( rowCount > 0 ) {
+        scanAllowed = HbMessageBox::question( hbTrId( "txt_rad_info_all_stations_in_stations_list_will_be" ) );
+    }
+
+    if ( scanAllowed ) {
+        mFrequencyScanner = new RadioFrequencyScanner( mMainWindow->uiEngine(), this );
+
+        connectAndTest( mFrequencyScanner,  SIGNAL(frequencyScannerFinished() ),
+                        this,               SLOT(scanningFinished()) );
+
+        mFrequencyScanner->startScanning( *mUiLoader );
+    }
+}
+
+/*!
+ * Private slot
+ */
+void RadioTuningView::scanningFinished()
+{
+    disconnect( mFrequencyScanner,  SIGNAL(frequencyScannerFinished() ),
+                this,               SLOT(scanningFinished()) );
+
+    loadSection( DOCML::FILE_TUNINGVIEW, DOCML::TV_SECTION_NORMAL );
+    mFrequencyScanner = 0;
+}
+
+/*!
+ * Private slot
+ */
+void RadioTuningView::seekingStarted()
+{
+    mCarousel->cleanRdsData();
+    loadSection( DOCML::FILE_TUNINGVIEW, DOCML::TV_SECTION_SEEKING );
+    HbLabel* infoText = mUiLoader->findWidget<HbLabel>( DOCML::TV_NAME_INFO_TEXT );
+    infoText->setAlignment( Qt::AlignBottom | Qt::AlignHCenter );
+}
+
+/*!
+ * Private slot
+ */
+void RadioTuningView::seekingFinished()
+{
+    if ( !mFrequencyScanner && mMainWindow->uiEngine().isAntennaAttached() ) {
+        loadSection( DOCML::FILE_TUNINGVIEW, DOCML::TV_SECTION_NORMAL );
+    }
 }
+
+/*!
+ * Private slot
+ */
+void RadioTuningView::updateAntennaStatus( bool connected )
+{
+    if ( !connected ) {
+        mCarousel->cleanRdsData();
+        loadSection( DOCML::FILE_TUNINGVIEW, DOCML::TV_SECTION_NO_ANTENNA );
+
+        HbLabel* infoText = mUiLoader->findWidget<HbLabel>( DOCML::TV_NAME_INFO_TEXT );
+        infoText->setAlignment( Qt::AlignBottom | Qt::AlignHCenter );
+        infoText->setTextWrapping( Hb::TextWordWrap );
+    } else {
+        loadSection( DOCML::FILE_TUNINGVIEW, DOCML::TV_SECTION_NORMAL );
+    }
+}
+
+/*!
+ * Private slot
+ */
+void RadioTuningView::updateAudioRoute( bool loudspeaker )
+{
+    HbPushButton* loudspeakerButton = mUiLoader->findWidget<HbPushButton>( DOCML::TV_NAME_SPEAKER_BUTTON );
+    if ( loudspeaker ) {
+        loudspeakerButton->setIcon( HbIcon( "qtg_mono_speaker_off.svg" ) );
+        loudspeakerButton->setText( hbTrId( "txt_rad_button_deactivate_loudspeaker" ) );
+    } else {
+        loudspeakerButton->setIcon( HbIcon( "qtg_mono_speaker.svg" ) );
+        loudspeakerButton->setText( hbTrId( "txt_rad_button_activate_loudspeaker" ) );
+    }
+}
+
+/*!
+ * Private slot
+ */
+void RadioTuningView::buttonPressed()
+{
+    if ( mMainWindow->uiEngine().model().favoriteCount() == 0 ) {
+
+        mCarousel->setItemVisibility( false );
+
+        loadSection( DOCML::FILE_TUNINGVIEW, DOCML::TV_SECTION_NO_FAVORITES );
+        HbLabel* infoText = mUiLoader->findWidget<HbLabel>( DOCML::TV_NAME_INFO_TEXT );
+        infoText->setAlignment( Qt::AlignCenter );
+        infoText->setTextWrapping( Hb::TextWordWrap );
+
+        QTimer::singleShot( 6000, this, SLOT(removeInfoText()) );
+    }
+}
+
+/*!
+ * Private slot
+ */
+void RadioTuningView::removeInfoText()
+{
+    mCarousel->setItemVisibility( true );
+    loadSection( DOCML::FILE_TUNINGVIEW, DOCML::TV_SECTION_NORMAL );
+}
--- a/radioapp/radiowidgets/src/radiouiutilities.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/src/radiouiutilities.cpp	Mon May 03 12:31:41 2010 +0300
@@ -20,10 +20,28 @@
 
 // User includes
 #include "radiouiutilities.h"
+#include "radiofrequencystrip.h"
+#include "radiostationcarousel.h"
 #include "radiologger.h"
 
 // Constants
 
+static RadioUiUtilities* theInstance = 0;
+
+/*!
+ *
+ */
+RadioUiUtilities::RadioUiUtilities()
+{
+}
+
+/*!
+ *
+ */
+RadioUiUtilities::~RadioUiUtilities()
+{
+}
+
 /*!
  *
  */
@@ -51,3 +69,48 @@
 
     return allAvailable;
 }
+
+
+/*!
+ *
+ */
+RadioFrequencyStrip* RadioUiUtilities::frequencyStrip()
+{
+    return instance().mFrequencyStrip;
+}
+
+/*!
+ *
+ */
+RadioStationCarousel* RadioUiUtilities::carousel()
+{
+    return instance().mCarousel;
+}
+
+/*!
+ *
+ */
+void RadioUiUtilities::setFrequencyStrip( RadioFrequencyStrip* frequencyStrip )
+{
+    instance().mFrequencyStrip = frequencyStrip;
+}
+
+/*!
+ *
+ */
+void RadioUiUtilities::setCarousel( RadioStationCarousel* carousel )
+{
+    instance().mCarousel = carousel;
+}
+
+/*!
+ *
+ */
+RadioUiUtilities& RadioUiUtilities::instance()
+{
+    if ( !::theInstance ) {
+        ::theInstance = new RadioUiUtilities;
+    }
+    return *::theInstance;
+}
+
--- a/radioapp/radiowidgets/src/radioviewbase.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/src/radioviewbase.cpp	Mon May 03 12:31:41 2010 +0300
@@ -25,17 +25,15 @@
 #include "radiostationmodel.h"
 #include "radioxmluiloader.h"
 #include "radiouiengine.h"
-#include "radiolocalization.h"
 #include "radiologger.h"
 
 /*!
  *
  */
-RadioViewBase::RadioViewBase( RadioXmlUiLoader* uiLoader, bool transient ) :
+RadioViewBase::RadioViewBase( bool transient ) :
     HbView( 0 ),
     mMainWindow( 0 ),
-    mModel( 0 ),
-    mUiLoader( uiLoader ),
+    mUiLoader( 0 ),
     mTransientView( transient ),
     mUseLoudspeakerAction( 0 ),
     mOrientation( Qt::Vertical )
@@ -47,8 +45,7 @@
  */
 RadioViewBase::~RadioViewBase()
 {
-    if ( mUiLoader )
-    {
+    if ( mUiLoader ) {
         mUiLoader->reset();
     }
 }
@@ -56,11 +53,11 @@
 /*!
  *
  */
-void RadioViewBase::init( RadioMainWindow* aMainWindow, RadioStationModel* aModel )
+void RadioViewBase::init( RadioXmlUiLoader* uiLoader, RadioMainWindow* mainWindow )
 {
     // Default implementation does nothing
-    Q_UNUSED( aMainWindow );
-    Q_UNUSED( aModel );
+    Q_UNUSED( uiLoader );
+    Q_UNUSED( mainWindow );
 }
 
 /*!
@@ -127,23 +124,12 @@
 /*!
  *
  */
-HbAction* RadioViewBase::addMenuItem( const QString& aTitle, QObject* aRecipient, const char* aSlot )
-{
-    HbAction* action = menu()->addAction( aTitle );
-    connectAndTest( action, SIGNAL(triggered()), aRecipient, aSlot );
-    return action;
-}
-
-/*!
- *
- */
 void RadioViewBase::connectCommonMenuItem( int menuItem )
 {
     RadioUiEngine* engine = &mMainWindow->uiEngine();
-    switch ( menuItem )
-    {
+    switch ( menuItem ) {
         case MenuItem::UseLoudspeaker:
-            mUseLoudspeakerAction = mUiLoader->findObject<HbAction>( DOCML_NAME_LOUDSPEAKERACTION );
+            mUseLoudspeakerAction = mUiLoader->findObject<HbAction>( DOCML::NAME_LOUDSPEAKER_ACTION );
             if ( mUseLoudspeakerAction ) {
                 connectAndTest( mUseLoudspeakerAction, SIGNAL(triggered()), engine, SLOT(toggleAudioRoute()) );
                 updateAudioRouting( engine->isUsingLoudspeaker() );
@@ -161,8 +147,7 @@
  */
 void RadioViewBase::connectXmlElement( const char* name, const char* signal, QObject* receiver, const char* slot )
 {
-    if ( QObject* action = mUiLoader->findObject<QObject>( name ) )
-    {
+    if ( QObject* action = mUiLoader->findObject<QObject>( name ) ) {
         connectAndTest( action, signal, receiver, slot );
     }
 }
@@ -172,8 +157,7 @@
  */
 void RadioViewBase::connectViewChangeMenuItem( QString name, const char* slot )
 {
-    if ( QObject* action = mUiLoader->findObject<QObject>( name ) )
-    {
+    if ( QObject* action = mUiLoader->findObject<QObject>( name ) ) {
         connectAndTest( action, SIGNAL(triggered()), mMainWindow, slot );
     }
 }
@@ -181,6 +165,16 @@
 /*!
  *
  */
+void RadioViewBase::loadSection( const QString& docml, const QString& section )
+{
+    bool ok = false;
+    mUiLoader->load( docml, section, &ok );
+    LOG_ASSERT( ok, LOG_FORMAT( "Loading of section %s failed!", GETSTRING( section ) ) );
+}
+
+/*!
+ *
+ */
 void RadioViewBase::setOrientation()
 {
     // Default implementation does nothing
--- a/radioapp/radiowidgets/src/radiowizardview.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-/*
-* 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:
-*
-*/
-
-// System includes
-#include <HbListView>
-#include <HbAction>
-
-// User includes
-#include "radiowizardview.h"
-#include "radiobannerlabel.h"
-#include "radiomainwindow.h"
-#include "radiouiengine.h"
-#include "radiolocalization.h"
-#include "radiologger.h"
-#include "radiostationmodel.h"
-#include "radiofrequencyscanner.h"
-#include "radioxmluiloader.h"
-
-/*!
- *
- */
-RadioWizardView::RadioWizardView( RadioXmlUiLoader* uiLoader ) :
-    RadioViewBase( uiLoader ),
-    mBannerLabel( 0 ),
-    mStartScanningRequested( false )
-{
-}
-
-/*!
- * Private slot
- *
- */
-void RadioWizardView::engineStatusChanged( bool radioIsOn )
-{
-    if ( radioIsOn )
-    {
-        LOG("Starting scanning after engine started up");
-        disconnect( &mMainWindow->uiEngine(), SIGNAL(radioStatusChanged(bool)), this, SLOT(engineStatusChanged(bool)) );
-        startScanning();
-    }
-}
-
-/*!
- * Private slot
- *
- */
-void RadioWizardView::saveSelectedAsFavorites()
-{
-    mModel->setFavorites( mList->selectionModel()->selectedIndexes() );
-    mMainWindow->activateTuningView();
-}
-
-/*!
- * Private slot
- *
- */
-void RadioWizardView::listItemClicked( const QModelIndex& index )
-{
-    RadioStation station = mModel->stationAt( index.row() );
-    RADIO_ASSERT( station.isValid() , "FMRadio", "invalid RadioStation");
-
-    LOG_FORMAT( "RadioWizardView::setFrequency, selectedRow: %d", station.presetIndex() );
-
-    mMainWindow->uiEngine().tunePreset( station.presetIndex() );
-}
-
-/*!
- * From RadioViewBase
- *
- */
-void RadioWizardView::init( RadioMainWindow* aMainWindow, RadioStationModel* aModel )
-{
-    LOG_METHOD;
-    mMainWindow = aMainWindow;
-    mModel = aModel;
-    mModel->setDetail( RadioStationModel::ShowGenre );
-
-    mBannerLabel        = mUiLoader->findObject<RadioBannerLabel>( DOCML_NAME_WV_HEADINGBANNER );
-    mList               = mUiLoader->findWidget<HbListView>( DOCML_NAME_WV_STATIONSLIST );
-
-    mList->setSelectionMode( HbListView::MultiSelection );
-    mList->setModel( mModel );
-    mList->setScrollingStyle( HbListView::PanOrFlick );
-
-    // "Go to stations view" menu item
-    connectViewChangeMenuItem( DOCML_NAME_WV_STATIONSVIEWACTION, SLOT(activateStationsView()) );
-    
-    setDoneAction();
-}
-
-/*!
- * From QGraphicsWidget
- *
- */
-void RadioWizardView::showEvent( QShowEvent* event )
-{
-    RadioViewBase::showEvent( event );
-
-    RadioUiEngine* engine = &mMainWindow->uiEngine();
-    if ( engine->isRadioOn() && !mStartScanningRequested )
-    {
-        LOG("Engine was already running. Starting scanning immediately");
-        startScanning();
-    }
-    else
-    {
-        connectAndTest( engine, SIGNAL(radioStatusChanged(bool)), this, SLOT(engineStatusChanged(bool)) );
-    }
-}
-
-/*!
- *
- */
-void RadioWizardView::setDoneAction()
-{
-    // The default back button activates the tuning view
-    HbAction* doneAction = new HbAction( Hb::DoneNaviAction, this );
-    connectAndTest( doneAction, SIGNAL(triggered()),
-                    this,       SLOT(saveSelectedAsFavorites()) );
-    setNavigationAction( doneAction );
-}
-
-/*!
- *
- */
-void RadioWizardView::startScanning()
-{
-    if ( !mStartScanningRequested ) {
-        mStartScanningRequested = true;
-        RadioFrequencyScanner* scanner = new RadioFrequencyScanner( mMainWindow->uiEngine(), this );
-        scanner->startScanning();
-    }
-}
--- a/radioapp/radiowidgets/src/radioxmluiloader.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/src/radioxmluiloader.cpp	Mon May 03 12:31:41 2010 +0300
@@ -17,87 +17,11 @@
 
 // User includes
 #include "radioxmluiloader.h"
-#include "radiomainwindow.h"
-#include "radiostationsview.h"
-#include "radiotuningview.h"
-#include "radiowizardview.h"
-#include "radioplaylogview.h"
-#include "radiostationcarousel.h"
-#include "radiostationcontrolwidget.h"
-#include "radiofrequencystrip.h"
-#include "radiobannerlabel.h"
-#include "radiofadinglabel.h"
-#include "radiocontextmenu.h"
-#include "radiostationmodel.h"
-#include "radiouiengine.h"
-
-/*!
- *
- */
-RadioXmlUiLoader::RadioXmlUiLoader( RadioMainWindow& mainWindow ) :
-    HbDocumentLoader(),
-    mMainWindow( mainWindow )
-{
-}
 
 /*!
  *
  */
-QObject* RadioXmlUiLoader::createObject( const QString& type, const QString &name )
+RadioXmlUiLoader::RadioXmlUiLoader() :
+    HbDocumentLoader()
 {
-    QObject* object = 0;
-
-    if ( type == RadioTuningView::staticMetaObject.className() )
-    {
-        object = new RadioTuningView( this );
-    }
-    else if ( type == RadioStationCarousel::staticMetaObject.className() )
-    {
-        object = new RadioStationCarousel( mMainWindow.uiEngine() );
-    }
-    else if ( type == RadioStationControlWidget::staticMetaObject.className() )
-    {
-        object = new RadioStationControlWidget( mMainWindow.uiEngine() );
-    }
-    else if ( type == RadioFrequencyStrip::staticMetaObject.className() )
-    {
-        RadioUiEngine& engine = mMainWindow.uiEngine();
-        object = new RadioFrequencyStrip( engine.minFrequency(),
-                                          engine.maxFrequency(),
-                                          engine.frequencyStepSize(),
-                                          engine.currentFrequency(),
-                                          &engine );
-    }
-    else if ( type == RadioStationsView::staticMetaObject.className() )
-    {
-        object = new RadioStationsView( this );
-    }
-    else if ( type == RadioBannerLabel::staticMetaObject.className() )
-    {
-        object = new RadioBannerLabel();
-    }
-    else if ( type == RadioFadingLabel::staticMetaObject.className() )
-    {
-        object = new RadioFadingLabel();
-    }
-    else if ( type == RadioWizardView::staticMetaObject.className() )
-    {
-        object = new RadioWizardView( this );
-    }
-    else if ( type == RadioContextMenu::staticMetaObject.className() )
-    {
-        object = new RadioContextMenu( mMainWindow.uiEngine() );
-    }
-    else if ( type == RadioPlayLogView::staticMetaObject.className() )
-    {
-        object = new RadioPlayLogView( this );
-    }
-
-    if ( object )
-    {
-        object->setObjectName( name );
-        return object;
-    }
-
-    return HbDocumentLoader::createObject( type, name );
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgetsplugin/main.cpp	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,87 @@
+/*
+* 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:
+*
+*/
+
+// System includes
+#include <QtPlugin>
+#include <hbdocumentloaderplugin>
+
+// User includes
+#include "radiostationsview.h"
+#include "radiotuningview.h"
+#include "radiohistoryview.h"
+#include "radiostationcarousel.h"
+#include "radiofrequencystrip.h"
+#include "radiobannerlabel.h"
+#include "radiofadinglabel.h"
+
+// Class declaration
+class RadioWidgetsPlugin : public HbDocumentLoaderPlugin
+{
+public:
+
+    QObject* createObject(const QString& type, const QString& name);
+    QList<const QMetaObject*> supportedObjects();
+
+};
+
+Q_EXPORT_PLUGIN(RadioWidgetsPlugin)
+
+/*!
+ *
+ */
+QObject* RadioWidgetsPlugin::createObject( const QString& type, const QString& name )
+{
+    QObject* object = 0;
+
+    if ( type == RadioTuningView::staticMetaObject.className() ) {
+        object = new RadioTuningView();
+    } else if ( type == RadioStationsView::staticMetaObject.className() ) {
+        object = new RadioStationsView();
+    } else if ( type == RadioHistoryView::staticMetaObject.className() ) {
+        object = new RadioHistoryView();
+    } else if ( type == RadioStationCarousel::staticMetaObject.className() ) {
+        object = new RadioStationCarousel();
+    } else if ( type == RadioFrequencyStrip::staticMetaObject.className() ) {
+        object = new RadioFrequencyStrip();
+    } else if ( type == RadioBannerLabel::staticMetaObject.className() ) {
+        object = new RadioBannerLabel();
+    } else if ( type == RadioFadingLabel::staticMetaObject.className() ) {
+        object = new RadioFadingLabel();
+    }
+
+    if ( object ) {
+        object->setObjectName( name );
+    }
+
+    return object;
+}
+
+/*!
+ *
+ */
+QList<const QMetaObject *> RadioWidgetsPlugin::supportedObjects()
+{
+    QList<const QMetaObject *> result;
+    result.append( &RadioTuningView::staticMetaObject );
+    result.append( &RadioStationsView::staticMetaObject );
+    result.append( &RadioHistoryView::staticMetaObject );
+    result.append( &RadioBannerLabel::staticMetaObject );
+    result.append( &RadioFadingLabel::staticMetaObject );
+    result.append( &RadioFrequencyStrip::staticMetaObject );
+    result.append( &RadioStationCarousel::staticMetaObject );
+    return result;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgetsplugin/radiowidgetsplugin.pro	Mon May 03 12:31:41 2010 +0300
@@ -0,0 +1,41 @@
+#
+# 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:
+#
+
+TEMPLATE    = lib
+TARGET      = radiowidgetsplugin
+
+win32: {
+    DESTDIR = ../bin
+    LIBS    += -L../bin
+}
+
+CONFIG      += hb plugin
+QT          += core
+
+INCLUDEPATH += ../radiowidgets/inc
+INCLUDEPATH += ../commoninc
+
+symbian: {
+    TARGET.EPOCALLOWDLLDATA = 1
+    TARGET.CAPABILITY       = CAP_GENERAL_DLL
+    pluginstub.sources      = radiowidgetsplugin.dll
+    pluginstub.path         = /resource/plugins
+    DEPLOYMENT              += pluginstub
+}
+
+SOURCES     += main.cpp
+
+LIBS        += -lradiowidgets
--- a/rom/fmradio.iby	Fri Apr 16 14:58:55 2010 +0300
+++ b/rom/fmradio.iby	Mon May 03 12:31:41 2010 +0300
@@ -24,20 +24,22 @@
 #include <data_caging_paths_for_iby.hrh>
 
 S60_APP_EXE(qtfmradio)
-data=ZPRIVATE\10003a3f\import\apps\qtfmradio_reg.rsc    private\10003a3f\import\apps\qtfmradio_reg.rsc
+data=ZPRIVATE\10003a3f\import\apps\qtfmradio_reg.rsc                private\10003a3f\import\apps\qtfmradio_reg.rsc
 
-file=ABI_DIR\BUILD_DIR\radioenginewrapper.dll           SHARED_LIB_DIR\radioenginewrapper.dll
-file=ABI_DIR\BUILD_DIR\radiopresetstorage.dll           SHARED_LIB_DIR\radiopresetstorage.dll
-file=ABI_DIR\BUILD_DIR\radiouiengine.dll                SHARED_LIB_DIR\radiouiengine.dll
-file=ABI_DIR\BUILD_DIR\radiowidgets.dll                 SHARED_LIB_DIR\radiowidgets.dll
+file=ABI_DIR\BUILD_DIR\radioenginewrapper.dll                       SHARED_LIB_DIR\radioenginewrapper.dll       PAGED
+file=ABI_DIR\BUILD_DIR\radiopresetstorage.dll                       SHARED_LIB_DIR\radiopresetstorage.dll       PAGED
+file=ABI_DIR\BUILD_DIR\radiouiengine.dll                            SHARED_LIB_DIR\radiouiengine.dll            PAGED
+file=ABI_DIR\BUILD_DIR\radiowidgets.dll                             SHARED_LIB_DIR\radiowidgets.dll             PAGED
+file=ABI_DIR\BUILD_DIR\radiowidgetsplugin.dll                       SHARED_LIB_DIR\radiowidgetsplugin.dll       PAGED
+data=\epoc32\data\z\resource\plugins\radiowidgetsplugin.qtplugin    resource\plugins\radiowidgetsplugin.qtplugin
 
-file=ABI_DIR\BUILD_DIR\radioengine.dll                  SHARED_LIB_DIR\radioengine.dll
-file=ABI_DIR\BUILD_DIR\radioengineutils.dll             SHARED_LIB_DIR\radioengineutils.dll
-file=ABI_DIR\BUILD_DIR\radioenginesettings.dll          SHARED_LIB_DIR\radioenginesettings.dll
+file=ABI_DIR\BUILD_DIR\radioengine.dll                              SHARED_LIB_DIR\radioengine.dll              PAGED
+file=ABI_DIR\BUILD_DIR\radioengineutils.dll                         SHARED_LIB_DIR\radioengineutils.dll         PAGED
+file=ABI_DIR\BUILD_DIR\radioenginesettings.dll                      SHARED_LIB_DIR\radioenginesettings.dll      PAGED
 
-data=ZPRIVATE\10202be9\101FF976.txt                     private\10202be9\101FF976.txt
-data=\epoc32\data\z\resource\radioenginesettings.rsc    \resource\radioenginesettings.rsc
+data=ZPRIVATE\10202be9\101FF976.txt                                 private\10202be9\101FF976.txt
+data=\epoc32\data\z\resource\radioenginesettings.rsc                \resource\radioenginesettings.rsc
 
-data=\epoc32\data\z\system\install\qtfmradio_stub.sis   system\install\qtfmradio_stub.sis
+data=\epoc32\data\z\system\install\qtfmradio_stub.sis               system\install\qtfmradio_stub.sis
 
 #endif