mpxmusicplayer/mediakeyhandler/inc/mpxnotifierdialog.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:45:05 +0200
changeset 0 ff3acec5bc43
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2006 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:  Implementation of media key handler
*
*/



#ifndef C_CMPXNOTIFIERDIALOG_H
#define C_CMPXNOTIFIERDIALOG_H


// INCLUDES
#include <coecntrl.h>
#include <mpxpskeyobserver.h>   // MMPXPSKeyObserver
#include <mpxmediakeyhandlerdefs.h>


// FORWARD DECLARATIONS
class MAknsSkinInstance;
class TAknsItemID;
class CEikLabel;
class CEikImage;
class CMPXPSKeyWatcher;

// CLASS DECLARATION

/**
 *  Music Player playback info popup.
 *
 *  @lib mpxmediakeyhandler.lib
 *  @since S60 v3.0
 */
NONSHARABLE_CLASS( CMPXNotifierDialog ) : public CCoeControl,
										  public MMPXPSKeyObserver
    {
public:

    enum TMPXPlaybackPopupIcons
        {
        EMPXPopupNoneIcon = 0,
        EMPXPopupPlayIcon,
        EMPXPopupPauseIcon,
        EMPXPopupFFIcon,
        EMPXPopupFRIcon
        };

    enum TMPXPlaybackPopupComponents
        {
        EMPXPlayIcon = 0,
        EMPXPauseIcon,
        EMPXFFIcon,
        EMPXFRIcon,
        EMPXTrackLabel,
        EMPXTimeLabel,
        EMPXComponentsCount
        };

    /**
     * Two-phased constructor.
     *
     * @since 3.0
     * @return Pointer to newly created object.
     */
    static CMPXNotifierDialog* NewL();

    /**
     * Destructor.
     */
    virtual ~CMPXNotifierDialog();

    /**
     * Shows pop-up dialog.
     *
     * @since 3.0
     * @param aIcon used icon
     * @param aTitle song tittle
     * @param aTime playback time in seconds
     * @param aMode Mode to determine the popup's behaviour
     */
    void ShowInfoPopupL(
        TMPXPlaybackPopupIcons aIcon,
        const TDesC& aTitle,
        TInt aTime,
        TMPXPlaybackPopupModes aMode );

    /**
     * Removes pop-up from screen.
     *
     * @since 3.0
     */
    void CancelInfoPopup();

    /**
     * Gets called when orientation change begins
     */        
    void NotifyOrientationChangeBegin();
    
private:

    /**
     * C++ default constructor.
     */
    CMPXNotifierDialog();

    /**
     * By default Symbian 2nd phase constructor is private.
     */
    void ConstructL();

    /**
     * Updates pop-up dialog contents.
     *
     * @param aIcon used icon
     * @param aTitle song tittle
     * @param aTime playback time in seconds
     */
    void UpdateInfoPopupL(
        TMPXPlaybackPopupIcons aIcon,
        const TDesC& aTitle,
        TInt aTime );

    /**
     * Create icons.
     */
    void CreateIconsL();

    /**
     * Constructs skinnable icon.
     *
     * @param aImage Pointer to the skinnable icon on return.
     * @param aSkin Pointer to the current skin instance.
     * @param aId Item ID of the masked bitmap to be created.
     * @param aColorId Item ID of the color table.
     * @param aColorIndex Index in the color table.
     * @param aBitmapId mbm id of the bitmap
     * @param aMaskId   mbm id of the mask
     */
    void ConstructImageL(
        CEikImage* aImage,
        MAknsSkinInstance* aSkin,
        const TAknsItemID& aId,
        const TAknsItemID& aColorId,
        TInt aColorIndex,
        TInt aBitmapId,
        TInt aMaskId );

    /**
     * Resize info popup.
     */
    void ResizeInfoPopup();

    /**
     * Sets pop-up layouts.
     */
    void SetLayoutsL( TBool aLong = EFalse );

    /**
     * Show playback icon.
     *
     * @param aIcon Icon to be displayed.
     * @return ETrue if it's ok to displayed. Otherwise, EFalse.
     */
    void ShowIcon(
        TMPXPlaybackPopupIcons aIcon );

    /**
     * Callback for timer
     *
     * @param aPtr Pointer pass to this callback function.
     * @return Zero if callback function doesn't need to be called again.
     *         Otherwise, non-zero.
     */
    static TInt TimerCallback( TAny* aPtr );

    /**
     * Convert to displayable duration
     *
     * @since S60 v3.0
     * @param aduration Duration in seconds
     * @return A heap descriptor that contains displayable duration
     *         (ownership transferred). Caller must destroy this object
     *         after use.
     */
    HBufC* DisplayableDurationL(
        TInt aDuration );

// from base class CoeControl

    /**
     * From CCoeControl.
     * Draws the control.
     *
     * @param aRect The rectangular region of the control to be drawn.
     */
    void Draw( const TRect& aRect ) const;

    /**
     * From CoeControl.
     * Handles a change to the control's resources.
     *
     * @param aType A message UID value.
     */
    void HandleResourceChange( TInt aType );

    /**
     * From CCoeControl.
     * Responds to changes to the size and position of the contents of this
     * control.
     */
    void SizeChanged();

    /**
     * From CCoeControl.
     * Gets the number of controls contained in a compound control.
     *
     * @return The number of component controls contained by this control.
     */
    TInt CountComponentControls() const;

    /**
     * From CCoeControl.
     * Gets an indexed component of a compound control.
     *
     * @param aIndex The index of the control.
     * @return The component control with an index of aIndex.
     */
    CCoeControl* ComponentControl( TInt aIndex ) const;
protected:    // from MMPXPSKeyObserver

	/**
	* From MMPXPSKeyObserver
	* Handle PS event
	*
	* @param aUid The UID that identifies the property category
	* @param aKey The property sub-key
	*/
	void HandlePSEvent( TUid aUid, TInt aKey );
    
	
private:    // Data

    CEikLabel* iSongLabel;  // own
    CEikLabel* iTimeLabel;  // own
    CEikImage* iPlayIcon;   // own
    CEikImage* iPauseIcon;  // own
    CEikImage* iFFIcon;   // own
    CEikImage* iFRIcon;  // own
    CPeriodic* iTimer;      // own
    RWindowGroup iWindowGroup;  // own
    CMPXPSKeyWatcher* iPSKeyWatcher;    // own

    TMPXPlaybackPopupIcons iIconShown;
    
    TBool iReopenDialog;
    };

#endif  // C_CMPXNOTIFIERDIALOG_H

// End of File