--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/voicerecorder/RecViewSrc/CVRButtonPanel.h Thu Dec 17 08:46:57 2009 +0200
@@ -0,0 +1,294 @@
+/*
+* Copyright (c) 2002 - 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:
+* A compound control class. It is responsible for drawing and updating
+* a set of buttons. Button selections are also handled and forwarded
+* as commands to the AppUi.
+*
+*/
+
+
+#ifndef __CVRBUTTONPANEL_H__
+#define __CVRBUTTONPANEL_H__
+
+// INCLUDES
+#include <coecntrl.h>
+#include <AknUtils.h>
+#include <coecobs.h> // MCoeControlObserver
+
+#include "MVRObserver.h"
+
+// FORWARD DECLARATIONS
+class MVRButtonPanelModel;
+class MAknsSkinInstance;
+class CApaMaskedBitmap;
+class TAknsItemID;
+class CAknButton;
+
+// CLASS DEFINITION
+/**
+* A compound control class. It is responsible for drawing and updating
+* a set of buttons. Button selections are also handled and forwarded
+* as commands to the AppUi.
+*/
+NONSHARABLE_CLASS( CVRButtonPanel )
+ : public CCoeControl,
+ public MVRObserver,
+ public MCoeControlObserver,
+ public MCoeControlBackground
+ {
+ public: // data types
+ enum TFocusChange
+ {
+ EFocusUp = -1,
+ EFocusDown = 1,
+ EFocusInvalid = 2
+ };
+
+ // pointer event types used in VR
+ enum TLastPointerEventType
+ {
+ EVRButtonDownEvent,
+ EVRButtonDragOutsideEvent,
+ EVRButtonUpEvent
+ };
+
+ public: // constructors and destructor
+
+ /**
+ * Constructor.
+ * @param aModel Pointer to the button panel model.
+ * Ownership is not transferred.
+ */
+ CVRButtonPanel( MVRButtonPanelModel* aModel );
+
+ /**
+ * Constructor.
+ * @param aModel Pointer to the button panel model.
+ * @param aParentViewUid Uid of CVRRecView for fast swap
+ * Ownership is not transferred.
+ */
+ CVRButtonPanel( MVRButtonPanelModel* aModel, TUid aParentViewUid );
+
+ /**
+ * Destructor
+ */
+ virtual ~CVRButtonPanel();
+
+ /**
+ * 2nd phase constructor.
+ */
+ void ConstructL();
+
+ private: // constructors
+
+ /**
+ * Default constructor. Not implemented.
+ */
+ CVRButtonPanel();
+
+ /**
+ * Creates control buttons from given resources
+ * @param aButtonsResourceId The resource used in buttons' construction.
+ */
+ void CreateButtonsFromResourcesL( TInt aButtonsResourceId );
+
+ public:
+
+ /**
+ * Updates the layout of all child controls to current active
+ * layout (Euro, Apac, Arabic/Hebrew)
+ */
+ void UpdateLayoutL( );
+
+ /**
+ * Handles a change to the application's resources
+ * @param aType The type of changed resource
+ */
+ void HandleResourceChangeL( TInt aType );
+
+ public: // from CCoeControl
+
+ /*
+ * From CCoeControl
+ * @see CCoeControl
+ */
+ void SizeChanged();
+
+ /**
+ * When a key event occurs, the control framework calls this function
+ * for each control on the control stack, until one of them can process
+ * the key event (and returns EKeyWasConsumed).
+ * @param aKeyEvent The key event.
+ * @param aType The type of key event: EEventKey, EEventKeyUp
+ * or EEventKeyDown
+ * @return Indicates whether or not the key event was used by this
+ * control
+ */
+ TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent,
+ TEventCode aType );
+
+ /**
+ * Gets called whenever a pointer event occurs.
+ * @param aPointerEvent The pointer event to handle.
+ */
+ void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+
+ public: // from MVRObserver
+
+ /**
+ * Called to notify a change in the observed subject's state.
+ */
+ void Update( TVRUpdateCommand aCommand );
+
+ public: // from MCoeControlObserver
+
+ /**
+ * This function is called when a control for which this control is the observer
+ * calls CCoeControl::ReportEventL(). In VoiceRecorder button pointer events are
+ * handled here.
+ * @param aControl The control that sent the event.
+ * @param aEventType The event type.
+ */
+ void HandleControlEventL(CCoeControl *aControl, TCoeEvent aEventType);
+
+ private: // from MCoeControlBackground
+
+ /*
+ * From MCoeControlBackground
+ * @see MCoeControlBackground
+ */
+ void Draw(CWindowGc& aGc, const CCoeControl& aControl, const TRect& aRect) const;
+
+ public: // new methods
+
+ /*
+ * Checks which button is currently focused and returns the index
+ * value of that
+ * @return The index for the currently focused button
+ */
+ TInt FocusedButton() const;
+
+ private: // from CCoeControl
+
+ /**
+ * Draws this control.
+ * @param aRect The area that needs updating. Ignored.
+ */
+ void Draw( const TRect& aRect ) const;
+
+ /**
+ * Called by the framework to get the number of sub-components
+ * contained in this component.
+ * @return The number of component controls contained by this control
+ */
+ TInt CountComponentControls() const;
+
+ /**
+ * Called by the framework to get a specified sub-component
+ * of this component.
+ * @param aIndex The index of the component to get.
+ * @return The component control with an index of aIndex.
+ */
+ CCoeControl* ComponentControl( TInt aIndex ) const;
+
+ private: // new methods
+
+ /**
+ * Moves focus to the next non-dimmed button.
+ * @param aDirection EFocusDown to move downwards, EFocusUp upwards
+ */
+ void MoveFocus( const TFocusChange aDirection, TBool aDrawNow );
+
+ /**
+ * Updates buttons by changing their state
+ */
+ void UpdateButtons();
+
+ /**
+ * Draws highlight rectangle for the focused button.
+ * @param aGc Current Graphic Context in use.
+ */
+ void DrawFocus( CWindowGc& aGc ) const;
+
+ /**
+ * Creates and starts a CPeriodic timer object
+ * with a resolution of KVRFastForwUpdateDelay
+ */
+ void StartTimerL();
+
+ /**
+ * Stops and deletes the timer object.
+ */
+ void StopTimer();
+
+ /**
+ * Called by the CPeriodic timer to handle a tick.
+ * Uses HandleTimerCallBack() to do the actual work.
+ * @param aButtonPanel Always a valid pointer to CVRButtonPanel object
+ * @return ETrue to indicate that the timer should continue.
+ */
+ static TInt TimerCallBack( TAny* aButtonPanel );
+
+ /**
+ * Non-static variant of TimerCallBack (more convinient to implement).
+ */
+ void HandleTimerCallBack();
+
+ /**
+ * Search corresponding command of the focused/pressed button and
+ * sends it to active view
+ */
+ void FetchAndSendCommandL();
+
+ /**
+ * Handles special cases concerning button focus
+ */
+ void TuneButtonFocus();
+
+
+ private: // data
+
+ /**
+ * Pointer to the button panel model. Not owned.
+ */
+ MVRButtonPanelModel* iModel;
+
+ /**
+ * The index of the currently focused button.
+ */
+ TInt iFocusedButton;
+
+ // Skin instance. Not owned.
+ MAknsSkinInstance* iSkin;
+
+ // Uid of the parent view
+ TUid iParentViewUid;
+
+ /**
+ * Pointer to the timer object. Owned.
+ */
+ CPeriodic* iTimer;
+
+ // Button panel's button controls. Owned.
+ CArrayPtrFlat< CAknButton > iVRButtons;
+
+ /**
+ * Tells what pointer event is the last that has happened
+ */
+ TLastPointerEventType iLastPointerEvent;
+
+ };
+
+#endif // __CVRBUTTONPANEL_H__