uifw/AvKon/src/AknMfneSettingPage.cpp
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/src/AknMfneSettingPage.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,1100 @@
+/*
+* Copyright (c) 2002 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: 
+*     This set of classes implememts setting pages for time, date, and duration
+*       and IP address
+*
+*
+*/
+
+
+#include "aknmfnesettingpage.h"
+
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <avkon.mbg>
+#include <aknconsts.h>
+
+#include <AknTasHook.h>
+#if defined( RD_SCALABLE_UI_V2)
+#include "aknbutton.h"
+// For MAknMfneCommandObserver
+#include <aknmfnecommandobserver.h>
+#endif //if defined( RD_SCALABLE_UI_V2)
+
+
+//////////////////////////////////////////////////////////////////////
+//
+//  MFNE SETTING PAGE - virtual class
+//
+//////////////////////////////////////////////////////////////////////
+
+
+
+// -----------------------------------------------------------------------------
+// CAknMfneSettingPage::~CAknMfneSettingPage
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknMfneSettingPage::~CAknMfneSettingPage()
+    {
+    AKNTASHOOK_REMOVE();
+    }
+
+
+/**
+ * Simple pass-through constructor for this interim class
+ *
+ */
+EXPORT_C CAknMfneSettingPage::CAknMfneSettingPage( TInt aResourceId ) : CAknSettingPage( aResourceId )
+    {
+    AKNTASHOOK_ADD( this, "CAknMfneSettingPage" );
+    }
+
+/**
+ * Constructor that allows separate setting page and editor resources
+ * 
+ */
+EXPORT_C CAknMfneSettingPage::CAknMfneSettingPage(  
+                                const TDesC* aSettingText, 
+                                TInt aSettingNumber, 
+                                TInt aControlType,
+                                TInt aEditorResourceId, 
+                                TInt aSettingPageResourceId )
+                                :   CAknSettingPage( 
+                                    aSettingText, 
+                                    aSettingNumber, 
+                                    aControlType, 
+                                    aEditorResourceId, 
+                                    aSettingPageResourceId) 
+    {
+    AKNTASHOOK_ADD( this, "CAknMfneSettingPage" );
+    }
+
+EXPORT_C void CAknMfneSettingPage::SizeChanged()
+    {
+    StandardSettingPageLayout();  // Must be part of any re-implementation
+
+    TRect rect( SettingItemContentRect( EFalse ) );
+        
+    iMfneLayoutRect.LayoutRect(
+        rect,
+        AknLayoutScalable_Avkon::setting_code_pane_copy1() );
+    TRect editorRect( iMfneLayoutRect.Rect() );
+    
+    TAknLayoutRect layoutRect;
+    layoutRect.LayoutRect(
+        editorRect,
+        AknLayoutScalable_Avkon::indicator_popup_pane_cp6() );
+    TRect indicatorRect( layoutRect.Rect() );
+    
+    layoutRect.LayoutRect(
+        editorRect,
+        AknLayoutScalable_Avkon::input_focus_pane_cp2_copy1() );
+    TRect editorFrameRect( layoutRect.Rect() );
+
+    AknLayoutUtils::LayoutMfne(
+        Mfne(),
+        editorRect,
+        AknLayoutScalable_Avkon::setting_code_pane_t1_copy1() );
+
+    layoutRect.LayoutRect(
+        editorFrameRect,
+        AknLayoutScalable_Avkon::set_opt_bg_pane_g1_copy1() );
+    SetEditedItemFrameRects( editorFrameRect, layoutRect.Rect() );
+    
+    SetEditorIndicatorRect( indicatorRect );
+    }
+
+EXPORT_C void CAknMfneSettingPage::Draw(const TRect& aRect) const
+    {
+    BaseDraw( aRect );
+
+    if ( !IsSkinsHandlingEditorFrameDrawing() )
+        {
+        // Legacy frame drawing
+        CWindowGc& gc=SystemGc(); 
+        iMfneLayoutRect.DrawRect( gc );
+        iHorizontalShadow.DrawRect( gc );
+        iVerticalShadow.DrawRect( gc );
+        iOutlineFrame.DrawOutLineRect( gc );
+        }
+    }
+
+/** 
+ *
+ * Type-specific access to the MFNE
+ *
+ */
+EXPORT_C CEikMfne* CAknMfneSettingPage::Mfne() const
+    {
+    return STATIC_CAST( CEikMfne*, EditorControl());
+    }
+
+EXPORT_C void CAknMfneSettingPage::HandleControlEventL(CCoeControl* /*aControl*/,
+                 MCoeControlObserver::TCoeEvent aEventType)
+    {
+    // Ordering is important here.  Need first to do the check on validity because
+    // UpdateSettingL may leave if the data is invalid !
+    if ( aEventType == EEventStateChanged )
+        {
+        // This updates the CBA depending on validity of data as reported by mfne
+        CheckAndSetDataValidity();
+        UpdateCbaL();
+
+		if ( iUpdateMode == EUpdateWhenChanged )
+			UpdateSettingL();
+		
+		}
+	}
+	
+EXPORT_C void CAknMfneSettingPage::HandlePointerEventL(const TPointerEvent& aPointerEvent) 
+    { 
+    if(!AknLayoutUtils::PenEnabled())
+        {
+        CAknSettingPage::HandlePointerEventL(aPointerEvent); 
+        }
+    else
+        {
+        CEikMfne* pMfne = Mfne();
+        if ( pMfne && iMfneLayoutRect.Rect().Contains( aPointerEvent.iPosition ) )
+            {
+            pMfne->HandlePointerEventL(aPointerEvent);
+            }
+        else
+            {
+            CAknSettingPage::HandlePointerEventL(aPointerEvent);
+            }
+        }
+    }	
+
+EXPORT_C void* CAknMfneSettingPage::ExtensionInterface( TUid /*aInterface*/ ) 
+    { 
+    return NULL;
+    }
+
+EXPORT_C void CAknMfneSettingPage::CheckAndSetDataValidity()
+	{
+	SetDataValidity( Mfne()->Field(Mfne()->CurrentField())->IsValid() );
+	}
+
+// -----------------------------------------------------------------------------
+// CAknMfneSettingPage::ConstructL
+// This second phase constructor should be called by the derived classes
+// to create touch enabled edit buttons in touch enabled devices
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknMfneSettingPage::ConstructL()
+	{
+    BaseConstructL();
+#if defined( RD_SCALABLE_UI_V2)
+    if ( AknLayoutUtils::PenEnabled() )
+        {
+        Mfne()->SetFeature( CEikMfne::EFingerSupport, CEikMfne::EnableWithAllHighlight );
+        }
+    SizeChanged();
+#endif //if defined( RD_SCALABLE_UI_V2)
+	}
+
+// -----------------------------------------------------------------------------
+// CAknMfneSettingPage::ComponentControl
+// Calls parent class' implementation and then checks if touch buttons are
+// available to be accessed
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CCoeControl* CAknMfneSettingPage::ComponentControl(TInt aIndex) const
+	{	    
+    return CAknSettingPage::ComponentControl(aIndex);
+    }
+        
+
+// -----------------------------------------------------------------------------
+// CAknMfneSettingPage::CountComponentControls
+// Calls parent class' implementation and then adds touch buttons to the count
+// if they have been initialzed
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAknMfneSettingPage::CountComponentControls() const
+	{
+	return CAknSettingPage::CountComponentControls();
+	}
+
+//////////////////////////////////////////////////////////////////////
+//
+//  DATE SETTING PAGE
+//
+//////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+/**
+ * Destructor
+ *
+ */
+EXPORT_C CAknDateSettingPage::~CAknDateSettingPage()
+	{
+	AKNTASHOOK_REMOVE();
+	}
+
+
+
+/**
+ * Constructor using Setting page resource
+ *
+ *
+ * @param	aResourceId		Setting page resource Id
+ * @param	aDateValue		Reference to a Time value set to the initial date
+ */
+EXPORT_C CAknDateSettingPage::CAknDateSettingPage( TInt aResourceId, TTime& aDateValue ):
+	 CAknMfneSettingPage(aResourceId),iDateValue(aDateValue)
+	{
+	iBackupDateValue = iDateValue;
+	AKNTASHOOK_ADD( this, "CAknDateSettingPage" );
+	}
+
+/**
+ * Constructor that allows separate setting page and editor resources
+ * 
+ */
+EXPORT_C CAknDateSettingPage::CAknDateSettingPage(	
+                                const TDesC* aSettingText, 
+                                TInt aSettingNumber, 
+                                TInt aControlType,
+                                TInt aEditorResourceId, 
+                                TInt aSettingPageResourceId, 
+                                TTime& aDateValue )
+                                :   CAknMfneSettingPage( 
+                                    aSettingText, 
+                                    aSettingNumber, 
+                                    aControlType, 
+                                    aEditorResourceId, 
+                                    aSettingPageResourceId), 
+                                    iDateValue(aDateValue)
+	{
+	iBackupDateValue = iDateValue;
+	AKNTASHOOK_ADD( this, "CAknDateSettingPage" );
+	}
+
+/**
+ *
+ * 2nd stage construction.  This uses stored values from the conststuctor to allocate the 
+ * required aggregate objects, and then set the Date value. 
+ *
+ */
+EXPORT_C void CAknDateSettingPage::ConstructL()
+	{
+    CAknMfneSettingPage::ConstructL();
+
+    DateEditor()->SetUpAndDownKeysConsumed(ETrue);
+	DateEditor()->SetDate( iDateValue );
+
+	DateEditor()->SetSkinTextColorL(EAknsCIQsnTextColorsCG26);
+
+	// Construct an appropriate control context for the contained editor areas.
+	// Context produced is owned by CAknSettingPage.
+	SetEditedItemFrameIID( KAknsIIDQsnFrInput, KAknsIIDQsnFrInputCenter );
+	}
+/**
+ * This framework method is called when the editor changes its value and the mode of 
+ * execution of the setting page is a continuous update mode.
+ *
+ */
+EXPORT_C void CAknDateSettingPage::UpdateSettingL()
+	{
+	// The following actually leaves if a field is empty or is out of range: 
+	iDateValue = DateEditor()->Date();
+	if( iSettingPageObserver )
+		iSettingPageObserver->HandleSettingPageEventL(this, MAknSettingPageObserver::EEventSettingChanged);	
+
+	}
+/**
+ * We reload the value once again, in case we were not in
+ * continuous update mode. A special event is generated for the observer to say that the
+ * value is accepted.
+ *
+ */
+EXPORT_C void CAknDateSettingPage::AcceptSettingL()
+	{
+	DateEditor()->PrepareForFocusLossL();
+	iDateValue = DateEditor()->Date();
+	}
+/**
+ * The backup value, stored at construction time, is re-loaded into the referenced Date.
+ * An event is sent to the observer saying that the event was dismissed.
+ */
+EXPORT_C void CAknDateSettingPage::RestoreOriginalSettingL()
+	{
+	iDateValue = iBackupDateValue;
+	}
+
+/**
+ *
+ * Type-specific access to the editor 
+ *
+ */
+EXPORT_C CEikDateEditor* CAknDateSettingPage::DateEditor()
+	{
+	return STATIC_CAST( CEikDateEditor*, EditorControl());
+	}
+
+/**
+ * Writes the internal state of the control and its components to aStream.
+ * Does nothing in release mode.
+ * Designed to be overidden and base called by subclasses.
+ */
+#ifndef _DEBUG
+EXPORT_C void CAknDateSettingPage::WriteInternalStateL(RWriteStream& /*aWriteStream*/) const
+	{}
+#else
+EXPORT_C void CAknDateSettingPage::WriteInternalStateL(RWriteStream& aWriteStream) const
+	{
+	CAknSettingPage::WriteInternalStateL(aWriteStream);
+	}
+#endif
+
+EXPORT_C void CAknDateSettingPage::HandlePointerEventL(const TPointerEvent& aPointerEvent) 
+    { 
+    CAknMfneSettingPage::HandlePointerEventL(aPointerEvent); 
+    }
+
+EXPORT_C void* CAknDateSettingPage::ExtensionInterface( TUid /*aInterface*/ ) 
+    { 
+    return NULL;
+    }
+
+/**
+ *	Reserved method derived from CCoeControl
+ */
+EXPORT_C void CAknDateSettingPage::Reserved_2()
+	{
+	}
+
+/**
+* Setting Page reserved methods 
+*/ 
+EXPORT_C void CAknDateSettingPage::CAknSettingPage_Reserved_1()
+	{
+	}
+EXPORT_C void CAknDateSettingPage::CAknSettingPage_Reserved_2()
+	{
+	}
+//////////////////////////////////////////////////////////////////////
+//
+//  TIME SETTING PAGE
+//
+//////////////////////////////////////////////////////////////////////
+
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+/**
+ * Destructor
+ *
+ */
+EXPORT_C CAknTimeSettingPage::~CAknTimeSettingPage()
+	{
+	AKNTASHOOK_REMOVE();
+	}
+
+/**
+ * Constructor using Setting page resource
+ *
+ *
+ * @param	aResourceId		Setting page resource Id
+ * @param	aTimeValue		Reference to a Time value set to the initial date
+ */
+EXPORT_C CAknTimeSettingPage::CAknTimeSettingPage( TInt aResourceId, TTime& aTimeValue ):
+	 CAknMfneSettingPage(aResourceId),iTimeValue(aTimeValue)
+	{
+	iBackupTimeValue = iTimeValue;
+	AKNTASHOOK_ADD( this, "CAknTimeSettingPage" );
+	}
+/**
+ * Constructor that allows separate setting page and editor resources
+ * 
+ */
+EXPORT_C CAknTimeSettingPage::CAknTimeSettingPage(	
+								const TDesC* aSettingText, 
+								TInt aSettingNumber, 
+								TInt aControlType,
+								TInt aEditorResourceId, 
+								TInt aSettingPageResourceId, 
+								TTime& aTimeValue )
+								:	CAknMfneSettingPage( 
+									aSettingText, 
+									aSettingNumber, 
+									aControlType, 
+									aEditorResourceId, 
+									aSettingPageResourceId), 
+									iTimeValue(aTimeValue)
+	{
+	iBackupTimeValue = iTimeValue;
+	AKNTASHOOK_ADD( this, "CAknTimeSettingPage" );
+	}
+/**
+ *
+ * 2nd stage construction.  This uses stored values from the conststuctor to allocate the 
+ * required aggregate objects, and then set the Time value. 
+ *
+ */
+EXPORT_C void CAknTimeSettingPage::ConstructL()
+	{
+    CAknMfneSettingPage::ConstructL();
+
+    TimeEditor()->SetUpAndDownKeysConsumed(ETrue);
+	TimeEditor()->SetTime( iTimeValue );
+
+	TimeEditor()->SetSkinTextColorL(EAknsCIQsnTextColorsCG26);
+
+	// Construct an appropriate control context for the contained editor areas.
+	// Context produced is owned by CAknSettingPage. 
+    SetEditedItemFrameIID( KAknsIIDQsnFrInput, KAknsIIDQsnFrInputCenter );
+	}
+/**
+ * This framework method is called when the editor changes its value and the mode of 
+ * execution of the setting page is a continuous update mode.
+ *
+ */
+EXPORT_C void CAknTimeSettingPage::UpdateSettingL()
+	{
+	iTimeValue = TimeEditor()->Time();
+	if( iSettingPageObserver )
+		iSettingPageObserver->HandleSettingPageEventL(this, MAknSettingPageObserver::EEventSettingChanged);	
+
+	}
+/**
+ * We reload the event once again, in case we were not in
+ * continuous update mode. A special event is generated for the observer to say that the
+ * value is accepted.
+ *
+ */
+EXPORT_C void CAknTimeSettingPage::AcceptSettingL()
+	{
+	iTimeValue = TimeEditor()->Time();
+	}
+/**
+ * The backup value, stored at construction time, is re-loaded into the referenced Time.
+ * An event is sent to the observer saying that the event was dismissed.
+ */
+EXPORT_C void CAknTimeSettingPage::RestoreOriginalSettingL()
+	{
+	iTimeValue = iBackupTimeValue;
+	}
+
+/**
+ *
+ * Type-specific access to the editor 
+ *
+ */
+EXPORT_C CEikTimeEditor* CAknTimeSettingPage::TimeEditor()
+	{
+	return STATIC_CAST( CEikTimeEditor*, EditorControl());
+	}
+
+/**
+ * Writes the internal state of the control and its components to aStream.
+ * Does nothing in release mode.
+ * Designed to be overidden and base called by subclasses.
+ */
+#ifndef _DEBUG
+EXPORT_C void CAknTimeSettingPage::WriteInternalStateL(RWriteStream& /*aWriteStream*/) const
+	{}
+#else
+EXPORT_C void CAknTimeSettingPage::WriteInternalStateL(RWriteStream& aWriteStream) const
+	{
+	CAknSettingPage::WriteInternalStateL(aWriteStream);
+	}
+#endif
+
+EXPORT_C void CAknTimeSettingPage::HandlePointerEventL(const TPointerEvent& aPointerEvent) 
+    { 
+    CAknMfneSettingPage::HandlePointerEventL(aPointerEvent); 
+    }
+
+EXPORT_C void* CAknTimeSettingPage::ExtensionInterface( TUid /*aInterface*/ ) 
+    { 
+    return NULL;
+    }
+
+/**
+ *	Reserved method derived from CCoeControl
+ */
+EXPORT_C void CAknTimeSettingPage::Reserved_2()
+	{
+	}
+
+/**
+* Setting Page reserved methods 
+*/ 
+EXPORT_C void CAknTimeSettingPage::CAknSettingPage_Reserved_1()
+	{
+	}
+EXPORT_C void CAknTimeSettingPage::CAknSettingPage_Reserved_2()
+	{
+	}
+//////////////////////////////////////////////////////////////////////
+//
+//  DURATION SETTING PAGE
+//
+//////////////////////////////////////////////////////////////////////
+
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+/**
+ * Destructor
+ *
+ */
+EXPORT_C CAknDurationSettingPage::~CAknDurationSettingPage()
+	{
+	AKNTASHOOK_REMOVE();
+	}
+
+/**
+ * Constructor using Setting page resource
+ *
+ *
+ * @param	aResourceId		Setting page resource Id
+ * @param	aDurationValue		Reference to a Time value set to the initial date
+ */
+EXPORT_C CAknDurationSettingPage::CAknDurationSettingPage( TInt aResourceId, TTimeIntervalSeconds& aDurationValue ):
+	 CAknMfneSettingPage(aResourceId),iDurationValue(aDurationValue)
+	{
+	iBackupDurationValue = iDurationValue;
+	AKNTASHOOK_ADD( this, "CAknDurationSettingPage" );
+	}
+	/**
+	 * Constructor that allows separate setting page and editor resources
+	 * 
+	 * This constructor allows the use of setting page using only the editor resource.  Other combinations are also possible
+	 *
+	 * In all cases the number (if supplied i.e. <> 0 ) is used.  
+	 *
+	 *		Editor Resource		Setting Page Resource
+	 *			present				present				Both are used (but text & number overridden)
+	 *			 = 0				present				Editor resource is used via SP resource (Effectively like the other constructor)
+	 *			present				 = 0				Default Avkon SP resource if used + this editor resource
+	 *			 = 0				 = 0				uses default resource for both SP and editor. This is OK if:
+	 *	 i) control type is present, 
+	 *  ii) a default resource exists ( OK for text, integer, date, time, duration )
+	 *
+	 *
+	 * Rules for text and numbers: The rules are the same for both:  (non-zero length) text or number other 
+	 * than EAknSettingPageNoOrdinalDisplayed if given in this constructor will not override resource 
+	 * (unless that is zero length or EAknSettingPageNoOrdinalDisplayed).  Note, however, that text or number given via the 
+	 * specific API for setting them, WILL override resource.
+	 * It is assumed that number from resource is very rare.  Special text is somewhat more likely.
+	 * 
+	 * @param aSettingTitleText		Text at top of setting pane
+	 * @param aSettingNumber		Number at top left (if present)
+	 * @param aControlType			Determines the type constructed and how its resource is read
+	 * @param aEditorResourceId		Editor resource to use in the setting page (if present)
+	 * @param aSettingPageResourceId		Setting Page to use (if present)
+	 * @param aDurationValue				reference to a duration
+	 */
+
+EXPORT_C CAknDurationSettingPage::CAknDurationSettingPage(	
+								const TDesC* aSettingText, 
+								TInt aSettingNumber, 
+								TInt aControlType,
+								TInt aEditorResourceId, 
+								TInt aSettingPageResourceId, 
+								TTimeIntervalSeconds& aDurationValue )
+								:	CAknMfneSettingPage( 
+									aSettingText, 
+									aSettingNumber, 
+									aControlType, 
+									aEditorResourceId, 
+									aSettingPageResourceId), 
+									iDurationValue(aDurationValue)
+	{
+	iBackupDurationValue = iDurationValue;
+	AKNTASHOOK_ADD( this, "CAknDurationSettingPage" );
+	}
+/**
+ *
+ * 2nd stage construction.  This uses stored values from the conststuctor to allocate the 
+ * required aggregate objects, and then set the Duration value. 
+ *
+ */
+EXPORT_C void CAknDurationSettingPage::ConstructL()
+	{
+	CAknMfneSettingPage::ConstructL();
+	
+    DurationEditor()->SetUpAndDownKeysConsumed(ETrue);
+	DurationEditor()->SetDuration( iDurationValue );
+	
+	DurationEditor()->SetSkinTextColorL(EAknsCIQsnTextColorsCG26);
+
+	// Construct an appropriate control context for the contained editor areas.
+	// Context produced is owned by CAknSettingPage. 
+    SetEditedItemFrameIID( KAknsIIDQsnFrInput, KAknsIIDQsnFrInputCenter );
+	}
+/**
+ * This framework method is called when the editor changes its value and the mode of 
+ * execution of the setting page is a continuous update mode.
+ *
+ */
+EXPORT_C void CAknDurationSettingPage::UpdateSettingL()
+	{
+	iDurationValue = DurationEditor()->Duration();
+	if( iSettingPageObserver )
+		iSettingPageObserver->HandleSettingPageEventL(this, MAknSettingPageObserver::EEventSettingChanged);	
+
+	}
+/**
+ * We reload the event once again, in case we were not in
+ * continuous update mode. A special event is generated for the observer to say that the
+ * value is accepted.
+ *
+ */
+EXPORT_C void CAknDurationSettingPage::AcceptSettingL()
+	{
+	DurationEditor()->PrepareForFocusLossL();
+	iDurationValue = DurationEditor()->Duration();
+	}
+/**
+ * The backup value, stored at construction time, is re-loaded into the referenced Duration.
+ * An event is sent to the observer saying that the event was dismissed.
+ */
+EXPORT_C void CAknDurationSettingPage::RestoreOriginalSettingL()
+	{
+	iDurationValue = iBackupDurationValue;
+	}
+
+/**
+ *
+ * Type-specific access to the editor 
+ *
+ */
+EXPORT_C CEikDurationEditor* CAknDurationSettingPage::DurationEditor()
+	{
+	return STATIC_CAST( CEikDurationEditor*, EditorControl());
+	}
+
+/**
+ * Writes the internal state of the control and its components to aStream.
+ * Does nothing in release mode.
+ * Designed to be overidden and base called by subclasses.
+ */
+#ifndef _DEBUG
+EXPORT_C void CAknDurationSettingPage::WriteInternalStateL(RWriteStream& /*aWriteStream*/) const
+	{}
+#else
+EXPORT_C void CAknDurationSettingPage::WriteInternalStateL(RWriteStream& aWriteStream) const
+	{
+	CAknSettingPage::WriteInternalStateL(aWriteStream);
+	}
+#endif
+
+EXPORT_C void CAknDurationSettingPage::HandlePointerEventL(const TPointerEvent& aPointerEvent) 
+    { 
+    CAknMfneSettingPage::HandlePointerEventL(aPointerEvent); 
+    }
+
+EXPORT_C void* CAknDurationSettingPage::ExtensionInterface( TUid /*aInterface*/ ) 
+    { 
+    return NULL;
+    }
+
+/**
+ *	Reserved method derived from CCoeControl
+ */
+EXPORT_C void CAknDurationSettingPage::Reserved_2()
+	{
+	}
+
+/**
+* Setting Page reserved methods 
+*/ 
+EXPORT_C void CAknDurationSettingPage::CAknSettingPage_Reserved_1()
+	{
+	}
+EXPORT_C void CAknDurationSettingPage::CAknSettingPage_Reserved_2()
+	{
+	}
+//////////////////////////////////////////////////////////////////////
+//
+//  TIME OFFSET SETTING PAGE
+//
+//////////////////////////////////////////////////////////////////////
+
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+/**
+ * Destructor
+ *
+ */
+EXPORT_C CAknTimeOffsetSettingPage::~CAknTimeOffsetSettingPage()
+	{
+	AKNTASHOOK_REMOVE();
+	}
+
+/**
+ * Constructor using Setting page resource
+ *
+ *
+ * @param	aResourceId		Setting page resource Id
+ * @param	aDurationValue		Reference to a Time value set to the initial date
+ */
+EXPORT_C CAknTimeOffsetSettingPage::CAknTimeOffsetSettingPage( TInt aResourceId, TTimeIntervalSeconds& aTimeOffsetValue ):
+	 CAknMfneSettingPage(aResourceId),iTimeOffsetValue(aTimeOffsetValue)
+	{
+	iBackupTimeOffsetValue = iTimeOffsetValue;
+	AKNTASHOOK_ADD( this, "CAknTimeOffsetSettingPage" );
+	}
+	/**
+	 * Constructor that allows separate setting page and editor resources
+	 * 
+	 * This constructor allows the use of setting page using only the editor resource.  Other combinations are also possible
+	 *
+	 * In all cases the number (if supplied i.e. <> 0 ) is used.  
+	 *
+	 *		Editor Resource		Setting Page Resource
+	 *			present				present				Both are used (but text & number overridden)
+	 *			 = 0				present				Editor resource is used via SP resource (Effectively like the other constructor)
+	 *			present				 = 0				Default Avkon SP resource if used + this editor resource
+	 *			 = 0				 = 0				uses default resource for both SP and editor. This is OK if:
+	 *	 i) control type is present, 
+	 *  ii) a default resource exists ( OK for text, integer, date, time, duration )
+	 *
+	 *
+	 * Rules for text and numbers: The rules are the same for both:  (non-zero length) text or number other 
+	 * than EAknSettingPageNoOrdinalDisplayed if given in this constructor will not override resource 
+	 * (unless that is zero length or EAknSettingPageNoOrdinalDisplayed).  Note, however, that text or number given via the 
+	 * specific API for setting them, WILL override resource.
+	 * It is assumed that number from resource is very rare.  Special text is somewhat more likely.
+	 * 
+	 * @param aSettingTitleText		Text at top of setting pane
+	 * @param aSettingNumber		Number at top left (if present)
+	 * @param aControlType			Determines the type constructed and how its resource is read
+	 * @param aEditorResourceId		Editor resource to use in the setting page (if present)
+	 * @param aSettingPageResourceId		Setting Page to use (if present)
+	 * @param aDurationValue				reference to a duration
+	 */
+
+EXPORT_C CAknTimeOffsetSettingPage::CAknTimeOffsetSettingPage(	
+								const TDesC* aSettingText, 
+								TInt aSettingNumber, 
+								TInt aControlType,
+								TInt aEditorResourceId, 
+								TInt aSettingPageResourceId, 
+								TTimeIntervalSeconds& aTimeOffsetValue )
+								:	CAknMfneSettingPage( 
+									aSettingText, 
+									aSettingNumber, 
+									aControlType, 
+									aEditorResourceId, 
+									aSettingPageResourceId), 
+									iTimeOffsetValue(aTimeOffsetValue)
+	{
+	iBackupTimeOffsetValue = iTimeOffsetValue;
+	AKNTASHOOK_ADD( this, "CAknTimeOffsetSettingPage" );
+	}
+/**
+ *
+ * 2nd stage construction.  This uses stored values from the conststuctor to allocate the 
+ * required aggregate objects, and then set the TimeOffset value. 
+ *
+ */
+EXPORT_C void CAknTimeOffsetSettingPage::ConstructL()
+	{
+    CAknMfneSettingPage::ConstructL();
+
+    TimeOffsetEditor()->SetUpAndDownKeysConsumed(ETrue);
+	TimeOffsetEditor()->SetTimeOffset( iTimeOffsetValue );
+	
+	TimeOffsetEditor()->SetSkinTextColorL(EAknsCIQsnTextColorsCG26);
+	
+	// Construct an appropriate control context for the contained editor areas.
+	// Context produced is owned by CAknSettingPage. 
+    SetEditedItemFrameIID( KAknsIIDQsnFrInput, KAknsIIDQsnFrInputCenter );
+	}
+/**
+ * This framework method is called when the editor changes its value and the mode of 
+ * execution of the setting page is a continuous update mode.
+ *
+ */
+EXPORT_C void CAknTimeOffsetSettingPage::UpdateSettingL()
+	{
+	iTimeOffsetValue = TimeOffsetEditor()->TimeOffset();
+	if( iSettingPageObserver )
+		iSettingPageObserver->HandleSettingPageEventL(this, MAknSettingPageObserver::EEventSettingChanged);	
+
+	}
+/**
+ * We reload the event once again, in case we were not in
+ * continuous update mode. A special event is generated for the observer to say that the
+ * value is accepted.
+ *
+ */
+EXPORT_C void CAknTimeOffsetSettingPage::AcceptSettingL()
+	{
+	TimeOffsetEditor()->PrepareForFocusLossL();
+	iTimeOffsetValue = TimeOffsetEditor()->TimeOffset();
+	if( iSettingPageObserver )
+		iSettingPageObserver->HandleSettingPageEventL(this, MAknSettingPageObserver::EEventSettingOked);	
+	}
+/**
+ * The backup value, stored at construction time, is re-loaded into the referenced TimeOffset.
+ * An event is sent to the observer saying that the event was dismissed.
+ */
+EXPORT_C void CAknTimeOffsetSettingPage::RestoreOriginalSettingL()
+	{
+	iTimeOffsetValue = iBackupTimeOffsetValue;
+	if( iSettingPageObserver )
+		iSettingPageObserver->HandleSettingPageEventL(this, MAknSettingPageObserver::EEventSettingCancelled);	
+	}
+
+/**
+ *
+ * Type-specific access to the editor 
+ *
+ */
+EXPORT_C CEikTimeOffsetEditor* CAknTimeOffsetSettingPage::TimeOffsetEditor()
+	{
+	return STATIC_CAST( CEikTimeOffsetEditor*, EditorControl());
+	}
+
+/**
+ * Writes the internal state of the control and its components to aStream.
+ * Does nothing in release mode.
+ * Designed to be overidden and base called by subclasses.
+ */
+#ifndef _DEBUG
+EXPORT_C void CAknTimeOffsetSettingPage::WriteInternalStateL(RWriteStream& /*aWriteStream*/) const
+	{}
+#else
+EXPORT_C void CAknTimeOffsetSettingPage::WriteInternalStateL(RWriteStream& aWriteStream) const
+	{
+	CAknSettingPage::WriteInternalStateL(aWriteStream);
+	}
+#endif
+
+EXPORT_C void CAknTimeOffsetSettingPage::HandlePointerEventL(const TPointerEvent& aPointerEvent) 
+    { 
+    CAknMfneSettingPage::HandlePointerEventL(aPointerEvent); 
+    }
+
+EXPORT_C void* CAknTimeOffsetSettingPage::ExtensionInterface( TUid /*aInterface*/ ) 
+    { 
+    return NULL;
+    }
+
+/**
+ *	Reserved method derived from CCoeControl
+ */
+EXPORT_C void CAknTimeOffsetSettingPage::Reserved_2()
+	{
+	}
+
+/**
+* Setting Page reserved methods 
+*/ 
+EXPORT_C void CAknTimeOffsetSettingPage::CAknSettingPage_Reserved_1()
+	{
+	}
+EXPORT_C void CAknTimeOffsetSettingPage::CAknSettingPage_Reserved_2()
+	{
+	}
+//////////////////////////////////////////////////////////////////////
+//
+//  IP ADDRESS FIELD SETTING PAGE
+//
+//////////////////////////////////////////////////////////////////////
+
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+/**
+ * Destructor
+ *
+ */
+EXPORT_C CAknIpFieldSettingPage::~CAknIpFieldSettingPage()
+	{
+	AKNTASHOOK_REMOVE();
+	}
+
+/**
+ * Constructor using Setting page resource
+ *
+ *
+ * @param	aResourceId		Setting page resource Id
+ * @param	aIpFieldValue		Reference to a Time value set to the initial date
+ */
+EXPORT_C CAknIpFieldSettingPage::CAknIpFieldSettingPage( TInt aResourceId, TInetAddr& aIpAddress ):
+	 CAknMfneSettingPage(aResourceId),iIpAddress(aIpAddress)
+	{
+	iBackupIpAddress = iIpAddress;
+	AKNTASHOOK_ADD( this, "CAknIpFieldSettingPage" );
+	}
+	/**
+	 * Constructor that allows separate setting page and editor resources
+	 * 
+	 * This constructor allows the use of setting page using only the editor resource.  Other combinations are also possible
+	 *
+	 * In all cases the number (if supplied i.e. <> 0 ) is used.  
+	 *
+	 *		Editor Resource		Setting Page Resource
+	 *			present				present				Both are used (but text & number overridden)
+	 *			 = 0				present				Editor resource is used via SP resource (Effectively like the other constructor)
+	 *			present				 = 0				Default Avkon SP resource if used + this editor resource
+	 *			 = 0				 = 0				uses default resource for both SP and editor. This is OK if:
+	 *	 i) control type is present, 
+	 *  ii) a default resource exists ( OK for text, integer, date, time, IpField )
+	 *
+	 *
+	 * Rules for text and numbers: The rules are the same for both:  (non-zero length) text or number other 
+	 * than EAknSettingPageNoOrdinalDisplayed if given in this constructor will not override resource 
+	 * (unless that is zero length or EAknSettingPageNoOrdinalDisplayed).  Note, however, that text or number given via the 
+	 * specific API for setting them, WILL override resource.
+	 * It is assumed that number from resource is very rare.  Special text is somewhat more likely.
+	 * 
+	 * @param aSettingTitleText	Text at top of setting pane
+	 *	@param aSettingNumber		Number at top left (if present)
+	 * @param aControlType			Determines the type constructed and how its resource is read
+	 * @param aEditorResourceId	Editor resource to use in the setting page (if present)
+	 * @param aSettingPageResourceId		Setting Page to use (if present)
+	 * @param aIpAddress				reference to a IP address
+	 */
+
+EXPORT_C CAknIpFieldSettingPage::CAknIpFieldSettingPage(	
+								const TDesC* aSettingText, 
+								TInt aSettingNumber, 
+								TInt aControlType,
+								TInt aEditorResourceId, 
+								TInt aSettingPageResourceId, 
+								TInetAddr& aIpAddress )
+								:	CAknMfneSettingPage( 
+									aSettingText, 
+									aSettingNumber, 
+									aControlType, 
+									aEditorResourceId, 
+									aSettingPageResourceId), 
+									iIpAddress(aIpAddress)
+	{
+	iBackupIpAddress = iIpAddress;
+	AKNTASHOOK_ADD( this, "CAknIpFieldSettingPage" );
+	}
+/**
+ *
+ * 2nd stage construction.  This uses stored values from the conststuctor to allocate the 
+ * required aggregate objects, and then set the IpField value. 
+ *
+ */
+EXPORT_C void CAknIpFieldSettingPage::ConstructL()
+	{
+    CAknMfneSettingPage::ConstructL();
+    IpFieldEditor()->SetUpAndDownKeysConsumed(ETrue);
+	IpFieldEditor()->SetAddress( iIpAddress );
+	
+	IpFieldEditor()->SetSkinTextColorL(EAknsCIQsnTextColorsCG26);
+
+	// Construct an appropriate control context for the contained editor areas.
+	// Context produced is owned by CAknSettingPage. 
+    SetEditedItemFrameIID( KAknsIIDQsnFrInput, KAknsIIDQsnFrInputCenter );
+	}
+/**
+ * This framework method is called when the editor changes its value and the mode of 
+ * execution of the setting page is a continuous update mode.
+ *
+ */
+EXPORT_C void CAknIpFieldSettingPage::UpdateSettingL()
+	{
+	iIpAddress = IpFieldEditor()->Address();
+	if( iSettingPageObserver )
+		iSettingPageObserver->HandleSettingPageEventL(this, MAknSettingPageObserver::EEventSettingChanged);	
+
+	}
+/**
+ * We reload the event once again, in case we were not in
+ * continuous update mode. A special event is generated for the observer to say that the
+ * value is accepted.
+ *
+ */
+EXPORT_C void CAknIpFieldSettingPage::AcceptSettingL()
+	{
+	IpFieldEditor()->PrepareForFocusLossL();
+	iIpAddress = IpFieldEditor()->Address();
+	}
+/**
+ * The backup value, stored at construction time, is re-loaded into the referenced IpField.
+ * An event is sent to the observer saying that the event was dismissed.
+ */
+EXPORT_C void CAknIpFieldSettingPage::RestoreOriginalSettingL()
+	{
+	iIpAddress = iBackupIpAddress;
+	}
+
+/**
+ *
+ * Type-specific access to the editor 
+ *
+ */
+EXPORT_C CAknIpFieldEditor* CAknIpFieldSettingPage::IpFieldEditor()
+	{
+	return STATIC_CAST( CAknIpFieldEditor*, EditorControl());
+	}
+
+/**
+ * Writes the internal state of the control and its components to aStream.
+ * Does nothing in release mode.
+ * Designed to be overidden and base called by subclasses.
+ */
+#ifndef _DEBUG
+EXPORT_C void CAknIpFieldSettingPage::WriteInternalStateL(RWriteStream& /*aWriteStream*/) const
+	{}
+#else
+EXPORT_C void CAknIpFieldSettingPage::WriteInternalStateL(RWriteStream& aWriteStream) const
+	{
+	CAknSettingPage::WriteInternalStateL(aWriteStream);
+	}
+#endif
+
+EXPORT_C void CAknIpFieldSettingPage::HandlePointerEventL(const TPointerEvent& aPointerEvent) 
+    { 
+    CAknMfneSettingPage::HandlePointerEventL(aPointerEvent); 
+    }
+
+EXPORT_C void* CAknIpFieldSettingPage::ExtensionInterface( TUid /*aInterface*/ ) 
+    { 
+    return NULL;
+    }
+
+/**
+ *	Reserved method derived from CCoeControl
+ */
+EXPORT_C void CAknIpFieldSettingPage::Reserved_2()
+	{
+	}
+
+/**
+* Setting Page reserved methods 
+*/ 
+EXPORT_C void CAknIpFieldSettingPage::CAknSettingPage_Reserved_1()
+	{
+	}
+EXPORT_C void CAknIpFieldSettingPage::CAknSettingPage_Reserved_2()
+	{
+	}
+// End of File