mpx/viewframework/viewutility/src/mpxviewplugininfo.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:23:05 +0100
branchRCL_3
changeset 56 63223d4fd956
parent 55 6c1dfe4da5dd
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  Implementation of view plugin info
*
*/



// INCLUDE FILES
#include <mpxviewplugin.hrh>

#include "mpxviewutilityhelper.h"
#include "mpxviewplugininfo.h"
#include "mpxlog.h"


// CONSTANTS
_LIT8( KMPXPluginUidMarkerStart, "<p>" );
_LIT8( KMPXPluginUidMarkerEnd, "</p>" );
_LIT8( KMPXPluginTypeMarkerStart, "<t>" );
_LIT8( KMPXPluginTypeMarkerEnd, "</t>" );
_LIT8( KMPXPluginFlagMarkerStart, "<f>" );
_LIT8( KMPXPluginFlagMarkerEnd, "</f>" );
_LIT8( KMPXPluginPriorityMarkerStart, "<i>" );
_LIT8( KMPXPluginPriorityMarkerEnd, "</i>" );

// ======== MEMBER FUNCTIONS ========

// ---------------------------------------------------------------------------
// C++ default constructor can NOT contain any code, that
// might leave.
// ---------------------------------------------------------------------------
//
CMPXViewPluginInfo::CMPXViewPluginInfo()
    {
    }

// ---------------------------------------------------------------------------
// By default Symbian 2nd phase constructor is private.
// ---------------------------------------------------------------------------
//
void CMPXViewPluginInfo::ConstructL( 
    const CImplementationInformation& aData )
    {
    iPluginName = aData.DisplayName().AllocL();
    iPluginUid = aData.ImplementationUid();
    iPluginTypeUid = ExtractPluginType( aData.OpaqueData() );
    iFlags = ExtractPluginFlags( aData.OpaqueData() );
    iPriority = ExtractPluginPriority( aData.OpaqueData() );
    ExtractPluginUidsL( aData.OpaqueData(), iSupportedUids );
    }

// ---------------------------------------------------------------------------
// Two-phased constructor.
// ---------------------------------------------------------------------------
//
CMPXViewPluginInfo* CMPXViewPluginInfo::NewL( 
    const CImplementationInformation& aData )
    {
    CMPXViewPluginInfo* self = CMPXViewPluginInfo::NewLC( aData );
    CleanupStack::Pop( self );

    return self;
    }

// ---------------------------------------------------------------------------
// Two-phased constructor.
// ---------------------------------------------------------------------------
//
CMPXViewPluginInfo* CMPXViewPluginInfo::NewLC( 
    const CImplementationInformation& aData )
    {
    CMPXViewPluginInfo* self = new ( ELeave ) CMPXViewPluginInfo();
    CleanupStack::PushL( self );
    self->ConstructL( aData );

    return self;
    }

// ---------------------------------------------------------------------------
// Destructor
// ---------------------------------------------------------------------------
//
CMPXViewPluginInfo::~CMPXViewPluginInfo()
    {
    delete iPluginName;
    iSupportedUids.Close();
    }

// ---------------------------------------------------------------------------
// Returns plugin's display name.
// ---------------------------------------------------------------------------
//
const TDesC& CMPXViewPluginInfo::DisplayName() const
    {
    return iPluginName ? static_cast<const TDesC&>( *iPluginName ) : KNullDesC;
    }

// ---------------------------------------------------------------------------
// Returns plugin's implementation uid.
// ---------------------------------------------------------------------------
//
const TUid& CMPXViewPluginInfo::ImplementationUid() const
    {
    return iPluginUid;
    }

// ---------------------------------------------------------------------------
// Returns plugin's supported uids.
// ---------------------------------------------------------------------------
//
const RArray<TUid> CMPXViewPluginInfo::SupportedUids() const
    {
    return iSupportedUids;
    }

// ---------------------------------------------------------------------------
// Returns plugin's plugin type.
// ---------------------------------------------------------------------------
//
const TUid& CMPXViewPluginInfo::PluginType() const
    {
    return iPluginTypeUid;
    }

// ---------------------------------------------------------------------------
// Returns plugin's view priority.
// ---------------------------------------------------------------------------
//
TInt CMPXViewPluginInfo::Priority() const
    {
    return iPriority;
    }

// ---------------------------------------------------------------------------
// Test whether the plugin is user selectable.
// ---------------------------------------------------------------------------
//
TBool CMPXViewPluginInfo::IsUserSelectable() const
    {
    return iFlags & KMPXVpFeatureUserSelectable;
    }

// ---------------------------------------------------------------------------
// Test whether the plugin needs to be preloaded.
// ---------------------------------------------------------------------------
//
TBool CMPXViewPluginInfo::IsPreLoad() const
    {
    return iFlags & KMPXVpFeaturePreLoaded;
    }

// ---------------------------------------------------------------------------
// Extracts plugin priority from data.
// ---------------------------------------------------------------------------
//
TInt CMPXViewPluginInfo::ExtractPluginPriority( 
    const TDesC8& aData )
    {
    TInt ignore( 0 );
    TInt priority( 0 );
    TPtrC8 string =
        CMPXViewUtilityHelper::Extract( 
            aData, 
            KMPXPluginPriorityMarkerStart, 
            KMPXPluginPriorityMarkerEnd );

    CMPXViewUtilityHelper::ExtractNum( string, ignore, priority );

    return priority;
    }

// ---------------------------------------------------------------------------
// Extracts plugin supported Uids from data.
// ---------------------------------------------------------------------------
//
void CMPXViewPluginInfo::ExtractPluginUidsL( 
    const TDesC8& aData,
    RArray<TUid>& aArray )
    {
    aArray.Reset();

    TInt nextPos( 0 );
    TInt pluginUid( 0 );
    TPtrC8 string =
        CMPXViewUtilityHelper::Extract( 
            aData, KMPXPluginUidMarkerStart, KMPXPluginUidMarkerEnd );

    do
        {
        if ( KErrNone == 
            CMPXViewUtilityHelper::ExtractNum( string, nextPos, pluginUid ) )
            {
            aArray.AppendL( TUid::Uid( pluginUid ) );
            }
        } while ( KErrNotFound != nextPos );
    }

// ---------------------------------------------------------------------------
// Extracts plugin type from data.
// ---------------------------------------------------------------------------
//
TUid CMPXViewPluginInfo::ExtractPluginType( 
    const TDesC8& aData )
    {
    TInt ignore( 0 );
    TInt type( 0 );
    TPtrC8 string =
        CMPXViewUtilityHelper::Extract( 
            aData, KMPXPluginTypeMarkerStart, KMPXPluginTypeMarkerEnd );

    CMPXViewUtilityHelper::ExtractNum( string, ignore, type );

    return TUid::Uid( type );
    }

// ---------------------------------------------------------------------------
// Extracts plugin feature flags from data.
// ---------------------------------------------------------------------------
//
TInt CMPXViewPluginInfo::ExtractPluginFlags( 
    const TDesC8& aData )
    {
    TInt ignore( 0 );
    TInt flags( 0 );
    TPtrC8 string =
        CMPXViewUtilityHelper::Extract( 
            aData, KMPXPluginFlagMarkerStart, KMPXPluginFlagMarkerEnd );

    CMPXViewUtilityHelper::ExtractNum( string, ignore, flags );

    return flags;
    }

//  End of File