idlefw/plugins/mcsplugin/publisher/src/mcspluginengine.cpp
branchRCL_3
changeset 118 8baec10861af
parent 114 a5a39a295112
child 122 6cadd6867c17
--- a/idlefw/plugins/mcsplugin/publisher/src/mcspluginengine.cpp	Wed Sep 01 12:22:09 2010 +0100
+++ b/idlefw/plugins/mcsplugin/publisher/src/mcspluginengine.cpp	Tue Sep 14 21:55:16 2010 +0300
@@ -50,7 +50,6 @@
 _LIT( KResourceFile, "mcspluginres.rsc" );
 _LIT( KResPath, "\\resource\\" );
 _LIT( KMMApplication, "mm://" );
-_LIT( KHideExit2, "&exit=hide" );
 _LIT( KSetFocusString, "!setfocus?applicationgroup_name=" );
 _LIT( KApplicationGroupName, "applicationgroup_name" );
 _LIT( KIcon, "icon" );
@@ -62,6 +61,7 @@
 _LIT( KMenuMailboxMaskId, "16389" );
 _LIT( KMenuTypeMailbox, "menu:mailbox" );
 _LIT( KPrefix, "0x" );
+_LIT( KMenuAttrInvokeSettingsUid, "0x99999990" );
 
 const TUid KHomescreenUid = { AI_UID3_AIFW_COMMON };
 const TUid KMMUid = { 0x101F4CD2 };
@@ -69,6 +69,10 @@
 const TUid KMCSCmailMailboxViewIdValue = { 0x2 };
 const TUid KBrowserUid = { 0x10008D39 };
 
+// maximum custom message length
+const TInt KMaxCustomMsg = 256;
+const TInt KUndefinedIndex = -1;
+
 // ======== LOCAL FUNCTIONS ========
 // ----------------------------------------------------------------------------
 // NextIdToken
@@ -355,7 +359,7 @@
         {        
         item = CMenuItem::CreateL( iMenu, KMenuTypeUrl, 0, 0 );
         CleanupStack::PushL( item );
-        item->SetAttributeL( KMenuAttrLongName, aData.Name() );
+        item->SetAttributeL( KMenuAttrLongName, *aData.Name() );
         item->SetAttributeL( KMenuAttrIconFile, KMenuIconFile );
         item->SetAttributeL( KMenuAttrIconId, KMenuBookmarkIconId );
         item->SetAttributeL( KMenuAttrMaskId, KMenuBookmarkMaskId );
@@ -375,7 +379,7 @@
         {   
         item = CMenuItem::CreateL( iMenu, KMenuTypeMailbox, 0, 0 );
         CleanupStack::PushL( item );
-        item->SetAttributeL( KMenuAttrLongName, aData.Name() );
+        item->SetAttributeL( KMenuAttrLongName, *aData.Name() );
         item->SetAttributeL( KMenuAttrIconFile, KMenuIconFile );
         item->SetAttributeL( KMenuAttrIconId, KMenuMailboxIconId );
         item->SetAttributeL( KMenuAttrMaskId, KMenuMailboxMaskId );
@@ -403,7 +407,14 @@
         TUint32 isHidden = flags & TMenuItem::EHidden;
         TUint32 isMissing = flags & TMenuItem::EMissing;
 
-        if ( iUndefinedItem && ( isHidden || isMissing ) )
+        TBool attrExists = ETrue;
+        TPtrC uid = aMenuItem->GetAttributeL(KMenuAttrUid, attrExists);
+                
+        // if item is hidden or missing (mmc card removed)
+        // use "Undefined" icon instead
+        // for empty item it's own icon is shown
+        if ( iUndefinedItem && uid.Compare(KMenuAttrInvokeSettingsUid) != 0 && 
+                ( isHidden || isMissing ) )
             {
             menuItem = iUndefinedItem;
             }
@@ -471,9 +482,14 @@
         TUint32 isHidden = flags & TMenuItem::EHidden;
         TUint32 isMissing = flags & TMenuItem::EMissing;
 
+        TBool attrExists = ETrue;
+        TPtrC uid = aMenuItem->GetAttributeL(KMenuAttrUid, attrExists);
+                
         // if item is hidden or missing (mmc card removed)
         // use "Undefined" text instead
-        if ( iUndefinedItem && ( isHidden || isMissing ) )
+        // for empty item it's own icon is shown
+        if ( iUndefinedItem && uid.Compare(KMenuAttrInvokeSettingsUid) != 0 && 
+                ( isHidden || isMissing ) )
             {
             menuItem = iUndefinedItem;
             }
@@ -532,7 +548,23 @@
         }
     else
         {
-        LaunchMCSItemL( dataItem );
+        CMenuItem* item(CMenuItem::OpenL(iMenu, dataItem.MenuItem().Id()));
+        CleanupStack::PushL(item);
+        
+        TBool attrExists = ETrue;
+        
+        TPtrC uid = item->GetAttributeL(KMenuAttrUid, attrExists);
+        
+        // Show selected shortcut settings
+        if (uid.Compare(KMenuAttrInvokeSettingsUid) == 0)
+            {
+            TRAP_IGNORE( ShowSettingsL(aIndex + 1) );
+            }
+        else
+            {
+            LaunchMCSItemL(dataItem);
+            }
+        CleanupStack::PopAndDestroy(item);
         }
     }
 
@@ -567,18 +599,17 @@
                                                       
     if ( !hasApplicationGroupName )
         {
+        CleanupStack::PopAndDestroy( item );
         return;
         }
     
     message = HBufC8::NewLC( KMMApplication().Length() + 
                              KSetFocusString().Length() +
-                             applicationGroupName.Length() + 
-                             KHideExit2().Length() );
+                             applicationGroupName.Length() );
 
     message->Des().Copy( KMMApplication );
     message->Des().Append( KSetFocusString );
     message->Des().Append( applicationGroupName );
-    message->Des().Append( KHideExit2 );
 
     // find MM application
     TApaTaskList taskList( CCoeEnv::Static()->WsSession() );
@@ -624,7 +655,7 @@
     {
     StartEffect( KBrowserUid );
     
-    CSchemeHandler* urlHandler = CSchemeHandler::NewL( aData.Value());    
+    CSchemeHandler* urlHandler = CSchemeHandler::NewL( *aData.Value());    
     CleanupStack::PushL( urlHandler );
     urlHandler->HandleUrlStandaloneL();
     CleanupStack::PopAndDestroy( urlHandler );
@@ -768,12 +799,22 @@
 // Launch General Settings plugin
 // ---------------------------------------------------------------------------
 //
-void CMCSPluginEngine::ShowSettingsL()
+void CMCSPluginEngine::ShowSettingsL( const TInt aEditIdx )
     { 
     TUid uid = {AI_UID_ECOM_IMPLEMENTATION_SETTINGS_MCSPLUGIN};
     
+    // format the custom message
+    // iInstanceUid/aEditIdx is the format
+    TBuf8<KMaxCustomMsg> msg;
+    msg.Append(iInstanceUid);
+    if( aEditIdx != KUndefinedIndex )
+        {
+        msg.Append('//');
+        msg.AppendFormat(_L8("%d"), aEditIdx);
+        }
+
     CGSLauncher* launcher = CGSLauncher::NewLC();
-    launcher->LaunchGSViewL ( uid, KHomescreenUid, iInstanceUid );
+    launcher->LaunchGSViewL ( uid, KHomescreenUid, msg );
     CleanupStack::PopAndDestroy( launcher );
     }