diff -r 000000000000 -r 72b543305e3a messagingappbase/smartmessaging/wmlbc/inc/WmlState.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/smartmessaging/wmlbc/inc/WmlState.h Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,241 @@ +/* +* 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: +* This contains all the state specific logic of the bio-control. +* +*/ + + + +#ifndef WMLSTATE_H +#define WMLSTATE_H + +// INCLUDES +#include "WMLBC.hrh" + +#include +#include +#include + +// FORWARD DECLARATIONS + +class CCoeControl; +class CEikMenuPane; +class CWmlBioControl; +class CWmlSubItemBase; +class TCoeHelpContext; + +// CLASS DECLARATION + +/** +* Interface common for all the states. +*/ +NONSHARABLE_CLASS( MWmlState ) + { + public: + virtual ~MWmlState() {}; + public: // These must be implemented for each different state. + // See the CWmlBioControl interface for explanations when these + // methods are called and what's their purpose. + virtual void SetAndGetSizeL( TSize& aSize ) = 0; + virtual TBool HandleBioCommandL( TInt aCommand ) = 0; + virtual TRect CurrentLineRect() const = 0; + virtual TBool IsFocusChangePossible( TMsgFocusDirection aDirection ) const = 0; + virtual HBufC* HeaderTextLC() const = 0; + virtual void OptionMenuPermissionsL( TUint32& aPermissions ) const = 0; + virtual void SetMenuCommandSetL( CEikMenuPane& aMenuPane ) = 0; + virtual TInt VirtualHeight() = 0; + virtual TInt VirtualVisibleTop() = 0; + virtual TBool IsCursorLocation( TMsgCursorLocation aLocation ) const = 0; + virtual TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, + TEventCode aType ) = 0; + virtual void SizeChanged() = 0; + virtual void FocusChanged( TDrawNow aDrawNow ) = 0; + virtual void CreateViewerL( const CCoeControl& aContainer ) = 0; + virtual TBool CursorInFirstLine() const = 0; + + virtual void GetHelpContext(TCoeHelpContext& aHelpContext) const = 0; + + protected: // State transition logic. + + /** + * Called when entered to this state. + * @param aState enumeration for the state. + * Enumeration is used to check if it's legal + * to enter this state. + */ + virtual void EnterL( TWmlState aState ) = 0; + + + private: + + friend class CWmlStateFactory; + }; + +/** +* CWmlStateFactory owns the states and it's used to access +* the current state. +*/ +NONSHARABLE_CLASS( CWmlStateFactory ) : public CBase + { + public: + + /** + * Creates the new CWmlStateFactory object. + * @param aBioControl reference to the biocontrol. + */ + static CWmlStateFactory* NewL( CWmlBioControl& aBioControl ); + + /** + * Destructor. + */ + ~CWmlStateFactory(); + + public: + + /** + * Defines the initial state from the item count. + * @param aAPCount count of Accesspoint items. + * @param aMMSCount count of MMS setting items. + * @param aBMCount count of Bookmark items. + */ + void SetInitialStateL( + const TInt aBMCount ); + + /** + * Get the current state object. + * @return reference to the current state object. + */ + MWmlState& State() const; + + protected: + + /** + * Do the construction. + * @param aBioControl reference to the biocontrol. + */ + void ConstructL( CWmlBioControl& aBioControl ); + + private: + + /** + * Constructor, hidden from outsiders. + */ + CWmlStateFactory() {}; + + /** + * Change the state to the inquired one. + * @param aState enumeration of the desired state. + * If the state transisition is not possible keeps the + * current stete. + */ + void ChangeStateL( TWmlState aState ); + + private: // Concrete state objects. + + //// Pointer to the single state object. + MWmlState* iStateSingle; + + //// Pointer to the biocontrol + CWmlBioControl* iBioControl; + + /// Pointer to the current state. NOT DESCRETE OBJECT. + MWmlState* iState; + + private: // State enumerations + + /// Current state as enumeration. + TWmlState iStateEnum; + + private: + friend class CWmlState; + }; + +/** +* Common base class for all the state objects. +*/ +NONSHARABLE_CLASS( CWmlState ) : public CBase, + public MWmlState + { + protected: + /** + * Constructor. + * @param aStateFactory pointer to the state factory. + * @param aBioControl reference to the biocontrol. + */ + CWmlState( CWmlStateFactory* aStateFactory, + CWmlBioControl& aBioControl); + + protected: // State transition logic. + + /** + * Accesses the factory ChangeStateL-method. + * @param aNextState enumeration for the next state. + */ + //void ChangeStateL( TWmlState aNextState ); + + private: + + /** + * Default constructor. + */ + CWmlState() {}; + + protected: + + /// Pointer to the state factory, not owned. + CWmlStateFactory* iStateFactory; + + /// Pointer to the bio control. + CWmlBioControl* iBioControl; + + /// Current state. + TWmlState iState; + }; + +/** +* Single state. +*/ +NONSHARABLE_CLASS( CWmlStateSingle ) : public CWmlState + { + public: + CWmlStateSingle( CWmlStateFactory* aStateFactory, + CWmlBioControl& aBioControl); + ~CWmlStateSingle(); + public: // These must be implemented for each different state. + void SetAndGetSizeL( TSize& aSize ); + TBool HandleBioCommandL( TInt aCommand ); + TRect CurrentLineRect() const; + TBool IsFocusChangePossible( TMsgFocusDirection aDirection ) const; + HBufC* HeaderTextLC() const; + void OptionMenuPermissionsL( TUint32& aPermissions ) const; + void SetMenuCommandSetL( CEikMenuPane& aMenuPane ); + TInt VirtualHeight(); + TInt VirtualVisibleTop(); + TBool IsCursorLocation( TMsgCursorLocation aLocation ) const; + TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, + TEventCode aType ); + void SizeChanged(); + void FocusChanged( TDrawNow aDrawNow ); + void CreateViewerL( const CCoeControl& aContainer ); + TBool CursorInFirstLine() const; + + void GetHelpContext(TCoeHelpContext& aHelpContext) const; + protected: // State transition logic. + void EnterL( TWmlState aState ); + }; + +#endif // WMLSTATE_H + +// End of file