mpx/viewframework/viewutility/src/mpxviewpluginhandler.cpp
changeset 0 a2952bb97e68
equal deleted inserted replaced
-1:000000000000 0:a2952bb97e68
       
     1 /*
       
     2 * Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Implementation of view plugin handler
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 // INCLUDE FILES
       
    21 #include <mpxcustomcommandobserver.h>
       
    22 #include <mpxviewplugin.hrh>
       
    23 #include "mpxpluginhandlerobserver.h"
       
    24 #include "mpxviewpluginhandler.h"
       
    25 #include "mpxlog.h"
       
    26 
       
    27 // ======== MEMBER FUNCTIONS ========
       
    28 
       
    29 // ---------------------------------------------------------------------------
       
    30 // C++ default constructor can NOT contain any code, that
       
    31 // might leave.
       
    32 // ---------------------------------------------------------------------------
       
    33 //
       
    34 CMPXViewPluginHandler::CMPXViewPluginHandler(
       
    35     MMPXCustomCommandObserver* aCommandObserver,
       
    36     MMPXPluginHandlerObserver& aObserver ) :
       
    37     CMPXPluginHandlerBase(
       
    38         TUid::Uid( KMPXViewPluginInterfaceUid ), ESelectionType, 0, aObserver ),
       
    39     iCommandObserver( aCommandObserver )
       
    40     {
       
    41     }
       
    42 
       
    43 // ---------------------------------------------------------------------------
       
    44 // By default Symbian 2nd phase constructor is private.
       
    45 // ---------------------------------------------------------------------------
       
    46 //
       
    47 void CMPXViewPluginHandler::ConstructL()
       
    48     {
       
    49     MPX_FUNC( "CMPXViewPluginHandler::ConstructL" );
       
    50     BaseConstructL();
       
    51     }
       
    52 
       
    53 // ---------------------------------------------------------------------------
       
    54 // Two-phased constructor.
       
    55 // ---------------------------------------------------------------------------
       
    56 //
       
    57 CMPXViewPluginHandler* CMPXViewPluginHandler::NewL(
       
    58     MMPXCustomCommandObserver* aCommandObserver,
       
    59     MMPXPluginHandlerObserver& aObserver )
       
    60     {
       
    61     CMPXViewPluginHandler* self =
       
    62         new ( ELeave ) CMPXViewPluginHandler( aCommandObserver, aObserver );
       
    63     CleanupStack::PushL( self );
       
    64     self->ConstructL();
       
    65     CleanupStack::Pop( self );
       
    66 
       
    67     return self;
       
    68     }
       
    69 
       
    70 // ---------------------------------------------------------------------------
       
    71 // Destructor
       
    72 // ---------------------------------------------------------------------------
       
    73 //
       
    74 CMPXViewPluginHandler::~CMPXViewPluginHandler()
       
    75     {
       
    76     for ( TInt i = iLoadedPlugins.Count(); --i >= 0; )
       
    77         {
       
    78         iLoadedPlugins[i]->DestroyView();
       
    79         }
       
    80     iLoadedPlugins.ResetAndDestroy();
       
    81     iLoadPluginUids.Close();
       
    82 
       
    83     iCommandObserver = NULL;
       
    84     }
       
    85 
       
    86 // ---------------------------------------------------------------------------
       
    87 // Resolve view plugin based on the criteria passed in parameter.
       
    88 // ---------------------------------------------------------------------------
       
    89 //
       
    90 CMPXViewPlugin* CMPXViewPluginHandler::ResolvePluginL(
       
    91     const TUid& aUid, TUid& aResolvedPluginType,
       
    92     TUid& aResolvedPluginImplementationUid )
       
    93     {
       
    94     MPX_FUNC( "CMPXViewPluginHandler::ResolvePluginL single uid" );
       
    95     RArray<TUid> array;
       
    96     CleanupClosePushL( array );
       
    97     array.AppendL( aUid );
       
    98     CMPXViewPlugin* plugin( NULL );
       
    99     plugin = ResolvePluginL(
       
   100         array, aResolvedPluginType, aResolvedPluginImplementationUid );
       
   101     CleanupStack::PopAndDestroy( &array );
       
   102 
       
   103     return plugin;
       
   104     }
       
   105 
       
   106 // ---------------------------------------------------------------------------
       
   107 // Resolve view plugin based on the criteria passed in parameter.
       
   108 // ---------------------------------------------------------------------------
       
   109 //
       
   110 CMPXViewPlugin* CMPXViewPluginHandler::ResolvePluginL(
       
   111     const RArray<TUid>& aUids, TUid& aResolvedPluginType,
       
   112     TUid& aResolvedPluginImplementationUid )
       
   113     {
       
   114     MPX_FUNC( "CMPXViewPluginHandler::ResolvePluginL uid array" );
       
   115 #ifdef _DEBUG
       
   116     for ( TInt i = 0; i < aUids.Count(); i++ )
       
   117         {
       
   118         MPX_DEBUG2( "CMPXViewPluginHandler::ResolvePluginL input Uid = 0x%x", aUids[i].iUid );
       
   119         }
       
   120 #endif // _DEBUG
       
   121     TUid impUid( FindPlugin( aUids.Array() ) );
       
   122     MPX_DEBUG2( "CMPXViewPluginHandler::ResolvePluginL resolved implementation Uid = 0x%x", impUid.iUid );
       
   123     if ( impUid == KNullUid )
       
   124         {
       
   125         User::Leave( KErrNotFound );
       
   126         }
       
   127     else
       
   128         {
       
   129         aResolvedPluginImplementationUid = impUid;
       
   130         aResolvedPluginType = PluginType( impUid );
       
   131         }
       
   132     return PluginL( impUid );
       
   133     }
       
   134 
       
   135 // ---------------------------------------------------------------------------
       
   136 // Get a list of plugins that need to be pre-loaded.
       
   137 // ---------------------------------------------------------------------------
       
   138 //
       
   139 void CMPXViewPluginHandler::GetPreLoadPluginsL( RArray<TUid>& aUids, const TUid& aUid )
       
   140     {
       
   141     MPX_DEBUG2( "CMPXViewPluginHandler::GetPreLoadPluginsL aUID: 0x%x", aUid );
       
   142     RArray<TUid> array;
       
   143     CleanupClosePushL( array );
       
   144     GetPluginUids( array );
       
   145 
       
   146     for ( TInt i = array.Count(); --i >= 0; )
       
   147         {
       
   148         if ( PluginFlagsL( array[ i ] ) & EMPXPluginFlagPreLoad )
       
   149             {
       
   150             if ( aUid == KNullUid )
       
   151             	{
       
   152             MPX_DEBUG2( "CMPXViewPluginHandler::GetPreLoadPluginsL adding UID: 0x%x", array[i] );
       
   153             aUids.Append( array[ i ] );
       
   154 				}
       
   155 			else
       
   156 				{
       
   157 				TUid impUid = SupportedAppUid( array[ i ] );
       
   158 				MPX_DEBUG2( "APP UID: 0x%x", impUid );
       
   159 				if ( aUid == impUid )
       
   160 					{
       
   161             		MPX_DEBUG2( "CMPXViewPluginHandler::GetPreLoadPluginsL adding UID: 0x%x", array[i] );
       
   162             		aUids.Append( array[ i ] );
       
   163 					}
       
   164 				}
       
   165             }
       
   166         }
       
   167     CleanupStack::PopAndDestroy( &array );
       
   168     }
       
   169 
       
   170 // ---------------------------------------------------------------------------
       
   171 // From MMPXViewPluginManager
       
   172 // Return view plugin with specific view plugin uid.
       
   173 // ---------------------------------------------------------------------------
       
   174 //
       
   175 CMPXViewPlugin* CMPXViewPluginHandler::PluginL(
       
   176     const TUid& aUid )
       
   177     {
       
   178     MPX_FUNC( "CMPXViewPluginHandler::PluginL" );
       
   179     CMPXViewPlugin* plugin( NULL );
       
   180     TInt index = iLoadPluginUids.Find( aUid );
       
   181 
       
   182     if ( KErrNotFound == index )
       
   183         {
       
   184         // Check if uid is a valid view plugin uid.
       
   185         if ( IndexOf( aUid ) != KErrNotFound )
       
   186             {
       
   187             plugin = CMPXViewPlugin::NewL( aUid, iCommandObserver );
       
   188             CleanupStack::PushL( plugin );
       
   189             iLoadPluginUids.AppendL( aUid );
       
   190             iLoadedPlugins.AppendL( plugin );
       
   191             CleanupStack::Pop( plugin );
       
   192             }
       
   193         else
       
   194             {
       
   195             // Leave if not found
       
   196             User::Leave( KErrNotFound );
       
   197             }
       
   198         }
       
   199     else
       
   200         {
       
   201         plugin = iLoadedPlugins[index];
       
   202         }
       
   203     return plugin;
       
   204     }
       
   205 
       
   206 // ---------------------------------------------------------------------------
       
   207 // From MMPXViewPluginManager
       
   208 // Resolve view plugin based on the criteria passed in parameter.
       
   209 // ---------------------------------------------------------------------------
       
   210 //
       
   211 CMPXViewPlugin* CMPXViewPluginHandler::ResolvePluginL(
       
   212     const TUid& aUid, TUid& aResolvedPluginType )
       
   213     {
       
   214     MPX_FUNC( "CMPXViewPluginHandler::ResolvePluginL single uid wrapper" );
       
   215     TUid impUid( KNullUid );
       
   216     return ResolvePluginL( aUid, aResolvedPluginType, impUid );
       
   217     }
       
   218 
       
   219 // ---------------------------------------------------------------------------
       
   220 // From MMPXViewPluginManager
       
   221 // Resolve view plugin based on the criteria passed in parameter.
       
   222 // ---------------------------------------------------------------------------
       
   223 //
       
   224 CMPXViewPlugin* CMPXViewPluginHandler::ResolvePluginL(
       
   225     const RArray<TUid>& aUids, TUid& aResolvedPluginType )
       
   226     {
       
   227     MPX_FUNC( "CMPXViewPluginHandler::ResolvePluginL uid array wrapper" );
       
   228     TUid impUid( KNullUid );
       
   229     return ResolvePluginL( aUids, aResolvedPluginType, impUid );
       
   230     }
       
   231 
       
   232 // ---------------------------------------------------------------------------
       
   233 // From CMPXPluginHandlerBase
       
   234 // Resolve view plugin based on the criteria passed in parameter.
       
   235 // ---------------------------------------------------------------------------
       
   236 //
       
   237 void CMPXViewPluginHandler::ResolvePluginL()
       
   238     {
       
   239     MPX_FUNC( "CMPXViewPluginHandler::ResolvePluginL" );
       
   240     // not used
       
   241     }
       
   242 
       
   243 // ----------------------------------------------------------------------------
       
   244 // CMPXViewPluginHandler::IsPluginLoaded
       
   245 // ----------------------------------------------------------------------------
       
   246 //
       
   247 TBool CMPXViewPluginHandler::IsPluginLoaded(
       
   248     const TUid& aPluginUid)
       
   249     {
       
   250     MPX_FUNC("CMPXViewPluginHandler::IsPluginLoaded");
       
   251     return (iLoadPluginUids.Find(aPluginUid) != KErrNotFound);
       
   252     }
       
   253 
       
   254 // ----------------------------------------------------------------------------
       
   255 // CMPXViewPluginHandler::LoadPluginL
       
   256 // ----------------------------------------------------------------------------
       
   257 //
       
   258 void CMPXViewPluginHandler::LoadPluginL(
       
   259     const TUid& aPluginUid)
       
   260     {
       
   261     MPX_FUNC("CMPXViewPluginHandler::LoadPluginL");
       
   262     (void)PluginL(aPluginUid);
       
   263     }
       
   264 
       
   265 // ----------------------------------------------------------------------------
       
   266 // Unload the plugin
       
   267 // ----------------------------------------------------------------------------
       
   268 //
       
   269 void CMPXViewPluginHandler::UnloadPlugin(
       
   270     const TUid& aUid)
       
   271     {
       
   272     MPX_FUNC("CMPXViewPluginHandler::UnloadPlugin");
       
   273 
       
   274     TInt index = iLoadPluginUids.Find(aUid);
       
   275     if (index != KErrNotFound)
       
   276         {
       
   277         CMPXViewPlugin* plugin = iLoadedPlugins[index];
       
   278         plugin->DestroyView();
       
   279         iLoadedPlugins.Remove(index);
       
   280         iLoadPluginUids.Remove(index);
       
   281         delete plugin;
       
   282         }
       
   283     }
       
   284 
       
   285 
       
   286 //  End of File