emailuis/emailui/src/ncssubjectfield.cpp
branchRCL_3
changeset 80 726fba06891a
parent 73 c8382f7b54ef
--- a/emailuis/emailui/src/ncssubjectfield.cpp	Wed Sep 15 11:52:37 2010 +0300
+++ b/emailuis/emailui/src/ncssubjectfield.cpp	Wed Oct 13 14:11:15 2010 +0300
@@ -21,7 +21,6 @@
 #include <AknIconUtils.h>
 #include <avkon.hrh>
 #include <eiklabel.h>
-#include <aknbutton.h>
 #include <eikimage.h>
 #include <eikenv.h>
 #include <AknsDrawUtils.h>
@@ -82,37 +81,13 @@
     // Create label
 	HBufC* aTextBuf = StringLoader::LoadLC( aLabelTextId );
     TPtrC captionText = aTextBuf ? aTextBuf->Des() : TPtrC();
+    iLabel = new ( ELeave ) CNcsLabel( *this, NULL );
+    iLabel->SetTextL( captionText );
 
-    if( AknLayoutUtils::PenEnabled() )
-        {
-        // Create a frameless button that has no observer
-        // This is done like this to make Subject: field appear similar as
-        // other header fields (To:, Cc:), although it doesn't have other
-        // button-like features
-        TRect buttRect( 10, 10, 70, 100 );
-        iButton = CAknButton::NewL( NULL, NULL, NULL, NULL, 
-                                    captionText, TPtrC(), 
-                                    KAknButtonTextLeft | KAknButtonNoFrame ,
-                                    0 );
-        iButton->SetTextColorIds( 
-                KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG63 );
-        iButton->SetContainerWindowL( *iParentControl );
-        iButton->SetRect( buttRect );
-        iButton->EnableFeedback( EFalse );
-        iButton->MakeVisible( ETrue );
-        iButton->ActivateL();
-        }
-    else
-        {
-        iLabel = new ( ELeave ) CNcsLabel( *this, NULL );
-        iLabel->SetTextL( captionText );
-    
-        // S60 Skin support
-        iLabel->SetBrushStyle(CWindowGc::ENullBrush);
-        }
-    
-    iTextEditor = new ( ELeave ) CNcsEditor( 
-            iSizeObserver, ETrue, ENcsEditorSubject, captionText );
+    // S60 Skin support
+	iLabel->SetBrushStyle(CWindowGc::ENullBrush);
+
+    iTextEditor = new ( ELeave ) CNcsEditor( iSizeObserver, ETrue, ENcsEditorSubject, captionText );
     CleanupStack::PopAndDestroy( aTextBuf );
     }
 
@@ -125,41 +100,37 @@
     FUNC_LOG;
     delete iTextEditor;
     delete iLabel;
-    delete iButton;
+    // Platform layout change
+    /*if ( iFont )
+        {
+        ControlEnv()->ScreenDevice()->ReleaseFont( iFont );
+        iFont = NULL;
+        }*/
     }
 
 // -----------------------------------------------------------------------------
 // CNcsSubjectField::SetContainerWindowL() const
 // -----------------------------------------------------------------------------
 //
-void CNcsSubjectField::SetContainerWindowL( const CCoeControl& aContainer )
+void CNcsSubjectField::SetContainerWindowL(const CCoeControl& aContainer)
 	{
     FUNC_LOG;
-	CCoeControl::SetContainerWindowL( aContainer );
+	CCoeControl::SetContainerWindowL(aContainer);
 
 	// Create the component array
     InitComponentArrayL();
 	CCoeControlArray& controls = Components();
-	controls.SetControlsOwnedExternally( ETrue );
-	if ( iButton )
-	    {
-        controls.AppendLC( iButton );
-        CleanupStack::Pop( iButton );
-	    }
-	else
-	    {
-        controls.AppendLC( iLabel );
-        CleanupStack::Pop( iLabel );
-	    }
-	controls.AppendLC( iTextEditor );
-    CleanupStack::Pop( iTextEditor );
+	controls.SetControlsOwnedExternally(ETrue);
+	controls.AppendLC(iLabel);
+	CleanupStack::Pop(iLabel);
+	controls.AppendLC(iTextEditor);
+    CleanupStack::Pop(iTextEditor);
 
     // Setup text editor
     iTextEditor->ConstructL( &aContainer, KMaxAddressFieldLines, 0 );
 	iTextEditor->SetBorder( TGulBorder::ENone );
     iTextEditor->SetAknEditorInputMode( EAknEditorTextInputMode );
-	iTextEditor->CreateScrollBarFrameL()->SetScrollBarVisibilityL( 
-	        CEikScrollBarFrame::EOff, CEikScrollBarFrame::EOff );
+	iTextEditor->CreateScrollBarFrameL()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EOff );
     iTextEditor->SetEdwinSizeObserver( this );
     iTextEditor->SetupEditorL();
     // Setup label
@@ -186,7 +157,7 @@
 TInt CNcsSubjectField::GetMinLabelLength() const
 	{
     FUNC_LOG;
-    return iLabel ? iLabel->Font()->TextWidthInPixels( *iLabel->Text() ) : 0;
+    return iLabel->Font()->TextWidthInPixels( *iLabel->Text() );
 	}
 
 // -----------------------------------------------------------------------------
@@ -199,49 +170,35 @@
     FUNC_LOG;
 	
     const TRect rect( Rect() );
-    if ( iButton )
-        {
-        NcsUtility::LayoutCaptionButton( iButton, rect );
-        }
-    else
-        {
-        NcsUtility::LayoutCaptionLabel( iLabel, rect );
-        }
-
-    NcsUtility::LayoutDetailEdwinTouch( 
-            iTextEditor, rect, iEditorLineCount, EFalse );  
+    NcsUtility::LayoutCaptionLabel( iLabel, rect );
+    NcsUtility::LayoutDetailEdwinTouch( iTextEditor, rect, iEditorLineCount, EFalse );  
     
-    if ( iTextEditor->ScrollBarFrame() )
+    if (iTextEditor->ScrollBarFrame())
         {
         TRect rc = iTextEditor->Rect();
-        if ( AknLayoutUtils::LayoutMirrored() )
+        if (AknLayoutUtils::LayoutMirrored())
             {
-            rc.iTl.iX += iTextEditor->ScrollBarFrame()->ScrollBarBreadth( 
-                    CEikScrollBar::EVertical );
+            rc.iTl.iX += iTextEditor->ScrollBarFrame()->ScrollBarBreadth(CEikScrollBar::EVertical);
             }
         else
             {
-            rc.iBr.iX -= iTextEditor->ScrollBarFrame()->ScrollBarBreadth( 
-                    CEikScrollBar::EVertical );
+            rc.iBr.iX -= iTextEditor->ScrollBarFrame()->ScrollBarBreadth(CEikScrollBar::EVertical);
             }
-        iTextEditor->SetRect( rc );
+        iTextEditor->SetRect(rc);
         }
 
     // Setup text alignment according the mirrored/normal layout.
-    if ( iLabel )
+    if ( AknLayoutUtils::LayoutMirrored() )
         {
-        if ( AknLayoutUtils::LayoutMirrored() )
-            {
-            iLabel->SetAlignment( EHLeftVCenter );
-            iLabel->SetLabelAlignment( ELayoutAlignLeft );
-            }
-        else
-            {
-            iLabel->SetAlignment( EHRightVCenter );
-            iLabel->SetLabelAlignment( ELayoutAlignRight );
-            }
+        iLabel->SetAlignment( EHLeftVCenter );
+        iLabel->SetLabelAlignment( ELayoutAlignLeft );
         }
-
+    else
+        {
+        iLabel->SetAlignment( EHRightVCenter );
+        iLabel->SetLabelAlignment( ELayoutAlignRight );
+        }
+    
     // this needs to be bidi as in mirrored layout 
     // writing language left to right can be set 
     iTextEditor->SetAlignment( EAknEditorAlignBidi );
@@ -253,12 +210,13 @@
 
 // -----------------------------------------------------------------------------
 // CNcsSubjectField::PositionChanged()
+// set size
 // -----------------------------------------------------------------------------
 //
 void CNcsSubjectField::PositionChanged()
     {
     FUNC_LOG;
-    // empty
+    //SizeChanged();
     }
 
 // -----------------------------------------------------------------------------
@@ -266,8 +224,7 @@
 // Handles key events
 // -----------------------------------------------------------------------------
 //
-TKeyResponse CNcsSubjectField::OfferKeyEventL( 
-        const TKeyEvent& aKeyEvent, TEventCode aType )
+TKeyResponse CNcsSubjectField::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
     {
     FUNC_LOG;
 	TKeyResponse ret( EKeyWasNotConsumed );
@@ -283,8 +240,8 @@
 //
 void CNcsSubjectField::HandlePointerEventL( const TPointerEvent& aPointerEvent )
     {
-    FUNC_LOG;
-    CCoeControl::HandlePointerEventL( aPointerEvent );
+	FUNC_LOG;
+    iTextEditor->HandlePointerEventL( aPointerEvent );
     }
 
 // -----------------------------------------------------------------------------
@@ -292,26 +249,51 @@
 // -----------------------------------------------------------------------------
 //
 void CNcsSubjectField::FocusChanged( TDrawNow aDrawNow )
-    {
+	{
     FUNC_LOG;
-    if ( IsFocused() )
-        {
-        iTextEditor->SetFocus( ETrue, aDrawNow );
-        if ( iParentControl )
-            {
-            TRAP_IGNORE( iParentControl->SetMskL() );
-            }
-        }
-    else
-        {
-        iTextEditor->SetFocus( EFalse, aDrawNow );
-        }
+	if ( IsFocused() )
+		{
+		iTextEditor->SetFocus( ETrue );
+		//TRAP_IGNORE( iTextEditor->SetCursorPosL( iTextEditor->TextLength(), EFalse ) ); 
 
-    if ( aDrawNow )
-        {
-        DrawNow();
-        }
-    }
+		// 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
+		{
+		iTextEditor->SetFocus( EFalse );
+		}
+
+	if ( aDrawNow )
+		{
+		DrawNow();
+		}
+	}
 
 // -----------------------------------------------------------------------------
 // CNcsSubjectField::MinimumHeight()
@@ -321,6 +303,20 @@
 TInt CNcsSubjectField::MinimumHeight()
     {
     FUNC_LOG;
+    // Platform layout changes
+    /*
+    TNcsMeasures m = NcsUtility::Measures();
+	TInt height = m.iAifHeight - m.iAifEditorHeight + iEditorMinimumHeight + m.iSubjectExtraHeightBottom;
+	TInt height2 = m.iAifHeight + m.iSubjectExtraHeightBottom;
+	// if followup icon and priority icon are both visible increase the subject field height
+	if ( iFollowUp && iPriority != EMsgPriorityNormal )
+	    {
+	    height2 += KIconHeightFollowUp;
+	    }
+    return Max( height, height2 );
+    */
+    //return NcsUtility::MinimumHeaderSize( Rect(), iEditorLineCount ).iHeight;
+    // Platform layout changes
     return 0;
     }
 
@@ -344,12 +340,11 @@
         RMemReadStream inputStream( aSubject.Ptr(), aSubject.Size() );
 	    CleanupClosePushL( inputStream );
 
-	  	iTextEditor->RichText()->ImportTextL( 
-	  	        0, inputStream, CPlainText::EOrganiseByParagraph );
+	  	iTextEditor->RichText()->ImportTextL( 0, inputStream, CPlainText::EOrganiseByParagraph );
 
 		// Activating the field will set the control to the end of the text
 	    iTextEditor->ActivateL();
-	    iTextEditor->SetCursorPosL( 0, EFalse );
+	    iTextEditor->SetCursorPosL(0,EFalse);
 
 	    CleanupStack::PopAndDestroy( &inputStream );
     	}
@@ -363,10 +358,41 @@
 	TEdwinSizeEvent /*aEventType*/, TSize aDesirableEdwinSize )
     {
     FUNC_LOG;
+    //  Platform layout chage
+    /*
     TInt ret( EFalse );
     TInt htLine = iTextEditor->GetLineHeightL();
     TInt numLinesDesired = aDesirableEdwinSize.iHeight / htLine;
+
+    if ( numLinesDesired < KMaxAddressFieldLines &&
+         iEditorMinimumHeight != aDesirableEdwinSize.iHeight )
+        {
+        iEditorMinimumHeight = aDesirableEdwinSize.iHeight;
+        iTextEditor->CreateScrollBarFrameL()->SetScjrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EOff );
+        if ( iSizeObserver )
+            {
+            ret = iSizeObserver->UpdateFieldSizeL();
+            }
+        }
+    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();
+            }
+        }
+    */
+
+    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();
@@ -451,6 +477,7 @@
 	return KNullDesC;
 	}
 
+// Platform layout change
 // ---------------------------------------------------------------------------
 // CNcsSubjectField::LayoutLineCount
 // ---------------------------------------------------------------------------
@@ -467,17 +494,23 @@
 void CNcsSubjectField::Reposition(TPoint& aPt, TInt /*aWidth*/)
 	{
     FUNC_LOG;
+    /*
+	const TSize size( aWidth, MinimumHeight() );
+    SetExtent( aPt, size );
+    aPt.iY += size.iHeight;
+    */
     SetPosition( aPt );
+    // Platform layout changes
 	}
 
 // -----------------------------------------------------------------------------
 // CNcsSubjectField::GetLineRectL
 // -----------------------------------------------------------------------------
-void CNcsSubjectField::GetLineRect( TRect& aLineRect ) const
-    {
+void CNcsSubjectField::GetLineRectL( TRect& aLineRect ) const
+	{
     FUNC_LOG;
-    return iTextEditor->GetLineRect( aLineRect );
-    }
+    return iTextEditor->GetLineRectL( aLineRect );
+	}
 
 // -----------------------------------------------------------------------------
 // CNcsSubjectField::SetMaxLabelLength
@@ -504,19 +537,23 @@
 void CNcsSubjectField::UpdateColors()
     {
 	FUNC_LOG;
+    // Platform layout change
+    TRgb textColor = KRgbBlack;
+    if ( AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), textColor,
+        KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ) != KErrNone )
+        {
+        textColor = KRgbBlack;
+        }
+    TRAP_IGNORE( iLabel->OverrideColorL( EColorLabelText, textColor ) );
+    // Platform layout change
 
-	if ( iLabel )
-	    {
-        TRgb textColor = KRgbBlack;
-        if ( AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), textColor,
-            KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ) != KErrNone )
-            {
-            textColor = KRgbBlack;
-            }
-        TRAP_IGNORE( iLabel->OverrideColorL( EColorLabelText, textColor ) );
-        }
+    CFreestyleEmailUiAppUi* appUi =
+        static_cast<CFreestyleEmailUiAppUi*>( ControlEnv()->AppUi() );
+    iBorderColor = appUi->LayoutHandler()->ComposerFieldBorderColor();
+    iBgColor = appUi->LayoutHandler()->ComposerFieldBackgroundColor();
     }
 
+// Platform layout changes
 // ---------------------------------------------------------------------------
 // CNcsSubjectField::UpdateFontSize()
 // ---------------------------------------------------------------------------
@@ -524,18 +561,20 @@
 void CNcsSubjectField::UpdateFontSize()
 	{
     FUNC_LOG;
-    CCoeControl* control = 
-            iButton ? ( CCoeControl* )iButton : ( CCoeControl* )iLabel;
-    iFont = NcsUtility::GetLayoutFont( 
-            control->Rect(), NcsUtility::ENcsHeaderCaptionFont );
-    if( control == iButton )
+    /*if ( iFont )
         {
-        iButton->SetTextFont( iFont );
+        ControlEnv()->ScreenDevice()->ReleaseFont( iFont );
+        iFont = NULL;
         }
-    else
-        {
-        iLabel->SetFont( iFont );
-        }
+
+	TNcsMeasures m = NcsUtility::Measures();
+	if ( !iFont )
+	    {
+	    TRAP_IGNORE( iFont = NcsUtility::GetNearestFontL(EAknLogicalFontPrimarySmallFont,
+	    m.iLabelFontHeightPx) );
+	    }*/
+	iFont = NcsUtility::GetLayoutFont( iLabel->Rect(), NcsUtility::ENcsHeaderCaptionFont );
+	iLabel->SetFont( iFont );
 	iTextEditor->UpdateFontSize();
 	UpdateColors();
 	}
@@ -553,24 +592,18 @@
         {
         UpdateFontSize();
         UpdateColors();
-        iTextEditor->HandleResourceChange( aType );
+        // Platform layout changes
+        iTextEditor->HandleResourceChange( aType ) ;//CreateScrollBarFrameL()->DrawScrollBarsNow();
+        // Platform layout changes
         }
     }
 
-// ---------------------------------------------------------------------------
-// CNcsSubjectField::EnableKineticScrollingL()
-// ---------------------------------------------------------------------------
-//
-void CNcsSubjectField::EnableKineticScrollingL( CAknPhysics*  aPhysics )
+void CNcsSubjectField::EnableKineticScrollingL(CAknPhysics*  aPhysics)
     {
-    iTextEditor->EnableKineticScrollingL( aPhysics );
+    iTextEditor->EnableKineticScrollingL(aPhysics);
     iTextEditor->TextLayout()->RestrictScrollToTopsOfLines( ETrue );
     }
 
-// ---------------------------------------------------------------------------
-// CNcsSubjectField::SetPhysicsEmulationOngoing()
-// ---------------------------------------------------------------------------
-//
 void CNcsSubjectField::SetPhysicsEmulationOngoing( TBool aPhysOngoing )
     {
     iTextEditor->SetPhysicsEmulationOngoing( aPhysOngoing );