--- 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 );
}