/*
* Copyright (c) 2007 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:  View class for still image pre capture view*
*/


#ifndef CAMSTILLPRECAPTUREVIEW_H
#define CAMSTILLPRECAPTUREVIEW_H

//  INCLUDES
#include "CamPreCaptureViewBase.h"


// FORWARD DECLARATIONS
class CAknButton;
class CAknToolbarExtension;

// CLASS DECLARATION

/**
*  View class for still image capture 
*
*  @since 2.8
*/
class CCamStillPreCaptureView : public CCamPreCaptureViewBase
    {
    public:  // Constructors and destructor
        
        /**
        * Two-phased constructor.
        * @param aController Reference to either the application controller 
        *        base class or test base class
        * @since 2.8
        * @return pointer to the created CCamStillPreCaptureView object
        */
        static CCamStillPreCaptureView* NewLC( CCamAppController& aController );

        /**
        * Destructor.
        * @since 2.8
        */
        virtual ~CCamStillPreCaptureView();

    public: // Functions from base classes

        /**
        * From CAknView.
        * @since 2.8
        * @return UID of view
        */
        TUid Id() const;

        /**
        * From CAknView.
        * @since 2.8
        */
        void DoDeactivate();

        /**
        * From CAknView Handle commands
        * @since 2.8
        * @param aCommand command to be handled
        */
        void HandleCommandL( TInt aCommand );

        /**
        * From CAknView Handles the foreground/background event
        * @since 2.8
        * @param aForeground ETrue if this view is on foreground, else EFalse.
        */
        void HandleForegroundEventL( TBool aForeground );
        
        /**
        * From CCamViewBase
        * Handle change of focus to another application
        * This only handles another application coming to the foreground when
        * the camera application is already in the background behind an eikon
        * server window
        * @since 2.8
        */
        void HandleFocusLossL();

        /**
        * From MCamControllerObserver
        * @since 2.8
        * @param aEvent The enumerated code for the event received
        * @param aError The error code associated with the event
        */
        void HandleControllerEventL( TCamControllerEvent aEvent,
                                            TInt aError );

        /**
        * From CAknView.
        * @since 2.8
        * @param aPrevViewId the ID for previous view we are switching from
        * @param aCustomMessageId the Uid for message passed to this view
        * @param aCustomMessage descriptor containing data content for view specific message
        */
        void DoActivateL( const TVwsViewId& aPreViewId, TUid aCustomMessageId,
                                                    const TDesC8& aCustomMessage );

        /**
        * From CCamViewBase.
        * Called to identify the help context for this view
        * @since 2.8
        * @param aContext Help context object to populate with control context
        * information
        */
        virtual void GetHelpContext( TCoeHelpContext& aContext ) const;
        
        /**
        * From CCamViewBase
        * Update the softkeys for the current situation.
        * @since 2.8
        */
        void UpdateCbaL(); 

    public:  // New functions
    
        /**
        * Update fixed toolbar icons according to current settings
        * @since S60 5.0
        */
        void UpdateToolbarIconsL();

                /**
        * Try to start the capture with MSK command. 
        * @since 9.1
        * @return ETrue if started.
        */
        TBool StartMskCaptureL();

// from base class MAknToolbarObserver

        void DynInitToolbarL( TInt aResourceId, CAknToolbar* aToolbar );

    protected:  // Functions from base classes

        /**
        * From CCamPreCaptureViewBase 
        * Set the menu bar resource.
        */
        virtual void SetMenuBar();

        /**
        * From CCamPreCaptureViewBase Handle commands
        * Creates a photo capture setup menu
        * @since 2.8
        */
        void CreateCaptureSetupMenuL();

  
        /**
        * Enter scene setting mode.
        * Creates a container to replace the normal container on the control stack. 
        * Updates the Cba, title pane and navi pane.
        * @since 2.8
        */
        void SwitchToSceneSettingModeL();
        
        /**
        * Enter InfoListBox mode
        * Creates a container to replace the normal container on the control stack. 
        * Updates the Cba, title pane and navi pane.
        * @param aMode
        * @since 3.0
        */
        void SwitchToInfoListBoxL( TCamInfoListBoxMode aMode ); 
        
    private:    // New functions

        /**
        * C++ default constructor.
        * @param aController Reference to either the application controller 
        *        base class or test base class
        * @since 2.8
        */
        CCamStillPreCaptureView( CCamAppController& aController );

        /**
        * By default Symbian 2nd phase constructor is private.
        * @since 2.8
        */
        void ConstructL();
        
        
         /*
         *  Updating Light sensitivity icons if supported
         */
         void UpdateFlashIconsL();
        
        /*
        *  Updating Light sensitivity icons if supported
        */
        void UpdateLightSensitivityIconsL();
        
        /*
        * Update color tone specific icons if supported.
        */
        void UpdateColorToneIconsL();
        
        /*
        * Update white balance specific icons if supported.
        */
        void UpdateWhiteBalanceIconsL();
        
        /*
        * Update sharpness specific icons if supported.
        */
        void UpdateSharpnessIconsL();
        
        /*
        * Update exposure specific icons if supported.
        */
        void UpdateExposureIconsL();
        
        /*
        * Update contrast specific icons if supported.
        */
        void UpdateContrastIconsL();
        
        /*
        * Update self timer specific icons if supported.
        */
        void UpdateSelfTimerIconsL();
        
        /*
        * Update scene mode specific icons if supported.
        */
        void UpdateSceneModeIconsL();
        
        /*
        * Update scene mode specific icons if supported.
        */
        void UpdateVFGridIconsL();
		
		/*
        * Update scene mode specific icons if supported.
        */
        void UpdateBurstModeIconsL();
        /*
         * Update Face Tracking specific icons if supported. 
        */
        void UpdateFaceTrackingIconsL();

    private:    // Functions from base classes

        /**
        * From CCamViewBase
        * Set the view's title text
        * @since 2.8
        */
        void SetTitlePaneTextL();

        /**
        * From CCamPreCaptureViewBase
        * Enter Viewfinder mode
        * @since 2.8
        */
        void StartViewFinder();

        /**
        * From CCamPreCaptureViewBase
        * Exit Viewfinder mode
        * @since 2.8
        */
        void StopViewFinder();
        
        /**
        * From CCamViewBase
        * Create the container associated with this view.
        * @since 2.8
        */
        void CreateContainerL();

    private:    // From MEikMenuObserver
        /**
        * From MEikMenuObserver Changes MenuPane dynamically
        * @param Resource Id
        * @param Handle to menu pane
        * @since 2.8
        */
        void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );

    private:
        // Cache the previous controller operation state that we were informed about
        TCamCaptureOperation iPreviousControllerOperation;
        TBool iSoftkeyBlankIsNeeded;
        
    };

#endif      // CAMSTILLIMAGEPRECAPTUREVIEW_H 
            
// End of File
