Merge docml changeset with recent Nokia delivery.
authorPat Downey <patd@symbian.org>
Tue, 18 May 2010 11:27:22 +0100
changeset 21 6bac020dcc51
parent 19 afea38384506 (diff)
parent 17 2cf3bab7c5c6 (current diff)
child 25 4177d7e75bb1
child 26 6bcf277166c1
Merge docml changeset with recent Nokia delivery.
hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidget.docml
radioapp/radiowidgets/res/layout/historyview.docml
radioapp/radiowidgets/res/layout/stationsview.docml
--- a/hswidgetplugin/fmradiohswidgetplugin/fmradiohswidgetplugin.pro	Tue May 11 12:31:43 2010 +0100
+++ b/hswidgetplugin/fmradiohswidgetplugin/fmradiohswidgetplugin.pro	Tue May 18 11:27:22 2010 +0100
@@ -74,7 +74,7 @@
     DESTDIR = $$PWD/../../../../../bin/$${SUBDIRPART}/$${PLUGIN_SUBDIR}
 
     manifest.path = $${DESTDIR}
-    manifest.files = ./resource/*.manifest ./resource/*.xml #./resource/*.png
+    manifest.files = ./resource/*.manifest ./resource/*.xml ./resource/*.css #./resource/*.png
     
     INSTALLS += manifest    
     
--- a/hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidget.h	Tue May 11 12:31:43 2010 +0100
+++ b/hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidget.h	Tue May 18 11:27:22 2010 +0100
@@ -18,9 +18,6 @@
 #ifndef FMRADIOHSWIDGET_H
 #define FMRADIOHSWIDGET_H
 
-// Defines
-#define DOCML_WIDGET ":/gfx/resource/fmradiohswidget.docml"
-
 // System includes
 #include <HbWidget>
 
@@ -30,10 +27,16 @@
 // Forward declarations
 class HbLabel;
 class HbPushButton;
+class HbMarqueeItem;
 class XQSettingsManager;
 class XQSettingsKey;
 class FmRadioHsWidgetProcessHandler;
 class FmRadioHsWidgetProfileReader;
+class QGraphicsLinearLayout;
+
+// Defines
+const QString KDocml = ":/ui/resource/fmradiohswidget.docml";
+const QString KCss = ":/ui/resource/fmradiohswidgetplugin.css";
 
 // Constants
 /**  Key for radio information hash. */
@@ -48,6 +51,10 @@
 const QString KRadioInformationDynamicPsName = "dynamicPsName";
 /**  Key for radio information hash. */
 const QString KRadioInformationPty = "pty";
+/**  Key for radio information hash. */
+const QString KRadioInformationHomePage = "homePage";
+/**  Key for radio information hash. */
+const QString KRadioInformationSong = "song";
 /**  Text to display in widget. */
 const QString KFmRadioText = "FM Radio";
 /**  Information text to connect headset. */
@@ -56,27 +63,35 @@
 const QString KMhzText = "Mhz";
 /**  DOCML object name for mainLayout */
 const QString KDocmlObjectNameMainLayout = "mainLayout";
-/**  DOCML object name for  */
+/**  DOCML object name for radioIconPushButton */
 const QString KDocmlObjectNameRadioIconPushButton = "radioIconPushButton";
-/**  DOCML object name for  */
+/**  DOCML object name for verticalSeparatorLabel */
+const QString KDocmlObjectNameVerticalSeparatorLabel = "verticalSeparatorLabel";
+/**  DOCML object name for controlAreaLayout */
+const QString KDocmlObjectNameControlAreaLayout = "controlAreaLayout";
+/**  DOCML object name for previousPushButton */
 const QString KDocmlObjectNamePreviousPushButton = "previousPushButton";
-/**  DOCML object name for  */
+/**  DOCML object name for verticalButtonSeparatorLabel1 */
+const QString KDocmlObjectNameVerticalButtonSeparatorLabel1 = "verticalButtonSeparatorLabel1";
+/**  DOCML object name for playPushButton */
 const QString KDocmlObjectNamePlayPushButton = "playPushButton";
-/**  DOCML object name for  */
+/**  DOCML object name for verticalButtonSeparatorLabel2 */
+const QString KDocmlObjectNameVerticalButtonSeparatorLabel2 = "verticalButtonSeparatorLabel2";
+/**  DOCML object name for nextPushButton */
 const QString KDocmlObjectNameNextPushButton = "nextPushButton";
-/**  DOCML object name for  */
+/**  DOCML object name for twoRowsLayout */
 const QString KDocmlObjectNameTwoRowsLayout = "twoRowsLayout";
-/**  DOCML object name for  */
+/**  DOCML object name for oneRowLayout */
 const QString KDocmlObjectNameOneRowLayout = "oneRowLayout";
-/**  DOCML object name for  */
+/**  DOCML object name for animationLayout */
 const QString KDocmlObjectNameAnimationLayout = "animationLayout";
-/**  DOCML object name for  */
+/**  DOCML object name for firstRowLabel */
 const QString KDocmlObjectNameFirstRowLabel = "firstRowLabel";
-/**  DOCML object name for  */
+/**  DOCML object name for secondRowLabel */
 const QString KDocmlObjectNameSecondRowLabel = "secondRowLabel";
-/**  DOCML object name for  */
+/**  DOCML object name for lonelyRowLabel */
 const QString KDocmlObjectNameLonelyRowLabel = "lonelyRowLabel";
-/**  DOCML object name for  */
+/**  DOCML object name for animationIcon */
 const QString KDocmlObjectNameAnimationIcon = "animationIcon";
 
 class FmRadioHsWidget : public HbWidget
@@ -105,10 +120,8 @@
         Running,
         ControllingAudio,
         NotControllingAudio,
-        AutoScanning,
-        ConnectType1Headset,
-        ConnectType2Headset,
-        ConnectType3Headset
+        Seeking,
+        AntennaNotConnected
     };
 
     // enum for information area layout states
@@ -130,6 +143,22 @@
         ChannelsEnabledStop
     };
 
+    // enum for control button states
+    enum PlayButtonState
+    {
+        PlayDisabled,
+        PlayEnabled,
+        StopDisabled,
+        StopEnabled
+    };
+    
+    enum ControlButtonPosition
+    {
+        Left,
+        Center,
+        Right
+    };
+
 public slots:
     //void onInitialize(); // Can be used in future to get on intialize event.
     void onShow();
@@ -139,7 +168,7 @@
     bool eventFilter(QObject *target, QEvent *event);
     
 private slots:
-    void load(QString docml);
+    void load(const QString docml);
     
     void mute();
     void unMute();
@@ -147,6 +176,7 @@
     void nextChannel();
     void radioToForeground();
     void radioToBackground();
+    bool openUrl(QUrl url);
 
     void handleRadioInformationChange(int notificationId, QVariant value);
     bool updateRadioInformation(const QString informationType, QString information);
@@ -156,30 +186,43 @@
     
     void changeInformationAreaLayout(InformationAreaLayout layout);
     void changeControlButtonState(ControlButtonState buttonState);
+    void changePlayButtonState(PlayButtonState buttonState);
+    void changeChannelButtonsEnabledState(bool enabled);
+    void changeControlButtonFrameBackground(bool enabled, ControlButtonPosition position,
+        HbPushButton *button);
     
 private:
     // Data
     Q_DISABLE_COPY(FmRadioHsWidget)
     
     HbPushButton *mRadioPushButton;
+    HbLabel *mVerticalSeparatorLabel;
     HbPushButton *mPreviousPushButton;
+    HbLabel *mVerticalButtonSeparatorLabel1;
     HbPushButton *mPlayPushButton;
+    HbLabel *mVerticalButtonSeparatorLabel2;
     HbPushButton *mNextPushButton;
     QGraphicsWidget *mInformationAreaOneRowLayout;
     QGraphicsWidget *mInformationAreaTwoRowsLayout;
     QGraphicsWidget *mInformationAreaAnimationLayout;
     HbLabel *mInformationFirstRowLabel; // This should be maybe a HbLineEdit for displaying and receiving click on url's.
+    //HbMarqueeItem *mInformationFirstRowMarquee;
     HbLabel *mInformationSecondRowLabel;// HbLineEdit may also support marquee/scrolling.
+    //HbMarqueeItem *mInformationSecondRowMarquee;
     HbLabel *mInformationLonelyRowLabel;
-    HbLabel *mAnimatioIcon;
+    //HbMarqueeItem *mInformationLonelyRowMarquee;
+    HbLabel *mAnimationIcon;
     
-    FmRadioState mFmRadioState; 
+    FmRadioState mFmRadioState;
+    PlayButtonState mPlayButtonState;
+    bool mIsFavoriteChannels;
 
     QHash<QString, QString> mRadioInformation;  // Stores the radio information
     QString mRadioInformationFirstRow;
     QString mRadioInformationSecondRow;
 
     FmRadioHsWidgetProcessHandler *mProcessHandler; // For launching the FM Radio application
+    FmRadioHsWidgetProfileReader *mProfileMonitor;
     
     FmRadioHsWidgetRadioServiceClient *mRadioServiceClient; // For communicating with the FM Radio through Qt Highway
     
--- a/hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidgetprofilereader.h	Tue May 11 12:31:43 2010 +0100
+++ b/hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidgetprofilereader.h	Tue May 18 11:27:22 2010 +0100
@@ -33,19 +33,27 @@
 public:
     FmRadioHsWidgetProfileReader(QObject *parent = 0);
     virtual ~FmRadioHsWidgetProfileReader();
+    
+    QVariant radioStatus();
 
 signals:
     void profileChanged(int profile);
+    void radioRunning(QVariant state);
 
 public slots:
     void itemDeleted(const XQSettingsKey& key);
-    void handleChanges(const XQSettingsKey& key, const QVariant& value);
+    //void handleChanges(const XQSettingsKey& key, const QVariant& value);
+    void handleRadioRunningChanges(const XQSettingsKey& key, const QVariant& value);
     
 private slots:
     void currentProfileStatus(QVariant value);
+    void currentRadioRunningStatus(QVariant value);
+    
+    void startMonitoringRadioRunningStatus();
     
 private: // data
     XQSettingsManager *mSettingsManager; // For getting and P&S notifications
+    int mRadioStatus;
 
 };
 
--- a/hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidgetradioserviceclient.h	Tue May 11 12:31:43 2010 +0100
+++ b/hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidgetradioserviceclient.h	Tue May 18 11:27:22 2010 +0100
@@ -32,7 +32,7 @@
 const QString KRadioServiceControlOperation = "command(int)";
 /**  Radio monitor interface name. */
 const QString KRadioServiceMonitorInterfaceName = "IRadioMonitor";
-/**  Radio monitor operation name. */
+/**  Radio monitor interface name. */
 const QString KRadioServiceMonitorOperation = "requestNotifications()";
 /**  Radio refresh operation name. */
 const QString KRadioServiceRefreshOperation = "requestAllData()";
@@ -69,6 +69,12 @@
         InformationTypeDynamicPsName,
         InformationTypePty
     };
+    enum FmRadioVisibilty
+    {
+        DoNotChange,
+        ToForeground,
+        ToBackground
+    };
 
     void init();
 
@@ -77,36 +83,36 @@
     void radioStateChanged(QVariant value);
 
 public slots:
-    void doStartFmRadio(FmRadioStartupState startupState);
-    void doBringFmRadioToForeground(bool toForeground);
+    void doChangeFmRadioVisibility(FmRadioVisibilty visibility);
     void test();
     void doChangeFmRadioChannel(FmRadioChannelChangeCommand command);
     void doControlFmRadioAudio(FmRadioAudioControlCommand command);
     void handleFmRadioInformationChange(const QVariant& value);
-    void handleFmRadioControlRequestComplete(const QVariant& value);
-    void handleRequestError(int error);
-    void handleRequestError2(int error);
     void handleFmRadioStateChange(QVariant& value);
-    void startMonitoring();
+    void startMonitoring(FmRadioVisibilty visibility);
     void stopMonitoring();
 
 protected slots:
     void requestCompleted(const QVariant& value);
 
 private slots:
-    void handleOk(const QVariant &result);
+    //void handleOk(const QVariant &result);
     void handleError(int errorCode, const QString& errorMessage);
+    void handleRequestError(int error);
     
     void createControlServiceRequest();
     void createMonitorServiceRequest();
 
-    void doGetFmRadioInformation();
+    void doSendMonitorRequest(FmRadioVisibilty visibility);
+    void doSendControlRequest(QVariant &argument, FmRadioVisibilty visibility);
+    
+    void prepareRequestInfo(XQAiwRequest *request, FmRadioVisibilty visibility);
     
 private: // data
-    XQServiceRequest* mRadioInformationServiceRequest;
-    XQServiceRequest* mRadioControlServiceRequest;
-    
+    bool mRequestPending;
     XQApplicationManager mApplicationManager;
+    XQAiwRequest* mRadioMonitorRequest;
+    XQAiwRequest* mRadioControlRequest;
     
     bool                mDataInitialized;
 
--- a/hswidgetplugin/fmradiohswidgetplugin/qmakepluginstubs/fmradiohswidgetplugin.qtplugin	Tue May 11 12:31:43 2010 +0100
+++ b/hswidgetplugin/fmradiohswidgetplugin/qmakepluginstubs/fmradiohswidgetplugin.qtplugin	Tue May 18 11:27:22 2010 +0100
@@ -1,1 +1,1 @@
-This file is a Qt plugin stub file. The real Qt plugin is located in /sys/bin. Created:2010-03-16T15:35:35
+This file is a Qt plugin stub file. The real Qt plugin is located in /sys/bin. Created:2010-04-23T11:50:39
--- a/hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidget.docml	Tue May 11 12:31:43 2010 +0100
+++ b/hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidget.docml	Tue May 18 11:27:22 2010 +0100
@@ -1,69 +1,45 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<hbdocument version="0.9">
+<hbdocument version="1.0">
     <widget name="mainLayout" type="HbWidget">
         <widget name="radioIconPushButton" type="HbPushButton">
-            <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
-            <sizehint height="15.5un" type="PREFERRED" width="15.5un"/>
-            <string name="text" value=""/>
+            <icon iconName="qtg_large_radio" name="background"/>
+            <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
+            <sizehint height="11un" type="PREFERRED" width="11un"/>
+            <contentsmargins bottom="expr((17un - 11un) / 2)" left="var(hb-param-margin-gene-middle-horizontal)" right="var(hb-param-margin-gene-middle-horizontal)" top="expr((17un - 11un) / 2)"/>
+            <string name="text"/>
+            <bool name="stretched" value="FALSE"/>
         </widget>
         <widget name="rightSideLayout" type="HbWidget">
-            <widget name="controlAreaLayout" type="HbWidget">
-                <widget name="previousPushButton" type="HbPushButton">
-                    <string name="text" value=""/>
-                    <bool name="enabled" value="FALSE"/>
-                </widget>
-                <widget name="playPushButton" type="HbPushButton">
-                    <icon iconName="qtg_mono_play" name="icon"/>
-                    <string name="text" value=""/>
-                    <bool name="enabled" value="FALSE"/>
-                </widget>
-                <widget name="nextPushButton" type="HbPushButton">
-                    <string name="text" value=""/>
-                    <bool name="enabled" value="FALSE"/>
-                </widget>
-                <real name="z" value="0"/>
-                <sizehint height="6.25un" type="PREFERRED" width="31.5un"/>
-                <sizehint height="0un" type="MINIMUM" width="0un"/>
-                <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
-                <layout orientation="Horizontal" spacing="0un" type="linear">
-                    <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
-                    <linearitem itemname="previousPushButton"/>
-                    <linearitem itemname="playPushButton"/>
-                    <linearitem itemname="nextPushButton"/>
-                </layout>
-            </widget>
             <widget name="informationAreaLayout" type="HbWidget">
                 <widget name="twoRowsLayout" type="HbWidget">
                     <widget name="firstRowLabel" type="HbLabel">
                         <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
-                        <sizehint height="2.75un" type="PREFERRED" width="31.5un"/>
-                        <string name="plainText" value=""/>
+                        <sizehint height="3un" type="PREFERRED" width="32.5un"/>
                     </widget>
                     <widget name="secondRowLabel" type="HbLabel">
                         <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
-                        <sizehint height="2.75un" type="PREFERRED" width="31.5un"/>
-                        <string name="plainText" value=""/>
+                        <sizehint height="3un" type="PREFERRED" width="32.5un"/>
                     </widget>
                     <real name="z" value="0"/>
-                    <sizehint height="6.25" type="PREFERRED" width="31.5"/>
+                    <sizehint height="expr(var(hb-param-margin-gene-middle-vertical) + (var(hb-param-text-height-tiny) * 2))" type="PREFERRED" width="31.5un"/>
                     <bool name="visible" value="FALSE"/>
                     <layout orientation="Vertical" spacing="var(hb-param-margin-gene-middle-vertical)" type="linear">
                         <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
                         <linearitem itemname="firstRowLabel" spacing="var(hb-param-margin-gene-middle-vertical)"/>
-                        <linearitem itemname="secondRowLabel"/>
+                        <linearitem itemname="secondRowLabel" spacing="0un"/>
                     </layout>
                 </widget>
                 <widget name="oneRowLayout" type="HbWidget">
                     <widget name="lonelyRowLabel" type="HbLabel">
                         <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
-                        <sizehint height="2.75un" type="PREFERRED" width="31.5un"/>
-                        <string name="plainText" value=""/>
+                        <sizehint height="6.625un" type="PREFERRED" width="32.5un"/>
                     </widget>
                     <real name="z" value="0"/>
-                    <sizehint height="6.25" type="PREFERRED" width="31.5"/>
+                    <sizehint height="expr(var(hb-param-margin-gene-middle-vertical) + (var(hb-param-text-height-tiny) * 2))" type="PREFERRED" width="31.5un"/>
                     <sizehint type="MINIMUM" width="0.74627un"/>
                     <bool name="visible" value="FALSE"/>
                     <layout orientation="Vertical" spacing="0un" type="linear">
+                        <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
                         <linearitem itemname="lonelyRowLabel"/>
                     </layout>
                 </widget>
@@ -73,38 +49,76 @@
                         <sizehint height="var(hb-param-graphic-size-primary-medium)" type="PREFERRED" width="var(hb-param-graphic-size-primary-medium)"/>
                     </widget>
                     <real name="z" value="0"/>
-                    <sizehint height="6.25un" type="PREFERRED" width="31.5un"/>
+                    <sizehint height="expr(var(hb-param-margin-gene-middle-vertical) + (var(hb-param-text-height-tiny) * 2))" type="PREFERRED" width="31.5un"/>
                     <bool name="visible" value="FALSE"/>
                     <layout orientation="Vertical" spacing="0un" type="linear">
-                        <contentsmargins bottom="0un" left="var(hb-param-margin-gene-middle-horizontal)" right="0un" top="0un"/>
+                        <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
                         <linearitem itemname="animationIcon"/>
                     </layout>
                 </widget>
                 <real name="z" value="0"/>
-                <sizehint height="6.25un" type="PREFERRED" width="31.5un"/>
+                <sizehint height="expr(var(hb-param-margin-gene-middle-vertical) + (var(hb-param-text-height-tiny) * 2))" type="PREFERRED" width="31.5un"/>
+                <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
                 <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
-                <contentsmargins bottom="0un" left="0un" right="0un" top="var(hb-param-margin-gene-middle-vertical)"/>
                 <layout type="stacked">
                     <stackitem itemname="twoRowsLayout"/>
                     <stackitem itemname="oneRowLayout"/>
                     <stackitem itemname="animationLayout"/>
                 </layout>
             </widget>
+            <widget name="controlAreaLayout" type="HbWidget">
+                <widget name="previousPushButton" type="HbPushButton">
+                    <icon iconName="qtg_mono_previous" name="icon"/>
+                    <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
+                    <sizehint height="8un" type="PREFERRED" width="expr(31.5un /3)"/>
+                    <string name="text"/>
+                    <bool name="enabled" value="FALSE"/>
+                </widget>
+                <widget name="playPushButton" type="HbPushButton">
+                    <icon iconName="qtg_mono_play" name="icon"/>
+                    <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
+                    <sizehint height="8un" type="PREFERRED" width="expr(31.5un /3)"/>
+                    <string name="text"/>
+                    <bool name="enabled" value="FALSE"/>
+                </widget>
+                <widget name="nextPushButton" type="HbPushButton">
+                    <icon iconName="qtg_mono_next" name="icon"/>
+                    <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
+                    <sizehint height="8un" type="PREFERRED" width="expr(31.5un /3)"/>
+                    <string name="text"/>
+                    <bool name="enabled" value="FALSE"/>
+                </widget>
+                <real name="z" value="1"/>
+                <sizehint height="8un" type="PREFERRED" width="31.5un"/>
+                <sizehint height="0un" type="MINIMUM" width="0un"/>
+                <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+                <layout orientation="Horizontal" spacing="0un" type="linear">
+                    <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+                    <linearitem itemname="previousPushButton" spacing="0un"/>
+                    <linearitem itemname="playPushButton" spacing="0un"/>
+                    <linearitem itemname="nextPushButton"/>
+                </layout>
+            </widget>
             <real name="z" value="0"/>
-            <sizehint height="23.8806un" type="PREFERRED" width="31.5un"/>
-            <contentsmargins bottom="0un" left="var(hb-param-margin-gene-middle-horizontal)" right="0un" top="0un"/>
+            <sizehint height="expr((var(hb-param-margin-gene-middle-vertical) * 4)  + (var(hb-param-text-height-tiny) * 2) + 8un)" type="PREFERRED" width="expr(46un - 11un - 2px - (2 * var(hb-param-margin-gene-middle-horizontal)))"/>
+            <contentsmargins bottom="var(hb-param-margin-gene-middle-vertical)" left="var(hb-param-margin-gene-middle-horizontal)" right="var(hb-param-margin-gene-middle-horizontal)" top="var(hb-param-margin-gene-middle-vertical)"/>
             <layout orientation="Vertical" spacing="var(hb-param-margin-gene-middle-vertical)" type="linear">
                 <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+                <linearitem itemname="informationAreaLayout" spacing="var(hb-param-margin-gene-middle-vertical)"/>
                 <linearitem itemname="controlAreaLayout" spacing="0un"/>
-                <linearitem itemname="informationAreaLayout" spacing="0un"/>
             </layout>
         </widget>
+        <widget name="verticalSeparatorLabel" type="HbLabel">
+            <sizehint height="expr((var(hb-param-margin-gene-middle-vertical) * 4)  + (var(hb-param-text-height-tiny) * 2) + 8un)" type="PREFERRED" width="2"/>
+            <contentsmargins bottom="2" left="0un" right="0un" top="2"/>
+        </widget>
         <real name="z" value="1"/>
         <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
-        <sizehint height="expr(15un +var(hb-param-margin-gene-middle-vertical) * 2)" type="PREFERRED" width="51un"/>
+        <sizehint height="expr((var(hb-param-margin-gene-middle-vertical) * 4)  + (var(hb-param-text-height-tiny) * 2) + 8un)" type="PREFERRED" width="46un"/>
         <layout orientation="Horizontal" spacing="0un" type="linear">
-            <contentsmargins bottom="var(hb-param-margin-gene-middle-vertical)" left="var(hb-param-margin-gene-middle-horizontal)" right="var(hb-param-margin-gene-middle-horizontal)" top="var(hb-param-margin-gene-middle-vertical)"/>
-            <linearitem itemname="radioIconPushButton" spacing="var(hb-param-margin-gene-middle-horizontal)"/>
+            <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+            <linearitem itemname="radioIconPushButton" spacing="0un" stretchfactor="-1"/>
+            <linearitem itemname="verticalSeparatorLabel" spacing="0un"/>
             <linearitem itemname="rightSideLayout" spacing="0un"/>
         </layout>
     </widget>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hswidgetplugin/fmradiohswidgetplugin/resource/fmradiohswidgetplugin.css	Tue May 18 11:27:22 2010 +0100
@@ -0,0 +1,23 @@
+HbMarqueeItem#marquee1::text {
+    text-height: var(hb-param-text-height-tiny);
+    font-variant: secondary;
+    color: qtc_hs_list_item_title;
+    text-align: center center;
+    text-wrap-mode: no-wrap;
+}
+
+HbMarqueeItem#marquee2::text {
+    text-height: var(hb-param-text-height-tiny);
+    font-variant: secondary;
+    color: qtc_hs_list_item_content;
+    text-align: center center;
+    text-wrap-mode: no-wrap;
+}
+
+HbMarqueeItem#marquee3::text {
+    text-height: var(hb-param-text-height-tiny);
+    font-variant: secondary;
+    color: red;
+    text-align: center center;
+    text-wrap-mode: no-wrap;
+}
--- a/hswidgetplugin/fmradiohswidgetplugin/resources.qrc	Tue May 11 12:31:43 2010 +0100
+++ b/hswidgetplugin/fmradiohswidgetplugin/resources.qrc	Tue May 18 11:27:22 2010 +0100
@@ -1,5 +1,6 @@
 <RCC>
-    <qresource prefix="/gfx" >
+    <qresource prefix="/ui">
         <file>resource/fmradiohswidget.docml</file>
+        <file>resource/fmradiohswidgetplugin.css</file>
     </qresource>
 </RCC>
--- a/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidget.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidget.cpp	Tue May 18 11:27:22 2010 +0100
@@ -19,7 +19,17 @@
 #include <HbPushButton>
 #include <HbLabel>
 #include <HbDocumentLoader>
+#include <HbFrameDrawer>
+#include <HbFrameItem>
+#include <HbIcon>
+#include <HbIconAnimationManager>
+#include <HbIconAnimationDefinition>
+#include <HbColorScheme>
+#include <HbMarqueeItem>
+#include <HbStyleLoader>
 #include <QGraphicsLinearLayout>
+#include <QGraphicsItem>
+#include <QDesktopServices>
 
 // User includes
 #include "fmradiohswidget.h"
@@ -52,22 +62,25 @@
       mInformationFirstRowLabel(0),
       mInformationSecondRowLabel(0),
       mFmRadioState(Undefined),
+      mPlayButtonState(PlayEnabled),
+      mIsFavoriteChannels(false),
       mRadioInformation(QHash<QString, QString>()),
-      mRadioInformationFirstRow(0),
-      mRadioInformationSecondRow(0),
       mProcessHandler(0),
+      mProfileMonitor(new FmRadioHsWidgetProfileReader(this)),
       mRadioServiceClient(new FmRadioHsWidgetRadioServiceClient(this))
 {
     connect(mRadioServiceClient, SIGNAL(radioInformationChanged(int, QVariant)), this,
         SLOT(handleRadioInformationChange(int, QVariant)));
     connect(mRadioServiceClient, SIGNAL(radioStateChanged(QVariant)), this,
         SLOT(handleRadioStateChange(QVariant)));
-    
-    load(DOCML_WIDGET);
+    connect(mProfileMonitor, SIGNAL(radioRunning(QVariant)), this,
+        SLOT(handleRadioStateChange(QVariant)));
     
-    handleRadioStateChange(QVariant(NotRunning));
+    load(KDocml);
+    
+    handleRadioStateChange(mProfileMonitor->radioStatus());
 
-    mRadioServiceClient->init();
+    //mRadioServiceClient->init();
 }
 
 /*!
@@ -94,88 +107,195 @@
 /*!
     Loads docml files.
 */
-void FmRadioHsWidget::load(QString DOCML)
+void FmRadioHsWidget::load(const QString docml)
 {
     bool loaded = false;
 
     HbDocumentLoader *documentLoader = new HbDocumentLoader();
     documentLoader->reset();
-    documentLoader->load(DOCML, &loaded);
+    documentLoader->load(docml, &loaded);
 
     if (loaded) {
-        HbWidget *widget = qobject_cast<HbWidget*> (documentLoader->findWidget(QString(KDocmlObjectNameMainLayout)));
+        HbWidget *widget = qobject_cast<HbWidget*> (documentLoader->findWidget(
+            KDocmlObjectNameMainLayout));
+
+        HbFrameItem *frameItem = NULL;
+
         if (widget) {
             //HbWidget *view = qobject_cast<HbWidget*> (widget);
             QGraphicsLinearLayout *mWidgetLayout = new QGraphicsLinearLayout(Qt::Vertical, this);
+
+            HbFrameDrawer *drawer = new HbFrameDrawer("qtg_fr_hswidget_normal",
+                HbFrameDrawer::NinePieces);
+            frameItem = new HbFrameItem(drawer, widget);
+            frameItem->setPreferredSize(widget->preferredSize());
+
             mWidgetLayout->addItem(widget);
             setLayout(mWidgetLayout);
         }
 
-        mRadioPushButton = qobject_cast<HbPushButton *> (documentLoader->findObject(QString(KDocmlObjectNameRadioIconPushButton)));
+        mRadioPushButton = qobject_cast<HbPushButton*> (documentLoader->findWidget(
+            KDocmlObjectNameRadioIconPushButton));
         if (mRadioPushButton) {
-            // Invalid icon for the mRadioPushButton to make it look not like a button.
-            mRadioPushButton->setBackground(HbIcon(" "));
-            mRadioPushButton->setIcon(HbIcon("qtg_large_radio"));
+            if (frameItem) {
+                frameItem->stackBefore(mRadioPushButton);
+            }
+            mRadioPushButton->setBackground(HbIcon("qtg_large_radio"));
+            mRadioPushButton->icon().setSize(mRadioPushButton->preferredSize());
             QObject::connect(mRadioPushButton, SIGNAL(clicked()), this, SLOT(radioToForeground()));
         }
 
-        mPreviousPushButton = qobject_cast<HbPushButton *> (documentLoader->findObject(QString(
-            KDocmlObjectNamePreviousPushButton)));
+        mVerticalSeparatorLabel = qobject_cast<HbLabel*> (documentLoader->findWidget(
+            KDocmlObjectNameVerticalSeparatorLabel));
+        if (mVerticalSeparatorLabel) {
+            mVerticalSeparatorLabel->setIcon(HbIcon("qtg_graf_divider_v_thin"));
+        }
+        
+        HbWidget *controlAreaLayoutWidget = qobject_cast<HbWidget*> (documentLoader->findWidget(
+            KDocmlObjectNameControlAreaLayout));
+        if (controlAreaLayoutWidget) {
+        }
+
+        mPreviousPushButton = qobject_cast<HbPushButton *> (documentLoader->findWidget(
+            KDocmlObjectNamePreviousPushButton));
         if (mPreviousPushButton) {
-            mPreviousPushButton->setIcon(HbIcon("qtg_mono_previous"));
-            QObject::connect(mPreviousPushButton, SIGNAL(clicked()), this, SLOT(previousChannel()));
+            changeControlButtonFrameBackground(false, Left, mPreviousPushButton);
+/*
+            HbFrameDrawer *previousButtonFrameDrawer = new HbFrameDrawer("qtg_fr_hsbutton_disabled",
+                  HbFrameDrawer::ThreePiecesHorizontal);
+            previousButtonFrameDrawer->setFileNameSuffixList(QStringList() << "_l" << "_c" << "_cr");
+            mPreviousPushButton->setFrameBackground(previousButtonFrameDrawer);
+*/            QObject::connect(mPreviousPushButton, SIGNAL(clicked()), this, SLOT(previousChannel()));
+        }
+
+        mPlayPushButton = qobject_cast<HbPushButton *> (documentLoader->findWidget(
+            KDocmlObjectNamePlayPushButton));
+        if (mPlayPushButton) {
+            changeControlButtonFrameBackground(false, Center, mPlayPushButton);
+/*            HbFrameDrawer *playButtonFrameDrawer = new HbFrameDrawer("qtg_fr_hsbutton_disabled",
+                  HbFrameDrawer::ThreePiecesHorizontal);
+            playButtonFrameDrawer->setFileNameSuffixList(QStringList() << "_cl" << "_c" << "_cr");
+            mPlayPushButton->setFrameBackground(playButtonFrameDrawer);
+*/            QObject::connect(mPlayPushButton, SIGNAL(clicked()), this, SLOT(radioToBackground()));
         }
 
-        mPlayPushButton = qobject_cast<HbPushButton *> (documentLoader->findObject(QString(
-            KDocmlObjectNamePlayPushButton)));
-        if (mPlayPushButton) {
-            QObject::connect(mPlayPushButton, SIGNAL(clicked()), this, SLOT(radioToBackground()));
+        mNextPushButton = qobject_cast<HbPushButton *> (documentLoader->findWidget(
+            KDocmlObjectNameNextPushButton));
+        if (mNextPushButton) {
+            changeControlButtonFrameBackground(false, Right, mNextPushButton);
+/*            HbFrameDrawer *nextButtonFrameDrawer = new HbFrameDrawer("qtg_fr_hsbutton_disabled",
+                  HbFrameDrawer::ThreePiecesHorizontal);
+            nextButtonFrameDrawer->setFileNameSuffixList(QStringList() << "_cl" << "_c" << "_r");
+            mNextPushButton->setFrameBackground(nextButtonFrameDrawer);
+*/            QObject::connect(mNextPushButton, SIGNAL(clicked()), this, SLOT(nextChannel()));
         }
-
-        mNextPushButton = qobject_cast<HbPushButton *> (documentLoader->findObject(QString(
-            KDocmlObjectNameNextPushButton)));
-        if (mNextPushButton) {
-            mNextPushButton->setIcon(HbIcon("qtg_mono_next"));
-            QObject::connect(mNextPushButton, SIGNAL(clicked()), this, SLOT(nextChannel()));
-        }
+        
+        //bool b = QFile::exists(KCss);
+        bool a = HbStyleLoader::registerFilePath(KCss);
 
         mInformationAreaTwoRowsLayout = qobject_cast<QGraphicsWidget *> (
-            documentLoader->findObject(QString(KDocmlObjectNameTwoRowsLayout)));
+            documentLoader->findObject(KDocmlObjectNameTwoRowsLayout));
         if (mInformationAreaTwoRowsLayout) {
+            /*
+            QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical, mInformationAreaTwoRowsLayout);
+            mInformationFirstRowMarquee = new HbMarqueeItem();
+            HbStyle::setItemName(mInformationFirstRowMarquee, "marquee1");
+            mInformationFirstRowMarquee->setObjectName("marquee1");
+            mInformationFirstRowMarquee->setText(
+                "Long text");
+            mInformationFirstRowMarquee->setLoopCount(-1);
+            mInformationFirstRowMarquee->startAnimation();
+            HbFontSpec fs(HbFontSpec::Secondary);
+            mInformationFirstRowMarquee->setFontSpec(fs);
+            mInformationFirstRowMarquee->setTextColor(HbColorScheme::color("qtc_hs_list_item_title"));
+            mInformationFirstRowMarquee->setPreferredSize(layout->preferredSize());
+            layout->addItem(mInformationFirstRowMarquee);
+         
+            mInformationSecondRowMarquee = new HbMarqueeItem();
+            mInformationSecondRowMarquee->setObjectName("marquee2");
+            mInformationSecondRowMarquee->setText(
+                "Long text to test marquee, Long text to test marquee");
+            mInformationSecondRowMarquee->setLoopCount(-1);
+            mInformationSecondRowMarquee->startAnimation();
+            mInformationSecondRowMarquee->setFontSpec(fs);
+            mInformationSecondRowMarquee->setTextColor(HbColorScheme::color("qtc_hs_list_item_title"));
+            mInformationSecondRowMarquee->setPreferredSize(layout->preferredSize());
+            layout->addItem(mInformationSecondRowMarquee);
+            */
         }
 
         mInformationAreaOneRowLayout = qobject_cast<QGraphicsWidget *> (documentLoader->findObject(
-            QString(KDocmlObjectNameOneRowLayout)));
+            KDocmlObjectNameOneRowLayout));
         if (mInformationAreaOneRowLayout) {
+            /*
+            QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical, mInformationAreaOneRowLayout);
+            mInformationLonelyRowMarquee = new HbMarqueeItem();
+            mInformationLonelyRowMarquee->setObjectName("marquee3");
+            HbStyle::setItemName(mInformationLonelyRowMarquee, "marquee3");
+            mInformationLonelyRowMarquee->setText(
+                "Long text");
+            mInformationLonelyRowMarquee->setLoopCount(-1);
+            mInformationLonelyRowMarquee->startAnimation();
+            HbFontSpec fs(HbFontSpec::Secondary);
+            mInformationLonelyRowMarquee->setFontSpec(fs);
+            mInformationLonelyRowMarquee->setTextColor(HbColorScheme::color("qtc_hs_list_item_title"));
+            mInformationLonelyRowMarquee->setPreferredSize(layout->preferredSize());
+            layout->addItem(mInformationLonelyRowMarquee);
+            */
         }
 
         mInformationAreaAnimationLayout = qobject_cast<QGraphicsWidget *> (
             documentLoader->findObject(QString(KDocmlObjectNameAnimationLayout)));
         if (mInformationAreaAnimationLayout) {
         }
+        
+        mInformationFirstRowLabel = qobject_cast<HbLabel *> (documentLoader->findWidget(
+            KDocmlObjectNameFirstRowLabel));
+        if (mInformationFirstRowLabel) {
+            mInformationFirstRowLabel->setTextColor(HbColorScheme::color("qtc_hs_list_item_title"));
+        }
 
-        mInformationFirstRowLabel = qobject_cast<HbLabel *> (documentLoader->findObject(QString(
-            KDocmlObjectNameFirstRowLabel)));
-        if (mInformationFirstRowLabel) {
-            mInformationFirstRowLabel->setTextColor("qtc_hs_list_item_title");
+        mInformationSecondRowLabel = qobject_cast<HbLabel *> (documentLoader->findWidget(
+            KDocmlObjectNameSecondRowLabel));
+        if (mInformationSecondRowLabel) {
+            mInformationSecondRowLabel->setTextColor(HbColorScheme::color("qtc_hs_list_item_content"));
+        }
+
+        mInformationLonelyRowLabel = qobject_cast<HbLabel *> (documentLoader->findWidget(
+            KDocmlObjectNameLonelyRowLabel));
+        if (mInformationLonelyRowLabel) {
+            mInformationLonelyRowLabel->setTextColor(HbColorScheme::color("qtc_hs_list_item_content"));
         }
 
-        mInformationSecondRowLabel = qobject_cast<HbLabel *> (documentLoader->findObject(QString(
-            KDocmlObjectNameSecondRowLabel)));
-        if (mInformationSecondRowLabel) {
-            mInformationSecondRowLabel->setTextColor("qtc_hs_list_item_content");
-        }
+        mAnimationIcon = qobject_cast<HbLabel *> (documentLoader->findWidget(
+            KDocmlObjectNameAnimationIcon));
+        if (mAnimationIcon) {
+            // Use animation manager to define the frame-by-frame animation.
+            HbIconAnimationManager *animationManager = HbIconAnimationManager::global();
+
+            // Create animation definition.
+            HbIconAnimationDefinition animationDefinition;
+            QList<HbIconAnimationDefinition::AnimationFrame> animationFrameList;
 
-        mInformationLonelyRowLabel = qobject_cast<HbLabel *> (documentLoader->findObject(QString(
-            KDocmlObjectNameLonelyRowLabel)));
-        if (mInformationLonelyRowLabel) {
-            mInformationLonelyRowLabel->setTextColor("qtc_hs_list_item_title");
-        }
+            HbIconAnimationDefinition::AnimationFrame animationFrame;
+            QString animationFrameIconName;
+            QString animationFrameIconNamePrefix = "qtg_anim_loading_";
+            for (int i = 1; i < 11; i++) {
+                animationFrame.duration = 100;
+                animationFrameIconName.clear();
+                animationFrameIconName.append(animationFrameIconNamePrefix);
+                animationFrameIconName.append(animationFrameIconName.number(i));
+                animationFrame.iconName = animationFrameIconName;
+                animationFrameList.append(animationFrame);
+            }
+            animationDefinition.setPlayMode(HbIconAnimationDefinition::Loop);
+            animationDefinition.setFrameList(animationFrameList);
+            animationManager->addDefinition("animation", animationDefinition);
 
-        mAnimatioIcon = qobject_cast<HbLabel *> (documentLoader->findObject(
-            QString()));
-        if (mAnimatioIcon) {
-            mAnimatioIcon->setIcon(HbIcon("qtg_anim_loading_0"));
+            // Construct an icon using the animation definition.
+            HbIcon icon("animation");
+            
+            mAnimationIcon->setIcon(icon);
         }
 
     }
@@ -221,7 +341,7 @@
 void FmRadioHsWidget::mute()
 {
     mRadioServiceClient->doControlFmRadioAudio(FmRadioHsWidgetRadioServiceClient::Mute);
-    handleRadioStateChange(QVariant(NotControllingAudio));
+    //handleRadioStateChange(QVariant(NotControllingAudio));
 }
 
 /*!
@@ -230,7 +350,7 @@
 void FmRadioHsWidget::unMute()
 {
     mRadioServiceClient->doControlFmRadioAudio(FmRadioHsWidgetRadioServiceClient::Unmute);
-    handleRadioStateChange(QVariant(ControllingAudio));
+    //handleRadioStateChange(QVariant(ControllingAudio));
 }
 
 /*!
@@ -239,7 +359,6 @@
 void FmRadioHsWidget::previousChannel()
 {
     mRadioServiceClient->doChangeFmRadioChannel(FmRadioHsWidgetRadioServiceClient::PreviousFavouriteChannel);
-    clearRadioInformation();
 }
 
 /*!
@@ -248,7 +367,6 @@
 void FmRadioHsWidget::nextChannel()
 {
     mRadioServiceClient->doChangeFmRadioChannel(FmRadioHsWidgetRadioServiceClient::NextFavouriteChannel);
-    clearRadioInformation();
 }
 
 /*!
@@ -257,10 +375,13 @@
 void FmRadioHsWidget::radioToForeground()
 {
     if (mFmRadioState == NotRunning) {
-        mRadioServiceClient->startMonitoring();
-        handleRadioStateChange(QVariant(Running));
+        handleRadioStateChange(QVariant(Starting));
+        mRadioServiceClient->startMonitoring(FmRadioHsWidgetRadioServiceClient::ToForeground);
     }
-    mRadioServiceClient->doBringFmRadioToForeground(true);
+    else {
+        mRadioServiceClient->doChangeFmRadioVisibility(
+            FmRadioHsWidgetRadioServiceClient::ToForeground);
+    }
 }
 
 /*!
@@ -269,11 +390,27 @@
 void FmRadioHsWidget::radioToBackground()
 {
     if (mFmRadioState == NotRunning) {
-        mRadioServiceClient->startMonitoring();
-        handleRadioStateChange(QVariant(Running));
+        handleRadioStateChange(QVariant(Starting));
+        mRadioServiceClient->startMonitoring(FmRadioHsWidgetRadioServiceClient::ToBackground);
+    }
+    else if (mFmRadioState == Starting) {
+        
+    }
+    else {
+        mRadioServiceClient->doChangeFmRadioVisibility(
+            FmRadioHsWidgetRadioServiceClient::ToBackground);
     }
 }
 
+/*!
+ Opening of url to the browser.
+ 
+ /param url Url to be opened.
+ */
+bool FmRadioHsWidget::openUrl(QUrl url)
+{
+    return QDesktopServices::openUrl(url);
+}
 
 /*!
  Handles changes in FM Radio information.
@@ -284,46 +421,106 @@
 void FmRadioHsWidget::handleRadioInformationChange(
     int notificationId, QVariant value)
 {
+    if (!value.isValid()) {
+        return;
+    }
     switch ( notificationId ) {
 
         case RadioServiceNotification::FavoriteCount:
+            if (value.canConvert(QVariant::Int)) {
+                int favoriteCount = value.toInt();
+                mIsFavoriteChannels = favoriteCount > 0 ? true : false;
+                changeChannelButtonsEnabledState(mIsFavoriteChannels);
+            }
+            break;
+
+        case RadioServiceNotification::RadioStatus:
+            if (value.canConvert(QVariant::Int)) {
+                int status = value.toInt();
+                switch (status) {
+                case RadioStatus::Playing:
+                    handleRadioStateChange(QVariant(ControllingAudio));
+                    break;
+                case RadioStatus::Muted:
+                    handleRadioStateChange(QVariant(NotControllingAudio));
+                    break;
+                case RadioStatus::Seeking:
+                    handleRadioStateChange(QVariant(Seeking));
+                    break;
+                case RadioStatus::NoAntenna:
+                    handleRadioStateChange(QVariant(AntennaNotConnected));
+                    break;                    
+                default:
+                    break;
+                }
+            }
             break;
 
         case RadioServiceNotification::Frequency:
-        {
-            const uint frequency = value.toUInt();
-            QString freqString;
-            freqString.sprintf( "%.1f", qreal( frequency ) / KFrequencyMultiplier );
-            if (updateRadioInformation( KRadioInformationFrequency, freqString )) {
-                radioInformationChanged();
+            if (value.canConvert(QVariant::UInt)) {
+                const uint frequency = value.toUInt();
+                QString freqString;
+                freqString.sprintf("%.1f", qreal(frequency) / KFrequencyMultiplier);
+                bool frequencyCleared = false;
+                if (mRadioInformation.contains(KRadioInformationFrequency)
+                    && mRadioInformation[KRadioInformationFrequency].compare(freqString) != 0) {
+                    clearRadioInformation();
+                    frequencyCleared = true;
+                }
+                bool frequencyUpdated = updateRadioInformation(KRadioInformationFrequency, freqString);
+                if (frequencyCleared || frequencyUpdated) {
+                    radioInformationChanged();
+                }
             }
-        }
         break;
 
         case RadioServiceNotification::Name:
-            if (updateRadioInformation( KRadioInformationStationName, value.toString() )) {
-                radioInformationChanged();
+            if (value.canConvert(QVariant::String)) {
+                if (updateRadioInformation(KRadioInformationStationName, value.toString())) {
+                    radioInformationChanged();
+                }
+            }
+        break;
+
+        case RadioServiceNotification::Genre:
+            if (value.canConvert(QVariant::String)) {
+                if (updateRadioInformation(KRadioInformationPty, value.toString())) {
+                    radioInformationChanged();
+                }
             }
         break;
 
+        case RadioServiceNotification::RadioText:
+            if (value.canConvert(QVariant::String)) {
+                if (updateRadioInformation(KRadioInformationRt, value.toString())) {
+                    radioInformationChanged();
+                }
+            }
+        break;
+
+        case RadioServiceNotification::HomePage:
+            if (value.canConvert(QVariant::String)) {
+                if (updateRadioInformation(KRadioInformationHomePage, value.toString())) {
+                    radioInformationChanged();
+                }
+            }
+        break;
+        
+        case RadioServiceNotification::Song:
+            if (value.canConvert(QVariant::String)) {
+                if (updateRadioInformation(KRadioInformationSong, value.toString())) {
+                    radioInformationChanged();
+                }
+            }
+        break;
+
+
 /*    case FmRadioHsWidgetRadioServiceClient::InformationTypeCallSign:
         if (updateRadioInformation(KRadioInformationCallSign, informationText)) {
 
         }
         break;
-    case FmRadioHsWidgetRadioServiceClient::InformationTypeFrequency:
-        if (updateRadioInformation(KRadioInformationFrequency,
-            informationText)) {
-
-        }
-        break;
-        */
-        case RadioServiceNotification::RadioText:
-            if (updateRadioInformation( KRadioInformationRt, value.toString() )) {
-                radioInformationChanged();
-            }
-        break;
-
+*/
 /*    case FmRadioHsWidgetRadioServiceClient::InformationTypeDynamicPsName:
         if (updateRadioInformation(KRadioInformationDynamicPsName,
             informationText)) {
@@ -331,18 +528,7 @@
         }
         break;
         */
-        case RadioServiceNotification::Genre:
-            if (updateRadioInformation( KRadioInformationPty, value.toString() )) {
-                radioInformationChanged();
-            }
-        break;
-
-        case RadioServiceNotification::HomePage:
-        break;
-
-        case RadioServiceNotification::Song:
-        break;
-
+        
     default:
         break;
     }
@@ -356,27 +542,34 @@
  
  /return bool If information is updated, return true. Return false otherwise.
  */
-bool FmRadioHsWidget::updateRadioInformation(const QString informationType,
-    QString information)
+bool FmRadioHsWidget::updateRadioInformation(const QString informationType, QString information)
 {
-    if (!information.isEmpty()) {
-        // Check if new information differs from the old one 
-        if (!(mRadioInformation[informationType].compare(information) == 0)) {
+    // If hash contains this type
+    if (mRadioInformation.contains(informationType)) {
+        // If new information is empty
+        if (information.isEmpty()) {
+            // Remove it from the hash
+            mRadioInformation.remove(informationType);
+            // Return true to indicate the change
+            return true;
+        }
+        // If new information differs from the old one
+        if (mRadioInformation[informationType].compare(information) != 0) {
             // Update the information
             mRadioInformation[informationType] = information;
-            // Return true to indicate change
+            // And return true to indicate the change
             return true;
         }
-    } else {
-        // Information is empty, lets remove it from the hash
-        int removeCount = mRadioInformation.remove(informationType);
-        // If some key or keys were removed
-        if (removeCount > 0) {
-            // Return true to indicate change
+    } else { // Hash do not contain the information
+        // If new information is not empty
+        if (!information.isEmpty()) {
+            // Add it to the hash
+            mRadioInformation[informationType] = information;
+            // Return true to indicate the change
             return true;
         }
     }
-    // Return false because nothing changed
+    // Return false to indicate that nothing changed
     return false;
 }
 
@@ -463,42 +656,86 @@
         break;
     case NotRunning:
         mFmRadioState = NotRunning;
-        //mRadioServiceClient->stopMonitoring();
-        changeControlButtonState(ChannelsDisabledPlay);
-        mInformationFirstRowLabel->setPlainText(KFmRadioText);
+        mRadioServiceClient->stopMonitoring();
+        //changeControlButtonState(ChannelsDisabledPlay);
+        QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this,
+            SLOT(unMute()));
+        QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this,
+            SLOT(mute()));
+        QObject::connect(mPlayPushButton, SIGNAL(clicked()), this,
+            SLOT(radioToBackground()));
+        changePlayButtonState(PlayEnabled);
+        mIsFavoriteChannels = false;
+        changeChannelButtonsEnabledState(false);
+        mInformationFirstRowLabel->setPlainText("");
         mInformationSecondRowLabel->setPlainText("");
         mInformationLonelyRowLabel->setPlainText(KFmRadioText);
         changeInformationAreaLayout(OneRow);
         break;
     case Starting:
         mFmRadioState = Starting;
-        changeControlButtonState(ChannelsDisabledStop);
+        //changeControlButtonState(ChannelsDisabledStop);
+        changePlayButtonState(StopDisabled);
+        // TODO: What should the stop button do? Should it close the radio?
+        changeChannelButtonsEnabledState(false);
         changeInformationAreaLayout(Animation);
         break;
     case Running:
         mFmRadioState = Running;
-        changeControlButtonState(ChannelsEnabledStop);
+        mRadioServiceClient->startMonitoring(FmRadioHsWidgetRadioServiceClient::DoNotChange);
+        //changeControlButtonState(ChannelsEnabledStop);
+        QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this,
+            SLOT(radioToBackground()));
+        QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this,
+            SLOT(unMute()));
+        QObject::connect(mPlayPushButton, SIGNAL(clicked()), this,
+            SLOT(mute()));
+        changePlayButtonState(StopEnabled);
+        changeChannelButtonsEnabledState(mIsFavoriteChannels);
         changeInformationAreaLayout(OneRow);
         break;
     case ControllingAudio:
-        // TODO: Implement
-        changeControlButtonState(ChannelsEnabledStop);
+        mFmRadioState = ControllingAudio;
+        //changeControlButtonState(ChannelsEnabledStop);
+        QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this,
+            SLOT(radioToBackground()));
+        QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this,
+            SLOT(unMute()));
+        QObject::connect(mPlayPushButton, SIGNAL(clicked()), this,
+            SLOT(mute()));
+        changePlayButtonState(StopEnabled);
+        changeChannelButtonsEnabledState(mIsFavoriteChannels);
+        radioInformationChanged();
         break;
     case NotControllingAudio:
-        // TODO: Implement
-        changeControlButtonState(ChannelsEnabledPlay);
-        break;
-    case AutoScanning:
-        // TODO: Implement
+        mFmRadioState = NotControllingAudio;
+        //changeControlButtonState(ChannelsEnabledPlay);
+        QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this,
+            SLOT(radioToBackground()));
+        QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this,
+            SLOT(mute()));
+        QObject::connect(mPlayPushButton, SIGNAL(clicked()), this,
+            SLOT(unMute()));
+        changePlayButtonState(PlayEnabled);
+        changeChannelButtonsEnabledState(mIsFavoriteChannels);
+        radioInformationChanged();
         break;
-    case ConnectType1Headset:
-        // TODO: Implement
+    case Seeking:
+        mFmRadioState = Seeking;
+        //changeControlButtonState(AllDisabledStop);
+        changePlayButtonState(StopDisabled);
+        changeChannelButtonsEnabledState(false);
+        changeInformationAreaLayout(Animation);
         break;
-    case ConnectType2Headset:
-        // TODO: Implement
-        break;
-    case ConnectType3Headset:
-        // TODO: Implement
+    case AntennaNotConnected:
+        mFmRadioState = AntennaNotConnected;
+        //changeControlButtonState(AllDisabledPlay);
+        changePlayButtonState(StopDisabled);
+        changeChannelButtonsEnabledState(false);
+        mInformationFirstRowLabel->setPlainText("");
+        mInformationSecondRowLabel->setPlainText("");
+        mInformationLonelyRowLabel->setPlainText(KConnectHeadsetText);
+        changeInformationAreaLayout(OneRow);
         break;
     default:
         break;
@@ -515,17 +752,17 @@
     switch (layout) {
     case OneRow:
         mInformationAreaOneRowLayout->show();
-        mInformationAreaTwoRowsLayout->hide();
+        ((QGraphicsWidget*) mInformationAreaTwoRowsLayout)->hide();
         mInformationAreaAnimationLayout->hide();
         break;
     case TwoRows:
         mInformationAreaOneRowLayout->hide();
-        mInformationAreaTwoRowsLayout->show();
+        ((QGraphicsWidget*) mInformationAreaTwoRowsLayout)->show();
         mInformationAreaAnimationLayout->hide();
         break;
     case Animation:
         mInformationAreaOneRowLayout->hide();
-        mInformationAreaTwoRowsLayout->hide();
+        ((QGraphicsWidget*) mInformationAreaTwoRowsLayout)->hide();
         mInformationAreaAnimationLayout->show();
         break;
     default:
@@ -543,21 +780,21 @@
     QString iconName;
     switch (buttonState) {
     case AllDisabledPlay:
-        mPreviousPushButton->setEnabled(false);
+        changeControlButtonFrameBackground(false, Left, mPreviousPushButton);
         iconName.append("qtg_mono_play");
         mPlayPushButton->setIcon(HbIcon(iconName));
-        mPlayPushButton->setEnabled(false);
-        mNextPushButton->setEnabled(false);
+        changeControlButtonFrameBackground(false, Center, mPlayPushButton);
+        changeControlButtonFrameBackground(false, Right, mNextPushButton);
         break;
     case AllDisabledStop:
-        mPreviousPushButton->setEnabled(false);
+        changeControlButtonFrameBackground(false, Left, mPreviousPushButton);
         iconName.append("qtg_mono_stop");
         mPlayPushButton->setIcon(HbIcon(iconName));
-        mPlayPushButton->setEnabled(false);
-        mNextPushButton->setEnabled(false);
+        changeControlButtonFrameBackground(false, Center, mPlayPushButton);
+        changeControlButtonFrameBackground(false, Right, mNextPushButton);
         break;
     case ChannelsDisabledPlay:
-        mPreviousPushButton->setEnabled(false);
+        changeControlButtonFrameBackground(false, Left, mPreviousPushButton);
         QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this,
             SLOT(unMute()));
         QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this,
@@ -566,18 +803,18 @@
             SLOT(radioToBackground()));
         iconName.append("qtg_mono_play");
         mPlayPushButton->setIcon(HbIcon(iconName));
-        mPlayPushButton->setEnabled(true);
-        mNextPushButton->setEnabled(false);
+        changeControlButtonFrameBackground(true, Center, mPlayPushButton);
+        changeControlButtonFrameBackground(false, Right, mNextPushButton);
         break;
     case ChannelsDisabledStop:
-        mPreviousPushButton->setEnabled(false);
+        changeControlButtonFrameBackground(false, Left, mPreviousPushButton);
         iconName.append("qtg_mono_stop");
         mPlayPushButton->setIcon(HbIcon(iconName));
-        mPlayPushButton->setEnabled(true);
-        mNextPushButton->setEnabled(false);
+        changeControlButtonFrameBackground(true, Center, mPlayPushButton);
+        changeControlButtonFrameBackground(false, Right, mNextPushButton);
         break;
     case ChannelsEnabledPlay:
-        mPreviousPushButton->setEnabled(true);
+        changeControlButtonFrameBackground(true, Left, mPreviousPushButton);
         QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this,
             SLOT(radioToBackground()));
         QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this,
@@ -586,11 +823,11 @@
             SLOT(unMute()));
         iconName.append("qtg_mono_play");
         mPlayPushButton->setIcon(HbIcon(iconName));
-        mPlayPushButton->setEnabled(true);
-        mNextPushButton->setEnabled(true);
+        changeControlButtonFrameBackground(true, Center, mPlayPushButton);
+        changeControlButtonFrameBackground(true, Right, mNextPushButton);
         break;
     case ChannelsEnabledStop:
-        mPreviousPushButton->setEnabled(true);
+        changeControlButtonFrameBackground(true, Left, mPreviousPushButton);
         QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this,
             SLOT(radioToBackground()));
         QObject::disconnect(mPlayPushButton, SIGNAL(clicked()), this,
@@ -599,10 +836,90 @@
             SLOT(mute()));
         iconName.append("qtg_mono_stop");
         mPlayPushButton->setIcon(HbIcon(iconName));
-        mPlayPushButton->setEnabled(true);
-        mNextPushButton->setEnabled(true);
+        changeControlButtonFrameBackground(true, Center, mPlayPushButton);
+        changeControlButtonFrameBackground(true, Right, mNextPushButton);
         break;
     default:
         break;
     }
 }
+
+/*!
+ Changes enabled state of channel buttons.
+ 
+ */
+void FmRadioHsWidget::changePlayButtonState(PlayButtonState buttonState)
+{
+    QString iconName;
+    bool enabled = false;
+    switch (buttonState) {
+    case PlayDisabled:
+        iconName.append("qtg_mono_play");
+        mPlayPushButton->setIcon(HbIcon(iconName));
+        enabled = false;
+        break;
+    case PlayEnabled:
+        iconName.append("qtg_mono_play");
+        mPlayPushButton->setIcon(HbIcon(iconName));
+        enabled = true;
+        break;
+    case StopDisabled:
+        iconName.append("qtg_mono_stop");
+        mPlayPushButton->setIcon(HbIcon(iconName));
+        enabled = false;
+        break;
+    case StopEnabled:
+        iconName.append("qtg_mono_stop");
+        mPlayPushButton->setIcon(HbIcon(iconName));
+        enabled = true;
+        break;
+    default:
+        break;
+    }
+    changeControlButtonFrameBackground(enabled, Center, mPlayPushButton);
+}
+
+/*!
+ Changes enabled state of channel buttons.
+ 
+ */
+void FmRadioHsWidget::changeChannelButtonsEnabledState(bool enabled)
+{
+    changeControlButtonFrameBackground(enabled, Left, mPreviousPushButton);
+    changeControlButtonFrameBackground(enabled, Right, mNextPushButton);
+}
+
+/*!
+ Changes background of control button.
+ 
+ /param enabled Is button enabled or disabled.
+ /param position Position of the control button in button group.
+ /param button The button to change the background.
+ */
+void FmRadioHsWidget::changeControlButtonFrameBackground(bool enabled,
+    ControlButtonPosition position, HbPushButton *button)
+{
+    QString frameGraphicsName("qtg_fr_hsbutton_");
+    if (enabled) {
+        frameGraphicsName.append("normal");
+    } else {
+        frameGraphicsName.append("disabled");
+    }
+    HbFrameDrawer *frameDrawer = new HbFrameDrawer(frameGraphicsName,
+        HbFrameDrawer::ThreePiecesHorizontal);
+    switch (position) {
+    case Left:
+        frameDrawer->setFileNameSuffixList(QStringList() << "_l" << "_c" << "_cr");
+        break;
+    case Center:
+        frameDrawer->setFileNameSuffixList(QStringList() << "_cl" << "_c" << "_cr");
+        break;
+    case Right:
+        frameDrawer->setFileNameSuffixList(QStringList() << "_cl" << "_c" << "_r");
+        break;
+    default:
+        break;
+    }
+    button->setFrameBackground(frameDrawer);
+    button->setEnabled(enabled);
+}
--- a/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetprofilereader.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetprofilereader.cpp	Tue May 18 11:27:22 2010 +0100
@@ -17,20 +17,25 @@
 
 // System includes
 #include <ProfileEngineSDKCRKeys.h>
+#include "xqsettingsmanager.h"
+#include "xqsettingskey.h"
+#include "xqpublishandsubscribeutils.h"
+#include <QDateTime>
 
 // User includes
 #include "fmradiohswidgetprofilereader.h"
-#include "xqsettingsmanager.h"
-#include "xqsettingskey.h"
-#include "xqpublishandsubscribeutils.h"
+#include "fmradiohswidget.h"
+#include "radioservicedef.h"
 
 /*!
  Constructor
  */
 FmRadioHsWidgetProfileReader::FmRadioHsWidgetProfileReader(QObject *parent) :
     QObject(parent),
-    mSettingsManager(new XQSettingsManager(this))
+    mSettingsManager(new XQSettingsManager(this)),
+    mRadioStatus(-1)
 {
+/*
     // Monitors devices profile.
     XQSettingsKey profileKey(XQSettingsKey::TargetCentralRepository,
         KCRUidProfileEngine.iUid, KProEngActiveProfile);
@@ -41,6 +46,12 @@
         SLOT(itemDeleted(XQSettingsKey)));
     connect(mSettingsManager, SIGNAL(valueChanged(XQSettingsKey, QVariant)),
         this, SLOT(handleChanges(XQSettingsKey, QVariant)));
+*/
+    startMonitoringRadioRunningStatus();
+    bool d = connect(mSettingsManager, SIGNAL(itemDeleted(XQSettingsKey)), this,
+        SLOT(itemDeleted(XQSettingsKey)));
+    bool h = connect(mSettingsManager, SIGNAL(valueChanged(XQSettingsKey, QVariant)),
+        this, SLOT(handleRadioRunningChanges(XQSettingsKey, QVariant)));
 }
 
 /*!
@@ -58,9 +69,14 @@
  */
 void FmRadioHsWidgetProfileReader::itemDeleted(const XQSettingsKey& key)
 {
+/*
     if (key.uid() == KCRUidProfileEngine.iUid && key.key()
         == KProEngActiveProfile) {
     }
+*/
+    if (key.uid() == KRadioPSUid && key.key() == KRadioStartupKey) {
+        startMonitoringRadioRunningStatus();
+    }
 }
 
 /*!
@@ -70,14 +86,16 @@
  \param key Changed key.
  \param value Value of changed key.
  */
+/*
 void FmRadioHsWidgetProfileReader::handleChanges(const XQSettingsKey& key,
     const QVariant& value)
-{
+{ 
     if (key.uid() == KCRUidProfileEngine.iUid && key.key()
         == KProEngActiveProfile) {
         currentProfileStatus(value);
     }
 }
+*/
 
 /*!
  Handling changes in profile information.
@@ -92,3 +110,59 @@
     }
 }
 
+/*!
+ Notifications from settings manager are handled and routed to appropriate
+ private slots.
+
+ \param key Changed key.
+ \param value Value of changed key.
+ */
+void FmRadioHsWidgetProfileReader::handleRadioRunningChanges(const XQSettingsKey& key,
+    const QVariant& value)
+{
+    if (key.uid() == KRadioPSUid && key.key()
+        == KRadioStartupKey) {
+        currentRadioRunningStatus(value);
+    }
+}
+
+/*!
+ Handling changes in profile information.
+ 
+ \param value Originally information is of int type. Valid values after
+ conversion are described by KProEngActiveProfile in ProfileEngineSDKCRKeys.h.
+ */
+void FmRadioHsWidgetProfileReader::currentRadioRunningStatus(QVariant value)
+{
+    if (value.isValid()) {
+        if (value.canConvert(QVariant::Int)) {
+            mRadioStatus = value.toInt();
+            QVariant state(FmRadioHsWidget::Running);
+            emit radioRunning(state);
+        }
+    } else {
+        mRadioStatus = -1;
+        QVariant state(FmRadioHsWidget::NotRunning);
+        emit radioRunning(state);
+    }
+}
+
+QVariant FmRadioHsWidgetProfileReader::radioStatus()
+{
+    QVariant state;
+    if (mRadioStatus != -1) {
+        state = QVariant(FmRadioHsWidget::Running);
+        return state;
+    } else {
+        state = QVariant(FmRadioHsWidget::NotRunning);
+        return state;
+    }
+}
+
+void FmRadioHsWidgetProfileReader::startMonitoringRadioRunningStatus()
+{
+    XQSettingsKey radioRunningKey(XQSettingsKey::TargetPublishAndSubscribe, KRadioPSUid,
+        KRadioStartupKey);
+    bool a = mSettingsManager->startMonitoring(radioRunningKey);
+    currentRadioRunningStatus(mSettingsManager->readItemValue(radioRunningKey));
+}
--- a/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetradioserviceclient.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetradioserviceclient.cpp	Tue May 18 11:27:22 2010 +0100
@@ -29,9 +29,10 @@
  */
 FmRadioHsWidgetRadioServiceClient::FmRadioHsWidgetRadioServiceClient(QObject *parent) :
     QObject(parent),
-    mRadioInformationServiceRequest( 0 ),
-    mRadioControlServiceRequest(0),
-    mDataInitialized( false )
+    mRequestPending(false),
+    mRadioMonitorRequest(0),
+    mRadioControlRequest(0),
+    mDataInitialized(false)
 {
 }
 
@@ -50,73 +51,366 @@
 {
     const bool radioIsRunning = false; //TODO: Find out if radio is running. Use P&S key for now
     if ( radioIsRunning ) {
-        startMonitoring();
+        //startMonitoring();
     }
 }
 
 
 /*!
  Starting of FM Radio.
-
- /param startupState
+ 
+ /param startupState 
  */
+/*
 void FmRadioHsWidgetRadioServiceClient::doStartFmRadio(FmRadioStartupState startupState)
 {
-    createControlServiceRequest();
+    if (!mRadioControlRequest) {
+        createControlServiceRequest();
+    }
 
-    int commandId = 0;
-
+    QVariant commandArgument;
     switch (startupState) {
     case StartForeground:
         // TODO: Include header and remove comment.
-        commandId = /*RadioServiceCommand::Foreground*/ 6;
-        break;
+        commandArgument.setValue(*//*RadioServiceCommand::Foreground*/ //6);
+/*        break;
     case StartBackground:
         // TODO: Include header and remove comment.
-        commandId = /*RadioServiceCommand::Background*/ 7;
+        commandArgument.setValue(*//*RadioServiceCommand::Background*/ //7);
+/*        break;
+    default:
+        break;
+    }
+    QList<QVariant> arguments;
+    arguments.append(commandArgument);
+    mRadioControlRequest->setArguments(arguments);
+
+    bool res = mRadioControlRequest->send();
+}
+*/
+/*!
+ Bring FM Radio to foreground.
+ 
+ */
+void FmRadioHsWidgetRadioServiceClient::doChangeFmRadioVisibility(FmRadioVisibilty visibility)
+{
+    QVariant commandArgument;
+    switch (visibility) {
+    case ToForeground:
+        commandArgument.setValue((int) RadioServiceCommand::Foreground);
+        break;
+    case ToBackground:
+        commandArgument.setValue((int) RadioServiceCommand::Background);
+    case DoNotChange:
+    default:
+        break;
+    }
+    doSendControlRequest(commandArgument, visibility);
+}
+
+/*!
+ Changing of FM Radio channel.
+ 
+ /param command Command to execute.
+ */
+void FmRadioHsWidgetRadioServiceClient::doChangeFmRadioChannel(
+    FmRadioChannelChangeCommand command)
+{
+    QVariant commandArgument;
+    switch (command) {
+    case PreviousFavouriteChannel:
+        commandArgument.setValue((int) RadioServiceCommand::Previous);
+        break;
+    case NextFavouriteChannel:
+        commandArgument.setValue((int) RadioServiceCommand::Next);
+        break;
+    default:
+        break;
+    }
+    doSendControlRequest(commandArgument, DoNotChange);
+}
+
+/*!
+ Changing of FM Radio channel.
+ 
+ /param command Command to execute.
+ */
+void FmRadioHsWidgetRadioServiceClient::doControlFmRadioAudio(
+    FmRadioAudioControlCommand command)
+{
+    QVariant commandArgument;
+    switch (command) {
+    case Mute:
+        commandArgument.setValue((int) RadioServiceCommand::Pause);
+        break;
+    case Unmute:
+        commandArgument.setValue((int) RadioServiceCommand::Play);
         break;
     default:
         break;
     }
-    
-    QVariant commandArgument;
-    commandArgument.setValue(commandId);
+    doSendControlRequest(commandArgument, DoNotChange);
+}
+
+/*!
+ Start FM Radio information listening.
+ */
+void FmRadioHsWidgetRadioServiceClient::doSendControlRequest(QVariant &argument,
+    FmRadioVisibilty visibility)
+{
+    if (!mRadioControlRequest) {
+        createControlServiceRequest();
+    }
+
     QList<QVariant> arguments;
-    arguments.append(commandArgument);
-    mRadioControlServiceRequest->setArguments(arguments);
+    arguments.append(argument);
+    mRadioControlRequest->setArguments(arguments);
+    
+    prepareRequestInfo(mRadioControlRequest, visibility);
+
+    bool res = mRadioControlRequest->send();
+
+    if (!res) {
+        int error = mRadioControlRequest->lastError();
+        handleRequestError(error);
+    }
+    
+    //stopMonitoring();
+    //startMonitoring();
+}
+
+/*!
+ Start FM Radio information listening.
+ */
+void FmRadioHsWidgetRadioServiceClient::doSendMonitorRequest(FmRadioVisibilty visibility)
+{
+    prepareRequestInfo(mRadioMonitorRequest, visibility);
+    if (!mRequestPending) {
+        //FmRadioHsWidgetRadioServiceSingleton::instance()->sendRequest();
+        mRequestPending = mRadioMonitorRequest->send();
+    }
+}
+
+/*!
+ Handle changes in FM Radio information texts.
+ 
+ /param value
+ */
+void FmRadioHsWidgetRadioServiceClient::handleFmRadioInformationChange(const QVariant& value)
+{
+    mRequestPending = false;
+    if (!mDataInitialized) {
+        mRadioMonitorRequest->setOperation(KRadioServiceMonitorOperation);
+        mDataInitialized = true;
+    }
+    startMonitoring(DoNotChange);
+    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 );
+        }
+    }
+}
 
-    bool res = mRadioControlServiceRequest->send();
+/*!
+ Handles request error.
+ 
+ /param int Error value.
+ */
+void FmRadioHsWidgetRadioServiceClient::handleRequestError(int error)
+{
+    QString errorStr;
+    QVariant var(FmRadioHsWidget::NotRunning);
+    switch (error) {
+    case XQService::ENoError:
+        errorStr = "No error";
+        break;
+    case XQService::EConnectionError:
+        errorStr = "(/*!< Error in IPC Connection */";
+        break;
+    case XQService::EConnectionClosed:
+        errorStr = "/*!< IPC Connection is closed */";
+        stopMonitoring();
+        handleFmRadioStateChange(var);
+        break;
+    case XQService::EServerNotFound:
+        errorStr = "/*!< Can not find server */";
+        break;
+    case XQService::EIPCError:
+        errorStr = "/*!< Known IPC error defined by SDK */";
+        break;
+    case XQService::EUnknownError:
+        errorStr = "/*!< Unknown IPC error */";
+        break;
+    case XQService::ERequestPending:
+        errorStr = "/*!< Already pending request */";
+        break;
+    default:
+        break;
+    }
+}
+
+/*!
+ Handle changes in FM Radio state.
+ 
+ /param value New state of FM Radio.
+ */
+void FmRadioHsWidgetRadioServiceClient::handleFmRadioStateChange(QVariant& value)
+{
+    if (value.isValid()) {
+        emit radioStateChanged(value);
+    }
+}
+
+/*!
+ Handle request completion.
+ 
+ /param value
+ */
+void FmRadioHsWidgetRadioServiceClient::requestCompleted(const QVariant& value)
+{
+    if (value.isValid()) {
+    }
 }
 
 /*!
- Bring FM Radio to foreground.
+ Handle error.
  
+ /param errorCode
+ /param errorMessage
  */
-void FmRadioHsWidgetRadioServiceClient::doBringFmRadioToForeground(bool toForeground)
+void FmRadioHsWidgetRadioServiceClient::handleError(int errorCode, const QString& errorMessage)
+{
+    int e = errorCode;
+    QString em = errorMessage;
+    handleRequestError(e);
+}
+
+/*!
+ Creates control service request object.
+ */
+void FmRadioHsWidgetRadioServiceClient::createControlServiceRequest()
 {
-    createControlServiceRequest();
-    QVariant commandArgument;
-    if (toForeground) {
-        // TODO: Include header and remove comment.
-        commandArgument.setValue(/*RadioServiceCommand::Foreground*/ 6);
-    } else {
-        // TODO: Include header and remove comment.
-        commandArgument.setValue(/*RadioServiceCommand::Background*/ 7);
+    if (!mRadioControlRequest) {
+        QString fullInterfaceName = /*KRadioServiceName +"."+*/ KRadioServiceControlInterfaceName;
+        mRadioControlRequest = mApplicationManager.create(fullInterfaceName,
+            KRadioServiceControlOperation, false);
+
+        if (mRadioControlRequest) {
+            mRadioControlRequest->setEmbedded(false);
+            mRadioControlRequest->setSynchronous(true);
+            //TODO: Do backgound set through XQRequestInfo in MCL wk14.
+            //mRadioControlRequest->setBackground(true);
+
+            /*
+            bool b = connect(mRadioControlRequest, SIGNAL(requestOk(const QVariant&)), this,
+                SLOT(requestCompleted(const QVariant&)));
+            bool t = connect(mRadioControlRequest, SIGNAL(requestError(int,const QString&)), this,
+                SLOT(handleError(int,const QString&)));
+            */
+        }
     }
-    QList<QVariant> arguments;
-    arguments.append(commandArgument);
-    mRadioControlServiceRequest->setArguments(arguments);
-    QList<QVariant> args = mRadioControlServiceRequest->arguments();
+}
 
-    bool res = mRadioControlServiceRequest->send();
+/*!
+ Creates monitor service request object.
+ */
+void FmRadioHsWidgetRadioServiceClient::createMonitorServiceRequest()
+{
+    if (!mRadioMonitorRequest) {
+		QString operation = mDataInitialized ? KRadioServiceMonitorOperation
+            : KRadioServiceRefreshOperation;
+        QString fullInterfaceName = /*KRadioServiceName +"."+*/ KRadioServiceMonitorInterfaceName;
+        
+        /*
+        QList<XQAiwInterfaceDescriptor> list;
+        list = mApplicationManager.list(KRadioServiceName, fullInterfaceName, "");
+        XQAiwInterfaceDescriptor interfaceDescriptor;
+        foreach (XQAiwInterfaceDescriptor d, list)
+            {
+                QString in = d.interfaceName();
+                QString sn = d.serviceName();
+                if (sn == KRadioServiceName && in == fullInterfaceName) {
+                    interfaceDescriptor = d;
+                }
+            }
+        */
+        
+        /*
+        mRadioMonitorRequest = mApplicationManager.create(interfaceDescriptor,
+            KRadioServiceMonitorOperation, false);
+        */
+
+        mRadioMonitorRequest = mApplicationManager.create(
+            fullInterfaceName, operation, false);
+
+        if (mRadioMonitorRequest) {
+            connect(mRadioMonitorRequest, SIGNAL(requestOk(const QVariant&)),
+                this, SLOT(handleFmRadioInformationChange(const QVariant&)));
+            connect(mRadioMonitorRequest,
+                SIGNAL(requestError(int,const QString&)), this,
+                SLOT(handleError(int,const QString&)));
+
+            mRadioMonitorRequest->setSynchronous(false);
+            mRadioMonitorRequest->setEmbedded(false);
+        }
+    }
+}
 
-    if (!res) {
-        int error = mRadioControlServiceRequest->latestError();
-        handleRequestError(error);
-        // TODO: Handle error
+/*!
+ Start radio monitoring.
+ */
+void FmRadioHsWidgetRadioServiceClient::startMonitoring(FmRadioVisibilty visibility)
+{
+    //FmRadioHsWidgetRadioServiceSingleton::instance(this)->requestNotifications(this);
+
+    if (!mRadioMonitorRequest) {
+        createMonitorServiceRequest();
+    }
+    doSendMonitorRequest(visibility);
+}
+
+/*!
+ Stops radio monitoring.
+ */
+void FmRadioHsWidgetRadioServiceClient::stopMonitoring()
+{
+    //FmRadioHsWidgetRadioServiceSingleton::instance(this)->cancelNotifications(this);
+
+    if (mRadioMonitorRequest) {
+        delete mRadioMonitorRequest;
+        mRadioMonitorRequest = NULL;
     }
-    stopMonitoring();
-    startMonitoring();
+    mRequestPending = false;
+    mDataInitialized = false;
+}
+
+/*!
+ Prepares the visibility of the request.
+ */
+void FmRadioHsWidgetRadioServiceClient::prepareRequestInfo(XQAiwRequest *request,
+    FmRadioVisibilty visibility)
+{
+    XQRequestInfo info;
+    switch (visibility) {
+    case ToForeground:
+        //info.setForeground(true);
+        break;
+    case ToBackground:
+        info.setBackground(true);
+        break;
+    case DoNotChange:
+    default:
+        break;
+    }
+    if (request) {
+        request->setInfo(info);
+        bool a = request->isBackground();
+    }
+    //bool f = info.isForeground();
+    bool b = info.isBackground();
 }
 
 void FmRadioHsWidgetRadioServiceClient::test()
@@ -154,10 +448,15 @@
 
     /*req = mApplicationManager.create(KRadioServiceMonitorInterfaceName, KRadioServiceMonitorOperation,
         false);*/
+
+/* ///
+    if (!mRadioMonitorRequest) {
+        createMonitorServiceRequest();
+    }
+    bool res = mRadioMonitorRequest->send();
+///
+*/
     
-    createMonitorServiceRequest();
-    bool res = mRadioInformationServiceRequest->send();
-
     /*if (req) {*/
 /*
         // Connect signals once
@@ -183,7 +482,7 @@
         /*bool res = req->send();*/
 
         /*if (res) {
-            //QTimer::singleShot(40000, this, SLOT(doGetFmRadioInformation()));
+            //QTimer::singleShot(40000, this, SLOT(doSendMonitorRequest()));
         }
         else {
             // Request failed.
@@ -196,303 +495,3 @@
         r = 5;
     }*/
 }
-
-/*!
- Changing of FM Radio channel.
- 
- /param command Command to execute.
- */
-void FmRadioHsWidgetRadioServiceClient::doChangeFmRadioChannel(
-    FmRadioChannelChangeCommand command)
-{
-    createControlServiceRequest();
-    int commandId;
-    
-    switch (command) {
-    case PreviousFavouriteChannel:
-        // TODO: Include header and remove comment.
-        commandId = /*RadioServiceCommand::Previous*/ 2;
-        break;
-    case NextFavouriteChannel:
-        // TODO: Include header and remove comment.
-        commandId = /*RadioServiceCommand::Next*/ 3;
-        break;
-    default:
-        break;
-    }
-    
-    QVariant commandArgument;
-    commandArgument.setValue(commandId);
-    QList<QVariant> arguments;
-    arguments.append(commandArgument);
-    mRadioControlServiceRequest->setArguments(arguments);
-
-    bool res = mRadioControlServiceRequest->send();
-
-    if (!res) {
-        int error = mRadioControlServiceRequest->latestError();
-        handleRequestError(error);
-    }
-    
-    stopMonitoring();
-    startMonitoring();
-}
-
-/*!
- Changing of FM Radio channel.
- 
- /param command Command to execute.
- */
-void FmRadioHsWidgetRadioServiceClient::doControlFmRadioAudio(
-    FmRadioAudioControlCommand command)
-{
-    createControlServiceRequest();
-
-    int commandId;
-
-    switch (command) {
-    case Mute:
-        // TODO: Include header and remove comment.
-        commandId = /*RadioServiceCommand::Pause*/ 1;
-        break;
-    case Unmute:
-        // TODO: Include header and remove comment.
-        commandId = /*RadioServiceCommand::Play*/ 0;
-        break;
-    default:
-        break;
-    }
-    
-    QVariant commandArgument;
-    commandArgument.setValue(commandId);
-    QList<QVariant> arguments;
-    arguments.append(commandArgument);
-    mRadioControlServiceRequest->setArguments(arguments);
-
-    bool res = mRadioControlServiceRequest->send();
-    stopMonitoring();
-    startMonitoring();
-}
-
-/*!
- Start FM Radio information listening.
- */
-void FmRadioHsWidgetRadioServiceClient::doGetFmRadioInformation()
-{
-    mRadioInformationServiceRequest->send();
-}
-
-/*!
- Handle changes in FM Radio information texts.
- 
- /param value
- */
-void FmRadioHsWidgetRadioServiceClient::handleFmRadioInformationChange(const QVariant& value)
-{
-    if ( !mDataInitialized ) {
-        mRadioInformationServiceRequest->setMessage( KRadioServiceMonitorOperation );
-        mDataInitialized = true;
-    }
-
-    startMonitoring();
-    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 );
-        }
-    }
-}
-
-/*!
- Handle control command completion of FM Radio.
- 
- /param value
- */
-void FmRadioHsWidgetRadioServiceClient::handleFmRadioControlRequestComplete(const QVariant& value)
-{
-    if (value.isValid() && value.canConvert(QVariant::String)) {
-        QString str = value.toString();
-    }
-    startMonitoring();
-}
-
-/*!
- Handles request error.
- 
- /param int Error value.
- */
-void FmRadioHsWidgetRadioServiceClient::handleRequestError(int error)
-{
-    QString errorStr;
-    QVariant var(FmRadioHsWidget::NotRunning);
-    switch (error) {
-    case XQService::ENoError:
-        errorStr = "No error";
-        break;
-    case XQService::EConnectionError:
-        // TODO close connection gracefully. Maybe try to esblish it again.
-        errorStr = "(/*!< Error in IPC Connection */";
-        break;
-    case XQService::EConnectionClosed:
-        // TODO close connection gracefully. Maybe try to esblish it again.
-        errorStr = "/*!< IPC Connection is closed */";
-        stopMonitoring();
-        handleFmRadioStateChange(var);
-        break;
-    case XQService::EServerNotFound:
-        errorStr = "/*!< Can not find server */";
-        break;
-    case XQService::EIPCError:
-        errorStr = "/*!< Known IPC error defined by SDK */";
-        break;
-    case XQService::EUnknownError:
-        errorStr = "/*!< Unknown IPC error */";
-        break;
-    case XQService::ERequestPending:
-        errorStr = "/*!< Already pending request */";
-        stopMonitoring();
-        startMonitoring();
-        break;
-    default:
-        break;
-    }
-}
-
-/*!
- Handles request error.
- 
- /param int Error value.
- */
-void FmRadioHsWidgetRadioServiceClient::handleRequestError2(int error)
-{
-    QString errorStr;
-    switch (error) {
-    case XQService::ENoError:
-        errorStr = "No error";
-        break;
-    case XQService::EConnectionError:
-        // TODO close connection gracefully. Maybe try to esblish it again.
-        errorStr = "(/*!< Error in IPC Connection */";
-        break;
-    case XQService::EConnectionClosed:
-        errorStr = "/*!< IPC Connection is closed */";
-        stopMonitoring();
-        startMonitoring();
-        break;
-    case XQService::EServerNotFound:
-        errorStr = "/*!< Can not find server */";
-        break;
-    case XQService::EIPCError:
-        errorStr = "/*!< Known IPC error defined by SDK */";
-        break;
-    case XQService::EUnknownError:
-        errorStr = "/*!< Unknown IPC error */";
-        break;
-    case XQService::ERequestPending:
-        errorStr = "/*!< Already pending request */";
-        stopMonitoring();
-        startMonitoring();
-        break;
-    default:
-        break;
-    }
-}
-
-/*!
- Handle changes in FM Radio state.
- 
- /param value New state of FM Radio.
- */
-void FmRadioHsWidgetRadioServiceClient::handleFmRadioStateChange(QVariant& value)
-{
-    if (value.isValid()) {
-        emit radioStateChanged(value);
-    }
-}
-
-/*!
- Handle request completion.
- 
- /param value
- */
-void FmRadioHsWidgetRadioServiceClient::requestCompleted(const QVariant& value)
-{
-    if (value.isValid()) {
-    }
-}
-
-/*!
- Handle ok.
- 
- /param result
- */
-void FmRadioHsWidgetRadioServiceClient::handleOk(const QVariant& result)
-{
-    if (!result.isNull() && result.isValid() && result.toBool()) {
-    }
-}
-
-/*!
- Handle error.
- 
- /param errorCode
- /param errorMessage
- */
-void FmRadioHsWidgetRadioServiceClient::handleError(int /*errorCode*/, const QString& /*errorMessage*/)
-{
-    //int e = errorCode;
-    //QString em = errorMessage;
-}
-
-/*!
- Creates control service request object.
- */
-void FmRadioHsWidgetRadioServiceClient::createControlServiceRequest()
-{
-    if (!mRadioControlServiceRequest) {
-        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,
-            SLOT(handleRequestError2(int)));
-    }
-}
-
-/*!
- Creates monitor service request object.
- */
-void FmRadioHsWidgetRadioServiceClient::createMonitorServiceRequest()
-{
-    if (!mRadioInformationServiceRequest) {
-        QString operation = mDataInitialized ? KRadioServiceMonitorOperation : KRadioServiceRefreshOperation;
-        QString fullServiceName = KRadioServiceName + "." + KRadioServiceMonitorInterfaceName;
-        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)));
-    }
-}
-
-/*!
- Start radio monitoring.
- */
-void FmRadioHsWidgetRadioServiceClient::startMonitoring()
-{
-    createMonitorServiceRequest();
-    doGetFmRadioInformation();
-}
-
-/*!
- Stops radio monitoring.
- */
-void FmRadioHsWidgetRadioServiceClient::stopMonitoring()
-{
-    delete mRadioInformationServiceRequest;
-    delete mRadioControlServiceRequest;
-}
--- a/hswidgetplugin/fmradiohswidgetplugin_exports_to_rom.pri	Tue May 11 12:31:43 2010 +0100
+++ b/hswidgetplugin/fmradiohswidgetplugin_exports_to_rom.pri	Tue May 18 11:27:22 2010 +0100
@@ -21,10 +21,18 @@
 BLD_INF_RULES.prj_exports += \
 "rom/fmradiohswidgetplugin.iby  CORE_APP_LAYER_IBY_EXPORT_PATH(fmradiohswidgetplugin.iby)"
 
-#iby exports to installe
+#iby exports to install
 BLD_INF_RULES.prj_exports += \
 "rom/fmradiohswidgetplugininstaller.iby  CORE_APP_LAYER_IBY_EXPORT_PATH(fmradiohswidgetplugininstaller.iby)"
 
 #iby exports to language
 #BLD_INF_RULES.prj_exports += \
 #"rom/homescreenapp_resources.iby  LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(homescreenapp_resources.iby)"
+
+BLD_INF_RULES.prj_extensions += \
+$$LITERAL_HASH"ifdef MARM" \
+  " START EXTENSION app-services/buildstubsis" \
+    " OPTION SRCDIR rom" \
+    " OPTION SISNAME fmradiohswidgetplugin_stub" \
+  " END" \
+$$LITERAL_HASH"endif"
--- a/hswidgetplugin/hswidgetplugin.pro	Tue May 11 12:31:43 2010 +0100
+++ b/hswidgetplugin/hswidgetplugin.pro	Tue May 18 11:27:22 2010 +0100
@@ -14,6 +14,7 @@
 # Description: Example of home screen widget
 #
 
+CONFIG += ordered
 TEMPLATE = subdirs
 SUBDIRS = fmradiohswidgetplugin \
           fmradiohswidgetplugininstaller
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hswidgetplugin/rom/fmradiohswidgetplugin_stub.pkg	Tue May 18 11:27:22 2010 +0100
@@ -0,0 +1,27 @@
+;
+; 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: Stub package file for FM Radio home screen widget
+;
+
+; Languages
+&EN
+
+; Header
+#{"fmradiohswidgetplugin"}, (0x2002E6D6), 1, 0, 0, TYPE=SA
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
\ No newline at end of file
--- a/hswidgetplugin/sis/fmradiohswidgetplugin.pkg	Tue May 11 12:31:43 2010 +0100
+++ b/hswidgetplugin/sis/fmradiohswidgetplugin.pkg	Tue May 18 11:27:22 2010 +0100
@@ -37,6 +37,7 @@
 "../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"
+"../fmradiohswidgetplugin/resource/fmradiohswidgetplugin.css"       - "c:/private/20022F35/import/widgetregistry/2002E6D6/fmradiohswidgetplugin.css"
 ;"/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"
Binary file radioapp/bin/fmradio_en_US.qm has changed
--- a/radioapp/buildflags.pri	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/buildflags.pri	Tue May 18 11:27:22 2010 +0100
@@ -47,7 +47,7 @@
 
 # Full logging flag that enables the full logging including also timestamps
 # Enabled by default in debug builds
-# CONFIG(debug, debug|release) : LOGGING_FLAGS += LOGGING_ENABLED
+ CONFIG(debug, debug|release) : LOGGING_FLAGS += LOGGING_ENABLED
 
 # Uncomment to enable full logging in release builds
 # LOGGING_FLAGS *= LOGGING_ENABLED
@@ -55,9 +55,6 @@
 # Timestamp logging flag that enables only timestamp logging
 # LOGGING_FLAGS += TIMESTAMP_LOGGING_ENABLED
 
-# Marker that is printed in the beginning of each log line
-## LOGGING_FLAGS += LOGMARKER=\\\"FMRadio:\\\"
-
 # Combines Ui and Engine logs by feeding UI traces to the engine logger
 LOGGING_FLAGS += COMBINE_WITH_ENGINE_LOGGER
 
--- a/radioapp/bwins/radioenginewrapperu.def	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/bwins/radioenginewrapperu.def	Tue May 18 11:27:22 2010 +0100
@@ -1,50 +1,41 @@
 EXPORTS
 	?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)
+	?settings@RadioEngineWrapper@@QAEAAVRadioSettingsIf@@XZ @ 3 NONAME ; class RadioSettingsIf & RadioEngineWrapper::settings(void)
+	?region@RadioEngineWrapper@@QBE?AW4Region@RadioRegion@@XZ @ 4 NONAME ; enum RadioRegion::Region RadioEngineWrapper::region(void) const
+	?tuneFrequency@RadioEngineWrapper@@QAEXIH@Z @ 5 NONAME ; void RadioEngineWrapper::tuneFrequency(unsigned int, int)
+	?initCombinedLogger@RadioLogger@@SAXXZ @ 6 NONAME ; void RadioLogger::initCombinedLogger(void)
 	?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
+	?isRadioOn@RadioEngineWrapper@@QBE_NXZ @ 9 NONAME ; bool RadioEngineWrapper::isRadioOn(void) const
+	?addObserver@RadioEngineWrapper@@QAEXPAVRadioEngineWrapperObserver@@@Z @ 10 NONAME ; void RadioEngineWrapper::addObserver(class RadioEngineWrapperObserver *)
+	?isAntennaAttached@RadioEngineWrapper@@QBE_NXZ @ 11 NONAME ; bool RadioEngineWrapper::isAntennaAttached(void) const
+	?isEngineConstructed@RadioEngineWrapper@@QAE_NXZ @ 12 NONAME ; bool RadioEngineWrapper::isEngineConstructed(void)
+	?toggleAudioRoute@RadioEngineWrapper@@QAEXXZ @ 13 NONAME ; void RadioEngineWrapper::toggleAudioRoute(void)
+	?setVolume@RadioEngineWrapper@@QAEXH@Z @ 14 NONAME ; void RadioEngineWrapper::setVolume(int)
+	??0RadioEngineWrapper@@QAE@AAVRadioStationHandlerIf@@@Z @ 15 NONAME ; RadioEngineWrapper::RadioEngineWrapper(class RadioStationHandlerIf &)
+	?cancelSeeking@RadioEngineWrapper@@QAEXXZ @ 16 NONAME ; void RadioEngineWrapper::cancelSeeking(void)
+	?d_func@RadioEngineWrapper@@AAEPAVRadioEngineWrapperPrivate@@XZ @ 17 NONAME ; class RadioEngineWrapperPrivate * RadioEngineWrapper::d_func(void)
+	?d_func@RadioEngineWrapper@@ABEPBVRadioEngineWrapperPrivate@@XZ @ 18 NONAME ; class RadioEngineWrapperPrivate const * RadioEngineWrapper::d_func(void) const
+	?setMute@RadioEngineWrapper@@QAEX_N@Z @ 19 NONAME ; void RadioEngineWrapper::setMute(bool)
+	?releaseCombinedLogger@RadioLogger@@SAXXZ @ 20 NONAME ; void RadioLogger::releaseCombinedLogger(void)
+	??1RadioEngineWrapper@@QAE@XZ @ 21 NONAME ; RadioEngineWrapper::~RadioEngineWrapper(void)
+	?radioStatusChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 22 NONAME ; void RadioEngineWrapperObserver::radioStatusChanged(bool)
+	?frequencyStepSize@RadioEngineWrapper@@QBEIXZ @ 23 NONAME ; unsigned int RadioEngineWrapper::frequencyStepSize(void) const
+	??0MethodLogger@@QAE@PBD0@Z @ 24 NONAME ; MethodLogger::MethodLogger(char const *, char const *)
+	?logMsg@RadioLogger@@SAXPBDW4Mode@1@@Z @ 25 NONAME ; void RadioLogger::logMsg(char const *, enum RadioLogger::Mode)
+	?audioRouteChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 26 NONAME ; void RadioEngineWrapperObserver::audioRouteChanged(bool)
+	?isMuted@RadioEngineWrapper@@QBE_NXZ @ 27 NONAME ; bool RadioEngineWrapper::isMuted(void) const
+	?isUsingLoudspeaker@RadioEngineWrapper@@QBE_NXZ @ 28 NONAME ; bool RadioEngineWrapper::isUsingLoudspeaker(void) const
+	?currentFrequency@RadioEngineWrapper@@QBEIXZ @ 29 NONAME ; unsigned int RadioEngineWrapper::currentFrequency(void) const
+	?skipNext@RadioEngineWrapperObserver@@UAEXXZ @ 30 NONAME ; void RadioEngineWrapperObserver::skipNext(void)
+	?muteChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 31 NONAME ; void RadioEngineWrapperObserver::muteChanged(bool)
+	?isFrequencyValid@RadioEngineWrapper@@QAE_NI@Z @ 32 NONAME ; bool RadioEngineWrapper::isFrequencyValid(unsigned int)
+	?minFrequency@RadioEngineWrapper@@QBEIXZ @ 33 NONAME ; unsigned int RadioEngineWrapper::minFrequency(void) const
+	?rdsAvailabilityChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 34 NONAME ; void RadioEngineWrapperObserver::rdsAvailabilityChanged(bool)
+	?tunedToFrequency@RadioEngineWrapperObserver@@UAEXIH@Z @ 35 NONAME ; void RadioEngineWrapperObserver::tunedToFrequency(unsigned int, int)
+	?tuneWithDelay@RadioEngineWrapper@@QAEXIH@Z @ 36 NONAME ; void RadioEngineWrapper::tuneWithDelay(unsigned int, int)
+	??1MethodLogger@@QAE@XZ @ 37 NONAME ; MethodLogger::~MethodLogger(void)
+	?antennaStatusChanged@RadioEngineWrapperObserver@@UAEX_N@Z @ 38 NONAME ; void RadioEngineWrapperObserver::antennaStatusChanged(bool)
+	?maxFrequency@RadioEngineWrapper@@QBEIXZ @ 39 NONAME ; unsigned int RadioEngineWrapper::maxFrequency(void) const
 
--- a/radioapp/bwins/radiouiengineu.def	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/bwins/radiouiengineu.def	Tue May 18 11:27:22 2010 +0100
@@ -1,256 +1,279 @@
 EXPORTS
-	?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
-	?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)
-	?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)
-	?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)
-	?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
-	?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 &)
-	?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)
-	?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 &)
+	?setFrequency@RadioHistoryItem@@QAEXI@Z @ 1 NONAME ; void RadioHistoryItem::setFrequency(unsigned int)
+	?qt_metacast@RadioUiEngine@@UAEPAXPBD@Z @ 2 NONAME ; void * RadioUiEngine::qt_metacast(char const *)
+	?index@RadioStationFilterModel@@UBE?AVQModelIndex@@HHABV2@@Z @ 3 NONAME ; class QModelIndex RadioStationFilterModel::index(int, int, class QModelIndex const &) const
+	?parseFrequency@RadioStation@@SA?AVQString@@I@Z @ 4 NONAME ; class QString RadioStation::parseFrequency(unsigned int)
+	??0RadioStation@@QAE@ABV0@@Z @ 5 NONAME ; RadioStation::RadioStation(class RadioStation const &)
+	?frequency@RadioStation@@QBEIXZ @ 6 NONAME ; unsigned int RadioStation::frequency(void) const
+	?setFavoriteByFrequency@RadioStationModel@@QAEXI_N@Z @ 7 NONAME ; void RadioStationModel::setFavoriteByFrequency(unsigned int, bool)
+	??_ERadioHistoryItem@@UAE@I@Z @ 8 NONAME ; RadioHistoryItem::~RadioHistoryItem(unsigned int)
+	?staticMetaObject@RadioUiEngine@@2UQMetaObject@@B @ 9 NONAME ; struct QMetaObject const RadioUiEngine::staticMetaObject
+	?setName@RadioStation@@QAEXABVQString@@@Z @ 10 NONAME ; void RadioStation::setName(class QString const &)
+	?qt_metacast@RadioCarouselModel@@UAEPAXPBD@Z @ 11 NONAME ; void * RadioCarouselModel::qt_metacast(char const *)
+	?setFavoriteByPreset@RadioStationModel@@QAEXH_N@Z @ 12 NONAME ; void RadioStationModel::setFavoriteByPreset(int, bool)
+	?decrementReferenceCount@RadioHistoryItem@@AAEXXZ @ 13 NONAME ; void RadioHistoryItem::decrementReferenceCount(void)
+	?qt_metacall@RadioHistoryModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 14 NONAME ; int RadioHistoryModel::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?emitVolumeChanged@RadioUiEngine@@AAEXH@Z @ 15 NONAME ; void RadioUiEngine::emitVolumeChanged(int)
+	?qt_metacall@RadioUiEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 16 NONAME ; int RadioUiEngine::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?addItem@RadioHistoryModel@@AAEXABVQString@@0ABVRadioStation@@@Z @ 17 NONAME ; void RadioHistoryModel::addItem(class QString const &, class QString const &, class RadioStation const &)
+	?trUtf8@RadioCarouselModel@@SA?AVQString@@PBD0H@Z @ 18 NONAME ; class QString RadioCarouselModel::trUtf8(char const *, char const *, int)
+	?setGenre@RadioStation@@QAEXH@Z @ 19 NONAME ; void RadioStation::setGenre(int)
+	??4RadioStation@@QAEAAV0@ABV0@@Z @ 20 NONAME ; class RadioStation & RadioStation::operator=(class RadioStation const &)
+	?stationModel@RadioUiEngine@@QAEAAVRadioStationModel@@XZ @ 21 NONAME ; class RadioStationModel & RadioUiEngine::stationModel(void)
+	?toggleTagging@RadioHistoryModel@@QAEXABVRadioHistoryItem@@H@Z @ 22 NONAME ; void RadioHistoryModel::toggleTagging(class RadioHistoryItem const &, int)
+	?muteChanged@RadioUiEngine@@IAEX_N@Z @ 23 NONAME ; void RadioUiEngine::muteChanged(bool)
+	?maxFrequency@RadioUiEngine@@QBEIXZ @ 24 NONAME ; unsigned int RadioUiEngine::maxFrequency(void) const
+	?saveStation@RadioStationModel@@QAEXAAVRadioStation@@@Z @ 25 NONAME ; void RadioStationModel::saveStation(class RadioStation &)
+	?hasChanged@RadioStation@@QBE_NXZ @ 26 NONAME ; bool RadioStation::hasChanged(void) const
+	??0RadioCarouselModel@@AAE@AAVRadioUiEngine@@AAVRadioStationModel@@@Z @ 27 NONAME ; RadioCarouselModel::RadioCarouselModel(class RadioUiEngine &, class RadioStationModel &)
+	?trUtf8@RadioScannerEngine@@SA?AVQString@@PBD0H@Z @ 28 NONAME ; class QString RadioScannerEngine::trUtf8(char const *, char const *, int)
+	?isScanning@RadioUiEngine@@QBE_NXZ @ 29 NONAME ; bool RadioUiEngine::isScanning(void) const
+	?d_func@RadioHistoryModel@@AAEPAVRadioHistoryModelPrivate@@XZ @ 30 NONAME ; class RadioHistoryModelPrivate * RadioHistoryModel::d_func(void)
+	?piCodeToCallSign@RadioStation@@AAE?AVQString@@I@Z @ 31 NONAME ; class QString RadioStation::piCodeToCallSign(unsigned int)
+	?hasLooped@RadioStationFilterModel@@QBE_NABVQModelIndex@@@Z @ 32 NONAME ; bool RadioStationFilterModel::hasLooped(class QModelIndex const &) const
+	?favoriteChanged@RadioStationModel@@IAEXABVRadioStation@@@Z @ 33 NONAME ; void RadioStationModel::favoriteChanged(class RadioStation const &)
+	?radioStatusChanged@RadioUiEngine@@IAEX_N@Z @ 34 NONAME ; void RadioUiEngine::radioStatusChanged(bool)
+	?setIcons@RadioHistoryModel@@QAEXABVQIcon@@0@Z @ 35 NONAME ; void RadioHistoryModel::setIcons(class QIcon const &, class QIcon const &)
+	?isCurrentSongRecognized@RadioHistoryModel@@QBE_NXZ @ 36 NONAME ; bool RadioHistoryModel::isCurrentSongRecognized(void) const
+	?clearRadioTextPlus@RadioHistoryModel@@AAEXXZ @ 37 NONAME ; void RadioHistoryModel::clearRadioTextPlus(void)
+	?addStation@RadioStationModel@@QAEXABVRadioStation@@@Z @ 38 NONAME ; void RadioStationModel::addStation(class RadioStation const &)
+	?favoriteCount@RadioStationModel@@QAEHXZ @ 39 NONAME ; int RadioStationModel::favoriteCount(void)
+	?createNewFilterModel@RadioUiEngine@@QAEPAVRadioStationFilterModel@@PAVQObject@@@Z @ 40 NONAME ; class RadioStationFilterModel * RadioUiEngine::createNewFilterModel(class QObject *)
+	??1RadioScannerEngine@@UAE@XZ @ 41 NONAME ; RadioScannerEngine::~RadioScannerEngine(void)
+	?isScanning@RadioScannerEngine@@QBE_NXZ @ 42 NONAME ; bool RadioScannerEngine::isScanning(void) const
+	?tunePreset@RadioUiEngine@@QAEXH@Z @ 43 NONAME ; void RadioUiEngine::tunePreset(int)
+	?trUtf8@RadioScannerEngine@@SA?AVQString@@PBD0@Z @ 44 NONAME ; class QString RadioScannerEngine::trUtf8(char const *, char const *)
+	?emitDataChanged@RadioStationModel@@AAEXABVRadioStation@@@Z @ 45 NONAME ; void RadioStationModel::emitDataChanged(class RadioStation const &)
+	?isRadioOn@RadioUiEngine@@QBE_NXZ @ 46 NONAME ; bool RadioUiEngine::isRadioOn(void) const
+	?continueScanning@RadioScannerEngine@@QAEXXZ @ 47 NONAME ; void RadioScannerEngine::continueScanning(void)
+	?modelIndexFromFrequency@RadioStationModel@@QAE?AVQModelIndex@@I@Z @ 48 NONAME ; class QModelIndex RadioStationModel::modelIndexFromFrequency(unsigned int)
+	?list@RadioStationModel@@QBEABV?$QMap@IVRadioStation@@@@XZ @ 49 NONAME ; class QMap<unsigned int, class RadioStation> const & RadioStationModel::list(void) const
+	?tr@RadioStationModel@@SA?AVQString@@PBD0@Z @ 50 NONAME ; class QString RadioStationModel::tr(char const *, char const *)
+	?tr@RadioCarouselModel@@SA?AVQString@@PBD0H@Z @ 51 NONAME ; class QString RadioCarouselModel::tr(char const *, char const *, int)
+	?setChangeFlags@RadioStation@@QAEXV?$QFlags@W4ChangeFlag@RadioStation@@@@@Z @ 52 NONAME ; void RadioStation::setChangeFlags(class QFlags<enum RadioStation::ChangeFlag>)
+	?hasRds@RadioStation@@QBE_NXZ @ 53 NONAME ; bool RadioStation::hasRds(void) const
+	?findClosest@RadioStationModel@@QAE?AVRadioStation@@IW4Mode@StationSkip@@@Z @ 54 NONAME ; class RadioStation RadioStationModel::findClosest(unsigned int, enum StationSkip::Mode)
+	?flags@RadioStationModel@@UBE?AV?$QFlags@W4ItemFlag@Qt@@@@ABVQModelIndex@@@Z @ 55 NONAME ; class QFlags<enum Qt::ItemFlag> RadioStationModel::flags(class QModelIndex const &) const
+	?id@RadioHistoryItem@@QBEHXZ @ 56 NONAME ; int RadioHistoryItem::id(void) const
+	?stationsInRange@RadioUiEngine@@QAE?AV?$QList@VRadioStation@@@@II@Z @ 57 NONAME ; class QList<class RadioStation> RadioUiEngine::stationsInRange(unsigned int, unsigned int)
+	?trUtf8@RadioUiEngine@@SA?AVQString@@PBD0@Z @ 58 NONAME ; class QString RadioUiEngine::trUtf8(char const *, char const *)
+	?tr@RadioScannerEngine@@SA?AVQString@@PBD0H@Z @ 59 NONAME ; class QString RadioScannerEngine::tr(char const *, char const *, int)
+	??_ERadioCarouselModel@@UAE@I@Z @ 60 NONAME ; RadioCarouselModel::~RadioCarouselModel(unsigned int)
+	??0RadioStation@@QAE@HI@Z @ 61 NONAME ; RadioStation::RadioStation(int, unsigned int)
+	?setVolume@RadioUiEngine@@QAEXH@Z @ 62 NONAME ; void RadioUiEngine::setVolume(int)
+	?setFavorite@RadioStation@@QAEX_N@Z @ 63 NONAME ; void RadioStation::setFavorite(bool)
+	?d_func@RadioStationModel@@ABEPBVRadioStationModelPrivate@@XZ @ 64 NONAME ; class RadioStationModelPrivate const * RadioStationModel::d_func(void) const
+	?setCyclic@RadioStationFilterModel@@QAEX_N@Z @ 65 NONAME ; void RadioStationFilterModel::setCyclic(bool)
+	??1RadioStationModel@@UAE@XZ @ 66 NONAME ; RadioStationModel::~RadioStationModel(void)
+	?isMuted@RadioUiEngine@@QBE_NXZ @ 67 NONAME ; bool RadioUiEngine::isMuted(void) const
+	?isValid@RadioStation@@QBE_NXZ @ 68 NONAME ; bool RadioStation::isValid(void) const
+	?isEqual@RadioStationFilterModel@@QBE_NABVQModelIndex@@0@Z @ 69 NONAME ; bool RadioStationFilterModel::isEqual(class QModelIndex const &, class QModelIndex const &) const
+	?decrementReferenceCount@RadioStation@@AAEXXZ @ 70 NONAME ; void RadioStation::decrementReferenceCount(void)
+	?trUtf8@RadioUiEngine@@SA?AVQString@@PBD0H@Z @ 71 NONAME ; class QString RadioUiEngine::trUtf8(char const *, char const *, int)
+	?reset@RadioHistoryItem@@QAEXXZ @ 72 NONAME ; void RadioHistoryItem::reset(void)
+	?trUtf8@RadioStationModel@@SA?AVQString@@PBD0@Z @ 73 NONAME ; class QString RadioStationModel::trUtf8(char const *, char const *)
+	??0RadioStationModel@@QAE@AAVRadioUiEnginePrivate@@@Z @ 74 NONAME ; RadioStationModel::RadioStationModel(class RadioUiEnginePrivate &)
+	?tuneFrequency@RadioUiEngine@@QAEXIH@Z @ 75 NONAME ; void RadioUiEngine::tuneFrequency(unsigned int, int)
+	?frequency@RadioHistoryItem@@QBEIXZ @ 76 NONAME ; unsigned int RadioHistoryItem::frequency(void) const
+	?qt_metacall@RadioScannerEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 77 NONAME ; int RadioScannerEngine::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?emitTunedToFrequency@RadioUiEngine@@AAEXIH@Z @ 78 NONAME ; void RadioUiEngine::emitTunedToFrequency(unsigned int, int)
+	?psType@RadioStation@@QBE?AV?$QFlags@W4PsTypeFlag@RadioStation@@@@XZ @ 79 NONAME ; class QFlags<enum RadioStation::PsTypeFlag> RadioStation::psType(void) const
+	?d_func@RadioUiEngine@@ABEPBVRadioUiEnginePrivate@@XZ @ 80 NONAME ; class RadioUiEnginePrivate const * RadioUiEngine::d_func(void) const
+	?rowCount@RadioCarouselModel@@UBEHABVQModelIndex@@@Z @ 81 NONAME ; int RadioCarouselModel::rowCount(class QModelIndex const &) const
+	?scannerEngine@RadioUiEngine@@QAEPAVRadioScannerEngine@@XZ @ 82 NONAME ; class RadioScannerEngine * RadioUiEngine::scannerEngine(void)
+	?startScanning@RadioScannerEngine@@QAEXXZ @ 83 NONAME ; void RadioScannerEngine::startScanning(void)
+	?emitStationFound@RadioScannerEngine@@AAEXABVRadioStation@@@Z @ 84 NONAME ; void RadioScannerEngine::emitStationFound(class RadioStation const &)
+	?findCurrentStation@RadioStationModel@@AAE?AVRadioStation@@I@Z @ 85 NONAME ; class RadioStation RadioStationModel::findCurrentStation(unsigned int)
+	??4RadioHistoryItem@@QAEAAV0@ABV0@@Z @ 86 NONAME ; class RadioHistoryItem & RadioHistoryItem::operator=(class RadioHistoryItem const &)
+	?url@RadioStation@@QBE?AVQString@@XZ @ 87 NONAME ; class QString RadioStation::url(void) const
+	?historyModel@RadioUiEngine@@QAEAAVRadioHistoryModel@@XZ @ 88 NONAME ; class RadioHistoryModel & RadioUiEngine::historyModel(void)
+	?frequencyMhz@RadioStation@@QBE?AVQString@@XZ @ 89 NONAME ; class QString RadioStation::frequencyMhz(void) const
+	?setStation@RadioHistoryItem@@QAEXABVQString@@@Z @ 90 NONAME ; void RadioHistoryItem::setStation(class QString const &)
+	?qt_metacast@RadioStationModel@@UAEPAXPBD@Z @ 91 NONAME ; void * RadioStationModel::qt_metacast(char const *)
+	?getStaticMetaObject@RadioCarouselModel@@SAABUQMetaObject@@XZ @ 92 NONAME ; struct QMetaObject const & RadioCarouselModel::getStaticMetaObject(void)
+	?filterAcceptsRow@RadioStationFilterModel@@EBE_NHABVQModelIndex@@@Z @ 93 NONAME ; bool RadioStationFilterModel::filterAcceptsRow(int, class QModelIndex const &) const
+	?cancel@RadioScannerEngine@@QAEXXZ @ 94 NONAME ; void RadioScannerEngine::cancel(void)
+	?addRecognizedSong@RadioUiEngine@@QAEXABVQString@@0ABVRadioStation@@@Z @ 95 NONAME ; void RadioUiEngine::addRecognizedSong(class QString const &, class QString const &, class RadioStation const &)
+	?emitMuteChanged@RadioUiEngine@@AAEX_N@Z @ 96 NONAME ; void RadioUiEngine::emitMuteChanged(bool)
+	?removeByPresetIndex@RadioStationModel@@QAEXH@Z @ 97 NONAME ; void RadioStationModel::removeByPresetIndex(int)
+	?d_func@RadioScannerEngine@@AAEPAVRadioScannerEnginePrivate@@XZ @ 98 NONAME ; class RadioScannerEnginePrivate * RadioScannerEngine::d_func(void)
+	?stationAt@RadioStationModel@@QBE?AVRadioStation@@H@Z @ 99 NONAME ; class RadioStation RadioStationModel::stationAt(int) const
+	?dynamicPsChanged@RadioStationModel@@IAEXABVRadioStation@@@Z @ 100 NONAME ; void RadioStationModel::dynamicPsChanged(class RadioStation const &)
+	?setType@RadioStation@@QAEXV?$QFlags@W4TypeFlag@RadioStation@@@@@Z @ 101 NONAME ; void RadioStation::setType(class QFlags<enum RadioStation::TypeFlag>)
+	??0RadioHistoryItem@@QAE@XZ @ 102 NONAME ; RadioHistoryItem::RadioHistoryItem(void)
+	?findPresetIndex@RadioStationModel@@QAEHH@Z @ 103 NONAME ; int RadioStationModel::findPresetIndex(int)
+	?setRadioTextPlus@RadioStation@@QAEXHABVQString@@@Z @ 104 NONAME ; void RadioStation::setRadioTextPlus(int, class QString const &)
+	?metaObject@RadioStationModel@@UBEPBUQMetaObject@@XZ @ 105 NONAME ; struct QMetaObject const * RadioStationModel::metaObject(void) const
+	?getStaticMetaObject@RadioStationModel@@SAABUQMetaObject@@XZ @ 106 NONAME ; struct QMetaObject const & RadioStationModel::getStaticMetaObject(void)
+	?tr@RadioScannerEngine@@SA?AVQString@@PBD0@Z @ 107 NONAME ; class QString RadioScannerEngine::tr(char const *, char const *)
+	?dynamicPsText@RadioStation@@QBE?AVQString@@XZ @ 108 NONAME ; class QString RadioStation::dynamicPsText(void) const
+	?isFirstTimeStart@RadioUiEngine@@QAE_NXZ @ 109 NONAME ; bool RadioUiEngine::isFirstTimeStart(void)
+	?setMute@RadioUiEngine@@QAEX_N@Z @ 110 NONAME ; void RadioUiEngine::setMute(bool)
+	?init@RadioUiEngine@@QAE_NXZ @ 111 NONAME ; bool RadioUiEngine::init(void)
+	?changeFlags@RadioStation@@QBE?AV?$QFlags@W4ChangeFlag@RadioStation@@@@XZ @ 112 NONAME ; class QFlags<enum RadioStation::ChangeFlag> RadioStation::changeFlags(void) const
+	?qt_metacast@RadioHistoryModel@@UAEPAXPBD@Z @ 113 NONAME ; void * RadioHistoryModel::qt_metacast(char const *)
+	??1RadioUiEngine@@UAE@XZ @ 114 NONAME ; RadioUiEngine::~RadioUiEngine(void)
+	?tr@RadioHistoryModel@@SA?AVQString@@PBD0@Z @ 115 NONAME ; class QString RadioHistoryModel::tr(char const *, char const *)
+	?metaObject@RadioCarouselModel@@UBEPBUQMetaObject@@XZ @ 116 NONAME ; struct QMetaObject const * RadioCarouselModel::metaObject(void) const
+	?d_func@RadioCarouselModel@@AAEPAVRadioCarouselModelPrivate@@XZ @ 117 NONAME ; class RadioCarouselModelPrivate * RadioCarouselModel::d_func(void)
+	?initialize@RadioStationModel@@QAEXPAVRadioPresetStorage@@PAVRadioEngineWrapper@@@Z @ 118 NONAME ; void RadioStationModel::initialize(class RadioPresetStorage *, class RadioEngineWrapper *)
+	?resetCurrentSong@RadioHistoryModel@@QAEXXZ @ 119 NONAME ; void RadioHistoryModel::resetCurrentSong(void)
+	?d_func@RadioHistoryModel@@ABEPBVRadioHistoryModelPrivate@@XZ @ 120 NONAME ; class RadioHistoryModelPrivate const * RadioHistoryModel::d_func(void) const
+	?stationFound@RadioScannerEngine@@IAEXABVRadioStation@@@Z @ 121 NONAME ; void RadioScannerEngine::stationFound(class RadioStation const &)
+	?resetChangeFlags@RadioStation@@QAEXXZ @ 122 NONAME ; void RadioStation::resetChangeFlags(void)
+	??_ERadioStationFilterModel@@UAE@I@Z @ 123 NONAME ; RadioStationFilterModel::~RadioStationFilterModel(unsigned int)
+	?metaObject@RadioScannerEngine@@UBEPBUQMetaObject@@XZ @ 124 NONAME ; struct QMetaObject const * RadioScannerEngine::metaObject(void) const
+	?callSignChar@RadioStation@@AAEDI@Z @ 125 NONAME ; char RadioStation::callSignChar(unsigned int)
+	??_ERadioStation@@UAE@I@Z @ 126 NONAME ; RadioStation::~RadioStation(unsigned int)
+	?detach@RadioHistoryItem@@QAEXXZ @ 127 NONAME ; void RadioHistoryItem::detach(void)
+	?staticMetaObject@RadioHistoryModel@@2UQMetaObject@@B @ 128 NONAME ; struct QMetaObject const RadioHistoryModel::staticMetaObject
+	?isDetached@RadioStation@@QBE_NXZ @ 129 NONAME ; bool RadioStation::isDetached(void) const
+	??0RadioHistoryItem@@QAE@ABVQString@@0@Z @ 130 NONAME ; RadioHistoryItem::RadioHistoryItem(class QString const &, class QString const &)
+	?removeAll@RadioStationModel@@QAEXW4RemoveMode@1@@Z @ 131 NONAME ; void RadioStationModel::removeAll(enum RadioStationModel::RemoveMode)
+	?data_ptr@RadioHistoryItem@@QAEAAPAVRadioHistoryItemPrivate@@XZ @ 132 NONAME ; class RadioHistoryItemPrivate * & RadioHistoryItem::data_ptr(void)
+	?setShowDetails@RadioHistoryModel@@QAEX_N@Z @ 133 NONAME ; void RadioHistoryModel::setShowDetails(bool)
+	?rowCount@RadioStationModel@@UBEHABVQModelIndex@@@Z @ 134 NONAME ; int RadioStationModel::rowCount(class QModelIndex const &) const
+	?toggleMute@RadioUiEngine@@QAEXXZ @ 135 NONAME ; void RadioUiEngine::toggleMute(void)
+	?genreToString@RadioUiEngine@@QAE?AVQString@@HW4Target@GenreTarget@@@Z @ 136 NONAME ; class QString RadioUiEngine::genreToString(int, enum GenreTarget::Target)
+	?d_func@RadioUiEngine@@AAEPAVRadioUiEnginePrivate@@XZ @ 137 NONAME ; class RadioUiEnginePrivate * RadioUiEngine::d_func(void)
+	?station@RadioHistoryItem@@QBE?AVQString@@XZ @ 138 NONAME ; class QString RadioHistoryItem::station(void) const
+	??_ERadioHistoryModel@@UAE@I@Z @ 139 NONAME ; RadioHistoryModel::~RadioHistoryModel(unsigned int)
+	??1RadioCarouselModel@@UAE@XZ @ 140 NONAME ; RadioCarouselModel::~RadioCarouselModel(void)
+	?addScannedFrequency@RadioScannerEngine@@QAEXI@Z @ 141 NONAME ; void RadioScannerEngine::addScannedFrequency(unsigned int)
+	?trUtf8@RadioHistoryModel@@SA?AVQString@@PBD0@Z @ 142 NONAME ; class QString RadioHistoryModel::trUtf8(char const *, char const *)
+	?frequencyStepSize@RadioUiEngine@@QBEIXZ @ 143 NONAME ; unsigned int RadioUiEngine::frequencyStepSize(void) const
+	??0RadioHistoryModel@@AAE@AAVRadioUiEngine@@@Z @ 144 NONAME ; RadioHistoryModel::RadioHistoryModel(class RadioUiEngine &)
+	?trUtf8@RadioStationModel@@SA?AVQString@@PBD0H@Z @ 145 NONAME ; class QString RadioStationModel::trUtf8(char const *, char const *, int)
+	?metaObject@RadioHistoryModel@@UBEPBUQMetaObject@@XZ @ 146 NONAME ; struct QMetaObject const * RadioHistoryModel::metaObject(void) const
+	?setFavorites@RadioStationModel@@QAEXABV?$QList@VQModelIndex@@@@@Z @ 147 NONAME ; void RadioStationModel::setFavorites(class QList<class QModelIndex> const &)
+	?setArtist@RadioHistoryItem@@QAEXABVQString@@@Z @ 148 NONAME ; void RadioHistoryItem::setArtist(class QString const &)
+	?setTitle@RadioHistoryItem@@QAEXABVQString@@@Z @ 149 NONAME ; void RadioHistoryItem::setTitle(class QString const &)
+	?isOfflineProfile@RadioUiEngine@@SA_NXZ @ 150 NONAME ; bool RadioUiEngine::isOfflineProfile(void)
+	?tr@RadioUiEngine@@SA?AVQString@@PBD0@Z @ 151 NONAME ; class QString RadioUiEngine::tr(char const *, char const *)
+	?currentStation@RadioStationModel@@QBEABVRadioStation@@XZ @ 152 NONAME ; class RadioStation const & RadioStationModel::currentStation(void) const
+	?rowCount@RadioHistoryModel@@UBEHABVQModelIndex@@@Z @ 153 NONAME ; int RadioHistoryModel::rowCount(class QModelIndex const &) const
+	?region@RadioUiEngine@@QBE?AW4Region@RadioRegion@@XZ @ 154 NONAME ; enum RadioRegion::Region RadioUiEngine::region(void) const
+	?skipStation@RadioUiEngine@@QAEIW4Mode@StationSkip@@I@Z @ 155 NONAME ; unsigned int RadioUiEngine::skipStation(enum StationSkip::Mode, unsigned int)
+	?isInitialized@RadioUiEngine@@QBE_NXZ @ 156 NONAME ; bool RadioUiEngine::isInitialized(void) const
+	?findFrequency@RadioStationModel@@QAE_NIAAVRadioStation@@@Z @ 157 NONAME ; bool RadioStationModel::findFrequency(unsigned int, class RadioStation &)
+	?stationsInRange@RadioStationModel@@QAE?AV?$QList@VRadioStation@@@@II@Z @ 158 NONAME ; class QList<class RadioStation> RadioStationModel::stationsInRange(unsigned int, unsigned int)
+	?tuneWithDelay@RadioUiEngine@@QAEXIH@Z @ 159 NONAME ; void RadioUiEngine::tuneWithDelay(unsigned int, int)
+	?emitAntennaStatusChanged@RadioUiEngine@@AAEX_N@Z @ 160 NONAME ; void RadioUiEngine::emitAntennaStatusChanged(bool)
+	?settings@RadioUiEngine@@QAEAAVRadioSettingsIf@@XZ @ 161 NONAME ; class RadioSettingsIf & RadioUiEngine::settings(void)
+	??_ERadioScannerEngine@@UAE@I@Z @ 162 NONAME ; RadioScannerEngine::~RadioScannerEngine(unsigned int)
+	?hasPiCode@RadioStation@@QBE_NXZ @ 163 NONAME ; bool RadioStation::hasPiCode(void) const
+	?rdsAvailabilityChanged@RadioUiEngine@@IAEX_N@Z @ 164 NONAME ; void RadioUiEngine::rdsAvailabilityChanged(bool)
+	?qt_metacall@RadioCarouselModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 165 NONAME ; int RadioCarouselModel::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?findPresetIndex@RadioStationModel@@QAEHHAAVRadioStation@@@Z @ 166 NONAME ; int RadioStationModel::findPresetIndex(int, class RadioStation &)
+	?stationHandlerIf@RadioStationModel@@QAEAAVRadioStationHandlerIf@@XZ @ 167 NONAME ; class RadioStationHandlerIf & RadioStationModel::stationHandlerIf(void)
+	?emitSeekingStarted@RadioUiEngine@@AAEXW4Direction@Seeking@@@Z @ 168 NONAME ; void RadioUiEngine::emitSeekingStarted(enum Seeking::Direction)
+	??1RadioStationFilterModel@@UAE@XZ @ 169 NONAME ; RadioStationFilterModel::~RadioStationFilterModel(void)
+	?emitAudioRouteChanged@RadioUiEngine@@AAEX_N@Z @ 170 NONAME ; void RadioUiEngine::emitAudioRouteChanged(bool)
+	?d_func@RadioScannerEngine@@ABEPBVRadioScannerEnginePrivate@@XZ @ 171 NONAME ; class RadioScannerEnginePrivate const * RadioScannerEngine::d_func(void) const
+	?toggleAudioRoute@RadioUiEngine@@QAEXXZ @ 172 NONAME ; void RadioUiEngine::toggleAudioRoute(void)
+	?unsetType@RadioStation@@QAEXV?$QFlags@W4TypeFlag@RadioStation@@@@@Z @ 173 NONAME ; void RadioStation::unsetType(class QFlags<enum RadioStation::TypeFlag>)
+	?setIcons@RadioStationModel@@QAEXABVQIcon@@0@Z @ 174 NONAME ; void RadioStationModel::setIcons(class QIcon const &, class QIcon const &)
+	?findUnusedPresetIndex@RadioStationModel@@AAEHXZ @ 175 NONAME ; int RadioStationModel::findUnusedPresetIndex(void)
+	?getStaticMetaObject@RadioHistoryModel@@SAABUQMetaObject@@XZ @ 176 NONAME ; struct QMetaObject const & RadioHistoryModel::getStaticMetaObject(void)
+	?dynamicPsCheckEnded@RadioStationModel@@AAEXXZ @ 177 NONAME ; void RadioStationModel::dynamicPsCheckEnded(void)
+	?seekStation@RadioUiEngine@@QAEXH@Z @ 178 NONAME ; void RadioUiEngine::seekStation(int)
+	?setPiCode@RadioStation@@QAE_NHW4Region@RadioRegion@@@Z @ 179 NONAME ; bool RadioStation::setPiCode(int, enum RadioRegion::Region)
+	?lastTunedFrequency@RadioUiEngine@@SAIXZ @ 180 NONAME ; unsigned int RadioUiEngine::lastTunedFrequency(void)
+	?tunedToFrequency@RadioUiEngine@@IAEXIH@Z @ 181 NONAME ; void RadioUiEngine::tunedToFrequency(unsigned int, int)
+	?tr@RadioUiEngine@@SA?AVQString@@PBD0H@Z @ 182 NONAME ; class QString RadioUiEngine::tr(char const *, char const *, int)
+	?trUtf8@RadioHistoryModel@@SA?AVQString@@PBD0H@Z @ 183 NONAME ; class QString RadioHistoryModel::trUtf8(char const *, char const *, int)
+	?data@RadioStationFilterModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 184 NONAME ; class QVariant RadioStationFilterModel::data(class QModelIndex const &, int) const
+	?detach@RadioStation@@QAEXXZ @ 185 NONAME ; void RadioStation::detach(void)
+	?d_func@RadioCarouselModel@@ABEPBVRadioCarouselModelPrivate@@XZ @ 186 NONAME ; class RadioCarouselModelPrivate const * RadioCarouselModel::d_func(void) const
+	?staticMetaObject@RadioScannerEngine@@2UQMetaObject@@B @ 187 NONAME ; struct QMetaObject const RadioScannerEngine::staticMetaObject
+	?radioText@RadioStation@@QBE?AVQString@@XZ @ 188 NONAME ; class QString RadioStation::radioText(void) const
+	?setData@RadioStationModel@@UAE_NABVQModelIndex@@ABVQVariant@@H@Z @ 189 NONAME ; bool RadioStationModel::setData(class QModelIndex const &, class QVariant const &, int)
+	?setPsType@RadioStation@@QAEXV?$QFlags@W4PsTypeFlag@RadioStation@@@@@Z @ 190 NONAME ; void RadioStation::setPsType(class QFlags<enum RadioStation::PsTypeFlag>)
+	?itemAtIndex@RadioHistoryModel@@QBE?AVRadioHistoryItem@@ABVQModelIndex@@@Z @ 191 NONAME ; class RadioHistoryItem RadioHistoryModel::itemAtIndex(class QModelIndex const &) const
+	?emitChangeSignals@RadioStationModel@@AAEXABVRadioStation@@V?$QFlags@W4ChangeFlag@RadioStation@@@@@Z @ 192 NONAME ; void RadioStationModel::emitChangeSignals(class RadioStation const &, class QFlags<enum RadioStation::ChangeFlag>)
+	?setPresetIndex@RadioStation@@QAEXH@Z @ 193 NONAME ; void RadioStation::setPresetIndex(int)
+	?tr@RadioStationModel@@SA?AVQString@@PBD0H@Z @ 194 NONAME ; class QString RadioStationModel::tr(char const *, char const *, int)
+	?trUtf8@RadioCarouselModel@@SA?AVQString@@PBD0@Z @ 195 NONAME ; class QString RadioCarouselModel::trUtf8(char const *, char const *)
+	?renameStation@RadioStationModel@@QAEXHABVQString@@@Z @ 196 NONAME ; void RadioStationModel::renameStation(int, class QString const &)
+	?currentFrequency@RadioUiEngine@@QBEIXZ @ 197 NONAME ; unsigned int RadioUiEngine::currentFrequency(void) const
+	?emitItemAdded@RadioHistoryModel@@AAEXXZ @ 198 NONAME ; void RadioHistoryModel::emitItemAdded(void)
+	?setUserDefinedName@RadioStation@@QAEXABVQString@@@Z @ 199 NONAME ; void RadioStation::setUserDefinedName(class QString const &)
+	??1RadioStation@@UAE@XZ @ 200 NONAME ; RadioStation::~RadioStation(void)
+	?callSignString@RadioStation@@AAE?AVQString@@I@Z @ 201 NONAME ; class QString RadioStation::callSignString(unsigned int)
+	?getStaticMetaObject@RadioScannerEngine@@SAABUQMetaObject@@XZ @ 202 NONAME ; struct QMetaObject const & RadioScannerEngine::getStaticMetaObject(void)
+	?removeFrequency@RadioCarouselModel@@AAEXABVQModelIndex@@HH@Z @ 203 NONAME ; void RadioCarouselModel::removeFrequency(class QModelIndex const &, int, int)
+	?modelIndexFromFrequency@RadioStationFilterModel@@QAE?AVQModelIndex@@I@Z @ 204 NONAME ; class QModelIndex RadioStationFilterModel::modelIndexFromFrequency(unsigned int)
+	?stationDataChanged@RadioStationModel@@IAEXABVRadioStation@@@Z @ 205 NONAME ; void RadioStationModel::stationDataChanged(class RadioStation const &)
+	?currentStation@RadioStationModel@@QAEAAVRadioStation@@XZ @ 206 NONAME ; class RadioStation & RadioStationModel::currentStation(void)
+	?genre@RadioStation@@QBEHXZ @ 207 NONAME ; int RadioStation::genre(void) const
+	?isDetached@RadioHistoryItem@@QBE_NXZ @ 208 NONAME ; bool RadioHistoryItem::isDetached(void) const
+	?reset@RadioStation@@QAEXXZ @ 209 NONAME ; void RadioStation::reset(void)
+	??0RadioStation@@QAE@XZ @ 210 NONAME ; RadioStation::RadioStation(void)
+	??1RadioHistoryModel@@UAE@XZ @ 211 NONAME ; RadioHistoryModel::~RadioHistoryModel(void)
+	?data@RadioCarouselModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 212 NONAME ; class QVariant RadioCarouselModel::data(class QModelIndex const &, int) const
+	?isSongRecognitionAppAvailable@RadioUiEngine@@QAE_NXZ @ 213 NONAME ; bool RadioUiEngine::isSongRecognitionAppAvailable(void)
+	?isValid@RadioHistoryItem@@QBE_NXZ @ 214 NONAME ; bool RadioHistoryItem::isValid(void) const
+	?setUrl@RadioStation@@QAEXABVQString@@@Z @ 215 NONAME ; void RadioStation::setUrl(class QString const &)
+	?realIndex@RadioStationFilterModel@@QBE?AVQModelIndex@@ABV2@@Z @ 216 NONAME ; class QModelIndex RadioStationFilterModel::realIndex(class QModelIndex const &) const
+	?data@RadioHistoryModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 217 NONAME ; class QVariant RadioHistoryModel::data(class QModelIndex const &, int) const
+	?modelIndexFromFrequency@RadioCarouselModel@@QAE?AVQModelIndex@@I@Z @ 218 NONAME ; class QModelIndex RadioCarouselModel::modelIndexFromFrequency(unsigned int)
+	?isAntennaAttached@RadioUiEngine@@QBE_NXZ @ 219 NONAME ; bool RadioUiEngine::isAntennaAttached(void) const
+	?emitRdsAvailabilityChanged@RadioUiEngine@@AAEX_N@Z @ 220 NONAME ; void RadioUiEngine::emitRdsAvailabilityChanged(bool)
+	??0RadioStationFilterModel@@QAE@AAVRadioUiEngine@@PAVQObject@@@Z @ 221 NONAME ; RadioStationFilterModel::RadioStationFilterModel(class RadioUiEngine &, class QObject *)
+	?presetIndex@RadioStation@@QBEHXZ @ 222 NONAME ; int RadioStation::presetIndex(void) const
+	?staticMetaObject@RadioStationModel@@2UQMetaObject@@B @ 223 NONAME ; struct QMetaObject const RadioStationModel::staticMetaObject
+	?currentSongReset@RadioHistoryModel@@IAEXXZ @ 224 NONAME ; void RadioHistoryModel::currentSongReset(void)
+	?setFrequency@RadioStation@@QAEXI@Z @ 225 NONAME ; void RadioStation::setFrequency(unsigned int)
+	?isRenamed@RadioStation@@QBE_NXZ @ 226 NONAME ; bool RadioStation::isRenamed(void) const
+	?metaObject@RadioUiEngine@@UBEPBUQMetaObject@@XZ @ 227 NONAME ; struct QMetaObject const * RadioUiEngine::metaObject(void) const
+	?removeStation@RadioStationModel@@QAEXABVRadioStation@@@Z @ 228 NONAME ; void RadioStationModel::removeStation(class RadioStation const &)
+	?isUsingLoudspeaker@RadioUiEngine@@QBE_NXZ @ 229 NONAME ; bool RadioUiEngine::isUsingLoudspeaker(void) const
+	?removeByFrequency@RadioStationModel@@QAEXI@Z @ 230 NONAME ; void RadioStationModel::removeByFrequency(unsigned int)
+	??0RadioHistoryItem@@QAE@ABV0@@Z @ 231 NONAME ; RadioHistoryItem::RadioHistoryItem(class RadioHistoryItem const &)
+	?audioRouteChanged@RadioUiEngine@@IAEX_N@Z @ 232 NONAME ; void RadioUiEngine::audioRouteChanged(bool)
+	?findClosest@RadioCarouselModel@@QAE?AVRadioStation@@IW4Mode@StationSkip@@@Z @ 233 NONAME ; class RadioStation RadioCarouselModel::findClosest(unsigned int, enum StationSkip::Mode)
+	?tr@RadioHistoryModel@@SA?AVQString@@PBD0H@Z @ 234 NONAME ; class QString RadioHistoryModel::tr(char const *, char const *, int)
+	?emitRadioStatusChanged@RadioUiEngine@@AAEX_N@Z @ 235 NONAME ; void RadioUiEngine::emitRadioStatusChanged(bool)
+	??0RadioScannerEngine@@QAE@AAVRadioUiEnginePrivate@@@Z @ 236 NONAME ; RadioScannerEngine::RadioScannerEngine(class RadioUiEnginePrivate &)
+	??_ERadioUiEngine@@UAE@I@Z @ 237 NONAME ; RadioUiEngine::~RadioUiEngine(unsigned int)
+	?setDynamicPsText@RadioStation@@QAEXABVQString@@@Z @ 238 NONAME ; void RadioStation::setDynamicPsText(class QString const &)
+	?addRadioTextPlus@RadioHistoryModel@@AAEXHABVQString@@ABVRadioStation@@@Z @ 239 NONAME ; void RadioHistoryModel::addRadioTextPlus(int, class QString const &, class RadioStation const &)
+	?d_func@RadioStationModel@@AAEPAVRadioStationModelPrivate@@XZ @ 240 NONAME ; class RadioStationModelPrivate * RadioStationModel::d_func(void)
+	?setDetail@RadioStationModel@@QAEXV?$QFlags@W4DetailFlag@RadioStationModel@@@@@Z @ 241 NONAME ; void RadioStationModel::setDetail(class QFlags<enum RadioStationModel::DetailFlag>)
+	?removeAll@RadioHistoryModel@@QAEXXZ @ 242 NONAME ; void RadioHistoryModel::removeAll(void)
+	?rowCount@RadioStationFilterModel@@UBEHABVQModelIndex@@@Z @ 243 NONAME ; int RadioStationFilterModel::rowCount(class QModelIndex const &) const
+	?artist@RadioHistoryItem@@QBE?AVQString@@XZ @ 244 NONAME ; class QString RadioHistoryItem::artist(void) const
+	?reportChangedData@RadioHistoryModel@@AAEXHH@Z @ 245 NONAME ; void RadioHistoryModel::reportChangedData(int, int)
+	?time@RadioHistoryItem@@QBE?AVQString@@XZ @ 246 NONAME ; class QString RadioHistoryItem::time(void) const
+	?isType@RadioStation@@QBE_NV?$QFlags@W4TypeFlag@RadioStation@@@@@Z @ 247 NONAME ; bool RadioStation::isType(class QFlags<enum RadioStation::TypeFlag>) const
+	?carouselModel@RadioUiEngine@@QAEPAVRadioCarouselModel@@XZ @ 248 NONAME ; class RadioCarouselModel * RadioUiEngine::carouselModel(void)
+	?setTypeFilter@RadioStationFilterModel@@QAEXV?$QFlags@W4TypeFlag@RadioStation@@@@@Z @ 249 NONAME ; void RadioStationFilterModel::setTypeFilter(class QFlags<enum RadioStation::TypeFlag>)
+	?volumeChanged@RadioUiEngine@@IAEXH@Z @ 250 NONAME ; void RadioUiEngine::volumeChanged(int)
+	?title@RadioHistoryItem@@QBE?AVQString@@XZ @ 251 NONAME ; class QString RadioHistoryItem::title(void) const
+	?data_ptr@RadioStation@@QAEAAPAVRadioStationPrivate@@XZ @ 252 NONAME ; class RadioStationPrivate * & RadioStation::data_ptr(void)
+	?qt_metacast@RadioScannerEngine@@UAEPAXPBD@Z @ 253 NONAME ; void * RadioScannerEngine::qt_metacast(char const *)
+	?tr@RadioCarouselModel@@SA?AVQString@@PBD0@Z @ 254 NONAME ; class QString RadioCarouselModel::tr(char const *, char const *)
+	??1RadioHistoryItem@@UAE@XZ @ 255 NONAME ; RadioHistoryItem::~RadioHistoryItem(void)
+	?antennaStatusChanged@RadioUiEngine@@IAEX_N@Z @ 256 NONAME ; void RadioUiEngine::antennaStatusChanged(bool)
+	?qt_metacall@RadioStationModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 257 NONAME ; int RadioStationModel::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?setRadioText@RadioStation@@QAEXABVQString@@@Z @ 258 NONAME ; void RadioStation::setRadioText(class QString const &)
+	?hasDataChanged@RadioStation@@QBE_NV?$QFlags@W4ChangeFlag@RadioStation@@@@@Z @ 259 NONAME ; bool RadioStation::hasDataChanged(class QFlags<enum RadioStation::ChangeFlag>) const
+	?name@RadioStation@@QBE?AVQString@@XZ @ 260 NONAME ; class QString RadioStation::name(void) const
+	?data@RadioStationModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 261 NONAME ; class QVariant RadioStationModel::data(class QModelIndex const &, int) const
+	?itemAdded@RadioHistoryModel@@IAEXXZ @ 262 NONAME ; void RadioHistoryModel::itemAdded(void)
+	?getStaticMetaObject@RadioUiEngine@@SAABUQMetaObject@@XZ @ 263 NONAME ; struct QMetaObject const & RadioUiEngine::getStaticMetaObject(void)
+	?launchSongRecognition@RadioUiEngine@@QAEXXZ @ 264 NONAME ; void RadioUiEngine::launchSongRecognition(void)
+	?iterateCallSign@RadioStation@@AAE?AVQString@@HH@Z @ 265 NONAME ; class QString RadioStation::iterateCallSign(int, int)
+	??0RadioUiEngine@@QAE@PAVQObject@@@Z @ 266 NONAME ; RadioUiEngine::RadioUiEngine(class QObject *)
+	?setCurrentTime@RadioHistoryItem@@QAEXXZ @ 267 NONAME ; void RadioHistoryItem::setCurrentTime(void)
+	?isTagged@RadioHistoryItem@@QBE_NXZ @ 268 NONAME ; bool RadioHistoryItem::isTagged(void) const
+	?minFrequency@RadioUiEngine@@QBEIXZ @ 269 NONAME ; unsigned int RadioUiEngine::minFrequency(void) const
+	?setShowTagged@RadioHistoryModel@@QAEX_N@Z @ 270 NONAME ; void RadioHistoryModel::setShowTagged(bool)
+	?isFavorite@RadioStation@@QBE_NXZ @ 271 NONAME ; bool RadioStation::isFavorite(void) const
+	?radioTextReceived@RadioStationModel@@IAEXABVRadioStation@@@Z @ 272 NONAME ; void RadioStationModel::radioTextReceived(class RadioStation const &)
+	?staticMetaObject@RadioCarouselModel@@2UQMetaObject@@B @ 273 NONAME ; struct QMetaObject const RadioCarouselModel::staticMetaObject
+	?seekingStarted@RadioUiEngine@@IAEXH@Z @ 274 NONAME ; void RadioUiEngine::seekingStarted(int)
+	?isRecognizedByRds@RadioHistoryItem@@QBE_NXZ @ 275 NONAME ; bool RadioHistoryItem::isRecognizedByRds(void) const
+	??_ERadioStationModel@@UAE@I@Z @ 276 NONAME ; RadioStationModel::~RadioStationModel(unsigned int)
+	?openMusicStore@RadioUiEngine@@QAEXABVRadioHistoryItem@@W4MusicStore@1@@Z @ 277 NONAME ; void RadioUiEngine::openMusicStore(class RadioHistoryItem const &, enum RadioUiEngine::MusicStore)
 
--- a/radioapp/bwins/radiowidgetsu.def	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/bwins/radiowidgetsu.def	Tue May 18 11:27:22 2010 +0100
@@ -1,230 +1,247 @@
 EXPORTS
-	?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)
+	?trUtf8@RadioWindow@@SA?AVQString@@PBD0H@Z @ 1 NONAME ; class QString RadioWindow::trUtf8(char const *, char const *, int)
+	?qt_metacast@RadioHistoryView@@UAEPAXPBD@Z @ 2 NONAME ; void * RadioHistoryView::qt_metacast(char const *)
+	?qt_metacast@RadioFadingLabel@@UAEPAXPBD@Z @ 3 NONAME ; void * RadioFadingLabel::qt_metacast(char const *)
+	?tr@RadioBannerLabel@@SA?AVQString@@PBD0@Z @ 4 NONAME ; class QString RadioBannerLabel::tr(char const *, char const *)
+	?toggleButtons@RadioFrequencyStrip@@AAEXXZ @ 5 NONAME ; void RadioFrequencyStrip::toggleButtons(void)
+	?animateNewStation@RadioStationCarousel@@QAEXABVRadioStation@@@Z @ 6 NONAME ; void RadioStationCarousel::animateNewStation(class RadioStation const &)
+	?getStaticMetaObject@RadioBannerLabel@@SAABUQMetaObject@@XZ @ 7 NONAME ; struct QMetaObject const & RadioBannerLabel::getStaticMetaObject(void)
+	?frequencyChanged@RadioFrequencyStrip@@IAEXIH@Z @ 8 NONAME ; void RadioFrequencyStrip::frequencyChanged(unsigned int, int)
+	?toggleTagging@RadioHistoryView@@AAEXXZ @ 9 NONAME ; void RadioHistoryView::toggleTagging(void)
+	?tr@RadioMainView@@SA?AVQString@@PBD0H@Z @ 10 NONAME ; class QString RadioMainView::tr(char const *, char const *, int)
+	?rename@RadioStationsView@@AAEXXZ @ 11 NONAME ; void RadioStationsView::rename(void)
+	?gestureEvent@RadioStationCarousel@@EAEXPAVQGestureEvent@@@Z @ 12 NONAME ; void RadioStationCarousel::gestureEvent(class QGestureEvent *)
+	??1RadioBannerLabel@@UAE@XZ @ 13 NONAME ; RadioBannerLabel::~RadioBannerLabel(void)
+	?setFavoriteIcon@RadioStationCarousel@@QAEXABVHbIcon@@@Z @ 14 NONAME ; void RadioStationCarousel::setFavoriteIcon(class HbIcon const &)
+	?update@RadioStationCarousel@@AAEXABVRadioStation@@@Z @ 15 NONAME ; void RadioStationCarousel::update(class RadioStation const &)
+	?taggedIcon@RadioHistoryView@@QBE?AVHbIcon@@XZ @ 16 NONAME ; class HbIcon RadioHistoryView::taggedIcon(void) const
+	?seekingStarted@RadioMainView@@AAEXXZ @ 17 NONAME ; void RadioMainView::seekingStarted(void)
+	?addFrequencyPos@RadioFrequencyStrip@@AAEXHIPAVRadioFrequencyItem@@@Z @ 18 NONAME ; void RadioFrequencyStrip::addFrequencyPos(int, unsigned int, class RadioFrequencyItem *)
+	?trUtf8@RadioFadingLabel@@SA?AVQString@@PBD0@Z @ 19 NONAME ; class QString RadioFadingLabel::trUtf8(char const *, char const *)
+	?setScanningMode@RadioFrequencyStrip@@QAEX_N@Z @ 20 NONAME ; void RadioFrequencyStrip::setScanningMode(bool)
+	?createItemPrimitive@RadioFrequencyStrip@@EAEPAVQGraphicsItem@@PAV2@@Z @ 21 NONAME ; class QGraphicsItem * RadioFrequencyStrip::createItemPrimitive(class QGraphicsItem *)
+	??_ERadioStationsView@@UAE@I@Z @ 22 NONAME ; RadioStationsView::~RadioStationsView(unsigned int)
+	?setTextWithoutFading@RadioFadingLabel@@QAEXABVQString@@@Z @ 23 NONAME ; void RadioFadingLabel::setTextWithoutFading(class QString const &)
+	?updateAntennaStatus@RadioWindow@@AAEX_N@Z @ 24 NONAME ; void RadioWindow::updateAntennaStatus(bool)
+	?resizeEvent@RadioFrequencyStrip@@EAEXPAVQGraphicsSceneResizeEvent@@@Z @ 25 NONAME ; void RadioFrequencyStrip::resizeEvent(class QGraphicsSceneResizeEvent *)
+	?addOneSong@RadioHistoryView@@AAEXXZ @ 26 NONAME ; void RadioHistoryView::addOneSong(void)
+	?startScanning@RadioStationsView@@AAEXXZ @ 27 NONAME ; void RadioStationsView::startScanning(void)
+	?initButtons@RadioFrequencyStrip@@AAEXXZ @ 28 NONAME ; void RadioFrequencyStrip::initButtons(void)
+	?setOrientation@RadioMainView@@EAEXXZ @ 29 NONAME ; void RadioMainView::setOrientation(void)
+	?qt_metacall@RadioStationCarousel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 30 NONAME ; int RadioStationCarousel::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?leftButtonIcon@RadioFrequencyStrip@@QBE?AVHbIcon@@XZ @ 31 NONAME ; class HbIcon RadioFrequencyStrip::leftButtonIcon(void) const
+	?init@RadioStationCarousel@@QAEXAAVRadioUiLoader@@PAVRadioUiEngine@@@Z @ 32 NONAME ; void RadioStationCarousel::init(class RadioUiLoader &, class RadioUiEngine *)
+	?insertFrequency@RadioStationCarousel@@AAEXABVQModelIndex@@HH@Z @ 33 NONAME ; void RadioStationCarousel::insertFrequency(class QModelIndex const &, int, int)
+	?toggleScanning@RadioMainView@@AAEXXZ @ 34 NONAME ; void RadioMainView::toggleScanning(void)
+	?staticMetaObject@RadioMainView@@2UQMetaObject@@B @ 35 NONAME ; struct QMetaObject const RadioMainView::staticMetaObject
 	?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)
+	?getStaticMetaObject@RadioMainView@@SAABUQMetaObject@@XZ @ 37 NONAME ; struct QMetaObject const & RadioMainView::getStaticMetaObject(void)
+	?prepareToRemoveFrequency@RadioStationCarousel@@AAEXABVQModelIndex@@HH@Z @ 38 NONAME ; void RadioStationCarousel::prepareToRemoveFrequency(class QModelIndex const &, int, int)
 	?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 *)
+	?setItemVisible@RadioStationCarousel@@QAEX_N@Z @ 41 NONAME ; void RadioStationCarousel::setItemVisible(bool)
+	?trUtf8@RadioStationCarousel@@SA?AVQString@@PBD0@Z @ 42 NONAME ; class QString RadioStationCarousel::trUtf8(char const *, char const *)
+	?tr@RadioStationCarousel@@SA?AVQString@@PBD0@Z @ 43 NONAME ; class QString RadioStationCarousel::tr(char const *, char const *)
+	?skip@RadioStationCarousel@@AAEXW4Mode@StationSkip@@@Z @ 44 NONAME ; void RadioStationCarousel::skip(enum StationSkip::Mode)
+	?selectorPos@RadioFrequencyStrip@@ABEHXZ @ 45 NONAME ; int RadioFrequencyStrip::selectorPos(void) const
+	?currentStationItem@RadioStationCarousel@@AAEPAVRadioStationItem@@XZ @ 46 NONAME ; class RadioStationItem * RadioStationCarousel::currentStationItem(void)
+	??1RadioWindow@@UAE@XZ @ 47 NONAME ; RadioWindow::~RadioWindow(void)
+	?updateFrequencies@RadioStationCarousel@@AAEXXZ @ 48 NONAME ; void RadioStationCarousel::updateFrequencies(void)
+	?metaObject@RadioBannerLabel@@UBEPBUQMetaObject@@XZ @ 49 NONAME ; struct QMetaObject const * RadioBannerLabel::metaObject(void) const
+	?skipRequested@RadioFrequencyStrip@@IAEXH@Z @ 50 NONAME ; void RadioFrequencyStrip::skipRequested(int)
+	?setTaggedIcon@RadioHistoryView@@QAEXABVHbIcon@@@Z @ 51 NONAME ; void RadioHistoryView::setTaggedIcon(class HbIcon const &)
 	?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 *)
-	?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)
+	?mousePressEvent@RadioStationCarousel@@EAEXPAVQGraphicsSceneMouseEvent@@@Z @ 54 NONAME ; void RadioStationCarousel::mousePressEvent(class QGraphicsSceneMouseEvent *)
+	?trUtf8@RadioFrequencyStrip@@SA?AVQString@@PBD0@Z @ 55 NONAME ; class QString RadioFrequencyStrip::trUtf8(char const *, char const *)
+	?tr@RadioStationsView@@SA?AVQString@@PBD0@Z @ 56 NONAME ; class QString RadioStationsView::tr(char const *, char const *)
+	?favoriteIcon@RadioStationCarousel@@QBE?AVHbIcon@@XZ @ 57 NONAME ; class HbIcon RadioStationCarousel::favoriteIcon(void) const
+	?qt_metacall@RadioBannerLabel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 58 NONAME ; int RadioBannerLabel::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?orientationSection@RadioWindow@@QAE?AVQString@@XZ @ 59 NONAME ; class QString RadioWindow::orientationSection(void)
+	?updateStation@RadioFrequencyStrip@@AAEXABVQModelIndex@@HH@Z @ 60 NONAME ; void RadioFrequencyStrip::updateStation(class QModelIndex const &, int, int)
+	?setScanningMode@RadioMainView@@QAEX_N@Z @ 61 NONAME ; void RadioMainView::setScanningMode(bool)
+	?favoriteIcon@RadioStationsView@@QBE?AVHbIcon@@XZ @ 62 NONAME ; class HbIcon RadioStationsView::favoriteIcon(void) const
+	?trUtf8@RadioMainView@@SA?AVQString@@PBD0H@Z @ 63 NONAME ; class QString RadioMainView::trUtf8(char const *, char const *, int)
+	??1RadioFrequencyStrip@@UAE@XZ @ 64 NONAME ; RadioFrequencyStrip::~RadioFrequencyStrip(void)
+	?trUtf8@RadioStationsView@@SA?AVQString@@PBD0H@Z @ 65 NONAME ; class QString RadioStationsView::trUtf8(char const *, char const *, int)
+	?tr@RadioMainView@@SA?AVQString@@PBD0@Z @ 66 NONAME ; class QString RadioMainView::tr(char const *, char const *)
+	?updateFavorites@RadioFrequencyStrip@@AAEXPAVRadioFrequencyItem@@@Z @ 67 NONAME ; void RadioFrequencyStrip::updateFavorites(class RadioFrequencyItem *)
+	?showContextMenu@RadioHistoryView@@AAEXABVQModelIndex@@@Z @ 68 NONAME ; void RadioHistoryView::showContextMenu(class QModelIndex const &)
+	?changeEvent@RadioFrequencyStrip@@EAEXPAVQEvent@@@Z @ 69 NONAME ; void RadioFrequencyStrip::changeEvent(class QEvent *)
+	?updatePos@RadioStationCarousel@@AAEXH@Z @ 70 NONAME ; void RadioStationCarousel::updatePos(int)
+	?staticMetaObject@RadioStationCarousel@@2UQMetaObject@@B @ 71 NONAME ; struct QMetaObject const RadioStationCarousel::staticMetaObject
+	?qt_metacall@RadioFadingLabel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 72 NONAME ; int RadioFadingLabel::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?finishScanning@RadioStationsView@@AAEXXZ @ 73 NONAME ; void RadioStationsView::finishScanning(void)
+	??0RadioFrequencyStrip@@QAE@XZ @ 74 NONAME ; RadioFrequencyStrip::RadioFrequencyStrip(void)
+	?trUtf8@RadioBannerLabel@@SA?AVQString@@PBD0H@Z @ 75 NONAME ; class QString RadioBannerLabel::trUtf8(char const *, char const *, int)
+	?skip@RadioMainView@@AAEXH@Z @ 76 NONAME ; void RadioMainView::skip(int)
+	??0RadioMainView@@QAE@XZ @ 77 NONAME ; RadioMainView::RadioMainView(void)
+	?setRightButtonIcon@RadioFrequencyStrip@@QAEXABVHbIcon@@@Z @ 78 NONAME ; void RadioFrequencyStrip::setRightButtonIcon(class HbIcon const &)
+	?openContextMenu@RadioStationCarousel@@AAEXPAVHbAbstractViewItem@@ABVQPointF@@@Z @ 79 NONAME ; void RadioStationCarousel::openContextMenu(class HbAbstractViewItem *, class QPointF const &)
+	?staticMetaObject@RadioStationsView@@2UQMetaObject@@B @ 80 NONAME ; struct QMetaObject const RadioStationsView::staticMetaObject
+	??_ERadioBannerLabel@@UAE@I@Z @ 81 NONAME ; RadioBannerLabel::~RadioBannerLabel(unsigned int)
+	??_ERadioMainView@@UAE@I@Z @ 82 NONAME ; RadioMainView::~RadioMainView(unsigned int)
+	??_ERadioWindow@@UAE@I@Z @ 83 NONAME ; RadioWindow::~RadioWindow(unsigned int)
+	?tr@RadioFrequencyStrip@@SA?AVQString@@PBD0@Z @ 84 NONAME ; class QString RadioFrequencyStrip::tr(char const *, char const *)
+	?qt_metacast@RadioStationsView@@UAEPAXPBD@Z @ 85 NONAME ; void * RadioStationsView::qt_metacast(char const *)
+	?initSelector@RadioFrequencyStrip@@AAEXXZ @ 86 NONAME ; void RadioFrequencyStrip::initSelector(void)
+	?addSongs@RadioHistoryView@@AAEXXZ @ 87 NONAME ; void RadioHistoryView::addSongs(void)
+	?qt_metacall@RadioWindow@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 88 NONAME ; int RadioWindow::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@RadioFrequencyStrip@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 89 NONAME ; int RadioFrequencyStrip::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?openOtherStore@RadioHistoryView@@AAEXXZ @ 90 NONAME ; void RadioHistoryView::openOtherStore(void)
+	?metaObject@RadioFrequencyStrip@@UBEPBUQMetaObject@@XZ @ 91 NONAME ; struct QMetaObject const * RadioFrequencyStrip::metaObject(void) const
+	?startEffect@RadioFadingLabel@@AAEXABVQString@@PBD@Z @ 92 NONAME ; void RadioFadingLabel::startEffect(class QString const &, char const *)
+	?trUtf8@RadioStationsView@@SA?AVQString@@PBD0@Z @ 93 NONAME ; class QString RadioStationsView::trUtf8(char const *, char const *)
+	?qt_metacast@RadioBannerLabel@@UAEPAXPBD@Z @ 94 NONAME ; void * RadioBannerLabel::qt_metacast(char const *)
+	?qt_metacall@RadioStationsView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 95 NONAME ; int RadioStationsView::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?historyModel@RadioHistoryView@@ABEAAVRadioHistoryModel@@XZ @ 96 NONAME ; class RadioHistoryModel & RadioHistoryView::historyModel(void) const
+	?activateHistoryView@RadioWindow@@QAEXXZ @ 97 NONAME ; void RadioWindow::activateHistoryView(void)
+	??_ERadioStationCarousel@@UAE@I@Z @ 98 NONAME ; RadioStationCarousel::~RadioStationCarousel(unsigned int)
+	?initPositions@RadioFrequencyStrip@@AAEXXZ @ 99 NONAME ; void RadioFrequencyStrip::initPositions(void)
+	?carouselModel@RadioStationCarousel@@ABEPAVRadioCarouselModel@@XZ @ 100 NONAME ; class RadioCarouselModel * RadioStationCarousel::carouselModel(void) const
+	?tr@RadioFadingLabel@@SA?AVQString@@PBD0@Z @ 101 NONAME ; class QString RadioFadingLabel::tr(char const *, char const *)
+	?getStaticMetaObject@RadioFadingLabel@@SAABUQMetaObject@@XZ @ 102 NONAME ; struct QMetaObject const & RadioFadingLabel::getStaticMetaObject(void)
+	?trUtf8@RadioHistoryView@@SA?AVQString@@PBD0@Z @ 103 NONAME ; class QString RadioHistoryView::trUtf8(char const *, char const *)
+	?metaObject@RadioMainView@@UBEPBUQMetaObject@@XZ @ 104 NONAME ; struct QMetaObject const * RadioMainView::metaObject(void) const
+	?clearList@RadioHistoryView@@AAEXXZ @ 105 NONAME ; void RadioHistoryView::clearList(void)
+	?qt_metacast@RadioWindow@@UAEPAXPBD@Z @ 106 NONAME ; void * RadioWindow::qt_metacast(char const *)
+	?trimHtml@RadioFadingLabel@@AAE?AVQString@@ABV2@@Z @ 107 NONAME ; class QString RadioFadingLabel::trimHtml(class QString const &)
+	?tr@RadioWindow@@SA?AVQString@@PBD0@Z @ 108 NONAME ; class QString RadioWindow::tr(char const *, char const *)
+	?nonTaggedIcon@RadioHistoryView@@QBE?AVHbIcon@@XZ @ 109 NONAME ; class HbIcon RadioHistoryView::nonTaggedIcon(void) const
+	?mouseReleaseEvent@RadioFrequencyStrip@@EAEXPAVQGraphicsSceneMouseEvent@@@Z @ 110 NONAME ; void RadioFrequencyStrip::mouseReleaseEvent(class QGraphicsSceneMouseEvent *)
+	?updateItemPrimitive@RadioFrequencyStrip@@EAEXPAVQGraphicsItem@@H@Z @ 111 NONAME ; void RadioFrequencyStrip::updateItemPrimitive(class QGraphicsItem *, int)
+	?showErrorMessage@RadioWindow@@QAEXABVQString@@@Z @ 112 NONAME ; void RadioWindow::showErrorMessage(class QString const &)
+	?getStaticMetaObject@RadioFrequencyStrip@@SAABUQMetaObject@@XZ @ 113 NONAME ; struct QMetaObject const & RadioFrequencyStrip::getStaticMetaObject(void)
+	?removeFrequency@RadioStationCarousel@@AAEXABVQModelIndex@@HH@Z @ 114 NONAME ; void RadioStationCarousel::removeFrequency(class QModelIndex const &, int, int)
+	??0RadioFadingLabel@@QAE@PAVQGraphicsItem@@@Z @ 115 NONAME ; RadioFadingLabel::RadioFadingLabel(class QGraphicsItem *)
+	?activateView@RadioWindow@@AAEXAAV?$QPointer@VRadioViewBase@@@@ABVQString@@V?$QFlags@W4ViewSwitchFlag@Hb@@@@@Z @ 116 NONAME ; void RadioWindow::activateView(class QPointer<class RadioViewBase> &, class QString const &, class QFlags<enum Hb::ViewSwitchFlag>)
+	?initListView@RadioStationsView@@AAEXXZ @ 117 NONAME ; void RadioStationsView::initListView(void)
+	?initModel@RadioFrequencyStrip@@AAEXXZ @ 118 NONAME ; void RadioFrequencyStrip::initModel(void)
+	?scrollToIndex@RadioStationCarousel@@AAEXABVQModelIndex@@V?$QFlags@W4ScrollFlag@RadioStationCarousel@@@@@Z @ 119 NONAME ; void RadioStationCarousel::scrollToIndex(class QModelIndex const &, class QFlags<enum RadioStationCarousel::ScrollFlag>)
+	??0RadioStationsView@@QAE@XZ @ 120 NONAME ; RadioStationsView::RadioStationsView(void)
+	?frequency@RadioFrequencyStrip@@QBEIXZ @ 121 NONAME ; unsigned int RadioFrequencyStrip::frequency(void) const
+	?updateItems@RadioFrequencyStrip@@AAEXXZ @ 122 NONAME ; void RadioFrequencyStrip::updateItems(void)
+	??0RadioBannerLabel@@QAE@PAVQGraphicsItem@@@Z @ 123 NONAME ; RadioBannerLabel::RadioBannerLabel(class QGraphicsItem *)
+	??1RadioStationCarousel@@UAE@XZ @ 124 NONAME ; RadioStationCarousel::~RadioStationCarousel(void)
+	?deckButtonPressed@RadioHistoryView@@AAEXXZ @ 125 NONAME ; void RadioHistoryView::deckButtonPressed(void)
+	?setNonTaggedIcon@RadioHistoryView@@QAEXABVHbIcon@@@Z @ 126 NONAME ; void RadioHistoryView::setNonTaggedIcon(class HbIcon const &)
+	??_ERadioFrequencyStrip@@UAE@I@Z @ 127 NONAME ; RadioFrequencyStrip::~RadioFrequencyStrip(unsigned int)
+	?uiEngine@RadioWindow@@QAEAAVRadioUiEngine@@XZ @ 128 NONAME ; class RadioUiEngine & RadioWindow::uiEngine(void)
+	?trUtf8@RadioMainView@@SA?AVQString@@PBD0@Z @ 129 NONAME ; class QString RadioMainView::trUtf8(char const *, char const *)
+	?setCarouselModel@RadioStationCarousel@@QAEXPAVRadioCarouselModel@@@Z @ 130 NONAME ; void RadioStationCarousel::setCarouselModel(class RadioCarouselModel *)
+	?setFadingEnabled@RadioFadingLabel@@QAEX_N@Z @ 131 NONAME ; void RadioFadingLabel::setFadingEnabled(bool)
+	?showVolumeLevel@RadioWindow@@AAEXH@Z @ 132 NONAME ; void RadioWindow::showVolumeLevel(int)
+	?frequencyChanged@RadioStationCarousel@@IAEXIH@Z @ 133 NONAME ; void RadioStationCarousel::frequencyChanged(unsigned int, int)
+	?mousePressEvent@RadioFrequencyStrip@@EAEXPAVQGraphicsSceneMouseEvent@@@Z @ 134 NONAME ; void RadioFrequencyStrip::mousePressEvent(class QGraphicsSceneMouseEvent *)
+	?getStaticMetaObject@RadioWindow@@SAABUQMetaObject@@XZ @ 135 NONAME ; struct QMetaObject const & RadioWindow::getStaticMetaObject(void)
+	?trUtf8@RadioWindow@@SA?AVQString@@PBD0@Z @ 136 NONAME ; class QString RadioWindow::trUtf8(char const *, char const *)
+	?timerFired@RadioStationCarousel@@AAEXXZ @ 137 NONAME ; void RadioStationCarousel::timerFired(void)
+	?drawPixmap@RadioFrequencyStrip@@AAE?AVQPixmap@@IV?$QList@VRadioStation@@@@PAVRadioFrequencyItem@@@Z @ 138 NONAME ; class QPixmap RadioFrequencyStrip::drawPixmap(unsigned int, class QList<class RadioStation>, class RadioFrequencyItem *)
+	?getStaticMetaObject@RadioStationsView@@SAABUQMetaObject@@XZ @ 139 NONAME ; struct QMetaObject const & RadioStationsView::getStaticMetaObject(void)
+	?initEmptyItems@RadioFrequencyStrip@@AAEXXZ @ 140 NONAME ; void RadioFrequencyStrip::initEmptyItems(void)
+	?listItemClicked@RadioStationsView@@AAEXABVQModelIndex@@@Z @ 141 NONAME ; void RadioStationsView::listItemClicked(class QModelIndex const &)
+	?updateCurrentItem@RadioStationCarousel@@QAEXXZ @ 142 NONAME ; void RadioStationCarousel::updateCurrentItem(void)
+	?updateAntennaStatus@RadioStationsView@@AAEX_N@Z @ 143 NONAME ; void RadioStationsView::updateAntennaStatus(bool)
+	?tr@RadioFadingLabel@@SA?AVQString@@PBD0H@Z @ 144 NONAME ; class QString RadioFadingLabel::tr(char const *, char const *, int)
+	??0RadioWindow@@QAE@PAVQWidget@@@Z @ 145 NONAME ; RadioWindow::RadioWindow(class QWidget *)
+	?updateRadioText@RadioStationCarousel@@AAEXABVRadioStation@@@Z @ 146 NONAME ; void RadioStationCarousel::updateRadioText(class RadioStation const &)
+	?updateAntennaStatus@RadioStationCarousel@@QAEX_N@Z @ 147 NONAME ; void RadioStationCarousel::updateAntennaStatus(bool)
+	?paint@RadioBannerLabel@@EAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 148 NONAME ; void RadioBannerLabel::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *)
+	?updateFavorite@RadioFrequencyStrip@@QAEXABVRadioStation@@@Z @ 149 NONAME ; void RadioFrequencyStrip::updateFavorite(class RadioStation const &)
+	?setInfoText@RadioStationCarousel@@QAEXW4Type@CarouselInfoText@@@Z @ 150 NONAME ; void RadioStationCarousel::setInfoText(enum CarouselInfoText::Type)
+	?initToLastTunedFrequency@RadioStationCarousel@@AAEXXZ @ 151 NONAME ; void RadioStationCarousel::initToLastTunedFrequency(void)
+	?staticMetaObject@RadioFadingLabel@@2UQMetaObject@@B @ 152 NONAME ; struct QMetaObject const RadioFadingLabel::staticMetaObject
+	?trUtf8@RadioFrequencyStrip@@SA?AVQString@@PBD0H@Z @ 153 NONAME ; class QString RadioFrequencyStrip::trUtf8(char const *, char const *, int)
+	?tr@RadioFrequencyStrip@@SA?AVQString@@PBD0H@Z @ 154 NONAME ; class QString RadioFrequencyStrip::tr(char const *, char const *, int)
+	?trUtf8@RadioBannerLabel@@SA?AVQString@@PBD0@Z @ 155 NONAME ; class QString RadioBannerLabel::trUtf8(char const *, char const *)
+	?setFrequencyFromWidget@RadioMainView@@AAEXIH@Z @ 156 NONAME ; void RadioMainView::setFrequencyFromWidget(unsigned int, int)
+	?getStaticMetaObject@RadioStationCarousel@@SAABUQMetaObject@@XZ @ 157 NONAME ; struct QMetaObject const & RadioStationCarousel::getStaticMetaObject(void)
+	?metaObject@RadioFadingLabel@@UBEPBUQMetaObject@@XZ @ 158 NONAME ; struct QMetaObject const * RadioFadingLabel::metaObject(void) const
+	?metaObject@RadioWindow@@UBEPBUQMetaObject@@XZ @ 159 NONAME ; struct QMetaObject const * RadioWindow::metaObject(void) const
+	?staticMetaObject@RadioFrequencyStrip@@2UQMetaObject@@B @ 160 NONAME ; struct QMetaObject const RadioFrequencyStrip::staticMetaObject
+	?updateClampingStyle@RadioStationCarousel@@AAEXXZ @ 161 NONAME ; void RadioStationCarousel::updateClampingStyle(void)
+	?tr@RadioStationsView@@SA?AVQString@@PBD0H@Z @ 162 NONAME ; class QString RadioStationsView::tr(char const *, char const *, int)
+	?autoScrollTime@RadioStationCarousel@@QBEHXZ @ 163 NONAME ; int RadioStationCarousel::autoScrollTime(void) const
+	?handleRightButton@RadioFrequencyStrip@@AAEXXZ @ 164 NONAME ; void RadioFrequencyStrip::handleRightButton(void)
+	?initCurrentStationItem@RadioStationCarousel@@AAEXXZ @ 165 NONAME ; void RadioStationCarousel::initCurrentStationItem(void)
+	?qt_metacast@RadioStationCarousel@@UAEPAXPBD@Z @ 166 NONAME ; void * RadioStationCarousel::qt_metacast(char const *)
+	?clearList@RadioStationsView@@AAEXXZ @ 167 NONAME ; void RadioStationsView::clearList(void)
+	?openOviStore@RadioHistoryView@@AAEXXZ @ 168 NONAME ; void RadioHistoryView::openOviStore(void)
+	?showEvent@RadioFrequencyStrip@@EAEXPAVQShowEvent@@@Z @ 169 NONAME ; void RadioFrequencyStrip::showEvent(class QShowEvent *)
+	?tr@RadioWindow@@SA?AVQString@@PBD0H@Z @ 170 NONAME ; class QString RadioWindow::tr(char const *, char const *, int)
+	?seekRequested@RadioFrequencyStrip@@IAEXH@Z @ 171 NONAME ; void RadioFrequencyStrip::seekRequested(int)
+	?handleLongRightButton@RadioFrequencyStrip@@AAEXXZ @ 172 NONAME ; void RadioFrequencyStrip::handleLongRightButton(void)
+	?setFrequency@RadioFrequencyStrip@@QAEXIH@Z @ 173 NONAME ; void RadioFrequencyStrip::setFrequency(unsigned int, int)
+	?init@RadioHistoryView@@EAEXXZ @ 174 NONAME ; void RadioHistoryView::init(void)
+	?setFrequencyFromEngine@RadioMainView@@AAEXIH@Z @ 175 NONAME ; void RadioMainView::setFrequencyFromEngine(unsigned int, int)
+	?tr@RadioHistoryView@@SA?AVQString@@PBD0H@Z @ 176 NONAME ; class QString RadioHistoryView::tr(char const *, char const *, int)
+	?setFavoriteIcon@RadioStationsView@@QAEXABVHbIcon@@@Z @ 177 NONAME ; void RadioStationsView::setFavoriteIcon(class HbIcon const &)
+	??0RadioHistoryView@@QAE@XZ @ 178 NONAME ; RadioHistoryView::RadioHistoryView(void)
+	?metaObject@RadioStationCarousel@@UBEPBUQMetaObject@@XZ @ 179 NONAME ; struct QMetaObject const * RadioStationCarousel::metaObject(void) const
+	?effectFinished@RadioFadingLabel@@AAEXUEffectStatus@HbEffect@@@Z @ 180 NONAME ; void RadioFadingLabel::effectFinished(struct HbEffect::EffectStatus)
+	?updateOrientation@RadioWindow@@AAEXW4Orientation@Qt@@@Z @ 181 NONAME ; void RadioWindow::updateOrientation(enum Qt::Orientation)
+	?updateCurrentStation@RadioStationsView@@AAEXXZ @ 182 NONAME ; void RadioStationsView::updateCurrentStation(void)
+	?setOrientation@RadioHistoryView@@EAEXXZ @ 183 NONAME ; void RadioHistoryView::setOrientation(void)
+	?showButtons@RadioFrequencyStrip@@AAEXXZ @ 184 NONAME ; void RadioFrequencyStrip::showButtons(void)
+	?nonFavoriteIcon@RadioStationCarousel@@QBE?AVHbIcon@@XZ @ 185 NONAME ; class HbIcon RadioStationCarousel::nonFavoriteIcon(void) const
+	?scrollToFrequency@RadioFrequencyStrip@@AAEXIH@Z @ 186 NONAME ; void RadioFrequencyStrip::scrollToFrequency(unsigned int, int)
+	?uiEngine@RadioStationCarousel@@QAEPAVRadioUiEngine@@XZ @ 187 NONAME ; class RadioUiEngine * RadioStationCarousel::uiEngine(void)
+	?trUtf8@RadioFadingLabel@@SA?AVQString@@PBD0H@Z @ 188 NONAME ; class QString RadioFadingLabel::trUtf8(char const *, char const *, int)
+	?scrollPosChanged@RadioFrequencyStrip@@EAEXVQPointF@@@Z @ 189 NONAME ; void RadioFrequencyStrip::scrollPosChanged(class QPointF)
+	?deleteStation@RadioStationsView@@AAEXXZ @ 190 NONAME ; void RadioStationsView::deleteStation(void)
+	?activateMainView@RadioWindow@@QAEXXZ @ 191 NONAME ; void RadioWindow::activateMainView(void)
+	?rightButtonIcon@RadioFrequencyStrip@@QBE?AVHbIcon@@XZ @ 192 NONAME ; class HbIcon RadioFrequencyStrip::rightButtonIcon(void) const
+	?setScanningMode@RadioStationCarousel@@QAEX_N@Z @ 193 NONAME ; void RadioStationCarousel::setScanningMode(bool)
+	?setNonFavoriteIcon@RadioStationCarousel@@QAEXABVHbIcon@@@Z @ 194 NONAME ; void RadioStationCarousel::setNonFavoriteIcon(class HbIcon const &)
+	??1RadioFadingLabel@@UAE@XZ @ 195 NONAME ; RadioFadingLabel::~RadioFadingLabel(void)
+	?isInScanningMode@RadioStationCarousel@@QBE_NXZ @ 196 NONAME ; bool RadioStationCarousel::isInScanningMode(void) const
+	?tr@RadioHistoryView@@SA?AVQString@@PBD0@Z @ 197 NONAME ; class QString RadioHistoryView::tr(char const *, char const *)
+	?staticMetaObject@RadioBannerLabel@@2UQMetaObject@@B @ 198 NONAME ; struct QMetaObject const RadioBannerLabel::staticMetaObject
+	?checkIllegalPos@RadioFrequencyStrip@@AAEXXZ @ 199 NONAME ; void RadioFrequencyStrip::checkIllegalPos(void)
+	?setFrequency@RadioStationCarousel@@QAEXIH@Z @ 200 NONAME ; void RadioStationCarousel::setFrequency(unsigned int, int)
+	?getStaticMetaObject@RadioHistoryView@@SAABUQMetaObject@@XZ @ 201 NONAME ; struct QMetaObject const & RadioHistoryView::getStaticMetaObject(void)
+	?activateStationsView@RadioWindow@@QAEXXZ @ 202 NONAME ; void RadioWindow::activateStationsView(void)
+	?isAntennaAttached@RadioStationCarousel@@QBE_NXZ @ 203 NONAME ; bool RadioStationCarousel::isAntennaAttached(void) const
+	?metaObject@RadioHistoryView@@UBEPBUQMetaObject@@XZ @ 204 NONAME ; struct QMetaObject const * RadioHistoryView::metaObject(void) const
+	?tr@RadioStationCarousel@@SA?AVQString@@PBD0H@Z @ 205 NONAME ; class QString RadioStationCarousel::tr(char const *, char const *, int)
+	??_ERadioHistoryView@@UAE@I@Z @ 206 NONAME ; RadioHistoryView::~RadioHistoryView(unsigned int)
+	?updateAudioRoute@RadioMainView@@AAEX_N@Z @ 207 NONAME ; void RadioMainView::updateAudioRoute(bool)
+	?gestureEvent@RadioFrequencyStrip@@EAEXPAVQGestureEvent@@@Z @ 208 NONAME ; void RadioFrequencyStrip::gestureEvent(class QGestureEvent *)
+	?initView@RadioWindow@@AAEXXZ @ 209 NONAME ; void RadioWindow::initView(void)
+	?qt_metacall@RadioHistoryView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 210 NONAME ; int RadioHistoryView::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?trUtf8@RadioStationCarousel@@SA?AVQString@@PBD0H@Z @ 211 NONAME ; class QString RadioStationCarousel::trUtf8(char const *, char const *, int)
+	?nowPlayingIcon@RadioStationsView@@QBE?AVHbIcon@@XZ @ 212 NONAME ; class HbIcon RadioStationsView::nowPlayingIcon(void) const
+	?toggleFavorite@RadioStationsView@@AAEXXZ @ 213 NONAME ; void RadioStationsView::toggleFavorite(void)
+	?qt_metacast@RadioMainView@@UAEPAXPBD@Z @ 214 NONAME ; void * RadioMainView::qt_metacast(char const *)
+	??1RadioStationsView@@UAE@XZ @ 215 NONAME ; RadioStationsView::~RadioStationsView(void)
+	?handleLongLeftButton@RadioFrequencyStrip@@AAEXXZ @ 216 NONAME ; void RadioFrequencyStrip::handleLongLeftButton(void)
+	?init@RadioMainView@@EAEXXZ @ 217 NONAME ; void RadioMainView::init(void)
+	?showEvent@RadioStationsView@@EAEXPAVQShowEvent@@@Z @ 218 NONAME ; void RadioStationsView::showEvent(class QShowEvent *)
+	??1RadioMainView@@UAE@XZ @ 219 NONAME ; RadioMainView::~RadioMainView(void)
+	?hideButtons@RadioFrequencyStrip@@AAEXXZ @ 220 NONAME ; void RadioFrequencyStrip::hideButtons(void)
+	?emitFrequencyChanged@RadioFrequencyStrip@@AAEXI@Z @ 221 NONAME ; void RadioFrequencyStrip::emitFrequencyChanged(unsigned int)
+	?handleLeftButton@RadioFrequencyStrip@@AAEXXZ @ 222 NONAME ; void RadioFrequencyStrip::handleLeftButton(void)
+	??_ERadioFadingLabel@@UAE@I@Z @ 223 NONAME ; RadioFadingLabel::~RadioFadingLabel(unsigned int)
+	?trUtf8@RadioHistoryView@@SA?AVQString@@PBD0H@Z @ 224 NONAME ; class QString RadioHistoryView::trUtf8(char const *, char const *, int)
+	?init@RadioFrequencyStrip@@QAEXPAVRadioUiEngine@@@Z @ 225 NONAME ; void RadioFrequencyStrip::init(class RadioUiEngine *)
+	?init@RadioStationsView@@EAEXXZ @ 226 NONAME ; void RadioStationsView::init(void)
+	?updateVisibilities@RadioHistoryView@@AAEXXZ @ 227 NONAME ; void RadioHistoryView::updateVisibilities(void)
+	?updateControlVisibilities@RadioStationsView@@AAEXXZ @ 228 NONAME ; void RadioStationsView::updateControlVisibilities(void)
+	?init@RadioWindow@@QAEXXZ @ 229 NONAME ; void RadioWindow::init(void)
+	?listItemLongPressed@RadioStationsView@@AAEXPAVHbAbstractViewItem@@ABVQPointF@@@Z @ 230 NONAME ; void RadioStationsView::listItemLongPressed(class HbAbstractViewItem *, class QPointF const &)
+	?qt_metacall@RadioMainView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 231 NONAME ; int RadioMainView::qt_metacall(enum QMetaObject::Call, int, void * *)
+	??1RadioHistoryView@@UAE@XZ @ 232 NONAME ; RadioHistoryView::~RadioHistoryView(void)
+	?deckButtonPressed@RadioStationsView@@AAEXXZ @ 233 NONAME ; void RadioStationsView::deckButtonPressed(void)
+	?qt_metacast@RadioFrequencyStrip@@UAEPAXPBD@Z @ 234 NONAME ; void * RadioFrequencyStrip::qt_metacast(char const *)
+	??0RadioStationCarousel@@QAE@PAVRadioUiEngine@@@Z @ 235 NONAME ; RadioStationCarousel::RadioStationCarousel(class RadioUiEngine *)
+	?staticMetaObject@RadioWindow@@2UQMetaObject@@B @ 236 NONAME ; struct QMetaObject const RadioWindow::staticMetaObject
+	?staticMetaObject@RadioHistoryView@@2UQMetaObject@@B @ 237 NONAME ; struct QMetaObject const RadioHistoryView::staticMetaObject
+	?metaObject@RadioStationsView@@UBEPBUQMetaObject@@XZ @ 238 NONAME ; struct QMetaObject const * RadioStationsView::metaObject(void) const
+	?clearInfoText@RadioStationCarousel@@QAEXXZ @ 239 NONAME ; void RadioStationCarousel::clearInfoText(void)
+	?cleanRdsData@RadioStationCarousel@@QAEXXZ @ 240 NONAME ; void RadioStationCarousel::cleanRdsData(void)
+	?scanAnimationFinished@RadioStationCarousel@@IAEXXZ @ 241 NONAME ; void RadioStationCarousel::scanAnimationFinished(void)
+	?userAccepted@RadioMainView@@EAEXXZ @ 242 NONAME ; void RadioMainView::userAccepted(void)
+	?userAccepted@RadioStationsView@@EAEXXZ @ 243 NONAME ; void RadioStationsView::userAccepted(void)
+	?renameDone@RadioStationsView@@AAEXPAVHbAction@@@Z @ 244 NONAME ; void RadioStationsView::renameDone(class HbAction *)
+	?userAccepted@RadioHistoryView@@EAEXXZ @ 245 NONAME ; void RadioHistoryView::userAccepted(void)
 
--- a/radioapp/commoninc/radio_global.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/commoninc/radio_global.h	Tue May 18 11:27:22 2010 +0100
@@ -45,7 +45,7 @@
  */
 namespace RtPlus
 {
-    enum Tag { Title = 1, Artist = 4, Homepage = 39 };
+    enum Tag { Dummy = 0, Title = 1, Artist = 4, Homepage = 39 };
 }
 
 namespace Seeking
@@ -64,6 +64,17 @@
     };
 }
 
+namespace StationSkip
+{
+    enum Mode
+    {
+        Previous,
+        Next,
+        PreviousFavorite,
+        NextFavorite
+    };
+}
+
 namespace TuneReason
 {
     enum Reason
@@ -71,6 +82,8 @@
         Unspecified,
         FrequencyStrip,
         StationCarousel,
+        StationsList,
+        Skip,
         Seek,
         StationScanInitialization,
         StationScan,
--- a/radioapp/commoninc/radiologger.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/commoninc/radiologger.h	Tue May 18 11:27:22 2010 +0100
@@ -89,6 +89,9 @@
 #include <QtGlobal>
 #include <QDebug>
 
+// Log marker that is printed in the beginnig of each line
+#define LOGMARKER "FMRadio:"
+
 // 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
--- a/radioapp/commoninc/radioservicedef.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/commoninc/radioservicedef.h	Tue May 18 11:27:22 2010 +0100
@@ -18,8 +18,8 @@
 #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";
+static QString RADIO_CONTROL_SERVICE = "com.nokia.services.Radio.IRadioControl";
+static QString RADIO_MONITOR_SERVICE = "com.nokia.services.Radio.IRadioMonitor";
 
 const long KRadioPSUid = 0x101FF976;
 const unsigned long KRadioStartupKey = 0x00000014;
@@ -43,7 +43,6 @@
 {
     enum Type {
         FavoriteCount = 1,
-        AntennaConnected,
         RadioStatus,
         Frequency,
         Name,
@@ -57,9 +56,11 @@
 namespace RadioStatus
 {
     enum Status {
+        UnSpecified,
         Playing,
         Muted,
-        Seeking
+        Seeking,
+        NoAntenna
     };
 }
 
--- a/radioapp/eabi/radioenginewrapperu.def	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/eabi/radioenginewrapperu.def	Tue May 18 11:27:22 2010 +0100
@@ -6,48 +6,40 @@
 	_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
+	_ZN18RadioEngineWrapper11addObserverEP26RadioEngineWrapperObserver @ 8 NONAME
+	_ZN18RadioEngineWrapper12startSeekingEN7Seeking9DirectionEi @ 9 NONAME
+	_ZN18RadioEngineWrapper13cancelSeekingEv @ 10 NONAME
+	_ZN18RadioEngineWrapper13tuneFrequencyEji @ 11 NONAME
+	_ZN18RadioEngineWrapper13tuneWithDelayEji @ 12 NONAME
+	_ZN18RadioEngineWrapper14removeObserverEP26RadioEngineWrapperObserver @ 13 NONAME
+	_ZN18RadioEngineWrapper16isFrequencyValidEj @ 14 NONAME
+	_ZN18RadioEngineWrapper16toggleAudioRouteEv @ 15 NONAME
+	_ZN18RadioEngineWrapper19isEngineConstructedEv @ 16 NONAME
+	_ZN18RadioEngineWrapper7setMuteEb @ 17 NONAME
+	_ZN18RadioEngineWrapper8settingsEv @ 18 NONAME
+	_ZN18RadioEngineWrapper9setVolumeEi @ 19 NONAME
+	_ZN18RadioEngineWrapperC1ER21RadioStationHandlerIf @ 20 NONAME
+	_ZN18RadioEngineWrapperC2ER21RadioStationHandlerIf @ 21 NONAME
+	_ZN18RadioEngineWrapperD1Ev @ 22 NONAME
+	_ZN18RadioEngineWrapperD2Ev @ 23 NONAME
+	_ZN26RadioEngineWrapperObserver11muteChangedEb @ 24 NONAME
+	_ZN26RadioEngineWrapperObserver12skipPreviousEv @ 25 NONAME
+	_ZN26RadioEngineWrapperObserver13volumeChangedEi @ 26 NONAME
+	_ZN26RadioEngineWrapperObserver16tunedToFrequencyEji @ 27 NONAME
+	_ZN26RadioEngineWrapperObserver17audioRouteChangedEb @ 28 NONAME
+	_ZN26RadioEngineWrapperObserver18radioStatusChangedEb @ 29 NONAME
+	_ZN26RadioEngineWrapperObserver20antennaStatusChangedEb @ 30 NONAME
+	_ZN26RadioEngineWrapperObserver22rdsAvailabilityChangedEb @ 31 NONAME
+	_ZN26RadioEngineWrapperObserver8skipNextEv @ 32 NONAME
+	_ZNK18RadioEngineWrapper12maxFrequencyEv @ 33 NONAME
+	_ZNK18RadioEngineWrapper12minFrequencyEv @ 34 NONAME
+	_ZNK18RadioEngineWrapper16currentFrequencyEv @ 35 NONAME
+	_ZNK18RadioEngineWrapper17frequencyStepSizeEv @ 36 NONAME
+	_ZNK18RadioEngineWrapper17isAntennaAttachedEv @ 37 NONAME
+	_ZNK18RadioEngineWrapper18isUsingLoudspeakerEv @ 38 NONAME
+	_ZNK18RadioEngineWrapper6regionEv @ 39 NONAME
+	_ZNK18RadioEngineWrapper7isMutedEv @ 40 NONAME
+	_ZNK18RadioEngineWrapper9isRadioOnEv @ 41 NONAME
+	_ZTI26RadioEngineWrapperObserver @ 42 NONAME
+	_ZTV26RadioEngineWrapperObserver @ 43 NONAME
 
--- a/radioapp/eabi/radiouiengineu.def	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/eabi/radiouiengineu.def	Tue May 18 11:27:22 2010 +0100
@@ -33,49 +33,49 @@
 	_ZN12RadioStationD1Ev @ 32 NONAME
 	_ZN12RadioStationD2Ev @ 33 NONAME
 	_ZN12RadioStationaSERKS_ @ 34 NONAME
-	_ZN13RadioUiEngine10startRadioEv @ 35 NONAME
-	_ZN13RadioUiEngine10toggleMuteEv @ 36 NONAME
-	_ZN13RadioUiEngine10tunePresetEi @ 37 NONAME
-	_ZN13RadioUiEngine11muteChangedEb @ 38 NONAME
-	_ZN13RadioUiEngine11qt_metacallEN11QMetaObject4CallEiPPv @ 39 NONAME
-	_ZN13RadioUiEngine11qt_metacastEPKc @ 40 NONAME
-	_ZN13RadioUiEngine12historyModelEv @ 41 NONAME
-	_ZN13RadioUiEngine12skipPreviousEv @ 42 NONAME
-	_ZN13RadioUiEngine13genreToStringEiN11GenreTarget6TargetE @ 43 NONAME
-	_ZN13RadioUiEngine13tuneFrequencyEji @ 44 NONAME
-	_ZN13RadioUiEngine13tuneWithDelayEji @ 45 NONAME
-	_ZN13RadioUiEngine13volumeChangedEi @ 46 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
+	_ZN13RadioUiEngine10toggleMuteEv @ 35 NONAME
+	_ZN13RadioUiEngine10tunePresetEi @ 36 NONAME
+	_ZN13RadioUiEngine11muteChangedEb @ 37 NONAME
+	_ZN13RadioUiEngine11qt_metacallEN11QMetaObject4CallEiPPv @ 38 NONAME
+	_ZN13RadioUiEngine11qt_metacastEPKc @ 39 NONAME
+	_ZN13RadioUiEngine11seekStationEi @ 40 NONAME
+	_ZN13RadioUiEngine11skipStationEN11StationSkip4ModeEj @ 41 NONAME
+	_ZN13RadioUiEngine12historyModelEv @ 42 NONAME
+	_ZN13RadioUiEngine12stationModelEv @ 43 NONAME
+	_ZN13RadioUiEngine13carouselModelEv @ 44 NONAME
+	_ZN13RadioUiEngine13genreToStringEiN11GenreTarget6TargetE @ 45 NONAME
+	_ZN13RadioUiEngine13scannerEngineEv @ 46 NONAME
+	_ZN13RadioUiEngine13tuneFrequencyEji @ 47 NONAME
+	_ZN13RadioUiEngine13tuneWithDelayEji @ 48 NONAME
+	_ZN13RadioUiEngine13volumeChangedEi @ 49 NONAME
+	_ZN13RadioUiEngine14seekingStartedEi @ 50 NONAME
+	_ZN13RadioUiEngine15emitMuteChangedEb @ 51 NONAME
+	_ZN13RadioUiEngine15stationsInRangeEjj @ 52 NONAME
+	_ZN13RadioUiEngine16isFirstTimeStartEv @ 53 NONAME
+	_ZN13RadioUiEngine16isOfflineProfileEv @ 54 NONAME
+	_ZN13RadioUiEngine16staticMetaObjectE @ 55 NONAME DATA 16
+	_ZN13RadioUiEngine16toggleAudioRouteEv @ 56 NONAME
+	_ZN13RadioUiEngine16tunedToFrequencyEji @ 57 NONAME
+	_ZN13RadioUiEngine17addRecognizedSongERK7QStringS2_RK12RadioStation @ 58 NONAME
+	_ZN13RadioUiEngine17audioRouteChangedEb @ 59 NONAME
+	_ZN13RadioUiEngine17emitVolumeChangedEi @ 60 NONAME
+	_ZN13RadioUiEngine18emitSeekingStartedEN7Seeking9DirectionE @ 61 NONAME
+	_ZN13RadioUiEngine18lastTunedFrequencyEv @ 62 NONAME
+	_ZN13RadioUiEngine18radioStatusChangedEb @ 63 NONAME
+	_ZN13RadioUiEngine19getStaticMetaObjectEv @ 64 NONAME
+	_ZN13RadioUiEngine20antennaStatusChangedEb @ 65 NONAME
+	_ZN13RadioUiEngine20createNewFilterModelEP7QObject @ 66 NONAME
+	_ZN13RadioUiEngine20emitTunedToFrequencyEji @ 67 NONAME
+	_ZN13RadioUiEngine21emitAudioRouteChangedEb @ 68 NONAME
+	_ZN13RadioUiEngine21launchSongRecognitionEv @ 69 NONAME
+	_ZN13RadioUiEngine22emitRadioStatusChangedEb @ 70 NONAME
+	_ZN13RadioUiEngine22rdsAvailabilityChangedEb @ 71 NONAME
+	_ZN13RadioUiEngine24emitAntennaStatusChangedEb @ 72 NONAME
+	_ZN13RadioUiEngine26emitRdsAvailabilityChangedEb @ 73 NONAME
+	_ZN13RadioUiEngine29isSongRecognitionAppAvailableEv @ 74 NONAME
+	_ZN13RadioUiEngine4initEv @ 75 NONAME
+	_ZN13RadioUiEngine7setMuteEb @ 76 NONAME
+	_ZN13RadioUiEngine8settingsEv @ 77 NONAME
 	_ZN13RadioUiEngine9setVolumeEi @ 78 NONAME
 	_ZN13RadioUiEngineC1EP7QObject @ 79 NONAME
 	_ZN13RadioUiEngineC2EP7QObject @ 80 NONAME
@@ -83,38 +83,38 @@
 	_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
+	_ZN16RadioHistoryItem12setFrequencyEj @ 85 NONAME
+	_ZN16RadioHistoryItem14setCurrentTimeEv @ 86 NONAME
+	_ZN16RadioHistoryItem23decrementReferenceCountEv @ 87 NONAME
+	_ZN16RadioHistoryItem5resetEv @ 88 NONAME
+	_ZN16RadioHistoryItem6detachEv @ 89 NONAME
+	_ZN16RadioHistoryItem8setTitleERK7QString @ 90 NONAME
+	_ZN16RadioHistoryItem9setArtistERK7QString @ 91 NONAME
+	_ZN16RadioHistoryItemC1ERK7QStringS2_ @ 92 NONAME
+	_ZN16RadioHistoryItemC1ERKS_ @ 93 NONAME
+	_ZN16RadioHistoryItemC1Ev @ 94 NONAME
+	_ZN16RadioHistoryItemC2ERK7QStringS2_ @ 95 NONAME
+	_ZN16RadioHistoryItemC2ERKS_ @ 96 NONAME
+	_ZN16RadioHistoryItemC2Ev @ 97 NONAME
+	_ZN16RadioHistoryItemD0Ev @ 98 NONAME
+	_ZN16RadioHistoryItemD1Ev @ 99 NONAME
+	_ZN16RadioHistoryItemD2Ev @ 100 NONAME
+	_ZN16RadioHistoryItemaSERKS_ @ 101 NONAME
+	_ZN17RadioHistoryModel11qt_metacallEN11QMetaObject4CallEiPPv @ 102 NONAME
+	_ZN17RadioHistoryModel11qt_metacastEPKc @ 103 NONAME
+	_ZN17RadioHistoryModel13emitItemAddedEv @ 104 NONAME
+	_ZN17RadioHistoryModel13setShowTaggedEb @ 105 NONAME
+	_ZN17RadioHistoryModel13toggleTaggingERK16RadioHistoryItemi @ 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
+	_ZN17RadioHistoryModel17reportChangedDataEii @ 112 NONAME
+	_ZN17RadioHistoryModel18clearRadioTextPlusEv @ 113 NONAME
+	_ZN17RadioHistoryModel19getStaticMetaObjectEv @ 114 NONAME
+	_ZN17RadioHistoryModel7addItemERK7QStringS2_RK12RadioStation @ 115 NONAME
+	_ZN17RadioHistoryModel8setIconsERK5QIconS2_ @ 116 NONAME
 	_ZN17RadioHistoryModel9itemAddedEv @ 117 NONAME
 	_ZN17RadioHistoryModel9removeAllEv @ 118 NONAME
 	_ZN17RadioHistoryModelC1ER13RadioUiEngine @ 119 NONAME
@@ -124,139 +124,160 @@
 	_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
+	_ZN17RadioStationModel11findClosestEjN11StationSkip4ModeE @ 126 NONAME
+	_ZN17RadioStationModel11qt_metacallEN11QMetaObject4CallEiPPv @ 127 NONAME
+	_ZN17RadioStationModel11qt_metacastEPKc @ 128 NONAME
+	_ZN17RadioStationModel11saveStationER12RadioStation @ 129 NONAME
+	_ZN17RadioStationModel12setFavoritesERK5QListI11QModelIndexE @ 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
+	_ZN17RadioStationModel15emitDataChangedERK12RadioStation @ 136 NONAME
+	_ZN17RadioStationModel15favoriteChangedERK12RadioStation @ 137 NONAME
+	_ZN17RadioStationModel15findPresetIndexEi @ 138 NONAME
+	_ZN17RadioStationModel15findPresetIndexEiR12RadioStation @ 139 NONAME
+	_ZN17RadioStationModel15stationsInRangeEjj @ 140 NONAME
+	_ZN17RadioStationModel16dynamicPsChangedERK12RadioStation @ 141 NONAME
+	_ZN17RadioStationModel16staticMetaObjectE @ 142 NONAME DATA 16
+	_ZN17RadioStationModel16stationHandlerIfEv @ 143 NONAME
+	_ZN17RadioStationModel17emitChangeSignalsERK12RadioStation6QFlagsINS0_10ChangeFlagEE @ 144 NONAME
+	_ZN17RadioStationModel17radioTextReceivedERK12RadioStation @ 145 NONAME
+	_ZN17RadioStationModel17removeByFrequencyEj @ 146 NONAME
+	_ZN17RadioStationModel18findCurrentStationEj @ 147 NONAME
+	_ZN17RadioStationModel18stationDataChangedERK12RadioStation @ 148 NONAME
+	_ZN17RadioStationModel19dynamicPsCheckEndedEv @ 149 NONAME
+	_ZN17RadioStationModel19getStaticMetaObjectEv @ 150 NONAME
+	_ZN17RadioStationModel19removeByPresetIndexEi @ 151 NONAME
+	_ZN17RadioStationModel19setFavoriteByPresetEib @ 152 NONAME
+	_ZN17RadioStationModel21findUnusedPresetIndexEv @ 153 NONAME
+	_ZN17RadioStationModel22setFavoriteByFrequencyEjb @ 154 NONAME
+	_ZN17RadioStationModel23modelIndexFromFrequencyEj @ 155 NONAME
+	_ZN17RadioStationModel7setDataERK11QModelIndexRK8QVarianti @ 156 NONAME
+	_ZN17RadioStationModel8setIconsERK5QIconS2_ @ 157 NONAME
+	_ZN17RadioStationModel9removeAllENS_10RemoveModeE @ 158 NONAME
+	_ZN17RadioStationModel9setDetailE6QFlagsINS_10DetailFlagEE @ 159 NONAME
+	_ZN17RadioStationModelC1ER20RadioUiEnginePrivate @ 160 NONAME
+	_ZN17RadioStationModelC2ER20RadioUiEnginePrivate @ 161 NONAME
+	_ZN17RadioStationModelD0Ev @ 162 NONAME
+	_ZN17RadioStationModelD1Ev @ 163 NONAME
+	_ZN17RadioStationModelD2Ev @ 164 NONAME
+	_ZN18RadioCarouselModel11findClosestEjN11StationSkip4ModeE @ 165 NONAME
+	_ZN18RadioCarouselModel11qt_metacallEN11QMetaObject4CallEiPPv @ 166 NONAME
+	_ZN18RadioCarouselModel11qt_metacastEPKc @ 167 NONAME
+	_ZN18RadioCarouselModel15removeFrequencyERK11QModelIndexii @ 168 NONAME
+	_ZN18RadioCarouselModel16staticMetaObjectE @ 169 NONAME DATA 16
+	_ZN18RadioCarouselModel19getStaticMetaObjectEv @ 170 NONAME
+	_ZN18RadioCarouselModel23modelIndexFromFrequencyEj @ 171 NONAME
+	_ZN18RadioCarouselModelC1ER13RadioUiEngineR17RadioStationModel @ 172 NONAME
+	_ZN18RadioCarouselModelC2ER13RadioUiEngineR17RadioStationModel @ 173 NONAME
+	_ZN18RadioCarouselModelD0Ev @ 174 NONAME
+	_ZN18RadioCarouselModelD1Ev @ 175 NONAME
+	_ZN18RadioCarouselModelD2Ev @ 176 NONAME
+	_ZN18RadioScannerEngine11qt_metacallEN11QMetaObject4CallEiPPv @ 177 NONAME
+	_ZN18RadioScannerEngine11qt_metacastEPKc @ 178 NONAME
+	_ZN18RadioScannerEngine12stationFoundERK12RadioStation @ 179 NONAME
+	_ZN18RadioScannerEngine13startScanningEv @ 180 NONAME
+	_ZN18RadioScannerEngine16continueScanningEv @ 181 NONAME
+	_ZN18RadioScannerEngine16emitStationFoundERK12RadioStation @ 182 NONAME
+	_ZN18RadioScannerEngine16staticMetaObjectE @ 183 NONAME DATA 16
+	_ZN18RadioScannerEngine19addScannedFrequencyEj @ 184 NONAME
+	_ZN18RadioScannerEngine19getStaticMetaObjectEv @ 185 NONAME
+	_ZN18RadioScannerEngine6cancelEv @ 186 NONAME
+	_ZN18RadioScannerEngineC1ER20RadioUiEnginePrivate @ 187 NONAME
+	_ZN18RadioScannerEngineC2ER20RadioUiEnginePrivate @ 188 NONAME
+	_ZN18RadioScannerEngineD0Ev @ 189 NONAME
+	_ZN18RadioScannerEngineD1Ev @ 190 NONAME
+	_ZN18RadioScannerEngineD2Ev @ 191 NONAME
+	_ZN23RadioStationFilterModel13setTypeFilterE6QFlagsIN12RadioStation8TypeFlagEE @ 192 NONAME
+	_ZN23RadioStationFilterModel23modelIndexFromFrequencyEj @ 193 NONAME
+	_ZN23RadioStationFilterModel9setCyclicEb @ 194 NONAME
+	_ZN23RadioStationFilterModelC1ER13RadioUiEngineP7QObject @ 195 NONAME
+	_ZN23RadioStationFilterModelC2ER13RadioUiEngineP7QObject @ 196 NONAME
+	_ZN23RadioStationFilterModelD0Ev @ 197 NONAME
+	_ZN23RadioStationFilterModelD1Ev @ 198 NONAME
+	_ZN23RadioStationFilterModelD2Ev @ 199 NONAME
+	_ZNK12RadioStation10hasChangedEv @ 200 NONAME
+	_ZNK12RadioStation10isDetachedEv @ 201 NONAME
+	_ZNK12RadioStation10isFavoriteEv @ 202 NONAME
+	_ZNK12RadioStation11changeFlagsEv @ 203 NONAME
+	_ZNK12RadioStation11presetIndexEv @ 204 NONAME
+	_ZNK12RadioStation12frequencyMhzEv @ 205 NONAME
+	_ZNK12RadioStation13dynamicPsTextEv @ 206 NONAME
+	_ZNK12RadioStation14hasDataChangedE6QFlagsINS_10ChangeFlagEE @ 207 NONAME
+	_ZNK12RadioStation3urlEv @ 208 NONAME
+	_ZNK12RadioStation4nameEv @ 209 NONAME
+	_ZNK12RadioStation5genreEv @ 210 NONAME
+	_ZNK12RadioStation6hasRdsEv @ 211 NONAME
+	_ZNK12RadioStation6isTypeE6QFlagsINS_8TypeFlagEE @ 212 NONAME
+	_ZNK12RadioStation6psTypeEv @ 213 NONAME
+	_ZNK12RadioStation7isValidEv @ 214 NONAME
+	_ZNK12RadioStation9frequencyEv @ 215 NONAME
+	_ZNK12RadioStation9hasPiCodeEv @ 216 NONAME
+	_ZNK12RadioStation9isRenamedEv @ 217 NONAME
+	_ZNK12RadioStation9radioTextEv @ 218 NONAME
+	_ZNK13RadioUiEngine10isScanningEv @ 219 NONAME
+	_ZNK13RadioUiEngine10metaObjectEv @ 220 NONAME
+	_ZNK13RadioUiEngine12maxFrequencyEv @ 221 NONAME
+	_ZNK13RadioUiEngine12minFrequencyEv @ 222 NONAME
+	_ZNK13RadioUiEngine13isInitializedEv @ 223 NONAME
+	_ZNK13RadioUiEngine16currentFrequencyEv @ 224 NONAME
+	_ZNK13RadioUiEngine17frequencyStepSizeEv @ 225 NONAME
+	_ZNK13RadioUiEngine17isAntennaAttachedEv @ 226 NONAME
+	_ZNK13RadioUiEngine18isUsingLoudspeakerEv @ 227 NONAME
+	_ZNK13RadioUiEngine6regionEv @ 228 NONAME
+	_ZNK13RadioUiEngine7isMutedEv @ 229 NONAME
+	_ZNK13RadioUiEngine9isRadioOnEv @ 230 NONAME
+	_ZNK16RadioHistoryItem10isDetachedEv @ 231 NONAME
+	_ZNK16RadioHistoryItem17isRecognizedByRdsEv @ 232 NONAME
+	_ZNK16RadioHistoryItem2idEv @ 233 NONAME
+	_ZNK16RadioHistoryItem4timeEv @ 234 NONAME
+	_ZNK16RadioHistoryItem5titleEv @ 235 NONAME
+	_ZNK16RadioHistoryItem6artistEv @ 236 NONAME
+	_ZNK16RadioHistoryItem7isValidEv @ 237 NONAME
+	_ZNK16RadioHistoryItem7stationEv @ 238 NONAME
+	_ZNK16RadioHistoryItem8isTaggedEv @ 239 NONAME
+	_ZNK16RadioHistoryItem9frequencyEv @ 240 NONAME
+	_ZNK17RadioHistoryModel10metaObjectEv @ 241 NONAME
+	_ZNK17RadioHistoryModel11itemAtIndexERK11QModelIndex @ 242 NONAME
+	_ZNK17RadioHistoryModel23isCurrentSongRecognizedEv @ 243 NONAME
+	_ZNK17RadioHistoryModel4dataERK11QModelIndexi @ 244 NONAME
+	_ZNK17RadioHistoryModel8rowCountERK11QModelIndex @ 245 NONAME
+	_ZNK17RadioStationModel10metaObjectEv @ 246 NONAME
+	_ZNK17RadioStationModel14currentStationEv @ 247 NONAME
+	_ZNK17RadioStationModel4dataERK11QModelIndexi @ 248 NONAME
+	_ZNK17RadioStationModel4listEv @ 249 NONAME
+	_ZNK17RadioStationModel5flagsERK11QModelIndex @ 250 NONAME
+	_ZNK17RadioStationModel8rowCountERK11QModelIndex @ 251 NONAME
+	_ZNK17RadioStationModel9stationAtEi @ 252 NONAME
+	_ZNK18RadioCarouselModel10metaObjectEv @ 253 NONAME
+	_ZNK18RadioCarouselModel4dataERK11QModelIndexi @ 254 NONAME
+	_ZNK18RadioCarouselModel8rowCountERK11QModelIndex @ 255 NONAME
+	_ZNK18RadioScannerEngine10isScanningEv @ 256 NONAME
+	_ZNK18RadioScannerEngine10metaObjectEv @ 257 NONAME
+	_ZNK23RadioStationFilterModel16filterAcceptsRowEiRK11QModelIndex @ 258 NONAME
+	_ZNK23RadioStationFilterModel4dataERK11QModelIndexi @ 259 NONAME
+	_ZNK23RadioStationFilterModel5indexEiiRK11QModelIndex @ 260 NONAME
+	_ZNK23RadioStationFilterModel7isEqualERK11QModelIndexS2_ @ 261 NONAME
+	_ZNK23RadioStationFilterModel8rowCountERK11QModelIndex @ 262 NONAME
+	_ZNK23RadioStationFilterModel9hasLoopedERK11QModelIndex @ 263 NONAME
+	_ZNK23RadioStationFilterModel9realIndexERK11QModelIndex @ 264 NONAME
+	_ZTI12RadioStation @ 265 NONAME
+	_ZTI13RadioUiEngine @ 266 NONAME
+	_ZTI16RadioHistoryItem @ 267 NONAME
+	_ZTI17RadioHistoryModel @ 268 NONAME
+	_ZTI17RadioStationModel @ 269 NONAME
+	_ZTI18RadioCarouselModel @ 270 NONAME
+	_ZTI18RadioScannerEngine @ 271 NONAME
+	_ZTI23RadioStationFilterModel @ 272 NONAME
+	_ZTV12RadioStation @ 273 NONAME
+	_ZTV13RadioUiEngine @ 274 NONAME
+	_ZTV16RadioHistoryItem @ 275 NONAME
+	_ZTV17RadioHistoryModel @ 276 NONAME
+	_ZTV17RadioStationModel @ 277 NONAME
+	_ZTV18RadioCarouselModel @ 278 NONAME
+	_ZTV18RadioScannerEngine @ 279 NONAME
+	_ZTV23RadioStationFilterModel @ 280 NONAME
+	_ZN13RadioUiEngine14openMusicStoreERK16RadioHistoryItemNS_10MusicStoreE @ 281 NONAME
 
--- a/radioapp/eabi/radiowidgetsu.def	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/eabi/radiowidgetsu.def	Tue May 18 11:27:22 2010 +0100
@@ -1,223 +1,253 @@
 EXPORTS
-	_ZN15RadioMainWindow11dialogShownE14QSharedPointerI6HbViewE @ 1 NONAME
-	_ZN15RadioMainWindow11qt_metacallEN11QMetaObject4CallEiPPv @ 2 NONAME
-	_ZN15RadioMainWindow11qt_metacastEPKc @ 3 NONAME
-	_ZN15RadioMainWindow12activateViewER8QPointerI13RadioViewBaseERK7QString6QFlagsIN2Hb14ViewSwitchFlagEE @ 4 NONAME
-	_ZN15RadioMainWindow15showVolumeLevelEi @ 5 NONAME
-	_ZN15RadioMainWindow16showErrorMessageERK7QString @ 6 NONAME
-	_ZN15RadioMainWindow16staticMetaObjectE @ 7 NONAME DATA 16
-	_ZN15RadioMainWindow17updateOrientationEN2Qt11OrientationE @ 8 NONAME
-	_ZN15RadioMainWindow18activateTuningViewEv @ 9 NONAME
-	_ZN15RadioMainWindow18orientationSectionEv @ 10 NONAME
-	_ZN15RadioMainWindow19activateHistoryViewEv @ 11 NONAME
-	_ZN15RadioMainWindow19getStaticMetaObjectEv @ 12 NONAME
-	_ZN15RadioMainWindow19prepareToShowDialogEv @ 13 NONAME
-	_ZN15RadioMainWindow19updateAntennaStatusEb @ 14 NONAME
-	_ZN15RadioMainWindow20activateStationsViewEv @ 15 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
+	_ZN11RadioWindow11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME
+	_ZN11RadioWindow11qt_metacastEPKc @ 2 NONAME
+	_ZN11RadioWindow12activateViewER8QPointerI13RadioViewBaseERK7QString6QFlagsIN2Hb14ViewSwitchFlagEE @ 3 NONAME
+	_ZN11RadioWindow15showVolumeLevelEi @ 4 NONAME
+	_ZN11RadioWindow16activateMainViewEv @ 5 NONAME
+	_ZN11RadioWindow16showErrorMessageERK7QString @ 6 NONAME
+	_ZN11RadioWindow16staticMetaObjectE @ 7 NONAME DATA 16
+	_ZN11RadioWindow17updateOrientationEN2Qt11OrientationE @ 8 NONAME
+	_ZN11RadioWindow18orientationSectionEv @ 9 NONAME
+	_ZN11RadioWindow19activateHistoryViewEv @ 10 NONAME
+	_ZN11RadioWindow19getStaticMetaObjectEv @ 11 NONAME
+	_ZN11RadioWindow19updateAntennaStatusEb @ 12 NONAME
+	_ZN11RadioWindow20activateStationsViewEv @ 13 NONAME
+	_ZN11RadioWindow4initEv @ 14 NONAME
+	_ZN11RadioWindow8initViewEv @ 15 NONAME
+	_ZN11RadioWindow8uiEngineEv @ 16 NONAME
+	_ZN11RadioWindowC1EP7QWidget @ 17 NONAME
+	_ZN11RadioWindowC2EP7QWidget @ 18 NONAME
+	_ZN11RadioWindowD0Ev @ 19 NONAME
+	_ZN11RadioWindowD1Ev @ 20 NONAME
+	_ZN11RadioWindowD2Ev @ 21 NONAME
+	_ZN13RadioMainView11qt_metacallEN11QMetaObject4CallEiPPv @ 22 NONAME
+	_ZN13RadioMainView11qt_metacastEPKc @ 23 NONAME
+	_ZN13RadioMainView14seekingStartedEv @ 24 NONAME
+	_ZN13RadioMainView14setOrientationEv @ 25 NONAME
+	_ZN13RadioMainView14toggleScanningEv @ 26 NONAME
+	_ZN13RadioMainView15setScanningModeEb @ 27 NONAME
+	_ZN13RadioMainView16staticMetaObjectE @ 28 NONAME DATA 16
+	_ZN13RadioMainView16updateAudioRouteEb @ 29 NONAME
+	_ZN13RadioMainView19getStaticMetaObjectEv @ 30 NONAME
+	_ZN13RadioMainView22setFrequencyFromEngineEji @ 31 NONAME
+	_ZN13RadioMainView22setFrequencyFromWidgetEji @ 32 NONAME
+	_ZN13RadioMainView4initEv @ 33 NONAME
+	_ZN13RadioMainView4skipEi @ 34 NONAME
+	_ZN13RadioMainViewC1Ev @ 35 NONAME
+	_ZN13RadioMainViewC2Ev @ 36 NONAME
+	_ZN13RadioMainViewD0Ev @ 37 NONAME
+	_ZN13RadioMainViewD1Ev @ 38 NONAME
+	_ZN13RadioMainViewD2Ev @ 39 NONAME
+	_ZN16RadioBannerLabel11qt_metacallEN11QMetaObject4CallEiPPv @ 40 NONAME
+	_ZN16RadioBannerLabel11qt_metacastEPKc @ 41 NONAME
+	_ZN16RadioBannerLabel16staticMetaObjectE @ 42 NONAME DATA 16
+	_ZN16RadioBannerLabel19getStaticMetaObjectEv @ 43 NONAME
+	_ZN16RadioBannerLabel5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 44 NONAME
+	_ZN16RadioBannerLabelC1EP13QGraphicsItem @ 45 NONAME
+	_ZN16RadioBannerLabelC2EP13QGraphicsItem @ 46 NONAME
+	_ZN16RadioFadingLabel11qt_metacallEN11QMetaObject4CallEiPPv @ 47 NONAME
+	_ZN16RadioFadingLabel11qt_metacastEPKc @ 48 NONAME
+	_ZN16RadioFadingLabel11startEffectERK7QStringPKc @ 49 NONAME
+	_ZN16RadioFadingLabel14effectFinishedEN8HbEffect12EffectStatusE @ 50 NONAME
+	_ZN16RadioFadingLabel16setFadingEnabledEb @ 51 NONAME
+	_ZN16RadioFadingLabel16staticMetaObjectE @ 52 NONAME DATA 16
+	_ZN16RadioFadingLabel19getStaticMetaObjectEv @ 53 NONAME
+	_ZN16RadioFadingLabel20setTextWithoutFadingERK7QString @ 54 NONAME
+	_ZN16RadioFadingLabel7setTextERK7QString @ 55 NONAME
+	_ZN16RadioFadingLabel8trimHtmlERK7QString @ 56 NONAME
+	_ZN16RadioFadingLabelC1EP13QGraphicsItem @ 57 NONAME
+	_ZN16RadioFadingLabelC2EP13QGraphicsItem @ 58 NONAME
+	_ZN16RadioHistoryView10addOneSongEv @ 59 NONAME
+	_ZN16RadioHistoryView11qt_metacallEN11QMetaObject4CallEiPPv @ 60 NONAME
+	_ZN16RadioHistoryView11qt_metacastEPKc @ 61 NONAME
+	_ZN16RadioHistoryView12openOviStoreEv @ 62 NONAME
+	_ZN16RadioHistoryView13setTaggedIconERK6HbIcon @ 63 NONAME
+	_ZN16RadioHistoryView13toggleTaggingEv @ 64 NONAME
+	_ZN16RadioHistoryView14openOtherStoreEv @ 65 NONAME
+	_ZN16RadioHistoryView14setOrientationEv @ 66 NONAME
+	_ZN16RadioHistoryView15showContextMenuERK11QModelIndex @ 67 NONAME
+	_ZN16RadioHistoryView16setNonTaggedIconERK6HbIcon @ 68 NONAME
+	_ZN16RadioHistoryView16staticMetaObjectE @ 69 NONAME DATA 16
+	_ZN16RadioHistoryView17deckButtonPressedEv @ 70 NONAME
+	_ZN16RadioHistoryView18updateVisibilitiesEv @ 71 NONAME
+	_ZN16RadioHistoryView19getStaticMetaObjectEv @ 72 NONAME
+	_ZN16RadioHistoryView4initEv @ 73 NONAME
+	_ZN16RadioHistoryView8addSongsEv @ 74 NONAME
+	_ZN16RadioHistoryView9clearListEv @ 75 NONAME
+	_ZN16RadioHistoryViewC1Ev @ 76 NONAME
+	_ZN16RadioHistoryViewC2Ev @ 77 NONAME
+	_ZN16RadioHistoryViewD0Ev @ 78 NONAME
+	_ZN16RadioHistoryViewD1Ev @ 79 NONAME
+	_ZN16RadioHistoryViewD2Ev @ 80 NONAME
+	_ZN17RadioStationsView11qt_metacallEN11QMetaObject4CallEiPPv @ 81 NONAME
+	_ZN17RadioStationsView11qt_metacastEPKc @ 82 NONAME
+	_ZN17RadioStationsView12initListViewEv @ 83 NONAME
+	_ZN17RadioStationsView13deleteStationEv @ 84 NONAME
+	_ZN17RadioStationsView13startScanningEv @ 85 NONAME
+	_ZN17RadioStationsView14finishScanningEv @ 86 NONAME
+	_ZN17RadioStationsView14toggleFavoriteEv @ 87 NONAME
+	_ZN17RadioStationsView15listItemClickedERK11QModelIndex @ 88 NONAME
+	_ZN17RadioStationsView15setFavoriteIconERK6HbIcon @ 89 NONAME
+	_ZN17RadioStationsView16staticMetaObjectE @ 90 NONAME DATA 16
+	_ZN17RadioStationsView17deckButtonPressedEv @ 91 NONAME
+	_ZN17RadioStationsView17setNowPlayingIconERK6HbIcon @ 92 NONAME
+	_ZN17RadioStationsView19getStaticMetaObjectEv @ 93 NONAME
+	_ZN17RadioStationsView19listItemLongPressedEP18HbAbstractViewItemRK7QPointF @ 94 NONAME
+	_ZN17RadioStationsView19updateAntennaStatusEb @ 95 NONAME
+	_ZN17RadioStationsView20updateCurrentStationEv @ 96 NONAME
+	_ZN17RadioStationsView25updateControlVisibilitiesEv @ 97 NONAME
+	_ZN17RadioStationsView4initEv @ 98 NONAME
+	_ZN17RadioStationsView6renameEv @ 99 NONAME
+	_ZN17RadioStationsView9clearListEv @ 100 NONAME
+	_ZN17RadioStationsView9showEventEP10QShowEvent @ 101 NONAME
+	_ZN17RadioStationsViewC1Ev @ 102 NONAME
+	_ZN17RadioStationsViewC2Ev @ 103 NONAME
+	_ZN17RadioStationsViewD0Ev @ 104 NONAME
+	_ZN17RadioStationsViewD1Ev @ 105 NONAME
+	_ZN17RadioStationsViewD2Ev @ 106 NONAME
+	_ZN19RadioFrequencyStrip10drawPixmapEj5QListI12RadioStationEP18RadioFrequencyItem @ 107 NONAME
+	_ZN19RadioFrequencyStrip11changeEventEP6QEvent @ 108 NONAME
+	_ZN19RadioFrequencyStrip11hideButtonsEv @ 109 NONAME
+	_ZN19RadioFrequencyStrip11initButtonsEv @ 110 NONAME
+	_ZN19RadioFrequencyStrip11qt_metacallEN11QMetaObject4CallEiPPv @ 111 NONAME
+	_ZN19RadioFrequencyStrip11qt_metacastEPKc @ 112 NONAME
+	_ZN19RadioFrequencyStrip11resizeEventEP25QGraphicsSceneResizeEvent @ 113 NONAME
+	_ZN19RadioFrequencyStrip11showButtonsEv @ 114 NONAME
+	_ZN19RadioFrequencyStrip11updateItemsEv @ 115 NONAME
+	_ZN19RadioFrequencyStrip12gestureEventEP13QGestureEvent @ 116 NONAME
+	_ZN19RadioFrequencyStrip12initSelectorEv @ 117 NONAME
+	_ZN19RadioFrequencyStrip12setFrequencyEji @ 118 NONAME
+	_ZN19RadioFrequencyStrip13initPositionsEv @ 119 NONAME
+	_ZN19RadioFrequencyStrip13seekRequestedEi @ 120 NONAME
+	_ZN19RadioFrequencyStrip13skipRequestedEi @ 121 NONAME
+	_ZN19RadioFrequencyStrip13toggleButtonsEv @ 122 NONAME
+	_ZN19RadioFrequencyStrip13updateStationERK11QModelIndexii @ 123 NONAME
+	_ZN19RadioFrequencyStrip14initEmptyItemsEv @ 124 NONAME
+	_ZN19RadioFrequencyStrip14updateFavoriteERK12RadioStation @ 125 NONAME
+	_ZN19RadioFrequencyStrip15addFrequencyPosEijP18RadioFrequencyItem @ 126 NONAME
+	_ZN19RadioFrequencyStrip15checkIllegalPosEv @ 127 NONAME
+	_ZN19RadioFrequencyStrip15mousePressEventEP24QGraphicsSceneMouseEvent @ 128 NONAME
+	_ZN19RadioFrequencyStrip15setScanningModeEb @ 129 NONAME
+	_ZN19RadioFrequencyStrip15updateFavoritesEP18RadioFrequencyItem @ 130 NONAME
+	_ZN19RadioFrequencyStrip16frequencyChangedEji @ 131 NONAME
+	_ZN19RadioFrequencyStrip16handleLeftButtonEv @ 132 NONAME
+	_ZN19RadioFrequencyStrip16scrollPosChangedE7QPointF @ 133 NONAME
+	_ZN19RadioFrequencyStrip16staticMetaObjectE @ 134 NONAME DATA 16
+	_ZN19RadioFrequencyStrip17handleRightButtonEv @ 135 NONAME
+	_ZN19RadioFrequencyStrip17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 136 NONAME
+	_ZN19RadioFrequencyStrip17scrollToFrequencyEji @ 137 NONAME
+	_ZN19RadioFrequencyStrip17setLeftButtonIconERK6HbIcon @ 138 NONAME
+	_ZN19RadioFrequencyStrip18setRightButtonIconERK6HbIcon @ 139 NONAME
+	_ZN19RadioFrequencyStrip19createItemPrimitiveEP13QGraphicsItem @ 140 NONAME
+	_ZN19RadioFrequencyStrip19getStaticMetaObjectEv @ 141 NONAME
+	_ZN19RadioFrequencyStrip19updateItemPrimitiveEP13QGraphicsItemi @ 142 NONAME
+	_ZN19RadioFrequencyStrip20emitFrequencyChangedEj @ 143 NONAME
+	_ZN19RadioFrequencyStrip20handleLongLeftButtonEv @ 144 NONAME
+	_ZN19RadioFrequencyStrip21handleLongRightButtonEv @ 145 NONAME
+	_ZN19RadioFrequencyStrip4initEP13RadioUiEngine @ 146 NONAME
+	_ZN19RadioFrequencyStrip9initModelEv @ 147 NONAME
+	_ZN19RadioFrequencyStrip9showEventEP10QShowEvent @ 148 NONAME
+	_ZN19RadioFrequencyStripC1Ev @ 149 NONAME
+	_ZN19RadioFrequencyStripC2Ev @ 150 NONAME
+	_ZN20RadioStationCarousel10timerFiredEv @ 151 NONAME
+	_ZN20RadioStationCarousel11qt_metacallEN11QMetaObject4CallEiPPv @ 152 NONAME
+	_ZN20RadioStationCarousel11qt_metacastEPKc @ 153 NONAME
+	_ZN20RadioStationCarousel11setInfoTextEN16CarouselInfoText4TypeE @ 154 NONAME
+	_ZN20RadioStationCarousel12cleanRdsDataEv @ 155 NONAME
+	_ZN20RadioStationCarousel12gestureEventEP13QGestureEvent @ 156 NONAME
+	_ZN20RadioStationCarousel12setFrequencyEji @ 157 NONAME
+	_ZN20RadioStationCarousel13clearInfoTextEv @ 158 NONAME
+	_ZN20RadioStationCarousel13scrollToIndexERK11QModelIndex6QFlagsINS_10ScrollFlagEE @ 159 NONAME
+	_ZN20RadioStationCarousel14setItemVisibleEb @ 160 NONAME
+	_ZN20RadioStationCarousel15insertFrequencyERK11QModelIndexii @ 161 NONAME
+	_ZN20RadioStationCarousel15mousePressEventEP24QGraphicsSceneMouseEvent @ 162 NONAME
+	_ZN20RadioStationCarousel15openContextMenuEP18HbAbstractViewItemRK7QPointF @ 163 NONAME
+	_ZN20RadioStationCarousel15removeFrequencyERK11QModelIndexii @ 164 NONAME
+	_ZN20RadioStationCarousel15setFavoriteIconERK6HbIcon @ 165 NONAME
+	_ZN20RadioStationCarousel15setScanningModeEb @ 166 NONAME
+	_ZN20RadioStationCarousel15updateRadioTextERK12RadioStation @ 167 NONAME
+	_ZN20RadioStationCarousel16frequencyChangedEji @ 168 NONAME
+	_ZN20RadioStationCarousel16setCarouselModelEP18RadioCarouselModel @ 169 NONAME
+	_ZN20RadioStationCarousel16staticMetaObjectE @ 170 NONAME DATA 16
+	_ZN20RadioStationCarousel17animateNewStationERK12RadioStation @ 171 NONAME
+	_ZN20RadioStationCarousel17setAutoScrollTimeEi @ 172 NONAME
+	_ZN20RadioStationCarousel17updateCurrentItemEv @ 173 NONAME
+	_ZN20RadioStationCarousel17updateFrequenciesEv @ 174 NONAME
+	_ZN20RadioStationCarousel18currentStationItemEv @ 175 NONAME
+	_ZN20RadioStationCarousel18setNonFavoriteIconERK6HbIcon @ 176 NONAME
+	_ZN20RadioStationCarousel19getStaticMetaObjectEv @ 177 NONAME
+	_ZN20RadioStationCarousel19updateAntennaStatusEb @ 178 NONAME
+	_ZN20RadioStationCarousel19updateClampingStyleEv @ 179 NONAME
+	_ZN20RadioStationCarousel21scanAnimationFinishedEv @ 180 NONAME
+	_ZN20RadioStationCarousel22initCurrentStationItemEv @ 181 NONAME
+	_ZN20RadioStationCarousel24initToLastTunedFrequencyEv @ 182 NONAME
+	_ZN20RadioStationCarousel24prepareToRemoveFrequencyERK11QModelIndexii @ 183 NONAME
+	_ZN20RadioStationCarousel4initER13RadioUiLoaderP13RadioUiEngine @ 184 NONAME
+	_ZN20RadioStationCarousel4skipEN11StationSkip4ModeE @ 185 NONAME
+	_ZN20RadioStationCarousel6updateERK12RadioStation @ 186 NONAME
+	_ZN20RadioStationCarousel8uiEngineEv @ 187 NONAME
+	_ZN20RadioStationCarousel9updatePosEi @ 188 NONAME
+	_ZN20RadioStationCarouselC1EP13RadioUiEngine @ 189 NONAME
+	_ZN20RadioStationCarouselC2EP13RadioUiEngine @ 190 NONAME
+	_ZNK11RadioWindow10metaObjectEv @ 191 NONAME
+	_ZNK13RadioMainView10metaObjectEv @ 192 NONAME
+	_ZNK16RadioBannerLabel10metaObjectEv @ 193 NONAME
+	_ZNK16RadioFadingLabel10metaObjectEv @ 194 NONAME
+	_ZNK16RadioHistoryView10metaObjectEv @ 195 NONAME
+	_ZNK16RadioHistoryView10taggedIconEv @ 196 NONAME
+	_ZNK16RadioHistoryView12historyModelEv @ 197 NONAME
+	_ZNK16RadioHistoryView13nonTaggedIconEv @ 198 NONAME
+	_ZNK17RadioStationsView10metaObjectEv @ 199 NONAME
+	_ZNK17RadioStationsView12favoriteIconEv @ 200 NONAME
+	_ZNK17RadioStationsView14nowPlayingIconEv @ 201 NONAME
+	_ZNK19RadioFrequencyStrip10metaObjectEv @ 202 NONAME
+	_ZNK19RadioFrequencyStrip11selectorPosEv @ 203 NONAME
+	_ZNK19RadioFrequencyStrip14leftButtonIconEv @ 204 NONAME
+	_ZNK19RadioFrequencyStrip15rightButtonIconEv @ 205 NONAME
+	_ZNK19RadioFrequencyStrip9frequencyEv @ 206 NONAME
+	_ZNK20RadioStationCarousel10metaObjectEv @ 207 NONAME
+	_ZNK20RadioStationCarousel12favoriteIconEv @ 208 NONAME
+	_ZNK20RadioStationCarousel13carouselModelEv @ 209 NONAME
+	_ZNK20RadioStationCarousel14autoScrollTimeEv @ 210 NONAME
+	_ZNK20RadioStationCarousel15nonFavoriteIconEv @ 211 NONAME
+	_ZNK20RadioStationCarousel16isInScanningModeEv @ 212 NONAME
+	_ZNK20RadioStationCarousel17isAntennaAttachedEv @ 213 NONAME
+	_ZTI11RadioWindow @ 214 NONAME
+	_ZTI13RadioMainView @ 215 NONAME
+	_ZTI16RadioBannerLabel @ 216 NONAME
+	_ZTI16RadioFadingLabel @ 217 NONAME
+	_ZTI16RadioHistoryView @ 218 NONAME
+	_ZTI17RadioStationsView @ 219 NONAME
+	_ZTI19RadioFrequencyStrip @ 220 NONAME
+	_ZTI20RadioStationCarousel @ 221 NONAME
+	_ZTV11RadioWindow @ 222 NONAME
+	_ZTV13RadioMainView @ 223 NONAME
+	_ZTV16RadioBannerLabel @ 224 NONAME
+	_ZTV16RadioFadingLabel @ 225 NONAME
+	_ZTV16RadioHistoryView @ 226 NONAME
+	_ZTV17RadioStationsView @ 227 NONAME
+	_ZTV19RadioFrequencyStrip @ 228 NONAME
+	_ZTV20RadioStationCarousel @ 229 NONAME
+	_ZThn16_N13RadioMainViewD0Ev @ 230 NONAME
+	_ZThn16_N13RadioMainViewD1Ev @ 231 NONAME
+	_ZThn16_N16RadioHistoryViewD0Ev @ 232 NONAME
+	_ZThn16_N16RadioHistoryViewD1Ev @ 233 NONAME
+	_ZThn16_N17RadioStationsViewD0Ev @ 234 NONAME
+	_ZThn16_N17RadioStationsViewD1Ev @ 235 NONAME
+	_ZThn8_N11RadioWindowD0Ev @ 236 NONAME
+	_ZThn8_N11RadioWindowD1Ev @ 237 NONAME
+	_ZThn8_N13RadioMainViewD0Ev @ 238 NONAME
+	_ZThn8_N13RadioMainViewD1Ev @ 239 NONAME
+	_ZThn8_N16RadioBannerLabel5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 240 NONAME
+	_ZThn8_N16RadioHistoryViewD0Ev @ 241 NONAME
+	_ZThn8_N16RadioHistoryViewD1Ev @ 242 NONAME
+	_ZThn8_N17RadioStationsViewD0Ev @ 243 NONAME
+	_ZThn8_N17RadioStationsViewD1Ev @ 244 NONAME
+	_ZThn8_N19RadioFrequencyStrip15mousePressEventEP24QGraphicsSceneMouseEvent @ 245 NONAME
+	_ZThn8_N19RadioFrequencyStrip17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 246 NONAME
+	_ZThn8_N20RadioStationCarousel15mousePressEventEP24QGraphicsSceneMouseEvent @ 247 NONAME
+	_ZN13RadioMainView12userAcceptedEv @ 248 NONAME
+	_ZN16RadioHistoryView12userAcceptedEv @ 249 NONAME
+	_ZN17RadioStationsView10renameDoneEP8HbAction @ 250 NONAME
+	_ZN17RadioStationsView12userAcceptedEv @ 251 NONAME
 
--- a/radioapp/radioapplication/inc/radioapplication.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radioapplication/inc/radioapplication.h	Tue May 18 11:27:22 2010 +0100
@@ -25,12 +25,9 @@
 #include <QSharedPointer>
 
 // Forward declarations
-class RadioUiEngine;
-class RadioMainWindow;
+class RadioWindow;
 class RadioStationModel;
 
-typedef QSharedPointer<RadioMainWindow> RadioMainWindowPtr;
-
 #ifdef BUILD_WIN32
     class Win32Window;
 #endif // BUILD_WIN32
@@ -54,20 +51,14 @@
 private: // data
 
 #ifdef BUILD_WIN32
-    QScopedPointer<Win32Window> mWin32Window;
+    QScopedPointer<Win32Window>     mWin32Window;
 #endif // BUILD_WIN32
 
     /**
      * Application main window
      * Own
      */
-    RadioMainWindowPtr  mMainWindow;
-
-    /**
-     * Radio engine
-     * Own
-     */
-    RadioUiEngine*      mUiEngine;
+    QScopedPointer<RadioWindow> mMainWindow;
 
 };
 
--- a/radioapp/radioapplication/resources/fmradio.ts	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radioapplication/resources/fmradio.ts	Tue May 18 11:27:22 2010 +0100
@@ -722,16 +722,6 @@
     <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>
@@ -1184,6 +1174,16 @@
     <extra-loc-feature>ra</extra-loc-feature>
     <extra-loc-blank>False</extra-loc-blank>
 </message>
+<message numerus="no" id="txt_rad_list_fm_radio">
+    <comment>Text in a home screen widget information area. Displayed when no station is tuned.</comment>        
+    <source>FM Radio</source>
+    <translation variants="no">FM Radio</translation>
+    <extra-loc-layout_id>txt_rad_list_fm_radio</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_pop_music">
     <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
     <source>Pop Music</source>
@@ -1974,6 +1974,16 @@
     <extra-loc-feature>ra</extra-loc-feature>
     <extra-loc-blank>False</extra-loc-blank>
 </message>
+<message numerus="no" id="txt_rad_info_fm_radio">
+    <comment>Text displayed in main view station information area (in place of station name) during the FM radio startup when the station information is waited to be loaded on the screen.</comment>        
+    <source>FM Radio</source>
+    <translation variants="no">FM Radio</translation>
+    <extra-loc-layout_id>txt_rad_info_fm_radio</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_light_classical">
     <comment>Second row on the Stations list item (PTY=Program type information). </comment>        
     <source>Light classical</source>
@@ -2064,6 +2074,16 @@
     <extra-loc-feature>ra</extra-loc-feature>
     <extra-loc-blank>False</extra-loc-blank>
 </message>
+<message numerus="no" id="txt_rad_menu_search_from_other_store">
+    <comment>Item specific menu item. Allows the user to search the song/artist from some other music store than Ovi music store (usually some operator store). %1 can be any name, e.g. &quot;Vodafone music&quot;, &quot;Amazon&quot; etc.</comment>        
+    <source>Search from %1</source>
+    <translation variants="no">Search from %1</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_public">
     <comment>Main view Information area item. Displayed if PTY is available. Used only in US region.</comment>        
     <source>Public</source>
--- a/radioapp/radioapplication/src/main.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radioapplication/src/main.cpp	Tue May 18 11:27:22 2010 +0100
@@ -16,15 +16,18 @@
 */
 
 // System includes
-#include <QTranslator>
-#include <QLocale>
-#include <QFile>
+#include <HbTranslator>
 
 // User includes
 #include "radioapplication.h"
 #include "radiologger.h"
 
-static const QString TRANSLATIONS_PATH_FORMAT = "%1:/resource/qt/translations/";
+// Constants
+#ifdef BUILD_WIN32
+    const char* TRANSLATIONS_FOLDER = "";
+#else
+    const char* TRANSLATIONS_FOLDER = "/resource/qt/translations/";
+#endif // BUILD_WIN32
 
 /*!
  * Runs the application
@@ -35,23 +38,11 @@
 
     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" );
-    if ( !QFile::exists( path + localizedRadio ) ) {
-        path = QString( TRANSLATIONS_PATH_FORMAT ).arg( "Z" );
-    }
-#endif // BUILD_WIN32
-    
-    QTranslator translator;
-    translator.load( localizedRadio, path );
-   
     RadioApplication app( argc, argv );
-    app.installTranslator( &translator );
-    int returnValue = app.exec();
+
+    HbTranslator translator( TRANSLATIONS_FOLDER, "fmradio" ); // TODO: Rename exe to fmradio.exe to get rid of this
+
+    const int returnValue = app.exec();
 
     UNINSTALL_MESSAGE_HANDLER // Uninstalls the file tracer
 
--- a/radioapp/radioapplication/src/radioapplication.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radioapplication/src/radioapplication.cpp	Tue May 18 11:27:22 2010 +0100
@@ -17,10 +17,11 @@
 
 // System includes
 #include <QTimer>
+#include <HbDeviceMessageBox>
 
 // User includes
 #include "radioapplication.h"
-#include "radiomainwindow.h"
+#include "radiowindow.h"
 #include "radiouiengine.h"
 #include "radio_global.h"
 #include "radiologger.h"
@@ -43,8 +44,7 @@
  * Constructor
  */
 RadioApplication::RadioApplication( int &argc, char *argv[] ) :
-    HbApplication( argc, argv ),
-    mUiEngine( 0 )
+    HbApplication( argc, argv )
 {
     // Initializes the radio engine utils if UI logs are entered into the engine log
     INIT_COMBINED_LOGGER
@@ -52,13 +52,6 @@
     LOG_TIMESTAMP( "Start radio" );
     setApplicationName( hbTrId( "txt_rad_title_fm_radio" ) );
 
-    // MainWindow needs to be alive to be able to show the offline query dialog.
-    // The window is only constructed half-way at this point because we may need to shut down if
-    // offline usage is not allowed
-    mMainWindow = RadioMainWindowPtr( new RadioMainWindow() );
-
-    CREATE_WIN32_TEST_WINDOW
-
     QTimer::singleShot( 0, this, SLOT(init()) );
 }
 
@@ -78,24 +71,31 @@
  */
 void RadioApplication::init()
 {
-    if ( RadioUiEngine::isOfflineProfile() && !mMainWindow->isOfflineUsageAllowed() ) {
-            quit();
-            return;
-        }
+    bool okToStart = !RadioUiEngine::isOfflineProfile();
+
+    if ( !okToStart ) {
+        HbDeviceMessageBox box( hbTrId( "txt_rad_info_activate_radio_in_offline_mode" ), HbMessageBox::MessageTypeQuestion );
+        box.setTimeout( HbPopup::NoTimeout );
+        box.exec();
+        okToStart = box.isAcceptAction( box.triggeredAction() );
+    }
 
-        // Start the engine
-        mUiEngine = new RadioUiEngine( this );
-        if ( !mUiEngine->startRadio() ) {
-            //TODO: Get error message
-//            mMainWindow->showErrorMessage( TRANSLATE( KErrorEngineStartFailed ) );
-            quit();
-            return;
-        }
+    if ( okToStart ) {
+
+        // MainWindow needs to be alive to be able to show the offline query dialog.
+        // The window is only constructed half-way at this point because we may need to shut down if
+        // offline usage is not allowed
+        mMainWindow.reset( new RadioWindow() );
+
+        CREATE_WIN32_TEST_WINDOW
 
         INIT_WIN32_TEST_WINDOW
 
         // Construct the real views
-        mMainWindow->init( mUiEngine );
+        mMainWindow->init();
 
         mMainWindow->show();
+    } else {
+        quit();
+    }
 }
--- a/radioapp/radioapplication/src/testwindow_win32.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radioapplication/src/testwindow_win32.cpp	Tue May 18 11:27:22 2010 +0100
@@ -54,12 +54,13 @@
 };
 
 const Song KRecognizedSongs[] = {
-    { "Metallica", "One" },
-    { "Madonna", "Like a Virgin" },
-    { "Rammstein", "Der Meister" },
+    { "Red Hot Chili Peppers", "Under The Bridge" },
+    { "Queens Of The Stone Age", "No One Knows" },
+    { "The Presidents of the United States of America", "Dune Buggy" },
     { "System of a Down", "Aerials" },
-    { "Buckethead", "Jordan" },
-    { "Faith No More", "Epic" }
+    { "The White Stripes", "Seven Nation Army" },
+    { "Alice In Chains", "When The Sun Rose Again" },
+    { "Bullet For My Valentine", "Tears Don't Fall" }
 };
 const int KSongsCount = sizeof( KRecognizedSongs ) / sizeof( KRecognizedSongs[0] );
 
--- a/radioapp/radioenginewrapper/inc/radioenginewrapper.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radioenginewrapper/inc/radioenginewrapper.h	Tue May 18 11:27:22 2010 +0100
@@ -26,7 +26,7 @@
 
 // Forward declarations
 class RadioEngineWrapperPrivate;
-class RadioSettings;
+class RadioSettingsIf;
 class RadioStationHandlerIf;
 class RadioEngineWrapperObserver;
 
@@ -55,7 +55,7 @@
     /**
      * Getters for things owned by the engine
      */
-    RadioSettings& settings();
+    RadioSettingsIf& settings();
 
     /**
      * Getters for region and other region dependent settings
@@ -85,7 +85,7 @@
      * Audio update command functions for the engine
      */
     void setVolume( int volume );
-    void toggleMute();
+    void setMute( bool muted );
     void toggleAudioRoute();
 
     void startSeeking( Seeking::Direction direction, const int reason = TuneReason::Unspecified );
--- a/radioapp/radioenginewrapper/inc/radioenginewrapper_p.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radioenginewrapper/inc/radioenginewrapper_p.h	Tue May 18 11:27:22 2010 +0100
@@ -31,6 +31,7 @@
 class CRadioEngineHandler;
 class RadioControlEventListener;
 class RadioRdsListener;
+class RadioSettingsIf;
 class RadioSettings;
 class RadioStationHandlerIf;
 class RadioEngineWrapperObserver;
@@ -68,7 +69,7 @@
     /**
      * Returns the radio settings
      */
-    RadioSettings& settings();
+    RadioSettingsIf& settings();
 
     /**
     * Getter for CRadioEngineHandler instance.
--- a/radioapp/radioenginewrapper/inc/radioenginewrapper_win32_p.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radioenginewrapper/inc/radioenginewrapper_win32_p.h	Tue May 18 11:27:22 2010 +0100
@@ -29,6 +29,7 @@
 class RadioControlEventListener;
 class RadioRdsListener;
 class RadioSettings;
+class RadioSettingsIf;
 class RadioFrequencyScanningHandler;
 class RadioStationHandlerIf;
 class RadioEngineWrapperObserver;
@@ -70,7 +71,7 @@
     /**
      * Returns the radio settings
      */
-    RadioSettings& settings();
+    RadioSettingsIf& settings();
 
     /**
      * Functions called from slots to tune to given frequency or preset
--- a/radioapp/radioenginewrapper/inc/radiosettings.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radioenginewrapper/inc/radiosettings.h	Tue May 18 11:27:22 2010 +0100
@@ -18,14 +18,17 @@
 #ifndef RADIOSETTINGS_H_
 #define RADIOSETTINGS_H_
 
+// System includes
+#include <QtGlobal>
+
 // User includes
-#include "radiowrapperexport.h"
+#include "radiosettingsif.h"
 
 // Forward declarations
 class RadioSettingsPrivate;
 
 // Class declaration
-class WRAPPER_DLL_EXPORT RadioSettings
+class RadioSettings : public RadioSettingsIf
     {
     Q_DECLARE_PRIVATE_D( d_ptr, RadioSettings )
     Q_DISABLE_COPY( RadioSettings )
@@ -34,20 +37,19 @@
 
 public:
 
-    ~RadioSettings();
+    virtual ~RadioSettings();
+
+private:
 
-    // First time start
+    RadioSettings();
+
+// from base class RadioSettingsIf
+
     bool isFirstTimeStart();
-
-    // Favorites
     bool showFavorites() const;
     void setShowFavorites( bool showFavorites );
     bool toggleShowFavorites();
 
-private:
-
-    explicit RadioSettings();
-
 private: // data
 
     /**
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radioenginewrapper/inc/radiosettingsif.h	Tue May 18 11:27:22 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* 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 RADIOSETTINGSIF_H_
+#define RADIOSETTINGSIF_H_
+
+// Class declaration
+class RadioSettingsIf
+    {
+public:
+
+    // First time start
+    virtual bool isFirstTimeStart() = 0;
+
+    // Favorites
+    virtual bool showFavorites() const = 0;
+    virtual void setShowFavorites( bool showFavorites ) = 0;
+    virtual bool toggleShowFavorites() = 0;
+
+    };
+
+#endif // RADIOSETTINGSIF_H_
--- a/radioapp/radioenginewrapper/inc/radiostationhandlerif.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radioenginewrapper/inc/radiostationhandlerif.h	Tue May 18 11:27:22 2010 +0100
@@ -41,8 +41,6 @@
 
     virtual void addScannedFrequency( uint frequency ) = 0;
 
-    virtual void removeLocalStations() = 0;
-
     virtual void setCurrentPsName( uint frequency, const QString& name ) = 0;
     virtual void setCurrentRadioText( uint frequency, const QString& radioText ) = 0;
     virtual void setCurrentRadioTextPlus( uint frequency, int rtClass, const QString& rtItem ) = 0;
--- a/radioapp/radioenginewrapper/radioenginewrapper.pro	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radioenginewrapper/radioenginewrapper.pro	Tue May 18 11:27:22 2010 +0100
@@ -31,6 +31,7 @@
 HEADERS     += radio_global.h
 HEADERS     += radiologger.h
 HEADERS     += radioenginewrapper.h
+HEADERS     += radiosettingsif.h
 HEADERS     += radiosettings.h
 HEADERS     += radiostationhandlerif.h
 HEADERS     += radioenginewrapperobserver.h
--- a/radioapp/radioenginewrapper/src/radioenginewrapper.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radioenginewrapper/src/radioenginewrapper.cpp	Tue May 18 11:27:22 2010 +0100
@@ -68,7 +68,7 @@
 /*!
  * Returns the settings handler owned by the engine
  */
-RadioSettings& RadioEngineWrapper::settings()
+RadioSettingsIf& RadioEngineWrapper::settings()
 {
     Q_D( RadioEngineWrapper );
     return d->settings();
@@ -194,10 +194,10 @@
 /*!
  *
  */
-void RadioEngineWrapper::toggleMute()
+void RadioEngineWrapper::setMute( bool muted )
 {
     Q_D( RadioEngineWrapper );
-    d->mEngineHandler->SetMuted( !d->mEngineHandler->IsMuted() );
+    d->mEngineHandler->SetMuted( muted );
 }
 
 /*!
--- a/radioapp/radioenginewrapper/src/radioenginewrapper_p.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radioenginewrapper/src/radioenginewrapper_p.cpp	Tue May 18 11:27:22 2010 +0100
@@ -97,7 +97,7 @@
 /*!
  * Returns the settings handler owned by the engine
  */
-RadioSettings& RadioEngineWrapperPrivate::settings()
+RadioSettingsIf& RadioEngineWrapperPrivate::settings()
 {
     if ( !mSettings ) {
         mSettings.reset( new RadioSettings() );
@@ -218,24 +218,17 @@
  */
 void RadioEngineWrapperPrivate::AudioRoutingEventL( TInt aAudioDestination, TInt aError )
 {
-    //TODO: Check how this event differs from AudioRoutingChangedL
     Q_UNUSED( aAudioDestination )
     Q_UNUSED( aError )
-//    Q_Q( RadioEngineWrapper );
-//    q->audioRouteChanged( aAudioDestination == RadioEngine::ERadioSpeaker );
 }
 
 /*!
  * \reimp
  */
-void RadioEngineWrapperPrivate::SeekingEventL( TInt aSeekingState, TInt DEBUGVAR( aError ) )
+void RadioEngineWrapperPrivate::SeekingEventL( TInt aSeekingState, TInt aError )
 {
-    Q_UNUSED( aSeekingState )
-//    LOG_FORMAT( "RadioEngineWrapperPrivate::SeekingEventL, aSeekingState: %d, Error: %d", aSeekingState, aError );
-//    if ( aSeekingState != RadioEngine::ERadioNotSeeking ) {
-//        // We only set the flag here. It is reset in the FrequencyEventL
-//        mIsSeeking = true;
-//    }
+    Q_UNUSED( aSeekingState );
+    Q_UNUSED( aError );
 }
 
 /*!
--- a/radioapp/radioenginewrapper/src/radioenginewrapper_win32.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radioenginewrapper/src/radioenginewrapper_win32.cpp	Tue May 18 11:27:22 2010 +0100
@@ -68,7 +68,7 @@
 /*!
  * Returns the settings handler owned by the engine
  */
-RadioSettings& RadioEngineWrapper::settings()
+RadioSettingsIf& RadioEngineWrapper::settings()
 {
     Q_D( RadioEngineWrapper );
     return d->settings();
@@ -192,7 +192,7 @@
 /*!
  *
  */
-void RadioEngineWrapper::toggleMute()
+void RadioEngineWrapper::setMute( bool muted )
 {
 }
 
--- a/radioapp/radioenginewrapper/src/radioenginewrapper_win32_p.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radioenginewrapper/src/radioenginewrapper_win32_p.cpp	Tue May 18 11:27:22 2010 +0100
@@ -124,7 +124,7 @@
 /*!
  * Returns the settings handler owned by the engine
  */
-RadioSettings& RadioEngineWrapperPrivate::settings()
+RadioSettingsIf& RadioEngineWrapperPrivate::settings()
 {
     if ( !mSettings ) {
         mSettings.reset( new RadioSettings() );
--- a/radioapp/radioenginewrapper/src/radiosettings.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radioenginewrapper/src/radiosettings.cpp	Tue May 18 11:27:22 2010 +0100
@@ -49,7 +49,7 @@
 }
 
 /*!
- *
+ * \reimp
  */
 bool RadioSettings::isFirstTimeStart()
 {
@@ -58,7 +58,7 @@
 }
 
 /*!
- *
+ * \reimp
  */
 bool RadioSettings::showFavorites() const
 {
@@ -67,7 +67,7 @@
 }
 
 /*!
- *
+ * \reimp
  */
 void RadioSettings::setShowFavorites( bool showFavorites )
 {
@@ -78,7 +78,7 @@
 }
 
 /*!
- *
+ * \reimp
  */
 bool RadioSettings::toggleShowFavorites()
 {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiouiengine/inc/radiocarouselmodel.h	Tue May 18 11:27:22 2010 +0100
@@ -0,0 +1,81 @@
+/*
+* 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 RADIOCAROUSELMODEL_H
+#define RADIOCAROUSELMODEL_H
+
+// System includes
+#include <QAbstractListModel>
+
+// User includes
+#include "radiouiengineexport.h"
+#include "radio_global.h"
+
+// Forward declarations
+class RadioCarouselModelPrivate;
+class RadioUiEngine;
+class RadioStation;
+class RadioStationModel;
+
+class UI_ENGINE_DLL_EXPORT RadioCarouselModel : public QAbstractListModel
+{
+    Q_OBJECT
+    Q_DECLARE_PRIVATE_D( d_ptr, RadioCarouselModel )
+    Q_DISABLE_COPY( RadioCarouselModel )
+
+    friend class RadioUiEngine;
+    friend class RadioStationModelPrivate;
+    
+public:
+
+    ~RadioCarouselModel();
+
+// from base class QAbstractListModel
+
+    int rowCount( const QModelIndex& parent = QModelIndex() ) const;
+    QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const;
+
+// New functions
+
+    /*!
+     * Finds the closest station from the given frequency
+     */
+    RadioStation findClosest( const uint frequency, StationSkip::Mode mode );
+
+    /*!
+     * Returns the model index corresponding to the given frequency
+     */
+    QModelIndex modelIndexFromFrequency( uint frequency );
+
+private slots:
+
+    void removeFrequency( const QModelIndex& parent, int first, int last );
+
+private:
+
+    explicit RadioCarouselModel( RadioUiEngine& uiEngine, RadioStationModel& stationModel );
+
+private: // data
+
+    /**
+     * Unmodifiable pointer to the private implementation
+     */
+    RadioCarouselModelPrivate* const d_ptr;
+
+};
+
+#endif // RADIOCAROUSELMODEL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiouiengine/inc/radiocarouselmodel_p.h	Tue May 18 11:27:22 2010 +0100
@@ -0,0 +1,55 @@
+/*
+* 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 RADIOCAROUSELMODEL_P_H
+#define RADIOCAROUSELMODEL_P_H
+
+// System includes
+
+// Forward declarations
+class RadioCarouselModel;
+class RadioUiEngine;
+class RadioStationModel;
+
+class RadioCarouselModelPrivate
+{
+public:
+
+    explicit RadioCarouselModelPrivate( RadioCarouselModel* model,
+                                        RadioUiEngine& uiEngine,
+                                        RadioStationModel& stationModel );
+
+    ~RadioCarouselModelPrivate();
+
+public: // data
+
+    /**
+     * Pointer to the public class
+     * Not own.
+     */
+    RadioCarouselModel*          q_ptr;
+
+    /**
+     * Reference to the ui engine
+     */
+    RadioUiEngine&              mUiEngine;
+
+    RadioStationModel&          mStationModel;
+
+};
+
+#endif // RADIOCAROUSELMODEL_P_H
--- a/radioapp/radiouiengine/inc/radiocontrolservice.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/inc/radiocontrolservice.h	Tue May 18 11:27:22 2010 +0100
@@ -38,7 +38,7 @@
 public:
 
     RadioControlService( RadioUiEngine& engine );
-    ~RadioControlService();
+    virtual ~RadioControlService();
 
 
 public slots:
--- a/radioapp/radiouiengine/inc/radiohistoryitem.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/inc/radiohistoryitem.h	Tue May 18 11:27:22 2010 +0100
@@ -47,6 +47,11 @@
 
     RadioHistoryItem& operator=( const RadioHistoryItem& other );
 
+    bool isValid() const;
+    void reset();
+
+    int id() const;
+
     QString artist() const;
     void setArtist( const QString& artist );
 
@@ -62,11 +67,9 @@
     QString time() const;
     void setCurrentTime();
 
-    bool isFavorite() const;
-    void setFavorite();
+    bool isTagged() const;
 
-    void increasePlayCount();
-    int playCount() const;
+    bool isRecognizedByRds() const;
 
 private:
 
--- a/radioapp/radiouiengine/inc/radiohistoryitem_p.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/inc/radiohistoryitem_p.h	Tue May 18 11:27:22 2010 +0100
@@ -24,6 +24,25 @@
 
 // User includes
 
+// Forward declarations
+class QSqlRecord;
+
+// Constants
+namespace RadioHistoryValue
+{
+    enum Name
+    {
+        Id,
+        Artist,
+        Title,
+        Station,
+        Frequency,
+        Tagged,
+        FromRds,
+        Time
+    };
+}
+
 class RadioHistoryItemPrivate
 {
 public:
@@ -33,6 +52,8 @@
 
     void init( const QString& artist, const QString& title );
 
+    void initFromRecord( const QSqlRecord& record );
+
 public: // data
 
     /**
@@ -42,6 +63,8 @@
      */
     QAtomicInt      ref;
 
+    int             mId;
+
     QString         mArtist;
 
     QString         mTitle;
@@ -52,9 +75,9 @@
 
     uint            mFrequency;
 
-    int             mPlayCount;
+    bool            mTagged;
 
-    bool            mFavorite;
+    bool            mFromRds;
 
 };
 
--- a/radioapp/radiouiengine/inc/radiohistorymodel.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/inc/radiohistorymodel.h	Tue May 18 11:27:22 2010 +0100
@@ -29,6 +29,8 @@
 class RadioHistoryModelPrivate;
 class RadioUiEngine;
 class RadioStation;
+class QIcon;
+class RadioHistoryItem;
 
 class UI_ENGINE_DLL_EXPORT RadioHistoryModel : public QAbstractListModel
 {
@@ -37,11 +39,15 @@
     Q_DISABLE_COPY( RadioHistoryModel )
 
     friend class RadioUiEngine;
+    friend class RadioUiEnginePrivate;
     friend class RadioStationModelPrivate;
-    friend class TestRadioUiEngine;
-    
+
+    friend class RadioHistoryView;  // TEMPORARY TEST CODE, REMOVE
+
 public:
 
+    ~RadioHistoryModel();
+
     enum HistoryRole
     {
         HistoryItemRole = Qt::UserRole + 100,
@@ -50,15 +56,22 @@
 
 // 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
 
+    /*!
+     * Sets the icons to be used in the list
+     */
+    void setIcons( const QIcon& nonTaggedIcon, const QIcon& taggedIcon );
+
     bool isCurrentSongRecognized() const;
     void setShowDetails( bool showDetails );
+    void setShowTagged( bool showTagged );
+    void toggleTagging( const RadioHistoryItem& item, const int row );
+
+    RadioHistoryItem itemAtIndex( const QModelIndex& index ) const;
 
 signals:
 
@@ -68,23 +81,20 @@
 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 reportChangedData( int start, int end = -1 );
 
-    void updateItem( int index, const RadioHistoryItem& item, bool prepend = false );
+    void emitItemAdded();
 
 private: // data
 
--- a/radioapp/radiouiengine/inc/radiohistorymodel_p.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/inc/radiohistorymodel_p.h	Tue May 18 11:27:22 2010 +0100
@@ -21,11 +21,21 @@
 // System includes
 #include <QList>
 #include <QString>
+#include <QScopedPointer>
+#include <QIcon>
+#include <QSqlQuery>
+
+// User includes
+#include "radiohistoryitem.h"
 
 // Forward declarations
 class RadioHistoryModel;
 class RadioUiEngine;
 class RadioHistoryItem;
+class QSqlDatabase;
+class RadioStation;
+class QStringList;
+class QSqlQueryModel;
 
 class RadioHistoryModelPrivate
 {
@@ -35,29 +45,64 @@
 
     ~RadioHistoryModelPrivate();
 
+    bool connectToDatabase();
+
+    void addItem( const QString& artist, const QString& title, const RadioStation& station, bool fromRds = true );
+
+    int rowCount() const;
+    QVariant data( const int row, const int role ) const;
+
+    void removeAll();
+
+    enum ViewMode{ ShowAll, ShowTagged };
+    void setViewMode( ViewMode mode );
+
+    void toggleTagging( const RadioHistoryItem& item, const int row );
+
+    RadioHistoryItem itemAtIndex( const QModelIndex& index ) const;
+
+private:
+
+    void refreshModel();
+    QSqlQuery beginTransaction();
+    enum Operation{ NoOp, InsertRows, RemoveRows, ChangeData };
+    void commitTransaction( QSqlQuery& query, Operation operation, int start, int end = -1 );
+
 public: // data
 
     /**
      * Pointer to the public class
      * Not own.
      */
-    RadioHistoryModel*          q_ptr;
+    RadioHistoryModel*              q_ptr;
 
     /**
      * Reference to the ui engine
      */
-    RadioUiEngine&              mUiEngine;
+    RadioUiEngine&                  mUiEngine;
+
+    QScopedPointer<QSqlDatabase>    mDatabase;
+
+    QScopedPointer<QSqlQueryModel>  mQueryModel;
+
+    QString                         mRtItemHolder;
+    int                             mRtItemClass;
+
+    bool                            mTopItemIsPlaying;
+
+    bool                            mShowDetails;
 
     /**
-     * List of history items
+     * Non Tagged icon
      */
-    QList<RadioHistoryItem>     mItems;
+    QIcon                           mNonTaggedIcon;
 
-    QString                     mRtItemHolder;
+    /**
+     * Tagged icon
+     */
+    QIcon                           mTaggedIcon;
 
-    bool                        mTopItemIsPlaying;
-
-    bool                        mShowDetails;
+    ViewMode                        mViewMode;
 
 };
 
--- a/radioapp/radiouiengine/inc/radiomonitorservice.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/inc/radiomonitorservice.h	Tue May 18 11:27:22 2010 +0100
@@ -23,44 +23,56 @@
 
 // User includes
 #include "radioservicedef.h"
+#include "radioenginewrapperobserver.h"
 
 // Forward declarations
-class RadioUiEngine;
+class RadioUiEnginePrivate;
+class RadioStation;
 
 class RadioMonitorService : public XQServiceProvider
+                          , public RadioEngineWrapperObserver
 {
     Q_OBJECT
 
 public:
 
-    RadioMonitorService( RadioUiEngine& engine );
+    RadioMonitorService( RadioUiEnginePrivate& 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 init();
+
     void notifySong( const QString& song );
 
 public slots:
 
-    void requestNotifications();
-    void requestAllData();
+    void requestNotifications();    // Slot called by Qt Highway
+    void requestAllData();          // Slot called by Qt Highway
+
+private slots:
+
+    void notifyRadioStatus();
+    void notifyFavoriteCount();
+    void notifyStationChange( const RadioStation& station );
 
 private:
     
+// from base class RadioEngineWrapperObserver
+
+    void tunedToFrequency( uint frequency, int reason );
+
+// New functions
+
+    RadioStatus::Status determineRadioStatus() const;
     void notify( const QVariant& notification );
     void notifyList( const QVariantList& list );
     
 private: // data
 
-    RadioUiEngine&  mUiEngine;
+    RadioUiEnginePrivate&   mUiEngine;
+
+    QList<int>              mRequestIndexes;
     
-    QList<int>      mRequestIndexes;
+    RadioStatus::Status     mRadioStatus;
 
 };
 
--- a/radioapp/radiouiengine/inc/radiomonitorservice_win32.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/inc/radiomonitorservice_win32.h	Tue May 18 11:27:22 2010 +0100
@@ -25,7 +25,7 @@
 #include "radioservicedef.h"
 
 // Forward declarations
-class RadioUiEngine;
+class RadioUiEnginePrivate;
 
 class RadioMonitorService : public QObject
 {
@@ -33,24 +33,18 @@
 
 public:
 
-    RadioMonitorService( RadioUiEngine& engine );
+    RadioMonitorService( RadioUiEnginePrivate& 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 init();
+
     void notifySong( const QString& song );
 
 private:
     
 private: // data
 
-    RadioUiEngine&  mUiEngine;
+    RadioUiEnginePrivate&  mUiEngine;
 
 };
 
--- a/radioapp/radiouiengine/inc/radioscannerengine.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/inc/radioscannerengine.h	Tue May 18 11:27:22 2010 +0100
@@ -60,6 +60,11 @@
     void continueScanning();
 
     /*!
+     * Checks if the scanning is ongoing
+     */
+    bool isScanning() const;
+
+    /*!
      * Cancels the scanning process
      */
     void cancel();
--- a/radioapp/radiouiengine/inc/radioscannerengine_p.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/inc/radioscannerengine_p.h	Tue May 18 11:27:22 2010 +0100
@@ -42,38 +42,7 @@
 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();
+    virtual ~RadioScannerEnginePrivate();
 
 private:
 
@@ -103,6 +72,8 @@
 
     bool                    mMutedByScanner;
 
+    bool                    mIsScanning;
+
     };
 
 
--- a/radioapp/radiouiengine/inc/radiostationmodel.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/inc/radiostationmodel.h	Tue May 18 11:27:22 2010 +0100
@@ -23,6 +23,7 @@
 #include <QMap>
 
 // User includes
+#include "radio_global.h"
 #include "radiouiengineexport.h"
 #include "radiostation.h"
 
@@ -106,23 +107,29 @@
     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 );
     int findPresetIndex( int presetIndex, RadioStation& station );
 
     /*!
+     * Finds the closest station from the given frequency
+     */
+    RadioStation findClosest( const uint frequency, StationSkip::Mode mode );
+
+    /*!
      * Functions to remove stations
      */
     void removeByFrequency( uint frequency );
     void removeByPresetIndex( int presetIndex );
     void removeStation( const RadioStation& station );
 
+    /**
+     * Removes all stations
+     */
+    enum RemoveMode{ RemoveAll, RemoveLocalStations, RemoveFavorites  };
+    void removeAll( RemoveMode mode = RemoveAll );
+
     /*!
      * Functions to add and save stations
      */
@@ -130,6 +137,11 @@
     void saveStation( RadioStation& station );
 
     /*!
+     * Function to check the number of favorite stations
+     */
+    int favoriteCount();
+
+    /*!
      * Convenience functions to change common settings
      */
     void setFavoriteByFrequency( uint frequency, bool favorite );
@@ -164,15 +176,6 @@
     void radioTextReceived( const RadioStation& station );
     void dynamicPsChanged( const RadioStation& station );
     void favoriteChanged( const RadioStation& station );
-    void stationRemoved( const RadioStation& station );
-    void stationAdded( const RadioStation& station );
-
-public slots:
-
-    /**
-     * Removes all stations
-     */
-    void removeAll();
 
 private slots:
 
--- a/radioapp/radiouiengine/inc/radiostationmodel_p.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/inc/radiostationmodel_p.h	Tue May 18 11:27:22 2010 +0100
@@ -58,7 +58,6 @@
     bool containsPresetIndex( int presetIndex );
     void startDynamicPsCheck();
     void addScannedFrequency( uint frequency );
-    void removeLocalStations();
     void setCurrentPsName( uint frequency, const QString& name );
     void setCurrentRadioText( uint frequency, const QString& radioText );
     void setCurrentRadioTextPlus( uint frequency, int rtClass, const QString& rtItem );
@@ -73,6 +72,8 @@
 
     void doSaveStation( RadioStation& station, bool persistentSave = true );
 
+    QList<RadioStation> favorites() const;
+
 private: // data
 
     /**
--- a/radioapp/radiouiengine/inc/radiouiengine.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/inc/radiouiengine.h	Tue May 18 11:27:22 2010 +0100
@@ -30,9 +30,11 @@
 // Forward declarations
 class RadioUiEnginePrivate;
 class RadioStationModel;
-class RadioSettings;
+class RadioSettingsIf;
 class RadioStation;
 class RadioHistoryModel;
+class RadioHistoryItem;
+class RadioCarouselModel;
 class RadioStationFilterModel;
 class RadioScannerEngine;
 class RadioMonitorService;
@@ -53,26 +55,34 @@
     Q_DECLARE_PRIVATE_D( d_ptr, RadioUiEngine )
     Q_DISABLE_COPY( RadioUiEngine )
 
+    friend class RadioScannerEngine;
+
 public:
 
+    /**
+     * Static functions that are used before the ui engine is created
+     */
     static bool isOfflineProfile();
+    static uint lastTunedFrequency();
 
     RadioUiEngine( QObject* parent = 0 );
     ~RadioUiEngine();
 
-    bool startRadio();
+    bool isInitialized() const;
+
+    bool init();
 
     bool isFirstTimeStart();
 
     /**
      * Getters for things owned by the engine
      */
-    RadioSettings& settings();
-    RadioStationModel& model();
+    RadioSettingsIf& settings();
+    RadioStationModel& stationModel();
     RadioHistoryModel& historyModel();
     RadioStationFilterModel* createNewFilterModel( QObject* parent = 0 );
-    RadioScannerEngine* createScannerEngine();
-    RadioMonitorService& monitor();
+    RadioCarouselModel* carouselModel();
+    RadioScannerEngine* scannerEngine();
 
     bool isRadioOn() const;
     bool isScanning() const;
@@ -86,6 +96,8 @@
     uint maxFrequency() const;
     uint frequencyStepSize() const;
 
+    void setMute( bool muted );
+
     QList<RadioStation> stationsInRange( uint minFrequency, uint maxFrequency );
 
     QString genreToString( int genre, GenreTarget::Target target );
@@ -94,6 +106,11 @@
 
     void addRecognizedSong( const QString& artist, const QString& title, const RadioStation& station );
 
+    uint skipStation( StationSkip::Mode mode, uint startFrequency = 0 );
+
+    enum MusicStore{ OviStore, OtherStore };
+    void openMusicStore( const RadioHistoryItem& item, MusicStore store = OviStore );
+
 signals:
 
     void tunedToFrequency( uint frequency, int commandSender );
@@ -113,8 +130,8 @@
     /**
      * Slots to tune to given frequency or preset
      */
-    void tuneFrequency( uint frequency, const int sender = TuneReason::Unspecified );
-    void tuneWithDelay( uint frequency, const int sender = TuneReason::Unspecified );
+    void tuneFrequency( uint frequency, const int reason = TuneReason::Unspecified );
+    void tuneWithDelay( uint frequency, const int reason = TuneReason::Unspecified );
     void tunePreset( int presetIndex );
 
     /*!
@@ -124,11 +141,7 @@
     void toggleMute();
     void toggleAudioRoute();
 
-    void skipPrevious();
-    void skipNext();
-
-    void seekUp();
-    void seekDown();
+    void seekStation( int seekDirection );
 
     void launchSongRecognition();
 
--- a/radioapp/radiouiengine/inc/radiouiengine_p.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/inc/radiouiengine_p.h	Tue May 18 11:27:22 2010 +0100
@@ -22,6 +22,8 @@
 #include <QScopedPointer>
 #include <QPointer>
 
+// User includes
+#include "radio_global.h"
 #include "radioenginewrapperobserver.h"
 
 // Forward declarations
@@ -29,6 +31,7 @@
 class RadioEngineWrapper;
 class RadioStationModel;
 class RadioHistoryModel;
+class RadioCarouselModel;
 class RadioPresetStorage;
 class RadioControlService;
 class RadioMonitorService;
@@ -41,14 +44,12 @@
 
 public:
 
-    enum TuneDirection{ Next, Previous };
-
     RadioUiEnginePrivate( RadioUiEngine* engine );
     virtual ~RadioUiEnginePrivate();
 
     RadioUiEngine& api();
 
-    bool startRadio();
+    bool init();
 
     void cancelSeeking();
 
@@ -71,9 +72,9 @@
 // New functions
 
     /*!
-     * Tunes to next or previous favorite preset
+     * Tunes to next or previous station
      */
-    void skip( TuneDirection direction );
+    uint skip( StationSkip::Mode mode, uint startFrequency = 0 );
 
 private: // data
 
@@ -87,13 +88,17 @@
 
     QScopedPointer<RadioPresetStorage>      mPresetStorage;
 
-    RadioStationModel*                      mStationModel;
+    QScopedPointer<RadioStationModel>       mStationModel;
 
-    RadioHistoryModel*                      mHistoryModel;
+    QScopedPointer<RadioHistoryModel>       mHistoryModel;
+
+    QScopedPointer<RadioCarouselModel>      mCarouselModel;
 
-    RadioControlService*                    mControlService;
+#ifndef BUILD_WIN32
+    QScopedPointer<RadioControlService>     mControlService;
+#endif
 
-    RadioMonitorService*                    mMonitorService;
+    QScopedPointer<RadioMonitorService>     mMonitorService;
 
     QPointer<RadioScannerEngine>            mScannerEngine;
 
--- a/radioapp/radiouiengine/radiouiengine.pro	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/radiouiengine.pro	Tue May 18 11:27:22 2010 +0100
@@ -23,7 +23,7 @@
 win32:DESTDIR = ../bin
 
 # Wrapper does not depend on QtGui or Orbit
-QT          = core gui network
+QT          = core gui network sql
 CONFIG      -= hb
 CONFIG      += mobility
 MOBILITY    = systeminfo
@@ -61,6 +61,7 @@
 HEADERS += radiouiengine.h
 HEADERS += radiohistoryitem.h
 HEADERS += radiohistorymodel.h
+HEADERS += radiocarouselmodel.h
 HEADERS += radioscannerengine.h
 HEADERS += radioservicedef.h
 HEADERS += radionotificationdata.h
@@ -72,6 +73,7 @@
 INTERNAL_HEADERS += radiostation_p.h
 INTERNAL_HEADERS += radiohistoryitem_p.h
 INTERNAL_HEADERS += radiohistorymodel_p.h
+INTERNAL_HEADERS += radiocarouselmodel_p.h
 INTERNAL_HEADERS += radiouiengine_p.h
 INTERNAL_HEADERS += radiostationmodel_p.h
 INTERNAL_HEADERS += radioscannerengine_p.h
@@ -89,6 +91,8 @@
 SOURCES += radiohistoryitem_p.cpp
 SOURCES += radiohistorymodel.cpp
 SOURCES += radiohistorymodel_p.cpp
+SOURCES += radiocarouselmodel.cpp
+SOURCES += radiocarouselmodel_p.cpp
 SOURCES += radioscannerengine.cpp
 SOURCES += radioscannerengine_p.cpp
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiouiengine/src/radiocarouselmodel.cpp	Tue May 18 11:27:22 2010 +0100
@@ -0,0 +1,140 @@
+/*
+* 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
+
+// User includes
+#include "radiocarouselmodel.h"
+#include "radiocarouselmodel_p.h"
+#include "radiostationmodel.h"
+#include "radiouiengine.h"
+#include "radiostation.h"
+#include "radio_global.h"
+#include "radiologger.h"
+
+/*!
+ *
+ */
+RadioCarouselModel::RadioCarouselModel( RadioUiEngine& uiEngine, RadioStationModel& stationModel ) :
+    QAbstractListModel( &uiEngine ),
+    d_ptr( new RadioCarouselModelPrivate( this, uiEngine, stationModel ) )
+{
+    connectAndTest( &stationModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+                    this,          SIGNAL(dataChanged(QModelIndex,QModelIndex)) );
+    connectAndTest( &stationModel, SIGNAL(layoutAboutToBeChanged()),
+                    this,          SIGNAL(layoutAboutToBeChanged()) );
+    connectAndTest( &stationModel, SIGNAL(layoutChanged()),
+                    this,          SIGNAL(layoutChanged()) );
+    connectAndTest( &stationModel, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)),
+                    this,          SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)) );
+    connectAndTest( &stationModel, SIGNAL(rowsInserted(QModelIndex,int,int)),
+                    this,          SIGNAL(rowsInserted(QModelIndex,int,int)) );
+    connectAndTest( &stationModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
+                    this,          SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)) );
+    connectAndTest( &stationModel, SIGNAL(rowsRemoved(QModelIndex,int,int)),
+                    this,          SIGNAL(rowsRemoved(QModelIndex,int,int)) );
+    connectAndTest( &stationModel, SIGNAL(modelAboutToBeReset()),
+                    this,          SIGNAL(modelAboutToBeReset()) );
+    connectAndTest( &stationModel, SIGNAL(modelReset()),
+                    this,          SIGNAL(modelReset()) );
+
+//    connectAndTest( model(),        SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
+//                    this,           SLOT(removeFrequency(QModelIndex,int,int)) );
+}
+
+/*!
+ *
+ */
+RadioCarouselModel::~RadioCarouselModel()
+{
+    delete d_ptr;
+}
+
+/*!
+ * \reimp
+ */
+int RadioCarouselModel::rowCount( const QModelIndex& parent ) const
+{
+    Q_UNUSED( parent );
+    Q_D( const RadioCarouselModel );
+    const int rowCount = d->mStationModel.rowCount();
+    if ( rowCount == 0 ) {
+        return 1;
+    }
+    return rowCount;
+}
+
+/*!
+ * \reimp
+ */
+QVariant RadioCarouselModel::data( const QModelIndex& index, int role ) const
+{
+    if ( !index.isValid() ) {
+        return QVariant();
+    }
+
+    Q_D( const RadioCarouselModel );
+    if ( role == RadioStationModel::RadioStationRole ) {
+        const int rowCount = d->mStationModel.rowCount();
+        if ( rowCount == 0 ) {
+            QVariant variant;
+            variant.setValue( d->mStationModel.currentStation() );
+            return variant;
+        } else {
+            return d->mStationModel.data( index, role );
+        }
+    }
+
+    return QVariant();
+}
+
+/*!
+ * Finds the closest station from the given frequency
+ */
+RadioStation RadioCarouselModel::findClosest( const uint frequency, StationSkip::Mode mode )
+{
+    Q_D( RadioCarouselModel );
+    return d->mStationModel.findClosest( frequency, mode );
+}
+
+/*!
+ * Returns the model index corresponding to the given frequency
+ */
+QModelIndex RadioCarouselModel::modelIndexFromFrequency( uint frequency )
+{
+    Q_D( RadioCarouselModel );
+    if ( d->mStationModel.rowCount() == 0 ) {
+        return index( 0, 0 );
+    } else {
+        RadioStation station;
+        if ( d->mStationModel.findFrequency( frequency, station ) ) {
+            return index( d->mStationModel.findPresetIndex( station.presetIndex() ), 0 );
+        }
+    }
+
+    return QModelIndex();
+}
+
+/*!
+ * \reimp
+ */
+void RadioCarouselModel::removeFrequency( const QModelIndex& parent, int first, int last )
+{
+    Q_UNUSED( parent );
+    Q_UNUSED( first );
+    Q_UNUSED( last );
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiouiengine/src/radiocarouselmodel_p.cpp	Tue May 18 11:27:22 2010 +0100
@@ -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:
+*
+*/
+
+// User includes
+#include "radiocarouselmodel_p.h"
+#include "radiostationmodel.h"
+
+/*!
+ *
+ */
+RadioCarouselModelPrivate::RadioCarouselModelPrivate( RadioCarouselModel* model,
+                                                      RadioUiEngine& uiEngine,
+                                                      RadioStationModel& stationModel ) :
+    q_ptr( model ),
+    mUiEngine( uiEngine ),
+    mStationModel( stationModel )
+{
+}
+
+/*!
+ *
+ */
+RadioCarouselModelPrivate::~RadioCarouselModelPrivate()
+{
+
+}
--- a/radioapp/radiouiengine/src/radiocontrolservice.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/src/radiocontrolservice.cpp	Tue May 18 11:27:22 2010 +0100
@@ -51,27 +51,27 @@
     switch ( commandId )
     {
         case RadioServiceCommand::Play:
-            mUiEngine.toggleMute();
+            mUiEngine.setMute( false );
             break;
 
         case RadioServiceCommand::Pause:
-            mUiEngine.toggleMute();
+            mUiEngine.setMute( true );
             break;
 
         case RadioServiceCommand::Previous:
-            mUiEngine.skipPrevious();
+            mUiEngine.skipStation( StationSkip::PreviousFavorite );
             break;
 
         case RadioServiceCommand::Next:
-            mUiEngine.skipNext();
+            mUiEngine.skipStation( StationSkip::NextFavorite );
             break;
 
         case RadioServiceCommand::SeekUp:
-            mUiEngine.seekUp();
+            mUiEngine.seekStation( Seeking::Up );
             break;
 
         case RadioServiceCommand::SeekDown:
-            mUiEngine.seekDown();
+            mUiEngine.seekStation( Seeking::Down );
             break;
 
         case RadioServiceCommand::Foreground:
--- a/radioapp/radiouiengine/src/radiohistoryitem.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/src/radiohistoryitem.cpp	Tue May 18 11:27:22 2010 +0100
@@ -74,6 +74,32 @@
 /*!
  *
  */
+bool RadioHistoryItem::isValid() const
+{
+    return id() != 0 && !title().isEmpty();
+}
+
+/*!
+ *
+ */
+void RadioHistoryItem::reset()
+{
+    decrementReferenceCount();
+    mData = shared_null();
+    mData->ref.ref();
+}
+
+/*!
+ *
+ */
+int RadioHistoryItem::id() const
+{
+    return mData->mId;
+}
+
+/*!
+ *
+ */
 QString RadioHistoryItem::artist() const
 {
     return mData->mArtist;
@@ -168,37 +194,17 @@
 /*!
  *
  */
-bool RadioHistoryItem::isFavorite() const
+bool RadioHistoryItem::isTagged() const
 {
-    return mData->mFavorite;
+    return mData->mTagged;
 }
 
 /*!
  *
  */
-void RadioHistoryItem::setFavorite()
+bool RadioHistoryItem::isRecognizedByRds() const
 {
-    if ( !mData->mFavorite ) {
-        detach();
-        mData->mFavorite = true;
-    }
-}
-
-/*!
- *
- */
-void RadioHistoryItem::increasePlayCount()
-{
-    detach();
-    ++mData->mPlayCount;
-}
-
-/*!
- *
- */
-int RadioHistoryItem::playCount() const
-{
-    return mData->mPlayCount;
+    return mData->mFromRds;
 }
 
 /**
--- a/radioapp/radiouiengine/src/radiohistoryitem_p.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/src/radiohistoryitem_p.cpp	Tue May 18 11:27:22 2010 +0100
@@ -15,6 +15,11 @@
 *
 */
 
+// System includes
+#include <QSqlRecord>
+#include <QVariant>
+
+// User includes
 #include "radiohistoryitem.h"
 #include "radiohistoryitem_p.h"
 
@@ -41,9 +46,25 @@
 void RadioHistoryItemPrivate::init( const QString& artist, const QString& title )
 {
     ref = 1;
+    mId = -1;
     mArtist = artist;
     mTitle = title;
     mFrequency = 0;
-    mFavorite = false;
-    mPlayCount = 1;
+    mTagged = false;
+    mFromRds = true;
 }
+
+/*!
+ *
+ */
+void RadioHistoryItemPrivate::initFromRecord( const QSqlRecord& record )
+{
+    mId = record.value( RadioHistoryValue::Id ).toInt();
+    mArtist = record.value( RadioHistoryValue::Artist ).toString();
+    mTitle = record.value( RadioHistoryValue::Title ).toString();
+    mFrequency = record.value( RadioHistoryValue::Frequency ).toUInt() * 1000;
+    mStation = record.value( RadioHistoryValue::Station ).toString();
+    mTagged = record.value( RadioHistoryValue::Tagged ).toBool();
+    mFromRds = record.value( RadioHistoryValue::FromRds ).toBool();
+    mTime = record.value( RadioHistoryValue::Time ).toDateTime();
+}
--- a/radioapp/radiouiengine/src/radiohistorymodel.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/src/radiohistorymodel.cpp	Tue May 18 11:27:22 2010 +0100
@@ -39,6 +39,9 @@
                     this,       SLOT(resetCurrentSong()) );
     connectAndTest( &uiEngine,  SIGNAL(seekingStarted(int)),
                     this,       SLOT(resetCurrentSong()) );
+
+    Q_D( RadioHistoryModel );
+    d->connectToDatabase();
 }
 
 /*!
@@ -47,28 +50,17 @@
 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();
+    return d->rowCount();
 }
 
 /*!
@@ -81,43 +73,7 @@
     }
 
     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;
+    return d->data( index.row(), role );
 }
 
 /*!
@@ -133,26 +89,20 @@
 /*!
  * Public slot
  */
-void RadioHistoryModel::setFavorite()
+void RadioHistoryModel::removeAll()
 {
     Q_D( RadioHistoryModel );
-    RadioHistoryItem item = d->mItems.first();
-    item.setFavorite();
-    updateItem( 0, item );
+    d->removeAll();
 }
 
 /*!
- * Public slot
+ * Sets the icons to be used in the list
  */
-void RadioHistoryModel::removeAll()
+void RadioHistoryModel::setIcons( const QIcon& nonTaggedIcon, const QIcon& taggedIcon )
 {
     Q_D( RadioHistoryModel );
-
-    beginRemoveRows( QModelIndex(), 0, rowCount() - 1 );
-
-    d->mItems.clear();
-
-    endRemoveRows();
+    d->mNonTaggedIcon = nonTaggedIcon;
+    d->mTaggedIcon = taggedIcon;
 }
 
 /*!
@@ -177,31 +127,37 @@
 /*!
  *
  */
+void RadioHistoryModel::setShowTagged( bool showTagged )
+{
+    Q_D( RadioHistoryModel );
+    d->setViewMode( showTagged ? RadioHistoryModelPrivate::ShowTagged : RadioHistoryModelPrivate::ShowAll );
+}
+
+/*!
+ *
+ */
+void RadioHistoryModel::toggleTagging( const RadioHistoryItem& item, const int row )
+{
+    Q_D( RadioHistoryModel );
+    d->toggleTagging( item, row );
+}
+
+/*!
+ *
+ */
+RadioHistoryItem RadioHistoryModel::itemAtIndex( const QModelIndex& index ) const
+{
+    Q_D( const RadioHistoryModel );
+    return d->itemAtIndex( index );
+}
+
+/*!
+ *
+ */
 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();
+    d->addItem( artist, title, station );
 }
 
 /*!
@@ -219,17 +175,31 @@
  */
 void RadioHistoryModel::addRadioTextPlus( int rtClass, const QString& rtItem, const RadioStation& station )
 {
-    if ( rtClass == RtPlus::Artist || rtClass == RtPlus::Title ) {
+    if ( rtClass == RtPlus::Dummy || rtClass == RtPlus::Artist || rtClass == RtPlus::Title ) {
         Q_D( RadioHistoryModel );
-        if ( d->mRtItemHolder.isEmpty() ) {
+        if ( d->mRtItemClass == -1 ) {
+            d->mRtItemClass = rtClass;
             d->mRtItemHolder = rtItem;
         } else {
-            if ( rtClass == RtPlus::Title ) {
+            // Received: Artist - Title
+            if ( d->mRtItemClass == RtPlus::Artist && rtClass == RtPlus::Title ) {
                 addItem( d->mRtItemHolder, rtItem, station );
-            } else {
+
+            // Received: Title - Artist
+            } else if ( rtClass == RtPlus::Artist && d->mRtItemClass == RtPlus::Title ) {
                 addItem( rtItem, d->mRtItemHolder, station );
+
+            // Received: Dummy - Title
+            } else if ( d->mRtItemClass == RtPlus::Dummy && rtClass == RtPlus::Title ) {
+                addItem( "", rtItem, station );
+
+            // Received: Title - Dummy
+            } else if ( rtClass == RtPlus::Dummy && d->mRtItemClass == RtPlus::Title ) {
+                addItem( "", d->mRtItemHolder, station );
             }
+
             d->mRtItemHolder = "";
+            d->mRtItemClass = -1;
         }
     }
 }
@@ -237,33 +207,20 @@
 /*!
  *
  */
-int RadioHistoryModel::findItem( const QString& artist, const QString& title, RadioHistoryItem& item )
+void RadioHistoryModel::reportChangedData( int start, int end )
 {
-    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;
-        }
+    if ( end == -1 ) {
+        end = start;
     }
-
-    return -1;
+    const QModelIndex startIndex = index( start, 0, QModelIndex() );
+    const QModelIndex endIndex = index( end, 0, QModelIndex() );
+    emit dataChanged( startIndex, endIndex );
 }
 
 /*!
  *
  */
-void RadioHistoryModel::updateItem( int index, const RadioHistoryItem& item, bool prepend )
+void RadioHistoryModel::emitItemAdded()
 {
-    Q_D( RadioHistoryModel );
-    d->mItems.removeAt( index );
-
-    if ( prepend ) {
-        d->mItems.prepend( item );
-    } else {
-        d->mItems.insert( index, item );
-    }
+    emit itemAdded();
 }
--- a/radioapp/radiouiengine/src/radiohistorymodel_p.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/src/radiohistorymodel_p.cpp	Tue May 18 11:27:22 2010 +0100
@@ -15,8 +15,62 @@
 *
 */
 
+// System includes
+#include <QSqlDatabase>
+#include <QFile>
+#include <QDateTime>
+#include <QVariant>
+#include <QStringList>
+#include <QSqlError>
+#include <QSqlQueryModel>
+#include <QSqlRecord>
+
+// User includes
 #include "radiohistorymodel_p.h"
+#include "radiohistorymodel.h"
 #include "radiohistoryitem.h"
+#include "radiohistoryitem_p.h"
+#include "radiostation.h"
+#include "radiologger.h"
+
+const char* DATABASE_NAME       = "radioplayhistory.db";
+const char* DATABASE_DRIVER     = "QSQLITE";
+const char* HISTORY_TABLE       = "history";
+const char* SQL_CREATE_TABLE    = "CREATE TABLE history ("
+                                  "id INTEGER PRIMARY KEY AUTOINCREMENT, "
+                                  "artist TEXT NOT NULL, "
+                                  "title TEXT NOT NULL, "
+                                  "station TEXT NOT NULL, "
+                                  "frequency INTEGER NOT NULL, "
+                                  "tagged INTEGER NOT NULL DEFAULT 0, "
+                                  "fromRds INTEGER NOT NULL DEFAULT 1, "
+                                  "time TIMESTAMP NOT NULL)";
+
+const char* SQL_ADD_ITEM         = "INSERT INTO history (artist,title,station,frequency,fromRds,time) "
+                                            "VALUES ( ?,?,?,?,?,? )";
+
+const char* SQL_SELECT_ALL       = "SELECT * FROM history ORDER BY id DESC";
+const char* SQL_SELECT_TAGGED    = "SELECT * FROM history WHERE tagged=1";// ORDER BY id DESC";
+
+const char* SQL_DELETE_ALL       = "DELETE FROM history";
+
+//static const char* SQL_FIND_ITEM_BY_ID = "SELECT * FROM history WHERE id = ?";
+const char* SQL_TOGGLE_TAG       = "UPDATE history SET tagged = ? WHERE id = ?";
+
+
+#ifdef LOGGING_ENABLED
+#   define GET_ERR( param ) GETSTRING( param.lastError().text() )
+#   define GET_ERR_PTR( param ) GETSTRING( param->lastError().text() )
+#endif // LOGGING_ENABLED
+
+/*!
+ * Static utility function to parse a frequency
+ */
+static  QString parseFrequency( const uint frequency )
+{
+    QString loc = qtTrId( "txt_rad_dblist_val_l1_mhz" );
+    return loc.arg( RadioStation::parseFrequency( frequency ) );
+}
 
 /*!
  *
@@ -26,9 +80,10 @@
     q_ptr( model ),
     mUiEngine( uiEngine ),
     mTopItemIsPlaying( false ),
-    mShowDetails( false )
+    mShowDetails( true ),
+    mViewMode( ShowAll ),
+    mRtItemClass( -1 )
 {
-
 }
 
 /*!
@@ -36,5 +91,248 @@
  */
 RadioHistoryModelPrivate::~RadioHistoryModelPrivate()
 {
+    if ( mDatabase && mDatabase->isOpen() ) {
+        mDatabase->close();
+    }
+}
 
+/*!
+ *
+ */
+bool RadioHistoryModelPrivate::connectToDatabase()
+{
+    LOG_METHOD;
+    QSqlDatabase db = QSqlDatabase::addDatabase( DATABASE_DRIVER );
+    if ( db.isValid() ) {
+        mDatabase.reset( new QSqlDatabase( db ) );
+        mDatabase->setDatabaseName( DATABASE_NAME );
+
+        if ( !mDatabase->open() ) {
+            LOG_FORMAT( "Failed to open database! error = %s", GET_ERR_PTR( mDatabase ) );
+            mDatabase.reset();
+            return false;
+        }
+
+        // Create the table if it does not exist
+        if ( !mDatabase->tables().contains( HISTORY_TABLE ) ) {
+            LOG( "RadioHistoryModelPrivate::connectToDatabase: Creating database tables." );
+            QSqlQuery query;
+            if ( !query.exec( SQL_CREATE_TABLE ) ) {
+                LOG_FORMAT( "Database creation failed! error = %s", GET_ERR( query ) );
+                mDatabase->close();
+                mDatabase.reset();
+                return false;
+            }
+        }
+    } else {
+        LOG_FORMAT( "Invalid database! error = %s", GET_ERR( db ) );
+        return false;
+    }
+
+    mQueryModel.reset( new QSqlQueryModel() );
+    setViewMode( ShowAll );
+
+    return mQueryModel->lastError().type() == QSqlError::NoError;
 }
+
+/*!
+ *
+ */
+void RadioHistoryModelPrivate::addItem( const QString& artist,
+                                        const QString& title,
+                                        const RadioStation& station,
+                                        bool fromRds )
+{
+    LOG_FORMAT( "RadioHistoryModelPrivate::addItem. Artist: %s, Title: %s", GETSTRING( artist ), GETSTRING( title ) );
+
+    if ( !mQueryModel ) {
+        return;
+    }
+
+    mTopItemIsPlaying = true;
+
+    QSqlQuery query = beginTransaction();
+
+    query.prepare( SQL_ADD_ITEM );
+    query.addBindValue( artist );
+    query.addBindValue( title );
+    query.addBindValue( station.name() );
+    query.addBindValue( static_cast<int>( station.frequency() / 1000 ) );
+    query.addBindValue( fromRds );
+    query.addBindValue( QDateTime::currentDateTime().toTime_t() );
+
+    commitTransaction( query, InsertRows, 0 );
+}
+
+/*!
+ *
+ */
+int RadioHistoryModelPrivate::rowCount() const
+{
+    if ( !mQueryModel ) {
+        return 0;
+    }
+    return mQueryModel->rowCount();
+}
+
+/*!
+ *
+ */
+QVariant RadioHistoryModelPrivate::data( const int row, const int role ) const
+{
+    if ( mQueryModel->lastError().type() == QSqlError::NoError ) {
+
+        QSqlRecord record = mQueryModel->record( row );
+        if ( role == Qt::DisplayRole ) {
+
+            const QString artist = record.value( RadioHistoryValue::Artist ).toString();
+            const QString title = record.value( RadioHistoryValue::Title ).toString();
+            const QString station = record.value( RadioHistoryValue::Station ).toString();
+            const uint frequency = record.value( RadioHistoryValue::Frequency ).toUInt() * 1000;
+
+            QStringList list;
+            if ( mShowDetails ) {
+                list.append( qtTrId( "txt_rad_dblist_1_2" ).arg( artist ).arg( title ) );
+                QDateTime dateTime = record.value( RadioHistoryValue::Time ).toDateTime();
+                const QString time = dateTime.toLocalTime().toString();
+
+                QString name = !station.isEmpty() ? station : parseFrequency( frequency );
+                list.append( qtTrId( "txt_rad_dblist_1_2" ).arg( time ).arg( name ) );
+            } else {
+                list.append( artist );
+                list.append( title );
+            }
+
+            return list;
+        } else if ( role == Qt::DecorationRole ) {
+            QVariantList list;
+            const bool tagged = record.value( RadioHistoryValue::Tagged ).toBool();
+            if ( tagged ) {
+                list.append( mTaggedIcon );
+            } else {
+                list.append( mNonTaggedIcon );
+            }
+            return list;
+        }
+    }
+
+    return QVariant();
+}
+
+/*!
+ *
+ */
+void RadioHistoryModelPrivate::removeAll()
+{
+    if ( !mQueryModel ) {
+        return;
+    }
+
+    QSqlQuery query = beginTransaction();
+
+    query.prepare( SQL_DELETE_ALL );
+
+    // Commented out because rowsRemoved() seems to crash HbListView
+//    commitTransaction( query, RemoveRows, 0, rowCount() - 1 );
+
+    commitTransaction( query, NoOp, 0 );
+    q_ptr->reset();
+}
+
+/*!
+ *
+ */
+void RadioHistoryModelPrivate::setViewMode( ViewMode mode )
+{
+    if ( !mQueryModel ) {
+        return;
+    }
+
+    mViewMode = mode;
+    mQueryModel->setQuery( mode == ShowTagged ? SQL_SELECT_TAGGED : SQL_SELECT_ALL, *mDatabase );
+    q_ptr->reset();
+}
+
+/*!
+ *
+ */
+void RadioHistoryModelPrivate::toggleTagging( const RadioHistoryItem& item, const int row )
+{
+    QSqlQuery updateQuery = beginTransaction();
+
+    updateQuery.prepare( SQL_TOGGLE_TAG );
+    updateQuery.addBindValue( item.isTagged() ? 0 : 1 );
+    updateQuery.addBindValue( item.id() );
+
+    commitTransaction( updateQuery, ChangeData, row );
+}
+
+/*!
+ *
+ */
+RadioHistoryItem RadioHistoryModelPrivate::itemAtIndex( const QModelIndex& index ) const
+{
+    LOG_METHOD;
+    RadioHistoryItem item;
+    QSqlRecord record = mQueryModel->record( index.row() );
+    item.data_ptr()->initFromRecord( record );
+    return item;
+}
+
+/*!
+ *
+ */
+void RadioHistoryModelPrivate::refreshModel()
+{
+    setViewMode( mViewMode );
+}
+
+/*!
+ *
+ */
+QSqlQuery RadioHistoryModelPrivate::beginTransaction()
+{
+    LOG_METHOD;
+    QSqlQuery newQuery( *mDatabase );
+    mDatabase->transaction();
+    return newQuery;
+}
+
+/*!
+ *
+ */
+void RadioHistoryModelPrivate::commitTransaction( QSqlQuery& query, Operation operation, int start, int end )
+{
+    LOG_METHOD;
+    if ( end == -1 ) {
+        end = start;
+    }
+
+    bool success = false;
+    Q_UNUSED( success );
+    if ( query.exec() ) {
+        if ( operation == InsertRows ) {
+            q_ptr->beginInsertRows( QModelIndex(), start, end );
+        } else if ( operation == RemoveRows ) {
+            q_ptr->beginRemoveRows( QModelIndex(), start, end );
+        }
+
+        success = mDatabase->commit();
+        LOG_ASSERT( success, LOG_FORMAT( "Commit failed! err: %s", GET_ERR_PTR( mDatabase ) ) );
+
+        refreshModel();
+
+        if ( operation == InsertRows ) {
+            q_ptr->endInsertRows();
+            q_ptr->emitItemAdded();
+        } else if ( operation == RemoveRows ) {
+            q_ptr->endRemoveRows();
+        } else if ( operation == ChangeData ) {
+            q_ptr->reportChangedData( start );
+        }
+    } else {
+        LOG_FORMAT( "RadioHistoryModelPrivate::commitTransaction FAILED, rolling back: error = %s", GET_ERR( query ) );
+        success = mDatabase->rollback();
+        LOG_ASSERT( success, LOG_FORMAT( "Rollback failed! err: %s", GET_ERR_PTR( mDatabase ) ) );
+    }
+}
--- a/radioapp/radiouiengine/src/radiomonitorservice.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/src/radiomonitorservice.cpp	Tue May 18 11:27:22 2010 +0100
@@ -18,10 +18,14 @@
 // User includes
 #include "radiomonitorservice.h"
 #include "radiouiengine.h"
+#include "radiouiengine_p.h"
 #include "radiostationmodel.h"
+#include "radioenginewrapper.h"
+#include "radioscannerengine.h"
 #include "radiostation.h"
 #include "radioservicedef.h"
 #include "radionotificationdata.h"
+#include "radiologger.h"
 
 #define RUN_NOTIFY( type, data ) \
     do { \
@@ -33,9 +37,10 @@
 /*!
  *
  */
-RadioMonitorService::RadioMonitorService( RadioUiEngine& engine ) :
-    XQServiceProvider( RADIO_MONITOR_SERVICE, &engine ),
-    mUiEngine( engine )
+RadioMonitorService::RadioMonitorService( RadioUiEnginePrivate& engine ) :
+    XQServiceProvider( RADIO_MONITOR_SERVICE, &engine.api() ),
+    mUiEngine( engine ),
+    mRadioStatus( RadioStatus::UnSpecified )
 {
     publishAll();
 }
@@ -50,65 +55,29 @@
 /*!
  *
  */
-void RadioMonitorService::notifyFavoriteCount( const int favoriteCount )
-{
-    RUN_NOTIFY( FavoriteCount, favoriteCount );
-}
-
-/*!
- *
- */
-void RadioMonitorService::notifyAntennaStatus( bool connected )
+void RadioMonitorService::init()
 {
-    RUN_NOTIFY( AntennaConnected, connected );
-}
-
-/*!
- *
- */
-void RadioMonitorService::notifyRadioStatus( RadioStatus::Status radioStatus )
-{
-    RUN_NOTIFY( RadioStatus, radioStatus );
-}
-
-/*!
- *
- */
-void RadioMonitorService::notifyFrequency( const uint frequency )
-{
-    RUN_NOTIFY( Frequency, frequency );
-}
+    RadioStationModel* stationModel = &mUiEngine.api().stationModel();
+    connectAndTest( stationModel,   SIGNAL(rowsRemoved(QModelIndex,int,int)),
+                    this,           SLOT(notifyFavoriteCount()) );
+    connectAndTest( stationModel,   SIGNAL(favoriteChanged(RadioStation)),
+                    this,           SLOT(notifyFavoriteCount()) );
+    connectAndTest( stationModel,   SIGNAL(stationDataChanged(RadioStation)),
+                    this,           SLOT(notifyStationChange(RadioStation)) );
+    connectAndTest( stationModel,   SIGNAL(radioTextReceived(RadioStation)),
+                    this,           SLOT(notifyStationChange(RadioStation)) );
 
-/*!
- *
- */
-void RadioMonitorService::notifyName( const QString& name )
-{
-    RUN_NOTIFY( Name, name );
-}
+    RadioUiEngine* uiEngine = &mUiEngine.api();
+    connectAndTest( uiEngine,       SIGNAL(seekingStarted(int)),
+                    this,           SLOT(notifyRadioStatus()) );
+    connectAndTest( uiEngine,       SIGNAL(muteChanged(bool)),
+                    this,           SLOT(notifyRadioStatus()) );
+    connectAndTest( uiEngine,       SIGNAL(antennaStatusChanged(bool)),
+                    this,           SLOT(notifyRadioStatus()) );
 
-/*!
- *
- */
-void RadioMonitorService::notifyGenre( const QString& genre )
-{
-    RUN_NOTIFY( Genre, genre );
-}
+    mUiEngine.wrapper().addObserver( this );
 
-/*!
- *
- */
-void RadioMonitorService::notifyRadioText( const QString& radioText )
-{
-    RUN_NOTIFY( RadioText, radioText );
-}
-
-/*!
- *
- */
-void RadioMonitorService::notifyHomePage( const QString& homePage )
-{
-    RUN_NOTIFY( HomePage, homePage );
+    notifyRadioStatus();
 }
 
 /*!
@@ -134,12 +103,17 @@
  */
 void RadioMonitorService::requestAllData()
 {
-    const RadioStation station = mUiEngine.model().currentStation();
+    RadioStationModel& stationModel = mUiEngine.api().stationModel();
+    const RadioStation station = stationModel.currentStation();
 
     QVariantList notificationList;
+    QVariant notification;
 
-    QVariant notification;
-    notification.setValue( RadioNotificationData( RadioServiceNotification::FavoriteCount, mUiEngine.model().favoriteCount() ) );
+    RadioStatus::Status radioStatus = determineRadioStatus();
+    notification.setValue( RadioNotificationData( RadioServiceNotification::RadioStatus, radioStatus ) );
+    notificationList.append( notification );
+
+    notification.setValue( RadioNotificationData( RadioServiceNotification::FavoriteCount, stationModel.favoriteCount() ) );
     notificationList.append( notification );
 
     notification.setValue( RadioNotificationData( RadioServiceNotification::Frequency, station.frequency() ) );
@@ -151,7 +125,8 @@
     }
 
     if ( station.genre() > 0 ) {
-        notification.setValue( RadioNotificationData( RadioServiceNotification::Genre, mUiEngine.genreToString( station.genre(), GenreTarget::HomeScreen ) ) );
+        notification.setValue( RadioNotificationData( RadioServiceNotification::Genre,
+                        mUiEngine.api().genreToString( station.genre(), GenreTarget::HomeScreen ) ) );
         notificationList.append( notification );
     }
 
@@ -173,6 +148,104 @@
 }
 
 /*!
+ * Private slot
+ */
+void RadioMonitorService::notifyRadioStatus()
+{
+    RadioStatus::Status radioStatus = determineRadioStatus();
+
+    if ( radioStatus != mRadioStatus ) {
+        if ( radioStatus == RadioStatus::Seeking ) {
+            connectAndTest( mUiEngine.api().scannerEngine(),    SIGNAL(destroyed()),
+                            this,                               SLOT(notifyRadioStatus()) );
+        }
+
+        mRadioStatus = radioStatus;
+        RUN_NOTIFY( RadioStatus, radioStatus );
+    }
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioMonitorService::notifyFavoriteCount()
+{
+    const int favoriteCount = mUiEngine.api().stationModel().favoriteCount();
+    RUN_NOTIFY( FavoriteCount, favoriteCount );
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioMonitorService::notifyStationChange( const RadioStation& station )
+{
+    RadioUiEngine& uiEngine = mUiEngine.api();
+    if ( uiEngine.isScanning() ) {
+        return;
+    }
+
+    QVariantList list;
+    QVariant notification;
+
+    if ( station.hasDataChanged( RadioStation::GenreChanged ) ) {
+        const QString genre = uiEngine.genreToString( station.genre(), GenreTarget::HomeScreen );
+        notification.setValue( RadioNotificationData( RadioServiceNotification::Genre, genre ) );
+        list.append( notification );
+    }
+
+    if ( station.hasDataChanged( RadioStation::NameChanged ) ) {
+        notification.setValue( RadioNotificationData( RadioServiceNotification::Name, station.name() ) );
+        list.append( notification );
+    }
+
+    if ( station.hasDataChanged( RadioStation::UrlChanged ) ) {
+        notification.setValue( RadioNotificationData( RadioServiceNotification::HomePage, station.url() ) );
+        list.append( notification );
+    }
+
+    if ( station.hasDataChanged( RadioStation::RadioTextChanged ) ) {
+        notification.setValue( RadioNotificationData( RadioServiceNotification::RadioText, station.radioText() ) );
+        list.append( notification );
+    }
+
+    notifyList( list );
+}
+
+/*!
+ * \reimp
+ */
+void RadioMonitorService::tunedToFrequency( uint frequency, int reason )
+{
+    Q_UNUSED( reason );
+    if ( !mUiEngine.api().isScanning() ) {
+        RUN_NOTIFY( Frequency, frequency );
+        RadioStation station;
+        if ( mUiEngine.api().stationModel().findFrequency( frequency, station ) && !station.name().isEmpty() ) {
+            RUN_NOTIFY( Name, station.name() );
+        }
+    }
+}
+
+/*!
+ *
+ */
+RadioStatus::Status RadioMonitorService::determineRadioStatus() const
+{
+    RadioUiEngine& uiEngine = mUiEngine.api();
+    if ( uiEngine.isScanning() ) {
+        return RadioStatus::Seeking;
+    } else if ( !uiEngine.isAntennaAttached() ) {
+        return RadioStatus::NoAntenna;
+    } else if ( uiEngine.isMuted() ) {
+        return RadioStatus::Muted;
+    }
+
+    return RadioStatus::Playing;
+}
+
+/*!
  *
  */
 void RadioMonitorService::notify( const QVariant& notification )
@@ -187,7 +260,7 @@
  */
 void RadioMonitorService::notifyList( const QVariantList& list )
 {
-    if ( mRequestIndexes.count() > 0 ) {
+    if ( mRequestIndexes.count() > 0 && list.count() > 0 ) {
         foreach ( int requestIndex, mRequestIndexes ) {
             completeRequest( requestIndex, list );
         }
--- a/radioapp/radiouiengine/src/radiomonitorservice_win32.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/src/radiomonitorservice_win32.cpp	Tue May 18 11:27:22 2010 +0100
@@ -17,14 +17,14 @@
 
 // User includes
 #include "radiomonitorservice_win32.h"
-#include "radiouiengine.h"
+#include "radiouiengine_p.h"
 #include "radioservicedef.h"
 
 /*!
  *
  */
-RadioMonitorService::RadioMonitorService( RadioUiEngine& engine ) :
-    QObject( &engine ),
+RadioMonitorService::RadioMonitorService( RadioUiEnginePrivate& engine ) :
+    QObject(),
     mUiEngine( engine )
 {
 }
@@ -39,65 +39,8 @@
 /*!
  *
  */
-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 )
+void RadioMonitorService::init()
 {
-    Q_UNUSED( frequency )
-}
-
-/*!
- *
- */
-void RadioMonitorService::notifyName( const QString& name )
-{
-    Q_UNUSED( name )
-}
-
-/*!
- *
- */
-void RadioMonitorService::notifyGenre( const QString& genre )
-{
-    Q_UNUSED( genre )
-}
-
-/*!
- *
- */
-void RadioMonitorService::notifyRadioText( const QString& radioText )
-{
-    Q_UNUSED( radioText )
-}
-
-/*!
- *
- */
-void RadioMonitorService::notifyHomePage( const QString& homePage )
-{
-    Q_UNUSED( homePage )
 }
 
 /*!
--- a/radioapp/radiouiengine/src/radioscannerengine.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/src/radioscannerengine.cpp	Tue May 18 11:27:22 2010 +0100
@@ -43,10 +43,6 @@
 RadioScannerEngine::~RadioScannerEngine()
 {
     cancel();
-    Q_D( RadioScannerEngine );
-    if ( d->mMutedByScanner ) {
-        d->mUiEngine.api().toggleMute();
-    }
     delete d_ptr;
 }
 
@@ -55,16 +51,28 @@
  */
 void RadioScannerEngine::startScanning()
 {
-    cancel();
     Q_D( RadioScannerEngine );
+    d->mUiEngine.cancelSeeking();
+
+    d->mIsScanning = true;
+
     if ( !d->mUiEngine.api().isMuted() ) {
-        d->mUiEngine.api().toggleMute();
+        d->mUiEngine.api().setMute( true );
         d->mMutedByScanner = true;
     }
 
-    d->mUiEngine.api().model().stationHandlerIf().removeLocalStations();
+    d->mUiEngine.api().emitSeekingStarted( Seeking::Up );
+
+    d->mUiEngine.api().stationModel().removeAll( RadioStationModel::RemoveLocalStations );
     d->mLastFoundFrequency = d->mUiEngine.api().minFrequency();
-    d->mUiEngine.wrapper().tuneFrequency( d->mLastFoundFrequency, TuneReason::StationScanInitialization );
+
+    if ( d->mUiEngine.wrapper().currentFrequency() == d->mLastFoundFrequency ) {
+        // Engine was already at the minimun frequency so start scanning
+        d->mUiEngine.wrapper().startSeeking( Seeking::Up, TuneReason::StationScan );
+    } else {
+        // Engine must be initialized to minimum frequency before scanning can start
+        d->mUiEngine.wrapper().tuneFrequency( d->mLastFoundFrequency, TuneReason::StationScanInitialization );
+    }
 }
 
 /*!
@@ -77,16 +85,27 @@
 }
 
 /*!
+ * Checks if the scanning is ongoing
+ */
+bool RadioScannerEngine::isScanning() const
+{
+    Q_D( const RadioScannerEngine );
+    return d->mIsScanning;
+}
+
+/*!
  * Cancels the scanning process
  */
 void RadioScannerEngine::cancel()
 {
     Q_D( RadioScannerEngine );
-    if ( d->mUiEngine.api().isScanning() ) {
+    if ( isScanning() ) {
+        d->mIsScanning = false;
         d->mUiEngine.cancelSeeking();
     }
+
     if ( d->mMutedByScanner ) {
-        d->mUiEngine.api().toggleMute();
+        d->mUiEngine.api().setMute( false );
         d->mMutedByScanner = false;
     }
 }
--- a/radioapp/radiouiengine/src/radioscannerengine_p.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/src/radioscannerengine_p.cpp	Tue May 18 11:27:22 2010 +0100
@@ -15,6 +15,7 @@
 *
 */
 
+// User includes
 #include "radioscannerengine_p.h"
 #include "radioscannerengine.h"
 #include "radiouiengine_p.h"
@@ -28,20 +29,19 @@
  *
  * @param scanner
  * @param uiEngine
- * @return
  */
 RadioScannerEnginePrivate::RadioScannerEnginePrivate( RadioScannerEngine* scanner, RadioUiEnginePrivate& uiEngine ) :
     q_ptr( scanner ),
     mUiEngine( uiEngine ),
     mLastFoundFrequency( 0 ),
-    mMutedByScanner( false )
+    mMutedByScanner( false ),
+    mIsScanning( false )
 {
     mUiEngine.wrapper().addObserver( this );
 }
 
 /*!
  *
- * @return
  */
 RadioScannerEnginePrivate::~RadioScannerEnginePrivate()
 {
@@ -53,6 +53,10 @@
  */
 void RadioScannerEnginePrivate::tunedToFrequency( uint frequency, int reason )
 {
+    if ( !mIsScanning ) {
+        return;
+    }
+
     Q_Q( RadioScannerEngine );
     if ( reason == TuneReason::StationScanInitialization ) {
         mUiEngine.wrapper().startSeeking( Seeking::Up, TuneReason::StationScan );
@@ -69,7 +73,6 @@
             q->emitStationFound( RadioStation() );
         }
     }
-
 }
 
 /*!
@@ -77,9 +80,10 @@
  */
 void RadioScannerEnginePrivate::addFrequencyAndReport( const uint frequency )
 {
-    mUiEngine.api().model().stationHandlerIf().addScannedFrequency( frequency );
+    RadioStationModel& stationModel = mUiEngine.api().stationModel();
+    stationModel.stationHandlerIf().addScannedFrequency( frequency );
     RadioStation station;
-    mUiEngine.api().model().findFrequency( frequency, station );
+    stationModel.findFrequency( frequency, station );
     Q_Q( RadioScannerEngine );
     q->emitStationFound( station );
 }
--- a/radioapp/radiouiengine/src/radiostationfiltermodel.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/src/radiostationfiltermodel.cpp	Tue May 18 11:27:22 2010 +0100
@@ -30,7 +30,7 @@
     mUiEngine( uiEngine ),
     mIsCyclic( false )
 {
-    setSourceModel( &mUiEngine.model() );
+    setSourceModel( &mUiEngine.stationModel() );
     setDynamicSortFilter( true );
 }
 
@@ -117,8 +117,8 @@
         for ( int i = 0; i < realCount; ++i ) {
             QModelIndex realIndex = QSortFilterProxyModel::index( i, 0 );
             QModelIndex shadowIndex = createIndex( i + realCount, 0, realIndex.internalPointer() );
-            const uint freq = realIndex.data( RadioStationModel::RadioStationRole ).value<RadioStation>().frequency();
-            LOG_FORMAT( "Adding shadow index %d for index %d. Freq: %u", shadowIndex.row(), realIndex.row(), freq );
+            //const uint freq = realIndex.data( RadioStationModel::RadioStationRole ).value<RadioStation>().frequency();
+//            LOG_FORMAT( "Adding shadow index %d for index %d. Freq: %u", shadowIndex.row(), realIndex.row(), freq );
             mShadowIndexes.insert( shadowIndex, realIndex );
         }
     }
--- a/radioapp/radiouiengine/src/radiostationmodel.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/src/radiostationmodel.cpp	Tue May 18 11:27:22 2010 +0100
@@ -26,11 +26,6 @@
 #include "radiouiengine_p.h"
 #include "radiostation.h"
 #include "radiostation_p.h"
-#ifndef BUILD_WIN32
-#   include "radiomonitorservice.h"
-#else
-#   include "radiomonitorservice_win32.h"
-#endif
 #include "radiologger.h"
 
 /*!
@@ -185,12 +180,11 @@
 
         RadioStationIf* preset = static_cast<RadioStationIf*>( station.data_ptr() );
         if ( d->mPresetStorage->readPreset( index, *preset ) ) {
-            RADIO_ASSERT( station.isValid(), "RadioStationModelPrivate::initialize", "Invalid station" );
-			// TODO: Remove this if when new Preset utility is taken into use
-            if ( station.frequency() != 87500000 )
-                {
+            if ( station.isValid() ) {
                 d->mStations.insert( station.frequency(), station );
-                }
+            } else {
+                LOG( "RadioStationModelPrivate::initialize: Invalid station!" );
+            }
         }
 
 #ifdef COMPILE_WITH_NEW_PRESET_UTILITY
@@ -260,21 +254,6 @@
 }
 
 /*!
- * 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 )
@@ -305,6 +284,42 @@
 }
 
 /*!
+ * Finds the closest station from the given frequency
+ */
+RadioStation RadioStationModel::findClosest( const uint frequency, StationSkip::Mode mode )
+{
+    Q_D( RadioStationModel );
+    const bool findFavorite = mode == StationSkip::PreviousFavorite || mode == StationSkip::NextFavorite;
+    const bool findNext = mode == StationSkip::Next || mode == StationSkip::NextFavorite;
+    QList<RadioStation> list = findFavorite ? d->favorites() : d->mStations.values();
+
+    // Find the previous and next station from current frequency
+    RadioStation previous;
+    RadioStation next;
+    foreach( const RadioStation& station, list ) {
+        const uint testFreq = station.frequency();
+        if ( testFreq == frequency ) {
+            continue;
+        }
+
+        if ( testFreq > frequency ) {
+            next = station;
+            break;
+        }
+        previous = station;
+    }
+
+    // Check if we need to loop around
+    if ( findNext && !next.isValid() ) {
+        next = list.first();
+    } else if ( !findNext && !previous.isValid() ) {
+        previous = list.last();
+    }
+
+    return findNext ? next : previous;
+}
+
+/*!
  * Removes a station by frequency
  */
 void RadioStationModel::removeByFrequency( uint frequency )
@@ -352,17 +367,55 @@
         d->mPresetStorage->deletePreset( tempStation.presetIndex() );
         d->mStations.remove( frequency );
 
-        endRemoveRows();
-
         d->mCurrentStation = NULL;
         d->setCurrentStation( d->mWrapper->currentFrequency() );
 
-        emit stationRemoved( tempStation );
+        endRemoveRows();
+    }
+}
+
+/*!
+ * Public slot
+ * Removes all stations
+ */
+void RadioStationModel::removeAll( RemoveMode mode )
+{
+    Q_D( RadioStationModel );
+    if ( d->mStations.count() == 0 ) {
+        return;
+    }
+
+    if ( mode == RemoveAll ) {
+        beginRemoveRows( QModelIndex(), 0, rowCount() - 1 );
 
-        if ( tempStation.isFavorite() ) {
-            d->mUiEngine.api().monitor().notifyFavoriteCount( favoriteCount() );
+        // Preset utility deletes all presets with index -1
+        bool success = d->mPresetStorage->deletePreset( -1 );
+        Q_UNUSED( success );
+        RADIO_ASSERT( success, "FMRadio", "Failed to remove station" );
+
+        d->mStations.clear();
+        d->mCurrentStation = NULL;
+        d->setCurrentStation( d->mWrapper->currentFrequency() );
+
+        endRemoveRows();
+    } else {
+        foreach( const RadioStation& station, d->mStations ) {
+
+            if ( mode == RemoveLocalStations ) {
+                if ( station.isType( RadioStation::LocalStation ) && !station.isFavorite() ) {
+                    removeStation( station );
+                }
+            } else {
+                if ( station.isFavorite() ) {
+                    RadioStation newStation( station );
+                    newStation.setFavorite( false );
+                    saveStation( newStation );
+                }
+            }
         }
     }
+
+    reset(); // TODO: Remove. this is a workaround to HbGridView update problem
 }
 
 /*!
@@ -384,7 +437,6 @@
     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 {
@@ -399,8 +451,6 @@
 
 //    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->doSaveStation( newStation );
 
@@ -409,7 +459,6 @@
     endInsertRows();
 
 //    emit layoutChanged();
-    emit stationAdded( station );
 }
 
 /*!
@@ -429,12 +478,22 @@
     } else if ( station.isValid() && stationHasChanged && d->mStations.contains( station.frequency() )) {
 
         d->doSaveStation( station, changeFlags.testFlag( RadioStation::PersistentDataChanged ) );
+        d->setCurrentStation( d->mWrapper->currentFrequency() );
 
         emitChangeSignals( station, changeFlags );
     }
 }
 
 /*!
+ * Finds number of favorite stations
+ */
+int RadioStationModel::favoriteCount()
+{
+    Q_D( const RadioStationModel );
+    return d->favorites().count();
+}
+
+/*!
  * Changes the favorite status of a station by its frequency. If the station does
  * not yet exist, it is added.
  */
@@ -468,11 +527,7 @@
             // Emit the signals only after adding the preset and reinitializing the current station
             // because the UI will probably query the current station in its slots that get called.
             addStation( newStation );
-            d->setCurrentStation( frequency );
         }
-
-        Q_D( RadioStationModel );
-        d->mUiEngine.api().monitor().notifyFavoriteCount( favoriteCount() );
     }
 }
 
@@ -486,9 +541,6 @@
     if ( findPresetIndex( presetIndex, station ) != RadioStation::NotFound ) {
         station.setFavorite( favorite );
         saveStation( station );
-
-        Q_D( RadioStationModel );
-        d->mUiEngine.api().monitor().notifyFavoriteCount( favoriteCount() );
     }
 }
 
@@ -502,8 +554,6 @@
     if ( findPresetIndex( presetIndex, station ) != RadioStation::NotFound ) {
         station.setUserDefinedName( name );
         saveStation( station );
-        Q_D( RadioStationModel );
-        d->mUiEngine.api().monitor().notifyName( name );
     }
 }
 
@@ -517,9 +567,6 @@
         RADIO_ASSERT( station.isValid() , "RadioStationModel::setFavorites", "invalid RadioStation");
         setFavoriteByPreset( station.presetIndex(), true );
     }
-
-    Q_D( RadioStationModel );
-    d->mUiEngine.api().monitor().notifyFavoriteCount( favoriteCount() );
 }
 
 /*!
@@ -578,41 +625,6 @@
 }
 
 /*!
- * Public slot
- * Removes all stations
- */
-void RadioStationModel::removeAll()
-{
-    Q_D( RadioStationModel );
-	
-    if ( d->mStations.count() == 0 ) {
-        return;
-    }
-
-    QList<RadioStation> tempStations = d->mStations.values();
-
-    beginRemoveRows( QModelIndex(), 0, rowCount() - 1 );
-
-    // Preset utility deletes all presets with index -1
-    bool success = d->mPresetStorage->deletePreset( -1 );
-    RADIO_ASSERT( success, "FMRadio", "Failed to remove station" );
-
-    d->mStations.clear();
-    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() );
-}
-
-/*!
  * Private slot
  * Timer timeout slot to indicate that the dynamic PS check has ended
  */
@@ -626,7 +638,6 @@
         d->mCurrentStation->setName( d->mCurrentStation->dynamicPsText() );
         d->mCurrentStation->setDynamicPsText( "" );
         saveStation( *d->mCurrentStation );
-        d->mUiEngine.api().monitor().notifyName( d->mCurrentStation->name() );
     }
 }
 
--- a/radioapp/radiouiengine/src/radiostationmodel_p.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/src/radiostationmodel_p.cpp	Tue May 18 11:27:22 2010 +0100
@@ -29,11 +29,6 @@
 #include "radiostation.h"
 #include "radiostation_p.h"
 #include "radiohistorymodel.h"
-#ifndef BUILD_WIN32
-#   include "radiomonitorservice.h"
-#else
-#   include "radiomonitorservice_win32.h"
-#endif
 
 // Constants
 /**
@@ -102,9 +97,6 @@
     if ( oldStation && oldStation->isValid() ) {
         q->emitDataChanged( *oldStation );
     }
-
-    mUiEngine.api().monitor().notifyName( mCurrentStation->name().isEmpty() ? mCurrentStation->frequencyMhz()
-                                                                            : mCurrentStation->name() );
 }
 
 /*!
@@ -121,7 +113,6 @@
     }
     station.setGenre( genre );
     q->saveStation( station );
-    mUiEngine.api().monitor().notifyGenre( mUiEngine.api().genreToString( genre, GenreTarget::HomeScreen ) );
 }
 
 /*!
@@ -193,21 +184,6 @@
 
 /*!
  * \reimp
- * Removes all local stations that are not favorites
- */
-void RadioStationModelPrivate::removeLocalStations()
-{
-    Q_Q( RadioStationModel );
-    foreach( const RadioStation& station, mStations ) {
-        if ( station.isType( RadioStation::LocalStation ) && !station.isFavorite() ) {
-            q->removeStation( station );
-        }
-    }
-    q->reset();
-}
-
-/*!
- * \reimp
  * Sets the PS name to the currently tuned station
  */
 void RadioStationModelPrivate::setCurrentPsName( uint frequency, const QString& name )
@@ -225,7 +201,6 @@
         if ( name.compare( station.name() ) != 0 && !station.isRenamed() ) {
             station.setName( name );
             q->saveStation( station );
-            mUiEngine.api().monitor().notifyName( name );
         }
 
     } else {
@@ -284,7 +259,6 @@
     station.setRadioText( radioText );
     q->saveStation( station );
     mUiEngine.api().historyModel().clearRadioTextPlus();
-    mUiEngine.api().monitor().notifyRadioText( radioText );
 }
 
 /*!
@@ -338,3 +312,17 @@
         RADIO_ASSERT( success, "RadioStationModelPrivate::saveStation", "Failed to add station" );
     }
 }
+
+/*!
+ *
+ */
+QList<RadioStation> RadioStationModelPrivate::favorites() const
+{
+    QList<RadioStation> favoriteList;
+    foreach( const RadioStation& tempStation, mStations ) {
+        if ( tempStation.isFavorite() ) {
+            favoriteList.append( tempStation );
+        }
+    }
+    return favoriteList;
+}
--- a/radioapp/radiouiengine/src/radiouiengine.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/src/radiouiengine.cpp	Tue May 18 11:27:22 2010 +0100
@@ -24,6 +24,7 @@
 #   include <QSettings>
 #else
 #   include <qsysteminfo.h>
+#   include <XQSettingsManager>
 using namespace QtMobility;
 #endif // WIN32_BUILD
 
@@ -34,14 +35,11 @@
 #include "radioenginewrapper.h"
 #include "radiostationmodel.h"
 #include "radiohistorymodel.h"
+#include "radiocarouselmodel.h"
+#include "radiohistoryitem.h"
 #include "radiosettings.h"
 #include "radiostationfiltermodel.h"
 #include "radioscannerengine.h"
-#ifdef BUILD_WIN32
-#   include "radiomonitorservice_win32.h"
-#else
-#   include "radiomonitorservice.h"
-#endif
 
 // Constants
 const QString KPathFormatter = "%1:%2%3";
@@ -49,16 +47,20 @@
 const QString KSongRecognitionApp = "Shazam_0x200265B3.exe";
 const QString KSongRecognitionAppParams = "-listen";
 
+const uint DEFAULT_MIN_FREQUENCY = 87500000;
+const uint RADIO_CENREP_UID = 0x101FF976;
+const uint RADIO_CENREP_FREQUENCY_KEY = 0x00000107;
+
 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" }
@@ -91,11 +93,11 @@
     ,{ 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" }
@@ -128,7 +130,7 @@
     ,{ 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] );
 
 /*!
@@ -154,6 +156,28 @@
 /*!
  *
  */
+uint RadioUiEngine::lastTunedFrequency()
+{
+    uint frequency = DEFAULT_MIN_FREQUENCY;
+
+#ifdef BUILD_WIN32
+    QScopedPointer<QSettings> settings( new QSettings( "Nokia", "QtFmRadio" ) );
+    frequency = settings->value( "CurrentFreq", DEFAULT_MIN_FREQUENCY ).toUInt();
+    if ( frequency == 0 ) {
+        frequency = DEFAULT_MIN_FREQUENCY;
+    }
+#else
+    QScopedPointer<XQSettingsManager> settings( new XQSettingsManager() );
+    XQSettingsKey key( XQSettingsKey::TargetCentralRepository, RADIO_CENREP_UID, RADIO_CENREP_FREQUENCY_KEY );
+    frequency = settings->readItemValue( key, XQSettingsManager::TypeInt ).toUInt();
+#endif
+
+    return frequency;
+}
+
+/*!
+ *
+ */
 RadioUiEngine::RadioUiEngine( QObject* parent ) :
     QObject( parent ),
     d_ptr( new RadioUiEnginePrivate( this ) )
@@ -171,10 +195,19 @@
 /*!
  *
  */
-bool RadioUiEngine::startRadio()
+bool RadioUiEngine::isInitialized() const
+{
+    Q_D( const RadioUiEngine );
+    return !d->mEngineWrapper.isNull();
+}
+
+/*!
+ *
+ */
+bool RadioUiEngine::init()
 {
     Q_D( RadioUiEngine );
-    return d->startRadio();
+    return d->init();
 }
 
 /*!
@@ -189,7 +222,7 @@
 /*!
  * Returns the settings handler owned by the engine
  */
-RadioSettings& RadioUiEngine::settings()
+RadioSettingsIf& RadioUiEngine::settings()
 {
     Q_D( RadioUiEngine );
     return d->mEngineWrapper->settings();
@@ -198,7 +231,7 @@
 /*!
  * Returns the station model
  */
-RadioStationModel& RadioUiEngine::model()
+RadioStationModel& RadioUiEngine::stationModel()
 {
     Q_D( RadioUiEngine );
     return *d->mStationModel;
@@ -210,15 +243,11 @@
 RadioHistoryModel& RadioUiEngine::historyModel()
 {
     Q_D( RadioUiEngine );
-    if ( !d->mHistoryModel ) {
-        d->mHistoryModel = new RadioHistoryModel( *this );
-    }
-
     return *d->mHistoryModel;
 }
 
 /*!
- * Returns the stations list
+ * Creates a new filter model
  */
 RadioStationFilterModel* RadioUiEngine::createNewFilterModel( QObject* parent )
 {
@@ -226,27 +255,31 @@
 }
 
 /*!
+ * Creates a new carousel model
+ */
+RadioCarouselModel* RadioUiEngine::carouselModel()
+{
+    Q_D( RadioUiEngine );
+    if ( !d->mCarouselModel ) {
+        d->mCarouselModel.reset( new RadioCarouselModel( *this, *d->mStationModel ) );
+    }
+
+    return d->mCarouselModel.data();
+}
+
+/*!
  *
  */
-RadioScannerEngine* RadioUiEngine::createScannerEngine()
+RadioScannerEngine* RadioUiEngine::scannerEngine()
 {
     Q_D( RadioUiEngine );
-    if ( d->mScannerEngine.isNull() ) {
+    if ( !d->mScannerEngine ) {
         d->mScannerEngine = new RadioScannerEngine( *d );
     }
     return d->mScannerEngine;
 }
 
 /*!
- * Returns the stations list
- */
-RadioMonitorService& RadioUiEngine::monitor()
-{
-    Q_D( const RadioUiEngine );
-    return *d->mMonitorService;
-}
-
-/*!
  *
  */
 bool RadioUiEngine::isRadioOn() const
@@ -261,7 +294,10 @@
 bool RadioUiEngine::isScanning() const
 {
     Q_D( const RadioUiEngine );
-    return d->mScannerEngine != 0;
+    if ( d->mScannerEngine ) {
+        return d->mScannerEngine->isScanning();
+    }
+    return false;
 }
 
 /*!
@@ -337,6 +373,15 @@
 }
 
 /*!
+ * Sets the mute status
+ */
+void RadioUiEngine::setMute( bool muted )
+{
+    Q_D( RadioUiEngine );
+    d->mEngineWrapper->setMute( muted );
+}
+
+/*!
  *
  */
 QList<RadioStation> RadioUiEngine::stationsInRange( uint minFrequency, uint maxFrequency )
@@ -409,16 +454,35 @@
 }
 
 /*!
+ *
+ */
+uint RadioUiEngine::skipStation( StationSkip::Mode mode, uint startFrequency )
+{
+    Q_D( RadioUiEngine );
+    return d->skip( mode, startFrequency );
+}
+
+/*!
+ *
+ */
+void RadioUiEngine::openMusicStore( const RadioHistoryItem& item, MusicStore store )
+{
+    Q_UNUSED( item );
+    Q_UNUSED( store );
+    //TODO: Integrate to music store
+}
+
+/*!
  * Public slot
  * Tunes to the given frequency
  */
-void RadioUiEngine::tuneFrequency( uint frequency, const int sender )
+void RadioUiEngine::tuneFrequency( uint frequency, const int reason )
 {
     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 );
+        d->mEngineWrapper->tuneFrequency( frequency, reason );
     }
 }
 
@@ -426,13 +490,13 @@
  * Public slot
  * Tunes to the given frequency after a delay
  */
-void RadioUiEngine::tuneWithDelay( uint frequency, const int sender )
+void RadioUiEngine::tuneWithDelay( uint frequency, const int reason )
 {
     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 );
+        d->mEngineWrapper->tuneWithDelay( frequency, reason );
     }
 }
 
@@ -471,7 +535,9 @@
 void RadioUiEngine::toggleMute()
 {
     Q_D( RadioUiEngine );
-    d->mEngineWrapper->toggleMute();
+    if ( !isScanning() ) {
+        d->mEngineWrapper->setMute( !d->mEngineWrapper->isMuted() );
+    }
 }
 
 /*!
@@ -488,45 +554,13 @@
  * Public slot
  *
  */
-void RadioUiEngine::skipPrevious()
-{
-    Q_D( RadioUiEngine );    
-    d->skip( RadioUiEnginePrivate::Previous );
-}
-
-/*!
- * Public slot
- *
- */
-void RadioUiEngine::skipNext()
-{
-    Q_D( RadioUiEngine );
-    d->skip( RadioUiEnginePrivate::Next );
-}
-
-/*!
- * Public slot
- *
- */
-void RadioUiEngine::seekUp()
+void RadioUiEngine::seekStation( int seekDirection )
 {
     if ( isAntennaAttached() ) {
         Q_D( RadioUiEngine );
-        emitSeekingStarted( Seeking::Up );
-        d->mEngineWrapper->startSeeking( Seeking::Up, TuneReason::Seek );
-    }
-}
-
-/*!
- * Public slot
- *
- */
-void RadioUiEngine::seekDown()
-{
-    if ( isAntennaAttached() ) {
-        Q_D( RadioUiEngine );
-        emitSeekingStarted( Seeking::Down );
-        d->mEngineWrapper->startSeeking( Seeking::Down, TuneReason::Seek );
+        Seeking::Direction direction = static_cast<Seeking::Direction>( seekDirection );
+        emitSeekingStarted( direction );
+        d->mEngineWrapper->startSeeking( direction, TuneReason::Seek );
     }
 }
 
@@ -542,6 +576,7 @@
     arguments << KSongRecognitionAppParams;
 
     bool started = QProcess::startDetached( KSongRecognitionApp, arguments );
+    Q_UNUSED( started );
     LOG_ASSERT( started, LOG_FORMAT("RadioUiEngine::launchSongRecognition() failed to start %s", GETSTRING( KSongRecognitionApp ) ) );
 }
 
@@ -559,8 +594,6 @@
 void RadioUiEngine::emitSeekingStarted( Seeking::Direction direction )
 {
     emit seekingStarted( direction );
-    Q_D( RadioUiEngine );
-    d->mMonitorService->notifyRadioStatus( RadioStatus::Seeking );
 }
 
 /*!
--- a/radioapp/radiouiengine/src/radiouiengine_p.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiouiengine/src/radiouiengine_p.cpp	Tue May 18 11:27:22 2010 +0100
@@ -18,7 +18,7 @@
 // System includes
 #include <QApplication>
 #include <QStringList>
-#include <QTime>
+#include <QDateTime>
 #ifndef BUILD_WIN32
 #   include <XQSettingsManager>
 #   include <XQPublishAndSubscribeSettingsKey>
@@ -31,6 +31,8 @@
 #include "radioenginewrapper.h"
 #include "radiostationmodel.h"
 #include "radiostationmodel_p.h"
+#include "radiohistorymodel.h"
+#include "radiocarouselmodel.h"
 #include "radiopresetstorage.h"
 #include "radiosettings.h"
 #include "radiostation.h"
@@ -49,12 +51,7 @@
  *
  */
 RadioUiEnginePrivate::RadioUiEnginePrivate( RadioUiEngine* engine ) :
-    q_ptr( engine ),
-    mEngineWrapper( 0 ),
-    mStationModel( 0 ),
-    mHistoryModel( 0 ),
-    mControlService( 0 ),
-    mMonitorService( 0 )
+    q_ptr( engine )
 {
 }
 
@@ -67,7 +64,8 @@
     XQSettingsManager settingsManager;
     XQPublishAndSubscribeUtils utils( settingsManager );
     XQPublishAndSubscribeSettingsKey radioStartupKey( KRadioPSUid, KRadioStartupKey );
-    utils.deleteProperty( radioStartupKey );
+    bool deleted = utils.deleteProperty( radioStartupKey );
+    LOG_ASSERT( deleted, LOG( "RadioUiEnginePrivate::~RadioUiEnginePrivate(). Failed to delete P&S key" ) );
 #endif
 }
 
@@ -83,27 +81,32 @@
 /*!
  *
  */
-bool RadioUiEnginePrivate::startRadio()
+bool RadioUiEnginePrivate::init()
 {
 #ifndef BUILD_WIN32
-    mControlService = new RadioControlService( *q_ptr );
+    mControlService.reset( new RadioControlService( *q_ptr ) );
 #endif
-    mMonitorService = new RadioMonitorService( *q_ptr );
-    mStationModel = new RadioStationModel( *this );
+    mMonitorService.reset( new RadioMonitorService( *this ) );
+    mStationModel.reset( new RadioStationModel( *this ) );
     mEngineWrapper.reset( new RadioEngineWrapper( mStationModel->stationHandlerIf() ) );
     mEngineWrapper->addObserver( this );
     mPresetStorage.reset( new RadioPresetStorage() );
     mStationModel->initialize( mPresetStorage.data(), mEngineWrapper.data() );
+    mHistoryModel.reset( new RadioHistoryModel( *q_ptr ) );
 
 #ifndef BUILD_WIN32
     // Write the startup timestamp to P&S key for the homescreen widget
     XQSettingsManager settingsManager;
     XQPublishAndSubscribeUtils utils( settingsManager );
     XQPublishAndSubscribeSettingsKey radioStartupKey( KRadioPSUid, KRadioStartupKey );
-    utils.defineProperty( radioStartupKey, XQSettingsManager::TypeVariant );
-    settingsManager.writeItemValue( radioStartupKey, QVariant( QTime::currentTime() ) );   
+    bool defined = utils.defineProperty( radioStartupKey, XQSettingsManager::TypeInt );
+    if ( defined ) {
+        settingsManager.writeItemValue( radioStartupKey, (int)QDateTime::currentDateTime().toTime_t() );
+    }
 #endif
 
+    mMonitorService->init();
+
     return mEngineWrapper->isEngineConstructed();
 }
 
@@ -113,7 +116,6 @@
 void RadioUiEnginePrivate::cancelSeeking()
 {
     mEngineWrapper->cancelSeeking();
-    mMonitorService->notifyRadioStatus( mEngineWrapper->isMuted() ? RadioStatus::Muted : RadioStatus::Playing );
 }
 
 /*!
@@ -131,7 +133,6 @@
 {
     Q_Q( RadioUiEngine );
     q->emitTunedToFrequency( frequency, reason );
-    mMonitorService->notifyRadioStatus( RadioStatus::Playing );
 }
 
 /*!
@@ -195,7 +196,6 @@
 {
     Q_Q( RadioUiEngine );
     q->emitMuteChanged( muted );
-    mMonitorService->notifyRadioStatus( muted ? RadioStatus::Muted : RadioStatus::Playing );
 }
 
 /*!
@@ -214,7 +214,6 @@
 {
     Q_Q( RadioUiEngine );
     q->emitAntennaStatusChanged( connected );
-    mMonitorService->notifyAntennaStatus( connected );
 }
 
 /*!
@@ -222,7 +221,7 @@
  */
 void RadioUiEnginePrivate::skipPrevious()
 {
-    skip( Previous );
+    skip( StationSkip::PreviousFavorite );
 }
 
 /*!
@@ -230,55 +229,23 @@
  */
 void RadioUiEnginePrivate::skipNext()
 {
-    skip( Next );
+    skip( StationSkip::NextFavorite );
 }
 
 /*!
- * Tunes to next or previous favorite preset
+ * Tunes to next or previous station
  */
-void RadioUiEnginePrivate::skip( RadioUiEnginePrivate::TuneDirection direction )
+uint RadioUiEnginePrivate::skip( StationSkip::Mode mode, uint startFrequency )
 {
-    LOG_FORMAT( "RadioUiEnginePrivate::skip: direction: %d", direction );
-
-    //TODO: Refactor to go through RadioStationModel
-    QList<uint> favorites;
-    const uint currentFreq = mStationModel->currentStation().frequency();
-
-    // Find all favorites
-    foreach( const RadioStation& station, mStationModel->list() ) {
-        if ( station.isFavorite() && station.frequency() != currentFreq ) {
-            favorites.append( station.frequency() );
-        }
-    }
-
-    const int favoriteCount = favorites.count();
-    if ( favoriteCount == 0 ) {
-        return;
+    LOG_FORMAT( "RadioUiEnginePrivate::skip: mode: %d", mode );
+    if ( startFrequency == 0 ) {
+        startFrequency = mEngineWrapper->currentFrequency();
     }
 
-    // Find the previous and next favorite from current frequency
-    uint previous = 0;
-    uint next = 0;
-    foreach( uint favorite, favorites ) {
-        if ( favorite > currentFreq ) {
-            next = favorite;
-            break;
-        }
-        previous = favorite;
-    }
+    const uint newFrequency = mStationModel->findClosest( startFrequency, mode ).frequency();
 
-    if ( direction == RadioUiEnginePrivate::Previous ) {
-        if ( previous == 0 ) {
-            previous = favorites.last();
-        }
-        LOG_FORMAT( "RadioUiEnginePrivate::skip. CurrentFreq: %u, tuning to: %u", currentFreq, previous );
-        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, TuneReason::Unspecified );
-    }    
+    LOG_FORMAT( "RadioUiEnginePrivate::skip. CurrentFreq: %u, tuning to: %u", startFrequency, newFrequency );
+    mEngineWrapper->tuneFrequency( newFrequency, TuneReason::Skip );
+    return newFrequency;
 }
 
--- a/radioapp/radiowidgets/inc/radiofrequencyscanner.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/inc/radiofrequencyscanner.h	Tue May 18 11:27:22 2010 +0100
@@ -26,8 +26,7 @@
 class HbProgressDialog;
 class RadioStation;
 class RadioUiEngine;
-class RadioXmlUiLoader;
-class RadioMainWindow;
+class RadioWindow;
 class RadioFrequencyStrip;
 class RadioStationCarousel;
 class RadioScannerEngine;
@@ -42,48 +41,50 @@
     RadioFrequencyScanner( RadioUiEngine& uiEngine, QObject* parent );
     ~RadioFrequencyScanner();
 
-    void startScanning( RadioXmlUiLoader& uiLoader );
+    void startScanning();
+
+    bool isAlive() const;
 
 signals:
 
     void frequencyScannerFinished();
 
+public slots:
+
+    void cancelScanning();
+
 private slots:
 
     void delayedStart();
-    void updateScanAndSaveProgress( const RadioStation& station );
+    void updateScanProgress( const RadioStation& station );
     void continueScanning();
-    void scanAndSavePresetsCancelled();
     void restoreUiControls();
 
 private:
 
-    void scanAndSavePresetsFinished();
+    void finishScanning();
 
 private: // data
 
     /*!
      * Reference to the Ui engine
      */
-    RadioUiEngine&      mUiEngine;
+    RadioUiEngine&                      mUiEngine;
 
-    bool                mInTuningView;
+    bool                                mInMainView;
 
-    QScopedPointer<RadioScannerEngine> mScannerEngine;
+    QScopedPointer<RadioScannerEngine>  mScannerEngine;
 
     /**
      * Scanning progress note
      * Own.
      */
-    HbProgressDialog*     mScanningProgressNote;
+    QScopedPointer<HbProgressDialog>    mScanningProgressNote;
 
-    /**
-     * Amount of radio stations found
-     */
-    uint                mChannelCount;
+    int                                 mStripScrollTime;
+    int                                 mCarouselScrollTime;
 
-    int                 mStripScrollTime;
-    int                 mCarouselScrollTime;
+    bool                                mIsAlive;
 
 };
 
--- a/radioapp/radiowidgets/inc/radiofrequencystrip.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/inc/radiofrequencystrip.h	Tue May 18 11:27:22 2010 +0100
@@ -36,7 +36,7 @@
 class RadioStation;
 class HbPushButton;
 class QTimer;
-
+class QModelIndex;
 
 // Class declaration
 class WIDGETS_DLL_EXPORT RadioFrequencyStrip : public RadioStripBase
@@ -49,7 +49,7 @@
 
 public:
 
-    RadioFrequencyStrip( RadioUiEngine* engine = 0 );
+    RadioFrequencyStrip();
 
     void setLeftButtonIcon( const HbIcon& leftButtonIcon );
     HbIcon leftButtonIcon() const;
@@ -57,34 +57,32 @@
     void setRightButtonIcon( const HbIcon& rightButtonIcon );
     HbIcon rightButtonIcon() const;
 
-    uint frequency( bool* favorite = 0 ) const;
+    void init( RadioUiEngine* engine );
 
-    void connectLeftButton( const char* signal, QObject* receiver, const char* slot );
-    void connectRightButton( const char* signal, QObject* receiver, const char* slot );
-
-
+    void setFrequency( const uint frequency, int reason = 0 );
+    uint frequency() const;
 
 public slots:
 
-    void favoriteChanged( const RadioStation& station );
-    void stationAdded( const RadioStation& station );
-    void stationRemoved( const RadioStation& station );
-    void setFrequency( const uint frequency, int reason = 0 );
+    void updateFavorite( const RadioStation& station );
     void setScanningMode( bool isScanning );
 
 signals:
 
-    void frequencyChanged( uint frequency, int sender ); // sender is always CommandSender::RadioFrequencyStrip
-    void frequencyIsFavorite( bool favorite );
-    void swipedLeft();
-    void swipedRight();
+    void frequencyChanged( uint frequency, int reason ); // reason is always CommandSender::RadioFrequencyStrip
+    void skipRequested( int skipMode );
+    void seekRequested( int seekDirection );
 
 private slots:
 
-    void leftGesture( int speedPixelsPerSecond );
-    void rightGesture( int speedPixelsPerSecond );
-    void panGesture( const QPointF& point );
+    void updateStation( const QModelIndex& parent, int first, int last );
+    void initEmptyItems();
+    void handleLeftButton();
+    void handleLongLeftButton();
+    void handleRightButton();
+    void handleLongRightButton();
     void toggleButtons();
+    void checkIllegalPos();
 
 private:
 
@@ -104,8 +102,7 @@
 
     void mousePressEvent( QGraphicsSceneMouseEvent* event );
     void mouseReleaseEvent( QGraphicsSceneMouseEvent* event );
-
-//    virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event);
+    void gestureEvent( QGestureEvent* event );
 
 // New functions
 
@@ -113,7 +110,7 @@
 
     void initSelector();
 
-    void initItems();
+    void initPositions();
 
     void initButtons();
 
@@ -121,37 +118,33 @@
 
     void updateFavorites( RadioFrequencyItem* item );
 
+    void updateItems();
+
     QPixmap drawPixmap( uint frequency, QList<RadioStation> stations, RadioFrequencyItem* item );
 
     void emitFrequencyChanged( uint frequency );
 
-    void emitFavoriteSelected( bool favoriteSelected );
-
     int selectorPos() const;
 
     void scrollToFrequency( uint frequency, int time = 0 );
 
+    void hideButtons();
+    void showButtons();
+
 private: // data
 
     class FrequencyPos
     {
     public:
-        explicit FrequencyPos( int pos, bool favorite, bool localStation, RadioFrequencyItem* item ) :
+        explicit FrequencyPos( int pos, RadioFrequencyItem* item ) :
             mPosition( pos ),
-            mFavorite( favorite ),
-            mLocalStation( localStation ),
             mItem( item ) {}
 
-
         FrequencyPos() :
             mPosition( 0 ),
-            mFavorite( false ),
-            mLocalStation( false ),
             mItem( 0 ) {}
 
         int                     mPosition;
-        bool                    mFavorite;
-        bool                    mLocalStation;
         RadioFrequencyItem*     mItem;
 
     };
@@ -176,8 +169,6 @@
 
     QList<RadioFrequencyItem*>  mFrequencyItems;
 
-    bool                        mFavoriteSelected;
-
     /**
      * Container to help map a frequency to strip position and additional information about the frequency.
      * In the default region contains an item for every valid frequency from 87.50 Mhz to 108.00 Mhz with
@@ -202,8 +193,9 @@
     HbPushButton*               mRightButton;
 
     QTimer*                     mButtonTimer;
+    bool                        mButtonsVisible;
 
-    bool                        mIsPanGesture;
+    bool                        mUserIsScrolling;
 
     QColor                      mForegroundColor;
 
--- a/radioapp/radiowidgets/inc/radiohistoryview.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/inc/radiohistoryview.h	Tue May 18 11:27:22 2010 +0100
@@ -18,6 +18,10 @@
 #ifndef RADIOHISTORYVIEW_H
 #define RADIOHISTORYVIEW_H
 
+// System includes
+#include <HbIcon>
+#include <QScopedPointer>
+
 // User includes
 #include "radioviewbase.h"
 #include "radiowidgetsexport.h"
@@ -26,43 +30,63 @@
 class RadioXmlUiLoader;
 class HbListView;
 class HbAction;
-class RadioStationFilterModel;
 class HbAbstractViewItem;
+class RadioHistoryModel;
+class RadioHistoryItem;
 
 // Class declaration
 class WIDGETS_DLL_EXPORT RadioHistoryView : public RadioViewBase
 {
     Q_OBJECT
+    Q_PROPERTY(HbIcon nonTaggedIcon READ nonTaggedIcon WRITE setNonTaggedIcon)
+    Q_PROPERTY(HbIcon taggedIcon READ taggedIcon WRITE setTaggedIcon)
 
 public:
 
-    explicit RadioHistoryView();
+    RadioHistoryView();
+    ~RadioHistoryView();
+
+    void setNonTaggedIcon( const HbIcon& nonTaggedIcon );
+    HbIcon nonTaggedIcon() const;
+
+    void setTaggedIcon( const HbIcon& taggedIcon );
+    HbIcon taggedIcon() const;
 
 private slots:
 
     void deckButtonPressed();
     void clearList();
     void updateVisibilities();
-    void listItemClicked( const QModelIndex& index );
-    void listItemLongPressed( HbAbstractViewItem* item, const QPointF& coords );
+    void showContextMenu( const QModelIndex& index );
+    void toggleTagging();
+    void openOviStore();
+    void openOtherStore();
+    void addSongs();            // Temporary test code
+    void addOneSong();          // Temporary test code
 
 private:
 
 // from base class RadioViewBase
 
-    void init( RadioXmlUiLoader* uiLoader, RadioMainWindow* mainWindow );
+    void init();
     void setOrientation();
+    void userAccepted();
 
 // New functions
 
-    void showContextMenu( const QModelIndex& index );
+    RadioHistoryModel& historyModel() const;
 
 private: //data
 
-    HbListView*                 mHistoryList;
-    HbAction*                   mAllSongsButton;
-    HbAction*                   mTaggedSongsButton;
-    RadioStationFilterModel*    mFilterModel;
+    HbListView*                         mHistoryList;
+    HbAction*                           mAllSongsButton;
+    HbAction*                           mTaggedSongsButton;
+    QScopedPointer<RadioHistoryItem>    mSelectedItem;
+    int                                 mCurrentRow;
+    HbIcon                              mNonTaggedIcon;
+    HbIcon                              mTaggedIcon;
+
+    int                                 mSongIndex; // Temporary test variable
 
 };
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/inc/radiomainview.h	Tue May 18 11:27:22 2010 +0100
@@ -0,0 +1,74 @@
+/*
+* 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 RADIOMAINVIEW_H
+#define RADIOMAINVIEW_H
+
+// System includes
+#include <QScopedPointer>
+
+// User includes
+#include "radioviewbase.h"
+#include "radiowidgetsexport.h"
+
+// Forward declarations
+class RadioWindow;
+class RadioStationModel;
+class HbPushButton;
+class RadioUiLoader;
+class RadioFrequencyScanner;
+class RadioStationCarousel;
+class RadioFrequencyStrip;
+
+// Class declaration
+class WIDGETS_DLL_EXPORT RadioMainView : public RadioViewBase
+    {
+    Q_OBJECT
+
+public:
+
+    explicit RadioMainView();
+    ~RadioMainView();
+
+    void setScanningMode( bool scanning );
+
+private slots:
+
+    void setFrequencyFromWidget( uint frequency, int reason );
+    void setFrequencyFromEngine( uint frequency, int reason );
+    void skip( int skipMode );
+    void toggleScanning();
+    void seekingStarted();
+    void updateAudioRoute( bool loudspeaker );
+
+private:
+
+// from base class RadioViewBase
+
+    void init();
+    void setOrientation();
+    void userAccepted();
+
+private: // data
+
+    QScopedPointer<RadioFrequencyScanner>   mFrequencyScanner;
+    RadioStationCarousel*                   mCarousel;
+    RadioFrequencyStrip*                    mFrequencyStrip;
+
+    };
+
+#endif // RADIOMAINVIEW_H
--- a/radioapp/radiowidgets/inc/radiomainwindow.h	Tue May 11 12:31:43 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,126 +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 _RADIOMAINWINDOW_H_
-#define _RADIOMAINWINDOW_H_
-
-// System includes
-#include <HbMainWindow>
-#include <HbEffect>
-#include <QPointer>
-
-#include <QScopedPointer>
-
-// User includes
-#include "radiowidgetsexport.h"
-
-// Forward declarations
-class RadioViewBase;
-class RadioUiEngine;
-class HbVolumeSliderPopup;
-
-typedef QScopedPointer<HbVolumeSliderPopup> VolumeSliderPtr;
-
-/**
- * QPointer is used to store the views because it tracks the deletion of the object and nulls
- * the reference. Transient view like RadioHistoryView is destroyed after they are closed
- * and QPointer will notice it.
- */
-typedef QPointer<RadioViewBase> ViewPtr;
-
-typedef QSharedPointer<HbView> DummyViewPtr;
-
-// Class declaration
-class WIDGETS_DLL_EXPORT RadioMainWindow : public HbMainWindow
-{
-    Q_OBJECT
-    Q_DISABLE_COPY( RadioMainWindow )
-
-public:
-
-    RadioMainWindow( QWidget *parent = 0 );
-
-    ~RadioMainWindow();
-
-    bool isOfflineUsageAllowed();
-
-    void showErrorMessage( const QString& text );
-
-    void init( RadioUiEngine* uiEngine );
-
-    RadioUiEngine& uiEngine();
-
-    QString orientationSection();
-
-public slots:
-
-    void activateTuningView();
-
-    void activateStationsView();
-
-    void activateHistoryView();
-
-private slots:
-
-    void updateOrientation( Qt::Orientation orientation );
-    void showVolumeLevel( int volume );
-    void updateAntennaStatus( bool connected );
-
-private:
-
-// New functions
-
-    void activateView( ViewPtr& aMember, const QString& docmlFile, Hb::ViewSwitchFlags flags = Hb::ViewSwitchDefault );
-
-    DummyViewPtr prepareToShowDialog();
-    void dialogShown( DummyViewPtr pointer );
-
-private: // data
-
-    /*!
-     * Pointer to the UI engine
-     */
-    RadioUiEngine*  mUiEngine;
-
-    /**
-     * Tuning view.
-     * Own.
-     */
-    ViewPtr         mTuningView;
-
-    /**
-     * Stations view
-     * Own.
-     */
-    ViewPtr         mStationsView;
-
-    /**
-     * Play history view
-     * Own.
-     */
-    ViewPtr         mHistoryView;
-
-    /**
-     * Pointer to the volume slider
-     * Own.
-     */
-    VolumeSliderPtr mVolSlider;
-
-};
-
-
-#endif // _RADIOMAINWINDOW_H_
--- a/radioapp/radiowidgets/inc/radiostationcarousel.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/inc/radiostationcarousel.h	Tue May 18 11:27:22 2010 +0100
@@ -26,15 +26,30 @@
 
 // User includes
 #include "radiowidgetsexport.h"
+#include "radio_global.h"
 
 // Forward declarations
 class RadioUiEngine;
+class RadioUiLoader;
 class RadioStation;
 class RadioStationItem;
 class RadioStationCarousel;
-class RadioStationModel;
+class RadioCarouselModel;
 class RadioFadingLabel;
 class QTimeLine;
+class HbLabel;
+
+namespace CarouselInfoText
+{
+    enum Type
+    {
+        None,
+        ConnectAntenna,
+        NoFavorites,
+        Seeking,
+        Scanning
+    };
+}
 
 // Class declaration
 class ScanningHelper : public QObject
@@ -76,6 +91,15 @@
 
 public:
 
+    enum ScrollFlag
+    {
+        Default         = 0,
+        NoAnim          = 1 << 0,
+        NoSignal        = 1 << 1,
+        UpdateItem      = 1 << 2
+    };
+    Q_DECLARE_FLAGS( ScrollMode, ScrollFlag )
+
     RadioStationCarousel( RadioUiEngine* uiEngine = 0 );
 
     void setFavoriteIcon( const HbIcon& favoriteIcon );
@@ -87,9 +111,11 @@
     void setAutoScrollTime( const int time );
     int autoScrollTime() const;
 
-    void init( RadioUiEngine* uiEngine );
+    void init( RadioUiLoader& uiLoader, RadioUiEngine* uiEngine );
 
-    void setStationModel( RadioStationModel* stationModel );
+    void setCarouselModel( RadioCarouselModel* carouselModel );
+
+    void setFrequency( uint frequency, int reason );
 
     RadioUiEngine* uiEngine();
 
@@ -99,31 +125,35 @@
     bool isInScanningMode() const;
 
     void cleanRdsData();
+
+    void updateCurrentItem();
+
     void animateNewStation( const RadioStation& station );
-    void setItemVisibility( bool visible );
+
+    void setItemVisible( bool visible );
+
+    void setInfoText( CarouselInfoText::Type type );
+    void clearInfoText();
 
 signals:
 
-    void frequencyChanged( uint frequency, int commandSender );
+    void frequencyChanged( uint frequency, int reason );
     void scanAnimationFinished();
 
 public slots:
 
-    void setFrequency( uint frequency );
     void updateAntennaStatus( bool connected );
 
 private slots:
 
     void update( const RadioStation& station );
     void updateRadioText( const RadioStation& station );
-    void leftGesture( int speedPixelsPerSecond );
-    void rightGesture( int speedPixelsPerSecond );
     void insertFrequency( const QModelIndex& parent, int first, int last );
+    void prepareToRemoveFrequency( const QModelIndex& parent, int first, int last );
     void removeFrequency( const QModelIndex& parent, int first, int last );
     void updateFrequencies();
-    void updateLoopedPos();
-    void radioTextPlusCheckEnded();
-    void delayedScroll();
+    void timerFired();
+    void openContextMenu( HbAbstractViewItem* item, const QPointF& coords );
 
 #ifdef USE_DEBUGGING_CONTROLS
     void setRdsAvailable( bool available );
@@ -133,42 +163,57 @@
 
 // from base class QGraphicsItem
 
-    void mouseMoveEvent( QGraphicsSceneMouseEvent* event );
-    void mouseReleaseEvent( QGraphicsSceneMouseEvent* event );
-    void resizeEvent( QGraphicsSceneResizeEvent* event );
+    void mousePressEvent( QGraphicsSceneMouseEvent* event );
+
+    void gestureEvent( QGestureEvent* event );
+
+// New functions
+
+    void initToLastTunedFrequency();
+
+    void updateClampingStyle();
+
+    void initCurrentStationItem();
 
     RadioStationItem* currentStationItem();
 
-    RadioStationModel* stationModel() const;
+    RadioCarouselModel* carouselModel() const;
+
+    void scrollToIndex( const QModelIndex& index, ScrollMode mode = Default );
 
-    void scrollToIndex( const QModelIndex& index, int time );
+    void updatePos( int offset );
+
+    void skip( StationSkip::Mode mode );
 
 private: // data
 
+    enum TimerMode { NoTimer, RtPlusCheck, InfoText };
+
     RadioUiEngine*          mUiEngine;
 
     bool                    mAntennaAttached;
 
     int                     mAutoScrollTime;
 
-    qreal                   mPreviousButtonPos;
-
-    bool                    mMovingLeft;
-
-    RadioStationItem*       mCurrentItem;
-
     QMap<uint,QModelIndex>  mModelIndexes;
 
     HbIcon                  mFavoriteIcon;
     HbIcon                  mNonFavoriteIcon;
 
-    QTimer*                 mRadioTextTimer;
+    QTimer*                 mGenericTimer;
+    TimerMode               mTimerMode;
 
     QString                 mRadioTextHolder;
-    
-    int                     mScrollPos;
 
     ScanningHelper*         mScanningHelper;
+
+    HbLabel*                mInfoText;
+
+    RadioStationItem*       mCurrentItem;
+
+    CarouselInfoText::Type  mInfoTextType;
+
+    int                     mPanStartPos;
 	
 #ifdef USE_DEBUGGING_CONTROLS
     RadioFadingLabel*       mRdsLabel;
@@ -176,4 +221,6 @@
 
 };
 
+Q_DECLARE_OPERATORS_FOR_FLAGS( RadioStationCarousel::ScrollMode )
+
 #endif // RADIOSTATIONCAROUSEL_H
--- a/radioapp/radiowidgets/inc/radiostationitem.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/inc/radiostationitem.h	Tue May 18 11:27:22 2010 +0100
@@ -49,6 +49,7 @@
     void update( const RadioStation* station = 0 );
     void setFrequency( uint frequency );
     void cleanRdsData();
+    void handleLongPress( const QPointF& coords );
 
 private slots:
 
--- a/radioapp/radiowidgets/inc/radiostationsview.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/inc/radiostationsview.h	Tue May 18 11:27:22 2010 +0100
@@ -27,15 +27,16 @@
 #include "radiowidgetsexport.h"
 
 // Forward declarations
-class RadioMainWindow;
+class RadioWindow;
 class RadioStationModel;
 class HbListView;
 class HbPushButton;
 class RadioBannerLabel;
 class HbAbstractViewItem;
-class RadioXmlUiLoader;
+class RadioUiLoader;
 class RadioStation;
 class RadioStationFilterModel;
+class RadioFrequencyScanner;
 
 // Class declaration
 class WIDGETS_DLL_EXPORT RadioStationsView : public RadioViewBase
@@ -63,16 +64,20 @@
     void updateCurrentStation();
     void deckButtonPressed();
     void startScanning();
+    void finishScanning();
     void updateControlVisibilities();
-    void rename();          //contextmenu
-    void toggleFavorite();  //contextmenu
-    void deleteStation();   //contextmenu
+    void clearList();
+    void rename();          // Called from context menu
+    void toggleFavorite();  // Called from context menu
+    void deleteStation();   // Called from context menu
+    void renameDone( HbAction* action );
 
 private:
 
 // from base class RadioViewBase
 
-    void init( RadioXmlUiLoader* uiLoader, RadioMainWindow* mainWindow );
+    void init();
+    void userAccepted();
 
 // from base class QGraphicsWidget
 
@@ -84,24 +89,29 @@
 
 private: //data
 
-    RadioStationModel*              mModel;
+    RadioStationModel*                      mModel;
 
-    RadioStationFilterModel*        mFilterModel;
+    RadioStationFilterModel*                mFilterModel;
 
-    HbAction*                       mScanStationsAction;
-    HbAction*                       mClearListAction;
+    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;
 
-    QScopedPointer<RadioStation>    mSelectedStation;
+    QScopedPointer<RadioFrequencyScanner>   mFrequencyScanner;
+
+    enum UserQuestion { NoQuestion, DeleteStation, StartScanning, ClearList };
+    UserQuestion                            mCurrentQuestion;
 
 };
 
--- a/radioapp/radiowidgets/inc/radiostripbase.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/inc/radiostripbase.h	Tue May 18 11:27:22 2010 +0100
@@ -49,7 +49,7 @@
 
 protected:
 
-    RadioStripBase( QGraphicsItem* parent );
+    RadioStripBase( QGraphicsItem* parent = 0 );
 
 // from base class QGraphicsWidget
 
@@ -71,7 +71,7 @@
     virtual void updateItemPrimitive( QGraphicsItem* itemToUpdate, int itemIndex ) = 0;
     virtual QGraphicsItem* createItemPrimitive( QGraphicsItem *parent ) = 0;
 
-    virtual void scrollPosChanged( QPointF newPosition );
+    virtual void scrollPosChanged( QPointF newPosition ) = 0;
 
     void moveAllItemsToPool();
 
--- a/radioapp/radiowidgets/inc/radiotuningview.h	Tue May 11 12:31:43 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +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 _TUNINGVIEW_H_
-#define _TUNINGVIEW_H_
-
-// System includes
-
-// User includes
-#include "radioviewbase.h"
-#include "radiowidgetsexport.h"
-
-// Forward declarations
-class RadioMainWindow;
-class RadioStationModel;
-class HbPushButton;
-class RadioXmlUiLoader;
-class RadioFrequencyScanner;
-class RadioStationCarousel;
-
-// Class declaration
-class WIDGETS_DLL_EXPORT RadioTuningView : public RadioViewBase
-    {
-    Q_OBJECT
-
-public:
-
-    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( RadioXmlUiLoader* uiLoader, RadioMainWindow* mainWindow );
-    void setOrientation();
-
-// New functions
-
-private: // data
-
-    RadioFrequencyScanner*        mFrequencyScanner;
-    RadioStationCarousel*         mCarousel;
-
-    };
-
-#endif // _TUNINGVIEW_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/inc/radiouiloader.h	Tue May 18 11:27:22 2010 +0100
@@ -0,0 +1,129 @@
+/*
+* 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 RADIOUILOADER_H_
+#define RADIOUILOADER_H_
+
+// System includes
+#include <HbDocumentLoader>
+
+// Constants
+
+namespace DOCML
+{
+    static QString FILE_MAINVIEW                    = ":/layout/mainview.docml";
+    static QString FILE_STATIONSVIEW                = ":/layout/stationsview.docml";
+    static QString FILE_HISTORYVIEW                 = ":/layout/historyview.docml";
+
+    // Generic XML UI definitions
+    static QString NAME_VIEW                        = "view";
+    static QString SECTION_PORTRAIT                 = "portrait";
+    static QString SECTION_LANDSCAPE                = "landscape";
+    static QString NAME_LOUDSPEAKER_ACTION          = "loudspeaker_action";
+
+    // RadioMainView
+    static QString MV_NAME_HISTORYVIEW_ACTION       = "mv:historyview_action";
+    static QString MV_NAME_STATION_CAROUSEL         = "mv:station_carousel";
+    static QString MV_NAME_FREQUENCY_STRIP          = "mv:frequency_strip";
+    static QString MV_NAME_STATIONS_BUTTON          = "mv:stations_button";
+    static QString MV_NAME_SCAN_BUTTON              = "mv:scan_button";
+    static QString MV_NAME_SPEAKER_BUTTON           = "mv:loudspeaker_button";
+    static QString MV_SECTION_NO_ANTENNA            = "mv:no_antenna";
+    static QString MV_SECTION_SEEKING               = "mv:seeking";
+    static QString MV_SECTION_SCANNING              = "mv:scanning";
+    static QString MV_SECTION_NO_FAVORITES          = "mv:no_favorites";
+    static QString MV_SECTION_NORMAL                = "mv:normal";
+
+    // RadioStationsView
+    static QString SV_NAME_HEADING_BANNER           = "sv:heading_banner";
+    static QString SV_NAME_STATIONS_LIST            = "sv:stations_list";
+    static QString SV_NAME_FAVORITES_BUTTON         = "sv:favorite_stations_button";
+    static QString SV_NAME_LOCALS_BUTTON            = "sv:local_stations_button";
+    static QString SV_NAME_SCAN_ACTION              = "sv:scan_action";
+    static QString SV_NAME_CLEAR_LIST_ACTION        = "sv:clear_list_action";
+    static QString SV_NAME_SCAN_BUTTON              = "sv:scan_button";
+
+    static QString SV_SECTION_SHOW_ALL_STATIONS     = "show_all_stations";
+    static QString SV_SECTION_SHOW_FAVORITES        = "show_favorites";
+    static QString SV_SECTION_SHOW_SCAN_TEXT        = "show_scan_text";
+    static QString SV_SECTION_HIDE_SCAN_TEXT        = "hide_scan_text";
+
+    // RadioStationsView Context Menu
+    static QString NAME_CONTEXT_MENU                = "sv:context_menu";
+    static QString NAME_CONTEXT_RENAME              = "sv:rename_action";
+    static QString NAME_CONTEXT_FAVORITE            = "sv:toggle_favorite_action";
+    static QString NAME_CONTEXT_DELETE              = "sv:delete_action";
+    static QString NAME_INPUT_QUERY                 = "sv:station_name_query";
+
+    // Station Carousel
+    static QString MV_NAME_INFO_FIRST_ROW           = "mv:InfoFirstRow";
+    static QString MV_NAME_INFO_SECOND_ROW          = "mv:InfoSecondRow";
+    static QString MV_NAME_INFO_THIRD_ROW           = "mv:InfoThirdRow";
+    static QString MV_NAME_INFO_FOURTH_ROW          = "mv:InfoFourthRow";
+    static QString MV_NAME_INFO_TEXT                = "mv:info_text";
+
+    // History View
+    static QString HV_NAME_CLEAR_LIST_ACTION        = "hv:clear_list_action";
+    static QString HV_NAME_HISTORY_LIST             = "hv:history_list";
+    static QString HV_NAME_ALL_SONGS_BUTTON         = "hv:all_songs_button";
+    static QString HV_NAME_TAGGED_SONGS_BUTTON      = "hv:tagged_songs_button";
+    static QString HV_SECTION_SHOW_LIST             = "hv:show_list";
+    static QString HV_SECTION_HIDE_LIST             = "hv:hide_list";
+    static QString HV_SECTION_HISTORY_MODE          = "hv:history_mode";
+    static QString HV_SECTION_FAVORITE_MODE         = "hv:tagged_mode";
+    static QString HV_NAME_CONTEXT_MENU             = "hv:context_menu";
+
+    // History View Context Menu
+    static QString HV_NAME_CONTEXT_TAG              = "hv:toggle_tag_action";
+    static QString HV_NAME_CONTEXT_SEARCH           = "hv:search_from_other_store_action";
+
+}
+
+// Class declaration
+class RadioUiLoader : public HbDocumentLoader
+{
+public:
+
+    RadioUiLoader();
+
+    /*!
+     * Returns the requested widget casted to correct type
+     *
+     * @param name Name of the widget
+     * @return Pointer to the widget
+     */
+    template<class T>
+    T* findWidget( QString name )
+    {
+        return qobject_cast<T*>( HbDocumentLoader::findWidget( name ) );
+    }
+
+    /*!
+     * Returns the requested object casted to correct type
+     *
+     * @param name Name of the object
+     * @return Pointer to the object
+     */
+    template<class T>
+    T* findObject( QString name )
+    {
+        return qobject_cast<T*>( HbDocumentLoader::findObject( name ) );
+    }
+
+};
+
+#endif // RADIOUILOADER_H_
--- a/radioapp/radiowidgets/inc/radiouiutilities.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/inc/radiouiutilities.h	Tue May 18 11:27:22 2010 +0100
@@ -24,6 +24,7 @@
 // Forward declarations
 class RadioFrequencyStrip;
 class RadioStationCarousel;
+class RadioFrequencyScanner;
 
 struct EffectInfo
 {
@@ -51,9 +52,11 @@
 
     static RadioFrequencyStrip* frequencyStrip();
     static RadioStationCarousel* carousel();
+    static bool isScannerAlive();
 
     static void setFrequencyStrip( RadioFrequencyStrip* frequencyStrip );
     static void setCarousel( RadioStationCarousel* carousel );
+    static void setFrequencyScanner( RadioFrequencyScanner* scanner );
 
 private:
 
@@ -64,9 +67,11 @@
 
 private: // data
 
-    QPointer<RadioFrequencyStrip> mFrequencyStrip;
+    QPointer<RadioFrequencyStrip>   mFrequencyStrip;
 
-    QPointer<RadioStationCarousel> mCarousel;
+    QPointer<RadioStationCarousel>  mCarousel;
+
+    QPointer<RadioFrequencyScanner> mScanner;
 
 };
 
--- a/radioapp/radiowidgets/inc/radioviewbase.h	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/inc/radioviewbase.h	Tue May 18 11:27:22 2010 +0100
@@ -26,9 +26,9 @@
 // User includes
 
 // Forward declarations
-class RadioMainWindow;
+class RadioWindow;
 class RadioStationModel;
-class RadioXmlUiLoader;
+class RadioUiLoader;
 class HbAction;
 
 // Constants
@@ -51,7 +51,11 @@
 
     virtual ~RadioViewBase();
 
-    virtual void init( RadioXmlUiLoader* uiLoader, RadioMainWindow* mainWindow );
+    void setMembers( RadioUiLoader* uiLoader, RadioWindow* mainWindow );
+
+    virtual void init() = 0;
+
+    bool isInitialized() const;
 
     bool isTransient() const;
 
@@ -63,6 +67,10 @@
     void activatePreviousView();
     void quit();
 
+private slots:
+
+    void handleUserAnswer( HbAction* answer );   // Needed by HbMessageBox inconvenience API
+
 protected:
 
 // New functinos
@@ -77,9 +85,12 @@
 
     void loadSection( const QString& docml, const QString& section );
 
+    void askQuestion( const QString& question );
+
 private:
 
     virtual void setOrientation();
+    virtual void userAccepted();
 
 protected: // data
 
@@ -87,13 +98,15 @@
      * Pointer to the main window.
      * Not own.
      */
-    RadioMainWindow*                    mMainWindow;
+    RadioWindow*                        mMainWindow;
 
     /**
      * Pointer to the XML UI (DocML) loader
      * Own.
      */
-    QScopedPointer<RadioXmlUiLoader>    mUiLoader;
+    QScopedPointer<RadioUiLoader>       mUiLoader;
+
+    bool                                mInitialized;
 
     /**
      * Flag indicating whether or not the view is transient
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/inc/radiowindow.h	Tue May 18 11:27:22 2010 +0100
@@ -0,0 +1,120 @@
+/*
+* 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 _RADIOWINDOW_H_
+#define _RADIOWINDOW_H_
+
+// System includes
+#include <HbMainWindow>
+#include <HbEffect>
+#include <QPointer>
+#include <QScopedPointer>
+
+// User includes
+#include "radiowidgetsexport.h"
+
+// Forward declarations
+class RadioViewBase;
+class RadioUiEngine;
+class HbVolumeSliderPopup;
+
+typedef QScopedPointer<HbVolumeSliderPopup> VolumeSliderPtr;
+
+/**
+ * QPointer is used to store the views because it tracks the deletion of the object and nulls
+ * the reference. Transient view like RadioHistoryView is destroyed after they are closed
+ * and QPointer will notice it.
+ */
+typedef QPointer<RadioViewBase> ViewPtr;
+
+// Class declaration
+class WIDGETS_DLL_EXPORT RadioWindow : public HbMainWindow
+{
+    Q_OBJECT
+    Q_DISABLE_COPY( RadioWindow )
+
+public:
+
+    RadioWindow( QWidget *parent = 0 );
+
+    ~RadioWindow();
+
+    void showErrorMessage( const QString& text );
+
+    void init();
+
+    RadioUiEngine& uiEngine();
+
+    QString orientationSection();
+
+public slots:
+
+    void activateMainView();
+
+    void activateStationsView();
+
+    void activateHistoryView();
+
+private slots:
+
+    void initView();
+    void updateOrientation( Qt::Orientation orientation );
+    void showVolumeLevel( int volume );
+    void updateAntennaStatus( bool connected );
+
+private:
+
+// New functions
+
+    void activateView( ViewPtr& aMember, const QString& docmlFile, Hb::ViewSwitchFlags flags = Hb::ViewSwitchDefault );
+
+private: // data
+
+    /*!
+     * Pointer to the UI engine
+     * Own
+     */
+    QScopedPointer<RadioUiEngine>   mUiEngine;
+
+    /**
+     * Tuning view.
+     * Own.
+     */
+    ViewPtr                         mMainView;
+
+    /**
+     * Stations view
+     * Own.
+     */
+    ViewPtr                         mStationsView;
+
+    /**
+     * Play history view
+     * Own.
+     */
+    ViewPtr                         mHistoryView;
+
+    /**
+     * Pointer to the volume slider
+     * Own.
+     */
+    VolumeSliderPtr                 mVolSlider;
+
+};
+
+
+#endif // _RADIOWINDOW_H_
--- a/radioapp/radiowidgets/inc/radioxmluiloader.h	Tue May 11 12:31:43 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,131 +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 RADIOXMLUILOADER_H_
-#define RADIOXMLUILOADER_H_
-
-// System includes
-#include <HbDocumentLoader>
-
-// Constants
-
-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
-
-    // 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* 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* 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";
-
-    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";
-
-    // 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";
-
-    // 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";
-
-    // 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";
-
-}
-
-// Class declaration
-class RadioXmlUiLoader : public HbDocumentLoader
-{
-public:
-
-    RadioXmlUiLoader();
-
-    /*!
-     * Returns the requested widget casted to correct type
-     *
-     * @param name Name of the widget
-     * @return Pointer to the widget
-     */
-    template<class T>
-    T* findWidget( QString name )
-    {
-        return qobject_cast<T*>( HbDocumentLoader::findWidget( name ) );
-    }
-
-    /*!
-     * Returns the requested object casted to correct type
-     *
-     * @param name Name of the object
-     * @return Pointer to the object
-     */
-    template<class T>
-    T* findObject( QString name )
-    {
-        return qobject_cast<T*>( HbDocumentLoader::findObject( name ) );
-    }
-
-};
-
-#endif // RADIOXMLUILOADER_H_
--- a/radioapp/radiowidgets/radiowidgets.pro	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/radiowidgets.pro	Tue May 18 11:27:22 2010 +0100
@@ -33,11 +33,11 @@
 
 # Input
 HEADERS     += radiowidgetsexport.h
-HEADERS     += radiomainwindow.h
+HEADERS     += radiowindow.h
 HEADERS     += radiouiutilities.h
 HEADERS     += radioviewbase.h
-HEADERS     += radioxmluiloader.h
-HEADERS     += radiotuningview.h
+HEADERS     += radiouiloader.h
+HEADERS     += radiomainview.h
 HEADERS     += radiostripbase.h
 HEADERS     += radiofrequencystrip.h
 HEADERS     += radiofrequencyitem.h
@@ -49,11 +49,11 @@
 HEADERS     += radiostationitem.h
 HEADERS     += radiohistoryview.h
 
-SOURCES     += radiomainwindow.cpp
+SOURCES     += radiowindow.cpp
 SOURCES     += radiouiutilities.cpp
 SOURCES     += radioviewbase.cpp
-SOURCES     += radioxmluiloader.cpp
-SOURCES     += radiotuningview.cpp
+SOURCES     += radiouiloader.cpp
+SOURCES     += radiomainview.cpp
 SOURCES     += radiostripbase.cpp
 SOURCES     += radiofrequencystrip.cpp
 SOURCES     += radiofrequencyitem.cpp
--- a/radioapp/radiowidgets/res/fmradioui.qrc	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/res/fmradioui.qrc	Tue May 18 11:27:22 2010 +0100
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <RCC>
     <qresource>
-        <file>layout/tuningview.docml</file>
+        <file>layout/mainview.docml</file>
         <file>layout/stationsview.docml</file>
         <file>layout/historyview.docml</file>
         <file>layout/radiostationitem.css</file>
@@ -35,6 +35,8 @@
         <file>images/qtg_fr_lcd.svg</file>
         <file>images/qtg_fr_lcd_overlay.svg</file>
         <file>images/qtg_fr_tuner.svg</file>
+        <file>images/qtg_mono_tag.svg</file>
+        <file>images/pri_small_tag.svg</file>
     </qresource>
     
 </RCC>
--- a/radioapp/radiowidgets/res/images/pri_small_star_inactive.svg	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/res/images/pri_small_star_inactive.svg	Tue May 18 11:27:22 2010 +0100
@@ -1,10 +1,22 @@
 <?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"/>
+<!-- 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,24.393l-9.27,4.873L7.5,18.943L0,11.632l10.365-1.506L15,0.734l4.635,9.392L30,11.632l-7.5,7.311
+	l1.77,10.322L15,24.393z M19.621,22.867l-0.881-5.146l3.738-3.645l-5.168-0.751L15,8.643l-2.311,4.683l-5.168,0.751l3.739,3.645
+	l-0.882,5.146L15,20.438L19.621,22.867z"/>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="15" y1="2.9937" x2="15" y2="27.438">
+	<stop  offset="0" style="stop-color:#F0F0F0"/>
+	<stop  offset="1" style="stop-color:#C8C8C8"/>
+</linearGradient>
+<path fill="url(#SVGID_1_)" d="M27.852,12.331l-8.881-1.291L15,2.994l-3.971,8.046l-8.88,1.291l6.425,6.263l-1.516,8.844L15,23.262
+	l7.941,4.176l-1.516-8.844L27.852,12.331z M15,21.567l-5.95,3.128l1.136-6.625l-4.814-4.692l6.653-0.967L15,6.383l2.975,6.028
+	l6.653,0.967l-4.813,4.692l1.135,6.625L15,21.567z"/>
 <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_tag.svg	Tue May 18 11:27:22 2010 +0100
@@ -0,0 +1,27 @@
+<?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="M2,12.731V4.094L4.094,2h8.638l15.683,15.684l-10.731,10.73L2,12.731z M6.904,5.952
+	c-0.525,0-0.952,0.427-0.952,0.952s0.427,0.953,0.952,0.953S7.857,7.43,7.857,6.904S7.43,5.952,6.904,5.952L6.904,5.952z"/>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="14.9995" y1="3" x2="14.9995" y2="27.0005">
+	<stop  offset="0" style="stop-color:#4EDEFF"/>
+	<stop  offset="1" style="stop-color:#048CC6"/>
+</linearGradient>
+<path fill="url(#SVGID_1_)" d="M27,17.684L12.317,3h-7.81L3,4.508v7.81L17.683,27L27,17.684z M6.904,8.857
+	c-1.078,0-1.952-0.875-1.952-1.953s0.874-1.952,1.952-1.952s1.953,0.874,1.953,1.952S7.982,8.857,6.904,8.857z"/>
+<path opacity="0.4" fill="#FFFFFF" d="M6.904,9.857c1.078,0,1.953-0.875,1.953-1.953c0-0.174-0.03-0.34-0.072-0.5
+	C8.563,8.239,7.809,8.857,6.904,8.857S5.247,8.239,5.025,7.404c-0.043,0.16-0.073,0.326-0.073,0.5
+	C4.952,8.982,5.826,9.857,6.904,9.857z"/>
+<polygon opacity="0.4" fill="#FFFFFF" points="12.317,4 26.5,18.184 27,17.684 12.317,3 4.508,3 3,4.508 3,5.508 4.508,4 "/>
+<rect x="10.07" y="12.386" transform="matrix(0.7071 0.7071 -0.7071 0.7071 16.0477 -6.6462)" fill="#FFFFFF" width="11.951" height="7.321"/>
+<polygon opacity="0.4" fill="#FFFFFF" points="17.683,22.859 9.232,14.429 8.662,15 17.683,24 23.43,18.254 22.859,17.684 "/>
+<polygon opacity="0.15" points="14.409,10.373 22.289,18.254 22.859,17.684 14.409,9.232 9.232,14.41 9.803,14.98 "/>
+<rect fill="none" width="30" height="30"/>
+</svg>
--- a/radioapp/radiowidgets/res/images/qtg_fr_lcd.svg	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/res/images/qtg_fr_lcd.svg	Tue May 18 11:27:22 2010 +0100
@@ -8,23 +8,26 @@
 	 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"/>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="169.0005" y1="223" x2="169.0005" y2="1.0005">
+	<stop  offset="0" style="stop-color:#365E8F"/>
+	<stop  offset="0.3758" style="stop-color:#20344E"/>
 	<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">
+<path fill="url(#SVGID_1_)" d="M6,223c-2.757,0-5-2.243-5-5V6c0-2.757,2.243-5,5-5h326c2.757,0,5,2.243,5,5v212c0,2.757-2.243,5-5,5
+	H6z"/>
+<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="0" y1="112" x2="338" y2="112">
+	<stop  offset="0" style="stop-color:#09090D;stop-opacity:0.5"/>
+	<stop  offset="0.4" style="stop-color:#09090D;stop-opacity:0"/>
+	<stop  offset="0.6" style="stop-color:#09090D;stop-opacity:0"/>
+	<stop  offset="1" style="stop-color:#09090D;stop-opacity:0.5"/>
+</linearGradient>
+<path fill="url(#SVGID_2_)" 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"/>
+<linearGradient id="SVGID_3_" 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
+<path fill="url(#SVGID_3_)" 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>
--- a/radioapp/radiowidgets/res/images/qtg_fr_lcd_overlay.svg	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/res/images/qtg_fr_lcd_overlay.svg	Tue May 18 11:27:22 2010 +0100
@@ -8,12 +8,21 @@
 	 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 id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="169" y1="103" x2="169" y2="0">
+	<stop  offset="0" style="stop-color:#3E6DA3"/>
+	<stop  offset="1" style="stop-color:#E0EFFF"/>
 </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
+<path fill="url(#SVGID_1_)" fill-opacity="0.4" d="M332,0H6C2.691,0,0,2.691,0,6v83.972C48.129,98.19,106.315,103,169,103
+	s120.871-4.81,169-13.028V6C338,2.691,335.309,0,332,0z"/>
+<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="0" y1="112" x2="338" y2="112">
+	<stop  offset="0" style="stop-color:#00000D;stop-opacity:0.7"/>
+	<stop  offset="0.25" style="stop-color:#00000D;stop-opacity:0"/>
+	<stop  offset="0.75" style="stop-color:#00000D;stop-opacity:0"/>
+	<stop  offset="1" style="stop-color:#00000D;stop-opacity:0.7"/>
+</linearGradient>
+<path fill="url(#SVGID_2_)" 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"/>
+<path fill="#FFFFFF" fill-opacity="0.2" d="M332,0H6C2.7,0,0,2.7,0,6v212c0,3.3,2.7,6,6,6h326c3.3,0,6-2.7,6-6V6
+	C338,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"
+	/>
 </svg>
--- a/radioapp/radiowidgets/res/images/qtg_fr_tuner.svg	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/res/images/qtg_fr_tuner.svg	Tue May 18 11:27:22 2010 +0100
@@ -5,31 +5,31 @@
 ]>
 <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">
+	 x="0px" y="0px" width="338px" height="60px" viewBox="0 0 338 60" enable-background="new 0 0 338 60" 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 id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="169.0005" y1="60" x2="169.0005" y2="4.882813e-004">
+	<stop  offset="0" style="stop-color:#2A4A70"/>
+	<stop  offset="1" style="stop-color:#09090D"/>
 </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">
+<rect fill="url(#SVGID_1_)" width="338" height="60"/>
+<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="1" y1="58" x2="337" y2="58">
 	<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"/>
+<rect x="1" y="57" fill="url(#SVGID_2_)" fill-opacity="0.8" width="336" height="2"/>
+<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="1" y1="30" x2="337" y2="30">
+	<stop  offset="0" style="stop-color:#00000D;stop-opacity:0.9"/>
+	<stop  offset="0.3" style="stop-color:#00000D;stop-opacity:0"/>
+	<stop  offset="0.7" style="stop-color:#00000D;stop-opacity:0"/>
+	<stop  offset="1" style="stop-color:#00000D;stop-opacity:0.9"/>
 </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">
+<rect x="1" y="1" fill="url(#SVGID_3_)" width="336" height="58"/>
+<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="169" y1="21" x2="169" 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"/>
+<rect x="3" y="3" fill="url(#SVGID_4_)" fill-opacity="0.5" width="332" height="18"/>
+<path opacity="0.4" fill="#FFFFFF" d="M337,1v58H1V1H337 M338,0H0v60h338V0L338,0z"/>
 </svg>
--- a/radioapp/radiowidgets/res/layout/historyview.docml	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/res/layout/historyview.docml	Tue May 18 11:27:22 2010 +0100
@@ -1,22 +1,41 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<hbdocument context="RadioHistoryView" version="0.9">
+<hbdocument context="RadioHistoryView" version="1.0">
     <object name="hv:clear_list_action" type="HbAction">
-        <string name="text" locid="txt_rad_opt_clear_list" />
+        <string locid="txt_rad_opt_clear_list" name="text"/>
+    </object>
+    <object name="hv:add_songs_action" type="HbAction">
+        <string value="DEBUG: Add Songs" name="text"/>
+    </object>
+    <object name="loudspeaker_action" type="HbAction">
+        <string locid="txt_common_opt_activate_loudspeaker" name="text"/>
     </object>
     <object name="exit_action" type="HbAction">
-        <string name="text" locid="txt_common_opt_exit" />
+        <string locid="txt_common_opt_exit" name="text"/>
     </object>
     <object name="hv:all_songs_button" type="HbAction">
         <bool name="checkable" value="TRUE"/>
-        <string name="text" locid="txt_rad_button_recently_played_songs" />
+        <string locid="txt_rad_button_recently_played_songs" name="text"/>
     </object>
     <object name="hv:tagged_songs_button" type="HbAction">
         <bool name="checkable" value="TRUE"/>
-        <string name="text" locid="txt_rad_button_tagged_songs" />
+        <string locid="txt_rad_button_tagged_songs" name="text"/>
+    </object>
+    <object name="hv:toggle_tag_action" type="HbAction">
+        <string locid="txt_rad_menu_tag_song" name="text"/>
+    </object>
+    <object name="hv:search_from_ovi_store_action" type="HbAction">
+        <string locid="txt_rad_menu_search_from_music_store" name="text"/>
+    </object>
+    <object name="hv:search_from_other_store_action" type="HbAction">
+        <string locid="txt_rad_menu_search_from_other_store" name="text"/>
     </object>
     <widget name="view" plugin="radiowidgetsplugin" type="RadioHistoryView">
+        <icon name="nonTaggedIcon" iconName=":/images/qtg_mono_tag.svg" />
+        <icon name="taggedIcon" iconName=":/images/pri_small_tag.svg" />
         <widget name="hv:menu" role="HbView:menu" type="HbMenu">
             <ref object="hv:clear_list_action" role="HbMenu:addAction"/>
+            <ref object="hv:add_songs_action" role="HbMenu:addAction"/>
+            <ref object="loudspeaker_action" role="HbMenu:addAction"/>
             <ref object="exit_action" role="HbMenu:addAction"/>
         </widget>
         <widget name="hv:toolbar" role="HbView:toolBar" type="HbToolBar">
@@ -27,25 +46,40 @@
         <widget name="content" role="HbView:widget" type="HbWidget">
             <widget name="hv:heading_banner" plugin="radiowidgetsplugin" type="RadioBannerLabel">
                 <sizehint height="30" type="MAXIMUM"/>
-                <string name="text" locid="txt_rad_subhead_play_history" />
-            </widget>
+                <string name="plainText" locid="txt_rad_subhead_play_history" />
+            </widget>            
             <widget name="hv:stacked_widget" type="HbWidget">
                 <widget name="hv:history_list" type="HbListView">
                     <sizehint height="320" type="PREFERRED" width="240"/>
                     <bool name="visible" value="FALSE"/>
                 </widget>
-                <widget name="hv:empty_text" type="HbLabel">
-                    <enums name="textWrapping" value="TextWordWrap"/>
-                    <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
-                    <sizehint height="320" type="PREFERRED" width="240"/>
-                    <string name="plainText" locid="txt_rad_info_recently_played_songs_collects_song_i" />
-                    <fontspec name="fontSpec" role="Title" textheight="33.5"/>
+                <widget name="hv:empty_container" type="HbWidget">
+                    <widget name="hv:empty_title" type="HbLabel">
+                        <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+                        <string locid="txt_rad_info_play_history_is_empty" name="plainText"/>
+                        <fontspec name="fontSpec" role="Title" textheight="33.5"/>
+                    </widget>
+                    <widget name="hv:empty_text" type="HbLabel">
+                        <enums name="textWrapping" value="TextWordWrap"/>
+                        <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+                        <sizehint height="320" type="PREFERRED" width="240"/>
+                        <string locid="txt_rad_info_recently_played_songs_collects_song2" name="plainText"/>
+                        <fontspec name="fontSpec" role="Title" textheight="33.5"/>
+                    </widget>
+                    <layout orientation="Vertical" spacing="var(hb-param-margin-gene-middle-vertical)" type="linear">
+                        <contentsmargins bottom="var(hb-param-margin-gene-bottom)" left="var(hb-param-margin-gene-left)" right="var(hb-param-margin-gene-right)" top="var(hb-param-margin-gene-top)"/>
+                        <stretchitem stretchfactor="2"/>
+                        <linearitem itemname="hv:empty_title"/>
+                        <stretchitem stretchfactor="1"/>
+                        <linearitem itemname="hv:empty_text"/>
+                        <stretchitem stretchfactor="2"/>
+                    </layout>
                 </widget>
                 <layout type="stacked">
                     <stackitem itemname="hv:history_list"/>
-                    <stackitem itemname="hv:empty_text"/>
+                    <stackitem itemname="hv:empty_container"/>
                 </layout>
-            </widget>            
+            </widget>
             <layout type="anchor">
                 <anchoritem dst="hv:heading_banner" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
                 <anchoritem dst="hv:heading_banner" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
@@ -56,58 +90,72 @@
                 <anchoritem dst="hv:stacked_widget" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
             </layout>
         </widget>
-        <string name="title" locid="txt_rad_title_fm_radio"/>
+        <string locid="txt_rad_title_fm_radio" name="title"/>
+    </widget>
+    <widget name="hv:context_menu" type="HbMenu">
+        <ref object="hv:toggle_tag_action" role="HbMenu:addAction"/>
+        <ref object="hv:search_from_ovi_store_action" role="HbMenu:addAction"/>
+        <ref object="hv:search_from_other_store_action" role="HbMenu:addAction"/>
     </widget>
     <connect receiver="view" sender="exit_action" signal="triggered()" slot="quit()"/>
     <connect receiver="hv:tagged_songs_button" sender="hv:all_songs_button" signal="triggered()" slot="toggle()"/>
     <connect receiver="hv:all_songs_button" sender="hv:tagged_songs_button" signal="triggered()" slot="toggle()"/>
-    <connect receiver="view" sender="hv:history_list" signal="activated(QModelIndex)" slot="listItemClicked(QModelIndex)"/>
-    <connect receiver="view" sender="hv:history_list" signal="longPressed(HbAbstractViewItem*,const QPointF)" slot="listItemLongPressed(HbAbstractViewItem*,const QPointF)"/>
-    <section name="show_list">
-        <widget name="hv:history_list" type="HbListView">
+    <connect receiver="view" sender="hv:history_list" signal="activated(QModelIndex)" slot="showContextMenu(QModelIndex)"/>
+    <connect receiver="view" sender="hv:toggle_tag_action" signal="triggered()" slot="toggleTagging()"/>
+    <connect receiver="view" sender="hv:search_from_ovi_store_action" signal="triggered()" slot="openOviStore()"/>
+    <connect receiver="view" sender="hv:search_from_other_store_action" signal="triggered()" slot="openOtherStore()"/>
+    <section name="hv:show_list">
+        <widget name="hv:history_list">
             <bool name="visible" value="TRUE"/>
         </widget>
-        <widget name="hv:empty_text" type="HbLabel">
+        <widget name="hv:empty_container">
             <bool name="visible" value="FALSE"/>
         </widget>
         <object name="hv:clear_list_action">
             <bool name="visible" value="TRUE"/>
         </object>
     </section>
-    <section name="hide_list">
-        <widget name="hv:history_list" type="HbListView">
+    <section name="hv:hide_list">
+        <widget name="hv:history_list">
             <bool name="visible" value="FALSE"/>
         </widget>
-        <widget name="hv:empty_text" type="HbLabel">
+        <widget name="hv:empty_container">
             <bool name="visible" value="TRUE"/>
         </widget>
         <object name="hv:clear_list_action">
             <bool name="visible" value="FALSE"/>
         </object>
     </section>
-    <section name="history_mode">
+    <section name="hv:history_mode">
         <object name="hv:all_songs_button">
             <bool name="checked" value="TRUE"/>
         </object>
         <object name="hv:tagged_songs_button">
             <bool name="checked" value="FALSE"/>
         </object>
-        <widget name="hv:empty_text" type="HbLabel">
+        <widget name="hv:empty_text">
             <string locid="txt_rad_info_recently_played_songs_collects_song2" name="plainText"/>
         </widget>
+        <widget name="hv:heading_banner">
+            <string name="plainText" locid="txt_rad_subhead_play_history" />
+        </widget>
     </section>
-    <section name="favorite_mode">
+    <section name="hv:tagged_mode">
         <object name="hv:all_songs_button">
             <bool name="checked" value="FALSE"/>
         </object>
         <object name="hv:tagged_songs_button">
             <bool name="checked" value="TRUE"/>
         </object>
-        <widget name="hv:empty_text" type="HbLabel">
+        <widget name="hv:empty_text">
             <string locid="txt_rad_info_you_can_add_song_to_the_tagged_songs" name="plainText"/>
         </widget>
+        <widget name="hv:heading_banner">
+            <string name="plainText" locid="txt_rad_button_tagged_songs" />
+        </widget>
     </section>
     <metadata activeUIState="Common ui state" display="NHD portrait" unit="un">
         <uistate name="Common ui state" sections="#common"/>
+        <dummydata objectName="hv:history_list" section="#common" value="app_list_template5"/>
     </metadata>
 </hbdocument>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/res/layout/mainview.docml	Tue May 18 11:27:22 2010 +0100
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument context="RadioMainView" version="0.9">
+    <object name="mv:historyview_action" type="HbAction">
+        <string name="text" locid="txt_rad_opt_play_history" />
+    </object>
+    <object name="exit_action" type="HbAction">
+        <string name="text" locid="txt_common_opt_exit" />
+    </object>
+    <widget name="view" plugin="radiowidgetsplugin" type="RadioMainView">
+        <widget name="menu" role="HbView:menu" type="HbMenu">
+            <ref object="mv:historyview_action" role="HbMenu:addAction"/>
+            <ref object="exit_action" role="HbMenu:addAction"/>
+        </widget>
+        <widget name="mv:container" role="HbView:widget" type="HbWidget">
+            <widget name="mv:info_area" type="HbWidget">
+                <widget name="mv:carousel_background" type="HbLabel">
+                    <icon name="icon" iconName=":/images/qtg_fr_lcd.svg" />
+                    <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+                </widget>
+                <widget name="mv:carousel_overlay" type="HbLabel">
+                    <icon name="icon" iconName=":/images/qtg_fr_lcd_overlay.svg" />
+                    <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+                </widget>
+                <widget name="mv:station_carousel" plugin="radiowidgetsplugin" type="RadioStationCarousel">
+                    <icon name="favoriteIcon" iconName=":/images/pri_small_star.svg" />
+                    <icon name="nonFavoriteIcon" iconName=":/images/pri_small_star_inactive.svg" />
+                    <widget name="mv:info_text" type="HbLabel" >
+                        <bool name="visible" value="FALSE"/>
+                        <sizehint height="200" width="300" type="PREFERRED"/>
+                    </widget>
+                </widget>
+                <layout type="stacked">
+                    <stackitem itemname="mv:carousel_background"/>
+                    <stackitem itemname="mv:carousel_overlay"/>
+                    <stackitem itemname="mv:station_carousel"/>
+                </layout>
+            </widget>
+            <widget name="mv:control_widget" type="HbWidget" >
+                <widget name="mv:stations_button" type="HbPushButton">
+                    <bool name="stretched" value="TRUE" />
+                    <string name="text" locid="txt_rad_button_stations" />
+                    <icon name="icon" iconName="qtg_mono_radio_stations.svg" />
+                </widget>
+                <widget name="mv:scan_button" type="HbPushButton">
+                    <bool name="stretched" value="TRUE" />
+                    <string name="text" locid="txt_rad_button_search_all_stations" />
+                    <icon name="icon" iconName="qtg_mono_station_scan.svg" />
+                </widget>
+                <widget name="mv:loudspeaker_button" type="HbPushButton">
+                    <bool name="stretched" value="TRUE" />
+                    <string name="text" locid="txt_rad_button_activate_loudspeaker" />
+                    <icon name="icon" iconName="qtg_mono_speaker.svg" />
+                </widget>
+                <layout orientation="Vertical" spacing="var(hb-param-margin-gene-middle-vertical)" type="linear">
+                    <contentsmargins bottom="var(hb-param-margin-gene-bottom)" left="var(hb-param-margin-gene-left)" right="var(hb-param-margin-gene-right)" top="var(hb-param-margin-gene-top)"/>
+                    <linearitem itemname="mv:stations_button"/>
+                    <stretchitem stretchfactor="1"/>
+                    <linearitem itemname="mv:scan_button"/>
+                    <stretchitem stretchfactor="1"/>
+                    <linearitem itemname="mv:loudspeaker_button"/>
+                </layout>
+            </widget>
+            <widget name="mv:frequency_area" type="HbWidget">
+                 <widget name="mv:frequency_background" type="HbLabel">
+                    <icon name="icon" iconName=":/images/qtg_fr_tuner.svg" />
+                    <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+                </widget>
+               <widget name="mv:frequency_strip" plugin="radiowidgetsplugin" type="RadioFrequencyStrip">
+                    <icon name="leftButtonIcon" iconName=":/images/qtg_mono_previous.svg" />
+                    <icon name="rightButtonIcon" iconName=":/images/qtg_mono_next.svg" />
+                    <integer name="autoScrollTime" value="1000"/>
+                </widget>
+                <layout type="stacked">
+                    <stackitem itemname="mv:frequency_background"/>
+                    <stackitem itemname="mv:frequency_strip"/>
+                </layout>
+            </widget>
+        </widget>
+        <string name="title" locid="txt_rad_title_fm_radio"/>
+    </widget>
+    <connect receiver="view" sender="exit_action" signal="triggered()" slot="quit()"/>
+    <section name="portrait">
+        <widget name="mv:frequency_area">
+            <sizehint height="70" width="360" type="PREFERRED"/>
+        </widget>
+        <widget name="mv:info_area">
+            <sizehint height="280" type="PREFERRED" width="360"/>
+        </widget>
+        <widget name="mv:control_widget">
+            <sizehint height="280" type="PREFERRED" width="300"/>
+        </widget>
+        <widget name="mv:container">
+            <layout orientation="Vertical" spacing="0un" type="linear">
+                <linearitem itemname="mv:info_area"/>
+                <linearitem itemname="mv:frequency_area"/>
+                <linearitem itemname="mv:control_widget"/>
+            </layout>
+        </widget>
+    </section>
+    <section name="landscape">
+        <widget name="mv:frequency_area">
+            <sizehint height="50" width="640" type="PREFERRED"/>
+        </widget>
+        <widget name="mv:info_area">
+            <sizehint height="300" type="PREFERRED" width="230"/>
+        </widget>
+        <widget name="mv:control_widget">
+            <sizehint height="230" type="PREFERRED" width="230"/>
+        </widget>
+        <widget name="mv:container">
+            <layout spacing="0un" type="grid">
+                <griditem column="0" itemname="mv:info_area" row="0"/>
+                <griditem column="1" itemname="mv:control_widget" row="0"/>
+                <griditem column="0" itemname="mv:frequency_area" row="1" column_span="2" />
+            </layout>
+        </widget>
+    </section>
+    <!-- Scanning layout -->
+    <section name="mv:scanning">
+        <object name="mv:historyview_action">
+            <bool name="visible" value="FALSE"/>
+        </object>
+        <widget name="mv:stations_button">
+            <bool name="visible" value="FALSE"/>
+        </widget>
+        <widget name="mv:scan_button">
+            <string name="text" locid="txt_rad_button_cancel" />
+            <icon name="icon" iconName=" " />
+        </widget>
+        <widget name="mv:loudspeaker_button">
+            <bool name="visible" value="FALSE"/>
+        </widget>
+    </section>
+
+    <!-- Normal layout (not scanning) -->
+    <section name="mv:normal">
+        <object name="mv:historyview_action">
+            <bool name="visible" value="TRUE"/>
+        </object>
+        <widget name="mv:stations_button">
+            <bool name="visible" value="TRUE"/>
+        </widget>
+        <widget name="mv:scan_button">
+            <string name="text" locid="txt_rad_button_search_all_stations" />
+            <icon name="icon" iconName="qtg_mono_station_scan.svg" />
+        </widget>
+        <widget name="mv:loudspeaker_button">
+            <bool name="visible" value="TRUE"/>
+        </widget>
+    </section>
+
+    <metadata activeUIState="portrait" display="NHD portrait" unit="un">
+        <uistate name="Common ui state" sections="#common"/>
+        <uistate name="portrait" sections="#common portrait"/>
+        <uistate name="landscape" sections="#common landscape"/>
+    </metadata>
+</hbdocument>
--- a/radioapp/radiowidgets/res/layout/stationsview.docml	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/res/layout/stationsview.docml	Tue May 18 11:27:22 2010 +0100
@@ -23,7 +23,7 @@
     </object>
     <object name="sv:delete_action" type="HbAction">
         <string name="text" locid="txt_common_menu_delete" />
-    </object>    
+    </object>
     <object name="sv:local_stations_button" type="HbAction">
         <bool name="checkable" value="TRUE"/>
         <icon iconName=":/images/removefavoriteicon.png" name="icon"/>
@@ -51,21 +51,43 @@
         <widget name="content" role="HbView:widget" type="HbWidget">
             <widget name="sv:heading_banner" plugin="radiowidgetsplugin" type="RadioBannerLabel">
                 <sizehint height="30" type="MAXIMUM"/>
-                <string name="text" locid="txt_rad_subhead_all_stations" />
+                <string name="plainText" locid="txt_rad_subhead_all_stations" />
             </widget>
             <widget name="sv:stacked_widget" type="HbWidget">
+                <widget name="sv:scan_button" type="HbPushButton">
+                    <bool name="visible" value="TRUE"/>
+                </widget>
+                <widget name="sv:empty_container" type="HbWidget">
+                    <bool name="visible" value="FALSE"/>
+                    <widget name="sv:empty_title" type="HbLabel">
+                        <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+                        <string locid="txt_rad_info_no_stations" name="plainText"/>
+                        <fontspec name="fontSpec" role="Title" textheight="33.5"/>
+                    </widget>
+                    <widget name="sv:empty_text" type="HbLabel">
+                        <enums name="textWrapping" value="TextWordWrap"/>
+                        <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+                        <sizehint height="320" type="PREFERRED" width="240"/>
+                        <string locid="txt_rad_info_no_stations_search_stations_automat" name="plainText"/>
+                        <fontspec name="fontSpec" role="Title" textheight="33.5"/>
+                    </widget>
+                    <layout orientation="Vertical" spacing="var(hb-param-margin-gene-middle-vertical)" type="linear">
+                        <contentsmargins bottom="var(hb-param-margin-gene-bottom)" left="var(hb-param-margin-gene-left)" right="var(hb-param-margin-gene-right)" top="var(hb-param-margin-gene-top)"/>
+                        <stretchitem stretchfactor="2"/>
+                        <linearitem itemname="sv:empty_title"/>
+                        <stretchitem stretchfactor="1"/>
+                        <linearitem itemname="sv:empty_text"/>
+                        <stretchitem stretchfactor="2"/>
+                    </layout>
+                </widget>
                 <widget name="sv:stations_list" type="HbListView">
                     <sizehint height="320" type="PREFERRED" width="240"/>
-                    <bool name="visible" value="FALSE"/>
-                </widget>
-                <widget name="sv:scan_button" type="HbPushButton">
-                    <string name="text" locid="txt_rad_info_no_stations_search_stations_automat" />                    
-                    <string name="state" value="normal"/>
-                    <icon name="background" value=" " />
+                    <bool name="visible" value="TRUE"/>
                 </widget>
                 <layout type="stacked">
+                    <stackitem itemname="sv:scan_button"/>
+                    <stackitem itemname="sv:empty_container"/>
                     <stackitem itemname="sv:stations_list"/>
-                    <stackitem itemname="sv:scan_button"/>
                 </layout>
             </widget>
             <layout type="anchor">
@@ -97,11 +119,12 @@
     <connect receiver="view" sender="sv:rename_action" signal="triggered()" slot="rename()"/>
     <connect receiver="view" sender="sv:toggle_favorite_action" signal="triggered()" slot="toggleFavorite()"/>
     <connect receiver="view" sender="sv:delete_action" signal="triggered()" slot="deleteStation()"/>
+
     <section name="show_scan_text">
         <widget name="sv:stations_list">
             <bool name="visible" value="FALSE"/>
         </widget>
-        <widget name="sv:scan_button">
+        <widget name="sv:empty_container">
             <bool name="visible" value="TRUE"/>
         </widget>
     </section>
@@ -109,7 +132,7 @@
         <widget name="sv:stations_list">
             <bool name="visible" value="TRUE"/>
         </widget>
-        <widget name="sv:scan_button">
+        <widget name="sv:empty_container">
             <bool name="visible" value="FALSE"/>
         </widget>
     </section>
@@ -124,8 +147,14 @@
             <string name="plainText" locid="txt_rad_subhead_all_stations" />
         </widget>
         <widget name="sv:scan_button">
-            <string name="text" locid="txt_rad_info_no_stations_search_stations_automat" />                                                            
-        </widget>        
+            <bool name="visible" value="TRUE"/>
+        </widget>
+        <widget name="sv:empty_title">
+            <string name="plainText" locid="txt_rad_info_no_stations" />
+        </widget>
+        <widget name="sv:empty_text">
+            <string name="plainText" locid="txt_rad_info_no_stations_search_stations_automat" />
+        </widget>
     </section>
     <section name="show_favorites">
         <object name="sv:local_stations_button">
@@ -138,7 +167,13 @@
             <string name="plainText" locid="txt_rad_subhead_favorite_stations" />
         </widget>
         <widget name="sv:scan_button">
-            <string name="text" locid="txt_rad_info_no_favourite_stations" />                                                            
+            <bool name="visible" value="FALSE"/>
+        </widget>
+        <widget name="sv:empty_title">
+            <string name="plainText" locid="txt_rad_info_no_favourite_stations" />
+        </widget>
+        <widget name="sv:empty_text">
+            <string name="plainText" locid="txt_rad_info_no_favourites_add_favourites_to_see" />
         </widget>
     </section>
     <metadata activeUIState="Common ui state" display="NHD portrait" unit="un">
--- a/radioapp/radiowidgets/src/radiofrequencyscanner.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/src/radiofrequencyscanner.cpp	Tue May 18 11:27:22 2010 +0100
@@ -30,8 +30,7 @@
 #include "radiofrequencystrip.h"
 #include "radiostationcarousel.h"
 #include "radiouiutilities.h"
-#include "radiotuningview.h"
-#include "radioxmluiloader.h"
+#include "radiomainview.h"
 
 // Constants
 const int KExtraRoomToMaxValue = 100000;
@@ -42,13 +41,13 @@
 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 ),
+    mInMainView( parent->metaObject()->className() == RadioMainView::staticMetaObject.className() ),
+    mScannerEngine( mUiEngine.scannerEngine() ),
     mStripScrollTime( 0 ),
-    mCarouselScrollTime( 0 )
+    mCarouselScrollTime( 0 ),
+    mIsAlive( false )
 {
+    RadioUiUtilities::setFrequencyScanner( this );
 }
 
 /*!
@@ -56,35 +55,18 @@
  */
 RadioFrequencyScanner::~RadioFrequencyScanner()
 {
-    restoreUiControls();
 }
 
 /*!
  *
  */
-void RadioFrequencyScanner::startScanning( RadioXmlUiLoader& uiLoader )
+void RadioFrequencyScanner::startScanning()
 {
-    mChannelCount = 0;
+    mIsAlive = true;
     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 );
-
+    if ( mInMainView ) {
         mStripScrollTime = frequencyStrip->autoScrollTime();
         mCarouselScrollTime = carousel->autoScrollTime();
 
@@ -95,33 +77,49 @@
         connectAndTest( carousel,               SIGNAL(scanAnimationFinished()),
                         this,                   SLOT(continueScanning()) );
 
-        static_cast<RadioTuningView*>( parent() )->setScanningMode( true );
+        static_cast<RadioMainView*>( parent() )->setScanningMode( true );
         frequencyStrip->setScanningMode( true );
-        frequencyStrip->setFrequency( mUiEngine.minFrequency() );
-        frequencyStrip->setFrequency( mUiEngine.minFrequency() + 100 ); // scanning jamming
     } else {
+        carousel->setCarouselModel( NULL );
+
+        mScanningProgressNote.reset( new HbProgressDialog( HbProgressDialog::ProgressDialog ) ),
         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( mScanningProgressNote.data(),   SIGNAL(cancelled()),
+                        this,                           SLOT(cancelScanning()) );
     }
 
     connectAndTest( mScannerEngine.data(),  SIGNAL(stationFound(RadioStation)),
-                    this,                   SLOT(updateScanAndSaveProgress(RadioStation)) );
+                    this,                   SLOT(updateScanProgress(RadioStation)) );
 
     QTimer::singleShot( 1000, this, SLOT(delayedStart()) );
 }
 
 /*!
+ *
+ */
+bool RadioFrequencyScanner::isAlive() const
+{
+    return mIsAlive;
+}
+
+/*!
+ * Public slot
+ *
+ */
+void RadioFrequencyScanner::cancelScanning()
+{
+    finishScanning();
+}
+
+/*!
  * Private slot
  *
  */
@@ -134,19 +132,19 @@
  * Private slot
  *
  */
-void RadioFrequencyScanner::updateScanAndSaveProgress( const RadioStation& station )
+void RadioFrequencyScanner::updateScanProgress( const RadioStation& station )
 {
     if ( !station.isValid() ) {
-        scanAndSavePresetsFinished();
+        finishScanning();
         return;
     }
 
     const uint frequency = station.frequency();
     LOG_FORMAT( "RadioFrequencyScanner::updateScanAndSaveProgress frequency: %d", frequency );
 
-    if ( mInTuningView ) {
+    if ( mInMainView ) {
 
-        RadioUiUtilities::frequencyStrip()->setFrequency( frequency, TuneReason::Unspecified );
+        RadioUiUtilities::frequencyStrip()->setFrequency( frequency, TuneReason::StationScan );
         RadioUiUtilities::carousel()->animateNewStation( station );
 
     } else {
@@ -158,8 +156,6 @@
             mScanningProgressNote->setProgressValue( frequency );
         }
 
-        ++mChannelCount;
-//        mScanningProgressNote->setText( QString( TRANSLATE( KProgressTitleStationsFound ) ).arg( mChannelCount ) );
         mScannerEngine->continueScanning();
     }    
 }
@@ -177,77 +173,51 @@
  * Private slot
  *
  */
-void RadioFrequencyScanner::scanAndSavePresetsCancelled()
-{
-    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()) );
+    if ( mInMainView ) {
+        RadioUiUtilities::frequencyStrip()->setScanningMode( false );
+        static_cast<RadioMainView*>( parent() )->setScanningMode( false );
+        RadioUiUtilities::carousel()->setScanningMode( false );
+    }
+
+    deleteLater();
 }
 
 /*!
  *
  */
-void RadioFrequencyScanner::scanAndSavePresetsFinished()
+void RadioFrequencyScanner::finishScanning()
 {
+    mScannerEngine->cancel();
+    RadioUiUtilities::setFrequencyScanner( NULL );
+    mIsAlive = false;
     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();
+    if ( mInMainView ) {
+        RadioStationModel& model = mUiEngine.stationModel();
 
         // 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->setFrequency( frequency, TuneReason::StationScan );
+            carousel->setFrequency( frequency, TuneReason::StationScan );
 
             frequencyStrip->setAutoScrollTime( mStripScrollTime );
             carousel->setAutoScrollTime( mCarouselScrollTime );
-        } else {
-            QTimer::singleShot( 100, this, SLOT(restoreUiControls()) );
         }
 
-        QTimer::singleShot( 1000, this, SLOT(deleteLater()) );
+        QTimer::singleShot( 100, this, SLOT(restoreUiControls()) );
 
     } else {
-        mScannerEngine->cancel();
-
         mScanningProgressNote->setProgressValue( mScanningProgressNote->maximum() );
-        mScanningProgressNote->deleteLater();
         deleteLater();
 
-        disconnect( mScanningProgressNote,  SIGNAL(cancelled()),
-                    this,                   SLOT(scanAndSavePresetsCancelled()) );
-
-        carousel->setStationModel( &mUiEngine.model() );
+        carousel->setCarouselModel( mUiEngine.carouselModel() );
     }
 
     disconnect( mScannerEngine.data(),  SIGNAL(stationFound(RadioStation)),
--- a/radioapp/radiowidgets/src/radiofrequencystrip.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/src/radiofrequencystrip.cpp	Tue May 18 11:27:22 2010 +0100
@@ -24,18 +24,19 @@
 #include <QTimer>
 #include <HbColorScheme>
 #include <HbEvent>
+#include <HbSwipeGesture>
 
 #include "radiofrequencystrip.h"
 #include "radiofrequencyitem.h"
 #include "radiouiengine.h"
 #include "radiostation.h"
+#include "radiostationmodel.h"
 #include "radiouiutilities.h"
 #include "radiologger.h"
 
 // Frequency lines
 const int KTabHeightSmall = 10;
 const int KTabHeightBig = 15;
-//const int KTabHeightFavorite = 15;
 const int KTabWidthFavorite = 4;
 const qreal KIndicatorWidth = 2.0;
 
@@ -47,22 +48,22 @@
 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 KPixmapWidth = KWidth + KOneTabDistance;
 const int KHeight = 50;                 //TODO: Remove hardcoding
 
 const int K100Khz = 100000;
 
-//const int KTouchPosThreshold = 30;
+const char* KSlideToLeft        = "SlideToLeft";
+const char* KSlideFromLeft      = "SlideFromLeft";
+const char* KSlideToRight       = "SlideToRight";
+const char* KSlideFromRight     = "SlideFromRight";
+const char* LEFT_BUTTON         = "tv:left_button";
+const char* RIGHT_BUTTON        = "tv:right_button";
 
-const QString KSlideToLeft      = "SlideToLeft";
-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";
+const char* TEXT_COLOR_ATTRIBUTE = "text";
+const int BUTTON_HIDE_TIMEOUT = 500;
+const int BUTTON_SHOW_TIMEOUT = 1000;
 
 /*!
  *
@@ -75,35 +76,27 @@
 /*!
  *
  */
-RadioFrequencyStrip::RadioFrequencyStrip( RadioUiEngine* engine ) :
-    RadioStripBase( 0 ),
-    mUiEngine( engine ),
-    mMinFrequency( mUiEngine ? mUiEngine->minFrequency() : 87500000 ),
-    mMaxFrequency( mUiEngine ? mUiEngine->maxFrequency() : 108000000 ),
-    mFrequencyStepSize( mUiEngine ? mUiEngine->frequencyStepSize() : 100000 ),
-    mFrequency( mUiEngine ? mUiEngine->currentFrequency() : 87500000 ),
+RadioFrequencyStrip::RadioFrequencyStrip() :
+    RadioStripBase(),
+    mUiEngine( NULL ),
+    mMinFrequency( 87500000 ),
+    mMaxFrequency( 108000000 ),
+    mFrequencyStepSize( 100000 ),
+    mFrequency( 87500000 ),
     mSelectorImage( new QGraphicsPixmapItem( this ) ),
     mSeparatorPos( 0.0 ),
     mMaxWidth( 0 ),
     mSelectorPos( 0.0 ),
-    mFavoriteSelected( false ),
     mLeftButton( new HbPushButton( this ) ),
     mRightButton( new HbPushButton( this ) ),
-    mButtonTimer( new QTimer( this ) ),
-    mIsPanGesture( false ),
-    mForegroundColor( HbColorScheme::color( TEXT_COLOR_ATTRIBUTE ) )
+    mButtonTimer( NULL ),
+    mButtonsVisible( true ),
+    mUserIsScrolling( false ),
+    mForegroundColor( Qt::white )//HbColorScheme::color( TEXT_COLOR_ATTRIBUTE ) )
 {
     RadioUiUtilities::setFrequencyStrip( this );
-    mButtonTimer->setInterval( 500 );
-    mButtonTimer->setSingleShot( true );
-    connectAndTest( mButtonTimer, SIGNAL(timeout()), this, SLOT(toggleButtons()) );
 
-    //TODO: Remove. Stepsize hardcoded to 100 Khz in europe region during demo
-    if ( mFrequencyStepSize < K100Khz ) {
-        mFrequencyStepSize = K100Khz;
-    }
-
-    setScrollingStyle( HbScrollArea::PanOrFlick );
+    setScrollingStyle( HbScrollArea::Pan );
     setItemSize( QSizeF( KWidth, KHeight ) );
     setFrictionEnabled( true );
 
@@ -111,9 +104,12 @@
 
     initSelector();
 
-    initItems();
+    initButtons();
 
-    initButtons();
+    initEmptyItems();
+
+    mFrequency = RadioUiEngine::lastTunedFrequency();
+    scrollToFrequency( mFrequency, 0 );
 }
 
 /*!
@@ -123,6 +119,7 @@
 {
     mLeftButtonIcon = leftButtonIcon;
     if ( mLeftButton ) {
+        mLeftButtonIcon.setColor( Qt::white );
         mLeftButton->setIcon( mLeftButtonIcon );
     }
 }
@@ -142,6 +139,7 @@
 {
     mRightButtonIcon = rightButtonIcon;
     if ( mRightButton ) {
+        mRightButtonIcon.setColor( Qt::white );
         mRightButton->setIcon( mRightButtonIcon );
     }
 }
@@ -157,48 +155,83 @@
 /*!
  *
  */
-uint RadioFrequencyStrip::frequency( bool* favorite ) const
+void RadioFrequencyStrip::init( RadioUiEngine* engine )
 {
-    if ( favorite ) {
-        *favorite = mFrequencies.value( mFrequency ).mFavorite;
+    mUiEngine = engine;
+    mMinFrequency       = mUiEngine->minFrequency();
+    mMaxFrequency       = mUiEngine->maxFrequency();
+    mFrequencyStepSize  = mUiEngine->frequencyStepSize();
+    mFrequency          = mUiEngine->currentFrequency();
+    scrollToFrequency( mFrequency, 0 );
+
+    mButtonTimer = new QTimer( this );
+    mButtonTimer->setInterval( BUTTON_HIDE_TIMEOUT );
+    mButtonTimer->setSingleShot( true );
+    connectAndTest( mButtonTimer, SIGNAL(timeout()),
+                    this,         SLOT(toggleButtons()) );
+
+    connectAndTest( mLeftButton,    SIGNAL(clicked()),
+                    this,           SLOT(handleLeftButton()) );
+    connectAndTest( mRightButton,   SIGNAL(clicked()),
+                    this,           SLOT(handleRightButton()) );
+    connectAndTest( mLeftButton,    SIGNAL(longPress(QPointF)),
+                    this,           SLOT(handleLongLeftButton()) );
+    connectAndTest( mRightButton,   SIGNAL(longPress(QPointF)),
+                    this,           SLOT(handleLongRightButton()) );
+
+    connectAndTest( this,           SIGNAL(scrollingEnded()),
+                    this,           SLOT(checkIllegalPos()) );
+
+    grabGesture( Qt::SwipeGesture );
+
+    //TODO: Remove. Stepsize hardcoded to 100 Khz in europe region during demo
+    if ( mFrequencyStepSize < K100Khz ) {
+        mFrequencyStepSize = K100Khz;
     }
-    return mFrequency;
+
+    RadioStationModel* stationModel = &mUiEngine->stationModel();
+    connectAndTest( stationModel,   SIGNAL(rowsInserted(QModelIndex,int,int)),
+                    this,           SLOT(updateStation(QModelIndex,int,int)) );
+    connectAndTest( stationModel,   SIGNAL(rowsRemoved(QModelIndex,int,int)),
+                    this,           SLOT(updateStation(QModelIndex,int,int)) );
+    connectAndTest( stationModel,   SIGNAL(modelReset()),
+                    this,           SLOT(initEmptyItems()) );
+
+    initPositions();
+
+    void updateItems();
 }
 
 /*!
  *
  */
-void RadioFrequencyStrip::connectLeftButton( const char* signal, QObject* receiver, const char* slot )
+void RadioFrequencyStrip::setFrequency( const uint frequency, int reason )
 {
-    connectAndTest( mLeftButton, signal, receiver, slot );
+    LOG_FORMAT( "RadioFrequencyStrip::setFrequency, frequency: %d, reason: %d", frequency, reason );
+    if ( reason != TuneReason::FrequencyStrip &&            // Not sent by the FrequencyStrip
+         frequency != mFrequency &&                         // Different from the current
+         mFrequencies.contains( frequency ) )               // 0 frequency means any illegal value
+    {
+        scrollToFrequency( frequency, mAutoScrollTime );
+        if ( reason != TuneReason::Skip && reason != TuneReason::StationScan ) {
+            emitFrequencyChanged( frequency );
+        }
+    }
 }
 
 /*!
  *
  */
-void RadioFrequencyStrip::connectRightButton( const char* signal, QObject* receiver, const char* slot )
+uint RadioFrequencyStrip::frequency() const
 {
-    connectAndTest( mRightButton, signal, receiver, slot );
+    return mFrequency;
 }
 
 /*!
  * Public slot
  *
  */
-void RadioFrequencyStrip::favoriteChanged( const RadioStation& station )
-{
-    LOG_SLOT_CALLER;
-    FrequencyPos pos = mFrequencies.value( station.frequency() );
-    updateFavorites( pos.mItem );
-
-    emitFavoriteSelected( station.isFavorite() );
-}
-
-/*!
- * Public slot
- *
- */
-void RadioFrequencyStrip::stationAdded( const RadioStation& station )
+void RadioFrequencyStrip::updateFavorite( const RadioStation& station )
 {
     LOG_SLOT_CALLER;
     FrequencyPos pos = mFrequencies.value( station.frequency() );
@@ -209,49 +242,14 @@
  * Public slot
  *
  */
-void RadioFrequencyStrip::stationRemoved( const RadioStation& station )
-{
-    LOG_SLOT_CALLER;
-    uint frequency = station.frequency();
-    if ( mFrequencies.contains( frequency ) ) {
-        FrequencyPos pos = mFrequencies.value( frequency );
-//        mFrequencies.remove( frequency );
-        updateFavorites( pos.mItem );
-    }
-}
-
-/*!
- * Public slot
- *
- */
-void RadioFrequencyStrip::setFrequency( const uint frequency, int reason )
-{
-//    LOG_SLOT_CALLER;
-//    LOG_FORMAT( "RadioFrequencyStrip::setFrequency, frequency: %d, sender: %d", frequency, commandSender );
-    if ( reason != TuneReason::FrequencyStrip &&            // Not sent by the FrequencyStrip
-         frequency != mFrequency &&                         // Different from the current
-         mFrequencies.contains( frequency ) )               // 0 frequency means any illegal value
-    {
-        scrollToFrequency( frequency, mAutoScrollTime );
-        emitFrequencyChanged( frequency );
-    }
-}
-
-/*!
- * 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 );
+    mButtonTimer->stop();
+    if ( isScanning ) {
+        scrollToFrequency( mMinFrequency, mAutoScrollTime );
+        hideButtons();
+    } else {
+        showButtons();
 
     }
     setEnabled( !isScanning );
@@ -261,34 +259,65 @@
  * Private slot
  *
  */
-void RadioFrequencyStrip::leftGesture( int DEBUGVAR( speedPixelsPerSecond ) )
+void RadioFrequencyStrip::updateStation( const QModelIndex& parent, int first, int last )
 {
-    LOG_FORMAT( "RadioFrequencyStrip::leftGesture. speed: %d", speedPixelsPerSecond );
-    mButtonTimer->stop();
-    mButtonTimer->start();
-    emit swipedLeft();
+    Q_UNUSED( parent );
+    RadioStationModel& model = mUiEngine->stationModel();
+    uint frequency = 0;
+    for ( int i = first; i <= last; ++i ) {
+        frequency = model.data( model.index( i, 0, QModelIndex() ),
+                                RadioStationModel::RadioStationRole ).value<RadioStation>().frequency();
+        if ( mFrequencies.contains( frequency ) ) {
+            FrequencyPos pos = mFrequencies.value( frequency );
+            updateFavorites( pos.mItem );
+        }
+    }
 }
 
 /*!
  * Private slot
  *
  */
-void RadioFrequencyStrip::rightGesture( int DEBUGVAR( speedPixelsPerSecond ) )
+void RadioFrequencyStrip::initEmptyItems()
 {
-    LOG_FORMAT( "RadioFrequencyStrip::rightGesture. speed: %d", speedPixelsPerSecond );
-    mButtonTimer->stop();
-    mButtonTimer->start();
-    emit swipedRight();
+    LOG_METHOD;
+    QList<RadioStation> emptyList;
+    foreach ( RadioFrequencyItem* item, mFrequencyItems ) {
+        QPixmap pixmap = drawPixmap( item->frequency(), emptyList, item );
+        item->setPixmap( pixmap );
+    }
+}
+
+/*!
+ * Private slot
+ */
+void RadioFrequencyStrip::handleLeftButton()
+{
+    emit skipRequested( StationSkip::PreviousFavorite );
 }
 
 /*!
  * Private slot
- *
+ */
+void RadioFrequencyStrip::handleLongLeftButton()
+{
+    emit seekRequested( Seeking::Down );
+}
+
+/*!
+ * Private slot
  */
-void RadioFrequencyStrip::panGesture( const QPointF& point )
+void RadioFrequencyStrip::handleRightButton()
 {
-    RadioStripBase::panGesture( point );
-    mIsPanGesture = true;
+    emit skipRequested( StationSkip::NextFavorite );
+}
+
+/*!
+ * Private slot
+ */
+void RadioFrequencyStrip::handleLongRightButton()
+{
+    emit seekRequested( Seeking::Up );
 }
 
 /*!
@@ -296,8 +325,29 @@
  */
 void RadioFrequencyStrip::toggleButtons()
 {
-    HbEffect::start( mLeftButton, KSlideFromLeft );
-    HbEffect::start( mRightButton, KSlideFromRight );
+    if ( mButtonsVisible ) {
+        hideButtons();
+    } else {
+        showButtons();
+    }
+}
+
+/*!
+ * Private slot
+ */
+void RadioFrequencyStrip::checkIllegalPos()
+{
+    // Check if the selector is in the invalid area where the strip loops around
+    const int selectorPosition = selectorPos();
+    if ( !mPositions.contains( selectorPosition ) ) {
+        if ( selectorPosition < mMaxWidth - KWidth + mSeparatorPos ) {
+            scrollToFrequency( mMaxFrequency, 500 );
+            emitFrequencyChanged( mMaxFrequency );
+        } else {
+            scrollToFrequency( mMinFrequency, 500 );
+            emitFrequencyChanged( mMinFrequency );
+        }
+    }
 }
 
 /*!
@@ -326,7 +376,7 @@
 {
     Q_UNUSED( newPosition );
 
-    if ( isDragging() ) {
+    if ( mUserIsScrolling ) {
         const int pos = selectorPos();
         emitFrequencyChanged( mPositions.value( pos ) );
     }
@@ -345,13 +395,11 @@
 
     const int stripHeight = event->newSize().height();
     if ( !mLeftButtonIcon.isNull() ) {
-//        mLeftButtonIcon.setSize( QSizeF( stripHeight, stripHeight ) );
         mLeftButton->resize( stripHeight, stripHeight );
         mLeftButton->setBackground( mLeftButtonIcon );
     }
 
     if ( !mRightButtonIcon.isNull() ) {
-//        mRightButtonIcon.setSize( QSizeF( stripHeight, stripHeight ) );
         mRightButton->resize( stripHeight, stripHeight );
         mRightButton->setBackground( mRightButtonIcon );
     }
@@ -376,10 +424,8 @@
 {
     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 );
-        }
+        mForegroundColor = Qt::white;// HbColorScheme::color( TEXT_COLOR_ATTRIBUTE );
+        updateItems();
     }
 
     return HbWidgetBase::changeEvent(event);
@@ -391,11 +437,9 @@
 void RadioFrequencyStrip::mousePressEvent( QGraphicsSceneMouseEvent* event )
 {
     RadioStripBase::mousePressEvent( event );
-    mIsPanGesture = false;
+    mUserIsScrolling = true;
     mButtonTimer->stop();
-
-    HbEffect::start( mLeftButton, KSlideToLeft );
-    HbEffect::start( mRightButton, KSlideToRight );
+    mButtonTimer->start( BUTTON_HIDE_TIMEOUT );
 }
 
 /*!
@@ -403,20 +447,9 @@
  */
 void RadioFrequencyStrip::mouseReleaseEvent( QGraphicsSceneMouseEvent* event )
 {
+    mUserIsScrolling = false;
     RadioStripBase::mouseReleaseEvent( event );
 
-    // Check if the selector is in the invalid area where the strip loops around
-    const int selectorPosition = selectorPos();
-    if ( !mPositions.contains( selectorPosition ) ) {
-        if ( selectorPosition < mMaxWidth - KWidth + mSeparatorPos ) {
-            scrollToFrequency( mMaxFrequency, 500 );
-            emitFrequencyChanged( mMaxFrequency );
-        } else {
-            scrollToFrequency( mMinFrequency, 500 );
-            emitFrequencyChanged( mMinFrequency );
-        }
-    }
-
 //    if ( !mIsPanGesture ) {
 //        const qreal touchDelta = event->pos().x() - mSelectorPos;
 //        const int touchPos = selectorPosition + touchDelta;
@@ -447,7 +480,27 @@
 //    }
 
     mButtonTimer->stop();
-    mButtonTimer->start();
+    if ( !mButtonsVisible ) {
+        mButtonTimer->start( BUTTON_SHOW_TIMEOUT );
+    }
+}
+
+/*!
+ * \reimp
+ */
+void RadioFrequencyStrip::gestureEvent( QGestureEvent* event )
+{
+    if ( HbSwipeGesture* gesture = static_cast<HbSwipeGesture*>( event->gesture( Qt::SwipeGesture ) ) ) {
+        if ( gesture->state() == Qt::GestureFinished ) {
+            if ( gesture->horizontalDirection() == QSwipeGesture::Left ) {
+                emit skipRequested( StationSkip::Next );
+            } else if ( gesture->horizontalDirection() == QSwipeGesture::Right ) {
+                emit skipRequested( StationSkip::Previous );
+            }
+        }
+    } else {
+        RadioStripBase::gestureEvent( event );
+    }
 }
 
 /*!
@@ -493,25 +546,8 @@
 /*!
  *
  */
-void RadioFrequencyStrip::initItems()
+void RadioFrequencyStrip::initPositions()
 {
-    LOG_METHOD;
-    foreach ( RadioFrequencyItem* item, mFrequencyItems ) {
-        updateFavorites( item );
-    }
-
-    if ( mUiEngine ) {
-        QList<RadioStation> stations = mUiEngine->stationsInRange( mMinFrequency, mMaxFrequency );
-        foreach ( const RadioStation& station, stations ) {
-            if ( station.isFavorite() ) {
-                mFrequencies[ station.frequency() ].mFavorite = true;
-            }
-            if ( station.isType( RadioStation::LocalStation ) ) {
-                mFrequencies[ station.frequency() ].mLocalStation = true;
-            }
-        }
-    }
-
     int prevPos = 0;
     int nextPos = 0;
     const int lastPos = mFrequencies.value( mMaxFrequency ).mPosition;
@@ -537,9 +573,9 @@
 void RadioFrequencyStrip::initButtons()
 {
     mLeftButton->setZValue( KSelectorZPos );
-    mLeftButton->setObjectName( BUTTON_LEFT );
+    mLeftButton->setObjectName( LEFT_BUTTON );
     mRightButton->setZValue( KSelectorZPos );
-    mRightButton->setObjectName( BUTTON_RIGHT );
+    mRightButton->setObjectName( RIGHT_BUTTON );
 
     QEffectList effectList;
     effectList.append( EffectInfo( mLeftButton, ":/effects/slide_to_left.fxml", KSlideToLeft ) );
@@ -554,7 +590,7 @@
  */
 void RadioFrequencyStrip::addFrequencyPos( int pos, uint frequency, RadioFrequencyItem* item )
 {
-    mFrequencies.insert( frequency, FrequencyPos( pos, false, false, item ) );
+    mFrequencies.insert( frequency, FrequencyPos( pos, item ) );
     mPositions.insert( pos, frequency );
 }
 
@@ -576,8 +612,6 @@
         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 );
         }
     }
@@ -586,6 +620,16 @@
 /*!
  *
  */
+void RadioFrequencyStrip::updateItems()
+{
+    foreach ( RadioFrequencyItem* item, mFrequencyItems ) {
+        updateFavorites( item );
+    }
+}
+
+/*!
+ *
+ */
 QPixmap RadioFrequencyStrip::drawPixmap( uint frequency, QList<RadioStation> stations, RadioFrequencyItem* item )
 {
     QPixmap pixmap( KWidth, KHeight );
@@ -673,23 +717,9 @@
  */
 void RadioFrequencyStrip::emitFrequencyChanged( uint frequency )
 {
-//    LOG_FORMAT( "RadioFrequencyStrip::emitFrequencyChanged, frequency: %d", frequency );
     if ( frequency > 0 && frequency != mFrequency ) {
         mFrequency = frequency;
         emit frequencyChanged( frequency, TuneReason::FrequencyStrip );
-        emitFavoriteSelected( mFrequencies.value( frequency ).mFavorite );
-    }
-}
-
-/*!
- *
- */
-void RadioFrequencyStrip::emitFavoriteSelected( bool favoriteSelected )
-{
-    // TODO: remove this
-    if ( favoriteSelected != mFavoriteSelected ) {
-        mFavoriteSelected = favoriteSelected;
-        emit frequencyIsFavorite( mFavoriteSelected );
     }
 }
 
@@ -716,3 +746,23 @@
         scrollContentsTo( QPointF( qreal( mFrequencies.value( frequency ).mPosition ) - mSelectorPos, 0 ), time );
     }
 }
+
+/*!
+ *
+ */
+void RadioFrequencyStrip::hideButtons()
+{
+    mButtonsVisible = false;
+    HbEffect::start( mLeftButton, KSlideToLeft );
+    HbEffect::start( mRightButton, KSlideToRight );
+}
+
+/*!
+ *
+ */
+void RadioFrequencyStrip::showButtons()
+{
+    mButtonsVisible = true;
+    HbEffect::start( mLeftButton, KSlideFromLeft );
+    HbEffect::start( mRightButton, KSlideFromRight );
+}
--- a/radioapp/radiowidgets/src/radiohistoryview.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/src/radiohistoryview.cpp	Tue May 18 11:27:22 2010 +0100
@@ -24,23 +24,86 @@
 
 // User includes
 #include "radiohistoryview.h"
-#include "radiomainwindow.h"
+#include "radiowindow.h"
 #include "radiologger.h"
-#include "radioxmluiloader.h"
+#include "radiouiloader.h"
 #include "radiouiengine.h"
-#include "radiostationfiltermodel.h"
 #include "radiohistorymodel.h"
+#include "radiohistoryitem.h"
+
+// BEGIN TEMPORARY TEST CODE CODE
+#include <QTimer>
+#include "radiostationmodel.h"
+
+struct Song
+{
+    const char* mArtist;
+    const char* mTitle;
+};
+const Song KRecognizedSongs[] = {
+    { "Red Hot Chili Peppers", "Under The Bridge" },
+    { "Queens Of The Stone Age", "No One Knows" },
+    { "The Presidents of the United States of America", "Dune Buggy" },
+    { "System of a Down", "Aerials" },
+    { "The White Stripes", "Seven Nation Army" },
+    { "Alice In Chains", "When The Sun Rose Again" },
+    { "Bullet For My Valentine", "Tears Don't Fall" }
+};
+const int KSongsCount = sizeof( KRecognizedSongs ) / sizeof( KRecognizedSongs[0] );
+// END TEMPORARY TEST CODE CODE
 
 /*!
  *
  */
 RadioHistoryView::RadioHistoryView() :
-    RadioViewBase(),
+    RadioViewBase( false ),
     mHistoryList( 0 ),
     mAllSongsButton( 0 ),
     mTaggedSongsButton( 0 ),
-    mFilterModel( 0 )
+    mSelectedItem( new RadioHistoryItem() ),
+    mCurrentRow( -1 ),
+    mSongIndex( 0 )
+{
+}
+
+/*!
+ *
+ */
+RadioHistoryView::~RadioHistoryView()
+{
+}
+
+/*!
+ *
+ */
+void RadioHistoryView::setNonTaggedIcon( const HbIcon& nonTaggedIcon )
 {
+    mNonTaggedIcon = nonTaggedIcon;
+    mNonTaggedIcon.setColor( Qt::white );
+}
+
+/*!
+ *
+ */
+HbIcon RadioHistoryView::nonTaggedIcon() const
+{
+    return mNonTaggedIcon;
+}
+
+/*!
+ *
+ */
+void RadioHistoryView::setTaggedIcon( const HbIcon& taggedIcon )
+{
+    mTaggedIcon = taggedIcon;
+}
+
+/*!
+ *
+ */
+HbIcon RadioHistoryView::taggedIcon() const
+{
+    return mTaggedIcon;
 }
 
 /*!
@@ -55,9 +118,8 @@
         loadSection( DOCML::FILE_HISTORYVIEW, DOCML::HV_SECTION_HISTORY_MODE );
     }
 
-    const bool showFavorites = mTaggedSongsButton->isChecked();
-//    mFilterModel->setTypeFilter( showFavorites ? RadioStation::Favorite
-//                                               : RadioStation::LocalStation );
+    const bool showTagged = mTaggedSongsButton->isChecked();
+    historyModel().setShowTagged( showTagged );
 
     updateVisibilities();
 }
@@ -68,12 +130,9 @@
  */
 void RadioHistoryView::clearList()
 {
-    const bool answer = HbMessageBox::question( hbTrId( "txt_rad_info_clear_recently_played_songs_list" ) );
-
-    if ( answer ) {
-        mMainWindow->uiEngine().historyModel().removeAll();
-        updateVisibilities();
-    }
+    const bool showingTagged = mTaggedSongsButton->isChecked();
+    askQuestion( hbTrId( showingTagged ? "txt_rad_info_clear_tagged_songs_list" :
+                                         "txt_rad_info_clear_recently_played_songs_list" ) );
 }
 
 /*!
@@ -90,47 +149,120 @@
  * Private slot
  *
  */
-void RadioHistoryView::listItemClicked( const QModelIndex& index )
+void RadioHistoryView::showContextMenu( const QModelIndex& index )
 {
-    showContextMenu( index );
+    *mSelectedItem = historyModel().itemAtIndex( index );
+    mCurrentRow = index.row();
+
+    HbMenu* menu = mUiLoader->findObject<HbMenu>( DOCML::HV_NAME_CONTEXT_MENU );
+
+    if ( HbAction* tagAction = mUiLoader->findObject<HbAction>( DOCML::HV_NAME_CONTEXT_TAG ) ) {
+        if ( mSelectedItem->isTagged() ) {
+            tagAction->setText( hbTrId( "txt_rad_menu_remove_tag" ) );
+        } else {
+            tagAction->setText( hbTrId( "txt_rad_menu_tag_song" ) );
+        }
+    }
+
+    if ( HbAction* searchAction = mUiLoader->findObject<HbAction>( DOCML::HV_NAME_CONTEXT_SEARCH ) ) {
+        //TODO: Check if "search from other store" should be available
+        searchAction->setVisible( false );
+    }
+
+    HbAbstractViewItem* item =  mHistoryList->itemByIndex( index );
+    QPointF coords = item->pos();
+    coords.setY( mHistoryList->contentWidget()->pos().y() + coords.y() );
+    menu->setPreferredPos( QPointF( size().width() / 2 - menu->size().width() / 2, coords.y() + menu->size().height() / 2 ) );
+
+    menu->show();
 }
 
 /*!
  * Private slot
  *
  */
-void RadioHistoryView::listItemLongPressed( HbAbstractViewItem* item, const QPointF& coords )
+void RadioHistoryView::toggleTagging()
+{
+    historyModel().toggleTagging( *mSelectedItem, mCurrentRow );
+    mSelectedItem->reset();
+    mCurrentRow = -1;
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioHistoryView::openOviStore()
+{
+    QString msg = "To be implemented: Open ovi store. Artist: %1, Title: %2";
+    HbMessageBox::information( msg.arg( mSelectedItem->artist() ).arg( mSelectedItem->title() ) );
+    mMainWindow->uiEngine().openMusicStore( *mSelectedItem );
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioHistoryView::openOtherStore()
 {
-    Q_UNUSED( coords );
-    showContextMenu( item->modelIndex() );
+    QString msg = "To be implemented: Open other store. Artist: %1, Title: %2";
+    HbMessageBox::information( msg.arg( mSelectedItem->artist() ).arg( mSelectedItem->title() ) );
+    mMainWindow->uiEngine().openMusicStore( *mSelectedItem, RadioUiEngine::OtherStore );
+}
+
+/*!
+ * Private slot
+ * TEMPORARY TEST CODE
+ */
+void RadioHistoryView::addSongs()
+{
+    for ( int i = 0; i < KSongsCount; ++i ) {
+        QTimer::singleShot( 1000 + i * 1500, this, SLOT(addOneSong()) );
+    }
+}
+
+/*!
+ * Private slot
+ * TEMPORARY TEST CODE
+ */
+void RadioHistoryView::addOneSong()
+{
+    Song song = KRecognizedSongs[mSongIndex++];
+    mSongIndex %= KSongsCount;
+
+    RadioStation station = mMainWindow->uiEngine().stationModel().currentStation();
+    mMainWindow->uiEngine().historyModel().addItem( song.mArtist, song.mTitle, station );
 }
 
 /*!
  * \reimp
  *
  */
-void RadioHistoryView::init( RadioXmlUiLoader* uiLoader, RadioMainWindow* mainWindow )
+void RadioHistoryView::init()
 {
     LOG_METHOD;
-    mUiLoader.reset( uiLoader );
-    mMainWindow = mainWindow;
+    mInitialized = true;
 
     RadioHistoryModel* historyModel = &mMainWindow->uiEngine().historyModel();
     historyModel->setShowDetails( mOrientation == Qt::Horizontal );
 
+    if ( !mNonTaggedIcon.isNull() && !mTaggedIcon.isNull() ) {
+        historyModel->setIcons( mNonTaggedIcon.qicon(), mTaggedIcon.qicon() );
+    }
+
     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->setModel( historyModel );
     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 );
+    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()) );
+    if ( 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() ) );
@@ -138,9 +270,20 @@
                     this,                   SLOT(deckButtonPressed() ) );
     connectAndTest( historyModel,           SIGNAL(itemAdded() ),
                     this,                   SLOT(updateVisibilities() ) );
+
+    loadSection( DOCML::FILE_HISTORYVIEW, DOCML::HV_SECTION_HISTORY_MODE );
     updateVisibilities();
     
+    connectCommonMenuItem( MenuItem::UseLoudspeaker );
+
     initBackAction();
+
+    // BEGIN TEMPORARY TEST CODE
+    if ( HbAction* addSongsAction = mUiLoader->findObject<HbAction>( "hv:add_songs_action" ) ) {
+        connectAndTest( addSongsAction,     SIGNAL(triggered()),
+                        this,               SLOT(addSongs()) );
+    }
+    // END TEMPORARY TEST CODE
 }
 
 /*!
@@ -157,13 +300,16 @@
  * \reimp
  *
  */
-void RadioHistoryView::showContextMenu( const QModelIndex& index )
+void RadioHistoryView::userAccepted()
 {
-    QModelIndex sourceIndex = mFilterModel->mapToSource( index );
+    mMainWindow->uiEngine().historyModel().removeAll();
+    updateVisibilities();
+}
 
-    HbMenu* menu = new HbMenu();
-    HbAction* action = menu->addAction( "Set favorite" );
-    menu->exec();
-
-//    RadioHistoryItem item = mFilterModel->data( index, )
+/*!
+ *
+ */
+RadioHistoryModel& RadioHistoryView::historyModel() const
+{
+    return *static_cast<RadioHistoryModel*>( mHistoryList->model() );
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/src/radiomainview.cpp	Tue May 18 11:27:22 2010 +0100
@@ -0,0 +1,248 @@
+/*
+* 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>
+#include <HbLabel>
+#include <HbPushButton>
+#include <HbAction>
+
+// User includes
+#include "radiowindow.h"
+#include "radiomainview.h"
+#include "radiofrequencystrip.h"
+#include "radiouiengine.h"
+#include "radiologger.h"
+#include "radiostationcarousel.h"
+#include "radiouiloader.h"
+#include "radiouiutilities.h"
+#include "radiostationmodel.h"
+#include "radiofrequencyscanner.h"
+
+// Constants
+
+/*!
+ *
+ */
+RadioMainView::RadioMainView() :
+    RadioViewBase( false ),
+    mCarousel( NULL ),
+    mFrequencyStrip( NULL )
+{
+}
+
+/*!
+ *
+ */
+RadioMainView::~RadioMainView()
+{
+}
+
+/*!
+ * \reimp
+ *
+ */
+void RadioMainView::setScanningMode( bool scanning )
+{
+    if ( scanning ) {
+        loadSection( DOCML::FILE_MAINVIEW, DOCML::MV_SECTION_SCANNING );
+    } else {
+        loadSection( DOCML::FILE_MAINVIEW, DOCML::MV_SECTION_NORMAL );
+        mFrequencyScanner.take();
+    }
+}
+
+/*!
+ * \reimp
+ *
+ */
+void RadioMainView::init()
+{
+    LOG_METHOD;
+    mInitialized = true;
+    mCarousel = mUiLoader->findObject<RadioStationCarousel>( DOCML::MV_NAME_STATION_CAROUSEL );
+    mCarousel->init( *mUiLoader, &mMainWindow->uiEngine() );
+
+    // Note! UI connections are already made in the DocML file. Here we need to connect UI to engine
+    RadioUiEngine* engine = &mMainWindow->uiEngine();
+    mFrequencyStrip = mUiLoader->findObject<RadioFrequencyStrip>( DOCML::MV_NAME_FREQUENCY_STRIP );
+    mFrequencyStrip->init( engine );
+
+    RadioStationModel* stationModel = &engine->stationModel();
+
+    connectAndTest( mFrequencyStrip,            SIGNAL(frequencyChanged(uint,int)),
+                    this,                       SLOT(setFrequencyFromWidget(uint,int)) );
+    connectAndTest( mCarousel,                  SIGNAL(frequencyChanged(uint,int)),
+                    this,                       SLOT(setFrequencyFromWidget(uint,int)) );
+    connectAndTest( engine,                     SIGNAL(tunedToFrequency(uint,int)),
+                    this,                       SLOT(setFrequencyFromEngine(uint,int)) );
+
+    connectAndTest( mFrequencyStrip,            SIGNAL(skipRequested(int)),
+                    this,                       SLOT(skip(int)) );
+    connectAndTest( mFrequencyStrip,            SIGNAL(seekRequested(int)),
+                    engine,                     SLOT(seekStation(int)) );
+
+    connectAndTest( stationModel,               SIGNAL(favoriteChanged(RadioStation)),
+                    mFrequencyStrip,            SLOT(updateFavorite(RadioStation)) );
+
+    connectAndTest( engine,                     SIGNAL(seekingStarted(int)),
+                    this,                       SLOT(seekingStarted()) );
+    connectAndTest( engine,                     SIGNAL(antennaStatusChanged(bool)),
+                    mCarousel,                  SLOT(updateAntennaStatus(bool)) );
+    connectAndTest( engine,                     SIGNAL(audioRouteChanged(bool)),
+                    this,                       SLOT(updateAudioRoute(bool)) );
+
+    HbPushButton* stationsButton = mUiLoader->findWidget<HbPushButton>( DOCML::MV_NAME_STATIONS_BUTTON );
+    connectAndTest( stationsButton,             SIGNAL(clicked()),
+                    mMainWindow,                SLOT(activateStationsView()) );
+
+    HbPushButton* scanButton = mUiLoader->findWidget<HbPushButton>( DOCML::MV_NAME_SCAN_BUTTON );
+    connectAndTest( scanButton,                 SIGNAL(clicked()),
+                    this,                       SLOT(toggleScanning()) );
+
+    HbPushButton* loudspeakerButton = mUiLoader->findWidget<HbPushButton>( DOCML::MV_NAME_SPEAKER_BUTTON );
+    connectAndTest( loudspeakerButton,          SIGNAL(clicked()),
+                    engine,                     SLOT(toggleAudioRoute()) );
+
+    // "Play history" menu item
+    connectViewChangeMenuItem( DOCML::MV_NAME_HISTORYVIEW_ACTION, SLOT(activateHistoryView()) );
+
+    updateAudioRoute( mMainWindow->uiEngine().isUsingLoudspeaker() );
+
+    // Add "back" navigation action to put the application to background
+    HbAction* backAction = new HbAction( Hb::BackNaviAction, this );
+    connectAndTest( backAction,     SIGNAL(triggered()),
+                    mMainWindow,    SLOT(lower()) );
+    setNavigationAction( backAction );
+
+    const bool firsTimeStart = engine->isFirstTimeStart();
+    const int rowCount = engine->stationModel().rowCount();
+    if ( firsTimeStart && rowCount == 0 ){
+        QTimer::singleShot( 100, this, SLOT(toggleScanning()) );
+    }
+}
+
+/*!
+ * \reimp
+ *
+ */
+void RadioMainView::setOrientation()
+{
+    loadSection( DOCML::FILE_MAINVIEW, mMainWindow->orientationSection() );
+}
+
+/*!
+ * \reimp
+ *
+ */
+void RadioMainView::userAccepted()
+{
+    mFrequencyScanner.reset( new RadioFrequencyScanner( mMainWindow->uiEngine(), this ) );
+    mFrequencyScanner->startScanning();
+}
+
+/*!
+ * Private slot
+ */
+void RadioMainView::setFrequencyFromWidget( uint frequency, int reason )
+{
+    LOG_FORMAT( "RadioMainView::setFrequencyFromWidget: %u, reason = %d", frequency, reason );
+    if ( !RadioUiUtilities::isScannerAlive() ) {
+        if ( reason == TuneReason::FrequencyStrip ) {
+            mCarousel->setFrequency( frequency, reason );
+            mMainWindow->uiEngine().tuneWithDelay( frequency, reason );
+        } else if ( reason == TuneReason::StationCarousel ) {
+            mFrequencyStrip->setFrequency( frequency, reason );
+            mMainWindow->uiEngine().tuneFrequency( frequency, reason );
+        }
+    }
+}
+
+/*!
+ * Private slot
+ */
+void RadioMainView::setFrequencyFromEngine( uint frequency, int reason )
+{
+    if ( !RadioUiUtilities::isScannerAlive() ) {
+        mCarousel->clearInfoText();
+        if ( reason != TuneReason::FrequencyStrip &&
+             reason != TuneReason::StationCarousel &&
+             reason != TuneReason::Skip ) {
+            mCarousel->setFrequency( frequency, reason );
+            mFrequencyStrip->setFrequency( frequency, reason );
+        }
+    }
+}
+
+/*!
+ * Private slot
+ */
+void RadioMainView::skip( int skipMode )
+{
+    if ( ( skipMode == StationSkip::PreviousFavorite || skipMode == StationSkip::NextFavorite ) &&
+        mMainWindow->uiEngine().stationModel().favoriteCount() == 0 ) {
+        mCarousel->setInfoText( CarouselInfoText::NoFavorites );
+    } else {
+        const uint currentFrequency = mFrequencyStrip->frequency();
+        const uint frequency = mMainWindow->uiEngine().skipStation( static_cast<StationSkip::Mode>( skipMode ),
+                                                                    currentFrequency);
+        mCarousel->setFrequency( frequency, TuneReason::Skip );
+        mFrequencyStrip->setFrequency( frequency, TuneReason::Skip );
+    }
+}
+
+/*!
+ * Private slot
+ */
+void RadioMainView::toggleScanning()
+{
+    if ( mFrequencyScanner ) {
+        mFrequencyScanner->cancelScanning();
+    } else {
+        const int rowCount =  mMainWindow->uiEngine().stationModel().rowCount();
+        if ( rowCount > 0 ) {
+            askQuestion( hbTrId( "txt_rad_info_all_stations_in_stations_list_will_be" ) );
+        } else {
+            userAccepted();
+        }
+    }
+}
+
+/*!
+ * Private slot
+ */
+void RadioMainView::seekingStarted()
+{
+    if ( !RadioUiUtilities::isScannerAlive() ) {
+        mCarousel->setInfoText( CarouselInfoText::Seeking );
+    }
+}
+
+/*!
+ * Private slot
+ */
+void RadioMainView::updateAudioRoute( bool loudspeaker )
+{
+    HbPushButton* loudspeakerButton = mUiLoader->findWidget<HbPushButton>( DOCML::MV_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" ) );
+    }
+}
--- a/radioapp/radiowidgets/src/radiomainwindow.cpp	Tue May 11 12:31:43 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,272 +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 <HbInstance>
-#include <HbAction>
-#include <HbMessageBox>
-#include <HbVolumeSliderPopup>
-
-#include "radiomainwindow.h"
-#include "radiotuningview.h"
-#include "radiostationsview.h"
-#include "radiouiengine.h"
-#include "radiostationmodel.h"
-#include "radiologger.h"
-#include "radioxmluiloader.h"
-
-// Constants
-
-/**
- * Desired amount of delay of volumesliderpopup
- */
-const int KVolumeSliderDelay = 5000;
-
-/*!
- *
- */
-RadioMainWindow::RadioMainWindow( QWidget* parent ) :
-    HbMainWindow( parent ),
-    mUiEngine( 0 )
-{
-}
-
-/*!
- *
- */
-RadioMainWindow::~RadioMainWindow()
-{
-    // Destructor needs to be defined. See explanation from RadioEngineWrapperPrivate destructor.
-}
-
-/*!
- *
- */
-bool RadioMainWindow::isOfflineUsageAllowed()
-{
-    DummyViewPtr dummyView = prepareToShowDialog();
-
-    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 );
-
-    return answer;
-}
-
-/*!
- *
- */
-void RadioMainWindow::showErrorMessage( const QString& text )
-{
-    DummyViewPtr dummyView = prepareToShowDialog();
-
-    HbMessageBox::warning( text );
-
-    dialogShown( dummyView );
-}
-
-/*!
- *
- */
-void RadioMainWindow::init( RadioUiEngine* uiEngine )
-{
-    LOG_METHOD;
-    mUiEngine = uiEngine;
-
-    // MainWindow is the one that always listens for orientation changes and then delegates
-    // the updates to the views
-    connectAndTest( hbInstance->allMainWindows().first(),   SIGNAL(orientationChanged(Qt::Orientation)),
-                    this,                                   SLOT(updateOrientation(Qt::Orientation)) );
-
-    connectAndTest( mUiEngine,  SIGNAL(volumeChanged(int)),
-                    this,       SLOT(showVolumeLevel(int)) );
-    connectAndTest( mUiEngine,  SIGNAL(antennaStatusChanged(bool)),
-                    this,       SLOT(updateAntennaStatus(bool)) );
-
-    activateTuningView();
-}
-
-/*!
- *
- */
-RadioUiEngine& RadioMainWindow::uiEngine()
-{
-    return *mUiEngine;
-}
-
-/*!
- * Returns the XML layout section that corresponds to the view orientation
- */
-QString RadioMainWindow::orientationSection()
-{
-    return orientation() == Qt::Vertical ? DOCML::SECTION_PORTRAIT : DOCML::SECTION_LANDSCAPE;
-}
-
-/*!
- *
- */
-void RadioMainWindow::activateTuningView()
-{
-    activateView( mTuningView, DOCML::FILE_TUNINGVIEW, Hb::ViewSwitchUseBackAnim );
-}
-
-/*!
- *
- */
-void RadioMainWindow::activateStationsView()
-{
-    activateView( mStationsView, DOCML::FILE_STATIONSVIEW );
-}
-
-/*!
- *
- */
-void RadioMainWindow::activateHistoryView()
-{
-    activateView( mHistoryView, DOCML::FILE_HISTORYVIEW );
-}
-
-/*!
- * Private slot
- *
- */
-void RadioMainWindow::updateOrientation( Qt::Orientation orientation )
-{
-    HbView* view = currentView();
-    RADIO_ASSERT( view, "RadioMainWindow::updateOrientation", "Current view not found!" );
-    if ( view ) {
-        static_cast<RadioViewBase*>( view )->updateOrientation( orientation );
-    }
-}
-
-/*!
- * Private slot
- *
- */
-void RadioMainWindow::showVolumeLevel( int volume )
-{
-    if ( !mVolSlider ) {
-        mVolSlider.reset( new HbVolumeSliderPopup() );
-        mVolSlider->setRange( 0, KMaximumVolumeLevel );
-        mVolSlider->setSingleStep( 1 );
-        mVolSlider->setTimeout( KVolumeSliderDelay );
-        connectAndTest( mVolSlider.data(),  SIGNAL(valueChanged(int)),
-                        mUiEngine,          SLOT(setVolume(int)) );
-    }
-
-    mVolSlider->setValue( volume );
-    mVolSlider->setText( QString( "%L1%" ).arg( volume * 100 / KMaximumVolumeLevel ) );
-    mVolSlider->show();
-}
-
-/*!
- * Private slot
- *
- */
-void RadioMainWindow::updateAntennaStatus( bool connected )
-{
-    if ( !connected ) {
-        HbMessageBox infoBox( hbTrId( "txt_rad_dpophead_connect_wired_headset" ) );
-        infoBox.exec();
-    }
-}
-
-/*!
- *
- */
-void RadioMainWindow::activateView( ViewPtr& aMember, const QString& docmlFile, Hb::ViewSwitchFlags flags )
-{
-    LOG_METHOD;
-    if ( aMember && aMember == currentView() ) {
-        return;
-    }
-
-    RadioViewBase* previousView = static_cast<RadioViewBase*>( currentView() );
-    if ( previousView && previousView->isTransient() ) {
-        removeView( previousView );
-        previousView->deleteLater();
-    }
-
-    bool viewCreated = false;
-    if ( !aMember ) {
-        viewCreated = true;
-
-        RadioXmlUiLoader* uiLoader = new RadioXmlUiLoader();
-        bool ok = false;
-
-        // View takes ownership of the ui loader when it is created inside the load function
-        QObjectList objectList = uiLoader->load( docmlFile, &ok );
-
-        RADIO_ASSERT( ok , "FMRadio", "invalid DocML file" );
-        if ( !ok ) {
-            delete uiLoader;
-            uiLoader = 0;
-            return;
-        }
-
-        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 );
-    }
-
-    aMember->updateOrientation( orientation(), viewCreated );
-
-    setCurrentView( aMember, true, flags );
-}
-
-/*!
- *
- */
-DummyViewPtr RadioMainWindow::prepareToShowDialog()
-{
-    // To be able to draw a dialog on screen we need a HbMainWindow instance and a HbView to get a graphics scene
-    // so we create a dummy view and set it active
-    DummyViewPtr dummyView( new HbView() );
-    addView( dummyView.data() );
-    setCurrentView( dummyView.data() );
-    show();
-    return dummyView;
-}
-
-/*!
- *
- */
-void RadioMainWindow::dialogShown( DummyViewPtr pointer )
-{
-    // Clean up the dummy view
-    hide();
-    removeView( pointer.data() );
-    pointer.clear();
-}
--- a/radioapp/radiowidgets/src/radiostationcarousel.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/src/radiostationcarousel.cpp	Tue May 18 11:27:22 2010 +0100
@@ -23,15 +23,18 @@
 #include <HbEffect>
 #include <QTimer>
 #include <QTimeLine>
+#include <HbPanGesture>
 
 // User includes
 #include "radiostationcarousel.h"
+#include "radiouiloader.h"
 #include "radiostationitem.h"
+#include "radiostation.h"
 #include "radiouiengine.h"
 #include "radiostationmodel.h"
 #include "radiofadinglabel.h"
 #include "radiologger.h"
-#include "radiostationmodel.h"
+#include "radiocarouselmodel.h"
 #include "radiouiutilities.h"
 #include "radio_global.h"
 
@@ -45,6 +48,7 @@
 
 const int KRadioTextPlusCheckTimeout = 700; // 700 ms
 const int KFreqScrollDivider = 100000;
+const int INFOTEXT_NOFAVORITES_TIMEOUT = 15000;
 
 // ===============================================================
 //  Scanning helper
@@ -80,7 +84,7 @@
  */
 void ScanningHelper::startSlide()
 {
-    mCarousel.scrollToIndex( mModelIndex, 1000 );
+    mCarousel.scrollToIndex( mModelIndex, RadioStationCarousel::NoSignal );
     startNumberScroll();
 }
 
@@ -120,49 +124,19 @@
     mUiEngine( uiEngine ),
     mAntennaAttached( false ),
     mAutoScrollTime( 300 ),
-    mPreviousButtonPos( 0.0 ),
-    mMovingLeft( false ),
+    mGenericTimer( new QTimer( this ) ),
+    mTimerMode( NoTimer ),
+    mScanningHelper( 0 ),
+    mInfoText( 0 ),
     mCurrentItem( 0 ),
-    mRadioTextTimer( new QTimer( this ) ),
-    mScrollPos( 0 ),
-    mScanningHelper( 0 )
+    mPanStartPos( 0 )
 #ifdef USE_DEBUGGING_CONTROLS
     ,mRdsLabel( new RadioFadingLabel( this ) )
 #endif // USE_DEBUGGING_CONTROLS
 {
     RadioUiUtilities::setCarousel( this );
-
-    setScrollDirections( Qt::Horizontal );
-    setFrictionEnabled( true );
-    setRowCount( 1 );
-    setColumnCount( 1 );
-    setClampingStyle( HbScrollArea::BounceBackClamping );
-    setScrollingStyle( HbScrollArea::PanOrFlick );
-    setLongPressEnabled( false );
-    setItemRecycling( false ); // TODO: Enable recycling
-    setUniformItemSizes( true );
-    setItemPrototype( new RadioStationItem( *this ) );
-    setSelectionMode( SingleSelection );
-
-    mRadioTextTimer->setSingleShot( true );
-    mRadioTextTimer->setInterval( KRadioTextPlusCheckTimeout );
-    connectAndTest( mRadioTextTimer,    SIGNAL(timeout()),
-                    this,               SLOT(radioTextPlusCheckEnded()));
-
-#ifdef USE_DEBUGGING_CONTROLS
-    mRdsLabel->setPos( QPoint( 300, 10 ) );
-    mRdsLabel->setText( "RDS" );
-    mRdsLabel->setElideMode( Qt::ElideNone );
-    HbFontSpec spec = mRdsLabel->fontSpec();
-    spec.setTextPaneHeight( 10 );
-    spec.setRole( HbFontSpec::Secondary );
-    mRdsLabel->setFontSpec( spec );
-    mRdsLabel->setTextColor( Qt::gray );
-    if ( mUiEngine ) {
-        connectAndTest( mUiEngine,      SIGNAL(rdsAvailabilityChanged(bool)),
-                        this,           SLOT(setRdsAvailable(bool)) );
-    }
-#endif // USE_DEBUGGING_CONTROLS
+    setClampingStyle( HbScrollArea::StrictClamping );
+    setScrollingStyle( HbScrollArea::Pan );
 }
 
 /*!
@@ -220,51 +194,120 @@
 /*!
  *
  */
-void RadioStationCarousel::init( RadioUiEngine* uiEngine )
+void RadioStationCarousel::init( RadioUiLoader& uiLoader, RadioUiEngine* uiEngine )
 {
     mUiEngine = uiEngine;
     mAntennaAttached = mUiEngine->isAntennaAttached();
 
-    setStationModel( &mUiEngine->model() );
+    mInfoText = uiLoader.findWidget<HbLabel>( DOCML::MV_NAME_INFO_TEXT );
+    mInfoText->setTextWrapping( Hb::TextWordWrap );
+
+    setRowCount( 1 );
+    setColumnCount( 1 );
+    setScrollDirections( Qt::Horizontal );
+    setFrictionEnabled( true );
+    setLongPressEnabled( false );
+    setItemRecycling( false );
+    setUniformItemSizes( true );
+    setItemPrototype( new RadioStationItem( *this ) );
+    setSelectionMode( NoSelection );
+
+//    grabGesture( Qt::PanGesture );
+
+    RadioCarouselModel* carouselModel = mUiEngine->carouselModel();
+    setCarouselModel( carouselModel );
+
+    mCurrentItem = static_cast<RadioStationItem*>( itemByIndex( carouselModel->index( 0, 0 ) ) );
 
-    mCurrentItem = static_cast<RadioStationItem*>( itemByIndex( model()->index( 0, 0 ) ) );
+    RadioStationModel* stationModel = &mUiEngine->stationModel();
+    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)));
+
+    updateClampingStyle();
+
+    connectAndTest( this,           SIGNAL(longPressed(HbAbstractViewItem*,QPointF)),
+                    this,           SLOT(openContextMenu(HbAbstractViewItem*,QPointF)) );
+    setLongPressEnabled( true );
+
+    mGenericTimer->setSingleShot( true );
+    connectAndTest( mGenericTimer,  SIGNAL(timeout()),
+                    this,           SLOT(timerFired()));
+
+    initToLastTunedFrequency();
+
+#ifdef USE_DEBUGGING_CONTROLS
+    mRdsLabel->setPos( QPoint( 300, 10 ) );
+    mRdsLabel->setText( "RDS" );
+    mRdsLabel->setElideMode( Qt::ElideNone );
+    HbFontSpec spec = mRdsLabel->fontSpec();
+    spec.setTextPaneHeight( 10 );
+    spec.setRole( HbFontSpec::Secondary );
+    mRdsLabel->setFontSpec( spec );
+    mRdsLabel->setTextColor( Qt::gray );
+    if ( mUiEngine ) {
+        connectAndTest( mUiEngine,      SIGNAL(rdsAvailabilityChanged(bool)),
+                        this,           SLOT(setRdsAvailable(bool)) );
+    }
+#endif // USE_DEBUGGING_CONTROLS
 }
 
 /*!
  *
  */
-void RadioStationCarousel::setStationModel( RadioStationModel* stationModel )
+void RadioStationCarousel::setCarouselModel( RadioCarouselModel* carouselModel )
 {
-    if ( stationModel ) {
-        connectAndTest( stationModel,   SIGNAL(rowsInserted(QModelIndex,int,int)),
+    if ( carouselModel ) {
+        connectAndTest( carouselModel,  SIGNAL(rowsInserted(QModelIndex,int,int)),
                         this,           SLOT(insertFrequency(QModelIndex,int,int)) );
-        connectAndTest( stationModel,   SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
+        connectAndTest( carouselModel,  SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
+                        this,           SLOT(prepareToRemoveFrequency(QModelIndex,int,int)) );
+        connectAndTest( carouselModel,  SIGNAL(rowsRemoved(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)));
+        disconnect( currentModel,   SIGNAL(rowsInserted(QModelIndex,int,int)),
+                    this,           SLOT(insertFrequency(QModelIndex,int,int)) );
+        disconnect( currentModel,   SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
+                    this,           SLOT(prepareToRemoveFrequency(QModelIndex,int,int)) );
+        disconnect( currentModel,   SIGNAL(rowsRemoved(QModelIndex,int,int)),
+                    this,           SLOT(removeFrequency(QModelIndex,int,int)) );
     }
-    setModel( stationModel );
+    setModel( carouselModel );
     updateFrequencies();
+    initCurrentStationItem();
+}
+
+/*!
+ *
+ */
+void RadioStationCarousel::setFrequency( uint frequency, int reason )
+{
+    RadioStationItem* item = currentStationItem();
+//    if ( item && item->mFrequency == frequency ) {
+//        return;
+//    }
+
+    if ( mModelIndexes.contains( frequency ) ) {
+        QModelIndex index = mModelIndexes.value( frequency );
+
+        if ( reason == TuneReason::FrequencyStrip || reason == TuneReason::StationsList ) {
+            scrollToIndex( index, RadioStationCarousel::NoAnim | RadioStationCarousel::NoSignal );
+        } else if ( reason == TuneReason::Skip || reason == TuneReason::StationScan ) {
+            scrollToIndex( index, RadioStationCarousel::NoSignal );
+        } else {
+            scrollToIndex( index );
+        }
+    } else {
+        if ( item ) {
+            item->setFrequency( frequency );
+        }
+    }
 }
 
 /*!
@@ -288,19 +331,18 @@
  */
 void RadioStationCarousel::setScanningMode( bool scanning )
 {
-    RadioStationItem* item = currentStationItem();
+    initCurrentStationItem();
 
     if ( scanning ) {
-        cleanRdsData();
+
+        setInfoText( CarouselInfoText::Scanning );
         if ( !mScanningHelper ) {
             mScanningHelper = new ScanningHelper( *this );
         }
     } else {
         delete mScanningHelper;
         mScanningHelper = 0;
-        if ( item ) {
-            item->update();
-        }
+        clearInfoText();
     }
     setEnabled( !scanning );
 }
@@ -310,7 +352,7 @@
  */
 bool RadioStationCarousel::isInScanningMode() const
 {
-    return mScanningHelper != 0;
+    return RadioUiUtilities::isScannerAlive();
 }
 
 /*!
@@ -327,10 +369,21 @@
 /*!
  *
  */
+void RadioStationCarousel::updateCurrentItem()
+{
+    RadioStationItem* item = currentStationItem();
+    if ( item ) {
+        item->update();
+    }
+}
+
+/*!
+ *
+ */
 void RadioStationCarousel::animateNewStation( const RadioStation& station )
 {
     if ( mScanningHelper ) {
-        RadioStationModel* model = stationModel();
+        RadioCarouselModel* model = carouselModel();
         const QModelIndex index = model->modelIndexFromFrequency( station.frequency() );
         mScanningHelper->mModelIndex = index;
         mScanningHelper->mCurrentFrequency = station.frequency();
@@ -338,15 +391,18 @@
 
         uint prevFrequency = 0;
         if ( model->rowCount() > 1 ) {
-            QModelIndex prevIndex = model->index( index.row() - 1, 0 );
-            RadioStation prevStation = model->data( prevIndex, RadioStationModel::RadioStationRole ).value<RadioStation>();
+            const int prevIndex = index.row() - 1;
+            RadioStation prevStation = model->data( model->index( prevIndex, 0 ), RadioStationModel::RadioStationRole ).value<RadioStation>();
             prevFrequency = prevStation.frequency();
         } else if ( mUiEngine ) {
             prevFrequency = mUiEngine->minFrequency();
         }
+
         mScanningHelper->mPreviousFrequency = prevFrequency;
-        mScanningHelper->mStationItem->setFrequency( prevFrequency );
-        mScanningHelper->mStationItem->cleanRdsData();
+        if ( mScanningHelper->mStationItem ) {
+            mScanningHelper->mStationItem->setFrequency( prevFrequency );
+            mScanningHelper->mStationItem->cleanRdsData();
+        }
 
         mScanningHelper->start();
     }
@@ -355,12 +411,57 @@
 /*!
  *
  */
-void RadioStationCarousel::setItemVisibility( bool visible )
+void RadioStationCarousel::setItemVisible( bool visible )
 {
     RadioStationItem* item = currentStationItem();
-        if ( item ) {
-            item->setVisible( visible );
-        }
+    if ( item ) {
+        item->setVisible( visible );
+    }
+}
+
+/*!
+ *
+ */
+void RadioStationCarousel::setInfoText( CarouselInfoText::Type type )
+{
+    mInfoTextType = type;
+    if ( type == CarouselInfoText::NoFavorites ) {
+        mInfoText->setPlainText( hbTrId( "txt_rad_dialog_long_press_arrow_keys_to_search_str" ) );
+        mInfoText->setAlignment( Qt::AlignCenter );
+        setItemVisible( false );
+        mTimerMode = InfoText;
+        mGenericTimer->setInterval( INFOTEXT_NOFAVORITES_TIMEOUT );
+        mGenericTimer->start();
+    } else if ( type == CarouselInfoText::ConnectAntenna ) {
+        cleanRdsData();
+        mInfoText->setPlainText( hbTrId( "txt_rad_info_connect_wired_headset1" ) );
+        mInfoText->setAlignment( Qt::AlignBottom | Qt::AlignHCenter );
+    } else if ( type == CarouselInfoText::Seeking ) {
+        cleanRdsData();
+        mInfoText->setAlignment( Qt::AlignBottom | Qt::AlignHCenter );
+        mInfoText->setPlainText( hbTrId( "txt_rad_list_seeking" ) );
+    } else if ( type == CarouselInfoText::Scanning ) {
+        cleanRdsData();
+        mInfoText->setAlignment( Qt::AlignBottom | Qt::AlignHCenter );
+        mInfoText->setPlainText( hbTrId( "txt_rad_list_searching_all_available_stations_ple" ) );
+    }
+
+    mInfoText->setVisible( true );
+}
+
+/*!
+ *
+ */
+void RadioStationCarousel::clearInfoText()
+{
+    if ( mInfoTextType != CarouselInfoText::None ) {
+        mGenericTimer->stop();
+        mInfoTextType = CarouselInfoText::None;
+        mInfoText->setVisible( false );
+        mInfoText->clear();
+        setItemVisible( true );
+        updateCurrentItem();
+    }
 }
 
 /*!
@@ -387,8 +488,10 @@
             }
         } else {
             mRadioTextHolder = station.radioText();
-            mRadioTextTimer->stop();
-            mRadioTextTimer->start();
+            mTimerMode = RtPlusCheck;
+            mGenericTimer->stop();
+            mGenericTimer->setInterval( KRadioTextPlusCheckTimeout );
+            mGenericTimer->start();
         }
     }
 }
@@ -396,46 +499,6 @@
 /*!
  * Private slot
  */
-void RadioStationCarousel::leftGesture( int speedPixelsPerSecond )
-{
-    Q_UNUSED( speedPixelsPerSecond );
-    QModelIndex index = currentIndex();
-
-//    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 );
-    }
-}
-
-/*!
- * Private slot
- */
-void RadioStationCarousel::rightGesture( int speedPixelsPerSecond )
-{
-    Q_UNUSED( speedPixelsPerSecond );
-    QModelIndex index = currentIndex();
-
-//    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 );
-    }
-}
-
-/*!
- * Private slot
- */
 void RadioStationCarousel::insertFrequency( const QModelIndex& parent, int first, int last )
 {
     Q_UNUSED( parent );
@@ -447,9 +510,27 @@
         mModelIndexes.insert( station.frequency(), index );
         LOG_FORMAT( "Added frequency %u", station.frequency() );
         if ( !isInScanningMode() ) {
-            scrollToIndex( index, mAutoScrollTime );
+            scrollToIndex( index, RadioStationCarousel::NoAnim | RadioStationCarousel::NoSignal );
         }
     }
+
+    initCurrentStationItem();
+
+    updateClampingStyle();
+}
+
+/*!
+ * Private slot
+ */
+void RadioStationCarousel::prepareToRemoveFrequency( const QModelIndex& parent, int first, int last )
+{
+    Q_UNUSED( parent );
+    QAbstractItemModel* freqModel = model();
+    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() );
+    }
 }
 
 /*!
@@ -458,12 +539,11 @@
 void RadioStationCarousel::removeFrequency( const QModelIndex& parent, int first, int last )
 {
     Q_UNUSED( parent );
-    QAbstractItemModel* freqModel = model();
-    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() );
-    }
+    Q_UNUSED( first );
+    Q_UNUSED( last );
+
+    initCurrentStationItem();
+    updateClampingStyle();
 }
 
 /*!
@@ -486,37 +566,29 @@
 /*!
  * Private slot
  */
-void RadioStationCarousel::updateLoopedPos()
+void RadioStationCarousel::timerFired()
 {
-//    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() );
-//    }
+    if ( mTimerMode == RtPlusCheck ) {
+        RadioStationItem* item = currentStationItem();
+        if ( item ) {
+            item->mRadiotextLabel->setText( mRadioTextHolder );
+        }
+        mRadioTextHolder = "";
+    } else if ( mTimerMode == InfoText ) {
+        clearInfoText();
+    }
+
+    mTimerMode = NoTimer;
 }
 
 /*!
  * Private slot
  */
-void RadioStationCarousel::radioTextPlusCheckEnded()
+void RadioStationCarousel::openContextMenu( HbAbstractViewItem* item, const QPointF& coords )
 {
-    RadioStationItem* item = currentStationItem();
     if ( item ) {
-        item->mRadiotextLabel->setText( mRadioTextHolder );
+        static_cast<RadioStationItem*>( item )->handleLongPress( coords );
     }
-    mRadioTextHolder = "";
-    mRadioTextTimer->stop();
-}
-
-/*!
- * Private slot
- */
-void RadioStationCarousel::delayedScroll()
-{
-    scrollContentsTo( QPointF( mScrollPos, 0 ) , 1000 );
 }
 
 #ifdef USE_DEBUGGING_CONTROLS
@@ -539,93 +611,82 @@
 
 /*!
  * Public slot
- *
- */
-void RadioStationCarousel::setFrequency( uint frequency )
-{
-    RadioStationItem* item = currentStationItem();
-    if ( item && item->mFrequency == frequency ) {
-        return;
-    }
-/*
-    QModelIndex index = static_cast<RadioStationFilterModel*>( model() )->modelIndexFromFrequency( frequency );
-    if ( index.isValid() ) {
-        scrollToIndex( index, 0 );
-    } else {
-        if ( item ) {
-            item->setFrequency( frequency );
-        }
-    }
-    */
-/*
-
-
-    QAbstractItemModel* itemModel = model();
-    const int count = itemModel->rowCount();
-    for ( int i = 0; i < count; ++i ) {
-        QModelIndex index = itemModel->index( i, 0 );
-        uint stationFrequency = itemModel->data( index, RadioStationModel::RadioStationRole ).value<RadioStation>().frequency();
-        if ( frequency == stationFrequency ) {
-            scrollToIndex( index, mAutoScrollTime );
-            return;
-        }
-    }
- */
-
-    if ( mModelIndexes.contains( frequency ) ) {
-        QModelIndex index = mModelIndexes.value( frequency );
-        scrollToIndex( index, mAutoScrollTime );
-    } else {
-        if ( item ) {
-            item->setFrequency( frequency );
-        }
-    }
-}
-
-/*!
- * Public slot
  */
 void RadioStationCarousel::updateAntennaStatus( bool connected )
 {
-    mRadioTextTimer->stop();
     mAntennaAttached = connected;
-    RadioStationItem* item = currentStationItem();
-    if ( item  ) {
-        item->update();
+    mGenericTimer->stop();
+
+    if ( !connected ) {
+        setInfoText( CarouselInfoText::ConnectAntenna );
+    } else {
+        clearInfoText();
     }
 }
 
 /*!
  * \reimp
  */
-void RadioStationCarousel::mouseMoveEvent( QGraphicsSceneMouseEvent* event )
+void RadioStationCarousel::mousePressEvent( QGraphicsSceneMouseEvent* event )
 {
-    HbGridView::mouseMoveEvent( event );
+    if ( mInfoTextType == CarouselInfoText::NoFavorites ) {
+        clearInfoText();
+    }
+
+    HbGridView::mousePressEvent( event );
 }
 
 /*!
  * \reimp
  */
-void RadioStationCarousel::mouseReleaseEvent( QGraphicsSceneMouseEvent* event )
+void RadioStationCarousel::gestureEvent( QGestureEvent* event )
 {
-//    QPointF pos = QPointF( size().width() / 2, size().height() / 2 );
-//    HbAbstractViewItem* item = itemAtPosition( pos );
-//    if ( item ) {
-//        scrollToIndex( item->modelIndex(), mAutoScrollTime );
-//    }
+    HbGridView::gestureEvent( event );
 
-    HbGridView::mouseReleaseEvent( event );
+    if ( HbPanGesture* gesture = qobject_cast<HbPanGesture*>( event->gesture( Qt::PanGesture ) ) ) {
+        if ( gesture->state() == Qt::GestureFinished ) {
+            updatePos( (int)gesture->offset().x() );
+        }
+    }
 }
 
 /*!
- * \reimp
+ *
  */
-void RadioStationCarousel::resizeEvent( QGraphicsSceneResizeEvent* event )
+void RadioStationCarousel::initToLastTunedFrequency()
 {
-    HbGridView::resizeEvent( event );
-//    QModelIndex index = filterModel()->modelIndexFromFrequency( mUiEngine.currentFrequency() );
-//    setCurrentIndex( index, QItemSelectionModel::SelectCurrent );
-//    scrollTo( index );
+    const uint currentFrequency = mUiEngine->currentFrequency();
+    const QModelIndex currentIndex = carouselModel()->modelIndexFromFrequency( currentFrequency );
+
+    if ( currentIndex.isValid() ) {//&& itemByIndex( currentIndex ) ) {
+        scrollToIndex( currentIndex, RadioStationCarousel::NoSignal | RadioStationCarousel::NoAnim );
+    } else {
+        RadioStationItem* item = static_cast<RadioStationItem*>( itemAt( 0, 0 ) );
+        if ( item ) {
+            item->setFrequency( currentFrequency );
+        }
+    }
+}
+
+/*!
+ *
+ */
+void RadioStationCarousel::updateClampingStyle()
+{
+    if ( model()->rowCount() > 1 ) {
+        setClampingStyle( HbScrollArea::StrictClamping );
+    } else {
+        setClampingStyle( HbScrollArea::BounceBackClamping );
+        update( mUiEngine->stationModel().currentStation() );
+    }
+}
+
+/*!
+ *
+ */
+void RadioStationCarousel::initCurrentStationItem()
+{
+    mCurrentItem = static_cast<RadioStationItem*>( visibleItems().first() );
 }
 
 /*!
@@ -633,39 +694,76 @@
  */
 RadioStationItem* RadioStationCarousel::currentStationItem()
 {
-    return static_cast<RadioStationItem*>( currentViewItem() );
+    return mCurrentItem;
 }
 
 /*!
  *
  */
-RadioStationModel* RadioStationCarousel::stationModel() const
+RadioCarouselModel* RadioStationCarousel::carouselModel() const
 {
-    return static_cast<RadioStationModel*>( model() );
+    return static_cast<RadioCarouselModel*>( model() );
 }
 
 /*!
  *
  */
-void RadioStationCarousel::scrollToIndex( const QModelIndex& index, int time )
+void RadioStationCarousel::scrollToIndex( const QModelIndex& index, RadioStationCarousel::ScrollMode mode )
 {
     RadioStationItem* item = static_cast<RadioStationItem*>( itemByIndex( index ) );
     if ( index.isValid() && item ) {
-//        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);
+        const int posX = index.row() * (int)size().width();
+        setCurrentIndex( index, QItemSelectionModel::ClearAndSelect );
+
+        if ( mode.testFlag( UpdateItem ) ) {
+            item->update();
         }
 
-        setCurrentIndex( index, QItemSelectionModel::SelectCurrent );
+        int scrollTime = mAutoScrollTime;
+        if ( mode.testFlag( NoAnim ) ) {
+            scrollTime = 0;
+        }
+        scrollContentsTo( QPointF( posX, 0 ), scrollTime );
         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 );
+        if ( !mode.testFlag( NoSignal ) ) {
+            uint frequency = model()->data( index, RadioStationModel::RadioStationRole ).value<RadioStation>().frequency();
+            emit frequencyChanged( frequency, TuneReason::StationCarousel );
+        }
     }
 }
+
+/*!
+ *
+ */
+void RadioStationCarousel::updatePos( int offset )
+{
+//    QModelIndex index = currentIndex();
+//
+//    ScrollMode mode = 0;
+//    const qreal threshold = size().width() / 3;
+//    if ( abs( offset ) >= threshold ) {
+//        if ( offset > 0 ) {
+//            index = previousIndex( index );
+//        } else {
+//            index = nextIndex( index );
+//        }
+//    } else {
+//        mode |= RadioStationCarousel::NoSignal;
+//    }
+//
+//    scrollToIndex( index, mode );
+}
+
+/*!
+ *
+ */
+void RadioStationCarousel::skip( StationSkip::Mode mode )
+{
+    RadioStationItem* item = currentStationItem();
+    if ( item ) {
+        RadioCarouselModel* model = carouselModel();
+        const uint frequency = model->findClosest( item->frequency(), mode ).frequency();
+        const QModelIndex& index = model->modelIndexFromFrequency( frequency );
+        scrollToIndex( index, RadioStationCarousel::NoSignal );
+    }
+}
--- a/radioapp/radiowidgets/src/radiostationitem.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/src/radiostationitem.cpp	Tue May 18 11:27:22 2010 +0100
@@ -19,6 +19,7 @@
 #include <HbStyleLoader>
 #include <HbPushButton>
 #include <HbAnchorLayout>
+#include <HbMessageBox>
 
 // User includes
 #include "radiostationitem.h"
@@ -80,7 +81,6 @@
         QPixmap background( QSize( 50, 50 ) );
         background.fill( Qt::transparent );
         mIconButton->setBackground( HbIcon( background ) );
-        mIconButton->setOrientation( Qt::Horizontal );
         mIconButton->setIcon( mCarousel.nonFavoriteIcon() );
         mIconButton->setMaximumSize( 50, 50 );
         connectAndTest( mIconButton, SIGNAL(clicked()), this, SLOT(toggleFavorite()));
@@ -148,7 +148,7 @@
 {
     RadioUiEngine* uiEngine = carousel()->uiEngine();
     if ( uiEngine ) {
-        uiEngine->model().setData( modelIndex(), mFrequency, RadioStationModel::ToggleFavoriteRole );
+        uiEngine->stationModel().setData( modelIndex(), mFrequency, RadioStationModel::ToggleFavoriteRole );
     }
 }
 
@@ -224,10 +224,23 @@
 /*!
  *
  */
+void RadioStationItem::handleLongPress( const QPointF& /*coords*/ )
+{
+    QString text = QString( "Selected frequency: %1" ).arg( mFrequency );
+//    HbMessageBox::information( text );
+}
+
+/*!
+ *
+ */
 void RadioStationItem::updateFavoriteIcon( bool isFavorite )
 {
     if ( !mCarousel.isInScanningMode() ) {
-        mIconButton->setIcon( isFavorite ? mCarousel.favoriteIcon() : mCarousel.nonFavoriteIcon() );
+        if ( isFavorite ) {
+            mIconButton->setIcon( mCarousel.favoriteIcon() );
+        } else {
+            mIconButton->setIcon( mCarousel.nonFavoriteIcon() );
+        }
     } else {
         mIconButton->setIcon( HbIcon( "" ) );
     }
--- a/radioapp/radiowidgets/src/radiostationsview.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/src/radiostationsview.cpp	Tue May 18 11:27:22 2010 +0100
@@ -21,18 +21,17 @@
 #include <HbPushButton>
 #include <HbEffect>
 #include <HbAction>
-#include <HbMessageBox>
 #include <HbInputDialog>
 #include <HbMenu>
 
 // User includes
 #include "radiostationsview.h"
 #include "radiologger.h"
-#include "radiomainwindow.h"
+#include "radiowindow.h"
 #include "radiouiengine.h"
 #include "radiobannerlabel.h"
 #include "radiofrequencyscanner.h"
-#include "radioxmluiloader.h"
+#include "radiouiloader.h"
 #include "radiostationmodel.h"
 #include "radiostation.h"
 #include "radiostationfiltermodel.h"
@@ -50,7 +49,8 @@
     mHeadingBanner( 0 ),
     mFavoritesButton( 0 ),
     mLocalStationsButton( 0 ),
-    mSelectedStation( new RadioStation )
+    mSelectedStation( new RadioStation ),
+    mCurrentQuestion( NoQuestion )
 {
 }
 
@@ -102,8 +102,7 @@
     LOG_TIMESTAMP( "Channel change started" );
     QModelIndex sourceIndex = mFilterModel->mapToSource( index );
     *mSelectedStation = mModel->stationAt( sourceIndex.row() );
-    RADIO_ASSERT( station.isValid(), "FMRadio", "invalid RadioStation");
-    mMainWindow->uiEngine().tunePreset( mSelectedStation->presetIndex() );
+    mMainWindow->uiEngine().tuneFrequency( mSelectedStation->frequency(), TuneReason::StationsList );
 }
 
 /*!
@@ -154,13 +153,13 @@
  */
 void RadioStationsView::deckButtonPressed()
 {
-    if ( sender() == mFavoritesButton ) {
+    const bool showFavorites = mFavoritesButton->isChecked();
+    if ( showFavorites ) {
         loadSection( DOCML::FILE_STATIONSVIEW, DOCML::SV_SECTION_SHOW_FAVORITES );
     } else {
         loadSection( DOCML::FILE_STATIONSVIEW, DOCML::SV_SECTION_SHOW_ALL_STATIONS );
     }
 
-    const bool showFavorites = mFavoritesButton->isChecked();
     mFilterModel->setTypeFilter( showFavorites ? RadioStation::Favorite
                                                : RadioStation::LocalStation );
 
@@ -173,20 +172,23 @@
  */
 void RadioStationsView::startScanning()
 {
-    const int rowCount =  mMainWindow->uiEngine().model().rowCount();
-    bool scanAllowed = true;
+    const int rowCount =  mMainWindow->uiEngine().stationModel().rowCount();
+    mCurrentQuestion = StartScanning;
     if ( rowCount > 0 ) {
-        scanAllowed = HbMessageBox::question( hbTrId( "txt_rad_info_all_stations_in_stations_list_will_be" ) );
+        askQuestion( hbTrId( "txt_rad_info_all_stations_in_stations_list_will_be" ) );
+    } else {
+        userAccepted();
     }
+}
 
-    if ( scanAllowed ) {
-        RadioFrequencyScanner* scanner = new RadioFrequencyScanner( mMainWindow->uiEngine(), this );
-
-        connectAndTest( scanner,    SIGNAL(frequencyScannerFinished()),
-                        this,       SLOT(updateControlVisibilities()) );
-
-        scanner->startScanning( *mUiLoader );
-    }
+/*!
+ * Private slot
+ *
+ */
+void RadioStationsView::finishScanning()
+{
+    updateControlVisibilities();
+    mFrequencyScanner.take();
 }
 
 /*!
@@ -196,21 +198,20 @@
 void RadioStationsView::updateControlVisibilities()
 {
     LOG_SLOT_CALLER;
-    const bool listEmpty = mModel->rowCount() == 0;
+    bool listEmpty = mModel->rowCount() == 0;
     const bool localStationsMode = !mFavoritesButton->isChecked();
 
-    mScanStationsAction->setVisible( mMainWindow->uiEngine().isAntennaAttached()
-                                     && 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 );
+    if ( !localStationsMode ) {
+        listEmpty = mModel->favoriteCount() == 0;
     }
 
+    mClearListAction->setVisible( !listEmpty );
+
+    const bool scanAvailable = mMainWindow->uiEngine().isAntennaAttached() && localStationsMode;
+    mScanStationsAction->setVisible( scanAvailable );
+    HbPushButton* scanButton = mUiLoader->findWidget<HbPushButton>( DOCML::SV_NAME_SCAN_BUTTON );
+    scanButton->setEnabled( scanAvailable );
+
     loadSection( DOCML::FILE_STATIONSVIEW, listEmpty ? DOCML::SV_SECTION_SHOW_SCAN_TEXT : DOCML::SV_SECTION_HIDE_SCAN_TEXT );
 }
 
@@ -218,17 +219,28 @@
  * Private slot
  *
  */
+void RadioStationsView::clearList()
+{
+    const bool favoriteMode = mFavoritesButton->isChecked();
+    mCurrentQuestion = ClearList;
+    askQuestion( hbTrId( favoriteMode ? "txt_rad_info_clear_favourite_stations_list"
+                                      : "txt_rad_info_clear_all_stations_list" ) );
+}
+
+/*!
+ * 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 );
-
-    if ( nameQuery.exec() == nameQuery.primaryAction() ) {
-        mModel->renameStation( mSelectedStation->presetIndex(), nameQuery.value().toString() );
-    }
+    HbInputDialog* nameQuery = new HbInputDialog();
+    nameQuery->setAttribute( Qt::WA_DeleteOnClose, true );
+    nameQuery->setDismissPolicy( HbDialog::NoDismiss );
+    nameQuery->setPromptText( hbTrId( "txt_rad_dialog_new_name" ) );
+    nameQuery->setInputMode( HbInputDialog::TextInput );
+    nameQuery->setValue( mSelectedStation->name() );
+    nameQuery->setObjectName( DOCML::NAME_INPUT_QUERY );
+    nameQuery->open( this, SLOT(renameDone(HbAction* )) );
 }
 
 /*!
@@ -237,15 +249,7 @@
  */
 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() );
-    }
+    mModel->setFavoriteByPreset( mSelectedStation->presetIndex(), !mSelectedStation->isFavorite() );
 }
 
 /*!
@@ -254,10 +258,20 @@
  */
 void RadioStationsView::deleteStation()
 {
-    const bool answer = HbMessageBox::question( hbTrId( "txt_rad_menu_delete_station" ) );
+    mCurrentQuestion = DeleteStation;
+    askQuestion( hbTrId( "txt_rad_menu_delete_station" ) );
+}
 
-    if ( answer ) {
-        mModel->removeStation( mModel->currentStation() );
+/*!
+ * Private slot
+ *
+ */
+void RadioStationsView::renameDone( HbAction* action )
+{
+    HbInputDialog* dlg = static_cast<HbInputDialog*>( sender() );
+
+    if( action == dlg->primaryAction() ) {
+        mModel->renameStation( mSelectedStation->presetIndex(), dlg->value().toString() );
     }
 }
 
@@ -265,12 +279,11 @@
  * From RadioViewBase
  *
  */
-void RadioStationsView::init( RadioXmlUiLoader* uiLoader, RadioMainWindow* mainWindow )
+void RadioStationsView::init()
 {
     LOG_METHOD;
-    mUiLoader.reset( uiLoader );
-    mMainWindow = mainWindow;
-    mModel = &mMainWindow->uiEngine().model();
+    mInitialized = true;
+    mModel = &mMainWindow->uiEngine().stationModel();
 
     RadioUiEngine* engine = &mMainWindow->uiEngine();
 
@@ -310,13 +323,38 @@
     // "Remove all presets" menu item
     mClearListAction = mUiLoader->findObject<HbAction>( DOCML::SV_NAME_CLEAR_LIST_ACTION );
     connectAndTest( mClearListAction,   SIGNAL(triggered() ),
-                    mModel,             SLOT(removeAll() ) );
+                    this,               SLOT(clearList() ) );
 
     connectCommonMenuItem( MenuItem::UseLoudspeaker );
 
     initListView();
     
     initBackAction();
+
+    updateControlVisibilities();
+}
+
+/*!
+ * \reimp
+ */
+void RadioStationsView::userAccepted()
+{
+    if ( mCurrentQuestion == StartScanning ) {
+        mFrequencyScanner.reset( new RadioFrequencyScanner( mMainWindow->uiEngine(), this ) );
+
+        connectAndTest( mFrequencyScanner.data(),   SIGNAL(frequencyScannerFinished()),
+                        this,                       SLOT(finishScanning()) );
+
+        mFrequencyScanner->startScanning();
+    } else if ( mCurrentQuestion == ClearList ){
+        const bool favoriteMode = mFavoritesButton->isChecked();
+        mModel->removeAll( favoriteMode ? RadioStationModel::RemoveFavorites : RadioStationModel::RemoveAll );
+        updateControlVisibilities();
+    } else if ( mCurrentQuestion == DeleteStation ) {
+        mModel->removeStation( mModel->currentStation() );
+    }
+
+    mCurrentQuestion = NoQuestion;
 }
 
 /*!
@@ -325,8 +363,6 @@
 void RadioStationsView::showEvent( QShowEvent* event )
 {
     RadioViewBase::showEvent( event );
-    mModel->setDetail( RadioStationModel::ShowIcons | RadioStationModel::ShowGenre );
-    updateControlVisibilities();
 }
 
 /*!
--- a/radioapp/radiowidgets/src/radiostripbase.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/src/radiostripbase.cpp	Tue May 18 11:27:22 2010 +0100
@@ -54,8 +54,8 @@
     // so the visibility of the items doesn't need to be modified.
     mItemPoolParent->setVisible( false );
 
-    connectAndTest( this,                   SIGNAL(scrollPositionChanged(QPointF)),
-                    this,                   SLOT(scrollPositionChanged(QPointF)));
+    connectAndTest( this,   SIGNAL(scrollPositionChanged(QPointF)),
+                    this,   SLOT(scrollPositionChanged(QPointF)));
 }
 
 /*!
@@ -238,14 +238,6 @@
 /*!
  *
  */
-void RadioStripBase::scrollPosChanged( QPointF newPosition )
-{
-    Q_UNUSED( newPosition );
-}
-
-/*!
- *
- */
 void RadioStripBase::moveAllItemsToPool()
 {
     // set parent of all items to pool
--- a/radioapp/radiowidgets/src/radiotuningview.cpp	Tue May 11 12:31:43 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,278 +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>
-#include <HbLabel>
-#include <HbPushButton>
-#include <HbMessageBox>
-
-// User includes
-#include "radiomainwindow.h"
-#include "radiotuningview.h"
-#include "radiofrequencystrip.h"
-#include "radiouiengine.h"
-#include "radiologger.h"
-#include "radiostationcarousel.h"
-#include "radioxmluiloader.h"
-#include "radiostationmodel.h"
-#include "radiofrequencyscanner.h"
-
-// Constants
-
-/*!
- *
- */
-RadioTuningView::RadioTuningView() :
-    RadioViewBase( false ),
-    mFrequencyScanner( 0 ),
-    mCarousel( 0 )
-{
-}
-
-/*!
- * From RadioViewBase
- *
- */
-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;
-    mUiLoader.reset( uiLoader );
-    mMainWindow = mainWindow;
-
-    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::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)),
-                    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 history" menu item
-    connectViewChangeMenuItem( DOCML::TV_NAME_HISTORYVIEW_ACTION, SLOT(activateHistoryView()) );
-
-    const bool firsTimeStart = engine->isFirstTimeStart();
-    const int rowCount = engine->model().rowCount();
-
-    updateAudioRoute( mMainWindow->uiEngine().isUsingLoudspeaker() );
-
-    if ( firsTimeStart && rowCount == 0 ){
-        QTimer::singleShot( 100, this, SLOT(startScanning()) );
-    }
-}
-
-/*!
- * From RadioViewBase
- *
- */
-void RadioTuningView::setOrientation()
-{
-    loadSection( DOCML::FILE_TUNINGVIEW, mMainWindow->orientationSection() );
-}
-
-/*!
- * Private slot
- */
-void RadioTuningView::toggleFavorite()
-{
-    bool favorite = false;
-    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 );
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/src/radiouiloader.cpp	Tue May 18 11:27:22 2010 +0100
@@ -0,0 +1,27 @@
+/*
+* 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 "radiouiloader.h"
+
+/*!
+ *
+ */
+RadioUiLoader::RadioUiLoader() :
+    HbDocumentLoader()
+{
+}
--- a/radioapp/radiowidgets/src/radiouiutilities.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/src/radiouiutilities.cpp	Tue May 18 11:27:22 2010 +0100
@@ -22,6 +22,7 @@
 #include "radiouiutilities.h"
 #include "radiofrequencystrip.h"
 #include "radiostationcarousel.h"
+#include "radiofrequencyscanner.h"
 #include "radiologger.h"
 
 // Constants
@@ -90,6 +91,18 @@
 /*!
  *
  */
+bool RadioUiUtilities::isScannerAlive()
+{
+    RadioFrequencyScanner* scanner = instance().mScanner;
+    if ( scanner ) {
+        return scanner->isAlive();
+    }
+    return false;
+}
+
+/*!
+ *
+ */
 void RadioUiUtilities::setFrequencyStrip( RadioFrequencyStrip* frequencyStrip )
 {
     instance().mFrequencyStrip = frequencyStrip;
@@ -106,6 +119,14 @@
 /*!
  *
  */
+void RadioUiUtilities::setFrequencyScanner( RadioFrequencyScanner* scanner )
+{
+    instance().mScanner = scanner;
+}
+
+/*!
+ *
+ */
 RadioUiUtilities& RadioUiUtilities::instance()
 {
     if ( !::theInstance ) {
--- a/radioapp/radiowidgets/src/radioviewbase.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgets/src/radioviewbase.cpp	Tue May 18 11:27:22 2010 +0100
@@ -19,11 +19,12 @@
 #include <HbAction>
 #include <HbEffect>
 #include <QCoreApplication>
+#include <HbMessageBox>
 
 #include "radioviewbase.h"
-#include "radiomainwindow.h"
+#include "radiowindow.h"
 #include "radiostationmodel.h"
-#include "radioxmluiloader.h"
+#include "radiouiloader.h"
 #include "radiouiengine.h"
 #include "radiologger.h"
 
@@ -34,6 +35,7 @@
     HbView( 0 ),
     mMainWindow( 0 ),
     mUiLoader( 0 ),
+    mInitialized( false ),
     mTransientView( transient ),
     mUseLoudspeakerAction( 0 ),
     mOrientation( Qt::Vertical )
@@ -53,11 +55,18 @@
 /*!
  *
  */
-void RadioViewBase::init( RadioXmlUiLoader* uiLoader, RadioMainWindow* mainWindow )
+void RadioViewBase::setMembers( RadioUiLoader* uiLoader, RadioWindow* mainWindow )
 {
-    // Default implementation does nothing
-    Q_UNUSED( uiLoader );
-    Q_UNUSED( mainWindow );
+    mUiLoader.reset( uiLoader );
+    mMainWindow = mainWindow;
+}
+
+/*!
+ *
+ */
+bool RadioViewBase::isInitialized() const
+{
+    return mInitialized;
 }
 
 /*!
@@ -97,7 +106,7 @@
  */
 void RadioViewBase::activatePreviousView()
 {
-    mMainWindow->activateTuningView();
+    mMainWindow->activateMainView();
 }
 
 /*!
@@ -110,6 +119,18 @@
 }
 
 /*!
+ * Private slot
+ * TODO: Refactor this awkwardness once Orbit figures out a better way
+ */
+void RadioViewBase::handleUserAnswer( HbAction* answer )
+{
+    HbMessageBox* dlg = static_cast<HbMessageBox*>( sender() );
+    if( dlg->actions().first() == answer ) {
+        userAccepted();
+    }
+}
+
+/*!
  *
  */
 void RadioViewBase::initBackAction()
@@ -117,7 +138,7 @@
     // The default back button activates the tuning view
     HbAction* backAction = new HbAction( Hb::BackNaviAction, this );
     connectAndTest( backAction,     SIGNAL(triggered()),
-                    mMainWindow,    SLOT(activateTuningView()) );
+                    mMainWindow,    SLOT(activateMainView()) );
     setNavigationAction( backAction );    
 }
 
@@ -167,7 +188,8 @@
  */
 void RadioViewBase::loadSection( const QString& docml, const QString& section )
 {
-    bool ok = false;
+    LOG_FORMAT( "RadioViewBase::loadSection: Docml: %s, section: %s", GETSTRING( docml ), GETSTRING( section ) );
+    bool ok = false;    
     mUiLoader->load( docml, section, &ok );
     LOG_ASSERT( ok, LOG_FORMAT( "Loading of section %s failed!", GETSTRING( section ) ) );
 }
@@ -175,7 +197,23 @@
 /*!
  *
  */
+void RadioViewBase::askQuestion( const QString& question )
+{
+    HbMessageBox::question( question, this, SLOT(handleUserAnswer(HbAction*)) );
+}
+
+/*!
+ *
+ */
 void RadioViewBase::setOrientation()
 {
     // Default implementation does nothing
 }
+
+/*!
+ *
+ */
+void RadioViewBase::userAccepted()
+{
+    // Default implementation does nothing
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/src/radiowindow.cpp	Tue May 18 11:27:22 2010 +0100
@@ -0,0 +1,244 @@
+/*
+* 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 <HbInstance>
+#include <HbAction>
+#include <HbDeviceMessageBox>
+#include <HbVolumeSliderPopup>
+
+// User includes
+#include "radiowindow.h"
+#include "radiomainview.h"
+#include "radiostationsview.h"
+#include "radiouiengine.h"
+#include "radiostationmodel.h"
+#include "radiologger.h"
+#include "radiouiloader.h"
+
+// Constants
+
+/**
+ * Desired amount of delay of volumesliderpopup
+ */
+const int KVolumeSliderDelay = 5000;
+
+/*!
+ *
+ */
+RadioWindow::RadioWindow( QWidget* parent ) :
+    HbMainWindow( parent ),
+    mUiEngine( new RadioUiEngine( this ) )
+{
+}
+
+/*!
+ *
+ */
+RadioWindow::~RadioWindow()
+{
+    // Destructor needs to be defined. See explanation from RadioEngineWrapperPrivate destructor.
+}
+
+/*!
+ *
+ */
+void RadioWindow::showErrorMessage( const QString& text )
+{
+    HbDeviceMessageBox box( text, HbMessageBox::MessageTypeWarning );
+    box.setTimeout( HbPopup::NoTimeout );
+    box.setDismissPolicy( HbPopup::NoDismiss );
+    box.exec();
+}
+
+/*!
+ *
+ */
+void RadioWindow::init()
+{
+    connectAndTest( this, SIGNAL(viewReady()),
+                    this, SLOT(initView()) );
+
+    activateMainView();
+}
+
+/*!
+ *
+ */
+RadioUiEngine& RadioWindow::uiEngine()
+{
+    return *mUiEngine;
+}
+
+/*!
+ * Returns the XML layout section that corresponds to the view orientation
+ */
+QString RadioWindow::orientationSection()
+{
+    return orientation() == Qt::Vertical ? DOCML::SECTION_PORTRAIT : DOCML::SECTION_LANDSCAPE;
+}
+
+/*!
+ *
+ */
+void RadioWindow::activateMainView()
+{
+    activateView( mMainView, DOCML::FILE_MAINVIEW, Hb::ViewSwitchUseBackAnim );
+}
+
+/*!
+ *
+ */
+void RadioWindow::activateStationsView()
+{
+    activateView( mStationsView, DOCML::FILE_STATIONSVIEW );
+}
+
+/*!
+ *
+ */
+void RadioWindow::activateHistoryView()
+{
+    activateView( mHistoryView, DOCML::FILE_HISTORYVIEW );
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioWindow::initView()
+{
+    if ( !mUiEngine->isInitialized() ) {
+        // Start the engine
+        if ( !mUiEngine->init() ) {
+            showErrorMessage( hbTrId( "txt_fmradio_info_fm_radio_could_not_be_started" ) );
+            qApp->quit();
+            return;
+        }
+
+        // MainWindow is the one that always listens for orientation changes and then delegates
+        // the updates to the views
+        connectAndTest( this,               SIGNAL(orientationChanged(Qt::Orientation)),
+                        this,               SLOT(updateOrientation(Qt::Orientation)) );
+
+        connectAndTest( mUiEngine.data(),   SIGNAL(volumeChanged(int)),
+                        this,               SLOT(showVolumeLevel(int)) );
+        connectAndTest( mUiEngine.data(),   SIGNAL(antennaStatusChanged(bool)),
+                        this,               SLOT(updateAntennaStatus(bool)) );
+    }
+
+    RadioViewBase* view = static_cast<RadioViewBase*>( currentView() );
+    if ( !view->isInitialized() ) {
+        view->init();
+    }
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioWindow::updateOrientation( Qt::Orientation orientation )
+{
+    HbView* view = currentView();
+    RADIO_ASSERT( view, "RadioWindow::updateOrientation", "Current view not found!" );
+    if ( view ) {
+        static_cast<RadioViewBase*>( view )->updateOrientation( orientation );
+    }
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioWindow::showVolumeLevel( int volume )
+{
+    if ( !mVolSlider ) {
+        mVolSlider.reset( new HbVolumeSliderPopup() );
+        mVolSlider->setRange( 0, KMaximumVolumeLevel );
+        mVolSlider->setSingleStep( 1 );
+        mVolSlider->setTimeout( KVolumeSliderDelay );
+        connectAndTest( mVolSlider.data(),  SIGNAL(valueChanged(int)),
+                        mUiEngine.data(),   SLOT(setVolume(int)) );
+    }
+
+    mVolSlider->setValue( volume );
+    mVolSlider->setText( QString( "%L1%" ).arg( volume * 100 / KMaximumVolumeLevel ) );
+    mVolSlider->show();
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioWindow::updateAntennaStatus( bool connected )
+{
+    if ( !connected ) {
+        HbMessageBox::information( hbTrId( "txt_rad_dpophead_connect_wired_headset" ) );
+    }
+}
+
+/*!
+ *
+ */
+void RadioWindow::activateView( ViewPtr& aMember, const QString& docmlFile, Hb::ViewSwitchFlags flags )
+{
+    LOG_METHOD;
+    if ( aMember && aMember == currentView() ) {
+        return;
+    }
+
+    RadioViewBase* previousView = static_cast<RadioViewBase*>( currentView() );
+    if ( previousView && previousView->isTransient() ) {
+        removeView( previousView );
+        previousView->deleteLater();
+    }
+
+    bool viewCreated = false;
+    if ( !aMember ) {
+        viewCreated = true;
+
+        RadioUiLoader* uiLoader = new RadioUiLoader();
+        bool ok = false;
+
+        // View takes ownership of the ui loader when it is created inside the load function
+        QObjectList objectList = uiLoader->load( docmlFile, &ok );
+
+        RADIO_ASSERT( ok , "FMRadio", "invalid DocML file" );
+        if ( !ok ) {
+            delete uiLoader;
+            uiLoader = 0;
+            return;
+        }
+
+        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->setMembers( uiLoader, this );
+
+        addView( aMember );
+    }
+
+    aMember->updateOrientation( orientation(), viewCreated );
+
+    setCurrentView( aMember, true, flags );
+}
--- a/radioapp/radiowidgets/src/radioxmluiloader.cpp	Tue May 11 12:31:43 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +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 "radioxmluiloader.h"
-
-/*!
- *
- */
-RadioXmlUiLoader::RadioXmlUiLoader() :
-    HbDocumentLoader()
-{
-}
--- a/radioapp/radiowidgetsplugin/main.cpp	Tue May 11 12:31:43 2010 +0100
+++ b/radioapp/radiowidgetsplugin/main.cpp	Tue May 18 11:27:22 2010 +0100
@@ -21,7 +21,7 @@
 
 // User includes
 #include "radiostationsview.h"
-#include "radiotuningview.h"
+#include "radiomainview.h"
 #include "radiohistoryview.h"
 #include "radiostationcarousel.h"
 #include "radiofrequencystrip.h"
@@ -47,8 +47,8 @@
 {
     QObject* object = 0;
 
-    if ( type == RadioTuningView::staticMetaObject.className() ) {
-        object = new RadioTuningView();
+    if ( type == RadioMainView::staticMetaObject.className() ) {
+        object = new RadioMainView();
     } else if ( type == RadioStationsView::staticMetaObject.className() ) {
         object = new RadioStationsView();
     } else if ( type == RadioHistoryView::staticMetaObject.className() ) {
@@ -76,7 +76,7 @@
 QList<const QMetaObject *> RadioWidgetsPlugin::supportedObjects()
 {
     QList<const QMetaObject *> result;
-    result.append( &RadioTuningView::staticMetaObject );
+    result.append( &RadioMainView::staticMetaObject );
     result.append( &RadioStationsView::staticMetaObject );
     result.append( &RadioHistoryView::staticMetaObject );
     result.append( &RadioBannerLabel::staticMetaObject );