phoneclientserver/CallUI/Src/CaUiPlugin/CaUiPlugin.cpp
branchRCL_3
changeset 21 0a6dd2dc9970
parent 20 987c9837762f
--- a/phoneclientserver/CallUI/Src/CaUiPlugin/CaUiPlugin.cpp	Wed Sep 01 12:15:03 2010 +0100
+++ b/phoneclientserver/CallUI/Src/CaUiPlugin/CaUiPlugin.cpp	Tue Sep 14 22:26:11 2010 +0300
@@ -31,6 +31,9 @@
 #include    <CallUI.rsg>
 #include    <featmgr.h>      // FeatureManager.
 
+#include    <eikon.hrh> //EEikMenuItemSpecific
+
+
 // CONSTANTS
 
 // Empty filename for initialization.
@@ -214,6 +217,8 @@
     TBool csVideoMenuItemAvailable( ETrue );
     TBool voipMenuItemAvailable( ETrue );
     
+    TBool hideCallSubmenu( EFalse );
+    
     // If there is PhoneNumber parameter given, then only voice call 
     // resource is wanted.
     TInt count = aInParamList.Count();
@@ -246,7 +251,35 @@
                 csVideoMenuItemAvailable = EFalse;
                 }
             }
-        }
+
+        index = 0;
+        aInParamList.FindFirst(
+            index,
+            EGenericParamHideCallSubmenu,
+            EVariantTypeAny );
+
+        if ( index >= 0 )
+            {
+            // The call items (voice, video and VoIP) are located in the main level
+            // of the menu
+            hideCallSubmenu = ETrue;
+            
+            TInt32 variantValue = aInParamList[ index ].Value().AsTInt32();
+                        
+            if ( variantValue == EGenericParamVoiceCall )
+                {
+                csVoiceMenuItemAvailable = EFalse;
+                }
+            else if ( variantValue == EGenericParamVideoCall )
+                {
+                csVideoMenuItemAvailable = EFalse;
+                }
+            else if ( variantValue == EGenericParamVoIPCall )
+                {
+                voipMenuItemAvailable = EFalse;
+                }
+            }
+        } 
     
     if ( csVideoMenuItemAvailable && 
     		!FeatureManager::FeatureSupported( KFeatureIdCsVideoTelephony ) )
@@ -260,13 +293,13 @@
 
     if ( csVoiceMenuItemAvailable )
          {
-         AddAiwMenuItemL( aMenuPane, menuIndex, ECSVoice );
+         AddAiwMenuItemL( aMenuPane, menuIndex, ECSVoice, 0, hideCallSubmenu );
          menuIndex++;
          }
     
     if ( csVideoMenuItemAvailable )
         {
-        AddAiwMenuItemL( aMenuPane, menuIndex, ECSVideo );
+        AddAiwMenuItemL( aMenuPane, menuIndex, ECSVideo, 0, hideCallSubmenu ); 
         menuIndex++;
         }
     
@@ -280,13 +313,13 @@
         if ( 1 == numberOfVoipServices )
             {
             // Single VoIP service, use service name in menu item
-             AddAiwMenuItemL( aMenuPane, menuIndex, EInternetWithName, voipServiceIds[0] );
+             AddAiwMenuItemL( aMenuPane, menuIndex, EInternetWithName, voipServiceIds[0], hideCallSubmenu );
              menuIndex++;
             }
         else if ( numberOfVoipServices > 1 )
             {
             // Regular internet call menu
-            AddAiwMenuItemL( aMenuPane, menuIndex, EInternet );
+            AddAiwMenuItemL( aMenuPane, menuIndex, EInternet, 0, hideCallSubmenu );
             menuIndex++;
             }    
 
@@ -383,13 +416,23 @@
 // 
 // -----------------------------------------------------------------------------
 //
-void CCaUiPlugin::AddAiwMenuItemL( CAiwMenuPane& aMenuPane, TInt aIndex, EMenuItemType aType, TServiceId aServiceId )
+void CCaUiPlugin::AddAiwMenuItemL( 
+    CAiwMenuPane& aMenuPane, 
+    TInt aIndex, 
+    EMenuItemType aType, 
+    TServiceId aServiceId, 
+    TBool aHideCallSubmenu )
     {
     CEikMenuPaneItem::SData data;
     data.iCascadeId = 0;
     data.iFlags = 0;
     data.iExtraText = KNullDesC();
-
+    
+    if ( aHideCallSubmenu )
+        {
+        data.iFlags = EEikMenuItemSpecific;
+        }
+    
     HBufC* menuItemText = NULL;
     
     switch ( aType )