mobilemessaging/postcard/postcardsrc/PostcardRecipientWrapper.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) 2005 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:  
hgs
parents:
diff changeset
    15
*       Helper class for recipient/phonebook handling
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
hgs
parents:
diff changeset
    21
// ========== INCLUDE FILES ================================
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
#include <badesca.h>
hgs
parents:
diff changeset
    24
#include <e32std.h>
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
#include <aknlists.h> // PopupQuery stuff
hgs
parents:
diff changeset
    27
#include <aknPopup.h> 
hgs
parents:
diff changeset
    28
#include <aknpopuplayout.h>
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
#include <StringLoader.h>
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
#include <Postcard.rsg>
hgs
parents:
diff changeset
    33
#include "PostcardAppUi.h"
hgs
parents:
diff changeset
    34
#include "PostcardContact.h"
hgs
parents:
diff changeset
    35
#include "PostcardDocument.h"
hgs
parents:
diff changeset
    36
#include "PostcardRecipientWrapper.h"
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
// ========== EXTERNAL DATA STRUCTURES =====================
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
// ========== EXTERNAL FUNCTION PROTOTYPES =================
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
// ========== CONSTANTS ====================================
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
// ========== MACROS =======================================
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
// ========== LOCAL CONSTANTS AND MACROS ===================
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
// ========== MODULE DATA STRUCTURES =======================
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
// ========== LOCAL FUNCTION PROTOTYPES ====================
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
// ========== LOCAL FUNCTIONS ==============================
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
// ========== MEMBER FUNCTIONS =============================
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
// ---------------------------------------------------------
hgs
parents:
diff changeset
    57
// CPostcardRecipientWrapper::CPostcardRecipientWrapper
hgs
parents:
diff changeset
    58
// ---------------------------------------------------------
hgs
parents:
diff changeset
    59
CPostcardRecipientWrapper::CPostcardRecipientWrapper( 
hgs
parents:
diff changeset
    60
    CPostcardDocument& aDocument, 
hgs
parents:
diff changeset
    61
    CPostcardAppUi& aAppUi,
hgs
parents:
diff changeset
    62
    CPostcardContact& aContact
hgs
parents:
diff changeset
    63
    ) :
hgs
parents:
diff changeset
    64
    iDocument( aDocument ),
hgs
parents:
diff changeset
    65
    iAppUi( aAppUi ),
hgs
parents:
diff changeset
    66
    iContact( aContact )
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
    {    
hgs
parents:
diff changeset
    69
    }
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
// ---------------------------------------------------------
hgs
parents:
diff changeset
    72
// CPostcardRecipientWrapper::~CPostcardRecipientWrapper
hgs
parents:
diff changeset
    73
// ---------------------------------------------------------
hgs
parents:
diff changeset
    74
CPostcardRecipientWrapper::~CPostcardRecipientWrapper( )
hgs
parents:
diff changeset
    75
    {
hgs
parents:
diff changeset
    76
    }
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
// ---------------------------------------------------------
hgs
parents:
diff changeset
    79
// CPostcardRecipientWrapper::ConstructL
hgs
parents:
diff changeset
    80
// ---------------------------------------------------------
hgs
parents:
diff changeset
    81
void CPostcardRecipientWrapper::ConstructL( )
hgs
parents:
diff changeset
    82
    {
hgs
parents:
diff changeset
    83
    }
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
// ---------------------------------------------------------
hgs
parents:
diff changeset
    86
// CPostcardRecipientWrapper::NewL
hgs
parents:
diff changeset
    87
// ---------------------------------------------------------
hgs
parents:
diff changeset
    88
CPostcardRecipientWrapper* CPostcardRecipientWrapper::NewL( 
hgs
parents:
diff changeset
    89
    CPostcardDocument& aDocument,
hgs
parents:
diff changeset
    90
    CPostcardAppUi& aAppUi,
hgs
parents:
diff changeset
    91
    CPostcardContact& aContact
hgs
parents:
diff changeset
    92
    )
hgs
parents:
diff changeset
    93
    {
hgs
parents:
diff changeset
    94
    CPostcardRecipientWrapper* self = 
hgs
parents:
diff changeset
    95
        new ( ELeave ) CPostcardRecipientWrapper(
hgs
parents:
diff changeset
    96
            aDocument,
hgs
parents:
diff changeset
    97
            aAppUi,
hgs
parents:
diff changeset
    98
            aContact
hgs
parents:
diff changeset
    99
            );
hgs
parents:
diff changeset
   100
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
   101
    self->ConstructL( );
hgs
parents:
diff changeset
   102
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
   103
    return self;
hgs
parents:
diff changeset
   104
    }
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
// ---------------------------------------------------------
hgs
parents:
diff changeset
   107
// CPostcardRecipientWrapper::AskLocationL
hgs
parents:
diff changeset
   108
// ---------------------------------------------------------
hgs
parents:
diff changeset
   109
TBool CPostcardRecipientWrapper::AskLocationL(
hgs
parents:
diff changeset
   110
    CPostcardContact::TLocation& aLocation )
hgs
parents:
diff changeset
   111
    {
hgs
parents:
diff changeset
   112
    static const CPostcardContact::TLocation locations[] =
hgs
parents:
diff changeset
   113
        {
hgs
parents:
diff changeset
   114
        CPostcardContact::ELocationPreferred,
hgs
parents:
diff changeset
   115
        CPostcardContact::ELocationHome,
hgs
parents:
diff changeset
   116
        CPostcardContact::ELocationWork
hgs
parents:
diff changeset
   117
        };
hgs
parents:
diff changeset
   118
    const TInt KNumLocations = sizeof( locations ) / sizeof( locations[ 0 ] );
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
    CPostcardContact::TLocation foundLocations[ KNumLocations ];
hgs
parents:
diff changeset
   121
    TInt numLocations = 0;
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
    // Check if contact has address for possible locations
hgs
parents:
diff changeset
   124
    for( TInt i = 0; i < KNumLocations; i++ )
hgs
parents:
diff changeset
   125
        {
hgs
parents:
diff changeset
   126
        if ( iContact.HasLocationL(locations[i]) )
hgs
parents:
diff changeset
   127
            {
hgs
parents:
diff changeset
   128
            foundLocations[ numLocations++ ] = locations[ i ];
hgs
parents:
diff changeset
   129
            }
hgs
parents:
diff changeset
   130
        }
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
    CPostcardContact::TLocation location =
hgs
parents:
diff changeset
   133
        CPostcardContact::ELocationPreferred;
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
    if ( numLocations == 0 )
hgs
parents:
diff changeset
   136
        {
hgs
parents:
diff changeset
   137
        // Import only the name fields
hgs
parents:
diff changeset
   138
        }
hgs
parents:
diff changeset
   139
    else if ( numLocations == 1 )
hgs
parents:
diff changeset
   140
        { // Only one location used -> use that
hgs
parents:
diff changeset
   141
        location = foundLocations[ 0 ];
hgs
parents:
diff changeset
   142
        }
hgs
parents:
diff changeset
   143
    else
hgs
parents:
diff changeset
   144
        {
hgs
parents:
diff changeset
   145
        CAknSingleHeadingPopupMenuStyleListBox* listBox =
hgs
parents:
diff changeset
   146
            new(ELeave) CAknSingleHeadingPopupMenuStyleListBox();
hgs
parents:
diff changeset
   147
        CleanupStack::PushL( listBox );
hgs
parents:
diff changeset
   148
        CAknPopupList* popupList = CAknPopupList::NewL( listBox,
hgs
parents:
diff changeset
   149
            R_POSTCARD_SOFTKEYS_OK_BACK__OK,
hgs
parents:
diff changeset
   150
            AknPopupLayouts::EMenuGraphicHeadingWindow );
hgs
parents:
diff changeset
   151
        CleanupStack::PushL( popupList );
hgs
parents:
diff changeset
   152
        listBox->ConstructL( popupList, CEikListBox::ELeftDownInViewRect );
hgs
parents:
diff changeset
   153
        listBox->CreateScrollBarFrameL( ETrue );
hgs
parents:
diff changeset
   154
        listBox->ScrollBarFrame()->SetScrollBarVisibilityL(
hgs
parents:
diff changeset
   155
            CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
hgs
parents:
diff changeset
   156
hgs
parents:
diff changeset
   157
        TInt resId = R_POSTCARD_ADDRESS_SELECTION_TITLE;
hgs
parents:
diff changeset
   158
        HBufC* titleText = iAppUi.ReadFromResourceLC( resId );
hgs
parents:
diff changeset
   159
        popupList->SetTitleL( *titleText );
hgs
parents:
diff changeset
   160
        CleanupStack::PopAndDestroy( titleText ); // titleText
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
        CDesCArrayFlat* strings = new (ELeave) CDesCArrayFlat( KNumLocations );
hgs
parents:
diff changeset
   163
        CleanupStack::PushL( strings );
hgs
parents:
diff changeset
   164
        
hgs
parents:
diff changeset
   165
        for( TInt i = 0; i < numLocations; i++ )
hgs
parents:
diff changeset
   166
            {
hgs
parents:
diff changeset
   167
            HBufC* buffer = GetFormattedStringL( foundLocations[ i ] );
hgs
parents:
diff changeset
   168
            CleanupStack::PushL( buffer );
hgs
parents:
diff changeset
   169
            strings->AppendL( *buffer );
hgs
parents:
diff changeset
   170
            CleanupStack::PopAndDestroy( buffer );
hgs
parents:
diff changeset
   171
            }
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
        // For each list item replace the %N in the item format with the number 
hgs
parents:
diff changeset
   174
        // of the icon, the %0N with the label of the address (Default, Home or
hgs
parents:
diff changeset
   175
        // Business) and the %1N with the actual combined address string.        
hgs
parents:
diff changeset
   176
        
hgs
parents:
diff changeset
   177
        CTextListBoxModel* model = listBox->Model();
hgs
parents:
diff changeset
   178
        model->SetItemTextArray( strings );
hgs
parents:
diff changeset
   179
        model->SetOwnershipType( ELbmOwnsItemArray );
hgs
parents:
diff changeset
   180
        CleanupStack::Pop( strings );
hgs
parents:
diff changeset
   181
                
hgs
parents:
diff changeset
   182
        // And execute the dialog
hgs
parents:
diff changeset
   183
        CleanupStack::Pop( popupList );
hgs
parents:
diff changeset
   184
        TInt popupOk = popupList->ExecuteLD();
hgs
parents:
diff changeset
   185
        TInt itemIndex = listBox->CurrentItemIndex();
hgs
parents:
diff changeset
   186
        CleanupStack::PopAndDestroy( listBox ); // listBox;
hgs
parents:
diff changeset
   187
        	
hgs
parents:
diff changeset
   188
		// Coverty fix, Negative return; http://ousrv057/cov.cgi?cid=36961
hgs
parents:
diff changeset
   189
        if ( popupOk && itemIndex > 0)
hgs
parents:
diff changeset
   190
	        {
hgs
parents:
diff changeset
   191
	        location = foundLocations[ itemIndex ];
hgs
parents:
diff changeset
   192
	        }
hgs
parents:
diff changeset
   193
        else
hgs
parents:
diff changeset
   194
            {
hgs
parents:
diff changeset
   195
            // Nothing was selected so just return..
hgs
parents:
diff changeset
   196
            return EFalse;
hgs
parents:
diff changeset
   197
            }
hgs
parents:
diff changeset
   198
        }
hgs
parents:
diff changeset
   199
    // Set location as out parameter
hgs
parents:
diff changeset
   200
    aLocation = location;
hgs
parents:
diff changeset
   201
    return ETrue;
hgs
parents:
diff changeset
   202
    }
hgs
parents:
diff changeset
   203
hgs
parents:
diff changeset
   204
// ---------------------------------------------------------
hgs
parents:
diff changeset
   205
// CPostcardRecipientWrapper::GetFormattedStringL
hgs
parents:
diff changeset
   206
// ---------------------------------------------------------
hgs
parents:
diff changeset
   207
HBufC* CPostcardRecipientWrapper::GetFormattedStringL(
hgs
parents:
diff changeset
   208
    CPostcardContact::TLocation aAddressLocation )
hgs
parents:
diff changeset
   209
    {
hgs
parents:
diff changeset
   210
    _LIT(KPostcardSelectItemFormat, "%0U\t%1U");
hgs
parents:
diff changeset
   211
    TPtrC itemFormat(KPostcardSelectItemFormat);
hgs
parents:
diff changeset
   212
hgs
parents:
diff changeset
   213
    TBuf<64> addressBuffer;
hgs
parents:
diff changeset
   214
    addressBuffer.Zero();
hgs
parents:
diff changeset
   215
hgs
parents:
diff changeset
   216
    static const TInt resIds[] =
hgs
parents:
diff changeset
   217
        {
hgs
parents:
diff changeset
   218
        R_POSTCARD_ADDRESS_SELECTION_NONE,
hgs
parents:
diff changeset
   219
        R_POSTCARD_ADDRESS_SELECTION_HOME,
hgs
parents:
diff changeset
   220
        R_POSTCARD_ADDRESS_SELECTION_WORK
hgs
parents:
diff changeset
   221
        };
hgs
parents:
diff changeset
   222
    TInt resId = resIds[ aAddressLocation ];
hgs
parents:
diff changeset
   223
    HBufC* itemText = iAppUi.ReadFromResourceLC( resId );
hgs
parents:
diff changeset
   224
    iContact.GetContactStringL( addressBuffer, aAddressLocation );
hgs
parents:
diff changeset
   225
    
hgs
parents:
diff changeset
   226
    TInt formatBufferLength = itemFormat.Length() + itemText->Length() + addressBuffer.Length();
hgs
parents:
diff changeset
   227
            
hgs
parents:
diff changeset
   228
    HBufC* sourceBuffer = HBufC::NewLC(formatBufferLength);
hgs
parents:
diff changeset
   229
    HBufC* destinationBuffer = HBufC::NewLC(formatBufferLength);
hgs
parents:
diff changeset
   230
    TPtr sourceBufferPtr = sourceBuffer->Des();
hgs
parents:
diff changeset
   231
    TPtr destinationBufferPtr = destinationBuffer->Des();
hgs
parents:
diff changeset
   232
            
hgs
parents:
diff changeset
   233
    sourceBufferPtr.Copy(itemFormat);
hgs
parents:
diff changeset
   234
hgs
parents:
diff changeset
   235
    // List item label -> location 0, value itemText
hgs
parents:
diff changeset
   236
    StringLoader::Format(destinationBufferPtr, sourceBufferPtr, 0, itemText->Des( ) );
hgs
parents:
diff changeset
   237
    sourceBufferPtr.Copy(destinationBufferPtr);
hgs
parents:
diff changeset
   238
hgs
parents:
diff changeset
   239
    // List item text (address string) -> location 1, value addressBuffer
hgs
parents:
diff changeset
   240
    StringLoader::Format(destinationBufferPtr, sourceBufferPtr, 1, addressBuffer);
hgs
parents:
diff changeset
   241
hgs
parents:
diff changeset
   242
    CleanupStack::Pop( destinationBuffer ); 
hgs
parents:
diff changeset
   243
    CleanupStack::PopAndDestroy( 2, itemText ); // itemText, sourceBuffer
hgs
parents:
diff changeset
   244
    return destinationBuffer;
hgs
parents:
diff changeset
   245
    }
hgs
parents:
diff changeset
   246
    
hgs
parents:
diff changeset
   247
// EOF