messagingappbase/msgeditor/viewsrc/MsgAttachmentControl.cpp
author hgs
Wed, 03 Nov 2010 09:52:46 +0530
changeset 79 2981cb3aa489
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
79
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002 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:  MsgAttachmentControl 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 <barsread.h>                      // for TResourceReader
hgs
parents:
diff changeset
    23
#include <txtrich.h>                       // for CRichText
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
#include <eikenv.h>                        // for CEikonEnv
hgs
parents:
diff changeset
    26
#include <eikappui.h>                      // for CEikAppUi
hgs
parents:
diff changeset
    27
#include <eikedwin.h>                      // for TClipboardFunc
hgs
parents:
diff changeset
    28
#include <eiklabel.h>
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
#include <AknUtils.h>                      // for AknUtils
hgs
parents:
diff changeset
    31
#include <aknbutton.h>                     // for CAknButton
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
#include <MsgAttachmentModel.h>
hgs
parents:
diff changeset
    34
#include <MsgAttachmentInfo.h>
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
#include <gulicon.h>
hgs
parents:
diff changeset
    37
#include <AknsUtils.h>
hgs
parents:
diff changeset
    38
#include <AknsConstants.h>
hgs
parents:
diff changeset
    39
#include <aknlayoutscalable_apps.cdl.h>
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
#include <data_caging_path_literals.hrh>
hgs
parents:
diff changeset
    42
#include <msgeditor.mbg>
hgs
parents:
diff changeset
    43
#include <aknlayoutscalable_avkon.cdl.h>
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
#ifdef RD_TACTILE_FEEDBACK
hgs
parents:
diff changeset
    46
#include <touchfeedback.h>
hgs
parents:
diff changeset
    47
#endif 
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
#include "MsgAttachmentControl.h"             // for CMsgAttachmentControl
hgs
parents:
diff changeset
    50
#include "MsgExpandableControlEditor.h"       // for CMsgExpandableControlEditor
hgs
parents:
diff changeset
    51
#include "MsgBaseControlObserver.h"        // for MMsgBaseControlObserver
hgs
parents:
diff changeset
    52
#include "MsgEditorView.h"
hgs
parents:
diff changeset
    53
#include "MsgEditorPanic.h"                // for CMsgEditor panics
hgs
parents:
diff changeset
    54
#include "MsgEditorCommon.h"               // for KArabicSemicolon
hgs
parents:
diff changeset
    55
#include "MsgEditorCustomDraw.h"           // for CMsgEditorCustomDraw
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
// ========== EXTERNAL DATA STRUCTURES =====================
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
// ========== EXTERNAL FUNCTION PROTOTYPES =================
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
// ========== CONSTANTS ====================================
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
// Default color for EAknsCIQsnIconColorsCG13 group icons
hgs
parents:
diff changeset
    64
const TInt KDefaultAttachmentColor = 215; 
hgs
parents:
diff changeset
    65
hgs
parents:
diff changeset
    66
// ========== MACROS =======================================
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
// ========== LOCAL CONSTANTS AND MACROS ===================
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
const TInt KAttachmentArrayGranularity = 10;
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
_LIT( KAttachmentListSeparator, ", " );
hgs
parents:
diff changeset
    73
_LIT( KIconMbmFile, "msgeditor.mbm" );
hgs
parents:
diff changeset
    74
_LIT( KStripList, "\x000A\x000D\x2029\x2028\x0085" );
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
const TText KZeroWidthJoiner = 0x200D;
hgs
parents:
diff changeset
    77
const TText KLRMarker = 0x200E;
hgs
parents:
diff changeset
    78
const TText KRLMarker = 0x200F;
hgs
parents:
diff changeset
    79
hgs
parents:
diff changeset
    80
const TInt KScrollStartDelay = 1500000; // 1,5 s
hgs
parents:
diff changeset
    81
const TInt KScrollEndDelay = 500000;    // 0,5 s
hgs
parents:
diff changeset
    82
const TInt KScrollRestartDelay = 3000000; // 3 s.
hgs
parents:
diff changeset
    83
const TInt KScrollTickDelay = 135000; // 0,135s
hgs
parents:
diff changeset
    84
const TInt KScrollJumpAreaDivider = 15;
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
// ========== MODULE DATA STRUCTURES =======================
hgs
parents:
diff changeset
    87
hgs
parents:
diff changeset
    88
// ========== LOCAL FUNCTION PROTOTYPES ====================
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
// ========== LOCAL FUNCTIONS ==============================
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
// ========== MEMBER FUNCTIONS =============================
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
hgs
parents:
diff changeset
    95
// ---------------------------------------------------------
hgs
parents:
diff changeset
    96
// CMsgAttachmentControl::CMsgAttachmentControl
hgs
parents:
diff changeset
    97
//
hgs
parents:
diff changeset
    98
// Constructor.
hgs
parents:
diff changeset
    99
// ---------------------------------------------------------
hgs
parents:
diff changeset
   100
//
hgs
parents:
diff changeset
   101
CMsgAttachmentControl::CMsgAttachmentControl( 
hgs
parents:
diff changeset
   102
                                    MMsgBaseControlObserver& aBaseControlObserver,
hgs
parents:
diff changeset
   103
                                    CMsgEditorView& aView ) : 
hgs
parents:
diff changeset
   104
    CMsgExpandableControl( aBaseControlObserver ),
hgs
parents:
diff changeset
   105
    iScrollPos( EScrollPosBeginning )
hgs
parents:
diff changeset
   106
    {
hgs
parents:
diff changeset
   107
    iControlType = EMsgAttachmentControl;
hgs
parents:
diff changeset
   108
    iControlId = EMsgComponentIdAttachment;
hgs
parents:
diff changeset
   109
    
hgs
parents:
diff changeset
   110
    SetMopParent( &aView );
hgs
parents:
diff changeset
   111
    }
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
// ---------------------------------------------------------
hgs
parents:
diff changeset
   114
// CMsgAttachmentControl::ConstructL
hgs
parents:
diff changeset
   115
//
hgs
parents:
diff changeset
   116
// 2nd phase constructor. After base class initialization creates
hgs
parents:
diff changeset
   117
// attachment array that holds the attachment name strings. Empty
hgs
parents:
diff changeset
   118
// caption control is also created for base class purposes. NOTE! This is 
hgs
parents:
diff changeset
   119
// something that would be good to get rid off. Initializes editor control
hgs
parents:
diff changeset
   120
// and sets itself as it's edwin event, edwin size event and
hgs
parents:
diff changeset
   121
// control event observer. Creates editor is set as readonly and cursor is
hgs
parents:
diff changeset
   122
// hidden. Focus must stop to this control when navigating. No formatting
hgs
parents:
diff changeset
   123
// is allowed. Label icon and if pen input (i.e. touch screen) is enabled
hgs
parents:
diff changeset
   124
// then also button are created. Initializes marquee scroll timer and
hgs
parents:
diff changeset
   125
// layout related parameters.
hgs
parents:
diff changeset
   126
// ---------------------------------------------------------
hgs
parents:
diff changeset
   127
//
hgs
parents:
diff changeset
   128
void CMsgAttachmentControl::ConstructL()
hgs
parents:
diff changeset
   129
    {
hgs
parents:
diff changeset
   130
    BaseConstructL();  // Sets margins only.
hgs
parents:
diff changeset
   131
    
hgs
parents:
diff changeset
   132
    iAttachmentArray = new( ELeave ) CDesCArrayFlat( KAttachmentArrayGranularity );
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
    // Create empty caption. (Needed by base class.)
hgs
parents:
diff changeset
   135
    iCaption = new( ELeave ) CEikLabel;
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
    // Create editor.
hgs
parents:
diff changeset
   138
    iEditor = new( ELeave ) CMsgExpandableControlEditor( this, 
hgs
parents:
diff changeset
   139
                                                         iControlModeFlags, 
hgs
parents:
diff changeset
   140
                                                         iBaseControlObserver );
hgs
parents:
diff changeset
   141
    iEditor->SetControlType(iControlType);   
hgs
parents:
diff changeset
   142
    iEditor->ConstructL();
hgs
parents:
diff changeset
   143
    iEditor->SetObserver( this );
hgs
parents:
diff changeset
   144
    iEditor->SetEdwinSizeObserver( this );
hgs
parents:
diff changeset
   145
    iEditor->AddEdwinObserverL( this );
hgs
parents:
diff changeset
   146
    iEditor->SetReadOnly( ETrue );
hgs
parents:
diff changeset
   147
    iEditor->AddFlagToUserFlags( CEikEdwin::EAvkonDisableCursor );
hgs
parents:
diff changeset
   148
    
hgs
parents:
diff changeset
   149
	// To Dis-able Smiley support for attachment field.
hgs
parents:
diff changeset
   150
    iEditor->RemoveFlagFromUserFlags(CEikEdwin::EAvkonEnableSmileySupport);
hgs
parents:
diff changeset
   151
    
hgs
parents:
diff changeset
   152
    iControlModeFlags |= EMsgControlModeForceFocusStop;
hgs
parents:
diff changeset
   153
    
hgs
parents:
diff changeset
   154
    SetPlainTextMode( ETrue );
hgs
parents:
diff changeset
   155
    
hgs
parents:
diff changeset
   156
    iLabelIcon = CreateAttachmentIconsL();
hgs
parents:
diff changeset
   157
    
hgs
parents:
diff changeset
   158
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   159
    if ( AknLayoutUtils::PenEnabled() )
hgs
parents:
diff changeset
   160
        {
hgs
parents:
diff changeset
   161
        CreateButtonL();
hgs
parents:
diff changeset
   162
        }
hgs
parents:
diff changeset
   163
#endif // RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   164
    
hgs
parents:
diff changeset
   165
    iScrollTimer = CPeriodic::NewL( EPriorityNormal );
hgs
parents:
diff changeset
   166
    
hgs
parents:
diff changeset
   167
    ResolveLayoutsL();
hgs
parents:
diff changeset
   168
    }
hgs
parents:
diff changeset
   169
hgs
parents:
diff changeset
   170
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   171
// CMsgAttachmentControl::NewL
hgs
parents:
diff changeset
   172
// Symbian two phased constructor
hgs
parents:
diff changeset
   173
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
   174
//
hgs
parents:
diff changeset
   175
EXPORT_C CMsgAttachmentControl* CMsgAttachmentControl::NewL( 
hgs
parents:
diff changeset
   176
                                                MMsgBaseControlObserver& aBaseControlObserver,
hgs
parents:
diff changeset
   177
                                                CMsgEditorView& aView )
hgs
parents:
diff changeset
   178
    {
hgs
parents:
diff changeset
   179
    CMsgAttachmentControl* self = new( ELeave ) CMsgAttachmentControl( aBaseControlObserver,
hgs
parents:
diff changeset
   180
                                                                       aView );
hgs
parents:
diff changeset
   181
hgs
parents:
diff changeset
   182
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
   183
    self->ConstructL();
hgs
parents:
diff changeset
   184
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
   185
hgs
parents:
diff changeset
   186
    return self;
hgs
parents:
diff changeset
   187
    }
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
// ---------------------------------------------------------
hgs
parents:
diff changeset
   190
// CMsgAttachmentControl::~CMsgAttachmentControl
hgs
parents:
diff changeset
   191
//
hgs
parents:
diff changeset
   192
// Destructor.
hgs
parents:
diff changeset
   193
// ---------------------------------------------------------
hgs
parents:
diff changeset
   194
//
hgs
parents:
diff changeset
   195
CMsgAttachmentControl::~CMsgAttachmentControl()
hgs
parents:
diff changeset
   196
    {
hgs
parents:
diff changeset
   197
    if ( iAttachmentArray )
hgs
parents:
diff changeset
   198
        {
hgs
parents:
diff changeset
   199
        iAttachmentArray->Reset();
hgs
parents:
diff changeset
   200
        }
hgs
parents:
diff changeset
   201
        
hgs
parents:
diff changeset
   202
    delete iAttachmentArray;
hgs
parents:
diff changeset
   203
    delete iLabelIcon;
hgs
parents:
diff changeset
   204
    delete iScrollTimer;
hgs
parents:
diff changeset
   205
    }
hgs
parents:
diff changeset
   206
hgs
parents:
diff changeset
   207
// ---------------------------------------------------------
hgs
parents:
diff changeset
   208
// CMsgAttachmentControl::AppendAttachmentL
hgs
parents:
diff changeset
   209
//
hgs
parents:
diff changeset
   210
//
hgs
parents:
diff changeset
   211
// ---------------------------------------------------------
hgs
parents:
diff changeset
   212
//
hgs
parents:
diff changeset
   213
EXPORT_C void CMsgAttachmentControl::AppendAttachmentL( const TDesC& aName )
hgs
parents:
diff changeset
   214
    {
hgs
parents:
diff changeset
   215
    InsertAttachmentL( aName, Count() );
hgs
parents:
diff changeset
   216
    }
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
// ---------------------------------------------------------
hgs
parents:
diff changeset
   219
// CMsgAttachmentControl::InsertAttachmentL
hgs
parents:
diff changeset
   220
//
hgs
parents:
diff changeset
   221
//
hgs
parents:
diff changeset
   222
// ---------------------------------------------------------
hgs
parents:
diff changeset
   223
//
hgs
parents:
diff changeset
   224
EXPORT_C void CMsgAttachmentControl::InsertAttachmentL( const TDesC& aName, TInt aIndex )
hgs
parents:
diff changeset
   225
    {
hgs
parents:
diff changeset
   226
    AddToAttachmentArrayL( aName, aIndex );
hgs
parents:
diff changeset
   227
    
hgs
parents:
diff changeset
   228
    UpdateControlL();
hgs
parents:
diff changeset
   229
    }
hgs
parents:
diff changeset
   230
hgs
parents:
diff changeset
   231
// ---------------------------------------------------------
hgs
parents:
diff changeset
   232
// CMsgAttachmentControl::AddAttachmentL
hgs
parents:
diff changeset
   233
//
hgs
parents:
diff changeset
   234
//
hgs
parents:
diff changeset
   235
// ---------------------------------------------------------
hgs
parents:
diff changeset
   236
//
hgs
parents:
diff changeset
   237
EXPORT_C void CMsgAttachmentControl::AddAttachmentsL( const MDesCArray& aNames )
hgs
parents:
diff changeset
   238
    {
hgs
parents:
diff changeset
   239
    Reset();
hgs
parents:
diff changeset
   240
    
hgs
parents:
diff changeset
   241
    for ( TInt i = 0; i < aNames.MdcaCount(); i++ )
hgs
parents:
diff changeset
   242
        {
hgs
parents:
diff changeset
   243
        AddToAttachmentArrayL( aNames.MdcaPoint( i ), Count() );
hgs
parents:
diff changeset
   244
        }
hgs
parents:
diff changeset
   245
        
hgs
parents:
diff changeset
   246
    UpdateControlL();
hgs
parents:
diff changeset
   247
    }
hgs
parents:
diff changeset
   248
hgs
parents:
diff changeset
   249
hgs
parents:
diff changeset
   250
// ---------------------------------------------------------
hgs
parents:
diff changeset
   251
// CMsgAttachmentControl::AddAttachmentL
hgs
parents:
diff changeset
   252
//
hgs
parents:
diff changeset
   253
//
hgs
parents:
diff changeset
   254
// ---------------------------------------------------------
hgs
parents:
diff changeset
   255
//
hgs
parents:
diff changeset
   256
EXPORT_C void CMsgAttachmentControl::AddAttachmentsL( const CMsgAttachmentModel& aModel )
hgs
parents:
diff changeset
   257
    {
hgs
parents:
diff changeset
   258
    Reset();
hgs
parents:
diff changeset
   259
    
hgs
parents:
diff changeset
   260
    TParse* parser = new( ELeave ) TParse ;
hgs
parents:
diff changeset
   261
    CleanupStack::PushL( parser );
hgs
parents:
diff changeset
   262
    
hgs
parents:
diff changeset
   263
    for ( TInt i = 0; i < aModel.NumberOfItems(); i++ )
hgs
parents:
diff changeset
   264
        {
hgs
parents:
diff changeset
   265
        parser->Set( aModel.AttachmentInfoAt( i ).FileName(),NULL, NULL );
hgs
parents:
diff changeset
   266
        AddToAttachmentArrayL( parser->NameAndExt(), Count() );
hgs
parents:
diff changeset
   267
        }
hgs
parents:
diff changeset
   268
    
hgs
parents:
diff changeset
   269
    CleanupStack::PopAndDestroy( parser ); 
hgs
parents:
diff changeset
   270
    UpdateControlL();
hgs
parents:
diff changeset
   271
    }
hgs
parents:
diff changeset
   272
hgs
parents:
diff changeset
   273
// ---------------------------------------------------------
hgs
parents:
diff changeset
   274
// CMsgAttachmentControl::RemoveAttachmentL
hgs
parents:
diff changeset
   275
// ---------------------------------------------------------
hgs
parents:
diff changeset
   276
//
hgs
parents:
diff changeset
   277
EXPORT_C void CMsgAttachmentControl::RemoveAttachmentL( const TDesC& aName )
hgs
parents:
diff changeset
   278
    {
hgs
parents:
diff changeset
   279
    HBufC* convertedFileName = AknTextUtils::ConvertFileNameL( aName );
hgs
parents:
diff changeset
   280
    CleanupStack::PushL( convertedFileName );
hgs
parents:
diff changeset
   281
    
hgs
parents:
diff changeset
   282
    TPtr convertedFileNamePtr = convertedFileName->Des();
hgs
parents:
diff changeset
   283
    
hgs
parents:
diff changeset
   284
    AknTextUtils::StripCharacters( convertedFileNamePtr, KAknStripListControlChars );
hgs
parents:
diff changeset
   285
    
hgs
parents:
diff changeset
   286
    TInt pos( KErrNotFound );
hgs
parents:
diff changeset
   287
    if ( iAttachmentArray->Find( *convertedFileName, pos ) == 0 )
hgs
parents:
diff changeset
   288
        {
hgs
parents:
diff changeset
   289
        RemoveAttachmentL( pos );
hgs
parents:
diff changeset
   290
        }
hgs
parents:
diff changeset
   291
    
hgs
parents:
diff changeset
   292
    CleanupStack::PopAndDestroy( convertedFileName );
hgs
parents:
diff changeset
   293
    }
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
// ---------------------------------------------------------
hgs
parents:
diff changeset
   296
// CMsgAttachmentControl::RemoveAttachmentL
hgs
parents:
diff changeset
   297
// ---------------------------------------------------------
hgs
parents:
diff changeset
   298
//
hgs
parents:
diff changeset
   299
EXPORT_C void CMsgAttachmentControl::RemoveAttachmentL( TInt aIndex )
hgs
parents:
diff changeset
   300
    {
hgs
parents:
diff changeset
   301
    iAttachmentArray->Delete( aIndex );
hgs
parents:
diff changeset
   302
    UpdateControlL();
hgs
parents:
diff changeset
   303
    }
hgs
parents:
diff changeset
   304
hgs
parents:
diff changeset
   305
// ---------------------------------------------------------
hgs
parents:
diff changeset
   306
// CMsgAttachmentControl::Reset
hgs
parents:
diff changeset
   307
//
hgs
parents:
diff changeset
   308
// from CMsgBaseControl.
hgs
parents:
diff changeset
   309
// Same as above but non-leaving version.
hgs
parents:
diff changeset
   310
// ---------------------------------------------------------
hgs
parents:
diff changeset
   311
//
hgs
parents:
diff changeset
   312
EXPORT_C void CMsgAttachmentControl::Reset()
hgs
parents:
diff changeset
   313
    {
hgs
parents:
diff changeset
   314
    if ( iAttachmentArray )
hgs
parents:
diff changeset
   315
        {
hgs
parents:
diff changeset
   316
        iAttachmentArray->Reset();
hgs
parents:
diff changeset
   317
        }
hgs
parents:
diff changeset
   318
    if ( iEditor )
hgs
parents:
diff changeset
   319
        {
hgs
parents:
diff changeset
   320
        iEditor->Reset();
hgs
parents:
diff changeset
   321
        }
hgs
parents:
diff changeset
   322
    }
hgs
parents:
diff changeset
   323
hgs
parents:
diff changeset
   324
hgs
parents:
diff changeset
   325
// ---------------------------------------------------------
hgs
parents:
diff changeset
   326
// CMsgAttachmentControl::Count
hgs
parents:
diff changeset
   327
// ---------------------------------------------------------
hgs
parents:
diff changeset
   328
//
hgs
parents:
diff changeset
   329
EXPORT_C TInt CMsgAttachmentControl::Count() const
hgs
parents:
diff changeset
   330
    {
hgs
parents:
diff changeset
   331
    return iAttachmentArray->MdcaCount();
hgs
parents:
diff changeset
   332
    }
hgs
parents:
diff changeset
   333
hgs
parents:
diff changeset
   334
// ---------------------------------------------------------
hgs
parents:
diff changeset
   335
// CMsgAttachmentControl::Attachment
hgs
parents:
diff changeset
   336
// ---------------------------------------------------------
hgs
parents:
diff changeset
   337
//
hgs
parents:
diff changeset
   338
EXPORT_C TPtrC CMsgAttachmentControl::Attachment( TInt aIndex ) const
hgs
parents:
diff changeset
   339
    {
hgs
parents:
diff changeset
   340
    return iAttachmentArray->MdcaPoint( aIndex );
hgs
parents:
diff changeset
   341
    }
hgs
parents:
diff changeset
   342
hgs
parents:
diff changeset
   343
// ---------------------------------------------------------
hgs
parents:
diff changeset
   344
// CMsgAttachmentControl::ConstructFromResourceL
hgs
parents:
diff changeset
   345
//
hgs
parents:
diff changeset
   346
// Creates this control from resource.
hgs
parents:
diff changeset
   347
// ---------------------------------------------------------
hgs
parents:
diff changeset
   348
//
hgs
parents:
diff changeset
   349
void CMsgAttachmentControl::ConstructFromResourceL( TInt aResourceId )
hgs
parents:
diff changeset
   350
    {
hgs
parents:
diff changeset
   351
    TResourceReader reader;
hgs
parents:
diff changeset
   352
    iCoeEnv->CreateResourceReaderLC( reader, aResourceId );
hgs
parents:
diff changeset
   353
hgs
parents:
diff changeset
   354
    // Read some information about control from resource.
hgs
parents:
diff changeset
   355
    ReadControlPropertiesFromResourceL( reader );
hgs
parents:
diff changeset
   356
    
hgs
parents:
diff changeset
   357
    ConstructL();
hgs
parents:
diff changeset
   358
    
hgs
parents:
diff changeset
   359
    CleanupStack::PopAndDestroy();  // reader
hgs
parents:
diff changeset
   360
    }
hgs
parents:
diff changeset
   361
hgs
parents:
diff changeset
   362
// ---------------------------------------------------------
hgs
parents:
diff changeset
   363
// CMsgAttachmentControl::EditPermission
hgs
parents:
diff changeset
   364
//
hgs
parents:
diff changeset
   365
// Checks and returns control's edit permissions. Edit permissions are needed
hgs
parents:
diff changeset
   366
// to check in order to know whether some key press is allowed to pass
hgs
parents:
diff changeset
   367
// to the control or not.
hgs
parents:
diff changeset
   368
// ---------------------------------------------------------
hgs
parents:
diff changeset
   369
//
hgs
parents:
diff changeset
   370
TUint32 CMsgAttachmentControl::EditPermission() const
hgs
parents:
diff changeset
   371
    {
hgs
parents:
diff changeset
   372
    return CMsgBaseControl::EMsgEditNone;
hgs
parents:
diff changeset
   373
    }
hgs
parents:
diff changeset
   374
hgs
parents:
diff changeset
   375
// ---------------------------------------------------------
hgs
parents:
diff changeset
   376
// CMsgAttachmentControl::NotifyViewEvent
hgs
parents:
diff changeset
   377
//
hgs
parents:
diff changeset
   378
// Builds up text fields for the control i.e. reads verified recipients and
hgs
parents:
diff changeset
   379
// creates corresponding text fields for them.
hgs
parents:
diff changeset
   380
// ---------------------------------------------------------
hgs
parents:
diff changeset
   381
//
hgs
parents:
diff changeset
   382
void CMsgAttachmentControl::NotifyViewEvent( TMsgViewEvent aEvent, TInt aParam )
hgs
parents:
diff changeset
   383
    {
hgs
parents:
diff changeset
   384
    if ( IsReadOnly() )
hgs
parents:
diff changeset
   385
        {
hgs
parents:
diff changeset
   386
        aParam |= EMsgViewEventAutoHighlight;
hgs
parents:
diff changeset
   387
        }
hgs
parents:
diff changeset
   388
hgs
parents:
diff changeset
   389
    if ( aEvent != EMsgViewEventSetCursorFirstPos &&
hgs
parents:
diff changeset
   390
         aEvent != EMsgViewEventSetCursorLastPos )
hgs
parents:
diff changeset
   391
        {
hgs
parents:
diff changeset
   392
        CMsgExpandableControl::NotifyViewEvent( aEvent, aParam );
hgs
parents:
diff changeset
   393
        }
hgs
parents:
diff changeset
   394
    }
hgs
parents:
diff changeset
   395
hgs
parents:
diff changeset
   396
hgs
parents:
diff changeset
   397
// ---------------------------------------------------------
hgs
parents:
diff changeset
   398
// CMsgAttachmentControl::PrepareForReadOnly
hgs
parents:
diff changeset
   399
// ---------------------------------------------------------
hgs
parents:
diff changeset
   400
//
hgs
parents:
diff changeset
   401
void CMsgAttachmentControl::PrepareForReadOnly( TBool aReadOnly )
hgs
parents:
diff changeset
   402
    {
hgs
parents:
diff changeset
   403
    if ( aReadOnly )
hgs
parents:
diff changeset
   404
        {
hgs
parents:
diff changeset
   405
        TRAP_IGNORE( iEditor->SetHighlightStyleL( EEikEdwinHighlightLink ) );
hgs
parents:
diff changeset
   406
        }
hgs
parents:
diff changeset
   407
    }
hgs
parents:
diff changeset
   408
hgs
parents:
diff changeset
   409
// ---------------------------------------------------------
hgs
parents:
diff changeset
   410
// CMsgAttachmentControl::CountComponentControls
hgs
parents:
diff changeset
   411
//
hgs
parents:
diff changeset
   412
// Returns a number of controls.
hgs
parents:
diff changeset
   413
// ---------------------------------------------------------
hgs
parents:
diff changeset
   414
//
hgs
parents:
diff changeset
   415
TInt CMsgAttachmentControl::CountComponentControls() const
hgs
parents:
diff changeset
   416
    {
hgs
parents:
diff changeset
   417
    TInt result( 1 );
hgs
parents:
diff changeset
   418
    
hgs
parents:
diff changeset
   419
    if ( iButton )
hgs
parents:
diff changeset
   420
        {
hgs
parents:
diff changeset
   421
        result++;
hgs
parents:
diff changeset
   422
        }
hgs
parents:
diff changeset
   423
        
hgs
parents:
diff changeset
   424
    return result;
hgs
parents:
diff changeset
   425
    }
hgs
parents:
diff changeset
   426
hgs
parents:
diff changeset
   427
// ---------------------------------------------------------
hgs
parents:
diff changeset
   428
// CMsgAttachmentControl::ComponentControl
hgs
parents:
diff changeset
   429
//
hgs
parents:
diff changeset
   430
// Returns a control of index aIndex.
hgs
parents:
diff changeset
   431
// ---------------------------------------------------------
hgs
parents:
diff changeset
   432
//
hgs
parents:
diff changeset
   433
CCoeControl* CMsgAttachmentControl::ComponentControl( TInt aIndex ) const
hgs
parents:
diff changeset
   434
    {
hgs
parents:
diff changeset
   435
    CCoeControl* result = NULL;
hgs
parents:
diff changeset
   436
    switch ( aIndex )
hgs
parents:
diff changeset
   437
        {
hgs
parents:
diff changeset
   438
        case 0:
hgs
parents:
diff changeset
   439
            {
hgs
parents:
diff changeset
   440
            result = iEditor;
hgs
parents:
diff changeset
   441
            break;
hgs
parents:
diff changeset
   442
            }
hgs
parents:
diff changeset
   443
        case 1:
hgs
parents:
diff changeset
   444
            {
hgs
parents:
diff changeset
   445
            result = iButton;
hgs
parents:
diff changeset
   446
            break;
hgs
parents:
diff changeset
   447
            }
hgs
parents:
diff changeset
   448
        default:
hgs
parents:
diff changeset
   449
            {
hgs
parents:
diff changeset
   450
            break;
hgs
parents:
diff changeset
   451
            }
hgs
parents:
diff changeset
   452
        }
hgs
parents:
diff changeset
   453
        
hgs
parents:
diff changeset
   454
    return result;
hgs
parents:
diff changeset
   455
    }
hgs
parents:
diff changeset
   456
hgs
parents:
diff changeset
   457
// ---------------------------------------------------------
hgs
parents:
diff changeset
   458
// CMsgAttachmentControl::OfferKeyEventL
hgs
parents:
diff changeset
   459
//
hgs
parents:
diff changeset
   460
// Handles key events. The most of the keys are passed to the control editor.
hgs
parents:
diff changeset
   461
// ---------------------------------------------------------
hgs
parents:
diff changeset
   462
//
hgs
parents:
diff changeset
   463
TKeyResponse CMsgAttachmentControl::OfferKeyEventL(
hgs
parents:
diff changeset
   464
    const TKeyEvent& /*aKeyEvent*/, TEventCode /*aType*/ )
hgs
parents:
diff changeset
   465
    {
hgs
parents:
diff changeset
   466
    return EKeyWasNotConsumed;
hgs
parents:
diff changeset
   467
    }
hgs
parents:
diff changeset
   468
hgs
parents:
diff changeset
   469
// ---------------------------------------------------------
hgs
parents:
diff changeset
   470
// CMsgAttachmentControl::HandleResourceChange
hgs
parents:
diff changeset
   471
//
hgs
parents:
diff changeset
   472
// Handles resouce change events. Event are passed to the base
hgs
parents:
diff changeset
   473
// class and if layout has been switched new layouts are resolved
hgs
parents:
diff changeset
   474
// from LAF.
hgs
parents:
diff changeset
   475
// ---------------------------------------------------------
hgs
parents:
diff changeset
   476
//
hgs
parents:
diff changeset
   477
void CMsgAttachmentControl::HandleResourceChange( TInt aType )
hgs
parents:
diff changeset
   478
    {
hgs
parents:
diff changeset
   479
    TRAP_IGNORE( 
hgs
parents:
diff changeset
   480
        {
hgs
parents:
diff changeset
   481
        DoHandleResourceChangeBeforeL( aType );
hgs
parents:
diff changeset
   482
    
hgs
parents:
diff changeset
   483
        CMsgExpandableControl::HandleResourceChange( aType );
hgs
parents:
diff changeset
   484
        
hgs
parents:
diff changeset
   485
        DoHandleResourceChangeAfterL( aType );
hgs
parents:
diff changeset
   486
        } );    
hgs
parents:
diff changeset
   487
    }
hgs
parents:
diff changeset
   488
hgs
parents:
diff changeset
   489
// ---------------------------------------------------------
hgs
parents:
diff changeset
   490
// CMsgAttachmentControl::HandlePointerEventL
hgs
parents:
diff changeset
   491
//
hgs
parents:
diff changeset
   492
// Pointer event handling is disabled on editor
hgs
parents:
diff changeset
   493
// ---------------------------------------------------------
hgs
parents:
diff changeset
   494
//
hgs
parents:
diff changeset
   495
void CMsgAttachmentControl::HandlePointerEventL( const TPointerEvent& aPointerEvent )
hgs
parents:
diff changeset
   496
    {
hgs
parents:
diff changeset
   497
    if ( !iEditor->Rect().Contains( aPointerEvent.iPosition ) )
hgs
parents:
diff changeset
   498
        {
hgs
parents:
diff changeset
   499
        CMsgExpandableControl::HandlePointerEventL( aPointerEvent );
hgs
parents:
diff changeset
   500
        }
hgs
parents:
diff changeset
   501
#ifdef RD_TACTILE_FEEDBACK 
hgs
parents:
diff changeset
   502
    else if ( aPointerEvent.iType == TPointerEvent::EButton1Down )
hgs
parents:
diff changeset
   503
        {
hgs
parents:
diff changeset
   504
        MTouchFeedback* feedback = MTouchFeedback::Instance();
hgs
parents:
diff changeset
   505
        if ( feedback )
hgs
parents:
diff changeset
   506
            {
hgs
parents:
diff changeset
   507
            feedback->InstantFeedback( this, ETouchFeedbackBasic );                        
hgs
parents:
diff changeset
   508
            }                                     
hgs
parents:
diff changeset
   509
        }
hgs
parents:
diff changeset
   510
#endif
hgs
parents:
diff changeset
   511
    }
hgs
parents:
diff changeset
   512
hgs
parents:
diff changeset
   513
// ---------------------------------------------------------
hgs
parents:
diff changeset
   514
// CMsgAttachmentControl::FocusChanged
hgs
parents:
diff changeset
   515
//
hgs
parents:
diff changeset
   516
// This is called when the focus of the control is changed.
hgs
parents:
diff changeset
   517
// ---------------------------------------------------------
hgs
parents:
diff changeset
   518
//
hgs
parents:
diff changeset
   519
void CMsgAttachmentControl::FocusChanged( TDrawNow aDrawNow )
hgs
parents:
diff changeset
   520
    {
hgs
parents:
diff changeset
   521
    CMsgExpandableControl::FocusChanged( aDrawNow );
hgs
parents:
diff changeset
   522
        
hgs
parents:
diff changeset
   523
    if ( IsReadOnly() )
hgs
parents:
diff changeset
   524
        {
hgs
parents:
diff changeset
   525
        TRAP_IGNORE( UpdateFocusL() );
hgs
parents:
diff changeset
   526
        }
hgs
parents:
diff changeset
   527
    
hgs
parents:
diff changeset
   528
    if ( iAutomaticScrolling )
hgs
parents:
diff changeset
   529
        {
hgs
parents:
diff changeset
   530
        StopAutomaticScrolling();
hgs
parents:
diff changeset
   531
        
hgs
parents:
diff changeset
   532
        if ( IsFocused() )
hgs
parents:
diff changeset
   533
            {
hgs
parents:
diff changeset
   534
            StartAutomaticScrolling( KScrollStartDelay );
hgs
parents:
diff changeset
   535
            }
hgs
parents:
diff changeset
   536
        else
hgs
parents:
diff changeset
   537
            {
hgs
parents:
diff changeset
   538
            // Reset text to the beginning when focus is lost.
hgs
parents:
diff changeset
   539
            iScrollPos = EScrollPosBeginning;
hgs
parents:
diff changeset
   540
            TRAP_IGNORE( SetTextForEditorL( EFalse, ETrue ) );                
hgs
parents:
diff changeset
   541
            
hgs
parents:
diff changeset
   542
            // Reset the text view to it's original position.
hgs
parents:
diff changeset
   543
            iEditor->TextView()->SetLeftTextMargin( 0 );
hgs
parents:
diff changeset
   544
            }
hgs
parents:
diff changeset
   545
        }
hgs
parents:
diff changeset
   546
    }
hgs
parents:
diff changeset
   547
hgs
parents:
diff changeset
   548
// ---------------------------------------------------------
hgs
parents:
diff changeset
   549
// CMsgAttachmentControl::Draw
hgs
parents:
diff changeset
   550
// Attachment icon is drawn to the line indicated by LAF x 
hgs
parents:
diff changeset
   551
// coordinate and controls current y coordinate. 
hgs
parents:
diff changeset
   552
// Attachment icon is also centered vertically to current 
hgs
parents:
diff changeset
   553
// control height.
hgs
parents:
diff changeset
   554
// ---------------------------------------------------------
hgs
parents:
diff changeset
   555
//
hgs
parents:
diff changeset
   556
void CMsgAttachmentControl::Draw( const TRect& /*aRect*/ ) const
hgs
parents:
diff changeset
   557
    {
hgs
parents:
diff changeset
   558
    if ( !iButton )
hgs
parents:
diff changeset
   559
        {
hgs
parents:
diff changeset
   560
        TPoint tlc( iIconLayout.Rect().iTl.iX, Position().iY );
hgs
parents:
diff changeset
   561
        tlc.iY += ( Size().iHeight - iIconLayout.Rect().Size().iHeight ) / 2;
hgs
parents:
diff changeset
   562
    
hgs
parents:
diff changeset
   563
        SystemGc().BitBltMasked( tlc,
hgs
parents:
diff changeset
   564
                                 iLabelIcon->Bitmap(), 
hgs
parents:
diff changeset
   565
                                 iIconLayout.Rect().Size(),
hgs
parents:
diff changeset
   566
                                 iLabelIcon->Mask(),
hgs
parents:
diff changeset
   567
                                 EFalse );
hgs
parents:
diff changeset
   568
        }
hgs
parents:
diff changeset
   569
    }
hgs
parents:
diff changeset
   570
hgs
parents:
diff changeset
   571
// ---------------------------------------------------------
hgs
parents:
diff changeset
   572
// CMsgAttachmentControl::ActivateL
hgs
parents:
diff changeset
   573
// ---------------------------------------------------------
hgs
parents:
diff changeset
   574
//
hgs
parents:
diff changeset
   575
void CMsgAttachmentControl::ActivateL()
hgs
parents:
diff changeset
   576
    {
hgs
parents:
diff changeset
   577
    CMsgExpandableControl::ActivateL();
hgs
parents:
diff changeset
   578
    
hgs
parents:
diff changeset
   579
    // Needs to be called after CEikEdwin::ActivateL as
hgs
parents:
diff changeset
   580
    // panics if CEikEdwin::iTextView is not present
hgs
parents:
diff changeset
   581
    iEditor->SetWordWrapL( EFalse );
hgs
parents:
diff changeset
   582
    
hgs
parents:
diff changeset
   583
    // Cursor is set to the beginning of text.
hgs
parents:
diff changeset
   584
    iEditor->SetCursorPosL( 0, EFalse );
hgs
parents:
diff changeset
   585
    
hgs
parents:
diff changeset
   586
    if ( iEditor->TextView() )
hgs
parents:
diff changeset
   587
        {
hgs
parents:
diff changeset
   588
        const CFont* font = iEditorLayout.Font();
hgs
parents:
diff changeset
   589
        TInt scrollJump( font->WidthZeroInPixels() );
hgs
parents:
diff changeset
   590
        if ( scrollJump == 0 )
hgs
parents:
diff changeset
   591
            {
hgs
parents:
diff changeset
   592
            // Font gave us invalid scrollJump have to make
hgs
parents:
diff changeset
   593
            // estimate according to scroll area.
hgs
parents:
diff changeset
   594
            scrollJump = iEditorLayout.TextRect().Width() / KScrollJumpAreaDivider;
hgs
parents:
diff changeset
   595
            }
hgs
parents:
diff changeset
   596
        iEditor->TextView()->SetHorizontalScrollJump( scrollJump );
hgs
parents:
diff changeset
   597
        }
hgs
parents:
diff changeset
   598
    }
hgs
parents:
diff changeset
   599
hgs
parents:
diff changeset
   600
// ---------------------------------------------------------
hgs
parents:
diff changeset
   601
// CMsgAttachmentControl::UpdateControlL
hgs
parents:
diff changeset
   602
// ---------------------------------------------------------
hgs
parents:
diff changeset
   603
//
hgs
parents:
diff changeset
   604
void CMsgAttachmentControl::UpdateControlL()
hgs
parents:
diff changeset
   605
    {
hgs
parents:
diff changeset
   606
    SetTextForEditorL( ETrue, ETrue );
hgs
parents:
diff changeset
   607
    
hgs
parents:
diff changeset
   608
    if ( iScrollTimer->IsActive() )
hgs
parents:
diff changeset
   609
        {
hgs
parents:
diff changeset
   610
        // Restart scrolling when attachment list is modified.
hgs
parents:
diff changeset
   611
        iScrollPos = EScrollPosBeginning;
hgs
parents:
diff changeset
   612
        StartAutomaticScrolling( KScrollStartDelay );        
hgs
parents:
diff changeset
   613
        }
hgs
parents:
diff changeset
   614
    
hgs
parents:
diff changeset
   615
    DrawDeferred();
hgs
parents:
diff changeset
   616
    iControlModeFlags |= EMsgControlModeModified;
hgs
parents:
diff changeset
   617
    }
hgs
parents:
diff changeset
   618
hgs
parents:
diff changeset
   619
hgs
parents:
diff changeset
   620
// ---------------------------------------------------------
hgs
parents:
diff changeset
   621
// CMsgAttachmentControl::SetTextForEditorL
hgs
parents:
diff changeset
   622
// ---------------------------------------------------------
hgs
parents:
diff changeset
   623
//
hgs
parents:
diff changeset
   624
void CMsgAttachmentControl::SetTextForEditorL( TBool aContentChanged, TBool aClipText )
hgs
parents:
diff changeset
   625
    {
hgs
parents:
diff changeset
   626
    TInt count = iAttachmentArray->Count();
hgs
parents:
diff changeset
   627
    TInt length = 0;
hgs
parents:
diff changeset
   628
    
hgs
parents:
diff changeset
   629
    for ( TInt i = 0; i < count; i++ )
hgs
parents:
diff changeset
   630
        {
hgs
parents:
diff changeset
   631
        length += iAttachmentArray->MdcaPoint( i ).Length();
hgs
parents:
diff changeset
   632
        length += KAttachmentListSeparator().Length();
hgs
parents:
diff changeset
   633
        }
hgs
parents:
diff changeset
   634
hgs
parents:
diff changeset
   635
    HBufC* buf = HBufC::NewLC( length );
hgs
parents:
diff changeset
   636
    TPtr temp = buf->Des();
hgs
parents:
diff changeset
   637
    
hgs
parents:
diff changeset
   638
    for ( TInt j = 0; j < count; j++ )
hgs
parents:
diff changeset
   639
        {
hgs
parents:
diff changeset
   640
        temp.Append( iAttachmentArray->MdcaPoint( j ) );
hgs
parents:
diff changeset
   641
        if ( j < count - 1 )
hgs
parents:
diff changeset
   642
            {
hgs
parents:
diff changeset
   643
            temp.Append( KAttachmentListSeparator );
hgs
parents:
diff changeset
   644
            }
hgs
parents:
diff changeset
   645
        }
hgs
parents:
diff changeset
   646
        
hgs
parents:
diff changeset
   647
    const CFont* font = iEditorLayout.Font();
hgs
parents:
diff changeset
   648
hgs
parents:
diff changeset
   649
    TInt clipWidth = 0;
hgs
parents:
diff changeset
   650
    
hgs
parents:
diff changeset
   651
    if ( iEditor->TextView() ) 
hgs
parents:
diff changeset
   652
        {
hgs
parents:
diff changeset
   653
        clipWidth = iEditor->TextView()->ViewRect().Width();
hgs
parents:
diff changeset
   654
        }
hgs
parents:
diff changeset
   655
    else
hgs
parents:
diff changeset
   656
        {
hgs
parents:
diff changeset
   657
        clipWidth = iEditorLayout.TextRect().Width();
hgs
parents:
diff changeset
   658
        }
hgs
parents:
diff changeset
   659
    
hgs
parents:
diff changeset
   660
    TBool enableAutomaticScrolling( ETrue );
hgs
parents:
diff changeset
   661
    if ( temp.Length() == 0 )
hgs
parents:
diff changeset
   662
        {
hgs
parents:
diff changeset
   663
        // Disable all processing if field is empty.
hgs
parents:
diff changeset
   664
        enableAutomaticScrolling = EFalse;
hgs
parents:
diff changeset
   665
        aContentChanged = EFalse;
hgs
parents:
diff changeset
   666
        }
hgs
parents:
diff changeset
   667
        
hgs
parents:
diff changeset
   668
    if ( aContentChanged )
hgs
parents:
diff changeset
   669
        {
hgs
parents:
diff changeset
   670
        // Attachment array has been updated.
hgs
parents:
diff changeset
   671
        TInt fits = font->TextCount( temp, clipWidth );
hgs
parents:
diff changeset
   672
hgs
parents:
diff changeset
   673
        if ( fits >= temp.Length() )
hgs
parents:
diff changeset
   674
            {
hgs
parents:
diff changeset
   675
            // All text fits to the field. No automatic scrolling.
hgs
parents:
diff changeset
   676
            enableAutomaticScrolling = EFalse;
hgs
parents:
diff changeset
   677
            }
hgs
parents:
diff changeset
   678
        }
hgs
parents:
diff changeset
   679
    
hgs
parents:
diff changeset
   680
    if ( enableAutomaticScrolling )
hgs
parents:
diff changeset
   681
        {
hgs
parents:
diff changeset
   682
        EnableAutomaticScrolling();
hgs
parents:
diff changeset
   683
        
hgs
parents:
diff changeset
   684
        if ( aClipText )
hgs
parents:
diff changeset
   685
            {
hgs
parents:
diff changeset
   686
            ClipTextL( temp, clipWidth );
hgs
parents:
diff changeset
   687
            }
hgs
parents:
diff changeset
   688
        }
hgs
parents:
diff changeset
   689
    else
hgs
parents:
diff changeset
   690
        {
hgs
parents:
diff changeset
   691
        DisableAutomaticScrolling();
hgs
parents:
diff changeset
   692
        }
hgs
parents:
diff changeset
   693
    
hgs
parents:
diff changeset
   694
    // Replaces old text with new text.
hgs
parents:
diff changeset
   695
    iEditor->SetTextL( buf );
hgs
parents:
diff changeset
   696
hgs
parents:
diff changeset
   697
    if ( IsActivated() && iEditor->CursorPos() != 0 )
hgs
parents:
diff changeset
   698
        {
hgs
parents:
diff changeset
   699
        // Cursor is set to the beginning of text.
hgs
parents:
diff changeset
   700
        // Should not be called for non-activated control.
hgs
parents:
diff changeset
   701
        iEditor->SetCursorPosL( 0, EFalse );
hgs
parents:
diff changeset
   702
        }        
hgs
parents:
diff changeset
   703
    
hgs
parents:
diff changeset
   704
    CleanupStack::PopAndDestroy( buf );
hgs
parents:
diff changeset
   705
    }
hgs
parents:
diff changeset
   706
hgs
parents:
diff changeset
   707
// ---------------------------------------------------------
hgs
parents:
diff changeset
   708
// CMsgAttachmentControl::ResolveLayoutsL
hgs
parents:
diff changeset
   709
// 
hgs
parents:
diff changeset
   710
// ---------------------------------------------------------
hgs
parents:
diff changeset
   711
//
hgs
parents:
diff changeset
   712
void CMsgAttachmentControl::ResolveLayoutsL()
hgs
parents:
diff changeset
   713
    {
hgs
parents:
diff changeset
   714
    TAknLayoutRect msgTextPane;
hgs
parents:
diff changeset
   715
    msgTextPane.LayoutRect( MsgEditorCommons::MsgDataPane(),
hgs
parents:
diff changeset
   716
                            AknLayoutScalable_Apps::msg_text_pane( 0 ).LayoutLine() );
hgs
parents:
diff changeset
   717
hgs
parents:
diff changeset
   718
    TAknLayoutRect msgHeaderPane;
hgs
parents:
diff changeset
   719
    msgHeaderPane.LayoutRect( msgTextPane.Rect(),
hgs
parents:
diff changeset
   720
                              AknLayoutScalable_Apps::msg_header_pane().LayoutLine() );
hgs
parents:
diff changeset
   721
    
hgs
parents:
diff changeset
   722
    iIconLayout.LayoutRect( msgHeaderPane.Rect(),
hgs
parents:
diff changeset
   723
                            AknLayoutScalable_Apps::msg_header_pane_g1().LayoutLine() );
hgs
parents:
diff changeset
   724
    
hgs
parents:
diff changeset
   725
    CMsgExpandableControl::ResolveLayoutsL();
hgs
parents:
diff changeset
   726
    
hgs
parents:
diff changeset
   727
	//partial input in landscape causes rects to overlay when toolbar is invisible    
hgs
parents:
diff changeset
   728
    if (iIconLayout.Rect().Intersects(iEditorLayout.TextRect()))
hgs
parents:
diff changeset
   729
        {
hgs
parents:
diff changeset
   730
        TRect headerPane = msgHeaderPane.Rect();
hgs
parents:
diff changeset
   731
		//include toolbar width
hgs
parents:
diff changeset
   732
        if (!AknLayoutUtils::LayoutMirrored())
hgs
parents:
diff changeset
   733
            {
hgs
parents:
diff changeset
   734
            headerPane.iBr.iX -= GetToolBarRect().Width();
hgs
parents:
diff changeset
   735
            }
hgs
parents:
diff changeset
   736
        else
hgs
parents:
diff changeset
   737
            {
hgs
parents:
diff changeset
   738
            headerPane.iTl.iX += GetToolBarRect().Width();
hgs
parents:
diff changeset
   739
            }
hgs
parents:
diff changeset
   740
        
hgs
parents:
diff changeset
   741
        iIconLayout.LayoutRect( headerPane,
hgs
parents:
diff changeset
   742
                                AknLayoutScalable_Apps::msg_header_pane_g1( 0 ).LayoutLine() );
hgs
parents:
diff changeset
   743
        LayoutButton();
hgs
parents:
diff changeset
   744
        }    
hgs
parents:
diff changeset
   745
    
hgs
parents:
diff changeset
   746
    if ( iButton )
hgs
parents:
diff changeset
   747
        {
hgs
parents:
diff changeset
   748
        iButton->SetSize( iButton->Size() );
hgs
parents:
diff changeset
   749
        }
hgs
parents:
diff changeset
   750
    else
hgs
parents:
diff changeset
   751
        {
hgs
parents:
diff changeset
   752
        User::LeaveIfError( AknIconUtils::SetSize( iLabelIcon->Bitmap(), 
hgs
parents:
diff changeset
   753
                                                   iIconLayout.Rect().Size() ) );
hgs
parents:
diff changeset
   754
        }
hgs
parents:
diff changeset
   755
     if ( iEditor->MsgEditorCustomDraw() )
hgs
parents:
diff changeset
   756
        {
hgs
parents:
diff changeset
   757
            iEditor->MsgEditorCustomDraw()->ResolveLayouts();
hgs
parents:
diff changeset
   758
        }
hgs
parents:
diff changeset
   759
    }
hgs
parents:
diff changeset
   760
hgs
parents:
diff changeset
   761
// ---------------------------------------------------------
hgs
parents:
diff changeset
   762
// CMsgAttachmentControl::CreateAttachmentIconsL
hgs
parents:
diff changeset
   763
// ---------------------------------------------------------
hgs
parents:
diff changeset
   764
//
hgs
parents:
diff changeset
   765
CGulIcon* CMsgAttachmentControl::CreateAttachmentIconsL()
hgs
parents:
diff changeset
   766
    {
hgs
parents:
diff changeset
   767
    TParse fileParse;
hgs
parents:
diff changeset
   768
    fileParse.Set( KIconMbmFile, &KDC_APP_BITMAP_DIR, NULL );
hgs
parents:
diff changeset
   769
    
hgs
parents:
diff changeset
   770
    CFbsBitmap* bitmap = NULL;
hgs
parents:
diff changeset
   771
    CFbsBitmap* mask = NULL;
hgs
parents:
diff changeset
   772
    
hgs
parents:
diff changeset
   773
    AknsUtils::CreateColorIconLC( AknsUtils::SkinInstance(),
hgs
parents:
diff changeset
   774
                                  KAknsIIDQgnIndiMceAttach,
hgs
parents:
diff changeset
   775
                                  KAknsIIDQsnIconColors,
hgs
parents:
diff changeset
   776
                                  EAknsCIQsnIconColorsCG13,
hgs
parents:
diff changeset
   777
                                  bitmap, 
hgs
parents:
diff changeset
   778
                                  mask,
hgs
parents:
diff changeset
   779
                                  fileParse.FullName(), 
hgs
parents:
diff changeset
   780
                                  EMbmMsgeditorQgn_indi_mce_attach,
hgs
parents:
diff changeset
   781
                                  EMbmMsgeditorQgn_indi_mce_attach_mask,
hgs
parents:
diff changeset
   782
                                  AKN_LAF_COLOR( KDefaultAttachmentColor ) ); 
hgs
parents:
diff changeset
   783
    
hgs
parents:
diff changeset
   784
    CGulIcon* result = CGulIcon::NewL( bitmap, mask ); // Ownership transferred
hgs
parents:
diff changeset
   785
    CleanupStack::Pop( 2 ); // bitmap, mask
hgs
parents:
diff changeset
   786
    
hgs
parents:
diff changeset
   787
    return result;
hgs
parents:
diff changeset
   788
    }
hgs
parents:
diff changeset
   789
hgs
parents:
diff changeset
   790
// ---------------------------------------------------------
hgs
parents:
diff changeset
   791
// CMsgAttachmentControl::CreateButtonL
hgs
parents:
diff changeset
   792
// ---------------------------------------------------------
hgs
parents:
diff changeset
   793
//
hgs
parents:
diff changeset
   794
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   795
void CMsgAttachmentControl::CreateButtonL()
hgs
parents:
diff changeset
   796
    {
hgs
parents:
diff changeset
   797
    delete iButton;
hgs
parents:
diff changeset
   798
    iButton = NULL;
hgs
parents:
diff changeset
   799
    
hgs
parents:
diff changeset
   800
    CGulIcon* buttonIcon = CGulIcon::NewL( iLabelIcon->Bitmap(), iLabelIcon->Mask() );
hgs
parents:
diff changeset
   801
    buttonIcon->SetBitmapsOwnedExternally( ETrue ); // bitmaps owned by iLabelIcon
hgs
parents:
diff changeset
   802
    
hgs
parents:
diff changeset
   803
    CleanupStack::PushL( buttonIcon );
hgs
parents:
diff changeset
   804
    
hgs
parents:
diff changeset
   805
    iButton = CAknButton::NewL( buttonIcon,
hgs
parents:
diff changeset
   806
                                NULL,
hgs
parents:
diff changeset
   807
                                NULL,
hgs
parents:
diff changeset
   808
                                NULL,
hgs
parents:
diff changeset
   809
                                KNullDesC,
hgs
parents:
diff changeset
   810
                                KNullDesC,
hgs
parents:
diff changeset
   811
                                KAknButtonSizeFitText,
hgs
parents:
diff changeset
   812
                                0 );
hgs
parents:
diff changeset
   813
        
hgs
parents:
diff changeset
   814
    CleanupStack::Pop( buttonIcon ); // buttonIcon owned by iButton
hgs
parents:
diff changeset
   815
    
hgs
parents:
diff changeset
   816
    iButton->SetIconScaleMode( EAspectRatioPreserved );
hgs
parents:
diff changeset
   817
    
hgs
parents:
diff changeset
   818
    iButton->SetObserver( this );
hgs
parents:
diff changeset
   819
    
hgs
parents:
diff changeset
   820
    if ( DrawableWindow() )
hgs
parents:
diff changeset
   821
        {
hgs
parents:
diff changeset
   822
        iButton->SetContainerWindowL( Window() );
hgs
parents:
diff changeset
   823
        iButton->ActivateL();
hgs
parents:
diff changeset
   824
        }
hgs
parents:
diff changeset
   825
    }
hgs
parents:
diff changeset
   826
#else
hgs
parents:
diff changeset
   827
void CMsgAttachmentControl::CreateButtonL()
hgs
parents:
diff changeset
   828
    {
hgs
parents:
diff changeset
   829
    }
hgs
parents:
diff changeset
   830
#endif // RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   831
hgs
parents:
diff changeset
   832
hgs
parents:
diff changeset
   833
// ---------------------------------------------------------
hgs
parents:
diff changeset
   834
// CMsgAttachmentControl::DoScrollTextL
hgs
parents:
diff changeset
   835
// ---------------------------------------------------------
hgs
parents:
diff changeset
   836
//
hgs
parents:
diff changeset
   837
TInt CMsgAttachmentControl::DoScrollTextL( TAny* aObject )
hgs
parents:
diff changeset
   838
    {
hgs
parents:
diff changeset
   839
    // cast, and call non-static function
hgs
parents:
diff changeset
   840
    CMsgAttachmentControl* control = static_cast<CMsgAttachmentControl*>( aObject );
hgs
parents:
diff changeset
   841
    TRAPD( error ,control->ScrollTextL() );
hgs
parents:
diff changeset
   842
    if ( error != KErrNone )
hgs
parents:
diff changeset
   843
        {
hgs
parents:
diff changeset
   844
        control->StopAutomaticScrolling();
hgs
parents:
diff changeset
   845
        User::Leave( error );
hgs
parents:
diff changeset
   846
        }
hgs
parents:
diff changeset
   847
    return KErrNone;
hgs
parents:
diff changeset
   848
    }
hgs
parents:
diff changeset
   849
hgs
parents:
diff changeset
   850
// ---------------------------------------------------------
hgs
parents:
diff changeset
   851
// CMsgAttachmentControl::ScrollTextL
hgs
parents:
diff changeset
   852
// ---------------------------------------------------------
hgs
parents:
diff changeset
   853
//
hgs
parents:
diff changeset
   854
void CMsgAttachmentControl::ScrollTextL()
hgs
parents:
diff changeset
   855
    {
hgs
parents:
diff changeset
   856
    TBool scrollText( ETrue );
hgs
parents:
diff changeset
   857
    if ( iScrollPos == EScrollPosBeginning )
hgs
parents:
diff changeset
   858
        {
hgs
parents:
diff changeset
   859
        SetTextForEditorL( EFalse, EFalse );
hgs
parents:
diff changeset
   860
        }
hgs
parents:
diff changeset
   861
    else if ( iScrollPos == EScrollPosEnd )
hgs
parents:
diff changeset
   862
        {
hgs
parents:
diff changeset
   863
        // Indicates that text has been scrolled to the end and should be restarted.
hgs
parents:
diff changeset
   864
        SetTextForEditorL( EFalse, ETrue );
hgs
parents:
diff changeset
   865
        iScrollPos = EScrollPosBeginning;
hgs
parents:
diff changeset
   866
        scrollText = EFalse;
hgs
parents:
diff changeset
   867
        
hgs
parents:
diff changeset
   868
        // Reset the text view to it's original position.
hgs
parents:
diff changeset
   869
        iEditor->TextView()->SetLeftTextMargin( 0 );
hgs
parents:
diff changeset
   870
        DrawNow();
hgs
parents:
diff changeset
   871
        
hgs
parents:
diff changeset
   872
        StartAutomaticScrolling( KScrollRestartDelay );
hgs
parents:
diff changeset
   873
        }
hgs
parents:
diff changeset
   874
    
hgs
parents:
diff changeset
   875
    if ( scrollText )
hgs
parents:
diff changeset
   876
        {
hgs
parents:
diff changeset
   877
        TInt scrolledPixels = iEditor->TextView()->ScrollDisplayL( TCursorPosition::EFRight );
hgs
parents:
diff changeset
   878
        if ( scrolledPixels == 0 )
hgs
parents:
diff changeset
   879
            {
hgs
parents:
diff changeset
   880
            // Indicates that text has been scrolled to the end. 
hgs
parents:
diff changeset
   881
            iScrollPos = EScrollPosEnd;
hgs
parents:
diff changeset
   882
            StartAutomaticScrolling( KScrollEndDelay ); 
hgs
parents:
diff changeset
   883
            }
hgs
parents:
diff changeset
   884
        else
hgs
parents:
diff changeset
   885
            {
hgs
parents:
diff changeset
   886
            iScrollPos = EScrollPosOther;
hgs
parents:
diff changeset
   887
            }
hgs
parents:
diff changeset
   888
        }
hgs
parents:
diff changeset
   889
    }
hgs
parents:
diff changeset
   890
hgs
parents:
diff changeset
   891
// ---------------------------------------------------------
hgs
parents:
diff changeset
   892
// CMsgAttachmentControl::DisableAutomaticScrolling
hgs
parents:
diff changeset
   893
// ---------------------------------------------------------
hgs
parents:
diff changeset
   894
//
hgs
parents:
diff changeset
   895
void CMsgAttachmentControl::DisableAutomaticScrolling()
hgs
parents:
diff changeset
   896
    {
hgs
parents:
diff changeset
   897
    iAutomaticScrolling = EFalse;    
hgs
parents:
diff changeset
   898
    StopAutomaticScrolling();
hgs
parents:
diff changeset
   899
    }
hgs
parents:
diff changeset
   900
hgs
parents:
diff changeset
   901
// ---------------------------------------------------------
hgs
parents:
diff changeset
   902
// CMsgAttachmentControl::EnableAutomaticScrolling
hgs
parents:
diff changeset
   903
// ---------------------------------------------------------
hgs
parents:
diff changeset
   904
//
hgs
parents:
diff changeset
   905
void CMsgAttachmentControl::EnableAutomaticScrolling()
hgs
parents:
diff changeset
   906
    {
hgs
parents:
diff changeset
   907
    iAutomaticScrolling = ETrue;
hgs
parents:
diff changeset
   908
    
hgs
parents:
diff changeset
   909
    if ( !iScrollTimer->IsActive() && 
hgs
parents:
diff changeset
   910
         IsFocused() )
hgs
parents:
diff changeset
   911
        {
hgs
parents:
diff changeset
   912
        StartAutomaticScrolling( KScrollStartDelay );
hgs
parents:
diff changeset
   913
        }
hgs
parents:
diff changeset
   914
    }
hgs
parents:
diff changeset
   915
hgs
parents:
diff changeset
   916
hgs
parents:
diff changeset
   917
// ---------------------------------------------------------
hgs
parents:
diff changeset
   918
// CMsgAttachmentControl::StartAutomaticScrolling
hgs
parents:
diff changeset
   919
// ---------------------------------------------------------
hgs
parents:
diff changeset
   920
//
hgs
parents:
diff changeset
   921
void CMsgAttachmentControl::StartAutomaticScrolling( TInt aStartDelay )
hgs
parents:
diff changeset
   922
    {
hgs
parents:
diff changeset
   923
    StopAutomaticScrolling();
hgs
parents:
diff changeset
   924
    iScrollTimer->Start( aStartDelay,
hgs
parents:
diff changeset
   925
                         KScrollTickDelay,
hgs
parents:
diff changeset
   926
                         TCallBack( DoScrollTextL, this ) );
hgs
parents:
diff changeset
   927
    }
hgs
parents:
diff changeset
   928
        
hgs
parents:
diff changeset
   929
// ---------------------------------------------------------
hgs
parents:
diff changeset
   930
// CMsgAttachmentControl::StopAutomaticScrolling
hgs
parents:
diff changeset
   931
// ---------------------------------------------------------
hgs
parents:
diff changeset
   932
//
hgs
parents:
diff changeset
   933
void CMsgAttachmentControl::StopAutomaticScrolling()
hgs
parents:
diff changeset
   934
    {
hgs
parents:
diff changeset
   935
    iScrollTimer->Cancel();
hgs
parents:
diff changeset
   936
    }
hgs
parents:
diff changeset
   937
hgs
parents:
diff changeset
   938
// ---------------------------------------------------------
hgs
parents:
diff changeset
   939
// CMsgAttachmentControl::ClipTextL
hgs
parents:
diff changeset
   940
// ---------------------------------------------------------
hgs
parents:
diff changeset
   941
//
hgs
parents:
diff changeset
   942
void CMsgAttachmentControl::ClipTextL( TPtr aText, TInt aClipWidth )
hgs
parents:
diff changeset
   943
    {
hgs
parents:
diff changeset
   944
    const CFont* font = iEditorLayout.Font();
hgs
parents:
diff changeset
   945
    
hgs
parents:
diff changeset
   946
    TInt fits = font->TextCount( aText, aClipWidth );
hgs
parents:
diff changeset
   947
        
hgs
parents:
diff changeset
   948
    if ( fits < aText.Length() )
hgs
parents:
diff changeset
   949
        {
hgs
parents:
diff changeset
   950
        // Clipping is actually done only if text is at the beginning.
hgs
parents:
diff changeset
   951
        TInt ellipsisWidth = font->CharWidthInPixels( KEllipsis );
hgs
parents:
diff changeset
   952
hgs
parents:
diff changeset
   953
        fits = font->TextCount( aText, aClipWidth - ellipsisWidth );
hgs
parents:
diff changeset
   954
        
hgs
parents:
diff changeset
   955
        // Work out the text directionality before the truncation point.
hgs
parents:
diff changeset
   956
        // First put the text in reverse order and then call
hgs
parents:
diff changeset
   957
        // TBidiText::TextDirectionality. This effectively tells the
hgs
parents:
diff changeset
   958
        // directionality of the last strongly directional character
hgs
parents:
diff changeset
   959
        // in the text.
hgs
parents:
diff changeset
   960
        HBufC* temp = aText.Left( fits ).AllocL();
hgs
parents:
diff changeset
   961
        TPtr tempPtr = temp->Des();
hgs
parents:
diff changeset
   962
hgs
parents:
diff changeset
   963
        TInt i = 0;
hgs
parents:
diff changeset
   964
        TInt j = tempPtr.Length() - 1;
hgs
parents:
diff changeset
   965
        while ( i < j )
hgs
parents:
diff changeset
   966
            {
hgs
parents:
diff changeset
   967
            TText t = tempPtr[i];
hgs
parents:
diff changeset
   968
            tempPtr[i++] = tempPtr[j];
hgs
parents:
diff changeset
   969
            tempPtr[j--] = t;
hgs
parents:
diff changeset
   970
            }
hgs
parents:
diff changeset
   971
        
hgs
parents:
diff changeset
   972
        TBidiText::TDirectionality dir = TBidiText::TextDirectionality( tempPtr );
hgs
parents:
diff changeset
   973
hgs
parents:
diff changeset
   974
        delete temp;
hgs
parents:
diff changeset
   975
hgs
parents:
diff changeset
   976
        TText dirMarker = ( dir == TBidiText::ERightToLeft ) ? KRLMarker : 
hgs
parents:
diff changeset
   977
                                                               KLRMarker;
hgs
parents:
diff changeset
   978
        
hgs
parents:
diff changeset
   979
        // Insert zero width joiner if necessary to get the correct glyph form
hgs
parents:
diff changeset
   980
        // before truncation.
hgs
parents:
diff changeset
   981
        TText lastChar = aText[fits - 1];
hgs
parents:
diff changeset
   982
        TText next = aText[fits];
hgs
parents:
diff changeset
   983
        
hgs
parents:
diff changeset
   984
        TInt ellipsisPos = fits;
hgs
parents:
diff changeset
   985
        
hgs
parents:
diff changeset
   986
        if ( CFont::CharactersJoin( lastChar, KZeroWidthJoiner ) &&
hgs
parents:
diff changeset
   987
             CFont::CharactersJoin( lastChar, next ) )
hgs
parents:
diff changeset
   988
            {
hgs
parents:
diff changeset
   989
            aText[fits] = KZeroWidthJoiner;
hgs
parents:
diff changeset
   990
            ellipsisPos++;
hgs
parents:
diff changeset
   991
            }
hgs
parents:
diff changeset
   992
            
hgs
parents:
diff changeset
   993
        aText.SetMax();
hgs
parents:
diff changeset
   994
        
hgs
parents:
diff changeset
   995
        aText[ellipsisPos] = KEllipsis;    
hgs
parents:
diff changeset
   996
hgs
parents:
diff changeset
   997
        // Inserting direction marker after the ellipsis ensures that
hgs
parents:
diff changeset
   998
        // the ellipsis is shown on the correct side of the text
hgs
parents:
diff changeset
   999
        // before it.
hgs
parents:
diff changeset
  1000
        aText[ellipsisPos + 1] = dirMarker;
hgs
parents:
diff changeset
  1001
hgs
parents:
diff changeset
  1002
        aText.SetLength( ellipsisPos + 2 );
hgs
parents:
diff changeset
  1003
        }
hgs
parents:
diff changeset
  1004
    }
hgs
parents:
diff changeset
  1005
hgs
parents:
diff changeset
  1006
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1007
// CMsgAttachmentControl::UpdateFocusL
hgs
parents:
diff changeset
  1008
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1009
//
hgs
parents:
diff changeset
  1010
void CMsgAttachmentControl::UpdateFocusL()
hgs
parents:
diff changeset
  1011
    {
hgs
parents:
diff changeset
  1012
    TCharFormat charFormat;
hgs
parents:
diff changeset
  1013
    TCharFormatMask applyMask;
hgs
parents:
diff changeset
  1014
hgs
parents:
diff changeset
  1015
    iEditor->RichText()->GetCharFormat( charFormat,
hgs
parents:
diff changeset
  1016
                                        applyMask,
hgs
parents:
diff changeset
  1017
                                        0,
hgs
parents:
diff changeset
  1018
                                        iEditor->TextLength() );
hgs
parents:
diff changeset
  1019
            
hgs
parents:
diff changeset
  1020
    if ( !IsFocused() )
hgs
parents:
diff changeset
  1021
        {
hgs
parents:
diff changeset
  1022
        TRgb textColor( KRgbBlack );
hgs
parents:
diff changeset
  1023
        AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), 
hgs
parents:
diff changeset
  1024
                                   textColor, 
hgs
parents:
diff changeset
  1025
                                   KAknsIIDQsnTextColors, 
hgs
parents:
diff changeset
  1026
                                   EAknsCIQsnTextColorsCG6 );
hgs
parents:
diff changeset
  1027
                                   
hgs
parents:
diff changeset
  1028
        charFormat.iFontPresentation.iTextColor = textColor;
hgs
parents:
diff changeset
  1029
        applyMask.SetAttrib( EAttColor );               
hgs
parents:
diff changeset
  1030
        
hgs
parents:
diff changeset
  1031
        charFormat.iFontPresentation.iHighlightStyle = TFontPresentation::EFontHighlightNone;
hgs
parents:
diff changeset
  1032
        applyMask.SetAttrib( EAttFontHighlightStyle );
hgs
parents:
diff changeset
  1033
        }
hgs
parents:
diff changeset
  1034
    else
hgs
parents:
diff changeset
  1035
        {
hgs
parents:
diff changeset
  1036
        TRgb textColor( KRgbWhite );
hgs
parents:
diff changeset
  1037
        AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), 
hgs
parents:
diff changeset
  1038
                                   textColor, 
hgs
parents:
diff changeset
  1039
                                   KAknsIIDQsnHighlightColors, 
hgs
parents:
diff changeset
  1040
                                   EAknsCIQsnTextColorsCG3 );
hgs
parents:
diff changeset
  1041
                                   
hgs
parents:
diff changeset
  1042
        charFormat.iFontPresentation.iTextColor = textColor;
hgs
parents:
diff changeset
  1043
        applyMask.SetAttrib( EAttColor );               
hgs
parents:
diff changeset
  1044
           
hgs
parents:
diff changeset
  1045
        TRgb highlightColor( KRgbBlue );
hgs
parents:
diff changeset
  1046
        AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), 
hgs
parents:
diff changeset
  1047
                                   highlightColor, 
hgs
parents:
diff changeset
  1048
                                   KAknsIIDQsnHighlightColors, 
hgs
parents:
diff changeset
  1049
                                   EAknsCIQsnHighlightColorsCG1 );
hgs
parents:
diff changeset
  1050
                                   
hgs
parents:
diff changeset
  1051
        charFormat.iFontPresentation.iHighlightColor = highlightColor;
hgs
parents:
diff changeset
  1052
        applyMask.SetAttrib( EAttFontHighlightColor );
hgs
parents:
diff changeset
  1053
hgs
parents:
diff changeset
  1054
        charFormat.iFontPresentation.iHighlightStyle = TFontPresentation::EFontHighlightNormal;
hgs
parents:
diff changeset
  1055
        applyMask.SetAttrib( EAttFontHighlightStyle );
hgs
parents:
diff changeset
  1056
        }
hgs
parents:
diff changeset
  1057
    
hgs
parents:
diff changeset
  1058
    iEditor->RichText()->ApplyCharFormatL( charFormat,
hgs
parents:
diff changeset
  1059
                                           applyMask,
hgs
parents:
diff changeset
  1060
                                           0,
hgs
parents:
diff changeset
  1061
                                           iEditor->TextLength() );    
hgs
parents:
diff changeset
  1062
    }
hgs
parents:
diff changeset
  1063
hgs
parents:
diff changeset
  1064
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1065
// CMsgAttachmentControl::DoHandleResourceChangeBeforeL
hgs
parents:
diff changeset
  1066
//
hgs
parents:
diff changeset
  1067
// Contains functionality that base class handle resource change 
hgs
parents:
diff changeset
  1068
// is depending on to be completed before it can be executed properly.
hgs
parents:
diff changeset
  1069
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1070
//
hgs
parents:
diff changeset
  1071
void CMsgAttachmentControl::DoHandleResourceChangeBeforeL( TInt aType )
hgs
parents:
diff changeset
  1072
    {
hgs
parents:
diff changeset
  1073
    switch( aType )
hgs
parents:
diff changeset
  1074
        {
hgs
parents:
diff changeset
  1075
        case KEikDynamicLayoutVariantSwitch:
hgs
parents:
diff changeset
  1076
            {
hgs
parents:
diff changeset
  1077
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
  1078
            if ( AknLayoutUtils::PenEnabled() )
hgs
parents:
diff changeset
  1079
                {
hgs
parents:
diff changeset
  1080
                if ( !iButton )
hgs
parents:
diff changeset
  1081
                    {
hgs
parents:
diff changeset
  1082
                    CreateButtonL();
hgs
parents:
diff changeset
  1083
                    }
hgs
parents:
diff changeset
  1084
                }
hgs
parents:
diff changeset
  1085
            else
hgs
parents:
diff changeset
  1086
                {
hgs
parents:
diff changeset
  1087
                delete iButton;
hgs
parents:
diff changeset
  1088
                iButton = NULL;
hgs
parents:
diff changeset
  1089
                }
hgs
parents:
diff changeset
  1090
#endif // RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
  1091
            break;
hgs
parents:
diff changeset
  1092
            }
hgs
parents:
diff changeset
  1093
        default:
hgs
parents:
diff changeset
  1094
            {
hgs
parents:
diff changeset
  1095
            break;
hgs
parents:
diff changeset
  1096
            }
hgs
parents:
diff changeset
  1097
        }
hgs
parents:
diff changeset
  1098
    }
hgs
parents:
diff changeset
  1099
hgs
parents:
diff changeset
  1100
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1101
// CMsgAttachmentControl::DoHandleResourceChangeAfterL
hgs
parents:
diff changeset
  1102
//
hgs
parents:
diff changeset
  1103
// Contains functionality that is dependant of base class handle
hgs
parents:
diff changeset
  1104
// resource change to complete before these can be executed properly.
hgs
parents:
diff changeset
  1105
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1106
//
hgs
parents:
diff changeset
  1107
void CMsgAttachmentControl::DoHandleResourceChangeAfterL( TInt aType )
hgs
parents:
diff changeset
  1108
    {
hgs
parents:
diff changeset
  1109
    switch( aType )
hgs
parents:
diff changeset
  1110
        {
hgs
parents:
diff changeset
  1111
        case KEikDynamicLayoutVariantSwitch:
hgs
parents:
diff changeset
  1112
            {
hgs
parents:
diff changeset
  1113
            StopAutomaticScrolling();
hgs
parents:
diff changeset
  1114
            iScrollPos = EScrollPosBeginning;
hgs
parents:
diff changeset
  1115
            SetTextForEditorL( EFalse, ETrue );  
hgs
parents:
diff changeset
  1116
            
hgs
parents:
diff changeset
  1117
            break;
hgs
parents:
diff changeset
  1118
            }
hgs
parents:
diff changeset
  1119
        case KAknsMessageSkinChange:
hgs
parents:
diff changeset
  1120
            {
hgs
parents:
diff changeset
  1121
            CGulIcon* icon = CreateAttachmentIconsL();
hgs
parents:
diff changeset
  1122
            CleanupStack::PushL( icon );
hgs
parents:
diff changeset
  1123
            
hgs
parents:
diff changeset
  1124
            if ( iButton )
hgs
parents:
diff changeset
  1125
                {
hgs
parents:
diff changeset
  1126
                CGulIcon* buttonIcon = CGulIcon::NewL( icon->Bitmap(), icon->Mask() );
hgs
parents:
diff changeset
  1127
                buttonIcon->SetBitmapsOwnedExternally( ETrue ); // bitmaps owned by iLabelIcon
hgs
parents:
diff changeset
  1128
    
hgs
parents:
diff changeset
  1129
                iButton->State()->SetIcon( buttonIcon ); // buttonIcon ownership transferred
hgs
parents:
diff changeset
  1130
                }
hgs
parents:
diff changeset
  1131
            
hgs
parents:
diff changeset
  1132
            // Make the change here as button will take the old size from
hgs
parents:
diff changeset
  1133
            // old icons that must be still valid when setting to button icon.
hgs
parents:
diff changeset
  1134
            delete iLabelIcon;
hgs
parents:
diff changeset
  1135
            iLabelIcon = icon;
hgs
parents:
diff changeset
  1136
            
hgs
parents:
diff changeset
  1137
            CleanupStack::Pop( icon );
hgs
parents:
diff changeset
  1138
            
hgs
parents:
diff changeset
  1139
            ResolveLayoutsL();
hgs
parents:
diff changeset
  1140
            break;
hgs
parents:
diff changeset
  1141
            }
hgs
parents:
diff changeset
  1142
        default:
hgs
parents:
diff changeset
  1143
            {
hgs
parents:
diff changeset
  1144
            break;
hgs
parents:
diff changeset
  1145
            }
hgs
parents:
diff changeset
  1146
        }
hgs
parents:
diff changeset
  1147
    }
hgs
parents:
diff changeset
  1148
hgs
parents:
diff changeset
  1149
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1150
// CMsgAttachmentControl::AddToAttachmentArrayL
hgs
parents:
diff changeset
  1151
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1152
//
hgs
parents:
diff changeset
  1153
void CMsgAttachmentControl::AddToAttachmentArrayL( const TDesC& aName, TInt aIndex )
hgs
parents:
diff changeset
  1154
    {
hgs
parents:
diff changeset
  1155
    HBufC* convertedFileName = 
hgs
parents:
diff changeset
  1156
                AknTextUtils::ConvertFileNameL( aName );
hgs
parents:
diff changeset
  1157
    CleanupStack::PushL( convertedFileName );
hgs
parents:
diff changeset
  1158
    
hgs
parents:
diff changeset
  1159
    TPtr convertedFileNamePtr = convertedFileName->Des();
hgs
parents:
diff changeset
  1160
    
hgs
parents:
diff changeset
  1161
    AknTextUtils::StripCharacters( convertedFileNamePtr, KStripList );
hgs
parents:
diff changeset
  1162
    
hgs
parents:
diff changeset
  1163
    iAttachmentArray->InsertL( aIndex, *convertedFileName );
hgs
parents:
diff changeset
  1164
    
hgs
parents:
diff changeset
  1165
    CleanupStack::PopAndDestroy( convertedFileName );
hgs
parents:
diff changeset
  1166
    }
hgs
parents:
diff changeset
  1167
hgs
parents:
diff changeset
  1168
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1169
// CMsgAttachmentControl::LayoutButton
hgs
parents:
diff changeset
  1170
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1171
//    
hgs
parents:
diff changeset
  1172
void CMsgAttachmentControl::LayoutButton()
hgs
parents:
diff changeset
  1173
    {
hgs
parents:
diff changeset
  1174
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
  1175
    CMsgExpandableControl::LayoutButton();
hgs
parents:
diff changeset
  1176
    
hgs
parents:
diff changeset
  1177
    if ( iButton )
hgs
parents:
diff changeset
  1178
        {
hgs
parents:
diff changeset
  1179
        TMargins8 margins;
hgs
parents:
diff changeset
  1180
        TRect buttonRect = iButtonLayout.Rect();
hgs
parents:
diff changeset
  1181
        TRect iconRect = iIconLayout.Rect();
hgs
parents:
diff changeset
  1182
        margins.iTop = iconRect.iTl.iY - buttonRect.iTl.iY;
hgs
parents:
diff changeset
  1183
        margins.iBottom = buttonRect.iBr.iY - iconRect.iBr.iY;
hgs
parents:
diff changeset
  1184
        margins.iLeft = iconRect.iTl.iX - buttonRect.iTl.iX;
hgs
parents:
diff changeset
  1185
        margins.iRight = buttonRect.iBr.iX - iconRect.iBr.iX;
hgs
parents:
diff changeset
  1186
        
hgs
parents:
diff changeset
  1187
        iButton->SetMargins( margins );
hgs
parents:
diff changeset
  1188
        }
hgs
parents:
diff changeset
  1189
#endif // RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
  1190
    }
hgs
parents:
diff changeset
  1191
hgs
parents:
diff changeset
  1192
hgs
parents:
diff changeset
  1193
//  End of File