browserui/browser/SettingsInc/SettingsContainer.h
author Simon Howkins <simonh@symbian.org>
Mon, 22 Nov 2010 14:25:13 +0000
branchRCL_3
changeset 73 9437cb201cd0
parent 65 8e6fa1719340
permissions -rw-r--r--
__WEB_WIDGETS configuration is now done within the component's bld.inf files, not the top/mid level bld.infs

/*
* 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 the License "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: 
*     Container of the information about the active settings
*
*/


#ifndef SETTINGS_CONTAINER_H
#define SETTINGS_CONTAINER_H

// INCLUDE FILES
#include <coecntrl.h>
#include <coemop.h>
#include <AknLists.h>

// CONSTANTS
const TInt KWmlSettingsIndexNone = -1;
const TInt KWmlSettingsItemMaxLength = 100;

// FORWARD DECLARATION
class MApiProvider;
class CAknNavigationDecorator;
class CAknSettingStyleListBox;


struct TEncodingStruct
    {
    TUint32 iSystemId;  // System id of the encoding (CHARCONV.h)
    TUint32 iResId;     // Resource string id
    };

// CLASS DECLARATION

/**
*  Container of the settings view
*  @since 1.2
*/
class CSettingsContainer : public CCoeControl, public MEikListBoxObserver
	{
	public:  // construction, destruction

        /**
        * Two-phased constructor.
		* @since 1.2
        * @param aRect Rectangle.
        * @param aPreferences Preferences.
        * @param aCommsModel Comms model.
        */
		static CSettingsContainer* NewLC(
            const TRect& aRect,
            MApiProvider& aApiProvider,
            MObjectProvider& aMopParent
            );

        /**
        * Two-phased constructor.
		* @since 1.2
        * @param aRect Rectangle.
        * @param aPreferences Preferences.
        * @param aCommsModel Comms model.
        */
		static CSettingsContainer* NewL(
            const TRect& aRect,
            MApiProvider& aApiProvider,
            MObjectProvider& aMopParent
            );

        /**
        * Destructor.
        */
		virtual ~CSettingsContainer();

	private: // constructor

        /**
        * Constructor.
        * @param aPreferences Preferences.
        * @param aCommsModel Comms model.
        */
		CSettingsContainer
            ( MApiProvider& aApiProvider, MObjectProvider& aMopParent );

        /**
        * By default constructor is private.
        */
		void ConstructL( const TRect& aRect );

    /**
    * Inherited functions
    */
	public:	// from CCoeControl

        /**
        * Count component controls.
		* @since 1.2
        * @return Number of component controls.
        */
		virtual TInt CountComponentControls() const;

        /**
        * Handles focus changing
        * @param aDrawNow
        */
        void FocusChanged( TDrawNow aDrawNow );

    	/**
        * Handle resource change.
        * @param aType Event type.
        */
        void HandleResourceChange( TInt aType );


        /**
        * Get a component control by index.
		* @since 1.2
        * @param aIndex Index of component control to be returned.
        * @return Component control or NULL.
        */
		virtual CCoeControl* ComponentControl( TInt aIndex ) const;

        /**
        * Handle size change, lay out and draw components.
		*  @since 1.2
        */
		virtual void SizeChanged();

        /**
        * Handle key event. Forwards all key events to the listbox, if present.
		* @since 1.2
        * @param aKeyEvent The key event.
        * @param aType Key event type.
        * @return Response (was the key event consumed?).
        */
		virtual TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );

        /**
        * HandleListBoxEventL
        * From CCoeControl
        *
        */
        void HandleListBoxEventL(CEikListBox* aListBox,TListBoxEvent aEventType);
        
        /**
        * HandleGainingForegroundL
        * Handles Foreground Event.
        */
        void HandleGainingForegroundL();

    /**
    * New functions
    */
	public:

        /**
        * Handles selection key or menu command to change value of an item.
		* @since 1.2
        */
		void ChangeItemL( TBool aSelectKeyWasPressed );

		MApiProvider& ApiProvider() { return iApiProvider; }

		/**
        * Opens the appropriate setting list e.g. Page
        * @since 3.1
        */
		void DisplayCorrectSettingCategoryListL();

		/**
        * Closes the current setting list, if the main list,
        * then leaves settings
        * @return ETrue if settings lists are closed EFalse if still open
		* @since 3.1
        */
		TBool CloseSettingsListL();
		
		
		/**
        * Checks for errors in settings values
        * @return ETrue if settings values are set incorrectly
		* @since 5.0
        */		
		TBool SettingsError();


		/**
		* Indicates if a setting item is modifiable
		*
		* @return TInt
		* @since 3.1
		*/
		TBool IsSettingModifiable() const;
		
		
		/**
        * Saves changes made by the user to the ini file
		* @since 1.2
        */
        void SaveChangesL();



        /**
        * Shows the main setting categories in a list box
        * @since 3.1
        */
        void DisplaySettingCategoriesL();

        void DisplayGeneralSettingsL();
        void DisplayPageSettingsL();
        void DisplayPrivacySettingsL();
        void DisplayWebFeedsSettingsL();
        void DisplayToolbarSettingsL();
        void DisplayShortcutsSettingsL();
        
	/**
    * New functions
    */
    private:
        TInt SetToolbarButtonValues(CArrayFixFlat<TInt> *values, TInt value, CArrayFixFlat<TInt> *displaymap);
        TInt SetShortcutKeysValues(CArrayFixFlat<TInt> *values, TInt value, CArrayFixFlat<TInt> *displaymap);
              
        void AddCategoryListBoxItemL( TInt aResourceId, CDesCArray& aList );
        void ClearListBoxContentL();
        void StoreListBoxIndexL();
        void RestoreListBoxIndexL();

        // Methods for adding settings to the settings lists

        //---------------------------------------------------------------------
        // General Settings
        void AppendDefaultAccessPointL( CDesCArray*& aItemArray,
                                TBuf<KWmlSettingsItemMaxLength>& aItemText );

        void AppendHomePageL( CDesCArray*& aItemArray,
                                TBuf<KWmlSettingsItemMaxLength>& aItemText );

        void AppendPageOverviewL( CDesCArray*& aItemArray,
                                TBuf<KWmlSettingsItemMaxLength>& aItemText );

        void AppendBackListL( CDesCArray*& aItemArray,
                                TBuf<KWmlSettingsItemMaxLength>& aItemText );
        void AppendURLSuffixListL( CDesCArray*& aItemArray, 
                                TBuf<KWmlSettingsItemMaxLength>& aItemText );                                                      
        void AppendHttpSecurityWarningsL( CDesCArray*& aItemArray,
                                TBuf<KWmlSettingsItemMaxLength>& aItemText );

        void AppendEcmaL( CDesCArray*& aItemArray,
                                TBuf<KWmlSettingsItemMaxLength>& aItemText );

        void AppendScriptLogL( CDesCArray*& aItemArray,
                                TBuf<KWmlSettingsItemMaxLength>& aItemText );

        void AppendDownloadsOpenL( CDesCArray*& aItemArray,
                                TBuf<KWmlSettingsItemMaxLength>& aItemText );
                                
        void AppendSearchProviderL( CDesCArray*& aItemArray,
                                TBuf<KWmlSettingsItemMaxLength>& aItemText );
        //---------------------------------------------------------------------
        // Page Settings
        void AppendAutoLoadContentL( CDesCArray*& aItemArray,
                                    TBuf<KWmlSettingsItemMaxLength>& aItemText );

        void AppendAutoFullScreenL( CDesCArray*& aItemArray,
                                    TBuf<KWmlSettingsItemMaxLength>& aItemText );

        void AppendAutoMediaVolumeL( CDesCArray*& aItemArray,
                                     TBuf<KWmlSettingsItemMaxLength>& aItemText );

        void AppendEncodingL( CDesCArray*& aItemArray,
                              TBuf<KWmlSettingsItemMaxLength>& aItemText );

        void AppendPopupBlockingL( CDesCArray*& aItemArray,
                                   TBuf<KWmlSettingsItemMaxLength>& aItemText );

        void AppendAutoRefreshL( CDesCArray*& aItemArray,
                                 TBuf<KWmlSettingsItemMaxLength>& aItemText );

        void AppendFontSizeL( CDesCArray*& aItemArray,
                              TBuf<KWmlSettingsItemMaxLength>& aItemText );

        TInt GetFontSizeString();
        
        
        //---------------------------------------------------------------------
        // Toolbar Settings
        void AppendToolbarOnOffL( CDesCArray*& aItemArray,
                              		TBuf<KWmlSettingsItemMaxLength>& aItemText );
        
        void AppendToolbarButtonsL( CDesCArray*& aItemArray,
                              		TBuf<KWmlSettingsItemMaxLength>& aItemText );

        void AppendShortcutKeysL( CDesCArray*& aItemArray,
                              		TBuf<KWmlSettingsItemMaxLength>& aItemText );

        //---------------------------------------------------------------------
        // Privacy Settings
        void AppendAdaptiveBookmarksL( CDesCArray*& aItemArray,
                                TBuf<KWmlSettingsItemMaxLength>& aItemText );

        void AppendFormDataSavingL( CDesCArray*& aItemArray,
                                TBuf<KWmlSettingsItemMaxLength>& aItemText );

        void AppendCookiesL( CDesCArray*& aItemArray,
                                TBuf<KWmlSettingsItemMaxLength>& aItemText );

        void AppendIMEIL( CDesCArray*& aItemArray,
                                TBuf<KWmlSettingsItemMaxLength>& aItemText );

        //---------------------------------------------------------------------
        // Web feeds Settings
        void AppendAutomaticUpdatingAPL( CDesCArray*& aItemArray,
                                TBuf<KWmlSettingsItemMaxLength>& aItemText );

        void AppendAutomaticUpdatingWhileRoamingL( CDesCArray*& aItemArray,
                                TBuf<KWmlSettingsItemMaxLength>& aItemText );
        //---------------------------------------------------------------------
        // 
        /**
		* Pops up a custom dialog to allow user to set setting items
		*/
		TInt ShowRadioButtonSettingPageL( TInt aTitle,
		                                  CArrayFixFlat<TInt>* aValues,
		                                  TInt aCurrentItem );


        /**
		* Pops up a custom dialog to allow user to set setting items
		*/
		TBool ShowRadioButtonSettingPageBoolL( TInt aTitle,
                		                       CArrayFixFlat<TInt>* aValues,
                		                       TInt* aCurrentItem );

        /**
		* Appends two text from resources to display it on lisbox
		*/
		void CreateItemFromTwoStringsL(
        		                    TInt aFirst,
        		                    TInt aSecond,
        		                    TBuf<KWmlSettingsItemMaxLength>& aResult);

        TInt MapCurrentItem( TUint aCurrentItem ) const;

        /**
        * Gets encoding information as parameters.
        * Creates an encoding object and add the new object to iEncodingArray.
        */
        void AddEncodingL( TUint32 aSystemId, TUint32 aResId );

        /**
        * Add encodings here.
        * To add or remove encodings modify this function!
        */
        void CreateEncodingArrayL();

		/**
        * Check if the added encodings are supported by the system. Removes those that are not.
        */
        void RemoveUnsupportedEncodingsL();

        /**
        * Notify BrowserControl that a setting has been changed in the UI
        */
        void NotifySettingChanged( TInt aSettingItem, TInt aSettingValue );

		/**
		*  Query user to delete Form data plus Password data
		*/
		void ShowFormDataDeleteAllQueryDialogL( );
		/**
		*  Query user to delete Form Password data
		*/
		void ShowFormDataDeletePasswordQueryDialogL( );

		/**
		*  Query user to select fromm user defined AP
		*/
        void SelectUserDefinedAPL( TUint32& id );
        
        /**
        *  Launch Search Application Settings View.
        */
        void RunSearchSettingsL();

#ifdef __SERIES60_HELP
        /**
        * Get help context for the control.
        * @param aContext The context that is filled in.
        * @return None.
        */
        void GetHelpContext( TCoeHelpContext& aContext ) const;
           
#endif // __SERIES60_HELP

    private:

        // Media Volume indices
        enum TMediaVolumeIndices
	        {
	        EVolumeMute = 0,
	        EVolumeLevel1,
	        EVolumeLevel2,
	        EVolumeLevel3,
	        EVolumeLevel4
	        };

        enum TSettingCategory
	        {
	        EMain = 0,
	        EGeneral,
	        EPrivacy,
	        EPage,
	        EWebFeeds,
	        EToolbar,
	        EShortCuts,
	        ENone
	        };

    private:	// members

		MApiProvider& iApiProvider;                         // not owned
		CAknNavigationDecorator* iNaviDecorator;            // not owned

        // Settings List Box related members
        CAknSettingStyleListBox* iSettingListBox;           // OWNED
        CArrayFixFlat<TUint>* iSettingIndex;                // OWNED
        TInt iMainSettingCurrentIndex; // hold the most recent index in the main setting list box
        TInt iMainSettingTopPosIndex;
        TInt iSubSettingCurrentIndex;  // hold the most recent index in the sub setting list boxes
        TInt iSubSettingTopPosIndex;
        TBool iActionCancelled;
        TBool iPenEnabled;    // stores platform pen enabled flag value

        TSettingCategory iCurrentSettingCategory;

        // The settings are only updated when we leave the settings
        // view to avoid unnecessary redraws
        TInt iFontSize;
        TUint32 iEncoding;
        TBool iTextWrap;

        // Holds a 'list' of all encodings
        CArrayFixFlat<TEncodingStruct>* iEncodingArray;     // OWNED
        TBool iSelectionKeyDownPressed;    
        
        TBool iFlashPluginPresent;
	};

#endif // SETTINGS_CONTAINER_H

// End of File