vtengines/videoteleng/Inc/State/CVtEngStateBase.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 23 Nov 2009 14:47:47 +0200
changeset 0 ed9695c8bcbe
permissions -rw-r--r--
Revision: 200948

/*
* 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:  Base class for states
*
*/



#ifndef CVTENGSTATEBASE_H
#define CVTENGSTATEBASE_H

//  INCLUDES
#include <e32base.h>
#include "vtengcommands.h"
#include "CVtEngStateManager.h"
#include "CVtEngEventManager.h"
#include "CVtEngMediaHandler.h"
#include "CVtEngSessionHandler.h"
#include "CVtEngOperation.h"
#include "CVtEngSettings.h"
#include "VtEngUtils.h"

// FORWARD DECLARATIONS
class CVtEngSessionHandler;
class CVtEngMediaHandler;
class CVtEngAudioHandler;

// CLASS DECLARATION

/**
*  State base class

*  @lib videoteleng
*  @since 2.6
*/
NONSHARABLE_CLASS( CVtEngStateBase ) : public CBase
    {
    public:  // Constructors and destructor
        
        /**
        * Destructor.
        */
        virtual ~CVtEngStateBase();

    public: // New functions
        
        /**
        * Updates state. May result to state transition
        */
        virtual void UpdateL() = 0;

        /**
        * Checks if a command is valid in current state.
        * @param aCommandId command to be validated
        * @return ETrue if command is valid.
        */
        virtual TBool ValidateCommand(
            const TVtEngCommandId aCommandId );

        /**
        * Handles an operation. Base class method is empty
        * and derived classes may handle the operation if applicable.
        * @param aOp operation to be handled
        * @return ETrue if handled
        */
        virtual TBool HandleL( CVtEngOperation& aOp );

        /**
        * Returns session handler.
        * @return reference to session handler
        */
        CVtEngSessionHandler& SessionHandler();

        /**
        * Returns media handler.
        * @return reference to media handler
        */
        CVtEngMediaHandler& MediaHandler();

        /**
        * Returns audio handler.
        * @return reference to audio handler
        */
        CVtEngAudioHandler& AudioHandler();

        /**
        * Creates new state if needed.
        * @return new state or NULL
        */
        CVtEngStateBase* NewStateL( 
            const MVtEngSessionInfo::TSessionState aState );

        virtual MVtEngSessionInfo::TSessionState State() const = 0;

    public: // New functions 

        /**
        * Sets new current state. 
        * @param aOldState old state.
        */
        void OpenL( CVtEngStateBase* aOldState );

        /**
        * For derived classes to handle state change
        */
        virtual void DoOpenL( ) = 0;

        
        /**
        * State uninitialization.
        */
        virtual void Close();

    protected: // new functions

        /**
        * Saves configuration to settings for later
        * usage.
        */
        void SaveToSettingsL( CVtEngOperation& aOp );

        /**
        * Notifies state change to event manager.
        * @param aNewState new session state.
        */
        void NotifyStateChange( MVtEngSessionInfo::TSessionState aNewState );

        /**
        * Saves video state to settings. Used e.g. when video can not be 
        * started in current state.
        * @param aEnabled video is enabled
        */
        void SetVideoEnabled( TBool aEnabled );

        /**
        * Goes to disconnecting or idle state if needed.
        * @return state object if transition is required.
        */
        //CVtEngStateBase* DisconnectingOrIdleStateL();

        /**
        * Creates negotiating state if bearer state is connected
        * and pv state is ESetup, and UI has indicated state changte
        * is permitted.
        * @return negotiating state object or NULL
        */
        CVtEngStateBase* NegotiatingOrConnectedStateL( 
            TBool aAcceptOnlyNegotiating = EFalse );


        /**
        * Saves video state to settings. Used e.g. when video can not be 
        * started in current state.
        * @param aEnabled video is enabled
        */
        void TerminateSessionL( CVtEngOperation& aOp );

    protected:

        /**
        * C++ constructor.
        */
        CVtEngStateBase( 
            CVtEngStateManager& aStateManager,
            CVtEngEventManager& aEventManager );

    protected:  // Data
        // State manager
        CVtEngStateManager& iStateManager;

        // Event manager
        CVtEngEventManager& iEventManager;

    private:
    };

#endif      // CVTENGSTATEBASE_H

// End of File