wvuing/wvuiave/AppSrc/CCALayoutInfo.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuiave/AppSrc/CCALayoutInfo.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,1044 @@
+/*
+* Copyright (c) 2006 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:  Layout and render info for Chat Listbox's item drawer and view
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include	"CCALayoutInfo.h"
+#include    "LayoutDebugPrint.h"
+
+#include	<AknUtils.h>
+#include	<AppLayout.cdl.h> //cdl
+#include	<F32FILE.H>
+#include    <AknLayoutScalable_Apps.cdl.h>
+
+// CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CCALayoutInfo::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CCALayoutInfo* CCALayoutInfo::NewL( TChatListBoxLayout::TLayout aLayoutID )
+    {
+    CCALayoutInfo* self = new ( ELeave ) CCALayoutInfo( aLayoutID );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CCALayoutInfo::~CCALayoutInfo
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CCALayoutInfo::~CCALayoutInfo()
+    {
+    if ( iReadingPane )
+        {
+        iReadingPane->Reset();
+        delete iReadingPane;
+        }
+
+    if ( iWrittingPane )
+        {
+        iWrittingPane->Reset();
+        delete iWrittingPane;
+        }
+
+    if ( iReadingField )
+        {
+        iReadingField->Reset();
+        delete iReadingField;
+        }
+
+    if ( iReadingPaneTextsLine1 )
+        {
+        iReadingPaneTextsLine1->Reset();
+        delete iReadingPaneTextsLine1;
+        }
+
+    if ( iIMTextElements )
+        {
+        iIMTextElements->Reset();
+        delete iIMTextElements;
+        }
+
+    if ( iWrittingPaneTextsLine )
+        {
+        iWrittingPaneTextsLine->Reset();
+        delete iWrittingPaneTextsLine;
+        }
+
+    if ( iIMWritingFieldLine1 )
+        {
+        iIMWritingFieldLine1->Reset();
+        delete iIMWritingFieldLine1;
+        }
+
+    if ( iIMWritingFieldLine3 )
+        {
+        iIMWritingFieldLine3->Reset();
+        delete iIMWritingFieldLine3;
+        }
+
+    if ( iIMNaviPaneTextsLine1 )
+        {
+        iIMNaviPaneTextsLine1->Reset();
+        delete iIMNaviPaneTextsLine1;
+        }
+
+    if ( iIMNaviPaneTextsLine2 )
+        {
+        iIMNaviPaneTextsLine2->Reset();
+        delete iIMNaviPaneTextsLine2;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCALayoutInfo::CCALayoutInfo
+// C++ constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CCALayoutInfo::CCALayoutInfo( TChatListBoxLayout::TLayout aLayoutID ) :
+        iLayoutID( aLayoutID )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CCALayoutInfo::ConstructL
+// Second phase constructor
+// -----------------------------------------------------------------------------
+//
+void CCALayoutInfo::ConstructL()
+    {
+    SetupMainPaneRect();
+    FillLayoutL();
+    LogLayoutL();
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::LayoutID
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CCALayoutInfo::LayoutID()
+    {
+    return iLayoutID;
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::Mirrored
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CCALayoutInfo::Mirrored()
+    {
+    return iMirrored;
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::LayoutChangedL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::LayoutChangedL( TInt /*aType = 0*/ )
+    {
+    LAYOUT_DP_TXT( "CCALayoutInfo::LayoutChangedL" );
+
+    FillLayoutL();
+
+    TAknLayoutRect myLayoutRect;
+
+    TAknLayoutRect myLine;
+
+    iMirrored = AknLayoutUtils::LayoutMirrored();
+
+    //update MainPaneRect
+    SetupMainPaneRect();
+
+    TAknWindowLineLayout readingPane = im_reading_pane( iLayoutID );
+
+    myLayoutRect.LayoutRect( iMainPaneRect, readingPane );
+
+    //line height
+    TAknWindowLineLayout lineLayout = im_reading_field( 0 );
+
+    myLine.LayoutRect( myLayoutRect.Rect(), lineLayout );
+
+    iLineHeight = myLine.Rect().Height();
+
+    LAYOUT_DP( D_LAYOUT_LIT( "CCALayoutInfo::LayoutChangedL iLineHeight:%d" )
+               , iLineHeight );
+
+    //Max Lines
+
+    iMaxLines = myLayoutRect.Rect().Height() / iLineHeight;
+
+    LAYOUT_DP( D_LAYOUT_LIT( "CCALayoutInfo::LayoutChangedL iMaxLines:%d" )
+               , iMaxLines );
+
+    // NickFont
+
+    TAknTextLineLayout myMessageHeaderLayout =
+        IM_reading_pane_texts_Line_1( 1 );
+    iNickFont = AknLayoutUtils::FontFromId( myMessageHeaderLayout.FontId() );
+
+    // MaxLineWidth
+
+    TAknLayoutText myTextLayout;
+    TAknLayoutText myTextLayout2;
+
+    myTextLayout.LayoutText( myLine.Rect(), myMessageHeaderLayout );
+
+    iMaxLineWidth = myTextLayout.TextRect().Width();
+
+    LAYOUT_DP( D_LAYOUT_LIT( "CCALayoutInfo::LayoutChangedL iMaxLineWidth:%d" )
+               , iMaxLineWidth );
+
+    // IconSkip
+    myMessageHeaderLayout = IM_reading_pane_texts_Line_1( 2 );
+
+    myTextLayout2.LayoutText( myLine.Rect(), myMessageHeaderLayout );
+
+    if ( iMirrored )
+        {
+        iIconSkip = myTextLayout.TextRect().iBr.iX
+                    - myTextLayout2.TextRect().iBr.iX;
+        }
+    else
+        {
+        iIconSkip = myTextLayout2.TextRect().iTl.iX
+                    - myTextLayout.TextRect().iTl.iX;
+        }
+
+    LAYOUT_DP( D_LAYOUT_LIT( "CCALayoutInfo::LayoutChangedL iIconSkip:%d" )
+               , iIconSkip );
+
+    // MsgFont
+
+    TAknTextLineLayout myMessageLayout = IM_reading_pane_texts_Line_2();
+    iMsgFont = AknLayoutUtils::FontFromId( myMessageLayout.FontId() );
+
+    //Indent
+    //normal message text with indent
+    myTextLayout.LayoutText( myLine.Rect(), myMessageLayout );
+
+    //header with full width
+    myMessageHeaderLayout = IM_reading_pane_texts_Line_1( 1 );
+    myTextLayout2.LayoutText( myLine.Rect(), myMessageHeaderLayout );
+
+    if ( iMirrored )
+        {
+        iIndent = myTextLayout2.TextRect().iBr.iX
+                  - myTextLayout.TextRect().iBr.iX;
+        }
+    else
+        {
+        iIndent = myTextLayout.TextRect().iTl.iX
+                  - myTextLayout2.TextRect().iTl.iX;
+        }
+    LAYOUT_DP( D_LAYOUT_LIT( "CCALayoutInfo::LayoutChangedL iIndent:%d" )
+               , iIndent );
+
+    // MaxNickWidth
+
+    myMessageHeaderLayout = IM_reading_pane_texts_Line_1( 0 );
+
+    myTextLayout.LayoutText( myLine.Rect(), myMessageHeaderLayout );
+
+    iMaxNickWidth = myTextLayout.TextRect().Width() + iIndent;
+    // - myTextLayout2.TextRect().iTl.iX;
+
+    LAYOUT_DP( D_LAYOUT_LIT( "CCALayoutInfo::LayoutChangedL iMaxNickWidth:%d" )
+               , iMaxNickWidth );
+
+    LAYOUT_DP_TXT( "CCALayoutInfo::LayoutChangedL over" );
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::NickFont
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+const CFont* CCALayoutInfo::NickFont()
+    {
+    return iNickFont;
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::MessageFont
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+const CFont* CCALayoutInfo::MessageFont()
+    {
+    return iMsgFont;
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::LineHeight
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CCALayoutInfo::LineHeight()
+    {
+    return iLineHeight;
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::MaxLineWidth
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CCALayoutInfo::MaxLineWidth()
+    {
+    return iMaxLineWidth;
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::MaxNickWidth
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CCALayoutInfo::MaxNickWidth()
+    {
+    return iMaxNickWidth;
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::MaxLines
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CCALayoutInfo::MaxLines()
+    {
+    return iMaxLines;
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::MainPaneRect
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TRect CCALayoutInfo::MainPaneRect()
+    {
+    return TRect( iMainPaneRect );
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::SetLayoutID
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::SetLayoutID( TChatListBoxLayout::TLayout aLayout )
+    {
+    iLayoutID = aLayout;
+    TRAPD( err, LayoutChangedL() );
+    if ( err != KErrNone )
+        {
+        CActiveScheduler::Current()->Error( err );
+        }
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::Indent
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CCALayoutInfo::Indent()
+    {
+    return iIndent;
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::ScreenRect
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TRect CCALayoutInfo::ScreenRect()
+    {
+    return iScreenRect;
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::SetEditorVisibility
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::SetEditorVisibility( TBool aVisible )
+    {
+    iEditorVisibility = aVisible;
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::EditorVisibility
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CCALayoutInfo::EditorVisibility()
+    {
+    return iEditorVisibility;
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::SetupMainPaneRect
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::SetupMainPaneRect()
+    {
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane,
+                                       iMainPaneRect );
+    _LIT( KMain, "MainPane" );
+
+    iMainPaneRect.Move( -iMainPaneRect.iTl.iX, -iMainPaneRect.iTl.iY );
+
+    DPRect( KMain, iMainPaneRect );
+
+    TRect myControlPane;
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EControlPane,
+                                       myControlPane );
+    _LIT( KControlPane, "ControlPane" );
+    DPRect( KControlPane, myControlPane );
+    //this is screen relative lets move back to origin.
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::im_reading_pane
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TAknWindowLineLayout CCALayoutInfo::im_reading_pane( TInt aIndex_H )
+    {
+    return ( *iReadingPane )[ aIndex_H ];
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::im_reading_field
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TAknWindowLineLayout CCALayoutInfo::im_reading_field( TInt aIndex_t )
+    {
+    return ( *iReadingField )[ aIndex_t ];
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::IM_text_elements
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TAknWindowLineLayout CCALayoutInfo::IM_text_elements( TInt aLineIndex )
+    {
+    return ( *iIMTextElements )[ aLineIndex ];
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::IM_reading_pane_texts_Line_1
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TAknTextLineLayout CCALayoutInfo::IM_reading_pane_texts_Line_1( TInt aCommon1 )
+    {
+    return ( *iReadingPaneTextsLine1 )[ aCommon1 ];
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::IM_reading_pane_texts_Line_2
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TAknTextLineLayout CCALayoutInfo::IM_reading_pane_texts_Line_2()
+    {
+    return iReadingPaneTextsLine2;
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::IM_text_elements_Line_1
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TAknWindowLineLayout CCALayoutInfo::IM_text_elements_Line_1()
+    {
+    return AppLayout::IM_text_elements_Line_1();
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::IM_text_elements_Line_2
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TAknWindowLineLayout CCALayoutInfo::IM_text_elements_Line_2()
+    {
+    return AppLayout::IM_text_elements_Line_2();
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::IM_reading_field_highlight_graphics_Line_1
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TAknWindowLineLayout CCALayoutInfo::IM_reading_field_highlight_graphics_Line_1(
+    const TRect& aParentRect )
+    {
+    return AppLayout::IM_reading_field_highlight_graphics_Line_1( aParentRect );
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::IM_reading_field_highlight_graphics_Line_2
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TAknWindowLineLayout CCALayoutInfo::IM_reading_field_highlight_graphics_Line_2(
+    const TRect& aParentRect )
+    {
+    return AppLayout::IM_reading_field_highlight_graphics_Line_2( aParentRect );
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::im_writing_pane
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TAknWindowLineLayout CCALayoutInfo::im_writing_pane( TInt aCommon1 )
+    {
+    return ( *iWrittingPane )[ aCommon1 ];
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::IM_writing_field_elements_Line_1
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TAknWindowLineLayout CCALayoutInfo::IM_writing_field_elements_Line_1(
+    TInt aIndex_H )
+    {
+    return ( *iIMWritingFieldLine1 )[ aIndex_H ];
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::IM_writing_field_elements_Line_2
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TAknWindowLineLayout CCALayoutInfo::IM_writing_field_elements_Line_2()
+    {
+    return iIMWritingFieldLine2;
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::IM_writing_field_elements_Line_3
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TAknWindowLineLayout CCALayoutInfo::IM_writing_field_elements_Line_3(
+    TInt aIndex_H )
+    {
+    return ( *iIMWritingFieldLine3 )[ aIndex_H ];
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::Multiline_IM_writing_pane_texts_Line_1
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TAknMultiLineTextLayout CCALayoutInfo::Multiline_IM_writing_pane_texts_Line_1(
+    TInt aNumberOfLinesShown )
+    {
+    return ( *iWrittingPaneTextsLine )[ aNumberOfLinesShown ];
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::IM_navi_pane_texts_Line_1
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TAknTextLineLayout CCALayoutInfo::IM_navi_pane_texts_Line_1(
+    TInt aIndex_C, TInt /*aIndex_W*/ )
+    {
+    return ( *iIMNaviPaneTextsLine1 )[ aIndex_C ];
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::LogLayout
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::LogLayoutL()
+    {
+#ifdef _DEBUG
+
+    _LIT( K1, "im_reading_pane( 0 ) " );
+    DPLayout( K1, AppLayout::im_reading_pane( 0 ) );
+    DPLayout( K1, im_reading_pane( 0 ) );
+    _LIT( K2, "im_reading_pane( 1 ) " );
+    DPLayout( K2, AppLayout::im_reading_pane( 1 ) );
+    DPLayout( K2, im_reading_pane( 1 ) );
+    _LIT( K3, "im_reading_pane( 2 ) " );
+    DPLayout( K3, AppLayout::im_reading_pane( 2 ) );
+    DPLayout( K3, im_reading_pane( 2 ) );
+
+    _LIT( KWP1, "im_writing_pane( 0 )" );
+    DPLayout( KWP1, AppLayout::im_writing_pane( 0 ) );
+    DPLayout( KWP1, im_writing_pane( 0 ) );
+    _LIT( KWP2, "im_writing_pane( 1 )" );
+    DPLayout( KWP2, AppLayout::im_writing_pane( 1 ) );
+    DPLayout( KWP2, im_writing_pane( 1 ) );
+
+    _LIT( K4, "im_reading_field( 0 ) " );
+    DPLayout( K4, AppLayout::im_reading_field( 0 ) );
+    DPLayout( K4, im_reading_field( 0 ) );
+    _LIT( K5, "im_reading_field( 1 ) " );
+    DPLayout( K5, AppLayout::im_reading_field( 1 ) );
+    DPLayout( K5, im_reading_field( 1 ) );
+    _LIT( K6, "im_reading_field( 2 ) " );
+    DPLayout( K6, AppLayout::im_reading_field( 2 ) );
+    DPLayout( K6, im_reading_field( 2 ) );
+    _LIT( K7, "im_reading_field( 3 ) " );
+    DPLayout( K7, AppLayout::im_reading_field( 3 ) );
+    DPLayout( K7, im_reading_field( 3 ) );
+    _LIT( K8, "im_reading_field( 4 ) " );
+    DPLayout( K8, AppLayout::im_reading_field( 4 ) );
+    DPLayout( K8, im_reading_field( 4 ) );
+    _LIT( K9, "im_reading_field( 5 ) " );
+    DPLayout( K9, AppLayout::im_reading_field( 5 ) );
+    DPLayout( K9, im_reading_field( 5 ) );
+    _LIT( K10, "im_reading_field( 6 ) " );
+    DPLayout( K10, AppLayout::im_reading_field( 6 ) );
+    DPLayout( K10, im_reading_field( 6 ) );
+
+    TAknLayoutScalableParameterLimits limits(
+        AknLayoutScalable_Apps::list_im_single_pane_ParamLimits() );
+
+    if ( 7 <= limits.LastRow() )
+        {
+        _LIT( K11, "im_reading_field( 7 ) " );
+        DPLayout( K11, AppLayout::im_reading_field( 7 ) );
+        DPLayout( K11, im_reading_field( 7 ) );
+        }
+
+    _LIT( KRPT0, "IM_reading_pane_texts_Line_1( 0 )" );
+    DPLayout( KRPT0, AppLayout::IM_reading_pane_texts_Line_1( 0 ) );
+    DPLayout( KRPT0, IM_reading_pane_texts_Line_1( 0 ) );
+    _LIT( KRPT1, "IM_reading_pane_texts_Line_1( 1 )" );
+    DPLayout( KRPT1, AppLayout::IM_reading_pane_texts_Line_1( 1 ) );
+    DPLayout( KRPT1, IM_reading_pane_texts_Line_1( 1 ) );
+    _LIT( KRPT2, "IM_reading_pane_texts_Line_1( 2 )" );
+    DPLayout( KRPT2, AppLayout::IM_reading_pane_texts_Line_1( 2 ) );
+    DPLayout( KRPT2, IM_reading_pane_texts_Line_1( 2 ) );
+    _LIT( KRPT3, "IM_reading_pane_texts_Line_2()" );
+    DPLayout( KRPT3, AppLayout::IM_reading_pane_texts_Line_2() );
+    DPLayout( KRPT3, IM_reading_pane_texts_Line_2() );
+
+    _LIT( KIMT1, "IM_text_elements( 0 )" );
+    DPLayout( KIMT1, AppLayout::IM_text_elements( 0 ) );
+    DPLayout( KIMT1, IM_text_elements( 0 ) );
+    _LIT( KIMT2, "IM_text_elements( 1 )" );
+    DPLayout( KIMT2, AppLayout::IM_text_elements( 1 ) );
+    DPLayout( KIMT2, IM_text_elements( 1 ) );
+    _LIT( KIMT3, "IM_text_elements( 2 )" );
+    DPLayout( KIMT3, AppLayout::IM_text_elements( 2 ) );
+    DPLayout( KIMT3, IM_text_elements( 2 ) );
+
+    _LIT( KMWPT0, "Multiline_IM_writing_pane_texts_Line_1( 0 )" );
+    DPLayout( KMWPT0, AppLayout::Multiline_IM_writing_pane_texts_Line_1( 0 ) );
+    DPLayout( KMWPT0, Multiline_IM_writing_pane_texts_Line_1( 0 ) );
+
+    _LIT( KMWPT1, "Multiline_IM_writing_pane_texts_Line_1( 1 )" );
+    DPLayout( KMWPT1, AppLayout::Multiline_IM_writing_pane_texts_Line_1( 1 ) );
+    DPLayout( KMWPT1, Multiline_IM_writing_pane_texts_Line_1( 1 ) );
+
+    _LIT( KMWPT2, "Multiline_IM_writing_pane_texts_Line_1( 2 )" );
+    DPLayout( KMWPT2, AppLayout::Multiline_IM_writing_pane_texts_Line_1( 2 ) );
+    DPLayout( KMWPT2, Multiline_IM_writing_pane_texts_Line_1( 2 ) );
+
+    _LIT( KWFL10, "IM_writing_field_elements_Line_1( 0 )" );
+    DPLayout( KWFL10, AppLayout::IM_writing_field_elements_Line_1( 0 ) );
+    DPLayout( KWFL10, IM_writing_field_elements_Line_1( 0 ) );
+
+    _LIT( KWFL11, "IM_writing_field_elements_Line_1( 1 )" );
+    DPLayout( KWFL11, AppLayout::IM_writing_field_elements_Line_1( 1 ) );
+    DPLayout( KWFL11, IM_writing_field_elements_Line_1( 1 ) );
+
+    _LIT( KWFL2, "IM_writing_field_elements_Line_2()" );
+    DPLayout( KWFL2, AppLayout::IM_writing_field_elements_Line_2() );
+    DPLayout( KWFL2, IM_writing_field_elements_Line_2() );
+
+    _LIT( KWFL30, "IM_writing_field_elements_Line_3( 0 )" );
+    DPLayout( KWFL30, AppLayout::IM_writing_field_elements_Line_3( 0 ) );
+    DPLayout( KWFL30, IM_writing_field_elements_Line_3( 0 ) );
+
+    _LIT( KWFL31, "IM_writing_field_elements_Line_3( 1 )" );
+    DPLayout( KWFL31, AppLayout::IM_writing_field_elements_Line_3( 1 ) );
+    DPLayout( KWFL31, IM_writing_field_elements_Line_3( 1 ) );
+
+    HBufC* myStr = HBufC::NewLC( 60 );
+    TPtr myPtr = myStr->Des();
+
+    _LIT( KNPTL, "IM_navi_pane_texts_Line_1( " );
+    _LIT( KNPTL0, "AppLayout::" );
+    _LIT( KNPTL1, ", 0 )" );
+    _LIT( KNPTL2, ", 1 )" );
+    TInt i( 0 );
+    for ( i = 0; i < 10; i++ )
+        {
+        myPtr.Copy( KNPTL0() );
+        myPtr.Append( KNPTL() );
+        myPtr.AppendNum( i );
+        myPtr.Append( KNPTL1() );
+        DPLayout( myPtr, IM_navi_pane_texts_Line_1( i , 0 ) );
+
+        myPtr.Copy( KNPTL() );
+        myPtr.AppendNum( i );
+        myPtr.Append( KNPTL1() );
+        DPLayout( myPtr, IM_navi_pane_texts_Line_1( i , 0 ) );
+        }
+    for ( i = 0; i < 10; i++ )
+        {
+        myPtr.Copy( KNPTL0() );
+        myPtr.Append( KNPTL() );
+        myPtr.AppendNum( i );
+        myPtr.Append( KNPTL2() );
+        DPLayout( myPtr, IM_navi_pane_texts_Line_1( i , 1 ) );
+
+        myPtr.Copy( KNPTL() );
+        myPtr.AppendNum( i );
+        myPtr.Append( KNPTL2() );
+        DPLayout( myPtr, IM_navi_pane_texts_Line_1( i , 1 ) );
+        }
+
+    CleanupStack::PopAndDestroy( myStr );
+
+#endif // _DEBUG
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::DPLayout
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::DPLayout( const TDesC& aStr, const TAknTextLineLayout aLayout )
+    {
+    TPtrC myStr( aStr );
+    LAYOUT_DP( D_LAYOUT_LIT(
+                   "%S iC il ir iB iW iJ iFont iBaselineSkip iNumberOfLinesShown" )
+               , &myStr );
+    LAYOUT_DP( D_LAYOUT_LIT( "%d %d %d %d %d %d %d %d %d" ), aLayout.iC
+               , aLayout.il
+               , aLayout.ir
+               , aLayout.iB
+               , aLayout.iW
+               , aLayout.iJ
+               , aLayout.iFont
+               , aLayout.iBaselineSkip
+               , aLayout.iNumberOfLinesShown );
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::DPLayout
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::DPLayout( const TDesC& aStr,
+                              const TAknWindowLineLayout aLayout )
+    {
+    TPtrC myStr( aStr );
+    LAYOUT_DP( D_LAYOUT_LIT( "%S iC il  it ir ib iW iH" ), &myStr  );
+    LAYOUT_DP( D_LAYOUT_LIT( "%d %d %d %d %d %d %d" )
+               , aLayout.iC
+               , aLayout.il
+               , aLayout.it
+               , aLayout.ir
+               , aLayout.ib
+               , aLayout.iW
+               , aLayout.iH );
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::DPRect
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::DPRect( const TDesC& aStr, const TRect& aRect )
+    {
+    TPtrC myStr( aStr );
+    LAYOUT_DP( D_LAYOUT_LIT( "%S TRect %d %d %d %d" ), &myStr
+               , aRect.iTl.iX, aRect.iTl.iY, aRect.iBr.iX, aRect.iBr.iY );
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::FillLayoutL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::FillLayoutL()
+    {
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, iScreenRect );
+    if ( iLastScreenRect != iScreenRect )
+        {
+        FillReadingPaneL();
+        FillWrittingPaneL();
+        FillReadingFieldL();
+        FillReadingPaneTextsLine1L();
+        FillReadingPaneTextsLine2();
+        FillIMTextElementsL();
+        FillWrittingPaneTextsLineL();
+        FillIMWritingFieldLine1L();
+        FillIMWritingFieldLine2();
+        FillIMWritingFieldLine3L();
+        FillIMNaviPaneTextsLineL();
+        }
+    iLastScreenRect = iScreenRect;
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::FillReadingPaneL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::FillReadingPaneL()
+    {
+    if ( iReadingPane )
+        {
+        iReadingPane->Reset();
+        delete iReadingPane;
+        iReadingPane = NULL;
+        }
+
+    iReadingPane = new( ELeave )CArrayFixFlat<TAknWindowLineLayout>( 3 );
+    for ( TInt i( 0 ); i < 3; i++ )
+        {
+        iReadingPane->AppendL( AppLayout::im_reading_pane( i ) );
+        }
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::FillReadingFieldL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::FillReadingFieldL()
+    {
+    if ( iReadingField )
+        {
+        iReadingField->Reset();
+        delete iReadingField;
+        iReadingField = NULL;
+        }
+
+    TAknLayoutScalableParameterLimits limits(
+        AknLayoutScalable_Apps::list_im_single_pane_ParamLimits() );
+
+    // items from FirstRow to LastRow
+    iReadingField = new( ELeave )CArrayFixFlat<TAknWindowLineLayout>(
+        limits.LastRow() - limits.FirstRow() + 1 );
+
+    for ( TInt i( limits.FirstRow() ); i <= limits.LastRow(); ++i )
+        {
+        iReadingField->AppendL( AppLayout::im_reading_field( i ) );
+        }
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::FillReadingPaneTextsLine1
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::FillReadingPaneTextsLine1L()
+    {
+    if ( iReadingPaneTextsLine1 )
+        {
+        iReadingPaneTextsLine1->Reset();
+        delete iReadingPaneTextsLine1;
+        iReadingPaneTextsLine1 = NULL;
+        }
+
+    iReadingPaneTextsLine1 = new( ELeave )CArrayFixFlat<TAknTextLineLayout>( 3 );
+    for ( TInt i( 0 ); i < 3; i++ )
+        {
+        iReadingPaneTextsLine1->AppendL(
+            AppLayout::IM_reading_pane_texts_Line_1( i ) );
+        }
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::FillIMTextElementsL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::FillIMTextElementsL()
+    {
+    if ( iIMTextElements )
+        {
+        iIMTextElements->Reset();
+        delete iIMTextElements;
+        iIMTextElements = NULL;
+        }
+
+    iIMTextElements = new( ELeave )CArrayFixFlat<TAknWindowLineLayout>( 3 );
+    for ( TInt i( 0 ); i < 3; i++ )
+        {
+        iIMTextElements->AppendL( AppLayout::IM_text_elements( i ) );
+        }
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::FillReadingPaneTextsLine2
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::FillReadingPaneTextsLine2()
+    {
+    iReadingPaneTextsLine2 = AppLayout::IM_reading_pane_texts_Line_2();
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::FillWrittingPaneTextsLineL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::FillWrittingPaneTextsLineL()
+    {
+    if ( iWrittingPaneTextsLine )
+        {
+        iWrittingPaneTextsLine->Reset();
+        delete iWrittingPaneTextsLine;
+        iWrittingPaneTextsLine = NULL;
+        }
+
+    iWrittingPaneTextsLine = new( ELeave )CArrayFixFlat<TAknMultiLineTextLayout>( 3 );
+    for ( TInt i( 0 ); i < 3; i++ )
+        {
+        iWrittingPaneTextsLine->AppendL(
+            AppLayout::Multiline_IM_writing_pane_texts_Line_1( i ) );
+        }
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::FillIMWritingFieldLine1
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::FillIMWritingFieldLine1L()
+    {
+    if ( iIMWritingFieldLine1 )
+        {
+        iIMWritingFieldLine1->Reset();
+        delete iIMWritingFieldLine1;
+        iIMWritingFieldLine1 = NULL;
+        }
+
+    iIMWritingFieldLine1 = new( ELeave )CArrayFixFlat<TAknWindowLineLayout>( 3 );
+    for ( TInt i( 0 ); i < 2; i++ )
+        {
+        iIMWritingFieldLine1->AppendL(
+            AppLayout::IM_writing_field_elements_Line_1( i ) );
+        }
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::FillIMWritingFieldLine2
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::FillIMWritingFieldLine2()
+    {
+    iIMWritingFieldLine2 =
+        AppLayout::IM_writing_field_elements_Line_2();
+    iIMWritingFieldLine2.iH = 1;
+    iIMWritingFieldLine2.iW = ELayoutP;
+    iIMWritingFieldLine2.iC = 221;
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::FillIMWritingFieldLine3L
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::FillIMWritingFieldLine3L()
+    {
+    if ( iIMWritingFieldLine3 )
+        {
+        iIMWritingFieldLine3->Reset();
+        delete iIMWritingFieldLine3;
+        iIMWritingFieldLine3 = NULL;
+        }
+
+    iIMWritingFieldLine3 = new ( ELeave ) CArrayFixFlat< TAknWindowLineLayout >(
+        3 );
+    for ( TInt i( 0 ); i < 2; i++ )
+        {
+        iIMWritingFieldLine3->AppendL(
+            AppLayout::IM_writing_field_elements_Line_3( i ) );
+        }
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::FillWrittingPaneL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::FillWrittingPaneL()
+    {
+    if ( iWrittingPane )
+        {
+        iWrittingPane->Reset();
+        delete iWrittingPane;
+        iWrittingPane = NULL;
+        }
+
+    iWrittingPane = new( ELeave )CArrayFixFlat<TAknWindowLineLayout>( 2 );
+    for ( TInt i( 0 ); i < 2; i++ )
+        {
+        iWrittingPane->AppendL( AppLayout::im_writing_pane( i ) );
+        }
+    }
+
+// ---------------------------------------------------------
+// CCALayoutInfo::FillIMNaviPaneTextsLine
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCALayoutInfo::FillIMNaviPaneTextsLineL()
+    {
+    // fader colors from LAF. These are hardcoded as the LAF (impl.) adviced.
+    const TInt16 colors[] = { 234, 232, 230, 228, 226, 0, 226, 227, 228, 229 };
+
+    if ( iIMNaviPaneTextsLine1 )
+        {
+        iIMNaviPaneTextsLine1->Reset();
+        delete iIMNaviPaneTextsLine1;
+        iIMNaviPaneTextsLine1 = NULL;
+        }
+
+    iIMNaviPaneTextsLine1 =
+        new ( ELeave ) CArrayFixFlat<TAknTextLineLayout>( 10 );
+
+    TAknTextLineLayout text;
+    for ( TInt i( 0 ); i < 10; i++ )
+        {
+        text = AknLayoutScalable_Apps::navi_pane_im_t1();
+        text.iC = colors[ i ];
+        iIMNaviPaneTextsLine1->AppendL( text );
+        }
+    }
+
+// End of File