--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/src/AknTextSettingPage.cpp Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,878 @@
+/*
+* 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 class handles setting_text_pane and setting_code_pane (the latter in
+* the case of integers. There is a common base class to soak up some common
+* textual functionality.
+*
+*
+*/
+
+
+#include "akntextsettingpage.h"
+#include "aknsettingpage.h"
+
+#include "akntextcontrol.h"
+#include <AknsDrawUtils.h>
+
+#include <AknLayout2ScalableDef.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+
+#include <AknsControlContext.h>
+#include <AknsFrameBackgroundControlContext.h>
+#include <eikedwob.h>
+
+#include <AknTasHook.h>
+
+class CAknTextSettingPageExtension : public CBase
+ , public MEikEdwinObserver
+ {
+public:
+ static CAknTextSettingPageExtension* NewL(CAknTextSettingPage* aExtensionOwner )
+ {
+ CAknTextSettingPageExtension* extension = new (ELeave) CAknTextSettingPageExtension( aExtensionOwner );
+ CleanupStack::PushL(extension);
+ extension->ConstructL();
+ CleanupStack::Pop(extension);
+ return extension;
+ }
+
+ ~CAknTextSettingPageExtension()
+ {
+ iExtensionOwner = 0;
+ }
+
+ TInt PreviousCba()
+ {
+ return iPreviousCba;
+ };
+ void SetPreviousCba(TInt aCbaId)
+ {
+ iPreviousCba = aCbaId;
+ }
+ TBool PopupState()
+ {
+ return iPopupState;
+ }
+
+ virtual void HandleEdwinEventL( CEikEdwin* /*aEdwin*/, TEdwinEvent aEventType )
+ {
+ if( iExtensionOwner && MEikEdwinObserver::EEventChinesePopupClose == aEventType )
+ {
+ iPopupState = EFalse;
+ iExtensionOwner->ProcessPopupStateChangesL();
+ }
+ else if(iExtensionOwner && MEikEdwinObserver::EEventChinesePopupOpen == aEventType)
+ {
+ iPopupState = ETrue;
+ }
+ }
+
+private:
+ void ConstructL()
+ {
+ }
+
+ CAknTextSettingPageExtension(CAknTextSettingPage* aExtensionOwner )
+ : iPreviousCba( 0 ), iExtensionOwner( aExtensionOwner )
+ , iPopupState( EFalse )
+ {
+ }
+
+private:
+ TInt iPreviousCba;
+ CAknTextSettingPage* iExtensionOwner;
+ TBool iPopupState; // when open the popup set popup state flag to 1
+ };
+
+/**
+ * Exported in case others want to derive from this class
+ *
+ */
+EXPORT_C CAknEdwinSettingPage::CAknEdwinSettingPage( TInt aResourceId )
+ : CAknSettingPage(aResourceId)
+ {
+ AKNTASHOOK_ADD( this, "CAknEdwinSettingPage" );
+ }
+
+
+EXPORT_C CAknEdwinSettingPage::CAknEdwinSettingPage(
+ const TDesC* aSettingText,
+ TInt aSettingNumber,
+ TInt aControlType,
+ TInt aEditorResourceId,
+ TInt aSettingPageResourceId )
+ : CAknSettingPage(
+ aSettingText,
+ aSettingNumber,
+ aControlType,
+ aEditorResourceId,
+ aSettingPageResourceId )
+ {
+ AKNTASHOOK_ADD( this, "CAknEdwinSettingPage" );
+ }
+
+/**
+ * All setting pages containing edwins will have the same draw code
+ *
+ */
+EXPORT_C void CAknEdwinSettingPage::Draw(const TRect& aRect) const
+ {
+ BaseDraw( aRect );
+ }
+
+/**
+ *
+ * Type-specific access to the text editor control
+ *
+ */
+EXPORT_C CEikEdwin* CAknEdwinSettingPage::TextControl()
+ {
+ return STATIC_CAST( CEikEdwin*, EditorControl());
+ }
+
+EXPORT_C void CAknEdwinSettingPage::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+ {
+ CAknSettingPage::HandlePointerEventL(aPointerEvent);
+ }
+
+EXPORT_C void* CAknEdwinSettingPage::ExtensionInterface( TUid /*aInterface*/ )
+ {
+ return NULL;
+ }
+
+/**
+* CAknEdwinSettingPage reserved methods
+*/
+EXPORT_C void CAknEdwinSettingPage::CAknEdwinSettingPage_Reserved_1()
+ {
+ }
+
+
+
+///////////////////////////////////////////////////////////////////////
+//
+// CAknTextSettingPage
+//
+///////////////////////////////////////////////////////////////////////
+
+/**
+ *
+ * Constructor from setting page resource id + referenced text + flags
+ *
+ */
+EXPORT_C CAknTextSettingPage::CAknTextSettingPage( TInt aResourceId, TDes& aText, TInt aFlags ):
+ CAknEdwinSettingPage(aResourceId),iText(aText), iTextSettingPageFlags( aFlags )
+ {
+ AKNTASHOOK_ADD( this, "CAknTextSettingPage" );
+ }
+
+EXPORT_C CAknTextSettingPage::CAknTextSettingPage(
+ const TDesC* aSettingText,
+ TInt aSettingNumber,
+ TInt aControlType,
+ TInt aEditorResourceId,
+ TInt aSettingPageResourceId,
+ TDes& aText,
+ TInt aTextSettingPageFlags)
+ : CAknEdwinSettingPage(
+ aSettingText,
+ aSettingNumber,
+ aControlType,
+ aEditorResourceId,
+ aSettingPageResourceId ),
+ iText( aText ),
+ iTextSettingPageFlags( aTextSettingPageFlags )
+ {
+ AKNTASHOOK_ADD( this, "CAknTextSettingPage" );
+ }
+
+/**
+ * Destructor
+ *
+ */
+EXPORT_C CAknTextSettingPage::~CAknTextSettingPage()
+ {
+ if( TextControl( ) )
+ {
+ TextControl( )->RemoveEdwinObserver( iExtension );
+ }
+ AKNTASHOOK_REMOVE();
+ delete iBackupText;
+
+ delete iExtension;
+ }
+
+
+/**
+ *
+ * The 2nd stage construction. Stored internal resource is used to perform the
+ * construction.
+ *
+ */
+EXPORT_C void CAknTextSettingPage::ConstructL()
+ {
+ BaseConstructL();
+ iBackupText = iText.AllocL();
+ CEikEdwin* editor = TextControl();
+
+ // Inhibit predictive text entry unless allowed by API
+ if ( !(iTextSettingPageFlags & EPredictiveTextEntryPermitted) )
+ editor->SetAknEditorFlags( EAknEditorFlagNoT9 | editor->AknEdwinFlags() );
+
+ if(!IsEditable())
+ {
+ editor->SetReadOnly(ETrue);
+ editor->SetAknEditorFlags( CEikEdwin::EDisplayOnly | editor->AknEdwinFlags() );
+ }
+
+ // Determine the maximum size of the text.
+
+ // First get the maximum extent that may have been set by resource
+ TInt maxLen = editor->MaxLength();
+
+ // Get maximum length from the iText
+ TInt desMaxLen = iText.MaxLength();
+
+ // Use the minimum value of the two
+ if ( maxLen == 0 ) // Not set in resource
+ {
+ editor->SetMaxLength( desMaxLen );
+ }
+ else
+ {
+ editor->SetMaxLength( Min( maxLen, desMaxLen ) );
+ }
+
+ // Note that this will set the text to be the length in the passed descriptor, despite the maxlength
+ // set above; subsequent editing will ensure that the editor can only decrease in size.
+ editor->SetTextL( &iText );
+
+ iExtension = CAknTextSettingPageExtension::NewL(this);
+
+ editor->AddEdwinObserverL( iExtension );
+ // Initialize the validity and CBAs
+ CheckAndSetDataValidity();
+ UpdateCbaL();
+
+ // Construct an appropriate control context for the contained editor areas.
+ // Context produced is owned by CAknSettingPage.
+ SetEditedItemFrameIID( KAknsIIDQsnFrInput, KAknsIIDQsnFrInputCenter );
+ TextControl()->ScrollBarFrame()->VerticalScrollBar()->SetMopParent(this);
+ }
+
+/**
+ * Acts upon changes in the hosted control's state.
+ *
+ * @param aControl The control changing its state (not used)
+ * @param aEventType The type of control event
+ */
+EXPORT_C void CAknTextSettingPage::HandleControlEventL(CCoeControl* /*aControl*/,
+ MCoeControlObserver::TCoeEvent aEventType)
+ {
+ // This event is used as it is called at least every time an edit is made to
+ // the edwin.
+ if ( aEventType == EEventStateChanged )
+ {
+ if ( iUpdateMode == EUpdateWhenChanged)
+ UpdateSettingL();
+
+ // This updates the CBA depending on text length
+ CheckAndSetDataValidity();
+ UpdateCbaL();
+ }
+ }
+
+/**
+ *
+ * This routine is called before the editor when the editor is first displayed. This routine
+ * puts in altered softkey bindings if there is zero-length text.
+ *
+ */
+EXPORT_C void CAknTextSettingPage::DynamicInitL()
+ {
+ UpdateCbaL();
+ }
+/**
+ *
+ * This routine is called when the a change is detected in the editor.
+ * The text is copied out to the referenced descriptor using a utility routine.
+ *
+ */
+EXPORT_C void CAknTextSettingPage::UpdateSettingL()
+ {
+ UpdateTextL();
+
+ if( iSettingPageObserver )
+ iSettingPageObserver->HandleSettingPageEventL(this, MAknSettingPageObserver::EEventSettingChanged);
+ }
+/**
+ * Soak up function to do the safe copying of the editor to the referenced value
+ *
+ */
+EXPORT_C void CAknTextSettingPage::UpdateTextL()
+ {
+ CEikEdwin* edwin = TextControl();
+ edwin->CheckValidityOfChars(0, edwin->TextLength());
+
+ HBufC* heapText = edwin->GetTextInHBufL();
+ // GetTextInHBufL returns a null pointer if the text length is zero!
+ if ( heapText )
+ {
+ iText.Copy(heapText->Left( iText.MaxLength() ) );
+ delete heapText;
+ }
+ else
+ {
+ iText.SetLength( 0 );
+ }
+ }
+/**
+ *
+ * The value is copied out and the call back called if there is an observer
+ *
+ */
+EXPORT_C void CAknTextSettingPage::AcceptSettingL()
+ {
+ UpdateTextL();
+ }
+
+/**
+ *
+ * If the setting page is cancelled, this is called to restore the backed up copy of the
+ * input text
+ *
+ */
+EXPORT_C void CAknTextSettingPage::RestoreOriginalSettingL()
+ {
+ iText.Copy( *iBackupText );
+ }
+
+void CAknTextSettingPage::ProcessPopupStateChangesL()
+ {
+ UpdateCbaL();
+ }
+EXPORT_C void CAknTextSettingPage::UpdateCbaL()
+ {
+ if ( IsStopActiveSchudlerCalled() )
+ {
+ CAknSettingPage::UpdateCbaL();
+ return;
+ }
+
+ // Modify the CBA labels if the text goes to zero length or becomes non-zero
+ TInt cbaId = 0;
+ if ( !DataValidity() || !IsEditable() )
+ {
+ cbaId = InvalidDataCbaResourceId();
+ }
+ else
+ {
+ cbaId = DefaultCbaResourceId();
+ }
+ if( (iExtension->PreviousCba() != cbaId) && ( !iExtension->PopupState() ) )
+ {
+ Cba()->SetCommandSetL( cbaId );
+ Cba()->DrawDeferred();
+ iExtension->SetPreviousCba( cbaId );
+ }
+ }
+
+EXPORT_C void CAknTextSettingPage::SizeChanged()
+ {
+ StandardSettingPageLayout(); // Must be part of any re-implementation
+
+ TAknLayoutRect layoutRect;
+
+ layoutRect.LayoutRect(
+ SettingItemContentRect( ETrue ),
+ AknLayoutScalable_Avkon::setting_text_pane_copy1( 0 ) );
+ TRect parentRect( layoutRect.Rect() );
+
+ layoutRect.LayoutRect(
+ parentRect,
+ AknLayoutScalable_Avkon::input_focus_pane_cp1_copy1() );
+ TRect edwinFrameRect( layoutRect.Rect() );
+
+ layoutRect.LayoutRect(
+ parentRect,
+ AknLayoutScalable_Avkon::indicator_popup_pane_cp5() );
+ TRect indicatorRect( layoutRect.Rect() );
+
+ iEdwinLayoutRect.LayoutRect(
+ parentRect,
+ AknLayoutScalable_Avkon::list_set_text_pane_copy1( 0 ) );
+ TRect edwinRect( iEdwinLayoutRect.Rect() );
+
+ TAknLayoutScalableParameterLimits textLimits(
+ AknLayoutScalable_Avkon::set_text_pane_t1_copy1_ParamLimits() );
+
+ TAknTextComponentLayout layout;
+ RArray<TAknTextComponentLayout> array;
+
+ for ( TInt i = textLimits.FirstRow(); i <= textLimits.LastRow(); ++i )
+ {
+ array.Append(
+ AknLayoutScalable_Avkon::set_text_pane_t1_copy1( 0, 0, i ) );
+ }
+
+ AknLayoutUtils::LayoutEdwin( TextControl(),
+ edwinRect,
+ layout.Multiline( array ),
+ EAknsCIQsnTextColorsCG26 );
+
+ array.Close();
+
+ layoutRect.LayoutRect(
+ edwinFrameRect,
+ AknLayoutScalable_Avkon::set_opt_bg_pane_g1_copy1() );
+ SetEditedItemFrameRects( edwinFrameRect, layoutRect.Rect() );
+
+ SetEditorIndicatorRect( indicatorRect );
+
+ if ( !TextControl()->ScrollBarFrame() )
+ {
+ TRAP_IGNORE(
+ {
+ TextControl()->CreateScrollBarFrameL();
+ TextControl()->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff,CEikScrollBarFrame::EOn );
+ });
+ }
+
+ if ( TextControl()->ScrollBarFrame() )
+ {
+ layoutRect.LayoutRect(
+ Rect(),
+ TAknWindowComponentLayout::Compose(
+ AknLayoutScalable_Avkon::settings_container_pane( 0 ),
+ AknLayoutScalable_Avkon::listscroll_set_pane_copy1( 0 ) ) );
+
+ AknLayoutUtils::LayoutVerticalScrollBar(
+ TextControl()->ScrollBarFrame(),
+ layoutRect.Rect(),
+ AknLayoutScalable_Avkon::scroll_pane_cp121_copy1( 0 ) );
+ }
+ }
+
+/**
+* Validity is alway ETrue unless the flag asking for some non-whitespace data is set.
+* If set, and if there is an edwin, then check to see that there is a valid character
+* somewhere in the text
+*/
+EXPORT_C void CAknTextSettingPage::CheckAndSetDataValidity()
+ {
+ TBool validity(ETrue);
+
+ if ( ! (iTextSettingPageFlags & EZeroLengthAllowed ) )
+ {
+ CEikEdwin* edwin = TextControl();
+ if ( edwin )
+ {
+ // Use access to Text() to get at text without allocating anything
+ TPtrC text = edwin->Text()->Read(0);
+
+ // we shold not have only spaces in the text
+ validity &= AknTextUtils::IsEmptyText( text );
+
+ _LIT( KEnterSymbol, "\x21b2\x2029" );
+ if ( text.Compare( KEnterSymbol ) == 0 )
+ {
+ validity = EFalse;
+ }
+
+ // check that enter char does not come here
+ TInt flags = edwin->UserFlags();
+ TInt flags2 = edwin->AknEdwinFlags();
+
+
+ // check that all chars are valid
+ for(TInt n=0;validity && n<text.Length();n++)
+ {
+ TChar ch = text[n];
+ //validity &= ch.IsAlpha();
+ }
+ }
+ else
+ {
+ validity = EFalse;
+ }
+ }
+ SetDataValidity( validity );
+ }
+
+/**
+ * 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 CAknTextSettingPage::WriteInternalStateL(RWriteStream& /*aWriteStream*/) const
+ {}
+#else
+EXPORT_C void CAknTextSettingPage::WriteInternalStateL(RWriteStream& aWriteStream) const
+ {
+ CAknSettingPage::WriteInternalStateL(aWriteStream);
+ }
+#endif
+
+EXPORT_C void CAknTextSettingPage::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+ {
+ CAknEdwinSettingPage::HandlePointerEventL(aPointerEvent);
+ }
+
+EXPORT_C void* CAknTextSettingPage::ExtensionInterface( TUid /*aInterface*/ )
+ {
+ return NULL;
+ }
+
+
+/**
+*
+* This routes the keys to the editor.
+* However, if the menu is showing, then events have to be forwarded manually to it.
+*
+*/
+EXPORT_C TKeyResponse CAknTextSettingPage::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType)
+ {
+ if( IsStopActiveSchudlerCalled() )
+ {
+ return EKeyWasConsumed;
+ }
+ if ( aType == EEventKey )
+ {
+ if( aKeyEvent.iCode == EKeyEnter )
+ {
+ CEikEdwin* ed = STATIC_CAST( CEikEdwin*, EditorControl());
+ return ed->OfferKeyEventL(aKeyEvent, aType);
+ }
+ }
+ return CAknSettingPage::OfferKeyEventL(aKeyEvent, aType);
+ }
+
+/**
+* Framework method to determine if it OK to exit the setting page.
+* Derived classes may check for valid data before allowing the dismissal of the
+* setting page.
+*/
+EXPORT_C TBool CAknTextSettingPage::OkToExitL(TBool aAccept)
+ {
+ // FEP may reject input causing editing be cancelled
+ // user in between keypress and editing cancellation may press Ok
+
+ // here we will force fep either to commit or to cancel by changing focus
+ CEikEdwin* ed = STATIC_CAST( CEikEdwin*, EditorControl());
+ TInt cursorPos = ed->CursorPos();
+
+ CCoeEnv *coeEnv = CCoeEnv::Static();
+ CCoeFep* fep = coeEnv->Fep();
+ if(fep)
+ fep->HandleChangeInFocus(); // will also commit changes in fep
+
+ ed->SetFocus(ETrue); // return focus and selection
+ ed->ClearSelectionL();
+ ed->SetCursorPosL(cursorPos, EFalse);
+
+ if(aAccept)
+ return(DataValidity());
+ else
+ return ETrue;
+ }
+
+/**
+ * Reserved method derived from CCoeControl
+ */
+EXPORT_C void CAknTextSettingPage::Reserved_2()
+ {
+ }
+
+/**
+* Setting Page reserved methods
+*/
+EXPORT_C void CAknTextSettingPage::CAknSettingPage_Reserved_1()
+ {
+ }
+EXPORT_C void CAknTextSettingPage::CAknSettingPage_Reserved_2()
+ {
+ }
+
+/**
+* CAknEdwinSettingPage reserved methods
+*/
+EXPORT_C void CAknTextSettingPage::CAknEdwinSettingPage_Reserved_1()
+ {
+ }
+
+/////////////////////////////////////////////////////////////////////////
+//
+// Integer Edwin
+//
+/////////////////////////////////////////////////////////////////////////
+
+/**
+ *
+ * Constructor from setting page resource id + referenced text + flags
+ *
+ */
+EXPORT_C CAknIntegerSettingPage::CAknIntegerSettingPage( TInt aResourceId, TInt& aValue, TInt aFlags ):
+ CAknEdwinSettingPage(aResourceId),iValue(aValue), iIntegerSettingPageFlags( aFlags )
+ {
+ AKNTASHOOK_ADD( this, "CAknIntegerSettingPage" );
+ }
+
+EXPORT_C CAknIntegerSettingPage::CAknIntegerSettingPage(
+ const TDesC* aSettingText,
+ TInt aSettingNumber,
+ TInt aControlType,
+ TInt aEditorResourceId,
+ TInt aSettingPageResourceId,
+ TInt& aValue,
+ TInt aIntegerSettingPageFlags)
+ : CAknEdwinSettingPage(
+ aSettingText,
+ aSettingNumber,
+ aControlType,
+ aEditorResourceId,
+ aSettingPageResourceId ),
+ iValue( aValue ), iIntegerSettingPageFlags( aIntegerSettingPageFlags )
+ {
+ AKNTASHOOK_ADD( this, "CAknIntegerSettingPage" );
+ }
+
+
+
+/**
+ *
+ * The 2nd stage construction. Stored internal resource is used to perform the
+ * construction.
+ *
+ */
+EXPORT_C void CAknIntegerSettingPage::ConstructL()
+ {
+ BaseConstructL();
+ iBackupValue = iValue;
+
+ CEikEdwin* editor = TextControl();
+
+ // Editor Flags are over-ridden
+ editor->RemoveFlagFromUserFlags( CEikEdwin::ENoAutoSelection );
+
+ if ( iIntegerSettingPageFlags & ENoInitialSelection )
+ {
+ editor->AddFlagToUserFlags( CEikEdwin::ENoAutoSelection );
+ editor->AddFlagToUserFlags( CEikEdwin::EJustAutoCurEnd );
+ }
+ if ( iIntegerSettingPageFlags & EPutCursorAtBeginning )
+ {
+ editor->RemoveFlagFromUserFlags( CEikEdwin::EJustAutoCurEnd );
+ }
+
+ IntegerEditorControl()->SetValueL( iValue );
+
+ if(!IsEditable())
+ IntegerEditorControl()->SetReadOnly(ETrue);
+
+ CheckAndSetDataValidity();
+ UpdateCbaL();
+
+ // Construct an appropriate control context for the contained editor areas.
+ // Context produced is owned by CAknSettingPage.
+ SetEditedItemFrameIID( KAknsIIDQsnFrInput, KAknsIIDQsnFrInputCenter );
+ }
+
+/**
+ * Acts upon changes in the hosted control's state.
+ *
+ * @param aControl The control changing its state (not used)
+ * @param aEventType The type of control event
+ */
+EXPORT_C void CAknIntegerSettingPage::HandleControlEventL(CCoeControl* /*aControl*/,
+ MCoeControlObserver::TCoeEvent aEventType)
+ {
+ // This event is used as it is called at least every time an edit is made to
+ // the edwin.
+ if ( aEventType == EEventStateChanged )
+ {
+ if ( iUpdateMode == EUpdateWhenChanged)
+ UpdateSettingL();
+
+ // This updates the CBA depending on text length
+ CheckAndSetDataValidity();
+ UpdateCbaL();
+ }
+ }
+
+/**
+ *
+ * This routine is called before the editor when the editor is first displayed. This routine
+ * puts in altered softkey bindings if there is zero-length text.
+ *
+ */
+EXPORT_C void CAknIntegerSettingPage::DynamicInitL()
+ {
+ UpdateCbaL();
+ }
+/**
+ *
+ * This routine may be called when the a change is detected in the editor.
+ * The text is copied out to the referenced descriptor using a utility routine.
+ *
+ */
+EXPORT_C void CAknIntegerSettingPage::UpdateSettingL()
+ {
+// Status currently thrown away to prevent warning
+ IntegerEditorControl()->GetTextAsInteger( iValue );
+
+ if( iSettingPageObserver )
+ iSettingPageObserver->HandleSettingPageEventL(this, MAknSettingPageObserver::EEventSettingChanged);
+
+ }
+
+
+
+/**
+ *
+ * If the setting page is cancelled, this is called to restore the backed up copy of the
+ * input text
+ *
+ */
+EXPORT_C void CAknIntegerSettingPage::RestoreOriginalSettingL()
+ {
+ iValue = iBackupValue;
+ }
+
+/**
+ *
+ * Type-specific access to the text editor control
+ *
+ */
+EXPORT_C CAknIntegerEdwin* CAknIntegerSettingPage::IntegerEditorControl()
+ {
+ return STATIC_CAST( CAknIntegerEdwin*, EditorControl());
+ }
+
+EXPORT_C void CAknIntegerSettingPage::UpdateCbaL()
+ {
+ CAknSettingPage::UpdateCbaL();
+
+ }
+
+EXPORT_C void CAknIntegerSettingPage::SizeChanged()
+ {
+ StandardSettingPageLayout(); // Must be part of any re-implementation
+
+ TRect rect( SettingItemContentRect( EFalse ) );
+
+ iEdwinLayoutRect.LayoutRect(
+ rect,
+ AknLayoutScalable_Avkon::setting_code_pane_copy1() );
+ TRect edwinRect( iEdwinLayoutRect.Rect() );
+
+ TAknLayoutRect layoutRect;
+ layoutRect.LayoutRect(
+ edwinRect,
+ AknLayoutScalable_Avkon::input_focus_pane_cp2_copy1() );
+ TRect edwinFrameRect( layoutRect.Rect() );
+
+ layoutRect.LayoutRect(
+ edwinRect,
+ AknLayoutScalable_Avkon::indicator_popup_pane_cp6() );
+ TRect indicatorRect( layoutRect.Rect() );
+
+ AknLayoutUtils::LayoutEdwin(
+ IntegerEditorControl(),
+ edwinRect,
+ AknLayoutScalable_Avkon::setting_code_pane_t1_copy1().LayoutLine(),
+ EAknsCIQsnTextColorsCG26,
+ 0,
+ ETrue );
+
+ layoutRect.LayoutRect( edwinFrameRect,
+ AknLayoutScalable_Avkon::set_opt_bg_pane_g1() );
+ SetEditedItemFrameRects( edwinFrameRect, layoutRect.Rect() );
+
+ SetEditorIndicatorRect( indicatorRect );
+ }
+
+
+EXPORT_C void CAknIntegerSettingPage::CheckAndSetDataValidity()
+ {
+ TInt anInt;
+ CAknIntegerEdwin::TValidationStatus intStatus = IntegerEditorControl()->GetTextAsInteger( anInt );
+ SetDataValidity( intStatus == CAknIntegerEdwin::EValueValid );
+
+ // Check other flags if not valid
+ if ( !DataValidity() )
+ {
+ if ( iIntegerSettingPageFlags & EEmptyValueAllowed )
+ SetDataValidity( (intStatus == CAknIntegerEdwin::EEmpty) );
+ }
+ // check next flag if data still not valid
+ if ( !DataValidity() )
+ {
+ if ( iIntegerSettingPageFlags & EInvalidValueAllowed )
+ SetDataValidity ( ETrue );
+ }
+
+ }
+
+/**
+ * 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 CAknIntegerSettingPage::WriteInternalStateL(RWriteStream& /*aWriteStream*/) const
+ {}
+#else
+EXPORT_C void CAknIntegerSettingPage::WriteInternalStateL(RWriteStream& aWriteStream) const
+ {
+ CAknSettingPage::WriteInternalStateL(aWriteStream);
+ }
+#endif
+
+EXPORT_C void CAknIntegerSettingPage::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+ {
+ CAknEdwinSettingPage::HandlePointerEventL(aPointerEvent);
+ }
+
+EXPORT_C void* CAknIntegerSettingPage::ExtensionInterface( TUid /*aInterface*/ )
+ {
+ return NULL;
+ }
+
+/**
+ * Reserved method derived from CCoeControl
+ */
+EXPORT_C void CAknIntegerSettingPage::Reserved_2()
+ {
+ }
+
+/**
+* Setting Page reserved methods
+*/
+EXPORT_C void CAknIntegerSettingPage::CAknSettingPage_Reserved_1()
+ {
+ }
+EXPORT_C void CAknIntegerSettingPage::CAknSettingPage_Reserved_2()
+ {
+ }
+/**
+* CAknEdwinSettingPage reserved methods
+*/
+EXPORT_C void CAknIntegerSettingPage::CAknEdwinSettingPage_Reserved_1()
+ {
+ }
+
+// End of File