mpxplugins/viewplugins/views/inc/mpxbutton.h
changeset 0 ff3acec5bc43
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mpxplugins/viewplugins/views/inc/mpxbutton.h	Thu Dec 17 08:45:05 2009 +0200
@@ -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<TMPXButtonInfo> 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