messagingappbase/msgeditor/viewsrc/MsgBodyControl.cpp
author hgs
Thu, 04 Nov 2010 02:02:03 +0530
changeset 81 2043ea884c04
parent 79 2981cb3aa489
permissions -rw-r--r--
201044_03
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
79
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  MsgBodyControl implementation
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
// ========== INCLUDE FILES ================================
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include <txtrich.h>                       // for CRichText
hgs
parents:
diff changeset
    23
#include <eikenv.h>                        // for CEikonEnv
hgs
parents:
diff changeset
    24
#include <gulfont.h>                       // for TLogicalFont
hgs
parents:
diff changeset
    25
#include <AknUtils.h>                      // for AknUtils
hgs
parents:
diff changeset
    26
#include <aknenv.h>                        // for CAknEnv
hgs
parents:
diff changeset
    27
#include <ItemFinder.h>                    // for automatic highlight
hgs
parents:
diff changeset
    28
#include <AknsUtils.h>                     // for Skinned drawing
hgs
parents:
diff changeset
    29
#include <AknDef.h>
hgs
parents:
diff changeset
    30
#include <StringLoader.h>                   // for StringLoader (load and foramt strings from resources)
hgs
parents:
diff changeset
    31
#include <MsgEditorAppUi.rsg>
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
#include <applayout.cdl.h> // LAF
hgs
parents:
diff changeset
    34
#include <aknlayoutscalable_apps.cdl.h>
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
#include "MsgEditorCommon.h"               //
hgs
parents:
diff changeset
    37
#include "MsgEditorView.h"                 // for CMsgEditorView
hgs
parents:
diff changeset
    38
#include "MsgBodyControl.h"                // for CMsgBodyControl
hgs
parents:
diff changeset
    39
#include "MsgBaseControlObserver.h"        // for MMsgBaseControlObserver
hgs
parents:
diff changeset
    40
#include "MsgBodyControlEditor.h"          // for CMsgBodyControlEditor
hgs
parents:
diff changeset
    41
#include "MsgEditorPanic.h"                // for MsgEditor panics
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
#include "MsgEditorLogging.h"
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
// ========== EXTERNAL DATA STRUCTURES =====================
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
// ========== EXTERNAL FUNCTION PROTOTYPES =================
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
// ========== CONSTANTS ====================================
hgs
parents:
diff changeset
    50
hgs
parents:
diff changeset
    51
// ========== MACROS =======================================
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
// ========== LOCAL CONSTANTS AND MACROS ===================
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
// ========== MODULE DATA STRUCTURES =======================
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
// ========== LOCAL FUNCTION PROTOTYPES ====================
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
// ========== LOCAL FUNCTIONS ==============================
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
// ========== MEMBER FUNCTIONS =============================
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
// ---------------------------------------------------------
hgs
parents:
diff changeset
    64
// CMsgBodyControl::CMsgBodyControl
hgs
parents:
diff changeset
    65
//
hgs
parents:
diff changeset
    66
// Constructor.
hgs
parents:
diff changeset
    67
// ---------------------------------------------------------
hgs
parents:
diff changeset
    68
//
hgs
parents:
diff changeset
    69
CMsgBodyControl::CMsgBodyControl( MMsgBaseControlObserver& aBaseControlObserver ) : 
hgs
parents:
diff changeset
    70
    CMsgExpandableTextEditorControl( aBaseControlObserver )
hgs
parents:
diff changeset
    71
    {
hgs
parents:
diff changeset
    72
    }
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
// ---------------------------------------------------------
hgs
parents:
diff changeset
    75
// CMsgBodyControl::~CMsgBodyControl
hgs
parents:
diff changeset
    76
//
hgs
parents:
diff changeset
    77
// Destructor.
hgs
parents:
diff changeset
    78
// ---------------------------------------------------------
hgs
parents:
diff changeset
    79
//
hgs
parents:
diff changeset
    80
CMsgBodyControl::~CMsgBodyControl()
hgs
parents:
diff changeset
    81
    {
hgs
parents:
diff changeset
    82
    AknsUtils::DeregisterControlPosition( iEditor );
hgs
parents:
diff changeset
    83
    delete iEditor;
hgs
parents:
diff changeset
    84
    delete iCaptionText;
hgs
parents:
diff changeset
    85
    AknsUtils::DeregisterControlPosition( this );
hgs
parents:
diff changeset
    86
    }
hgs
parents:
diff changeset
    87
hgs
parents:
diff changeset
    88
// ---------------------------------------------------------
hgs
parents:
diff changeset
    89
// CMsgBodyControl::NewL
hgs
parents:
diff changeset
    90
//
hgs
parents:
diff changeset
    91
// Factory method that creates this control.
hgs
parents:
diff changeset
    92
// ---------------------------------------------------------
hgs
parents:
diff changeset
    93
//
hgs
parents:
diff changeset
    94
EXPORT_C CMsgBodyControl* CMsgBodyControl::NewL( CCoeControl* aParent )
hgs
parents:
diff changeset
    95
    {
hgs
parents:
diff changeset
    96
    __ASSERT_DEBUG( aParent, Panic( EMsgNullPointer ) );
hgs
parents:
diff changeset
    97
hgs
parents:
diff changeset
    98
    CMsgEditorView* obs = static_cast<CMsgEditorView*>( aParent );
hgs
parents:
diff changeset
    99
    CMsgBodyControl* self = new ( ELeave ) CMsgBodyControl( *obs );
hgs
parents:
diff changeset
   100
    self->SetMopParent( aParent );
hgs
parents:
diff changeset
   101
    
hgs
parents:
diff changeset
   102
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
   103
    self->ConstructL();
hgs
parents:
diff changeset
   104
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
    return self;
hgs
parents:
diff changeset
   107
    }
hgs
parents:
diff changeset
   108
hgs
parents:
diff changeset
   109
// ---------------------------------------------------------
hgs
parents:
diff changeset
   110
// CMsgBodyControl::ConstructL
hgs
parents:
diff changeset
   111
//
hgs
parents:
diff changeset
   112
// Creates the body control editor for the this control and sets necessary details.
hgs
parents:
diff changeset
   113
// ---------------------------------------------------------
hgs
parents:
diff changeset
   114
//
hgs
parents:
diff changeset
   115
void CMsgBodyControl::ConstructL()
hgs
parents:
diff changeset
   116
    {
hgs
parents:
diff changeset
   117
    iControlType = EMsgBodyControl;
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
    iEditor = new ( ELeave ) CMsgBodyControlEditor( this, 
hgs
parents:
diff changeset
   120
                                                    iControlModeFlags, 
hgs
parents:
diff changeset
   121
                                                    iBaseControlObserver );
hgs
parents:
diff changeset
   122
    iEditor->ConstructL();
hgs
parents:
diff changeset
   123
    
hgs
parents:
diff changeset
   124
    iEditor->SetControlType(iControlType);   
hgs
parents:
diff changeset
   125
    iEditor->SetObserver( this );
hgs
parents:
diff changeset
   126
    iEditor->SetEdwinSizeObserver( this );
hgs
parents:
diff changeset
   127
    iEditor->AddEdwinObserverL( this );
hgs
parents:
diff changeset
   128
    iEditor->SetMaxNumberOfChars( 0 );
hgs
parents:
diff changeset
   129
    iEditor->SetBorder( TGulBorder::ENone );
hgs
parents:
diff changeset
   130
    iEditor->SetAknEditorFlags( EAknEditorFlagUseSCTNumericCharmap |
hgs
parents:
diff changeset
   131
                                EAknEditorFlagEnablePictographInput |
hgs
parents:
diff changeset
   132
                                EAknEditorFlagAllowEntersWithScrollDown |
hgs
parents:
diff changeset
   133
                                EAknEditorFlagEnablePartialScreen                          
hgs
parents:
diff changeset
   134
                                );   
hgs
parents:
diff changeset
   135
    
hgs
parents:
diff changeset
   136
    SetPlainTextMode( ETrue );
hgs
parents:
diff changeset
   137
    
hgs
parents:
diff changeset
   138
    ResolveFontMetrics();
hgs
parents:
diff changeset
   139
    SetIcfPromptTextL();
hgs
parents:
diff changeset
   140
    CItemFinder* itemFinder = iEditor->ItemFinder();
hgs
parents:
diff changeset
   141
    if ( itemFinder )
hgs
parents:
diff changeset
   142
        {
hgs
parents:
diff changeset
   143
        // for automatic highlight
hgs
parents:
diff changeset
   144
        itemFinder->SetEditor( (CEikRichTextEditor**)&iEditor );
hgs
parents:
diff changeset
   145
        }
hgs
parents:
diff changeset
   146
    }
hgs
parents:
diff changeset
   147
hgs
parents:
diff changeset
   148
// ---------------------------------------------------------
hgs
parents:
diff changeset
   149
// CMsgBodyControl::Editor
hgs
parents:
diff changeset
   150
//
hgs
parents:
diff changeset
   151
// Returns a reference to the editor control.
hgs
parents:
diff changeset
   152
// ---------------------------------------------------------
hgs
parents:
diff changeset
   153
//
hgs
parents:
diff changeset
   154
EXPORT_C CEikRichTextEditor& CMsgBodyControl::Editor() const
hgs
parents:
diff changeset
   155
    {
hgs
parents:
diff changeset
   156
    return *iEditor;
hgs
parents:
diff changeset
   157
    }
hgs
parents:
diff changeset
   158
hgs
parents:
diff changeset
   159
// ---------------------------------------------------------
hgs
parents:
diff changeset
   160
// CMsgBodyControl::SetTextContentL
hgs
parents:
diff changeset
   161
//
hgs
parents:
diff changeset
   162
// Sets text content to the control editor.
hgs
parents:
diff changeset
   163
// ---------------------------------------------------------
hgs
parents:
diff changeset
   164
//
hgs
parents:
diff changeset
   165
EXPORT_C void CMsgBodyControl::SetTextContentL( CRichText& aText )
hgs
parents:
diff changeset
   166
    {   
hgs
parents:
diff changeset
   167
	CItemFinder* autofind = ItemFinder();
hgs
parents:
diff changeset
   168
	
hgs
parents:
diff changeset
   169
	TBool alreadyBandFormatting( EFalse );
hgs
parents:
diff changeset
   170
	if ( iEditor->TextLayout( )->IsFormattingBand( ) )
hgs
parents:
diff changeset
   171
        {
hgs
parents:
diff changeset
   172
        alreadyBandFormatting = ETrue;
hgs
parents:
diff changeset
   173
        }
hgs
parents:
diff changeset
   174
	
hgs
parents:
diff changeset
   175
    iEditor->SetTextContentL( aText );
hgs
parents:
diff changeset
   176
    
hgs
parents:
diff changeset
   177
    // Text added after control has been set visible and 
hgs
parents:
diff changeset
   178
    // there is enough text to change editor to do band formatting.
hgs
parents:
diff changeset
   179
    // We have to update the editor size to maximum body control size
hgs
parents:
diff changeset
   180
    // and enable force control size updating to start size change really
hgs
parents:
diff changeset
   181
    // happening.
hgs
parents:
diff changeset
   182
    if ( iControlModeFlags & EMsgControlModeInitialized &&
hgs
parents:
diff changeset
   183
         !alreadyBandFormatting &&
hgs
parents:
diff changeset
   184
         iEditor->TextLayout( )->IsFormattingBand( ) )
hgs
parents:
diff changeset
   185
        {
hgs
parents:
diff changeset
   186
        iControlModeFlags |= EMsgControlModeForceSizeUpdate;
hgs
parents:
diff changeset
   187
        
hgs
parents:
diff changeset
   188
        TSize newSize( iSize.iWidth, iMaxBodyHeight );
hgs
parents:
diff changeset
   189
        iEditor->SetSize( newSize );
hgs
parents:
diff changeset
   190
        
hgs
parents:
diff changeset
   191
        iControlModeFlags &= ~EMsgControlModeForceSizeUpdate;
hgs
parents:
diff changeset
   192
        }
hgs
parents:
diff changeset
   193
    
hgs
parents:
diff changeset
   194
	if ( autofind ) // for automatic highlight
hgs
parents:
diff changeset
   195
		{
hgs
parents:
diff changeset
   196
		autofind->SetEditor( (CEikRichTextEditor**)&iEditor );
hgs
parents:
diff changeset
   197
        }
hgs
parents:
diff changeset
   198
        
hgs
parents:
diff changeset
   199
    iControlModeFlags |= EMsgControlModeModified;
hgs
parents:
diff changeset
   200
    }
hgs
parents:
diff changeset
   201
hgs
parents:
diff changeset
   202
// ---------------------------------------------------------
hgs
parents:
diff changeset
   203
// CMsgBodyControl::InsertCharacterL
hgs
parents:
diff changeset
   204
//
hgs
parents:
diff changeset
   205
// Inserts a character to the editor.
hgs
parents:
diff changeset
   206
// ---------------------------------------------------------
hgs
parents:
diff changeset
   207
//
hgs
parents:
diff changeset
   208
EXPORT_C void CMsgBodyControl::InsertCharacterL( const TChar& aCharacter )
hgs
parents:
diff changeset
   209
    {
hgs
parents:
diff changeset
   210
    BodyControlEditor()->InsertCharacterL( aCharacter );
hgs
parents:
diff changeset
   211
    iControlModeFlags |= EMsgControlModeModified;
hgs
parents:
diff changeset
   212
    }
hgs
parents:
diff changeset
   213
hgs
parents:
diff changeset
   214
hgs
parents:
diff changeset
   215
// ---------------------------------------------------------
hgs
parents:
diff changeset
   216
// CMsgBodyControl::InsertTextL
hgs
parents:
diff changeset
   217
//
hgs
parents:
diff changeset
   218
// Inserts text to the editor.
hgs
parents:
diff changeset
   219
// ---------------------------------------------------------
hgs
parents:
diff changeset
   220
//
hgs
parents:
diff changeset
   221
EXPORT_C void CMsgBodyControl::InsertTextL( const TDesC& aText )
hgs
parents:
diff changeset
   222
    {
hgs
parents:
diff changeset
   223
    BodyControlEditor()->InsertTextL( aText );
hgs
parents:
diff changeset
   224
    iControlModeFlags |= EMsgControlModeModified;
hgs
parents:
diff changeset
   225
hgs
parents:
diff changeset
   226
    //iBaseControlObserver->HandleBaseControlEventRequestL(this, EMsgEnsureCorrectFormPosition);
hgs
parents:
diff changeset
   227
    }
hgs
parents:
diff changeset
   228
hgs
parents:
diff changeset
   229
// ---------------------------------------------------------
hgs
parents:
diff changeset
   230
// CMsgBodyControl::NotifyViewEvent
hgs
parents:
diff changeset
   231
// ---------------------------------------------------------
hgs
parents:
diff changeset
   232
//
hgs
parents:
diff changeset
   233
void CMsgBodyControl::NotifyViewEvent( TMsgViewEvent aEvent, TInt aParam )
hgs
parents:
diff changeset
   234
    {
hgs
parents:
diff changeset
   235
    TRAP_IGNORE( DoNotifyViewEventL( aEvent, aParam ) );
hgs
parents:
diff changeset
   236
    }
hgs
parents:
diff changeset
   237
hgs
parents:
diff changeset
   238
// ---------------------------------------------------------
hgs
parents:
diff changeset
   239
// CMsgBodyControl::DoNotifyViewEventL
hgs
parents:
diff changeset
   240
// ---------------------------------------------------------
hgs
parents:
diff changeset
   241
//
hgs
parents:
diff changeset
   242
void CMsgBodyControl::DoNotifyViewEventL( TMsgViewEvent aEvent, TInt /*aParam*/ )
hgs
parents:
diff changeset
   243
    {
hgs
parents:
diff changeset
   244
    switch ( aEvent )
hgs
parents:
diff changeset
   245
        {
hgs
parents:
diff changeset
   246
        case EMsgViewEventPrepareFocusTransitionUp:
hgs
parents:
diff changeset
   247
            {
hgs
parents:
diff changeset
   248
            if ( IsFocused() && iEditor->TextView() )
hgs
parents:
diff changeset
   249
                {
hgs
parents:
diff changeset
   250
                iEditor->ClearSelectionL();
hgs
parents:
diff changeset
   251
                
hgs
parents:
diff changeset
   252
                iEditor->TextView()->FinishBackgroundFormattingL();
hgs
parents:
diff changeset
   253
                if ( iEditor->TextLayout()->FirstDocPosFullyInBand() != 0 )
hgs
parents:
diff changeset
   254
                    {
hgs
parents:
diff changeset
   255
                    iEditor->NotifyNewDocumentL();
hgs
parents:
diff changeset
   256
                    }
hgs
parents:
diff changeset
   257
hgs
parents:
diff changeset
   258
                if ( IsReadOnly() )
hgs
parents:
diff changeset
   259
                    {
hgs
parents:
diff changeset
   260
                    iEditor->SetCursorPosL( 0, EFalse );
hgs
parents:
diff changeset
   261
                    }
hgs
parents:
diff changeset
   262
                }
hgs
parents:
diff changeset
   263
            
hgs
parents:
diff changeset
   264
            BodyControlEditor()->PrepareFocusTransition();
hgs
parents:
diff changeset
   265
            break;
hgs
parents:
diff changeset
   266
            }
hgs
parents:
diff changeset
   267
        case EMsgViewEventPrepareFocusTransitionDown:
hgs
parents:
diff changeset
   268
            {
hgs
parents:
diff changeset
   269
            if ( IsFocused() && iEditor->TextView() )
hgs
parents:
diff changeset
   270
                {
hgs
parents:
diff changeset
   271
                iEditor->ClearSelectionL();
hgs
parents:
diff changeset
   272
                
hgs
parents:
diff changeset
   273
                iEditor->TextView()->FinishBackgroundFormattingL();
hgs
parents:
diff changeset
   274
                if ( !iEditor->CursorInLastLine() )
hgs
parents:
diff changeset
   275
                    {
hgs
parents:
diff changeset
   276
                    iEditor->TextView()->SetDocPosL( iEditor->TextLength(), EFalse );
hgs
parents:
diff changeset
   277
                    
hgs
parents:
diff changeset
   278
                    // fills the screen
hgs
parents:
diff changeset
   279
                    TViewYPosQualifier yPosQualifier;
hgs
parents:
diff changeset
   280
                    yPosQualifier.SetFillScreen();
hgs
parents:
diff changeset
   281
                    iEditor->TextView()->HandleGlobalChangeL( yPosQualifier );
hgs
parents:
diff changeset
   282
                    }
hgs
parents:
diff changeset
   283
                    
hgs
parents:
diff changeset
   284
                if ( IsReadOnly() )
hgs
parents:
diff changeset
   285
                    {
hgs
parents:
diff changeset
   286
                    iEditor->SetCursorPosL( iEditor->TextLength(), EFalse );
hgs
parents:
diff changeset
   287
                    }
hgs
parents:
diff changeset
   288
                }
hgs
parents:
diff changeset
   289
            
hgs
parents:
diff changeset
   290
            BodyControlEditor()->PrepareFocusTransition();
hgs
parents:
diff changeset
   291
            break;
hgs
parents:
diff changeset
   292
            }
hgs
parents:
diff changeset
   293
        case EMsgViewEventSetCursorFirstPos:
hgs
parents:
diff changeset
   294
            {
hgs
parents:
diff changeset
   295
            if ( iEditor->TextView() && 
hgs
parents:
diff changeset
   296
                 !IsReadOnly() &&
hgs
parents:
diff changeset
   297
                 !iEditor->CursorInFirstLine() )
hgs
parents:
diff changeset
   298
                {
hgs
parents:
diff changeset
   299
                iEditor->SetCursorPosL( 0, EFalse );
hgs
parents:
diff changeset
   300
                }
hgs
parents:
diff changeset
   301
            break;
hgs
parents:
diff changeset
   302
            }
hgs
parents:
diff changeset
   303
        case EMsgViewEventSetCursorLastPos:
hgs
parents:
diff changeset
   304
            {
hgs
parents:
diff changeset
   305
            if ( iEditor->TextView() && 
hgs
parents:
diff changeset
   306
                 !IsReadOnly() &&
hgs
parents:
diff changeset
   307
                 !iEditor->CursorInLastLine() )
hgs
parents:
diff changeset
   308
                {
hgs
parents:
diff changeset
   309
                iEditor->SetCursorPosL( iEditor->TextLength(), EFalse );
hgs
parents:
diff changeset
   310
                }
hgs
parents:
diff changeset
   311
            break;
hgs
parents:
diff changeset
   312
            }
hgs
parents:
diff changeset
   313
        case EMsgViewEventPrepareForViewing:
hgs
parents:
diff changeset
   314
            {
hgs
parents:
diff changeset
   315
            /*
hgs
parents:
diff changeset
   316
            iEditor->SetSuppressFormatting( EFalse );        
hgs
parents:
diff changeset
   317
            iEditor->NotifyNewFormatL();
hgs
parents:
diff changeset
   318
            */
hgs
parents:
diff changeset
   319
            }
hgs
parents:
diff changeset
   320
        default:
hgs
parents:
diff changeset
   321
            {
hgs
parents:
diff changeset
   322
            break;
hgs
parents:
diff changeset
   323
            }
hgs
parents:
diff changeset
   324
        }
hgs
parents:
diff changeset
   325
    }
hgs
parents:
diff changeset
   326
hgs
parents:
diff changeset
   327
// ---------------------------------------------------------
hgs
parents:
diff changeset
   328
// CMsgBodyControl::Reset
hgs
parents:
diff changeset
   329
// 
hgs
parents:
diff changeset
   330
// Resets the editor content and notifies view if EMsgControlModeBodyMaxHeight
hgs
parents:
diff changeset
   331
// is enabled. Explicit function call is needed as control height is not actually
hgs
parents:
diff changeset
   332
// changing on CMsgBodyControl::HandleEdwinSizeEventL.
hgs
parents:
diff changeset
   333
// ---------------------------------------------------------
hgs
parents:
diff changeset
   334
//
hgs
parents:
diff changeset
   335
EXPORT_C void CMsgBodyControl::Reset()
hgs
parents:
diff changeset
   336
    {
hgs
parents:
diff changeset
   337
    iEditor->Reset();       
hgs
parents:
diff changeset
   338
    
hgs
parents:
diff changeset
   339
    if ( iControlModeFlags & EMsgControlModeBodyMaxHeight &&
hgs
parents:
diff changeset
   340
         iControlModeFlags & EMsgControlModeInitialized )
hgs
parents:
diff changeset
   341
        {
hgs
parents:
diff changeset
   342
        TRAP_IGNORE( iBaseControlObserver->HandleBaseControlEventRequestL( this, 
hgs
parents:
diff changeset
   343
                                                                           EMsgHeightChanged ) );
hgs
parents:
diff changeset
   344
        }
hgs
parents:
diff changeset
   345
    
hgs
parents:
diff changeset
   346
    iControlModeFlags |= EMsgControlModeModified;
hgs
parents:
diff changeset
   347
    }
hgs
parents:
diff changeset
   348
hgs
parents:
diff changeset
   349
// ---------------------------------------------------------
hgs
parents:
diff changeset
   350
// CMsgBodyControl::SetAndGetSizeL
hgs
parents:
diff changeset
   351
//
hgs
parents:
diff changeset
   352
// Sets size for the editor and this control.
hgs
parents:
diff changeset
   353
// ---------------------------------------------------------
hgs
parents:
diff changeset
   354
//
hgs
parents:
diff changeset
   355
EXPORT_C void CMsgBodyControl::SetAndGetSizeL( TSize& aSize )
hgs
parents:
diff changeset
   356
    {
hgs
parents:
diff changeset
   357
    TSize bodySize( aSize );
hgs
parents:
diff changeset
   358
hgs
parents:
diff changeset
   359
    if ( iControlModeFlags & EMsgControlModeBodyMaxHeight )
hgs
parents:
diff changeset
   360
        {
hgs
parents:
diff changeset
   361
        bodySize.iHeight = iMaxBodyHeight;
hgs
parents:
diff changeset
   362
        }
hgs
parents:
diff changeset
   363
    else
hgs
parents:
diff changeset
   364
        {
hgs
parents:
diff changeset
   365
        if ( iEditor->TextLayout() )
hgs
parents:
diff changeset
   366
            {
hgs
parents:
diff changeset
   367
            if ( iEditor->TextLayout()->IsFormattingBand() )
hgs
parents:
diff changeset
   368
                {
hgs
parents:
diff changeset
   369
                // With band formatting the idea is that it is only
hgs
parents:
diff changeset
   370
                // used when there is more than screen size of text.
hgs
parents:
diff changeset
   371
                // If this is false then formatting limits should be
hgs
parents:
diff changeset
   372
                // change. This is the reason we can safely use 
hgs
parents:
diff changeset
   373
                // max body height with it.
hgs
parents:
diff changeset
   374
                bodySize.iHeight = iMaxBodyHeight;
hgs
parents:
diff changeset
   375
                }
hgs
parents:
diff changeset
   376
            else
hgs
parents:
diff changeset
   377
                {
hgs
parents:
diff changeset
   378
                // Force background formatting to stop so that correct 
hgs
parents:
diff changeset
   379
                // height can be retrieved
hgs
parents:
diff changeset
   380
                if ( iEditor->TextView() )
hgs
parents:
diff changeset
   381
                    {
hgs
parents:
diff changeset
   382
                    iEditor->TextView()->FinishBackgroundFormattingL();
hgs
parents:
diff changeset
   383
                    }
hgs
parents:
diff changeset
   384
                    
hgs
parents:
diff changeset
   385
                bodySize.iHeight = iEditor->TextLayout()->NumFormattedLines() * iLineHeight;
hgs
parents:
diff changeset
   386
                }    
hgs
parents:
diff changeset
   387
           }
hgs
parents:
diff changeset
   388
        }
hgs
parents:
diff changeset
   389
hgs
parents:
diff changeset
   390
    iEditor->SetAndGetSizeL( bodySize );
hgs
parents:
diff changeset
   391
    
hgs
parents:
diff changeset
   392
    MsgEditorCommons::RoundToNextLine( bodySize.iHeight, iLineHeight );
hgs
parents:
diff changeset
   393
        
hgs
parents:
diff changeset
   394
    SetSizeWithoutNotification( bodySize );
hgs
parents:
diff changeset
   395
hgs
parents:
diff changeset
   396
    aSize = bodySize;
hgs
parents:
diff changeset
   397
    }
hgs
parents:
diff changeset
   398
hgs
parents:
diff changeset
   399
// ---------------------------------------------------------
hgs
parents:
diff changeset
   400
// CMsgBodyControl::IsFocusChangePossible
hgs
parents:
diff changeset
   401
//
hgs
parents:
diff changeset
   402
// Checks if the focus change up or down is possible and returns ETrue if it is.
hgs
parents:
diff changeset
   403
// ---------------------------------------------------------
hgs
parents:
diff changeset
   404
//
hgs
parents:
diff changeset
   405
EXPORT_C TBool CMsgBodyControl::IsFocusChangePossible( TMsgFocusDirection aDirection ) const
hgs
parents:
diff changeset
   406
    {
hgs
parents:
diff changeset
   407
    TBool changeFocusPossible = EFalse;
hgs
parents:
diff changeset
   408
    
hgs
parents:
diff changeset
   409
    if ( IsReadOnly() )
hgs
parents:
diff changeset
   410
        {
hgs
parents:
diff changeset
   411
        TRAPD( error, changeFocusPossible = BodyControlEditor()->IsFocusChangePossibleL( aDirection ) );
hgs
parents:
diff changeset
   412
        if ( error != KErrNone )
hgs
parents:
diff changeset
   413
            {
hgs
parents:
diff changeset
   414
            changeFocusPossible = ETrue;
hgs
parents:
diff changeset
   415
            }
hgs
parents:
diff changeset
   416
        }
hgs
parents:
diff changeset
   417
    else
hgs
parents:
diff changeset
   418
        {
hgs
parents:
diff changeset
   419
        if ( IsCursorLocation( aDirection == EMsgFocusUp ? EMsgTop : 
hgs
parents:
diff changeset
   420
                                                           EMsgBottom ) )
hgs
parents:
diff changeset
   421
            {
hgs
parents:
diff changeset
   422
            changeFocusPossible = ETrue;
hgs
parents:
diff changeset
   423
            }
hgs
parents:
diff changeset
   424
        }
hgs
parents:
diff changeset
   425
    
hgs
parents:
diff changeset
   426
    return changeFocusPossible;
hgs
parents:
diff changeset
   427
    }
hgs
parents:
diff changeset
   428
hgs
parents:
diff changeset
   429
// ---------------------------------------------------------
hgs
parents:
diff changeset
   430
// CMsgBodyControl::PrepareForReadOnly
hgs
parents:
diff changeset
   431
//
hgs
parents:
diff changeset
   432
// Sets the editor read only or editable.
hgs
parents:
diff changeset
   433
// ---------------------------------------------------------
hgs
parents:
diff changeset
   434
//
hgs
parents:
diff changeset
   435
void CMsgBodyControl::PrepareForReadOnly( TBool aReadOnly )
hgs
parents:
diff changeset
   436
    {
hgs
parents:
diff changeset
   437
    TRAP_IGNORE( iEditor->PrepareForReadOnlyL( aReadOnly ) );
hgs
parents:
diff changeset
   438
    }
hgs
parents:
diff changeset
   439
hgs
parents:
diff changeset
   440
// ---------------------------------------------------------
hgs
parents:
diff changeset
   441
// CMsgBodyControl::OfferKeyEventL
hgs
parents:
diff changeset
   442
//
hgs
parents:
diff changeset
   443
// Handles key events.
hgs
parents:
diff changeset
   444
// ---------------------------------------------------------
hgs
parents:
diff changeset
   445
//
hgs
parents:
diff changeset
   446
EXPORT_C TKeyResponse CMsgBodyControl::OfferKeyEventL( const TKeyEvent& aKeyEvent, 
hgs
parents:
diff changeset
   447
                                                       TEventCode aType )
hgs
parents:
diff changeset
   448
    {    
hgs
parents:
diff changeset
   449
    return iEditor->OfferKeyEventL( aKeyEvent, aType );
hgs
parents:
diff changeset
   450
    }
hgs
parents:
diff changeset
   451
hgs
parents:
diff changeset
   452
// ---------------------------------------------------------
hgs
parents:
diff changeset
   453
// CMsgBodyControl::InputCapabilities
hgs
parents:
diff changeset
   454
//
hgs
parents:
diff changeset
   455
// Returns input capabilities.
hgs
parents:
diff changeset
   456
// ---------------------------------------------------------
hgs
parents:
diff changeset
   457
//
hgs
parents:
diff changeset
   458
EXPORT_C TCoeInputCapabilities CMsgBodyControl::InputCapabilities() const
hgs
parents:
diff changeset
   459
    {
hgs
parents:
diff changeset
   460
    if ( iEditor->IsFocused() )
hgs
parents:
diff changeset
   461
        {
hgs
parents:
diff changeset
   462
        TCoeInputCapabilities inputCapabilities( TCoeInputCapabilities::ENone, 
hgs
parents:
diff changeset
   463
                                                 NULL, 
hgs
parents:
diff changeset
   464
                                                 const_cast<CMsgBodyControl*>( this ) );
hgs
parents:
diff changeset
   465
        inputCapabilities.MergeWith( iEditor->InputCapabilities() );
hgs
parents:
diff changeset
   466
        
hgs
parents:
diff changeset
   467
        return inputCapabilities;
hgs
parents:
diff changeset
   468
        }
hgs
parents:
diff changeset
   469
    else
hgs
parents:
diff changeset
   470
        {
hgs
parents:
diff changeset
   471
        return TCoeInputCapabilities::ENone;
hgs
parents:
diff changeset
   472
        }
hgs
parents:
diff changeset
   473
    }
hgs
parents:
diff changeset
   474
hgs
parents:
diff changeset
   475
// ---------------------------------------------------------
hgs
parents:
diff changeset
   476
// CMsgBodyControl::HandleResourceChange
hgs
parents:
diff changeset
   477
//
hgs
parents:
diff changeset
   478
//
hgs
parents:
diff changeset
   479
// ---------------------------------------------------------
hgs
parents:
diff changeset
   480
//
hgs
parents:
diff changeset
   481
void CMsgBodyControl::HandleResourceChange( TInt aType )
hgs
parents:
diff changeset
   482
    { 
hgs
parents:
diff changeset
   483
    CMsgExpandableTextEditorControl::HandleResourceChange( aType );
hgs
parents:
diff changeset
   484
        
hgs
parents:
diff changeset
   485
	if ( aType == KEikDynamicLayoutVariantSwitch )
hgs
parents:
diff changeset
   486
        {
hgs
parents:
diff changeset
   487
        ResolveFontMetrics();
hgs
parents:
diff changeset
   488
hgs
parents:
diff changeset
   489
        CItemFinder* itemFinder = iEditor->ItemFinder();
hgs
parents:
diff changeset
   490
        if ( itemFinder && 
hgs
parents:
diff changeset
   491
             itemFinder->CurrentItemExt().iItemType != CItemFinder::ENoneSelected )
hgs
parents:
diff changeset
   492
            {
hgs
parents:
diff changeset
   493
            // Refreshes the item finder highlight if present highlighted
hgs
parents:
diff changeset
   494
            TRAP_IGNORE( itemFinder->ResolveAndSetItemTypeL() );
hgs
parents:
diff changeset
   495
            }
hgs
parents:
diff changeset
   496
        }
hgs
parents:
diff changeset
   497
    }
hgs
parents:
diff changeset
   498
hgs
parents:
diff changeset
   499
// ---------------------------------------------------------
hgs
parents:
diff changeset
   500
// CMsgBodyControl::CountComponentControls
hgs
parents:
diff changeset
   501
//
hgs
parents:
diff changeset
   502
// Returns a number of controls.
hgs
parents:
diff changeset
   503
// ---------------------------------------------------------
hgs
parents:
diff changeset
   504
//
hgs
parents:
diff changeset
   505
TInt CMsgBodyControl::CountComponentControls() const
hgs
parents:
diff changeset
   506
    {
hgs
parents:
diff changeset
   507
    CCoeControl* controls[] = { iEditor };
hgs
parents:
diff changeset
   508
hgs
parents:
diff changeset
   509
    TInt count = 0;
hgs
parents:
diff changeset
   510
    for ( TUint ii = 0; ii < sizeof( controls ) / sizeof( CCoeControl* ); ii++ )
hgs
parents:
diff changeset
   511
        {
hgs
parents:
diff changeset
   512
        if ( controls[ii] )
hgs
parents:
diff changeset
   513
            {
hgs
parents:
diff changeset
   514
            count++;
hgs
parents:
diff changeset
   515
            }
hgs
parents:
diff changeset
   516
        }
hgs
parents:
diff changeset
   517
hgs
parents:
diff changeset
   518
    return count;
hgs
parents:
diff changeset
   519
    }
hgs
parents:
diff changeset
   520
hgs
parents:
diff changeset
   521
// ---------------------------------------------------------
hgs
parents:
diff changeset
   522
// CMsgBodyControl::ComponentControl
hgs
parents:
diff changeset
   523
//
hgs
parents:
diff changeset
   524
// Returns a control of index aIndex.
hgs
parents:
diff changeset
   525
// ---------------------------------------------------------
hgs
parents:
diff changeset
   526
//
hgs
parents:
diff changeset
   527
CCoeControl* CMsgBodyControl::ComponentControl( TInt aIndex ) const
hgs
parents:
diff changeset
   528
    {
hgs
parents:
diff changeset
   529
    CCoeControl* controls[] = { iEditor };
hgs
parents:
diff changeset
   530
hgs
parents:
diff changeset
   531
    for ( TUint ii = 0; ii < sizeof( controls ) / sizeof( CCoeControl* ); ii++ )
hgs
parents:
diff changeset
   532
        {
hgs
parents:
diff changeset
   533
        if ( controls[ii] && aIndex-- == 0 )
hgs
parents:
diff changeset
   534
            {
hgs
parents:
diff changeset
   535
            return controls[ii];
hgs
parents:
diff changeset
   536
            }
hgs
parents:
diff changeset
   537
        }
hgs
parents:
diff changeset
   538
hgs
parents:
diff changeset
   539
    return NULL;
hgs
parents:
diff changeset
   540
    }
hgs
parents:
diff changeset
   541
hgs
parents:
diff changeset
   542
// ---------------------------------------------------------
hgs
parents:
diff changeset
   543
// CMsgBodyControl::SizeChanged
hgs
parents:
diff changeset
   544
//
hgs
parents:
diff changeset
   545
// Sets position for the editor.
hgs
parents:
diff changeset
   546
// ---------------------------------------------------------
hgs
parents:
diff changeset
   547
//
hgs
parents:
diff changeset
   548
void CMsgBodyControl::SizeChanged()
hgs
parents:
diff changeset
   549
    {
hgs
parents:
diff changeset
   550
    MEBLOGGER_ENTERFN("CMsgBodyControl::SizeChanged");
hgs
parents:
diff changeset
   551
hgs
parents:
diff changeset
   552
    if ( iControlModeFlags & EMsgControlModeSizeChanging )
hgs
parents:
diff changeset
   553
        {
hgs
parents:
diff changeset
   554
        MEBLOGGER_WRITE("EMsgControlModeSizeChanging");
hgs
parents:
diff changeset
   555
        }
hgs
parents:
diff changeset
   556
    else
hgs
parents:
diff changeset
   557
        {
hgs
parents:
diff changeset
   558
        TPoint editorPosition( Position() );
hgs
parents:
diff changeset
   559
        editorPosition.iY += iEditorTop;
hgs
parents:
diff changeset
   560
        iEditor->SetExtent( editorPosition, iEditor->Size() );
hgs
parents:
diff changeset
   561
    
hgs
parents:
diff changeset
   562
        AknsUtils::RegisterControlPosition( this );
hgs
parents:
diff changeset
   563
        AknsUtils::RegisterControlPosition( iEditor );
hgs
parents:
diff changeset
   564
        }
hgs
parents:
diff changeset
   565
hgs
parents:
diff changeset
   566
    MEBLOGGER_LEAVEFN("CMsgBodyControl::SizeChanged");
hgs
parents:
diff changeset
   567
    }
hgs
parents:
diff changeset
   568
hgs
parents:
diff changeset
   569
// ---------------------------------------------------------
hgs
parents:
diff changeset
   570
// CMsgBodyControl::FocusChanged
hgs
parents:
diff changeset
   571
//
hgs
parents:
diff changeset
   572
// This is called when the focus of the control is changed.
hgs
parents:
diff changeset
   573
// ---------------------------------------------------------
hgs
parents:
diff changeset
   574
//
hgs
parents:
diff changeset
   575
void CMsgBodyControl::FocusChanged( TDrawNow aDrawNow )
hgs
parents:
diff changeset
   576
    {
hgs
parents:
diff changeset
   577
    // For automatic highlight
hgs
parents:
diff changeset
   578
    iEditor->SetFocus( IsFocused(), aDrawNow );
hgs
parents:
diff changeset
   579
    if ( aDrawNow == EDrawNow )
hgs
parents:
diff changeset
   580
        {
hgs
parents:
diff changeset
   581
        DrawDeferred();
hgs
parents:
diff changeset
   582
        }    
hgs
parents:
diff changeset
   583
    }
hgs
parents:
diff changeset
   584
hgs
parents:
diff changeset
   585
// ---------------------------------------------------------
hgs
parents:
diff changeset
   586
// CMsgBodyControl::SetContainerWindowL
hgs
parents:
diff changeset
   587
//
hgs
parents:
diff changeset
   588
// Sets container window.
hgs
parents:
diff changeset
   589
// ---------------------------------------------------------
hgs
parents:
diff changeset
   590
//
hgs
parents:
diff changeset
   591
void CMsgBodyControl::SetContainerWindowL( const CCoeControl& aContainer )
hgs
parents:
diff changeset
   592
    {
hgs
parents:
diff changeset
   593
    CCoeControl::SetContainerWindowL( aContainer );
hgs
parents:
diff changeset
   594
    
hgs
parents:
diff changeset
   595
    iEditor->SetContainerWindowL( aContainer );
hgs
parents:
diff changeset
   596
    }
hgs
parents:
diff changeset
   597
hgs
parents:
diff changeset
   598
// ---------------------------------------------------------
hgs
parents:
diff changeset
   599
// CMsgBodyControl::CheckCorrectControlYPos
hgs
parents:
diff changeset
   600
//
hgs
parents:
diff changeset
   601
//
hgs
parents:
diff changeset
   602
// ---------------------------------------------------------
hgs
parents:
diff changeset
   603
//
hgs
parents:
diff changeset
   604
void CMsgBodyControl::CheckCorrectControlYPosL()
hgs
parents:
diff changeset
   605
    {
hgs
parents:
diff changeset
   606
    // SJK 06.09.2004: Added "IsReadOnly" check. Fixing KHAI-5KLH8L.
hgs
parents:
diff changeset
   607
    if ( IsReadOnly() && iEditor->TextView() && IsFocused() )
hgs
parents:
diff changeset
   608
        {
hgs
parents:
diff changeset
   609
        TRect viewRect = iBaseControlObserver->ViewRect();
hgs
parents:
diff changeset
   610
        TInt delta = viewRect.iTl.iY - iEditor->Rect().iTl.iY;
hgs
parents:
diff changeset
   611
        iEditor->TextView()->FinishBackgroundFormattingL();
hgs
parents:
diff changeset
   612
        TInt msgBaseLineDelta( iLineHeight );
hgs
parents:
diff changeset
   613
hgs
parents:
diff changeset
   614
        if ( delta % msgBaseLineDelta )
hgs
parents:
diff changeset
   615
            {
hgs
parents:
diff changeset
   616
            if ( delta < 0 )
hgs
parents:
diff changeset
   617
                {
hgs
parents:
diff changeset
   618
                delta = ( delta - delta % msgBaseLineDelta );
hgs
parents:
diff changeset
   619
                }
hgs
parents:
diff changeset
   620
            else
hgs
parents:
diff changeset
   621
                {
hgs
parents:
diff changeset
   622
                delta = ( delta - delta % msgBaseLineDelta ) + msgBaseLineDelta;
hgs
parents:
diff changeset
   623
                }
hgs
parents:
diff changeset
   624
            }
hgs
parents:
diff changeset
   625
hgs
parents:
diff changeset
   626
        if ( ( ( delta < 0) && 
hgs
parents:
diff changeset
   627
            ( iEditor->TextLayout()->FirstDocPosFullyInBand() != 0 ) )
hgs
parents:
diff changeset
   628
            || ( delta > 0 ) )
hgs
parents:
diff changeset
   629
            {
hgs
parents:
diff changeset
   630
            // these three lines must be here in order to
hgs
parents:
diff changeset
   631
            // keep text filled with the view.
hgs
parents:
diff changeset
   632
            TViewYPosQualifier yPosQualifier;
hgs
parents:
diff changeset
   633
            yPosQualifier.SetFillScreen();
hgs
parents:
diff changeset
   634
            iEditor->TextView()->HandleGlobalChangeL( yPosQualifier );
hgs
parents:
diff changeset
   635
hgs
parents:
diff changeset
   636
            iBaseControlObserver->HandleBaseControlEventRequestL(
hgs
parents:
diff changeset
   637
                this, EMsgScrollForm, delta );
hgs
parents:
diff changeset
   638
            }
hgs
parents:
diff changeset
   639
        }
hgs
parents:
diff changeset
   640
    }
hgs
parents:
diff changeset
   641
hgs
parents:
diff changeset
   642
// ---------------------------------------------------------
hgs
parents:
diff changeset
   643
// CMsgBodyControl::ItemFinder
hgs
parents:
diff changeset
   644
//
hgs
parents:
diff changeset
   645
//
hgs
parents:
diff changeset
   646
// ---------------------------------------------------------
hgs
parents:
diff changeset
   647
//
hgs
parents:
diff changeset
   648
CItemFinder* CMsgBodyControl::ItemFinder()
hgs
parents:
diff changeset
   649
	{
hgs
parents:
diff changeset
   650
	return IsReadOnly() ? iEditor->ItemFinder() : 
hgs
parents:
diff changeset
   651
	                      NULL;
hgs
parents:
diff changeset
   652
	}
hgs
parents:
diff changeset
   653
	
hgs
parents:
diff changeset
   654
// ---------------------------------------------------------
hgs
parents:
diff changeset
   655
// CMsgBodyControl::SetupAutomaticFindAfterFocusChangeL
hgs
parents:
diff changeset
   656
//
hgs
parents:
diff changeset
   657
//
hgs
parents:
diff changeset
   658
// ---------------------------------------------------------
hgs
parents:
diff changeset
   659
//
hgs
parents:
diff changeset
   660
void CMsgBodyControl::SetupAutomaticFindAfterFocusChangeL( TBool aBeginning )
hgs
parents:
diff changeset
   661
    {
hgs
parents:
diff changeset
   662
    BodyControlEditor()->SetupAutomaticFindAfterFocusChangeL( aBeginning );
hgs
parents:
diff changeset
   663
    }
hgs
parents:
diff changeset
   664
hgs
parents:
diff changeset
   665
// ---------------------------------------------------------
hgs
parents:
diff changeset
   666
// CMsgBodyControl::ResolveFontMetrics
hgs
parents:
diff changeset
   667
//
hgs
parents:
diff changeset
   668
//
hgs
parents:
diff changeset
   669
// ---------------------------------------------------------
hgs
parents:
diff changeset
   670
//
hgs
parents:
diff changeset
   671
void CMsgBodyControl::ResolveFontMetrics()
hgs
parents:
diff changeset
   672
    {
hgs
parents:
diff changeset
   673
    TAknLayoutText textLayout;
hgs
parents:
diff changeset
   674
    TAknTextLineLayout textLineLayout;
hgs
parents:
diff changeset
   675
    
hgs
parents:
diff changeset
   676
    TAknLayoutRect msgTextPane;
hgs
parents:
diff changeset
   677
    msgTextPane.LayoutRect( MsgEditorCommons::MsgDataPane(),
hgs
parents:
diff changeset
   678
                            AknLayoutScalable_Apps::msg_text_pane( 0 ).LayoutLine() );
hgs
parents:
diff changeset
   679
    TAknLayoutRect msgBodyPane;
hgs
parents:
diff changeset
   680
    msgBodyPane.LayoutRect( msgTextPane.Rect(),
hgs
parents:
diff changeset
   681
                            AknLayoutScalable_Apps::msg_body_pane().LayoutLine() );
hgs
parents:
diff changeset
   682
    
hgs
parents:
diff changeset
   683
    if ( IsReadOnly() )
hgs
parents:
diff changeset
   684
        {
hgs
parents:
diff changeset
   685
        textLineLayout = AknLayoutScalable_Apps::msg_body_pane_t1( 0 ).LayoutLine();
hgs
parents:
diff changeset
   686
        }
hgs
parents:
diff changeset
   687
    else
hgs
parents:
diff changeset
   688
        {
hgs
parents:
diff changeset
   689
        textLineLayout = AknLayoutScalable_Apps::msg_body_pane_t1( 1 ).LayoutLine();
hgs
parents:
diff changeset
   690
        }
hgs
parents:
diff changeset
   691
    
hgs
parents:
diff changeset
   692
    textLayout.LayoutText( msgBodyPane.Rect(),
hgs
parents:
diff changeset
   693
                           textLineLayout );
hgs
parents:
diff changeset
   694
                           
hgs
parents:
diff changeset
   695
    iEditorTop = textLayout.TextRect().iTl.iY - msgBodyPane.Rect().iTl.iY;
hgs
parents:
diff changeset
   696
    
hgs
parents:
diff changeset
   697
    // Set editor alignment
hgs
parents:
diff changeset
   698
    iEditor->SetAlignment( textLineLayout.iJ );
hgs
parents:
diff changeset
   699
    
hgs
parents:
diff changeset
   700
    iEditor->SetMaximumHeight( MsgEditorCommons::MaxBodyHeight() - iEditorTop );
hgs
parents:
diff changeset
   701
    }
hgs
parents:
diff changeset
   702
hgs
parents:
diff changeset
   703
// ---------------------------------------------------------
hgs
parents:
diff changeset
   704
// CMsgBodyControl::BodyControlEditor
hgs
parents:
diff changeset
   705
// ---------------------------------------------------------
hgs
parents:
diff changeset
   706
//
hgs
parents:
diff changeset
   707
CMsgBodyControlEditor* CMsgBodyControl::BodyControlEditor() const
hgs
parents:
diff changeset
   708
    {
hgs
parents:
diff changeset
   709
    return static_cast<CMsgBodyControlEditor*>( iEditor );
hgs
parents:
diff changeset
   710
    }
hgs
parents:
diff changeset
   711
hgs
parents:
diff changeset
   712
// ---------------------------------------------------------
hgs
parents:
diff changeset
   713
// CMsgBodyControl::GetCaptionForFep
hgs
parents:
diff changeset
   714
// Returns the ICF Prompt text of Body control to FEP
hgs
parents:
diff changeset
   715
// ---------------------------------------------------------
hgs
parents:
diff changeset
   716
//
hgs
parents:
diff changeset
   717
void CMsgBodyControl::GetCaptionForFep( TDes& aCaption ) const
hgs
parents:
diff changeset
   718
    {    
hgs
parents:
diff changeset
   719
    const TInt maximumLength = aCaption.MaxLength();
hgs
parents:
diff changeset
   720
    
hgs
parents:
diff changeset
   721
    if ( iCaptionText->Length() < maximumLength )
hgs
parents:
diff changeset
   722
        {
hgs
parents:
diff changeset
   723
        TPtr ptr = iCaptionText->Des();
hgs
parents:
diff changeset
   724
        aCaption.Copy( ptr ); 
hgs
parents:
diff changeset
   725
        }                   
hgs
parents:
diff changeset
   726
    }
hgs
parents:
diff changeset
   727
// ---------------------------------------------------------
hgs
parents:
diff changeset
   728
// CMsgBodyControl::SetIcfPromptTextL()
hgs
parents:
diff changeset
   729
// Loads ICF Prompt text of Message Body control
hgs
parents:
diff changeset
   730
// ---------------------------------------------------------
hgs
parents:
diff changeset
   731
//
hgs
parents:
diff changeset
   732
void CMsgBodyControl::SetIcfPromptTextL()
hgs
parents:
diff changeset
   733
    {
hgs
parents:
diff changeset
   734
    
hgs
parents:
diff changeset
   735
    if(iCaptionText)
hgs
parents:
diff changeset
   736
      {
hgs
parents:
diff changeset
   737
      delete iCaptionText;    
hgs
parents:
diff changeset
   738
      iCaptionText = NULL;            
hgs
parents:
diff changeset
   739
      }        
hgs
parents:
diff changeset
   740
    iCaptionText =   StringLoader::LoadLC( R_QTN_MSG_ICF_PROMPT_TEXT_MESSAGE, iCoeEnv );              
hgs
parents:
diff changeset
   741
    CleanupStack::Pop( iCaptionText );
hgs
parents:
diff changeset
   742
hgs
parents:
diff changeset
   743
    }
hgs
parents:
diff changeset
   744
hgs
parents:
diff changeset
   745
//  End of File