/*
* Copyright (c) 2005 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:  Phone UI View
*
*/

#ifndef __CPHONEVIEW_H
#define __CPHONEVIEW_H

//  INCLUDES

#include <coecntrl.h>
#include <coeview.h>

// FORWARD DECLARATIONS
class CAknsLayeredBackgroundControlContext;
class TPhoneCommandParam;
class CEikButtonGroupContainer;
class MPhoneViewObserver;
class MPhoneViewControllerObserver;

// CLASS DECLARATION

/**
*   Base class for protocol spesific call header views.
*/
class CPhoneView : public CCoeControl, public MCoeView
    {
    public:  // Constructors and destructor        

        static CPhoneView* NewL( TRect aRect, CEikButtonGroupContainer& aCba, MPhoneViewControllerObserver* aViewController );

        virtual ~CPhoneView();

    public: // Functions from base classes

        /**
        * Returns a TVwsViewId uniquely identifying the view.
        * @return Represents a view in the server
        */
        TVwsViewId ViewId() const;

        void ActivateL();

        /**
        * From CCoeControl; notifier for resource changes
        * @param aType : Type of resource change
        */
        void HandleResourceChange( TInt aType );

    public: // New functions

        /**
        * Sets the control as component.
        * @param aControl It is the new component.
        */
        void SetControl( CCoeControl* aControl );
        
        /**
        * Returns the control in the view.
        * @return aControl The control.
        */
        CCoeControl* Control() const;
        
        /**
        * Sets the bitmap
        * @param aCommandParam a command parameter
        */
        void SetBitmap( TPhoneCommandParam* aCommandParam );

        /**
        * Gets the bitmap
        * @param aCommandParam a command parameter
        */
        void GetBitmap( TPhoneCommandParam* aCommandParam );
       
        /**
        * Sets the security mode flag ETrue or EFalse
        * @param aStatus ETrue for the security mode. EFalse for the 
        * normal mode.
        */ 
        void SetSecurityMode ( TBool aStatus );
        
        /**
        * Gets the previous app flag value.
        */ 
        TBool GetActivatePreviousApp();
        
        /**
        * Sets the fall back flag ETrue or EFalse
        * @param aStatus ETrue if back activates previous app.
        * EFalse if idle is to be opened.
        */ 
        void SetActivatePreviousApp( const TBool aStatus );
        
        /**
        * Sets dialer activate flag to ETrue or EFalse
        * @param aStatus ETrue if next activate view inside 
        * phoneapp is dialer. EFalse if not dialer. 
        */ 
        void SetPhoneAppViewToDialer( const TBool aStatus );
        
        /**
        * Returns dialer activate flag status.
        */ 
        TBool PhoneAppViewToDialer();
        
        /**
        * Enables or disables pointer capture for phoneview 
        * @param aStatus ETrue, pointer capture will be enabled 
        */         
        void CapturePointerEvents( const TBool aCapture );      
        
        /**
         * Sets view observer for view events.
         */
        void SetPhoneViewObserver( MPhoneViewObserver& aObserver );
        
        /**
         * Sets permission to activate dialer view.
         */
        void SetDialerActivation( TBool aActivation );
        
	public:  // Functions from base classes
		
		/**
        * From CCoeControl
        */
        void SetRect( const TRect &aRect );        

    protected:  // Functions from base classes
        
        /**
        * From CCoeControl
        */
        void HandlePointerEventL(
            const TPointerEvent& aPointerEvent );

        /**
        * From CCoeControl
        */
        CCoeControl* ComponentControl( TInt aIndex ) const;

        /**
        * From CCoeControl
        */
        TInt CountComponentControls() const;

        /**
        * From CCoeControl
        */
        void Draw( const TRect& aRect ) const;

        /**
        * From CCoeControl, informs that the size is changed to update
        * the sizes of component controls appropriately.
        */
        void SizeChanged();

        /**
        * From CCoeControl, informs that the position has been changed.
        */
        void PositionChanged();

        /**
        * From CCoeControl, MopSupplyObject
        */
        TTypeUid::Ptr MopSupplyObject( TTypeUid aId );
        
        /**
        * From CCoeControl
        */        
        void FocusChanged( TDrawNow aDrawNow );
        
    private: // Functions from base classes

        /**
        * Takes any action required on activation of the view. 
        * Reimplemented versions should read the message text
        * @param aCustomMessage message for any message type 
        *                       identified by aCustomMessageId
        * @param aCustomMessageId message ID that the view understands
        * @param aPrevViewId The id of the previously active view 
        *                    so that the view may switch back to its caller
        *                    at some later stage
        */
        void ViewActivatedL( 
            const TVwsViewId& aPrevViewId, 
            TUid aCustomMessageId, 
            const TDesC8& aCustomMessage );

        /**
        * Takes any action required on deactivation of the view e.g. to 
        * make the controls owned by the view non-visible
        * (thereby saving the window server uneccessary work).
        */
        void ViewDeactivated();

    private:

        CPhoneView( CEikButtonGroupContainer& aCba, MPhoneViewControllerObserver* aViewController );

        void ConstructL( TRect aRect );

    private:

        /**
        * Updates size of the control.
        */
        void UpdateControlRect();

    private:

        // Region type.
        typedef RRegionBuf< KPhoneRegionAmount > RPhoneRegionBuf;

        // Owned: region
        RPhoneRegionBuf iRegion;

        // Owned: background context.
        CAknsLayeredBackgroundControlContext* iBgContext;

        // Pointer to active control.
        CCoeControl* iControl;

        // Owned: Active Idle main bitmap.
        CFbsBitmap* iBitmap;
        
        //Id of the fullscreen AI plugin
        TInt iFsAiId;
        
        //MainPane
        TRect iMainPane;
        
        //Is security mode or not
        TBool iSecurityMode;
        
        // Previous app flag.
        TBool iActivatePreviousApp;
        
        // Dialer activation flag.
        TBool iPhoneAppViewToDialer;
        
        CEikButtonGroupContainer& iCba;
        
        MPhoneViewObserver* iObserver;
        
        TBool iDialerActivation;       
        
        MPhoneViewControllerObserver* iViewControllerObserver;
        };

#endif // __CPHONEVIEW_H

