diff -r 14979e23cb5e -r 3de6c4cf6b67 mpxplugins/viewplugins/views/inc/mpxbutton.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpxplugins/viewplugins/views/inc/mpxbutton.h Wed Sep 01 12:32:02 2010 +0100 @@ -0,0 +1,271 @@ +/* +* 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: Push-button in Common Playback View. +* +*/ + + + +#ifndef CMPXBUTTON_H +#define CMPXBUTTON_H + + +// INCLUDES +#include "mpxcommonplaybackviewdefs.h" + +// FORWARD DECLARATIONS +class CGulIcon; +class CWindowGc; +class CAknKeySoundSystem; +class MAknsControlContext; +class MMPXPlaybackViewLayout; + +NONSHARABLE_STRUCT( TMPXButtonInfo ) + { + TInt iState; + CGulIcon* iBitmap; + TInt iEnterCommand; + TInt iExitCommand; + TInt iLongEnterCommand; + TInt iLongExitCommand; + }; + +// CLASS DECLARATION + +/** + * Observer interface to receive commands from button presses. + * + * @lib mpxplaybackview.dll + * @since S60 v3.0 + */ +NONSHARABLE_CLASS( MMPXButtonCmdObserver ) + { + public: + /** + * Handle a button command. + * @param aCommand Command id, as specified in the button constructor. + */ + virtual void HandleButtonCommandL( TInt aCommand ) = 0; + + }; + + +/** +* Push-button in Playback View. This class encapsulates the graphics, +* state (pushed, dimmed, highlighted), and layout information of the button. +* The button calls the HandleButtonCommandL() function for the observer +* object when it is pushed. +* +* @lib MusicPlayer.app +* @since 3.0 +*/ +NONSHARABLE_CLASS( CMPXButton ) : public CBase + { + public: // Constructors and destructor + /** + * Two-phased constructor. + * @since 3.0 + * @param aButtonId Id for the button (determines layout and graphics) + * @param aObserver Pointer to an object implementing the + * MMPlayerButtonCmdObserver interface. + * @param aLayout Layout for this view + * @return New CMPlayerButton instance. + */ + static CMPXButton* NewL( + TMPXPbvButton aButtonId, + MMPXButtonCmdObserver* aObserver, + MMPXPlaybackViewLayout* aLayout ); + + /** + * Two-phased constructor. + * @since 3.0 + * @param aButtonId Id for the button (determines layout and graphics) + * @param aObserver Pointer to an object implementing the + * MMPlayerButtonCmdObserver interface. + * @param aLayout Layout for this view + * @return New CMPlayerButton instance. + */ + static CMPXButton* NewLC( + TMPXPbvButton aButtonId, + MMPXButtonCmdObserver* aObserver, + MMPXPlaybackViewLayout* aLayout ); + + /** + * Destructor. + */ + virtual ~CMPXButton(); + + public: // New functions + + /** + * Adds a new state to this button + * @since 3.0 + * @param aState ID of the state + * @param aEnterCommand Command ID to execute when it enters this state + * @param aExitCommand Command ID to execute whne it exits this state + * @param aLongEnterCommand Command ID executes on a long press + * @param aLongExitCommand Command ID to execute after a long press + */ + void AddStateL( + TInt aState, + TInt aEnterCommand, + TInt aExitCommand, + TInt aLongEnterCommand, + TInt aLongExitCommand ); + + /** + * Get the id of the button. + * @since 3.0 + * @return Button id (as specified in NewL()) + */ + TMPXPbvButton Id() const; + + /** + * Hide/show this button + * @since 3.0 + * @param aVisible ETrue if this button is to be visible + */ + void MakeVisible( TBool aVisible ); + + /** + * Get the visibility status of the button. + * @since 3.0 + * @return ETrue if this button is visible + */ + TBool IsVisible() const; + + /** + * Set the state of this button + * @since 3.0 + * @param aState New state to set to + * @param aNotifyExit Whether or not to notify observer of the + * exit command of previous state + * @param aNotifyEnter Whether or not to notify observer of the + * enter command of the new state + */ + void SetButtonState( TInt aState, + TBool aNotifyExit=EFalse, + TBool aNotifyEnter=EFalse ); + + /** + * Get the current state of the button + * @since 3.0 + * @return State of the button + */ + TInt CurrentState() const; + + /** + * Draw the button according to its current state. + * @since 3.0 + * @param aGc Graphics context to draw to + * @param aRect Dirty rectangle. Drawing can be clipped inside this + * rectangle. + */ + void RedrawRect(CBitmapContext& aGc, const TRect& aRect) const; + + /** + * Reload graphics. + * @since 3.0 + * @param aParentRect New parent rectangle + */ + void ReloadIconsL(const TRect& aParentRect); + + /** + * Set background bitmap + * @since 3.0 + * @param aBackground Pointer to the skin background control + * context. Ownership not transferred. + */ + void SetBackground(MAknsControlContext* aBackground); + + /** + * Get the redraw flag. + * @since 3.0 + * @return ETrue if this button needs to be redrawn + */ + TBool NeedRedraw() const; + + /** + * Clear the redraw flag. + * @since 3.0 + */ + void ClearRedrawFlag(); + + private: // New functions + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * C++ constructor + */ + CMPXButton( + TMPXPbvButton aButtonId, + MMPXButtonCmdObserver* aObserver, + MMPXPlaybackViewLayout* aLayout ); + + /** + * Load the bitmap and mask for given state. + * @return CGulIcon containing bitmap and mask + */ + CGulIcon* LoadIconL( TInt aState ); + + /** + * Free all icons + */ + void FreeIcons(); + + /** + * Create a more translucent version of the mask to be used + * when the button is dimmed. + */ + void CreateTmpDimmedMaskL(); + + /** + * Handle long press event. + */ + void HandleLongPress(); + + /** + * Callback for long-press timer + */ + static TInt TimerCallback(TAny* aPtr); + + private: // Data + TMPXPbvButton iButtonId; + TInt iCurrentStateIndex; + RPointerArray iButtonArray; // owned + MMPXButtonCmdObserver* iObserver; // not owned + + TRect iParentRect; + TRect iRect; + + TBool iVisible; + TBool iIsLongPress; + + CPeriodic* iTimer; // owned + + MAknsControlContext* iBackground; // not owned + + TBool iNeedRedraw; + + CAknKeySoundSystem* iKeySoundSystem; // not owned + TBool iSelectionKeySilent; + MMPXPlaybackViewLayout* iLayout; // not owned + }; + +#endif // CMPXBUTTON_H + +// End of File