diff -r 000000000000 -r 5f000ab63145 phoneapp/phoneuiview/inc/cphonestatuspane.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneuiview/inc/cphonestatuspane.h Mon Jan 18 20:18:27 2010 +0200 @@ -0,0 +1,330 @@ +/* +* Copyright (c) 2002 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: +* Manager for the statuspane, include navi pane and title pane +* +*/ + + +#ifndef CPHONESTATUSPANE_H +#define CPHONESTATUSPANE_H + +// INCLUDES +#include +#include +#include // for CAknNavigationControlContainer & + // CAknNavigationDecorator + +#include "mphonestatuspane.h" +#include "phoneconstants.h" + +// CONSTANTS + +// FORWARD DECLARATIONS +class CAknTitlePane; +class CEikStatusPane; +class TPhoneCommandParam; +class CAknIndicatorContainer; + +// CLASS DECLARATION + +class THandlerTag + { + public: + MPhoneStatusPaneObserver* iObserver; + TInt iLayer; + }; +/** +* Manager for the statuspane, include navi pane and title pane +* Usage: +* Every client in phone application that will change the title pane should +* use status pane manager, to avoid confliction. +* - Always use iStatusPaneManager.TitlePane() to get the reference of status +* pane. +* - in ConstructL() insert a new handler to status pane manager by +* AddTitlePaneHandlerL( *this ) +* - Reserve the title pane before you change the title pane by +* ReserveTitlePane( *this ) +* - Before changing the status pane, always check if I'm the topmost handler +* of the manager, by iStatusPaneManager->IsTitlePaneVisible() +* - release the title pane after the change +* +*/ +class CPhoneStatusPane : + public CCoeStatic, + public MPhoneStatusPane + { + public: // Constructors and destructor + + /** + * First call initializes the singleton object. Subsequent calls return + * instance. + * @return the created instance. + */ + static CPhoneStatusPane* Instance(); + + /** + * Destructor. + */ + virtual ~CPhoneStatusPane(); + + public: // from MPAStatusPane + + /** + * Returns ETrue if status pane is visible. + */ + TBool IsVisible() const; + + /** + * Get the reference of the title pane + * @return the reference of the title pane + */ + CAknTitlePane& TitlePane() const; + + /** + * Get the reference of the title pane + * @return the reference of the title pane + */ + CEikStatusPane& StatusPane() const; + + /** + * Get the reference of the navi pane + * @return the reference of the navi pane + */ + CAknNavigationControlContainer& NaviPane() const; + + /** + * Get the reference of the navi decorator + * @return the reference of the navi decorator + */ + CAknNavigationDecorator& NaviDecorator() const; + + /** + * Add title pane handler, returns reserve id + * @return reservatoin id + */ + void AddTitlePaneHandlerL( MPhoneStatusPaneObserver& aObserver ); + + /** + * Reserve the title pane + * @param the reserve id for release and get the visibility status + */ + void ReserveTitlePane( MPhoneStatusPaneObserver& aObserver ); + + /** + * Release title pane that has been reserved + * @param aReserveId the reserve id + */ + void ReleaseTitlePane( MPhoneStatusPaneObserver& aObserver ); + + /** + * Remove the handler + */ + void RemoveTitlePaneHandler( MPhoneStatusPaneObserver& aObserver ); + + /** + * Check if the title pane is visible + * @param aReserveId the reservation id + * @return ETrue if the title pane is visible + */ + TBool IsTitlePaneVisible( + MPhoneStatusPaneObserver& aObserver ) const; + + /** + * Gets status pane shape. + * @param aRegion shape of the status pane. + */ + void GetShape( TRegion& aRegion ); + + public: + + /** + * Update the title pane. + */ + void UpdateTitlePane(); + + + void SetTitlePaneContentL( const TDesC& aMessage ); + + void SetTitlePanePictureL( TPhoneCommandParam* aCommandParam ); + + /** + * Handle update of volume leven in naviPane + */ + void SetVolumeLevel( + TPhoneCommandParam* aCommandParam ); + + void ActivateVoiceVolumeControl( + TPhoneCommandParam* aCommandParam); + + void DeactivateVoiceVolumeControl(); + + TInt DoSwitchVolumeControlL( + TPhoneCommandParam* aCommandParam ); + + /** + * Creates title pane containing text. + * + * When instance is deleted, then text is removed from title pane. + * + * @param aTextResourceId text resorce. + * @return instance, also put to cleanup stack. + */ + CBase* CreateTextTitlePaneLC( TInt aTextResourceId ); + + /** + * Creates empty indicator pane. + * @return the pointer of empty indicator pane. + */ + CAknIndicatorContainer* CreateEmptyIndicatorContainerL(); + + private: + + /** + * Update the title pane within recovery system + */ + void DoUpdateTitlePaneL(); + /** + * Callback funciton for recovery system to update title pane. + */ + static TInt UpdateTitlePaneCallBackL( TAny* aAny ); + + /** + * Pushes new decorator to navi pane replacing the + * previous one. + * @param aNew new to replace the old one. + */ + void PushL( CAknNavigationDecorator& aNew ); + + private: + + /** + * Two-phased constructor. + * @return new instance. + */ + static CPhoneStatusPane* NewL(); + + /** + * C++ default constructor. + */ + CPhoneStatusPane(); + + /** + * By default Symbian OS constructor is private. + */ + void ConstructL(); + + private: + + /** + * Get the largest layer in the title pane list + */ + TInt LargestLayerInTitlePaneList() const; + + /** + * Get the pointer to the title pane hander by reserve id + */ + THandlerTag* FindTitlePaneHandler( + MPhoneStatusPaneObserver& aObserver ) const; + + /** + * Get the current active title pane user + */ + THandlerTag* FindTopmostTitlePaneHandler() const; + + /** + * Notify handler on activation event + */ + void NotifyHandlerOnActivation( + THandlerTag& aHandlerTag, + TBool aActive ); + + /** + * Call back function for recovery system to switch the layout to idle + */ + static TInt RecoverySwitchLayoutToIdleL( TAny* aAny ); + + // By default, prohibit copy constructor + CPhoneStatusPane( const CPhoneStatusPane& ); + + // Prohibit assigment operator + CPhoneStatusPane& operator= ( const CPhoneStatusPane& ); + + /** + * Function for statuspane if there is a operatorpicture + */ + void RenderBitmapOnTitlePaneL(); + + private: // Data + + //Recovery id for switch layout to idle state + TInt iSwitchLayoutIdleRecoveryId; + + // Recovery id for update title pane + TInt iUpdateTitlePaneRecoveryId; + + /** + * Array of PhoneStatusPane observers + * Own. + */ + CArrayFixFlat< THandlerTag > *iTitlePaneList; + + /** + * Pointer to Eikon status pane. + * Not own. + */ + CEikStatusPane* iStatusPane; + + /** + * Pointer the Avkon title pane. + * Not own. + */ + CAknTitlePane* iTitlePane; + + /** + * Title pane bitmap. + * Own. + */ + CFbsBitmap* iTitlePanePicture; + + /** + * Title pane bitmap mask + * Own. + */ + CFbsBitmap* iTitlePanePictureMask; + + /** + * ETrue if title pane text is displayed; otherwise, display the bitmap + */ + TBool iTitlePaneTextIsDisplayed; + + /* + * The pointer to the navi pane. + * Not own. + */ + CAknNavigationControlContainer* iNaviPane; + + /** + * The pointer to the navi decorator + * Own. + */ + CAknNavigationDecorator* iNaviDecorator; + + // Title Pane Text + TBuf< KPhoneTitlePaneTextSize > iTitleText; + }; + +#endif // CPhoneStatusPane_H + +// End of File