--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/emailui/src/ncsaddressinputfield.cpp Wed Sep 01 12:28:57 2010 +0100
@@ -0,0 +1,899 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: compose view container
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "emailtrace.h"
+#include <AknIconUtils.h>
+#include <avkon.hrh>
+#include <aknlists.h>
+#include <aknPopup.h>
+#include <aknbutton.h>
+#include <StringLoader.h>
+#include <eiklabel.h>
+#include <eikimage.h>
+#include <eikenv.h>
+#include <AknsDrawUtils.h>
+#include <sysutil.h>
+#include <AknUtils.h>
+#include <FreestyleEmailUi.rsg>
+#include <aknphysics.h>
+#include <centralrepository.h>
+
+#include "FreestyleEmailUiAppui.h"
+#include "FreestyleEmailUiLayoutData.h"
+#include "FreestyleEmailUiLayoutHandler.h"
+#include "ncsaddressinputfield.h"
+#include "ncsconstants.h"
+#include "ncsaifeditor.h"
+#include "ncsfieldsizeobserver.h"
+#include "ncsutility.h"
+#include "ncsheadercontainer.h"
+#include "txtrich.h"
+#include "freestyleemailcenrepkeys.h"
+
+// ---------------------------------------------------------------------------
+// constructor
+// ---------------------------------------------------------------------------
+//
+CNcsAddressInputField::CNcsAddressInputField(
+ TNcsInputFieldType aFieldType,
+ MNcsFieldSizeObserver* aSizeObserver,
+ MNcsAddressPopupList* aAddressPopupList,
+ CNcsHeaderContainer* aParentControl ):
+ MNcsControl( aSizeObserver ),
+ iParentControl( aParentControl ),
+ iAddressPopupList( aAddressPopupList ),
+ iFieldType( aFieldType )
+ {
+ FUNC_LOG;
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CNcsAddressInputField* CNcsAddressInputField::NewL(
+ TInt aLabelTextId,
+ TNcsInputFieldType aFieldType,
+ MNcsFieldSizeObserver* aSizeObserver,
+ MNcsAddressPopupList* aAddressPopupList,
+ CNcsHeaderContainer* aParentControl )
+ {
+ FUNC_LOG;
+ CNcsAddressInputField* self = new ( ELeave ) CNcsAddressInputField(
+ aFieldType, aSizeObserver, aAddressPopupList, aParentControl );
+ CleanupStack::PushL( self );
+ self->ConstructL( aLabelTextId );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::ConstructL( TInt aLabelTextId )
+ {
+ FUNC_LOG;
+ // Create label
+ //Load the label string
+ HBufC* aTextBuf = StringLoader::LoadLC( aLabelTextId );
+
+ TPtrC captionText = aTextBuf ? aTextBuf->Des() : TPtrC();
+ CreateControlsL( captionText );
+
+ iTextEditor = new ( ELeave ) CNcsAifEditor( iSizeObserver,
+ captionText );
+ // iTextEditor is not completely constructed until in SetContainerWindowL()
+
+ iTextEditor->SetPopupList(iAddressPopupList);
+
+ CleanupStack::PopAndDestroy( aTextBuf );
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CNcsAddressInputField::~CNcsAddressInputField()
+ {
+ FUNC_LOG;
+ delete iTextEditor;
+ delete iButton;
+ delete iLabel;
+// <cmail> Platform layout change
+ /*if ( iFont )
+ {
+ ControlEnv()->ScreenDevice()->ReleaseFont( iFont );
+ iFont = NULL;
+ }</cmail>*/
+ }
+
+//<cmail>
+// -----------------------------------------------------------------------------
+// CNcsHeaderContainer::CreateControlsL()
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::CreateControlsL( const TDesC& aControlText )
+ {
+ FUNC_LOG;
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ //Create button
+ TRect buttRect( 10, 10, 70, 100 );
+ iButton = CAknButton::NewL( NULL, NULL, NULL, NULL, aControlText, TPtrC(), KAknButtonTextLeft, 0 );
+ iButton->SetTextColorIds( KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG63 );
+ iButton->SetContainerWindowL( *iParentControl );
+ iButton->SetObserver( this );
+ iButton->SetRect( buttRect );
+ iButton->MakeVisible( ETrue );
+ iButton->ActivateL();
+ }
+ else
+ {
+ //Create label
+ iLabel = new ( ELeave ) CNcsLabel( *this, NULL );
+ iLabel->SetTextL( aControlText );
+ iLabel->SetBrushStyle(CWindowGc::ENullBrush);
+ }
+ }
+//</cmail>
+
+// ---------------------------------------------------------------------------
+// SetContainerWindow
+// Don't construct the window dependent elements until the window
+// container is set
+// ---------------------------------------------------------------------------
+//
+void CNcsAddressInputField::SetContainerWindowL( const CCoeControl& aContainer )
+ {
+ FUNC_LOG;
+ CCoeControl::SetContainerWindowL(aContainer);
+
+ InitComponentArrayL();
+ // Check if we need to construct the components
+ if (Components().Count() == 2) return;
+
+ // Load the controls into the compoent array
+ CCoeControlArray& controls = Components();
+ controls.SetControlsOwnedExternally(ETrue);
+ //<cmail>
+ if( iButton )
+ {
+ controls.AppendLC( iButton );
+ CleanupStack::Pop( iButton );
+ }
+ else
+ {
+ controls.AppendLC( iLabel );
+ CleanupStack::Pop( iLabel );
+ }
+ //</cmail>
+ controls.AppendLC(iTextEditor);
+ CleanupStack::Pop(iTextEditor);
+
+// <cmail>
+
+ // Setup the text editor
+ iTextEditor->ConstructL( &aContainer, KMaxAddressFieldLines, 0 );
+// </cmail>
+
+ iTextEditor->SetBorder( TGulBorder::ENone );
+ iTextEditor->SetAknEditorInputMode( EAknEditorTextInputMode );
+ iTextEditor->SetAknEditorFlags( EAknEditorFlagNoT9 | EAknEditorFlagUseSCTNumericCharmap );
+
+ CRepository* repository = NULL;
+ TRAPD( err, repository = CRepository::NewL( KFreestyleEmailCenRep ) );
+ if ( !err )
+ {
+ TInt value( 0 );
+ err = repository->Get( KEmailFeatureSplitScreen, value );
+ if( !err && value )
+ {
+ iTextEditor->SetAknEditorFlags( iTextEditor->AknEditorFlags() | EAknEditorFlagEnablePartialScreen );
+ }
+ }
+ delete repository;
+ repository = NULL;
+
+ iTextEditor->SetAknEditorCurrentCase( EAknEditorLowerCase );
+ iTextEditor->CreateScrollBarFrameL()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EOff );
+ iTextEditor->SetEdwinSizeObserver( this );
+ iTextEditor->SetupEditorL();
+
+ // Setup the label
+ UpdateFontSize();
+
+ // Setup text alignment according the mirrored/normal layout.
+ if ( AknLayoutUtils::LayoutMirrored() )
+ {
+ if( iLabel )
+ iLabel->SetAlignment( EHRightVCenter );
+ }
+ else
+ {
+ if( iLabel )
+ iLabel->SetAlignment( EHLeftVCenter );
+ }
+
+ // this needs to be bidi as in mirrored layout
+ // writing language left to right can be set
+ iTextEditor->SetAlignment( EAknEditorAlignBidi );
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::Draw() const
+// Draws the display
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::Draw( const TRect& /*aRect*/ ) const
+ {
+ FUNC_LOG;
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::GetMinLabelLength()
+// -----------------------------------------------------------------------------
+//
+TInt CNcsAddressInputField::GetMinLabelLength() const
+ {
+ FUNC_LOG;
+ return iLabel ? iLabel->Font()->TextWidthInPixels( *iLabel->Text() ) : 0;
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::SizeChanged()
+// set size
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::SizeChanged()
+ {
+ FUNC_LOG;
+
+ TRect rect = Rect();
+
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ LayoutTouch();
+ }
+ else
+ {
+ LayoutNonTouch();
+ }
+
+ // This needs to be bidi as in mirrored layout
+ // writing language left to right can be set.
+ // Need to set here as layout sets it also to left or right.
+ iTextEditor->SetAlignment( EAknEditorAlignBidi );
+
+ UpdateFontSize();
+
+ if (iTextEditor->ScrollBarFrame())
+ {
+ TRect rc = iTextEditor->Rect();
+ if (AknLayoutUtils::LayoutMirrored())
+ {
+ rc.iTl.iX += iTextEditor->ScrollBarFrame()->ScrollBarBreadth(CEikScrollBar::EVertical);
+ }
+ else
+ {
+ rc.iBr.iX -= iTextEditor->ScrollBarFrame()->ScrollBarBreadth(CEikScrollBar::EVertical);
+ }
+ iTextEditor->SetRect(rc);
+ }
+
+ PositionChanged();
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsHeaderContainer::PositionChanged()
+// set size
+// -----------------------------------------------------------------------------
+void CNcsAddressInputField::PositionChanged()
+ {
+ FUNC_LOG;
+
+ // keep the button in view as long as possible
+ if( iButton && iParentControl->IsVisible() )
+ {
+ const TRect rect( Rect() );
+ const TRect buttonRect( iButton->Rect() );
+
+ TInt newButtonPos( iOriginalButtonPos.iY - iOriginalFieldPos.iY );
+
+ if( rect.iTl.iY < 0 && newButtonPos + buttonRect.Height() < rect.iBr.iY )
+ {
+ iButton->SetPosition( TPoint(iOriginalButtonPos.iX, newButtonPos) );
+ }
+ else
+ {
+ iButton->SetPosition( TPoint(iOriginalButtonPos.iX, newButtonPos + rect.iTl.iY) );
+ }
+ }
+ }
+
+//<cmail>
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::LayoutNonTouch()
+//
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::LayoutNonTouch()
+ {
+ const TRect rect( Rect() );
+ NcsUtility::LayoutCaptionLabel( iLabel, rect );
+ NcsUtility::LayoutDetailEdwin( iTextEditor, rect, iEditorLineCount, EFalse );
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::LayoutTouch()
+//
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::LayoutTouch()
+ {
+ const TRect rect( Rect() );
+ NcsUtility::LayoutCaptionButton( iButton, rect );
+ NcsUtility::LayoutDetailEdwinTouch( iTextEditor, rect, iEditorLineCount, EFalse );
+
+ // save the original field positions so that we can the button in view
+ iOriginalFieldPos = rect.iTl;
+ iOriginalButtonPos = iButton->Position();
+
+ iTextEditor->UpdateCustomDrawer();
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::HandlePointerEventL()
+// Handles pointer events
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::HandlePointerEventL( const TPointerEvent& aPointerEvent )
+ {
+ FUNC_LOG;
+ iTextEditor->HandlePointerEventL(aPointerEvent);
+ if( iButton )
+ {
+ iButton->HandlePointerEventL( aPointerEvent );
+ }
+ iTextEditor->HandleTextChangedL();
+
+ switch( aPointerEvent.iType )
+ {
+ case TPointerEvent::EButton1Down:
+ {
+ // Save start position so that it can be used in
+ // drag/scrolling calculations
+ iStartPosition = aPointerEvent.iPosition;
+ iIsDraggingStarted = EFalse;
+ break;
+ }
+
+ case TPointerEvent::EDrag:
+ {
+ if ( !iIsDraggingStarted && iPhysics )
+ {
+ TInt drag( iStartPosition.iY - aPointerEvent.iPosition.iY );
+ if ( Abs( drag ) > iPhysics->DragThreshold() )
+ {
+ iIsDraggingStarted = ETrue;
+ }
+ }
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::HandleControlEventL()
+//
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType )
+ {
+ if( aEventType == EEventStateChanged )
+ {
+ if( aControl == iButton && !iIsDraggingStarted )
+ {
+ iParentControl->OpenPhonebookL();
+ }
+ }
+ }
+//</cmail>
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::OfferKeyEventL()
+// Handles key events
+// -----------------------------------------------------------------------------
+//
+TKeyResponse
+CNcsAddressInputField::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ FUNC_LOG;
+ TKeyResponse ret( EKeyWasNotConsumed );
+
+ if( aKeyEvent.iCode == EKeyOK )
+ {
+ iTextEditor->SetCursorPosL( iTextEditor->TextLength(), EFalse );
+ iTextEditor->UpdateAddressListAllL();
+ }
+ else
+ {
+ ret = iTextEditor->OfferKeyEventL( aKeyEvent, aType );
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::FocusChanged()
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::FocusChanged( TDrawNow aDrawNow )
+ {
+ FUNC_LOG;
+ if ( IsFocused() )
+ {
+ iTextEditor->SetFocus( ETrue, aDrawNow );
+ //TRAP_IGNORE( iTextEditor->SetCursorPosL( iTextEditor->TextLength(), EFalse ) );
+
+ // make sure that control is visible on screen
+ if ( Rect().iTl.iY < 0 )
+ {
+ TPoint pt = TPoint( 0, 0 );
+ Reposition( pt,Rect().Width() );
+ iSizeObserver->UpdateFieldPosition( this );
+ }
+ else
+ {
+ TPoint pos = PositionRelativeToScreen();
+ pos.iY += Size().iHeight;
+ CWsScreenDevice* screenDev = ControlEnv()->ScreenDevice();
+ TPixelsAndRotation pix;
+ screenDev->GetDefaultScreenSizeAndRotation( pix );
+ const TInt h = pix.iPixelSize.iHeight;
+ if ( pos.iY >= h - h / 3 )
+ {
+ TPoint pt = TPoint( 0, h / 3 );
+ Reposition( pt,Rect().Width() );
+ iSizeObserver->UpdateFieldPosition( this );
+ }
+ }
+
+ if ( iParentControl )
+ {
+ TRAP_IGNORE( iParentControl->SetMskL() );
+ }
+ }
+ else
+ {
+ if ( iTextEditor->SelectionLength()== 0 )
+ {
+ TRAP_IGNORE( iTextEditor->HandleTextChangedL() );
+ }
+
+ iTextEditor->SetFocus( EFalse );
+ TRAP_IGNORE( iAddressPopupList->ClosePopupContactListL() );
+ }
+
+ if ( aDrawNow )
+ {
+ DrawNow();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::MinimumHeight()
+// -----------------------------------------------------------------------------
+//
+TInt CNcsAddressInputField::MinimumHeight() const
+ {
+ FUNC_LOG;
+ // <cmail> Platform layout changes
+ /*TNcsMeasures m = NcsUtility::Measures();
+ TInt height = m.iAifHeight - m.iAifEditorHeight + iEditorMinimumHeight;
+ TInt height2 = m.iAifHeight;
+ return Max( height, height2 );
+ */
+
+ //return NcsUtility::MinimumHeaderSize( Rect(), iEditorLineCount ).iHeight;
+ // </cmail> Platform layout changes
+ return 0;
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::HandleEdwinSizeEventL()
+// -----------------------------------------------------------------------------
+//
+TBool CNcsAddressInputField::HandleEdwinSizeEventL(
+ CEikEdwin* /*aEdwin*/,
+ TEdwinSizeEvent /*aEventType*/,
+ TSize aDesirableEdwinSize )
+ {
+ FUNC_LOG;
+// <cmail> Platform layout change
+ /*TInt ret( EFalse );
+ TInt htLine = iTextEditor->GetLineHeightL();
+ TInt numLinesDesired = aDesirableEdwinSize.iHeight / htLine;
+
+ if( numLinesDesired < KMaxAddressFieldLines &&
+ iEditorMinimumHeight != aDesirableEdwinSize.iHeight )
+ {
+ iEditorMinimumHeight = aDesirableEdwinSize.iHeight;
+
+ if( iSizeObserver )
+ ret = iSizeObserver->UpdateFieldSizeL();
+ iTextEditor->CreateScrollBarFrameL()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EOff );
+
+ }
+ else if (iEditorMinimumHeight != htLine * KMaxAddressFieldLines)
+ {
+ //We may still need to resize the controll.
+ iEditorMinimumHeight = htLine * KMaxAddressFieldLines;
+ iTextEditor->CreateScrollBarFrameL()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EOn );
+ if (iSizeObserver)
+ ret = iSizeObserver->UpdateFieldSizeL();
+ }
+ return ret;*/
+
+ TInt ret( EFalse );
+ TInt htLine = iTextEditor->GetLineHeightL();
+ TInt numLinesDesired = aDesirableEdwinSize.iHeight / htLine;
+ // commented because of EGWG-83ECSR, no negative feedback after removing
+ //CEikScrollBarFrame& scrollBarFrame( *iTextEditor->CreateScrollBarFrameL() );
+ iEditorLineCount = numLinesDesired;
+ //scrollBarFrame.SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EOff );
+ if ( iSizeObserver )
+ {
+ ret = iSizeObserver->UpdateFieldSizeL();
+ }
+ return ret;
+// </cmail>
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::AddAddressL()
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::AddAddressL( const CNcsEmailAddressObject& aAddress )
+ {
+ FUNC_LOG;
+ iTextEditor->AddAddressL( aAddress );
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::AddAddressL()
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::AddAddressL( const TDesC& aEmail )
+ {
+ FUNC_LOG;
+ iTextEditor->AddAddressL( KNullDesC(), aEmail );
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::SelectAllTextL()
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::SelectAllTextL()
+ {
+ FUNC_LOG;
+ iTextEditor->SelectAllL();
+ }
+
+// <cmail> Platform layout changes
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::Reposition()
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::Reposition( TPoint& aPt, TInt /*aWidth*/ )
+ {
+ FUNC_LOG;
+ /*
+ TSize sz( aWidth, MinimumHeight() );
+ if ( Rect() != TRect( aPt, sz ) )
+ {
+ SetExtent( aPt, sz);
+ }
+ aPt.iY += Size().iHeight;
+ */
+ SetPosition( aPt );
+ // </cmail> Platform layout changes
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::GetLabelText()
+// -----------------------------------------------------------------------------
+//
+const TDesC& CNcsAddressInputField::GetLabelText() const
+ {
+ FUNC_LOG;
+ return iLabel ? *iLabel->Text() : KEmptyReturnValue();
+ }
+
+// <cmail> Platform layout change
+// ---------------------------------------------------------------------------
+// CNcsAddressInputField::LayoutLineCount
+// ---------------------------------------------------------------------------
+//
+TInt CNcsAddressInputField::LayoutLineCount() const
+ {
+ FUNC_LOG;
+ if( iLabel && !AknLayoutUtils::PenEnabled() )
+ {
+ return ( IsVisible() ? Max( 1, iEditorLineCount ) : 0 ) + iLabel->LayoutLineCount();
+ }
+ else
+ {
+ return ( IsVisible() ? Max( 1, iEditorLineCount ) : 0 );
+ }
+ }
+// </cmail> Platform layout change
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::LineCount()
+// -----------------------------------------------------------------------------
+//
+TInt CNcsAddressInputField::LineCount() const
+ {
+ FUNC_LOG;
+ return iTextEditor->LineCount();
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::ScrollableLines()
+// -----------------------------------------------------------------------------
+//
+TInt CNcsAddressInputField::ScrollableLines() const
+ {
+ FUNC_LOG;
+ return iTextEditor->ScrollableLines();
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::GetNumChars()
+// -----------------------------------------------------------------------------
+//
+TInt CNcsAddressInputField::GetNumChars() const
+ {
+ FUNC_LOG;
+ return iTextEditor->GetNumChars();
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::CursorLineNumber()
+// -----------------------------------------------------------------------------
+//
+TInt CNcsAddressInputField::CursorLineNumber() const
+ {
+ FUNC_LOG;
+ return iTextEditor->CursorLineNumber();
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::CursorPosition()
+// -----------------------------------------------------------------------------
+//
+TInt CNcsAddressInputField::CursorPosition() const
+ {
+ FUNC_LOG;
+ TInt pos = iTextEditor->CursorPosition();
+ //Add the delta between the top of the edit control
+ //and the top of the parent control
+ pos += iTextEditor->Rect().iTl.iY - Rect().iTl.iY ;
+ return pos;
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::Editor()
+// -----------------------------------------------------------------------------
+//
+CNcsEditor* CNcsAddressInputField::Editor() const
+ {
+ FUNC_LOG;
+ return iTextEditor;
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::IsEmpty()
+// -----------------------------------------------------------------------------
+//
+TBool CNcsAddressInputField::IsEmpty() const
+ {
+ FUNC_LOG;
+ return iTextEditor->TextLength() == 0;
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::GetLookupTextLC()
+// -----------------------------------------------------------------------------
+//
+HBufC* CNcsAddressInputField::GetLookupTextLC() const
+ {
+ FUNC_LOG;
+ return iTextEditor->GetLookupTextLC();
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::GetAddressesL()
+// -----------------------------------------------------------------------------
+//
+const RPointerArray<CNcsEmailAddressObject>&
+CNcsAddressInputField::GetAddressesL( TBool aParseNow )
+ {
+ if ( aParseNow )
+ {
+ iTextEditor->CheckAddressWhenFocusLostL();
+ }
+ return iTextEditor->GetAddressesL();
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::EmailAddressObjectBySelection()
+// -----------------------------------------------------------------------------
+//
+const CNcsEmailAddressObject* CNcsAddressInputField::EmailAddressObjectBySelection() const
+ {
+ FUNC_LOG;
+ return iTextEditor->EmailAddressObjectBySelection();
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::TextEditor()
+// -----------------------------------------------------------------------------
+//
+CEikEdwin* CNcsAddressInputField::TextEditor() const
+ {
+ FUNC_LOG;
+ return iTextEditor;
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::GetLineRectL()
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::GetLineRectL( TRect& aLineRect ) const
+ {
+ FUNC_LOG;
+ return iTextEditor->GetLineRectL( aLineRect );
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::SetMaxLabelLength()
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::SetMaxLabelLength( TInt aMaxLength )
+ {
+ FUNC_LOG;
+ iMaximumLabelLength = aMaxLength;
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::SetTextColorL()
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::SetTextColorL( TLogicalRgb aColor )
+ {
+ FUNC_LOG;
+ iTextEditor->SetTextColorL( aColor );
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::SetAddressesL()
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::SetAddressesL( const RPointerArray<CNcsEmailAddressObject>& aAddresses )
+ {
+ FUNC_LOG;
+ iTextEditor->SetAddressesL( aAddresses );
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::AppendAddressesL()
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::AppendAddressesL( const RPointerArray<CNcsEmailAddressObject>& aAddresses )
+ {
+ FUNC_LOG;
+ iTextEditor->AppendAddressesL( aAddresses );
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::UpdateFontSize()
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::UpdateFontSize()
+ {
+ FUNC_LOG;
+ // <cmail> Platform layout change
+ /*if ( iFont )
+ {
+ ControlEnv()->ScreenDevice()->ReleaseFont( iFont );
+ iFont = NULL;
+ }
+
+ TNcsMeasures m = NcsUtility::Measures();
+ if ( !iFont )
+ {
+ TRAP_IGNORE( iFont = NcsUtility::GetNearestFontL(EAknLogicalFontPrimarySmallFont, m.iLabelFontHeightPx) );
+ }*/
+ CCoeControl* control = iButton ? ( CCoeControl* )iButton : ( CCoeControl* )iLabel;
+ iFont = NcsUtility::GetLayoutFont( control->Rect(), NcsUtility::ENcsHeaderCaptionFont );
+ if( control == iButton )
+ {
+ iButton->SetTextFont( iFont );
+ }
+ else
+ {
+ iLabel->SetFont( iFont );
+ }
+ iTextEditor->UpdateFontSize();
+ // </cmail> Platform layout change
+ }
+
+// -----------------------------------------------------------------------------
+// CNcsAddressInputField::HandleResourceChange()
+// -----------------------------------------------------------------------------
+//
+void CNcsAddressInputField::HandleResourceChange( TInt aType )
+ {
+ FUNC_LOG;
+ CCoeControl::HandleResourceChange( aType );
+ if ( aType == KAknsMessageSkinChange ||
+ aType == KEikMessageColorSchemeChange )
+ {
+ UpdateFontSize();
+ // <cmail> Platform layout change
+ iTextEditor->HandleResourceChange( aType ); // CreateScrollBarFrameL()->DrawScrollBarsNow();
+ // </cmail> Platform layout change
+ }
+ }
+
+void CNcsAddressInputField::FixSemicolonAtTheEndL()
+ {
+ FUNC_LOG;
+
+ if ( 0 != iTextEditor->TextLength() &&
+ !iTextEditor->HasSemicolonAtTheEndL() )
+ {
+ CRichText* rt = iTextEditor->RichText();
+ if ( rt )
+ {
+ rt->InsertL( rt->DocumentLength(), _L(";") );
+ iTextEditor->SetCursorPosL( rt->DocumentLength(), EFalse );
+ iTextEditor->CheckAddressWhenFocusLostL();
+ }
+ }
+ }
+
+void CNcsAddressInputField::EnableKineticScrollingL( CAknPhysics* aPhysics )
+ {
+ iPhysics = aPhysics;
+ iTextEditor->EnableKineticScrollingL( aPhysics );
+ iTextEditor->TextLayout()->RestrictScrollToTopsOfLines( ETrue );
+ }
+
+void CNcsAddressInputField::SetPhysicsEmulationOngoing( TBool aPhysOngoing )
+ {
+ iTextEditor->SetPhysicsEmulationOngoing( aPhysOngoing );
+ iButton->EnableFeedback( !aPhysOngoing );
+ }