messagingappbase/msgeditor/viewsrc/MsgExpandableControl.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-2006 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:  MsgExpandableControl 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 <coeinput.h>                      // for TCoeInputCapabilities
hgs
parents:
diff changeset
    23
#include <barsread.h>                      // for TResourceReader
hgs
parents:
diff changeset
    24
#include <eiklabel.h>                      // for CEikLabel
hgs
parents:
diff changeset
    25
#include <eikenv.h>                        // for CEikonEnv
hgs
parents:
diff changeset
    26
#include <eikedwin.h>                      // for TClipboardFunc
hgs
parents:
diff changeset
    27
#include <txtrich.h>                       // for CRichText
hgs
parents:
diff changeset
    28
#include <AknUtils.h>                      // for AknUtils
hgs
parents:
diff changeset
    29
#include <aknenv.h>                        // for CAknEnv
hgs
parents:
diff changeset
    30
#include <AknDef.h>
hgs
parents:
diff changeset
    31
#include <AknsUtils.h>                     // for Skinned drawing
hgs
parents:
diff changeset
    32
#include <aknbutton.h>                     // for CAknButton
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
#include <applayout.cdl.h> // LAF
hgs
parents:
diff changeset
    35
#include <aknlayoutscalable_apps.cdl.h>
hgs
parents:
diff changeset
    36
#include <aknlayoutscalable_avkon.cdl.h>
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
#include "MsgEditorCommon.h"               //
hgs
parents:
diff changeset
    39
#include "MsgExpandableControl.h"          // for CMsgExpandableControl
hgs
parents:
diff changeset
    40
#include "MsgExpandableControlEditor.h"    // for CMsgExpandableControlEditor
hgs
parents:
diff changeset
    41
#include "MsgBaseControlObserver.h"        // for MMsgBaseControlObserver
hgs
parents:
diff changeset
    42
#include "MsgEditorPanic.h"                // for CMsgEditor panics
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
_LIT(KMsgDefaultCaption, " ");
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
// ========== MODULE DATA STRUCTURES =======================
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
// ========== LOCAL FUNCTION PROTOTYPES ====================
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
// ========== LOCAL FUNCTIONS ==============================
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
// ========== MEMBER FUNCTIONS =============================
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
// ---------------------------------------------------------
hgs
parents:
diff changeset
    66
// CMsgExpandableControl::CMsgExpandableControl
hgs
parents:
diff changeset
    67
//
hgs
parents:
diff changeset
    68
// Constructor.
hgs
parents:
diff changeset
    69
// ---------------------------------------------------------
hgs
parents:
diff changeset
    70
//
hgs
parents:
diff changeset
    71
EXPORT_C CMsgExpandableControl::CMsgExpandableControl()
hgs
parents:
diff changeset
    72
    {
hgs
parents:
diff changeset
    73
    }
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
// ---------------------------------------------------------
hgs
parents:
diff changeset
    76
// CMsgExpandableControl::CMsgExpandableControl
hgs
parents:
diff changeset
    77
//
hgs
parents:
diff changeset
    78
// Constructor.
hgs
parents:
diff changeset
    79
// ---------------------------------------------------------
hgs
parents:
diff changeset
    80
//
hgs
parents:
diff changeset
    81
EXPORT_C CMsgExpandableControl::CMsgExpandableControl( MMsgBaseControlObserver& aBaseControlObserver ) :
hgs
parents:
diff changeset
    82
    CMsgExpandableTextEditorControl( aBaseControlObserver )
hgs
parents:
diff changeset
    83
    {
hgs
parents:
diff changeset
    84
    }
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
// ---------------------------------------------------------
hgs
parents:
diff changeset
    87
// CMsgExpandableControl::ConstructFromResourceL
hgs
parents:
diff changeset
    88
//
hgs
parents:
diff changeset
    89
// Creates this control from resource.
hgs
parents:
diff changeset
    90
// ---------------------------------------------------------
hgs
parents:
diff changeset
    91
//
hgs
parents:
diff changeset
    92
void CMsgExpandableControl::ConstructFromResourceL( TInt aResourceId )
hgs
parents:
diff changeset
    93
    {
hgs
parents:
diff changeset
    94
    BaseConstructL();  // Sets margins only
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
    TResourceReader reader;
hgs
parents:
diff changeset
    97
    iCoeEnv->CreateResourceReaderLC( reader, aResourceId );
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
    // Create caption
hgs
parents:
diff changeset
   100
    iCaption = CreateCaptionFromResourceL( reader );
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
    // Read control details from resource
hgs
parents:
diff changeset
   103
    ReadControlPropertiesFromResourceL( reader );
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
    // Create editor
hgs
parents:
diff changeset
   106
    iEditor = CreateEditorFromResourceL( reader );
hgs
parents:
diff changeset
   107
    
hgs
parents:
diff changeset
   108
    iEditor->SetControlType(EMsgExpandableControl); 
hgs
parents:
diff changeset
   109
    iCtrltype = EMsgExpandableControl;
hgs
parents:
diff changeset
   110
    iEditor->SetObserver( this );
hgs
parents:
diff changeset
   111
    iEditor->SetEdwinSizeObserver( this );
hgs
parents:
diff changeset
   112
    iEditor->AddEdwinObserverL( this );
hgs
parents:
diff changeset
   113
    iEditor->SetBorder( TGulBorder::ENone );
hgs
parents:
diff changeset
   114
	//Set the flag to enable partial screen 
hgs
parents:
diff changeset
   115
    TInt flags = iEditor->AknEditorFlags();
hgs
parents:
diff changeset
   116
    flags |= EAknEditorFlagEnablePartialScreen;
hgs
parents:
diff changeset
   117
    iEditor->SetAknEditorFlags( flags );     
hgs
parents:
diff changeset
   118
    
hgs
parents:
diff changeset
   119
    SetPlainTextMode( ETrue );
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
    ResolveLayoutsL();
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
    CleanupStack::PopAndDestroy();  // reader
hgs
parents:
diff changeset
   124
    }
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
// ---------------------------------------------------------
hgs
parents:
diff changeset
   127
// CMsgExpandableControl::~CMsgExpandableControl
hgs
parents:
diff changeset
   128
//
hgs
parents:
diff changeset
   129
// Destructor.
hgs
parents:
diff changeset
   130
// ---------------------------------------------------------
hgs
parents:
diff changeset
   131
//
hgs
parents:
diff changeset
   132
EXPORT_C CMsgExpandableControl::~CMsgExpandableControl()
hgs
parents:
diff changeset
   133
    {
hgs
parents:
diff changeset
   134
    AknsUtils::DeregisterControlPosition( iCaption );
hgs
parents:
diff changeset
   135
    delete iCaption;
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   138
    if ( iButton )
hgs
parents:
diff changeset
   139
        {
hgs
parents:
diff changeset
   140
        AknsUtils::DeregisterControlPosition( iButton );
hgs
parents:
diff changeset
   141
        delete iButton;
hgs
parents:
diff changeset
   142
        }    
hgs
parents:
diff changeset
   143
#endif // RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   144
    
hgs
parents:
diff changeset
   145
    AknsUtils::DeregisterControlPosition( iEditor );
hgs
parents:
diff changeset
   146
    delete iEditor;
hgs
parents:
diff changeset
   147
        
hgs
parents:
diff changeset
   148
    AknsUtils::DeregisterControlPosition( this );
hgs
parents:
diff changeset
   149
    }
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
// ---------------------------------------------------------
hgs
parents:
diff changeset
   152
// CMsgExpandableControl::Editor
hgs
parents:
diff changeset
   153
//
hgs
parents:
diff changeset
   154
// Returns a reference to the editor control.
hgs
parents:
diff changeset
   155
// ---------------------------------------------------------
hgs
parents:
diff changeset
   156
//
hgs
parents:
diff changeset
   157
EXPORT_C CEikRichTextEditor& CMsgExpandableControl::Editor() const
hgs
parents:
diff changeset
   158
    {
hgs
parents:
diff changeset
   159
    return *iEditor;
hgs
parents:
diff changeset
   160
    }
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
// ---------------------------------------------------------
hgs
parents:
diff changeset
   163
// CMsgExpandableControl::Caption
hgs
parents:
diff changeset
   164
//
hgs
parents:
diff changeset
   165
// Returns a reference to the label control.
hgs
parents:
diff changeset
   166
// ---------------------------------------------------------
hgs
parents:
diff changeset
   167
//
hgs
parents:
diff changeset
   168
EXPORT_C CEikLabel& CMsgExpandableControl::Caption() const
hgs
parents:
diff changeset
   169
    {
hgs
parents:
diff changeset
   170
    return *iCaption;
hgs
parents:
diff changeset
   171
    }
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
// ---------------------------------------------------------
hgs
parents:
diff changeset
   174
// CMsgExpandableControl::SetTextContentL
hgs
parents:
diff changeset
   175
//
hgs
parents:
diff changeset
   176
// Sets text content to the control editor.
hgs
parents:
diff changeset
   177
// ---------------------------------------------------------
hgs
parents:
diff changeset
   178
//
hgs
parents:
diff changeset
   179
EXPORT_C void CMsgExpandableControl::SetTextContentL( CRichText& aText )
hgs
parents:
diff changeset
   180
    {
hgs
parents:
diff changeset
   181
    iEditor->SetTextContentL( aText );
hgs
parents:
diff changeset
   182
    
hgs
parents:
diff changeset
   183
    if ( iControlModeFlags & EMsgControlModeInitialized )
hgs
parents:
diff changeset
   184
        {
hgs
parents:
diff changeset
   185
        iControlModeFlags |= EMsgControlModeModified;
hgs
parents:
diff changeset
   186
        }
hgs
parents:
diff changeset
   187
    }
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
// ---------------------------------------------------------
hgs
parents:
diff changeset
   190
// CMsgExpandableControl::SetTextContentL
hgs
parents:
diff changeset
   191
//
hgs
parents:
diff changeset
   192
// Sets text content to the control editor.
hgs
parents:
diff changeset
   193
// ---------------------------------------------------------
hgs
parents:
diff changeset
   194
//
hgs
parents:
diff changeset
   195
EXPORT_C void CMsgExpandableControl::SetTextContentL( const TDesC& aText )
hgs
parents:
diff changeset
   196
    {
hgs
parents:
diff changeset
   197
    iEditor->SetTextL( &aText );
hgs
parents:
diff changeset
   198
    
hgs
parents:
diff changeset
   199
    if ( iControlModeFlags & EMsgControlModeInitialized )
hgs
parents:
diff changeset
   200
        {
hgs
parents:
diff changeset
   201
        iControlModeFlags |= EMsgControlModeModified;
hgs
parents:
diff changeset
   202
        }
hgs
parents:
diff changeset
   203
    }
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
// ---------------------------------------------------------
hgs
parents:
diff changeset
   206
// CMsgExpandableControl::TextContentStrippedL
hgs
parents:
diff changeset
   207
//
hgs
parents:
diff changeset
   208
// Copies stripped content to aBuf. Control chars, newlines and if
hgs
parents:
diff changeset
   209
// aNoExtraSemicolons is ETrue, also two consecutive semicolons are
hgs
parents:
diff changeset
   210
// replaced with semicolon and space.
hgs
parents:
diff changeset
   211
// ---------------------------------------------------------
hgs
parents:
diff changeset
   212
//
hgs
parents:
diff changeset
   213
EXPORT_C void CMsgExpandableControl::TextContentStrippedL( TDes& aBuf, 
hgs
parents:
diff changeset
   214
                                                           TInt aMaxLen, 
hgs
parents:
diff changeset
   215
                                                           TBool aNoExtraSemicolons )
hgs
parents:
diff changeset
   216
    {
hgs
parents:
diff changeset
   217
    CRichText& text = TextContent();
hgs
parents:
diff changeset
   218
    TInt len = text.DocumentLength();
hgs
parents:
diff changeset
   219
    HBufC* buf = HBufC::NewLC( len );
hgs
parents:
diff changeset
   220
    TPtr ptr = buf->Des();
hgs
parents:
diff changeset
   221
    text.ExtractSelectively( ptr, 0, len, CPlainText::EExtractVisible );
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
    if ( aNoExtraSemicolons )
hgs
parents:
diff changeset
   224
        {
hgs
parents:
diff changeset
   225
        TText ch0 = 0;
hgs
parents:
diff changeset
   226
        len = ptr.Length();
hgs
parents:
diff changeset
   227
        for (TInt i = 0; i < len; i++)
hgs
parents:
diff changeset
   228
            {
hgs
parents:
diff changeset
   229
            TText& ch1 = ptr[i];
hgs
parents:
diff changeset
   230
            if ( i > 0 )
hgs
parents:
diff changeset
   231
                {
hgs
parents:
diff changeset
   232
                ch0 = ptr[i - 1];
hgs
parents:
diff changeset
   233
                }
hgs
parents:
diff changeset
   234
            if ( ( ch1 == KSemicolon || 
hgs
parents:
diff changeset
   235
                   ch1 == KArabicSemicolon ) && 
hgs
parents:
diff changeset
   236
                 ( ch0 == KSemicolon || 
hgs
parents:
diff changeset
   237
                   ch0 == KArabicSemicolon ) )
hgs
parents:
diff changeset
   238
                {
hgs
parents:
diff changeset
   239
                ch1 = ' ';
hgs
parents:
diff changeset
   240
                }
hgs
parents:
diff changeset
   241
            }
hgs
parents:
diff changeset
   242
        }
hgs
parents:
diff changeset
   243
hgs
parents:
diff changeset
   244
    ptr.TrimAll();
hgs
parents:
diff changeset
   245
hgs
parents:
diff changeset
   246
    len = ptr.Length();
hgs
parents:
diff changeset
   247
    if ( len > aMaxLen )
hgs
parents:
diff changeset
   248
        {
hgs
parents:
diff changeset
   249
        ptr.Delete( aMaxLen, len - aMaxLen );
hgs
parents:
diff changeset
   250
        }
hgs
parents:
diff changeset
   251
hgs
parents:
diff changeset
   252
    aBuf.Copy( ptr );
hgs
parents:
diff changeset
   253
hgs
parents:
diff changeset
   254
    CleanupStack::PopAndDestroy( buf );
hgs
parents:
diff changeset
   255
    }
hgs
parents:
diff changeset
   256
hgs
parents:
diff changeset
   257
// ---------------------------------------------------------
hgs
parents:
diff changeset
   258
// CMsgExpandableControl::NotifyViewEvent
hgs
parents:
diff changeset
   259
//
hgs
parents:
diff changeset
   260
// Notifies editor about the scroll event.
hgs
parents:
diff changeset
   261
// ---------------------------------------------------------
hgs
parents:
diff changeset
   262
//
hgs
parents:
diff changeset
   263
void CMsgExpandableControl::NotifyViewEvent( TMsgViewEvent aEvent, TInt aParam )
hgs
parents:
diff changeset
   264
    {
hgs
parents:
diff changeset
   265
    TRAP_IGNORE( DoNotifyViewEventL( aEvent, aParam ) );
hgs
parents:
diff changeset
   266
    }
hgs
parents:
diff changeset
   267
hgs
parents:
diff changeset
   268
// ---------------------------------------------------------
hgs
parents:
diff changeset
   269
// CMsgExpandableControl::DoNotifyViewEventL
hgs
parents:
diff changeset
   270
// ---------------------------------------------------------
hgs
parents:
diff changeset
   271
//
hgs
parents:
diff changeset
   272
void CMsgExpandableControl::DoNotifyViewEventL( TMsgViewEvent aEvent, TInt aParam )
hgs
parents:
diff changeset
   273
    {
hgs
parents:
diff changeset
   274
    switch ( aEvent )
hgs
parents:
diff changeset
   275
        {
hgs
parents:
diff changeset
   276
        case EMsgViewEventPrepareFocusTransitionUp:
hgs
parents:
diff changeset
   277
            {
hgs
parents:
diff changeset
   278
            if ( IsFocused() )
hgs
parents:
diff changeset
   279
                {
hgs
parents:
diff changeset
   280
                iEditor->ClearSelectionL();
hgs
parents:
diff changeset
   281
                }
hgs
parents:
diff changeset
   282
            break;
hgs
parents:
diff changeset
   283
            }
hgs
parents:
diff changeset
   284
        case EMsgViewEventPrepareFocusTransitionDown:
hgs
parents:
diff changeset
   285
            {
hgs
parents:
diff changeset
   286
            if ( IsFocused() )
hgs
parents:
diff changeset
   287
                {
hgs
parents:
diff changeset
   288
                iEditor->ClearSelectionL();
hgs
parents:
diff changeset
   289
                }
hgs
parents:
diff changeset
   290
            break;
hgs
parents:
diff changeset
   291
            }
hgs
parents:
diff changeset
   292
        case EMsgViewEventSetCursorFirstPos:
hgs
parents:
diff changeset
   293
            {
hgs
parents:
diff changeset
   294
            if ( iEditor->TextView() )
hgs
parents:
diff changeset
   295
                {
hgs
parents:
diff changeset
   296
                if ( IsReadOnly() )
hgs
parents:
diff changeset
   297
                    {
hgs
parents:
diff changeset
   298
                    // Do not set document position if autohightlight is
hgs
parents:
diff changeset
   299
                    // used as it cancels current hightlight if used.
hgs
parents:
diff changeset
   300
                    if ( !( aParam & EMsgViewEventAutoHighlight ) )
hgs
parents:
diff changeset
   301
                        {
hgs
parents:
diff changeset
   302
                        iEditor->SetCursorPosL( 0, EFalse );
hgs
parents:
diff changeset
   303
                        }
hgs
parents:
diff changeset
   304
                    }
hgs
parents:
diff changeset
   305
                else
hgs
parents:
diff changeset
   306
                    {
hgs
parents:
diff changeset
   307
                    if ( !iEditor->CursorInFirstLine() )
hgs
parents:
diff changeset
   308
                        {
hgs
parents:
diff changeset
   309
                        iEditor->SetCursorPosL( 0, EFalse );
hgs
parents:
diff changeset
   310
                        }
hgs
parents:
diff changeset
   311
                    }
hgs
parents:
diff changeset
   312
                }
hgs
parents:
diff changeset
   313
            break;
hgs
parents:
diff changeset
   314
            }
hgs
parents:
diff changeset
   315
        case EMsgViewEventSetCursorLastPos:
hgs
parents:
diff changeset
   316
            {
hgs
parents:
diff changeset
   317
            if ( iEditor->TextView() )
hgs
parents:
diff changeset
   318
                {
hgs
parents:
diff changeset
   319
                TInt len = iEditor->TextLength();
hgs
parents:
diff changeset
   320
                
hgs
parents:
diff changeset
   321
                if ( IsReadOnly() )
hgs
parents:
diff changeset
   322
                    {
hgs
parents:
diff changeset
   323
                    // Do not set document position if autohightlight is
hgs
parents:
diff changeset
   324
                    // used as it cancels current hightlight if used.
hgs
parents:
diff changeset
   325
                    if ( !( aParam & EMsgViewEventAutoHighlight ) )
hgs
parents:
diff changeset
   326
                        {
hgs
parents:
diff changeset
   327
                        iEditor->SetCursorPosL( len, EFalse );
hgs
parents:
diff changeset
   328
                        }
hgs
parents:
diff changeset
   329
                    }
hgs
parents:
diff changeset
   330
                else
hgs
parents:
diff changeset
   331
                    {
hgs
parents:
diff changeset
   332
                    if ( !iEditor->CursorInLastLine() )
hgs
parents:
diff changeset
   333
                        {
hgs
parents:
diff changeset
   334
                        iEditor->SetCursorPosL( len, EFalse );
hgs
parents:
diff changeset
   335
                        }
hgs
parents:
diff changeset
   336
                    }
hgs
parents:
diff changeset
   337
                }
hgs
parents:
diff changeset
   338
            break;
hgs
parents:
diff changeset
   339
            }
hgs
parents:
diff changeset
   340
        case EMsgViewEventPrepareForViewing:
hgs
parents:
diff changeset
   341
            {    
hgs
parents:
diff changeset
   342
            /*
hgs
parents:
diff changeset
   343
            iEditor->SetSuppressFormatting( EFalse );
hgs
parents:
diff changeset
   344
            iEditor->NotifyNewFormatL();
hgs
parents:
diff changeset
   345
            */
hgs
parents:
diff changeset
   346
            }
hgs
parents:
diff changeset
   347
        default:
hgs
parents:
diff changeset
   348
            {
hgs
parents:
diff changeset
   349
            break;
hgs
parents:
diff changeset
   350
            }
hgs
parents:
diff changeset
   351
        }
hgs
parents:
diff changeset
   352
    }
hgs
parents:
diff changeset
   353
hgs
parents:
diff changeset
   354
// ---------------------------------------------------------
hgs
parents:
diff changeset
   355
// CMsgExpandableControl::Reset
hgs
parents:
diff changeset
   356
//
hgs
parents:
diff changeset
   357
// Reset contents of the editor.
hgs
parents:
diff changeset
   358
// ---------------------------------------------------------
hgs
parents:
diff changeset
   359
//
hgs
parents:
diff changeset
   360
EXPORT_C void CMsgExpandableControl::Reset()
hgs
parents:
diff changeset
   361
    {
hgs
parents:
diff changeset
   362
    iEditor->Reset();
hgs
parents:
diff changeset
   363
    iControlModeFlags |= EMsgControlModeModified;
hgs
parents:
diff changeset
   364
    }
hgs
parents:
diff changeset
   365
hgs
parents:
diff changeset
   366
// ---------------------------------------------------------
hgs
parents:
diff changeset
   367
// CMsgExpandableControl::SetAndGetSizeL
hgs
parents:
diff changeset
   368
//
hgs
parents:
diff changeset
   369
// Sets sizes for the caption and control according to aSize.
hgs
parents:
diff changeset
   370
// ---------------------------------------------------------
hgs
parents:
diff changeset
   371
//
hgs
parents:
diff changeset
   372
EXPORT_C void CMsgExpandableControl::SetAndGetSizeL( TSize& aSize )
hgs
parents:
diff changeset
   373
    {   
hgs
parents:
diff changeset
   374
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   375
    
hgs
parents:
diff changeset
   376
    iCaption->SetSize( iCaptionLayout.TextRect().Size() );
hgs
parents:
diff changeset
   377
    
hgs
parents:
diff changeset
   378
    if ( iButton )
hgs
parents:
diff changeset
   379
        {
hgs
parents:
diff changeset
   380
        iButton->SetSize( iButtonLayout.Rect().Size() );
hgs
parents:
diff changeset
   381
        }
hgs
parents:
diff changeset
   382
#else
hgs
parents:
diff changeset
   383
    iCaption->SetSize( iCaptionLayout.TextRect().Size() );
hgs
parents:
diff changeset
   384
#endif // RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   385
    
hgs
parents:
diff changeset
   386
    TSize editorSize( iEditorLayout.TextRect().Width(),
hgs
parents:
diff changeset
   387
                      iBaseControlObserver->ViewRect().Height() );    
hgs
parents:
diff changeset
   388
    iEditor->SetAndGetSizeL( editorSize );
hgs
parents:
diff changeset
   389
    
hgs
parents:
diff changeset
   390
    TSize thisSize( aSize.iWidth, 0 );
hgs
parents:
diff changeset
   391
    if( iEditor->TextLayout() && iEditor->TextLayout()->IsFormattingBand( ) )
hgs
parents:
diff changeset
   392
        {
hgs
parents:
diff changeset
   393
        thisSize.iHeight = MsgEditorCommons::MaxBodyHeight( );
hgs
parents:
diff changeset
   394
        }
hgs
parents:
diff changeset
   395
    else
hgs
parents:
diff changeset
   396
        {
hgs
parents:
diff changeset
   397
        thisSize.iHeight = iSize.iHeight;
hgs
parents:
diff changeset
   398
        }
hgs
parents:
diff changeset
   399
    
hgs
parents:
diff changeset
   400
    // Control height is always atleast one line height
hgs
parents:
diff changeset
   401
    thisSize.iHeight = Max( MsgEditorCommons::MsgBaseLineDelta(), thisSize.iHeight );
hgs
parents:
diff changeset
   402
        
hgs
parents:
diff changeset
   403
    SetSizeWithoutNotification( thisSize );
hgs
parents:
diff changeset
   404
    aSize = iSize;
hgs
parents:
diff changeset
   405
    }
hgs
parents:
diff changeset
   406
hgs
parents:
diff changeset
   407
// ---------------------------------------------------------
hgs
parents:
diff changeset
   408
// CMsgExpandableControl::IsFocusChangePossible
hgs
parents:
diff changeset
   409
//
hgs
parents:
diff changeset
   410
// Checks if focus up or down depending on aDirection is possible and returns
hgs
parents:
diff changeset
   411
// ETrue if it is.
hgs
parents:
diff changeset
   412
// ---------------------------------------------------------
hgs
parents:
diff changeset
   413
//
hgs
parents:
diff changeset
   414
EXPORT_C TBool CMsgExpandableControl::IsFocusChangePossible( TMsgFocusDirection aDirection ) const
hgs
parents:
diff changeset
   415
    {
hgs
parents:
diff changeset
   416
    switch ( aDirection )
hgs
parents:
diff changeset
   417
        {
hgs
parents:
diff changeset
   418
        case EMsgFocusUp:
hgs
parents:
diff changeset
   419
            {
hgs
parents:
diff changeset
   420
            if ( IsReadOnly() )
hgs
parents:
diff changeset
   421
                {
hgs
parents:
diff changeset
   422
                return iEditor->IsFirstLineVisible();
hgs
parents:
diff changeset
   423
                }
hgs
parents:
diff changeset
   424
            else
hgs
parents:
diff changeset
   425
                {
hgs
parents:
diff changeset
   426
                return IsCursorLocation( EMsgTop );
hgs
parents:
diff changeset
   427
                }
hgs
parents:
diff changeset
   428
            }
hgs
parents:
diff changeset
   429
        case EMsgFocusDown:
hgs
parents:
diff changeset
   430
            {
hgs
parents:
diff changeset
   431
            if ( IsReadOnly() )
hgs
parents:
diff changeset
   432
                {
hgs
parents:
diff changeset
   433
                return iEditor->IsLastLineVisible();
hgs
parents:
diff changeset
   434
                }
hgs
parents:
diff changeset
   435
            else
hgs
parents:
diff changeset
   436
                {
hgs
parents:
diff changeset
   437
                return IsCursorLocation( EMsgBottom );
hgs
parents:
diff changeset
   438
                }
hgs
parents:
diff changeset
   439
            }
hgs
parents:
diff changeset
   440
        default:
hgs
parents:
diff changeset
   441
            {
hgs
parents:
diff changeset
   442
            break;
hgs
parents:
diff changeset
   443
            }
hgs
parents:
diff changeset
   444
        }
hgs
parents:
diff changeset
   445
hgs
parents:
diff changeset
   446
    return EFalse;
hgs
parents:
diff changeset
   447
    }
hgs
parents:
diff changeset
   448
hgs
parents:
diff changeset
   449
// ---------------------------------------------------------
hgs
parents:
diff changeset
   450
// CMsgExpandableControl::SetContainerWindowL
hgs
parents:
diff changeset
   451
//
hgs
parents:
diff changeset
   452
// Sets container window.
hgs
parents:
diff changeset
   453
// ---------------------------------------------------------
hgs
parents:
diff changeset
   454
//
hgs
parents:
diff changeset
   455
EXPORT_C void CMsgExpandableControl::SetContainerWindowL( const CCoeControl& aContainer )
hgs
parents:
diff changeset
   456
    {
hgs
parents:
diff changeset
   457
    CCoeControl::SetContainerWindowL( aContainer );
hgs
parents:
diff changeset
   458
    
hgs
parents:
diff changeset
   459
    iCaption->SetContainerWindowL( *this );
hgs
parents:
diff changeset
   460
    iEditor->SetContainerWindowL( *this );
hgs
parents:
diff changeset
   461
hgs
parents:
diff changeset
   462
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   463
    if ( iButton )
hgs
parents:
diff changeset
   464
        {
hgs
parents:
diff changeset
   465
        iButton->SetContainerWindowL( *this );
hgs
parents:
diff changeset
   466
        }
hgs
parents:
diff changeset
   467
#endif // RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   468
    }
hgs
parents:
diff changeset
   469
hgs
parents:
diff changeset
   470
// ---------------------------------------------------------
hgs
parents:
diff changeset
   471
// CMsgExpandableControl::OfferKeyEventL
hgs
parents:
diff changeset
   472
//
hgs
parents:
diff changeset
   473
// Handles key events.
hgs
parents:
diff changeset
   474
// ---------------------------------------------------------
hgs
parents:
diff changeset
   475
//
hgs
parents:
diff changeset
   476
EXPORT_C TKeyResponse CMsgExpandableControl::OfferKeyEventL( const TKeyEvent& aKeyEvent, 
hgs
parents:
diff changeset
   477
                                                             TEventCode aType )
hgs
parents:
diff changeset
   478
    {
hgs
parents:
diff changeset
   479
    return iEditor->OfferKeyEventL( aKeyEvent, aType );
hgs
parents:
diff changeset
   480
    }
hgs
parents:
diff changeset
   481
hgs
parents:
diff changeset
   482
// ---------------------------------------------------------
hgs
parents:
diff changeset
   483
// CMsgExpandableControl::MinimumSize
hgs
parents:
diff changeset
   484
//
hgs
parents:
diff changeset
   485
//
hgs
parents:
diff changeset
   486
// ---------------------------------------------------------
hgs
parents:
diff changeset
   487
//
hgs
parents:
diff changeset
   488
EXPORT_C TSize CMsgExpandableControl::MinimumSize()
hgs
parents:
diff changeset
   489
    {
hgs
parents:
diff changeset
   490
    return TSize( iSize.iWidth,
hgs
parents:
diff changeset
   491
                  iEditor->MinimumDefaultHeight() + iMargins.iTop + iMargins.iBottom );
hgs
parents:
diff changeset
   492
    }
hgs
parents:
diff changeset
   493
hgs
parents:
diff changeset
   494
// ---------------------------------------------------------
hgs
parents:
diff changeset
   495
// CMsgExpandableControl::InputCapabilities
hgs
parents:
diff changeset
   496
//
hgs
parents:
diff changeset
   497
// Returns input capabilities.
hgs
parents:
diff changeset
   498
// ---------------------------------------------------------
hgs
parents:
diff changeset
   499
//
hgs
parents:
diff changeset
   500
EXPORT_C TCoeInputCapabilities CMsgExpandableControl::InputCapabilities() const
hgs
parents:
diff changeset
   501
    {
hgs
parents:
diff changeset
   502
    if ( iEditor->IsFocused() )
hgs
parents:
diff changeset
   503
        {
hgs
parents:
diff changeset
   504
        TCoeInputCapabilities inputCapabilities( TCoeInputCapabilities::ENone, 
hgs
parents:
diff changeset
   505
                                                 NULL, 
hgs
parents:
diff changeset
   506
                                                 const_cast<CMsgExpandableControl*>( this ) );
hgs
parents:
diff changeset
   507
        inputCapabilities.MergeWith( iEditor->InputCapabilities() );
hgs
parents:
diff changeset
   508
        
hgs
parents:
diff changeset
   509
        return inputCapabilities;
hgs
parents:
diff changeset
   510
        }
hgs
parents:
diff changeset
   511
    else
hgs
parents:
diff changeset
   512
        {
hgs
parents:
diff changeset
   513
        return TCoeInputCapabilities::ENone;
hgs
parents:
diff changeset
   514
        }
hgs
parents:
diff changeset
   515
    }
hgs
parents:
diff changeset
   516
hgs
parents:
diff changeset
   517
// ---------------------------------------------------------
hgs
parents:
diff changeset
   518
// CMsgExpandableControl::HandleResourceChange
hgs
parents:
diff changeset
   519
//
hgs
parents:
diff changeset
   520
// Updates caption text color if skin is changed.
hgs
parents:
diff changeset
   521
// ---------------------------------------------------------
hgs
parents:
diff changeset
   522
//
hgs
parents:
diff changeset
   523
EXPORT_C void CMsgExpandableControl::HandleResourceChange( TInt aType )
hgs
parents:
diff changeset
   524
    {
hgs
parents:
diff changeset
   525
    if ( aType == KEikDynamicLayoutVariantSwitch )
hgs
parents:
diff changeset
   526
        {
hgs
parents:
diff changeset
   527
        TRAP_IGNORE( ResolveLayoutsL() );
hgs
parents:
diff changeset
   528
        }
hgs
parents:
diff changeset
   529
        
hgs
parents:
diff changeset
   530
    CMsgExpandableTextEditorControl::HandleResourceChange( aType );
hgs
parents:
diff changeset
   531
    
hgs
parents:
diff changeset
   532
    // Control size can be updated only after editor has updated
hgs
parents:
diff changeset
   533
    // virtual height accordong to current font
hgs
parents:
diff changeset
   534
    if ( aType == KEikDynamicLayoutVariantSwitch )
hgs
parents:
diff changeset
   535
        {
hgs
parents:
diff changeset
   536
        // Control height can change if new layout uses
hgs
parents:
diff changeset
   537
        // font with different height. After HandleResourceChange
hgs
parents:
diff changeset
   538
        // controls must know their correct height because
hgs
parents:
diff changeset
   539
        // control distances are adjusted related to other controls
hgs
parents:
diff changeset
   540
        // before GetAndSetSize is called. This is the reason why
hgs
parents:
diff changeset
   541
        // this must be done here.
hgs
parents:
diff changeset
   542
        TSize desirableSize( iEditorLayout.TextRect().Width(), 
hgs
parents:
diff changeset
   543
                             iEditor->VirtualHeight() );
hgs
parents:
diff changeset
   544
        
hgs
parents:
diff changeset
   545
        if ( desirableSize.iHeight != Size().iHeight )
hgs
parents:
diff changeset
   546
            {
hgs
parents:
diff changeset
   547
            TInt maxBodyHeight( iMaxBodyHeight );
hgs
parents:
diff changeset
   548
hgs
parents:
diff changeset
   549
            if ( desirableSize.iHeight > maxBodyHeight )
hgs
parents:
diff changeset
   550
                {
hgs
parents:
diff changeset
   551
                desirableSize.iHeight = maxBodyHeight;
hgs
parents:
diff changeset
   552
                }
hgs
parents:
diff changeset
   553
            
hgs
parents:
diff changeset
   554
            SetSizeWithoutNotification( desirableSize );
hgs
parents:
diff changeset
   555
            
hgs
parents:
diff changeset
   556
            TRAP_IGNORE( iEditor->SetAndGetSizeL( desirableSize ) ); 
hgs
parents:
diff changeset
   557
            }
hgs
parents:
diff changeset
   558
        }
hgs
parents:
diff changeset
   559
    else if ( aType == KAknsMessageSkinChange )
hgs
parents:
diff changeset
   560
        {   
hgs
parents:
diff changeset
   561
        TRAP_IGNORE( UpdateCaptionTextColorL() );
hgs
parents:
diff changeset
   562
        }
hgs
parents:
diff changeset
   563
    }
hgs
parents:
diff changeset
   564
hgs
parents:
diff changeset
   565
// ---------------------------------------------------------
hgs
parents:
diff changeset
   566
// CMsgExpandableControl::HandleControlEventL
hgs
parents:
diff changeset
   567
//
hgs
parents:
diff changeset
   568
//
hgs
parents:
diff changeset
   569
// ---------------------------------------------------------
hgs
parents:
diff changeset
   570
//
hgs
parents:
diff changeset
   571
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   572
EXPORT_C void CMsgExpandableControl::HandleControlEventL( CCoeControl* aControl, 
hgs
parents:
diff changeset
   573
                                                          TCoeEvent aEventType )
hgs
parents:
diff changeset
   574
    {
hgs
parents:
diff changeset
   575
    CMsgExpandableTextEditorControl::HandleControlEventL( aControl, aEventType );
hgs
parents:
diff changeset
   576
    
hgs
parents:
diff changeset
   577
    if ( aEventType == MCoeControlObserver::EEventStateChanged &&
hgs
parents:
diff changeset
   578
         iButton && 
hgs
parents:
diff changeset
   579
         aControl == iButton)
hgs
parents:
diff changeset
   580
        {
hgs
parents:
diff changeset
   581
        iBaseControlObserver->HandleEditObserverEventRequestL( this, EMsgButtonPressed, this );
hgs
parents:
diff changeset
   582
        }
hgs
parents:
diff changeset
   583
    }
hgs
parents:
diff changeset
   584
#else
hgs
parents:
diff changeset
   585
EXPORT_C void CMsgExpandableControl::HandleControlEventL( CCoeControl* aControl, 
hgs
parents:
diff changeset
   586
                                                          TCoeEvent aEventType )
hgs
parents:
diff changeset
   587
    {
hgs
parents:
diff changeset
   588
    CMsgExpandableTextEditorControl::HandleControlEventL( aControl, aEventType );
hgs
parents:
diff changeset
   589
    }
hgs
parents:
diff changeset
   590
#endif // RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   591
hgs
parents:
diff changeset
   592
// ---------------------------------------------------------
hgs
parents:
diff changeset
   593
// CMsgExpandableControl::CreateEditorL
hgs
parents:
diff changeset
   594
//
hgs
parents:
diff changeset
   595
// Creates the editor for the control.
hgs
parents:
diff changeset
   596
// ---------------------------------------------------------
hgs
parents:
diff changeset
   597
//
hgs
parents:
diff changeset
   598
CMsgExpandableControlEditor* CMsgExpandableControl::CreateEditorL()
hgs
parents:
diff changeset
   599
    {
hgs
parents:
diff changeset
   600
    // Create control editor
hgs
parents:
diff changeset
   601
    CMsgExpandableControlEditor* editor = 
hgs
parents:
diff changeset
   602
                        new ( ELeave ) CMsgExpandableControlEditor( this, 
hgs
parents:
diff changeset
   603
                                                                    iControlModeFlags, 
hgs
parents:
diff changeset
   604
                                                                    iBaseControlObserver );
hgs
parents:
diff changeset
   605
hgs
parents:
diff changeset
   606
    CleanupStack::PushL( editor );
hgs
parents:
diff changeset
   607
    editor->ConstructL();
hgs
parents:
diff changeset
   608
    CleanupStack::Pop( editor );
hgs
parents:
diff changeset
   609
hgs
parents:
diff changeset
   610
    return editor;
hgs
parents:
diff changeset
   611
    }
hgs
parents:
diff changeset
   612
hgs
parents:
diff changeset
   613
// ---------------------------------------------------------
hgs
parents:
diff changeset
   614
// CMsgExpandableControl::ReadControlPropertiesFromResourceL
hgs
parents:
diff changeset
   615
//
hgs
parents:
diff changeset
   616
// Reads control properties from resource.
hgs
parents:
diff changeset
   617
// ---------------------------------------------------------
hgs
parents:
diff changeset
   618
//
hgs
parents:
diff changeset
   619
void CMsgExpandableControl::ReadControlPropertiesFromResourceL( TResourceReader& aReader )
hgs
parents:
diff changeset
   620
    {
hgs
parents:
diff changeset
   621
    iControlModeFlags = aReader.ReadUint32();
hgs
parents:
diff changeset
   622
    iControlId = aReader.ReadInt32();
hgs
parents:
diff changeset
   623
    iDistanceFromComponentAbove = aReader.ReadInt32();
hgs
parents:
diff changeset
   624
    iMaxNumberOfChars = aReader.ReadInt32();
hgs
parents:
diff changeset
   625
    }
hgs
parents:
diff changeset
   626
hgs
parents:
diff changeset
   627
// ---------------------------------------------------------
hgs
parents:
diff changeset
   628
// CMsgExpandableControl::CreateCaptionFromResourceL
hgs
parents:
diff changeset
   629
//
hgs
parents:
diff changeset
   630
// Creates caption for the control from resource.
hgs
parents:
diff changeset
   631
// ---------------------------------------------------------
hgs
parents:
diff changeset
   632
//
hgs
parents:
diff changeset
   633
CEikLabel* CMsgExpandableControl::CreateCaptionFromResourceL( TResourceReader& aReader )
hgs
parents:
diff changeset
   634
    {
hgs
parents:
diff changeset
   635
    CEikLabel* caption = new ( ELeave ) CEikLabel;
hgs
parents:
diff changeset
   636
    CleanupStack::PushL( caption );
hgs
parents:
diff changeset
   637
hgs
parents:
diff changeset
   638
    HBufC* captionText = aReader.ReadHBufCL();
hgs
parents:
diff changeset
   639
    
hgs
parents:
diff changeset
   640
    if ( captionText == NULL )
hgs
parents:
diff changeset
   641
        {
hgs
parents:
diff changeset
   642
        caption->SetTextL( KMsgDefaultCaption );
hgs
parents:
diff changeset
   643
        }
hgs
parents:
diff changeset
   644
    else
hgs
parents:
diff changeset
   645
        {
hgs
parents:
diff changeset
   646
        CleanupStack::PushL( captionText );
hgs
parents:
diff changeset
   647
        caption->SetTextL( *captionText );
hgs
parents:
diff changeset
   648
        CleanupStack::PopAndDestroy( captionText );
hgs
parents:
diff changeset
   649
        }
hgs
parents:
diff changeset
   650
hgs
parents:
diff changeset
   651
    caption->CropText();
hgs
parents:
diff changeset
   652
    
hgs
parents:
diff changeset
   653
    CleanupStack::Pop( caption );
hgs
parents:
diff changeset
   654
hgs
parents:
diff changeset
   655
    return caption;
hgs
parents:
diff changeset
   656
    }
hgs
parents:
diff changeset
   657
hgs
parents:
diff changeset
   658
// ---------------------------------------------------------
hgs
parents:
diff changeset
   659
// CMsgExpandableControl::CreateEditorFromResourceL
hgs
parents:
diff changeset
   660
//
hgs
parents:
diff changeset
   661
// This virtual function does nothing but inherited function of this creates
hgs
parents:
diff changeset
   662
// the editor for the control from resource.
hgs
parents:
diff changeset
   663
// ---------------------------------------------------------
hgs
parents:
diff changeset
   664
//
hgs
parents:
diff changeset
   665
CMsgExpandableControlEditor* CMsgExpandableControl::CreateEditorFromResourceL( TResourceReader& aReader )
hgs
parents:
diff changeset
   666
    {
hgs
parents:
diff changeset
   667
    CMsgExpandableControlEditor* editor = 
hgs
parents:
diff changeset
   668
            new ( ELeave ) CMsgExpandableControlEditor( this, 
hgs
parents:
diff changeset
   669
                                                        iControlModeFlags, 
hgs
parents:
diff changeset
   670
                                                        iBaseControlObserver );
hgs
parents:
diff changeset
   671
hgs
parents:
diff changeset
   672
    CleanupStack::PushL( editor );
hgs
parents:
diff changeset
   673
    editor->SetMaxNumberOfChars( iMaxNumberOfChars );
hgs
parents:
diff changeset
   674
    editor->ConstructFromResourceL( aReader );
hgs
parents:
diff changeset
   675
    CleanupStack::Pop( editor );
hgs
parents:
diff changeset
   676
hgs
parents:
diff changeset
   677
    return editor;
hgs
parents:
diff changeset
   678
    }
hgs
parents:
diff changeset
   679
hgs
parents:
diff changeset
   680
// ---------------------------------------------------------
hgs
parents:
diff changeset
   681
// CMsgExpandableControl::PrepareForReadOnly
hgs
parents:
diff changeset
   682
//
hgs
parents:
diff changeset
   683
// Prepares read only or non read only state.
hgs
parents:
diff changeset
   684
// ---------------------------------------------------------
hgs
parents:
diff changeset
   685
//
hgs
parents:
diff changeset
   686
void CMsgExpandableControl::PrepareForReadOnly( TBool aReadOnly )
hgs
parents:
diff changeset
   687
    {
hgs
parents:
diff changeset
   688
    TRAP_IGNORE( iEditor->PrepareForReadOnlyL( aReadOnly ) );
hgs
parents:
diff changeset
   689
    }
hgs
parents:
diff changeset
   690
hgs
parents:
diff changeset
   691
// ---------------------------------------------------------
hgs
parents:
diff changeset
   692
// CMsgExpandableControl::CountComponentControls
hgs
parents:
diff changeset
   693
//
hgs
parents:
diff changeset
   694
// Returns a number of controls.
hgs
parents:
diff changeset
   695
// ---------------------------------------------------------
hgs
parents:
diff changeset
   696
//
hgs
parents:
diff changeset
   697
EXPORT_C TInt CMsgExpandableControl::CountComponentControls() const
hgs
parents:
diff changeset
   698
    {
hgs
parents:
diff changeset
   699
    CCoeControl* labelControl = NULL;
hgs
parents:
diff changeset
   700
    
hgs
parents:
diff changeset
   701
    if ( iButton )
hgs
parents:
diff changeset
   702
        {
hgs
parents:
diff changeset
   703
        labelControl = iButton;
hgs
parents:
diff changeset
   704
        }
hgs
parents:
diff changeset
   705
    else
hgs
parents:
diff changeset
   706
        {
hgs
parents:
diff changeset
   707
        labelControl = iCaption;
hgs
parents:
diff changeset
   708
        }
hgs
parents:
diff changeset
   709
        
hgs
parents:
diff changeset
   710
    CCoeControl* controls[] = { labelControl, iEditor };
hgs
parents:
diff changeset
   711
hgs
parents:
diff changeset
   712
    TInt count = 0;
hgs
parents:
diff changeset
   713
    for ( TUint ii = 0; ii < sizeof( controls ) / sizeof( CCoeControl* ); ii++ )
hgs
parents:
diff changeset
   714
        {
hgs
parents:
diff changeset
   715
        if ( controls[ii] )
hgs
parents:
diff changeset
   716
            {
hgs
parents:
diff changeset
   717
            count++;
hgs
parents:
diff changeset
   718
            }
hgs
parents:
diff changeset
   719
        }
hgs
parents:
diff changeset
   720
hgs
parents:
diff changeset
   721
    return count;
hgs
parents:
diff changeset
   722
    }
hgs
parents:
diff changeset
   723
hgs
parents:
diff changeset
   724
// ---------------------------------------------------------
hgs
parents:
diff changeset
   725
// CMsgExpandableControl::ComponentControl
hgs
parents:
diff changeset
   726
//
hgs
parents:
diff changeset
   727
// Returns a control of index aIndex.
hgs
parents:
diff changeset
   728
// ---------------------------------------------------------
hgs
parents:
diff changeset
   729
//
hgs
parents:
diff changeset
   730
EXPORT_C CCoeControl* CMsgExpandableControl::ComponentControl( TInt aIndex ) const
hgs
parents:
diff changeset
   731
    {
hgs
parents:
diff changeset
   732
    CCoeControl* labelControl = NULL;
hgs
parents:
diff changeset
   733
    
hgs
parents:
diff changeset
   734
    if ( iButton )
hgs
parents:
diff changeset
   735
        {
hgs
parents:
diff changeset
   736
        labelControl = iButton;
hgs
parents:
diff changeset
   737
        }
hgs
parents:
diff changeset
   738
    else
hgs
parents:
diff changeset
   739
        {
hgs
parents:
diff changeset
   740
        labelControl = iCaption;
hgs
parents:
diff changeset
   741
        }
hgs
parents:
diff changeset
   742
        
hgs
parents:
diff changeset
   743
    CCoeControl* controls[] = { labelControl, iEditor };
hgs
parents:
diff changeset
   744
hgs
parents:
diff changeset
   745
    for ( TUint ii = 0; ii < sizeof( controls ) / sizeof( CCoeControl* ); ii++ )
hgs
parents:
diff changeset
   746
        {
hgs
parents:
diff changeset
   747
        if ( controls[ii] && aIndex-- == 0 )
hgs
parents:
diff changeset
   748
            {
hgs
parents:
diff changeset
   749
            return controls[ii];
hgs
parents:
diff changeset
   750
            }
hgs
parents:
diff changeset
   751
        }
hgs
parents:
diff changeset
   752
hgs
parents:
diff changeset
   753
    return NULL;
hgs
parents:
diff changeset
   754
    }
hgs
parents:
diff changeset
   755
hgs
parents:
diff changeset
   756
// ---------------------------------------------------------
hgs
parents:
diff changeset
   757
// CMsgExpandableControl::SizeChanged
hgs
parents:
diff changeset
   758
//
hgs
parents:
diff changeset
   759
// Sets positions for the caption and the editor.
hgs
parents:
diff changeset
   760
// ---------------------------------------------------------
hgs
parents:
diff changeset
   761
//
hgs
parents:
diff changeset
   762
EXPORT_C void CMsgExpandableControl::SizeChanged()
hgs
parents:
diff changeset
   763
    {
hgs
parents:
diff changeset
   764
    // TODO: No point to do all these calculations every time!
hgs
parents:
diff changeset
   765
hgs
parents:
diff changeset
   766
    MEBLOGGER_ENTERFN("CMsgExpandableControl::SizeChanged");
hgs
parents:
diff changeset
   767
hgs
parents:
diff changeset
   768
    if ( iControlModeFlags & EMsgControlModeSizeChanging )
hgs
parents:
diff changeset
   769
        {
hgs
parents:
diff changeset
   770
        MEBLOGGER_WRITE( "EMsgControlModeSizeChanging" );
hgs
parents:
diff changeset
   771
        }
hgs
parents:
diff changeset
   772
    else
hgs
parents:
diff changeset
   773
        {
hgs
parents:
diff changeset
   774
        TPoint editorPosition( iEditorLayout.TextRect().iTl.iX,
hgs
parents:
diff changeset
   775
                               iPosition.iY + iEditorTop );
hgs
parents:
diff changeset
   776
                               
hgs
parents:
diff changeset
   777
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   778
        
hgs
parents:
diff changeset
   779
        TPoint captionPosition( iCaptionLayout.TextRect().iTl.iX,
hgs
parents:
diff changeset
   780
                                iPosition.iY + iCaptionTop );
hgs
parents:
diff changeset
   781
hgs
parents:
diff changeset
   782
        iCaption->SetPosition( captionPosition );
hgs
parents:
diff changeset
   783
        iCaption->MakeVisible( captionPosition.iY >= 0 );    
hgs
parents:
diff changeset
   784
        
hgs
parents:
diff changeset
   785
        if ( iButton )
hgs
parents:
diff changeset
   786
            {
hgs
parents:
diff changeset
   787
            TPoint buttonPosition( iButtonLayout.Rect().iTl.iX,
hgs
parents:
diff changeset
   788
                                   iPosition.iY + iButtonTop );
hgs
parents:
diff changeset
   789
                                
hgs
parents:
diff changeset
   790
            iButton->SetPosition( buttonPosition );
hgs
parents:
diff changeset
   791
            iButton->MakeVisible( buttonPosition.iY >= 0 );
hgs
parents:
diff changeset
   792
            }
hgs
parents:
diff changeset
   793
#else
hgs
parents:
diff changeset
   794
        TPoint captionPosition( iCaptionLayout.TextRect().iTl.iX,
hgs
parents:
diff changeset
   795
                                iPosition.iY + iCaptionTop );
hgs
parents:
diff changeset
   796
        
hgs
parents:
diff changeset
   797
        iCaption->SetPosition( captionPosition );
hgs
parents:
diff changeset
   798
        iCaption->MakeVisible( captionPosition.iY >= 0 );
hgs
parents:
diff changeset
   799
#endif // RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   800
        
hgs
parents:
diff changeset
   801
        TRect editorRect( editorPosition, iEditor->Size() );
hgs
parents:
diff changeset
   802
        
hgs
parents:
diff changeset
   803
        if ( editorRect != iEditor->Rect() )
hgs
parents:
diff changeset
   804
            {
hgs
parents:
diff changeset
   805
            iEditor->SetRect( editorRect );  // SetPosition cannot be used here
hgs
parents:
diff changeset
   806
            }
hgs
parents:
diff changeset
   807
hgs
parents:
diff changeset
   808
        AknsUtils::RegisterControlPosition( this );
hgs
parents:
diff changeset
   809
        AknsUtils::RegisterControlPosition( iCaption );
hgs
parents:
diff changeset
   810
        
hgs
parents:
diff changeset
   811
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   812
        if ( iButton )
hgs
parents:
diff changeset
   813
            {
hgs
parents:
diff changeset
   814
            AknsUtils::RegisterControlPosition( iButton );
hgs
parents:
diff changeset
   815
            }
hgs
parents:
diff changeset
   816
#endif // RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   817
        
hgs
parents:
diff changeset
   818
        AknsUtils::RegisterControlPosition( iEditor );
hgs
parents:
diff changeset
   819
        }
hgs
parents:
diff changeset
   820
hgs
parents:
diff changeset
   821
    MEBLOGGER_LEAVEFN("CMsgExpandableControl::SizeChanged");
hgs
parents:
diff changeset
   822
    }
hgs
parents:
diff changeset
   823
hgs
parents:
diff changeset
   824
// ---------------------------------------------------------
hgs
parents:
diff changeset
   825
// CMsgExpandableControl::FocusChanged
hgs
parents:
diff changeset
   826
//
hgs
parents:
diff changeset
   827
// This is called when the focus of the control is changed.
hgs
parents:
diff changeset
   828
// ---------------------------------------------------------
hgs
parents:
diff changeset
   829
//
hgs
parents:
diff changeset
   830
EXPORT_C void CMsgExpandableControl::FocusChanged( TDrawNow aDrawNow )
hgs
parents:
diff changeset
   831
    {
hgs
parents:
diff changeset
   832
    iEditor->SetFocus( IsFocused(), aDrawNow );
hgs
parents:
diff changeset
   833
    
hgs
parents:
diff changeset
   834
    if ( aDrawNow == EDrawNow )
hgs
parents:
diff changeset
   835
        {
hgs
parents:
diff changeset
   836
        DrawDeferred();
hgs
parents:
diff changeset
   837
        }
hgs
parents:
diff changeset
   838
    }
hgs
parents:
diff changeset
   839
hgs
parents:
diff changeset
   840
// ---------------------------------------------------------
hgs
parents:
diff changeset
   841
// CMsgExpandableControl::Draw
hgs
parents:
diff changeset
   842
//
hgs
parents:
diff changeset
   843
//
hgs
parents:
diff changeset
   844
// ---------------------------------------------------------
hgs
parents:
diff changeset
   845
//
hgs
parents:
diff changeset
   846
EXPORT_C void CMsgExpandableControl::Draw( const TRect& /*aRect*/ ) const
hgs
parents:
diff changeset
   847
    {
hgs
parents:
diff changeset
   848
    // All drawing is done by iEditor, iCaption and CMsgHeader
hgs
parents:
diff changeset
   849
    // class (and CMsgCaptionedHighlight owned by the header)
hgs
parents:
diff changeset
   850
    }
hgs
parents:
diff changeset
   851
hgs
parents:
diff changeset
   852
// ---------------------------------------------------------
hgs
parents:
diff changeset
   853
// CMsgExpandableControl::ActivateL
hgs
parents:
diff changeset
   854
//
hgs
parents:
diff changeset
   855
// Sets caption text color from skin. This is the only common
hgs
parents:
diff changeset
   856
// synchronization point before the control is drawn to the screen
hgs
parents:
diff changeset
   857
// for expandable control and all the derived classes.
hgs
parents:
diff changeset
   858
// ---------------------------------------------------------
hgs
parents:
diff changeset
   859
//
hgs
parents:
diff changeset
   860
EXPORT_C void CMsgExpandableControl::ActivateL()
hgs
parents:
diff changeset
   861
    {
hgs
parents:
diff changeset
   862
    UpdateCaptionTextColorL();
hgs
parents:
diff changeset
   863
    
hgs
parents:
diff changeset
   864
    CMsgExpandableTextEditorControl::ActivateL();
hgs
parents:
diff changeset
   865
    }
hgs
parents:
diff changeset
   866
hgs
parents:
diff changeset
   867
// ---------------------------------------------------------
hgs
parents:
diff changeset
   868
// CMsgExpandableControl::ResolveLayoutsL
hgs
parents:
diff changeset
   869
//
hgs
parents:
diff changeset
   870
//
hgs
parents:
diff changeset
   871
// ---------------------------------------------------------
hgs
parents:
diff changeset
   872
//
hgs
parents:
diff changeset
   873
void CMsgExpandableControl::ResolveLayoutsL()
hgs
parents:
diff changeset
   874
    {
hgs
parents:
diff changeset
   875
    TAknTextLineLayout editorLineLayout;
hgs
parents:
diff changeset
   876
hgs
parents:
diff changeset
   877
    TAknLayoutRect msgTextPane;
hgs
parents:
diff changeset
   878
    msgTextPane.LayoutRect( MsgEditorCommons::MsgDataPane(),
hgs
parents:
diff changeset
   879
                            AknLayoutScalable_Apps::msg_text_pane( 0 ).LayoutLine() );
hgs
parents:
diff changeset
   880
                            
hgs
parents:
diff changeset
   881
    TAknLayoutRect msgHeaderPane;
hgs
parents:
diff changeset
   882
    msgHeaderPane.LayoutRect( msgTextPane.Rect(),
hgs
parents:
diff changeset
   883
                              AknLayoutScalable_Apps::msg_header_pane().LayoutLine() );
hgs
parents:
diff changeset
   884
                              
hgs
parents:
diff changeset
   885
    // iFrameLayout is not really used with "scalable layouts"
hgs
parents:
diff changeset
   886
    iFrameLayout.LayoutRect( msgHeaderPane.Rect(),
hgs
parents:
diff changeset
   887
                             AknLayoutScalable_Apps::input_focus_pane_cp07().LayoutLine() );
hgs
parents:
diff changeset
   888
                             
hgs
parents:
diff changeset
   889
    iCaptionLayout.LayoutText( msgHeaderPane.Rect(),
hgs
parents:
diff changeset
   890
                               AknLayoutScalable_Apps::msg_header_pane_t1( 0 ).LayoutLine() );
hgs
parents:
diff changeset
   891
                               
hgs
parents:
diff changeset
   892
    editorLineLayout = AknLayoutScalable_Apps::msg_header_pane_t2( 0 ).LayoutLine();
hgs
parents:
diff changeset
   893
    
hgs
parents:
diff changeset
   894
    iEditorLayout.LayoutText( msgHeaderPane.Rect(),
hgs
parents:
diff changeset
   895
                              editorLineLayout );
hgs
parents:
diff changeset
   896
    //partial input in landscape causes rects to overlay when toolbar is invisible
hgs
parents:
diff changeset
   897
    if (iCaptionLayout.TextRect().Intersects(iEditorLayout.TextRect()))
hgs
parents:
diff changeset
   898
        {
hgs
parents:
diff changeset
   899
        TRect headerPane = msgHeaderPane.Rect();
hgs
parents:
diff changeset
   900
		//include toolbar width
hgs
parents:
diff changeset
   901
        if (!AknLayoutUtils::LayoutMirrored())
hgs
parents:
diff changeset
   902
            {
hgs
parents:
diff changeset
   903
            headerPane.iBr.iX -= GetToolBarRect().Width();
hgs
parents:
diff changeset
   904
            }
hgs
parents:
diff changeset
   905
        else
hgs
parents:
diff changeset
   906
            {
hgs
parents:
diff changeset
   907
            headerPane.iTl.iX += GetToolBarRect().Width();
hgs
parents:
diff changeset
   908
            }
hgs
parents:
diff changeset
   909
        
hgs
parents:
diff changeset
   910
        iCaptionLayout.LayoutText( headerPane,
hgs
parents:
diff changeset
   911
                                   AknLayoutScalable_Apps::msg_header_pane_t1( 0 ).LayoutLine() );
hgs
parents:
diff changeset
   912
        }
hgs
parents:
diff changeset
   913
    
hgs
parents:
diff changeset
   914
    iEditorTop = iEditorLayout.TextRect().iTl.iY -
hgs
parents:
diff changeset
   915
                 msgHeaderPane.Rect().iTl.iY;
hgs
parents:
diff changeset
   916
    
hgs
parents:
diff changeset
   917
    iEditor->SetMaximumHeight( MsgEditorCommons::MaxBodyHeight() - iEditorTop * 2 );
hgs
parents:
diff changeset
   918
                                   
hgs
parents:
diff changeset
   919
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   920
    
hgs
parents:
diff changeset
   921
    iCaptionTop = iCaptionLayout.TextRect().iTl.iY - msgHeaderPane.Rect().iTl.iY;
hgs
parents:
diff changeset
   922
hgs
parents:
diff changeset
   923
    iCaption->SetFont( iCaptionLayout.Font() );
hgs
parents:
diff changeset
   924
hgs
parents:
diff changeset
   925
    iCaption->SetAlignment( iCaptionLayout.Align() == CGraphicsContext::ELeft ? EHLeftVTop : 
hgs
parents:
diff changeset
   926
                                                                                EHRightVTop );                    
hgs
parents:
diff changeset
   927
    if ( iButton )
hgs
parents:
diff changeset
   928
        {
hgs
parents:
diff changeset
   929
        iButtonLayout.LayoutRect( msgHeaderPane.Rect(),
hgs
parents:
diff changeset
   930
                                  AknLayoutScalable_Apps::bg_button_pane_cp01().LayoutLine() );
hgs
parents:
diff changeset
   931
        
hgs
parents:
diff changeset
   932
		//partial input in landscape causes rects to overlay when toolbar is invisible
hgs
parents:
diff changeset
   933
        if (iButtonLayout.Rect().Intersects(iEditorLayout.TextRect()))
hgs
parents:
diff changeset
   934
            {
hgs
parents:
diff changeset
   935
            TRect headerPane = msgHeaderPane.Rect();
hgs
parents:
diff changeset
   936
			//include toolbar width
hgs
parents:
diff changeset
   937
            if (!AknLayoutUtils::LayoutMirrored())
hgs
parents:
diff changeset
   938
                {
hgs
parents:
diff changeset
   939
                headerPane.iBr.iX -= GetToolBarRect().Width();
hgs
parents:
diff changeset
   940
                }
hgs
parents:
diff changeset
   941
            else
hgs
parents:
diff changeset
   942
                {
hgs
parents:
diff changeset
   943
                headerPane.iTl.iX += GetToolBarRect().Width();
hgs
parents:
diff changeset
   944
                }
hgs
parents:
diff changeset
   945
            
hgs
parents:
diff changeset
   946
            iButtonLayout.LayoutRect( headerPane,
hgs
parents:
diff changeset
   947
                                      AknLayoutScalable_Apps::bg_button_pane_cp01().LayoutLine() );
hgs
parents:
diff changeset
   948
            }    
hgs
parents:
diff changeset
   949
                              
hgs
parents:
diff changeset
   950
        iButtonTop = iButtonLayout.Rect().iTl.iY - msgHeaderPane.Rect().iTl.iY;
hgs
parents:
diff changeset
   951
        
hgs
parents:
diff changeset
   952
        LayoutButton();
hgs
parents:
diff changeset
   953
        }
hgs
parents:
diff changeset
   954
#else
hgs
parents:
diff changeset
   955
hgs
parents:
diff changeset
   956
    iCaptionTop = iCaptionLayout.TextRect().iTl.iY -
hgs
parents:
diff changeset
   957
                  msgHeaderPane.Rect().iTl.iY;
hgs
parents:
diff changeset
   958
hgs
parents:
diff changeset
   959
    iCaption->SetFont( iCaptionLayout.Font() );
hgs
parents:
diff changeset
   960
    iCaption->SetAlignment( iCaptionLayout.Align() == CGraphicsContext::ELeft ? EHLeftVTop : 
hgs
parents:
diff changeset
   961
                                                                                EHRightVTop );
hgs
parents:
diff changeset
   962
#endif // RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   963
    
hgs
parents:
diff changeset
   964
    iEditor->SetAlignment( editorLineLayout.iJ );
hgs
parents:
diff changeset
   965
    }
hgs
parents:
diff changeset
   966
hgs
parents:
diff changeset
   967
// ---------------------------------------------------------
hgs
parents:
diff changeset
   968
// CMsgExpandableControl::HandleFrameSizeChange
hgs
parents:
diff changeset
   969
// ---------------------------------------------------------
hgs
parents:
diff changeset
   970
//
hgs
parents:
diff changeset
   971
void CMsgExpandableControl::HandleFrameSizeChange()
hgs
parents:
diff changeset
   972
    {
hgs
parents:
diff changeset
   973
    TRAP_IGNORE( iEditor->HandleFrameSizeChangeL( ) );
hgs
parents:
diff changeset
   974
    }
hgs
parents:
diff changeset
   975
hgs
parents:
diff changeset
   976
// ---------------------------------------------------------
hgs
parents:
diff changeset
   977
// CMsgExpandableControl::Button
hgs
parents:
diff changeset
   978
// ---------------------------------------------------------
hgs
parents:
diff changeset
   979
//
hgs
parents:
diff changeset
   980
CAknButton* CMsgExpandableControl::Button() const
hgs
parents:
diff changeset
   981
    {
hgs
parents:
diff changeset
   982
    return iButton;
hgs
parents:
diff changeset
   983
    }
hgs
parents:
diff changeset
   984
hgs
parents:
diff changeset
   985
// ---------------------------------------------------------
hgs
parents:
diff changeset
   986
// CMsgExpandableControl::LayoutButton
hgs
parents:
diff changeset
   987
// ---------------------------------------------------------
hgs
parents:
diff changeset
   988
//
hgs
parents:
diff changeset
   989
void CMsgExpandableControl::LayoutButton()
hgs
parents:
diff changeset
   990
    {
hgs
parents:
diff changeset
   991
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   992
    if ( iButton )
hgs
parents:
diff changeset
   993
        {
hgs
parents:
diff changeset
   994
        iButton->SetTextFont( iCaptionLayout.Font() );
hgs
parents:
diff changeset
   995
        iButton->SetTextColorIds( KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG63 );
hgs
parents:
diff changeset
   996
hgs
parents:
diff changeset
   997
        iButton->SetTextHorizontalAlignment( iCaptionLayout.Align() );
hgs
parents:
diff changeset
   998
hgs
parents:
diff changeset
   999
        if ( iCaptionLayout.Align() == CGraphicsContext::ELeft )
hgs
parents:
diff changeset
  1000
            {
hgs
parents:
diff changeset
  1001
            iButton->SetIconHorizontalAlignment( CAknButton::ELeft );
hgs
parents:
diff changeset
  1002
            }
hgs
parents:
diff changeset
  1003
        else
hgs
parents:
diff changeset
  1004
            {
hgs
parents:
diff changeset
  1005
            iButton->SetIconHorizontalAlignment( CAknButton::ERight );
hgs
parents:
diff changeset
  1006
            }        
hgs
parents:
diff changeset
  1007
        }
hgs
parents:
diff changeset
  1008
#endif // RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
  1009
    }
hgs
parents:
diff changeset
  1010
hgs
parents:
diff changeset
  1011
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1012
// CMsgExpandableControl::UpdateCaptionTextColorL
hgs
parents:
diff changeset
  1013
//
hgs
parents:
diff changeset
  1014
// Sets the correct text color for caption from currently 
hgs
parents:
diff changeset
  1015
// used theme. 
hgs
parents:
diff changeset
  1016
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1017
//
hgs
parents:
diff changeset
  1018
void CMsgExpandableControl::UpdateCaptionTextColorL()
hgs
parents:
diff changeset
  1019
    {
hgs
parents:
diff changeset
  1020
    TRgb textColor;
hgs
parents:
diff changeset
  1021
    if ( AknsUtils::GetCachedColor( AknsUtils::SkinInstance(),
hgs
parents:
diff changeset
  1022
                                    textColor,
hgs
parents:
diff changeset
  1023
                                    KAknsIIDQsnTextColors,
hgs
parents:
diff changeset
  1024
                                    EAknsCIQsnTextColorsCG6 ) != KErrNone )
hgs
parents:
diff changeset
  1025
        {
hgs
parents:
diff changeset
  1026
        /*
hgs
parents:
diff changeset
  1027
        From "AknsConstants.h":
hgs
parents:
diff changeset
  1028
        // text #6	main area	main area texts	#215
hgs
parents:
diff changeset
  1029
        EAknsCIQsnTextColorsCG6    = 5,
hgs
parents:
diff changeset
  1030
        */
hgs
parents:
diff changeset
  1031
        textColor = AKN_LAF_COLOR_STATIC( 215 );
hgs
parents:
diff changeset
  1032
        }
hgs
parents:
diff changeset
  1033
    
hgs
parents:
diff changeset
  1034
    iCaption->OverrideColorL( EColorLabelText, textColor );
hgs
parents:
diff changeset
  1035
    }
hgs
parents:
diff changeset
  1036
hgs
parents:
diff changeset
  1037
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1038
// CMsgExpandableControl::GetCaptionForFep
hgs
parents:
diff changeset
  1039
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1040
//
hgs
parents:
diff changeset
  1041
void CMsgExpandableControl::GetCaptionForFep( TDes& aCaption ) const
hgs
parents:
diff changeset
  1042
    {
hgs
parents:
diff changeset
  1043
    const TDesC* captionText = Caption().Text();
hgs
parents:
diff changeset
  1044
    
hgs
parents:
diff changeset
  1045
    const TInt maximumLength = aCaption.MaxLength();
hgs
parents:
diff changeset
  1046
    
hgs
parents:
diff changeset
  1047
    if ( captionText->Length() > maximumLength )
hgs
parents:
diff changeset
  1048
        {
hgs
parents:
diff changeset
  1049
        aCaption = captionText->Left( maximumLength );
hgs
parents:
diff changeset
  1050
        }        
hgs
parents:
diff changeset
  1051
    else
hgs
parents:
diff changeset
  1052
        {
hgs
parents:
diff changeset
  1053
        aCaption = *captionText;
hgs
parents:
diff changeset
  1054
        }
hgs
parents:
diff changeset
  1055
    }
hgs
parents:
diff changeset
  1056
hgs
parents:
diff changeset
  1057
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1058
// CMsgExpandableControl::GetToolBarRect
hgs
parents:
diff changeset
  1059
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1060
//
hgs
parents:
diff changeset
  1061
TRect CMsgExpandableControl::GetToolBarRect()
hgs
parents:
diff changeset
  1062
    {
hgs
parents:
diff changeset
  1063
    TRect appRect;
hgs
parents:
diff changeset
  1064
    AknLayoutUtils::LayoutMetricsRect(
hgs
parents:
diff changeset
  1065
            AknLayoutUtils::EApplicationWindow, appRect);
hgs
parents:
diff changeset
  1066
hgs
parents:
diff changeset
  1067
    TAknWindowLineLayout lineLayout =
hgs
parents:
diff changeset
  1068
            AknLayoutScalable_Avkon::area_side_right_pane(0);
hgs
parents:
diff changeset
  1069
    TAknLayoutRect toolBarLayoutRect;
hgs
parents:
diff changeset
  1070
    toolBarLayoutRect.LayoutRect(appRect, lineLayout);
hgs
parents:
diff changeset
  1071
hgs
parents:
diff changeset
  1072
    return toolBarLayoutRect.Rect();
hgs
parents:
diff changeset
  1073
    }
hgs
parents:
diff changeset
  1074
//  End of File