locationmapnavfw/library/src/mnmapimageservicebase.cpp
author hgs
Wed, 03 Nov 2010 23:28:39 +0530
changeset 56 4e949f03ecc5
permissions -rw-r--r--
201044
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  CMnMapImageServiceBase class 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
#include <e32base.h>
hgs
parents:
diff changeset
    20
#include <fbs.h>
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include "mndebug.h"
hgs
parents:
diff changeset
    23
#include "mnerrors.h"
hgs
parents:
diff changeset
    24
#include "mninternal.h"
hgs
parents:
diff changeset
    25
#include "mninternal.inl"
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
#include "mnmapimageservicebase.h"
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
// ========================== MEMBER FUNCTIONS ===============================
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    32
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    33
//
hgs
parents:
diff changeset
    34
EXPORT_C CMnMapImageServiceBase::CMnMapImageServiceBase()
hgs
parents:
diff changeset
    35
    {
hgs
parents:
diff changeset
    36
    }
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    39
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    40
//
hgs
parents:
diff changeset
    41
EXPORT_C CMnMapImageServiceBase::~CMnMapImageServiceBase()
hgs
parents:
diff changeset
    42
    {
hgs
parents:
diff changeset
    43
    if ( iBitmap )
hgs
parents:
diff changeset
    44
        {
hgs
parents:
diff changeset
    45
        delete iBitmap;
hgs
parents:
diff changeset
    46
        }
hgs
parents:
diff changeset
    47
    }
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    50
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    51
//
hgs
parents:
diff changeset
    52
EXPORT_C void CMnMapImageServiceBase::BaseConstructL()
hgs
parents:
diff changeset
    53
    {
hgs
parents:
diff changeset
    54
    CMnServiceBase::BaseConstructL();
hgs
parents:
diff changeset
    55
    }
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    58
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    59
//
hgs
parents:
diff changeset
    60
EXPORT_C const TMnMapImageParams& CMnMapImageServiceBase::MapImageParams() const
hgs
parents:
diff changeset
    61
    {
hgs
parents:
diff changeset
    62
    return iMapImageParams;
hgs
parents:
diff changeset
    63
    }
hgs
parents:
diff changeset
    64
        
hgs
parents:
diff changeset
    65
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    66
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    67
//
hgs
parents:
diff changeset
    68
EXPORT_C TMnMapImageParams& CMnMapImageServiceBase::MapImageParams()
hgs
parents:
diff changeset
    69
    {
hgs
parents:
diff changeset
    70
    return iMapImageParams;
hgs
parents:
diff changeset
    71
    }
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    74
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    75
//
hgs
parents:
diff changeset
    76
EXPORT_C void CMnMapImageServiceBase::SetMapImageParams( const TMnMapImageParams& aImageParams )
hgs
parents:
diff changeset
    77
    {
hgs
parents:
diff changeset
    78
    iMapImageParams = aImageParams;
hgs
parents:
diff changeset
    79
    }
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    82
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    83
//
hgs
parents:
diff changeset
    84
EXPORT_C TRect CMnMapImageServiceBase::TargetRect() const
hgs
parents:
diff changeset
    85
    {
hgs
parents:
diff changeset
    86
    if ( iBitmap )
hgs
parents:
diff changeset
    87
        {
hgs
parents:
diff changeset
    88
        return TRect( iTargetOrigin, iBitmap->SizeInPixels() );
hgs
parents:
diff changeset
    89
        }
hgs
parents:
diff changeset
    90
    else
hgs
parents:
diff changeset
    91
        {
hgs
parents:
diff changeset
    92
        return TRect( 0, 0, 0, 0 );
hgs
parents:
diff changeset
    93
        }
hgs
parents:
diff changeset
    94
    }
hgs
parents:
diff changeset
    95
        
hgs
parents:
diff changeset
    96
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    97
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    98
//
hgs
parents:
diff changeset
    99
EXPORT_C CMnMapImage::TShowOptions CMnMapImageServiceBase::ShowOptions() const
hgs
parents:
diff changeset
   100
    {
hgs
parents:
diff changeset
   101
    return iShowOptions;
hgs
parents:
diff changeset
   102
    }
hgs
parents:
diff changeset
   103
        
hgs
parents:
diff changeset
   104
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   105
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   106
//
hgs
parents:
diff changeset
   107
EXPORT_C CFbsBitmap& CMnMapImageServiceBase::TargetBitmap() const
hgs
parents:
diff changeset
   108
    {
hgs
parents:
diff changeset
   109
    if ( !iBitmap )
hgs
parents:
diff changeset
   110
        {
hgs
parents:
diff changeset
   111
        PanicServer( KErrGeneral );
hgs
parents:
diff changeset
   112
        }
hgs
parents:
diff changeset
   113
    return *iBitmap;
hgs
parents:
diff changeset
   114
    }
hgs
parents:
diff changeset
   115
        
hgs
parents:
diff changeset
   116
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   117
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   118
//
hgs
parents:
diff changeset
   119
EXPORT_C void CMnMapImageServiceBase::CompleteRendering()
hgs
parents:
diff changeset
   120
    {
hgs
parents:
diff changeset
   121
    LOG("CMnMapImageServiceBase::CompleteRenderingL in");
hgs
parents:
diff changeset
   122
    if ( CurrentAsyncRequest() != EMnIpcRenderImage )
hgs
parents:
diff changeset
   123
        {
hgs
parents:
diff changeset
   124
        PanicServer( KMnPanicAttemptToCompleteNoRequest );
hgs
parents:
diff changeset
   125
        }
hgs
parents:
diff changeset
   126
        
hgs
parents:
diff changeset
   127
    if ( iMapImageParams.ImageType() == TMnMapImageParams::ETypeUnspecified ) 
hgs
parents:
diff changeset
   128
        {
hgs
parents:
diff changeset
   129
        PanicServer( KMnPanicInvalidResult );
hgs
parents:
diff changeset
   130
        }   
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
    TPckg<TMnMapImageParams> paramsPack( iMapImageParams );
hgs
parents:
diff changeset
   133
    TInt err = iMessage.Write( EMnIpcImageParamsParamIndex, paramsPack );
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
    CompleteRequest( err );
hgs
parents:
diff changeset
   136
    
hgs
parents:
diff changeset
   137
    delete iBitmap;
hgs
parents:
diff changeset
   138
    iBitmap = NULL;
hgs
parents:
diff changeset
   139
hgs
parents:
diff changeset
   140
    LOG("CMnMapImageServiceBase::CompleteRenderingL out");
hgs
parents:
diff changeset
   141
    }
hgs
parents:
diff changeset
   142
    
hgs
parents:
diff changeset
   143
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   144
//  From class CAknAppServiceBase
hgs
parents:
diff changeset
   145
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   146
//
hgs
parents:
diff changeset
   147
EXPORT_C void CMnMapImageServiceBase::ServiceL( const RMessage2& aMessage )
hgs
parents:
diff changeset
   148
    {
hgs
parents:
diff changeset
   149
    //LOG1("CMnMapImageServiceBase::ServiceL in, function %d", aMessage.Function());
hgs
parents:
diff changeset
   150
    
hgs
parents:
diff changeset
   151
    switch ( aMessage.Function() )
hgs
parents:
diff changeset
   152
        {
hgs
parents:
diff changeset
   153
        case EMnIpcRenderImage:
hgs
parents:
diff changeset
   154
            PrepareAsyncRequestL( aMessage );
hgs
parents:
diff changeset
   155
            StartAsyncRequestL( aMessage );
hgs
parents:
diff changeset
   156
            break;
hgs
parents:
diff changeset
   157
hgs
parents:
diff changeset
   158
        case EMnIpcCancel:
hgs
parents:
diff changeset
   159
            HandleCancelRequestL( aMessage );
hgs
parents:
diff changeset
   160
            break;
hgs
parents:
diff changeset
   161
            
hgs
parents:
diff changeset
   162
        default:
hgs
parents:
diff changeset
   163
            CMnServiceBase::ServiceL( aMessage );
hgs
parents:
diff changeset
   164
        }
hgs
parents:
diff changeset
   165
    }
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   168
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   169
//
hgs
parents:
diff changeset
   170
void CMnMapImageServiceBase::StartAsyncRequestL( const RMessage2& aMessage )
hgs
parents:
diff changeset
   171
    {
hgs
parents:
diff changeset
   172
    LOG("CMnMapImageServiceBase::StartAsyncRequestL in");
hgs
parents:
diff changeset
   173
hgs
parents:
diff changeset
   174
    switch ( CurrentAsyncRequest() )
hgs
parents:
diff changeset
   175
        {
hgs
parents:
diff changeset
   176
        case EMnIpcRenderImage:
hgs
parents:
diff changeset
   177
            UnpackImageParamsL( aMessage );
hgs
parents:
diff changeset
   178
            UnpackOptionsL( aMessage );
hgs
parents:
diff changeset
   179
            UnpackBitmapHandleL( aMessage );
hgs
parents:
diff changeset
   180
            HandleRenderingL();
hgs
parents:
diff changeset
   181
            break;
hgs
parents:
diff changeset
   182
            
hgs
parents:
diff changeset
   183
        default:
hgs
parents:
diff changeset
   184
            User::Leave( KErrNotSupported );
hgs
parents:
diff changeset
   185
        }
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
    LOG("CMnMapImageServiceBase::StartAsyncRequestL out");
hgs
parents:
diff changeset
   188
    }
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   191
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   192
//
hgs
parents:
diff changeset
   193
void CMnMapImageServiceBase::UnpackOptionsL( const RMessage2& aMessage )
hgs
parents:
diff changeset
   194
    {
hgs
parents:
diff changeset
   195
    LOG("CMnMapImageServiceBase::UnpackOptionsL");
hgs
parents:
diff changeset
   196
    
hgs
parents:
diff changeset
   197
    TMnMapImageOptions options;
hgs
parents:
diff changeset
   198
    TPckg<TMnMapImageOptions> optsPack( options );
hgs
parents:
diff changeset
   199
    aMessage.ReadL( EMnIpcImageOptionsParamIndex, optsPack );
hgs
parents:
diff changeset
   200
    
hgs
parents:
diff changeset
   201
    if ( options.iShowOptions & CMnMapImage::EShowOptionCurrentLocation )
hgs
parents:
diff changeset
   202
        {
hgs
parents:
diff changeset
   203
        // leaves with KErrPermissionDenied if client does not have Location capability
hgs
parents:
diff changeset
   204
        aMessage.HasCapabilityL( ECapabilityLocation );
hgs
parents:
diff changeset
   205
        }
hgs
parents:
diff changeset
   206
    
hgs
parents:
diff changeset
   207
    iShowOptions = options.iShowOptions;
hgs
parents:
diff changeset
   208
    iTargetOrigin = options.iTargetOrigin;
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
//
hgs
parents:
diff changeset
   214
void CMnMapImageServiceBase::UnpackImageParamsL( const RMessage2& aMessage )
hgs
parents:
diff changeset
   215
    {
hgs
parents:
diff changeset
   216
    LOG("CMnMapImageServiceBase::UnpackImageParamsL");
hgs
parents:
diff changeset
   217
    
hgs
parents:
diff changeset
   218
    TPckg<TMnMapImageParams> paramsPack( iMapImageParams );
hgs
parents:
diff changeset
   219
    aMessage.ReadL( EMnIpcImageParamsParamIndex, paramsPack );
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
//
hgs
parents:
diff changeset
   225
void CMnMapImageServiceBase::UnpackBitmapHandleL( const RMessage2& aMessage )
hgs
parents:
diff changeset
   226
    {
hgs
parents:
diff changeset
   227
    TInt bitmapHandle = aMessage.Int2(); // EMnIpcImageBitmapHandleParamIndex == 2
hgs
parents:
diff changeset
   228
    LOG1("CMnMapImageServiceBase::UnpackBitmapHandleL, handle %d", bitmapHandle);
hgs
parents:
diff changeset
   229
hgs
parents:
diff changeset
   230
    ASSERT( !iBitmap );
hgs
parents:
diff changeset
   231
        
hgs
parents:
diff changeset
   232
    iBitmap = new (ELeave) CFbsBitmap;
hgs
parents:
diff changeset
   233
    User::LeaveIfError( iBitmap->Duplicate( bitmapHandle ) );
hgs
parents:
diff changeset
   234
    }
hgs
parents:
diff changeset
   235
hgs
parents:
diff changeset
   236
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   237
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   238
//
hgs
parents:
diff changeset
   239
void CMnMapImageServiceBase::HandleCancelRequestL( const RMessage2& aMessage )
hgs
parents:
diff changeset
   240
    {
hgs
parents:
diff changeset
   241
    TInt request = CurrentAsyncRequest();
hgs
parents:
diff changeset
   242
    
hgs
parents:
diff changeset
   243
    CMnServiceBase::HandleCancelRequestL( aMessage );
hgs
parents:
diff changeset
   244
    
hgs
parents:
diff changeset
   245
    if ( request == EMnIpcRenderImage )
hgs
parents:
diff changeset
   246
        {
hgs
parents:
diff changeset
   247
        delete iBitmap;
hgs
parents:
diff changeset
   248
        iBitmap = NULL;
hgs
parents:
diff changeset
   249
        }
hgs
parents:
diff changeset
   250
    }