hswidgetplugin/fmradiohswidgetplugin/inc/fmradiohswidget.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 14 May 2010 15:52:32 +0300
changeset 19 afea38384506
parent 14 63aabac4416d
permissions -rw-r--r--
Revision: 201017 Kit: 201019

/*
* Copyright (c) 2010 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:  FM Radio home screen widget
*
*/

#ifndef FMRADIOHSWIDGET_H
#define FMRADIOHSWIDGET_H

// System includes
#include <HbWidget>

// User includes
#include "fmradiohswidgetradioserviceclient.h"

// 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. */
const QString KRadioInformationStationName = "stationName";
/**  Key for radio information hash. */
const QString KRadioInformationCallSign = "callSign";
/**  Key for radio information hash. */
const QString KRadioInformationFrequency = "frequency";
/**  Key for radio information hash. */
const QString KRadioInformationRt = "rt";
/**  Key for radio information hash. */
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. */
const QString KConnectHeadsetText = "Connect wired headset.";
/**  Mhz text. */
const QString KMhzText = "Mhz";
/**  DOCML object name for mainLayout */
const QString KDocmlObjectNameMainLayout = "mainLayout";
/**  DOCML object name for radioIconPushButton */
const QString KDocmlObjectNameRadioIconPushButton = "radioIconPushButton";
/**  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 verticalButtonSeparatorLabel1 */
const QString KDocmlObjectNameVerticalButtonSeparatorLabel1 = "verticalButtonSeparatorLabel1";
/**  DOCML object name for playPushButton */
const QString KDocmlObjectNamePlayPushButton = "playPushButton";
/**  DOCML object name for verticalButtonSeparatorLabel2 */
const QString KDocmlObjectNameVerticalButtonSeparatorLabel2 = "verticalButtonSeparatorLabel2";
/**  DOCML object name for nextPushButton */
const QString KDocmlObjectNameNextPushButton = "nextPushButton";
/**  DOCML object name for twoRowsLayout */
const QString KDocmlObjectNameTwoRowsLayout = "twoRowsLayout";
/**  DOCML object name for oneRowLayout */
const QString KDocmlObjectNameOneRowLayout = "oneRowLayout";
/**  DOCML object name for animationLayout */
const QString KDocmlObjectNameAnimationLayout = "animationLayout";
/**  DOCML object name for firstRowLabel */
const QString KDocmlObjectNameFirstRowLabel = "firstRowLabel";
/**  DOCML object name for secondRowLabel */
const QString KDocmlObjectNameSecondRowLabel = "secondRowLabel";
/**  DOCML object name for lonelyRowLabel */
const QString KDocmlObjectNameLonelyRowLabel = "lonelyRowLabel";
/**  DOCML object name for animationIcon */
const QString KDocmlObjectNameAnimationIcon = "animationIcon";

class FmRadioHsWidget : public HbWidget
{
    Q_OBJECT

public:
    FmRadioHsWidget(QGraphicsItem *parent = 0, Qt::WindowFlags flags = 0);
    ~FmRadioHsWidget();

    // enum for commands controlling FM Radio
    enum FmRadioControlCommand
    {
        Mute,
        Unmute,
        PreviousChannel,
        NextChannel
    };

    // enum for FM Radio states
    enum FmRadioState
    {
        Undefined,
        NotRunning,
        Starting,
        Running,
        ControllingAudio,
        NotControllingAudio,
        Seeking,
        AntennaNotConnected
    };

    // enum for information area layout states
    enum InformationAreaLayout
    {
        OneRow,
        TwoRows,
        Animation
    };

    // enum for control button states
    enum ControlButtonState
    {
        AllDisabledPlay,
        AllDisabledStop,
        ChannelsDisabledPlay,
        ChannelsDisabledStop,
        ChannelsEnabledPlay,
        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();
    void onHide();
    //void onUninitialize(); // Can be used in future to get on unintialize event.

    bool eventFilter(QObject *target, QEvent *event);
    
private slots:
    void load(const QString docml);
    
    void mute();
    void unMute();
    void previousChannel();
    void nextChannel();
    void radioToForeground();
    void radioToBackground();
    bool openUrl(QUrl url);

    void handleRadioInformationChange(int notificationId, QVariant value);
    bool updateRadioInformation(const QString informationType, QString information);
    void radioInformationChanged();
    void clearRadioInformation();
    void handleRadioStateChange(QVariant value);
    
    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;
    //HbMarqueeItem *mInformationLonelyRowMarquee;
    HbLabel *mAnimationIcon;
    
    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
    
};

#endif // FMRADIOHSWIDGET_H