epoc32/include/mw/aknsettingpage.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 2 2fe1408b6811
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
     1 /*
     2 * Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     8 *
     9 * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    11 *
    12 * Contributors:
    13 *
    14 * Description: 
    15 *  Base class for setting page (setting item editing) UI
    16 *
    17 */
    18 
    19 
    20 #ifndef __AKNSETTINGPAGE_H__
    21 #define __AKNSETTINGPAGE_H__ 
    22 
    23 #include <AknControl.h>
    24 
    25 #include <eikdef.h>
    26 #include <eikbtgpc.h>
    27 
    28 // For menu support
    29 #include <eikmenub.h>
    30 #include <eikmenup.h>
    31 #include <eikmobs.h>
    32 
    33 // for layout support
    34 #include <AknUtils.h>
    35 
    36 // for navipane support (hint text)
    37 #include <aknnavi.h>
    38 
    39 //
    40 // Forward declarations
    41 //
    42 class CEikLabel;
    43 class CAknSettingPageSkinsInfo;
    44 class MAknsControlContext;
    45 class CAknsFrameBackgroundControlContext;
    46 class CAknSettingPageExtension;
    47 
    48 
    49 // Used as the return value of SettingId() if not yet set.
    50 // This because the Id might want to be the index of a 0-based array
    51 
    52 const TInt KAknSettingPageNoIdSet = -1;
    53 
    54 class CAknSettingPage;
    55 
    56 // This class is used as a means of notifying change in settings.
    57 
    58 class MAknSettingPageObserver 
    59 {
    60 public:
    61 enum TAknSettingPageEvent
    62 	{
    63 	EEventSettingChanged,
    64 	EEventSettingCancelled,
    65 	EEventSettingOked
    66 	};
    67 public:
    68 
    69 /**
    70  * Handles an event of type aEventType reported by the Setting Page to this observer.
    71  */
    72 virtual void HandleSettingPageEventL(CAknSettingPage* aSettingPage,TAknSettingPageEvent aEventType )=0;
    73 
    74 };
    75 
    76 class CAknSettingPage : public CAknControl, public MCoeControlObserver, public MEikMenuObserver
    77 {
    78 public:
    79 
    80 /**
    81 * This enumeration is passed in the ExecuteLD() method to control how often the setting page 
    82 * updates the externally held client object
    83 */
    84 	enum TAknSettingPageUpdateMode
    85 		{
    86 		EUpdateWhenChanged,
    87 		EUpdateWhenAccepted
    88 		};
    89 
    90 /**
    91 * This enumeration is used to select the type and IIDs for the various classes defined in the 
    92 * Skins LAF spec for "Opened Setting Items"
    93 */
    94 	enum TEditedItemSkinClass
    95 		{
    96 		ESettingPageSkinEditedItemClassValueItemList,
    97 		ESettingPageSkinEditedItemClassVolume,
    98 		ESettingPageSkinEditedItemClassSlider,
    99 		ESettingPageSkinEditedItemClassTextEntry,
   100 		ESettingPageSkinEditedItemClassCodeDateTimeEntry
   101 		};
   102 /**
   103  * Simple contructor for using a single setting page resource which itself gives all 
   104  * the setup
   105  */
   106 	IMPORT_C CAknSettingPage( TInt aSettingPageResourceId );
   107  /**
   108  * Constructor that allows separate setting page and editor resources
   109  *
   110  * In all cases the number (if supplied i.e. <> 0 ) is used.  
   111  *
   112  *		Editor Resource 	Setting Page Resource
   113  *			present 			present 			Both are used (but text & number overridden)
   114  *			 = 0				present 			Editor resource is used via SP resource
   115  *			present 			= 0 				Default Avkon SP resource if used
   116  *			 = 0				= 0 				Not permitted
   117  *
   118  * Note: The first argument is a TDesC* (rather than TDesC&) because the other constructor
   119  * cannot initialize such a member without allocation or having an internal dummy buffer.
   120  *
   121  * Rules for text and numbers: The rules are the same for both:  (non-zero length) text or number other 
   122  * than EAknSettingPageNoOrdinalDisplayed if given in this constructor will not override resource 
   123  * (unless that is zero length or EAknSettingPageNoOrdinalDisplayed).  Note, however, that text or number given via the 
   124  * specific API for setting them, WILL override resource.
   125  * It is assumed that number from resource is very rare.  Special text is somewhat more likely.
   126  * 
   127  * @param aSettingTitleText		Text at top of setting pane (not copied; must be owned externally until ExecuteLD is called)
   128  * @param aSettingNumber		Number at top left (if present)
   129  * @param aControlType			Determines the type constructed and how its resource is read
   130  * @param aEditorResourceId Editor resource to use in the setting page (if present)
   131  * @param aSettingPageResourceId		Setting Page to use (if present)
   132  */
   133 	IMPORT_C CAknSettingPage(	const TDesC* aSettingTitleText, 
   134 								TInt aSettingNumber, 
   135 								TInt aControlType,
   136 								TInt aEditorResourceId, 
   137 								TInt aSettingPageResourceId = 0 );
   138 /**
   139 * C++ destructor
   140 */
   141 	IMPORT_C virtual ~CAknSettingPage();
   142 
   143 /**
   144  * Executes a waiting dialog-like setting page
   145  * 
   146  * The passed mode determines if the editor's value is updated continuously, or just
   147  * when it is accepted.
   148  * 
   149  * @param	aMode		The update mode of the class
   150  */
   151 	IMPORT_C TBool ExecuteLD( enum CAknSettingPage::TAknSettingPageUpdateMode aMode=EUpdateWhenAccepted );
   152 
   153 /**
   154  * public method for construction.	Only thing required to do in this class is to call the 
   155  * BaseConstructL(). Derived classes may be required to do more
   156  *
   157  */
   158 	IMPORT_C virtual void ConstructL();
   159 
   160 /**
   161  * Returns reference to the hosted "editor" control as a CCoeControl.
   162  * This routine is used in derived classes, which may then cast to the specific run-time type
   163  * Note also that derived classes may provide type-specific access that performs these casts already
   164  * 
   165  * @return CCoeControl* pointer to the hosted editor control
   166  */
   167 	IMPORT_C CCoeControl* EditorControl() const;
   168 
   169 /**
   170  * Returns the setting Id.
   171  *
   172  * @return TInt the setting Id
   173  */
   174 	IMPORT_C TInt SettingId() const;
   175 
   176 /**
   177  * Sets the setting Id.  The Id may be used to unabiguously number a setting in some context.
   178  * It would be useful to call SettingId() on aSettingPageControl in handling an observer
   179  * callback.  The Id is not used internally.
   180  *
   181  * @param	aSettingId		An id to provide to the observer in the callback 
   182  */
   183 	IMPORT_C void SetSettingId( TInt aSettingId );
   184 /**
   185 * Substitutes the new setting number. 
   186 *
   187 * @param	aSettingNumber	The new setting number to display
   188 */
   189 	IMPORT_C void SetSettingNumberL( const TInt aSettingNumber );
   190 
   191 /**
   192  * Substitutes the new setting text.  Memory is allocated for a copy.
   193  * If already constructed, the label is reformatted.  
   194  * 
   195  * Note that calling this will over-ride text in Setting Page resource
   196  * 
   197  * @param	aSettingText	The new setting text to display
   198  */
   199 	IMPORT_C void SetSettingTextL( const TDesC& aSettingText );
   200 
   201 /**
   202  * Sets the observer for the setting page.
   203  *
   204  * @param	aObserver	The observer for changes to the setting
   205  */
   206 	IMPORT_C void SetSettingPageObserver( MAknSettingPageObserver* aObserver);
   207 
   208 /**
   209  * Access method for the number of the setting page
   210  *
   211  */
   212 	IMPORT_C TInt SettingNumber() const;
   213 
   214 /**
   215  * Access method for whether the setting page is numbered or not
   216  *
   217  */
   218 	IMPORT_C TBool IsNumbered() const;
   219 
   220 /**
   221  * Set method for whether the setting page is numbered or not
   222  *
   223  */
   224 	IMPORT_C void SetNumbered( TBool aNumbered );
   225 
   226 /**
   227  * Reads the passed-in setting page resource in order to read the contained editor control
   228  * resource information
   229  * @param aSettingPageResoruceId	This is used to specifiy what resource to read
   230  * @param aControlType				Returns the control type (MAY return 0 - that's a valid control type!
   231  * @param aEditorResourceId 		Returns the setting page's LLINK editor resource, but returns 0 if not present
   232  * 
   233  * This will leave if an invalid resource ID is passed
   234  */
   235 	IMPORT_C static void GetEditorResourceInfoL( 
   236 		TInt aSettingPageResourceId, 
   237 		TInt& aControlType, 
   238 		TInt& aEditorResourceId );
   239  
   240  
   241  /**
   242  * Set the edit-state of the setting page. The setting page can be edited or 
   243  * it can be only viewed by the user.
   244  *
   245  * @since 3.1
   246  * @param   aEditable If false, the setting page cannot be modified by the user
   247  */
   248  IMPORT_C void SetEditState(const TBool aEditable);
   249  
   250  /**
   251  * Is the setting page possible to edit by the user.
   252  *
   253  * @since 3.1
   254  * @return  Can user modify the setting page. True if can, false if cannot.
   255  */
   256  IMPORT_C TBool IsEditable() const;
   257  
   258  /**
   259  * Used for aknsettingpage's extenstion corresponding function
   260  *
   261  * @since 5.0
   262  * @param  aCaption On return, this should be set to the caption of the target control. 
   263  */ 
   264  void GetCaptionForFep(TDes& aCaption) const;
   265 
   266  /**
   267  * Calculates and returns setting item content rect.
   268  *
   269  * @param  aScrollBarUsed  @c ETrue if the setting page content should have
   270  *                         scrollbar, @c EFalse otherwise.
   271  *
   272  * @internal
   273  * @since 5.2
   274  * @return Setting item content rectangle. 
   275  */
   276  TRect SettingItemContentRect( TBool aScrollBarUsed );
   277 
   278  /**
   279  * Is the setting page drawing the background itself or not (= "transparency")
   280  */ 
   281  TBool IsBackgroundDrawingEnabled() const;
   282 
   283 /**
   284 * Access method to the Command button array
   285 *
   286 * Must be called after full construction, or null reference will be returned.
   287 *
   288 * @return CEikButtonGroupContainer* a pointer to the cba owned by the setting page
   289 */
   290     IMPORT_C CEikButtonGroupContainer* Cba() const ;
   291 
   292 protected:
   293 
   294 /**
   295 * From CCoeControl
   296 * This routine is called as part of the set-up of the control.	It is the place to put
   297 * layout code. 
   298 *
   299 */
   300 	IMPORT_C virtual void SizeChanged();
   301 
   302 
   303 /**
   304 * From CCoeControl
   305 * Takes any action required when the control gains or loses focus e.g. to change its appearance.
   306 * The control should be redrawn depending on the value of aDrawNow. Empty by default.
   307 */
   308 	IMPORT_C virtual void FocusChanged(TDrawNow aDrawNow); 
   309 	
   310 /**
   311  * From MEikCommandObserver
   312  * Processes events from the softkeys. Responds to EAknSoftkeyOk and EAknSoftkeyBack
   313  * to accept or cancel the pop-up.
   314  *
   315  * @param	aCommandId	Event Id from the soft-key
   316  */
   317 	IMPORT_C virtual void ProcessCommandL(TInt aCommandId);
   318 
   319 /**
   320  * From MCoeControlObserver:
   321  * Acts upon changes in the hosted control's state. 
   322  * 
   323  * This class's implementation is trivial and should be able to be
   324  * safely re-implemented in directly client-derived classes. 
   325  * For non-base setting page classes, a call to the base class should be made
   326  *
   327  * @param	aControl	The control changing its state (not used)
   328  * @param	aEventType	The type of control event 
   329  */
   330 	IMPORT_C virtual void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType);
   331 
   332 //
   333 //
   334 // Framework functions. New in this class
   335 //
   336 //
   337 	/**
   338 	* Framework method to determine if it is OK to exit the setting page.
   339 	* Derived classes may check for valid data before allowing the dismissal of the 
   340 	* setting page.
   341 	*
   342 	* @param	aAccept ETrue if the user has indicated to accept the setting page; EFalse otherwise
   343 	* @return	TBool	a value indicating whether the setting page should be dismissed
   344 	*/
   345 	IMPORT_C virtual TBool OkToExitL(TBool aAccept);
   346 	
   347 /**
   348 * Called immediately prior to activation of the dialog.  Framework routine for derived
   349 * classes.
   350 *
   351 */
   352 	IMPORT_C virtual void DynamicInitL();
   353 
   354 /**
   355  * Called when something has changed and the client's object needs to have its value updated
   356  *
   357  */
   358 	IMPORT_C virtual void UpdateSettingL();
   359 
   360 /**
   361  * Called when the user accepts a setting and the setting page is about to be dismissed.  The latest value of the
   362  * setting is written to the client's object
   363  */
   364 	IMPORT_C virtual void AcceptSettingL();
   365 
   366 /**
   367  * Called when the user rejects the setting.  A backup copy may need to be restored if UpdateWhenChanged flag was set
   368  *
   369  */
   370 	IMPORT_C virtual void RestoreOriginalSettingL();
   371 
   372 /** 
   373  * Display the menu
   374  */
   375 	IMPORT_C virtual void DisplayMenuL() ;
   376 
   377 /**
   378  * Hide the menu
   379  */
   380 	IMPORT_C virtual void HideMenu() ;
   381 
   382 /** 
   383  * Puts the focus back on the editor. For complicated setting pages that have focus removed from them
   384  * at some point, then a re-implementation may have to do some work here.
   385  */
   386 	IMPORT_C virtual void SetFocusToEditor();
   387 
   388 /**
   389  * This method should be implemented in listbox classes to move the selection in 
   390  * listbox editors prior to exiting from the setting page. It is called on a 
   391  * CAknSettingPage* reference, and is therefore declared here.
   392  */
   393 	IMPORT_C virtual void SelectCurrentItemL();
   394 
   395 /**
   396  * Protected non-virtual base method for construction.	Only thing required to do in this class is 
   397  * call the ConstructFromResourceL routine and set the flag that says construction has occured
   398  *
   399  */
   400 	IMPORT_C void BaseConstructL();
   401 
   402 /**
   403  * Called to remove the setting page. Should not be called except from within re-implemented
   404  * AttemptExitL
   405  *
   406  * @param	aAccept ETrue to accept the current value; EFalse otherwise
   407  */
   408 	IMPORT_C void DismissL( TBool aAccept );  
   409 
   410 /**
   411  * This is used as a protected access function for the state of the menu bar
   412  *
   413  * @return TBool	ETrue if the menu is currently showing 
   414  */
   415 	IMPORT_C TBool MenuShowing() const ;
   416 
   417 /** 
   418 * This constructs the control based upon the id passed
   419 *
   420 */
   421 	IMPORT_C void ConstructFromResourceL( TInt aResourceId);
   422 
   423 /** 
   424 * This constructs the control based upon a constructed and positioned reader
   425 *
   426 */
   427 	IMPORT_C void ConstructFromResourceL(TResourceReader& aRes);
   428 
   429  /**
   430  * Called when the user accepts or cancels the setting. Default implementation
   431  * sets the return value and exists. 
   432  * 
   433  * Re-implementations must call DismissL and StopActiveScheduler() if the setting is
   434  * to leave.
   435  *
   436  * @param	aAccept ETrue if the user accepted. EFalse if the user cancelled.
   437  */
   438 	IMPORT_C void AttemptExitL(TBool aAccept);
   439 /**
   440 * Method to determine the current running state of the setting page's 
   441 * ActiveScheduler level. 
   442 *
   443 * @return	EFalse only if the CActiveSheduler level is not running
   444 */
   445 	IMPORT_C TBool Waiting(); 
   446 
   447 /**
   448  * This is used to access the default resource id for the cba - the one used when 
   449  * data is valid.
   450  *
   451  * @return TInt 	the default resource Id 
   452  */
   453 	IMPORT_C TInt DefaultCbaResourceId() const; 
   454 
   455 /** 
   456 * This routine routes the keys to the editor. 
   457 * However, if the menu is showing, then events are sent to the menu. 
   458 *
   459 * @param	aKeyEvent	event information	
   460 * @param	aType		type of event being handled
   461 *
   462 */
   463 	IMPORT_C TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType);
   464 
   465 /**
   466 * This routine is the base layout for CAknSettingPage. It lays out the labels and configures
   467 * the drawing in general.
   468 */	
   469 	IMPORT_C void StandardSettingPageLayout();
   470 
   471 /**
   472  * This method can be used to test if BaseConstructL() has been called yet
   473  * successfully
   474  *
   475  * @return TBool	ETrue if BaseContructL has been called (and not left)
   476  */
   477 	IMPORT_C TBool IsBaseConstructed();
   478 
   479 /**
   480  * Access method for the internally held resource Id
   481  *
   482  */
   483 	IMPORT_C TInt SettingPageResourceId();
   484 /** 
   485 * Perform the drawing of coded within CAknSettingPage
   486 * 
   487 */
   488 	IMPORT_C void BaseDraw(const TRect& aRect) const;
   489 
   490 /**
   491 * Set default construction values of internal state
   492 */
   493 	IMPORT_C void ResetFlags();
   494 
   495 /**
   496  * Framework method called as soon as the setting page is displayed, but before the new active sheduler level
   497  * is started.	Returning EFalse will dismiss the setting page right away
   498  *
   499  * @return TBool	ETrue if the setting page is to continue
   500  */
   501 	IMPORT_C virtual TBool PostDisplayCheckL();
   502 
   503 /** 
   504  * This framework method is used to update the contents of the CBA in a custom way.
   505  * Some setting page classes implement a degree of validation and will implement this.
   506  * Derived classes should ensure that this is being called frequently enough for their
   507  * purposes.
   508  */
   509 	IMPORT_C virtual void UpdateCbaL();
   510 
   511 /**
   512  * Called to access the validity state of the data
   513  *
   514  * @return TBool ETRrue if the data is valid
   515  */
   516 	IMPORT_C TBool DataValidity() const;
   517 
   518 /**
   519  * used to set the validity of the data
   520  *
   521  * @param TBool aValid	Sets the validity true or false
   522  */
   523 	IMPORT_C void SetDataValidity(TBool aValid);
   524 
   525 /**
   526  * Framework method to set the validity of the data
   527  * This is called when the data changes.
   528  *
   529  */
   530 	IMPORT_C virtual void CheckAndSetDataValidity();
   531 
   532 	/**
   533      * Sets the outer and inner rectangle for the frame graphics that is drawn
   534 	 * around the setting item.
   535      *
   536      * @param  aOuterRect  Frame outer rectangle.
   537      * @param  aInnerRect  Frame inner rectangle.
   538      *
   539      * @since 5.2
   540      */
   541 	void SetEditedItemFrameRects( const TRect& aOuterRect,
   542                                   const TRect& aInnerRect );
   543 	
   544 	/**
   545      * Sets the skin item ID for the frame graphics that is drawn
   546      * around the setting item.
   547      *
   548      * @param  aFrameIID        Skin item ID of the frame graphics.
   549      * @param  aFrameCenterIID  Skin item ID of the center piece of the frame
   550      *                          graphics
   551      *
   552      * @since 5.2
   553      */
   554     void SetEditedItemFrameIID( const TAknsItemID& aFrameIID,
   555                                 const TAknsItemID& aFrameCenterIID );
   556     
   557     /**
   558      * Sets the rectangle for the editing state indicators.
   559      * Should only be called by setting pages that have an editor which
   560      * displays the editor indicators as the editor control.
   561      *
   562      * @param  aRect  Editor indicator rectangle.
   563      *
   564      * @since 5.2
   565      */
   566     void SetEditorIndicatorRect( const TRect& aRect );
   567 
   568  /**
   569  * Indicates whether skin system will be able to draw the editor frame and background
   570  *
   571  * @return TBool ETrue iff the drawing of the edited item frame is going to be handled by
   572  *					the base CAknSettingPage class itself using Skins
   573  * @since 2.0
   574  */
   575 	TBool IsSkinsHandlingEditorFrameDrawing() const;
   576 
   577  /**
   578  * Control context for providing to the skinning for the hosted editor and its framing
   579  *
   580  * @return      A valid control context for frame drawing for a hosted editor or NULL
   581  * @since 2.0
   582  */ 
   583     CAknsFrameBackgroundControlContext* EditedItemControlContext() const;
   584 
   585 	/**
   586      * Performs base construction and takes possible flags into account.
   587      *
   588      * @param  aFlags Construction flags
   589      *
   590      * @since 5.2
   591      */
   592     void BaseConstructL( TUint aFlags );
   593     
   594     /** 
   595      * Stop current (additional) level on the active scheduler.
   596      */ 
   597 	void StopActiveScheduler();
   598 
   599 protected:
   600  /**
   601  * From MEikMenuObserver 
   602  * Called when menu is cancelled.
   603  */
   604 	IMPORT_C virtual void SetEmphasis(CCoeControl* /*aMenuControl*/,TBool aEmphasis);
   605 
   606  /**
   607  * From MEikMenuObserver 
   608  * This function intializes the items on the menu. It is used to disable and enable menu items and may be
   609  * over ridden to add new ones.
   610  * In addition it adds menu items which have been provided in the ConstructL in the form of a Menu Bar resource.
   611  * Instead of using the Menu Bar directly it extracts the menu panes and adds them to its own menu pane.
   612  * It must be called in the DynInitMenuPaneL() function of any derived class before anything else.
   613  */
   614 	IMPORT_C virtual void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ); 
   615 
   616 public: // From CCoeControl
   617  /**
   618  * Handles a change to the control's resources of type aType
   619  * which are shared across the environment, e.g. colors or fonts.
   620  *
   621  * @since 2.0
   622  * @param aType  Reason for the "resource" change, usually an system event UID
   623  */
   624     IMPORT_C void HandleResourceChange(TInt aType);
   625 /**
   626  * Standard CCoeControl routine to return the number of componentn controls
   627  *
   628  * @param	aIndex	index at which to return control
   629  */
   630 	IMPORT_C TInt CountComponentControls() const;
   631 
   632 /**
   633  * Standard CCoeControl routine to return the control at a given index
   634  *
   635  * @param	aIndex	index at which to return control
   636  */ 
   637 
   638 	IMPORT_C CCoeControl* ComponentControl(TInt anIndex) const;
   639 
   640  /**
   641  * Handles pointer events
   642  */
   643     IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent);
   644  /**
   645  * From CCoeControl.
   646  * Gets the control's input capabilities.
   647  *
   648  * @return The control's input capabilities.
   649  */   
   650 	IMPORT_C TCoeInputCapabilities InputCapabilities() const;
   651 	
   652 private:
   653 	IMPORT_C virtual void Reserved_MtsmPosition();
   654 	IMPORT_C virtual void Reserved_MtsmObject();
   655 
   656 protected:
   657 /** 
   658 *	Access method for the softkey resource used when there is invalid data
   659 *
   660 * @return TInt The resource Id of the softkey bindings. 
   661 */
   662 	IMPORT_C TInt InvalidDataCbaResourceId() const; 
   663 
   664 protected: // from MObjectProvider
   665 	IMPORT_C TTypeUid::Ptr MopSupplyObject(TTypeUid aId);
   666 
   667 protected:
   668 	/**
   669 	* Hold the update mode passed in the constructor
   670 	*/
   671 	TInt iUpdateMode;
   672 
   673 	// The following are not owned:
   674 
   675 	/**
   676 	* Pointer to setting page observer; may be NULL
   677 	*/
   678 	MAknSettingPageObserver* iSettingPageObserver;
   679 
   680 private:
   681 	//From CCoeControl
   682 	IMPORT_C void Draw(const TRect& aRect) const;
   683 	
   684 private:
   685     /**
   686     * From CAknControl
   687     */
   688     IMPORT_C void* ExtensionInterface( TUid aInterface );
   689 
   690 protected:
   691 
   692 /**
   693  * Writes the internal state of the control and its components to aStream.
   694  * Does nothing in release mode.
   695  * Designed to be overidden and base called by subclasses.
   696  *
   697  * @param	aWriteSteam		A connected write stream
   698  */	
   699 	IMPORT_C virtual void WriteInternalStateL(RWriteStream& aWriteStream) const;
   700 
   701 private:
   702 /**
   703 *	Reserved method derived from CCoeControl
   704 */
   705 	IMPORT_C virtual void Reserved_2();
   706 
   707  /** 
   708  * Activate another level on the active scheduler
   709  */ 
   710 	void StartActiveScheduler();
   711 
   712 /**
   713 * Pop the navidecorator. The iNaviPane is used as a flag to show if popping is required to 
   714 * be done or not. It is zeroed by this method.
   715 *
   716 */
   717 	void PopNaviDecoratorIfRequired();
   718 
   719 private:
   720 
   721 /**
   722 * New reserved methods for CAknSettingPage hierarchy
   723 */ 
   724 private: 
   725 	IMPORT_C virtual void CAknSettingPage_Reserved_1();
   726 	IMPORT_C virtual void CAknSettingPage_Reserved_2();
   727 
   728 protected:
   729     /**
   730     * Enables / disables transparency effect, i.e. does the setting page draw its own background or not.
   731     * @param aDrawBackground  EFalse enables transparency
   732     */ 
   733     void SetDrawBackground(const TBool aDrawBackground);    
   734 
   735     /**
   736     * Set the flag to indicate that if the function CAknSettingPage::StopActiveScheduler called or not
   737     *@param aStopCalled ETrue means the StopActiveScheduler is called.
   738     */
   739     void SetStopActiveSchedulerFlag(const TBool aStopCalled );
   740 
   741     /**
   742      * Is the setting page call the StopActiveScheduler or not 
   743      */ 
   744     TBool IsStopActiveSchudlerCalled()const;
   745 
   746     /**
   747     * Pointer to setting text label
   748     * @return pointer to the label
   749     *
   750 	* @since 5.0
   751     */    
   752     IMPORT_C CEikLabel* TextLabel() const;
   753     
   754     /**
   755     * Pointer to shadow text label
   756     * @return pointer to the label
   757     *
   758 	* @since 5.0
   759     */    
   760     IMPORT_C CEikLabel* ShadowText() const;
   761 
   762 private:
   763 /** 
   764 * This member points to the setting title text that is passed as part of its more complicated constructor.
   765 * The descriptor pointed to is not owned, and therefor must be preserved in the client, at least until the 
   766 * 2nd stage construction is performed (inside ExecuteLD). 
   767 *
   768 * Since, however, setting pages are all waiting, the descriptor can usually be on the stack in the client.
   769 *
   770 */
   771 	const TDesC* iSettingTextFromConstructor;
   772 	TInt iResourceId;
   773 
   774 	TInt iSettingNumber;
   775 	TInt iSettingId;
   776 	TInt iMenuBarId;
   777 	TInt iControlType;
   778 	TInt iEditorResourceId;
   779 	TInt iExtensionId;
   780 	TInt iCbaResourceId;
   781 
   782 	TAknLayoutRect iShadow;
   783 	TAknLayoutRect iHighlight;
   784 
   785 // pointer to the return value from the setting page.  
   786 // Needed when presented in waiting mode.  
   787 	TBool* iReturn; 
   788 	
   789 // Internal flags
   790 	TBitFlags iFlags ;
   791 
   792 	enum TFlagIndices
   793 		{
   794 		EMenuShowingIndex = 0,
   795 		ENumberedStyleIndex,
   796 		EIsBaseConstructedIndex,
   797 		EHasValidDataIndex
   798 		};
   799 
   800 // Heap objects pointed to here are owned:
   801 	CCoeControl* iEditorControl;
   802 	CEikLabel* iNumberLabel;
   803 	CEikLabel* iTextLabel;
   804 	CEikButtonGroupContainer* iCba;
   805 	CEikMenuBar* iMenuBar ;
   806 	HBufC* iHintText;
   807 	HBufC* iSettingText; 
   808 	CAknNavigationDecorator* iNaviDecorator;
   809 
   810 	// The following are not owned:
   811 	// For hint text support
   812 	CAknNavigationControlContainer* iNaviPane;
   813 
   814 	// Softkey resource when the data is invalid
   815 	TInt iInvalidDataCbaResourceId;
   816 	
   817 	// The following object is used to contain all skinning information required
   818 	CAknSettingPageSkinsInfo* iSkinsInfo;
   819 
   820 	CActiveSchedulerWait iWait;		// owned, safe to use as direct member data.
   821 
   822     // is setting page editable
   823     TInt iIsProtected;
   824     
   825     // extension to setting page
   826     CAknSettingPageExtension* iExtension;
   827 };
   828 
   829 #endif