musicwidgetplugin/inc/musicwidget.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 17 Sep 2010 08:28:52 +0300
changeset 58 ed94e1e8390e
parent 48 af3740e3753f
child 59 cd9e40a08dda
permissions -rw-r--r--
Revision: 201035 Kit: 201037

/*
* 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:  Music player home screen widget
*
*/

#ifndef MUSICWIDGET_H
#define MUSICWIDGET_H

// System includes
#include <QGraphicsLinearLayout>
#include <QGraphicsGridLayout>
#include <hbwidget.h>
#include <xqappmgr.h>

#include "mpplaybackdata.h"

// Forward declarations
class HbLabel;
class HbPushButton;
class HbIcon;
class HbMarqueeItem;
class MpEngine;
class MpAlbumCoverWidget;

/**
 * Media key identifier for push button events
 */
enum MediaKeyIdentifier{
    EPrevious = 1,
    EPlayPause,
    ENext
};

/**
 * Music Player launch source identifier
 */    
enum LaunchIdentifier{
    ELaunchFromPlay,
    ELaunchFromShortcut
};

class MusicWidget: public HbWidget
{
    Q_OBJECT
    
public:    
    MusicWidget(QGraphicsItem *parent = 0, Qt::WindowFlags flags = 0);
    ~MusicWidget();

private:
    
    /**
     * Setup graphics
     */    
    void setupUi();
    
    /**
     * Get latest song data, player state and album art 
     */      
    void refreshData();
    
    /**
     * Launch Music Player to view
     */      
    void launchMusicPlayer(int launchMode = ELaunchFromShortcut);
    
    /**
     * Similar to public slots mediaButtonPressed and mediaButtonReleased, but this oen is called internally
     * Draws the spesified button to disabled state
     */
    void mediaButtonDisabled( int aMediaKeyId );
    
    /**
     * Similar to public slots mediaButtonPressed and mediaButtonReleased, but this oen is called internally
     * Draws the spesified button to enabled state
     */    
    void mediaButtonEnabled( int aMediaKeyId );
    
    /**
     * Disable/enable widget buttons according to Music Player state
     */       
    void toggleButtons();
    
public:
    QRectF boundingRect() const;
    QPainterPath shape() const;
    
public slots:

    /**
     * Widget slots
     */    
    void onInitialize();
    void onShow();
    void onHide();
    void onUninitialize();
    
    /**
     * MpEngine slots
     */
    void libraryUpdateStarted();
    void libraryUpdated();
    void usbBlocked( bool blocked );    

    /**
     * MpPlaybackData slots
     */        
    void albumArtReady();
    void playbackStateChanged();
    void playbackInfoChanged();    
    
    /**
     * ?????
     */            
    bool eventFilter(QObject *target, QEvent *event);
    
    /**
     * Button specific slots
     */        
    void mediaButtonPressed( int aMediaKeyId );
    void mediaButtonReleased( int aMediaKeyId );
    
protected:
    
    /**
     * Called from mediaButtonPressed and from mediaButtonReleased slots. 
     * Calls defineMediaButton to redraw the media button
     */
    void mediaButtonEvent( MediaKeyIdentifier aMediaKeyId, QString aGraphicsId, QString aIconColor );

    /**
     * Creates the aTarget push button based on params aGraphicsId and aSuffix. 
     * Used to change the look and feel of the button based to the aState
     * param: aTarget is the push button to be changed, must not be Null
     * param: aGraphicsId defines the button background graphics
     * param: aSuffix filename suffix, see KPrevButPrefix for example from musicwidget.cpp
     */
    void defineMediaButton( HbPushButton& aTarget, QString aGraphicsId, QStringList aSuffix, QString aIconColor );

private slots:

    /**
     * Slots to be called after button press
     */    
    void prevSong();
    void playSong();
    void nextSong();
    void shortcutButton();
    
private:  
    // mShortcutButtonLayout items
    HbPushButton *mShortcutArea;

    //mSongDataLayout items
    HbWidget *mSongDataBG;
    HbLabel *mInformationSongName;
    HbMarqueeItem *mMarqueeText;
    
    // mControlButtonsLayout items
    HbPushButton *mPreviousPushButton;
    HbPushButton *mPlayPushButton;
    HbPushButton *mNextPushButton;
    
    // MusicPlayer related state identifiers
    bool mMusicPlayerNoSongData;
    bool mMusicPlayerUpdating;
    bool mMusicPlayerBlocked;
    
    // Album art for background
    MpAlbumCoverWidget *mAlbumArt;
    
    // Artist and song title identifiers 
    QString mArtist;
    QString mTitle;
    
    // Used to launch MusicPlayer
    XQApplicationManager mApplicationManager;
    
    // MusicPlayer control and state updates
    MpEngine* mMpEngine;
    MpPlaybackData* mMpPlaybackData;

};

#endif // MUSICWIDGET_H