uifw/EikStd/coctlsrc/eikcba.cpp
branchRCL_3
changeset 25 941195f2d488
parent 23 3d340a0166ff
child 38 c52421ed5f07
--- a/uifw/EikStd/coctlsrc/eikcba.cpp	Tue May 11 16:27:42 2010 +0300
+++ b/uifw/EikStd/coctlsrc/eikcba.cpp	Tue May 25 12:58:19 2010 +0300
@@ -214,8 +214,9 @@
     ECbaSingleClickEnabled, // single click enabled in appUi
     ECbaItemSoftkeyDisabled, // item specific softkey disabled
     ECbaItemSpecificSoftkeyInUse, // item specific softkey is in use
-    ECbaItemSoftkeyDisabledByClient, // client disabled item specific softkey
-    ECbaMultipleMarkingActive // multiple marking has changed RSK
+    ECbaItemSoftkeyDisabledByClient, // client has disabled item specific softkey
+    ECbaMultipleMarkingActive, // multiple marking has changed RSK
+    ECbaCombinePaneUncovered // The combine pane in status pane is invisible.
     };
 
 enum TCbaLayers
@@ -1780,9 +1781,14 @@
       
     TAknLayoutRect qgn_graf_sk_msk;
     TRect rect;
+    TInt graphicMSKVariety = 1;
+    if ( iCbaFlags & EEikCbaFlagAppMskIcon )
+    	{
+        graphicMSKVariety = 0 ;
+    	}
     qgn_graf_sk_msk.LayoutRect(
         rect,
-        AknLayoutScalable_Avkon::control_pane_g4( 1 ).LayoutLine() );
+        AknLayoutScalable_Avkon::control_pane_g4( graphicMSKVariety ).LayoutLine() );
 
     TSize iconSize( qgn_graf_sk_msk.Rect().Width(),
                     qgn_graf_sk_msk.Rect().Height() );
@@ -2952,12 +2958,27 @@
             }
         
         // We must check for landscape mode bottom sks 
+        TBool isLandscapeOrient = Layout_Meta_Data::IsLandscapeOrientation();
         TInt bottomPaneVariety = 1;
-        if ( Layout_Meta_Data::IsLandscapeOrientation() )
+        if ( isLandscapeOrient )
             {
             bottomPaneVariety = 6;
             }
             
+        // SetBoundingRect is always called by status pane when it is changing visibility.
+        // If the status pane is invisible in landscape, softkey need to draw frame to cover
+        // the area of combine pane.
+        CEikStatusPaneBase* statusPane = CEikStatusPaneBase::Current();
+        if (statusPane && !statusPane->IsVisible() && isLandscapeOrient &&
+            statusPane->PaneCapabilities(TUid::Uid(EEikStatusPaneUidCombined)).IsInCurrentLayout())
+            {
+            iFlags.Set( ECbaCombinePaneUncovered );
+            }
+        else
+            {
+            iFlags.Clear( ECbaCombinePaneUncovered );
+            }
+        
         TAknWindowLineLayout controlPane( DoCompose(
             AknLayoutScalable_Avkon::application_window( 0 ),
             DoCompose( AknLayoutScalable_Avkon::area_bottom_pane( bottomPaneVariety ),
@@ -2971,8 +2992,6 @@
         // Set correct window region incase we have been in stacon mode.
         RRegion region;
         region.AddRect( Rect() );
-            
-        CEikStatusPaneBase* statusPane = CEikStatusPaneBase::Current();
         
         // If status indicators and clock are shown in control pane area,
         // then remove those areas from cba window region.
@@ -4622,7 +4641,7 @@
                     CEikCbaButton* button2 = static_cast<CEikCbaButton*>(
                         (*iControlArray)[KControlArrayCBAButton2Posn].iControl );
                     
-                    if ( IsMskEnabledLayoutActive() )
+                    if ( IsMskEnabledLayoutActive() || iFlags.IsSet( ECbaCombinePaneUncovered ) )
                         {
                         CEikCbaButton* buttonMSK = static_cast<CEikCbaButton*>(
                             (*iControlArray)[KControlArrayCBAButtonMSKPosn].iControl );
@@ -5288,7 +5307,7 @@
                         .LayoutLine() );
             iExtension->iRightFrameInnerRect = layoutRect.Rect();
 
-            if ( mskEnabledInPlatform )
+            if ( mskEnabledInPlatform || ( isLandscape && iFlags.IsSet( ECbaCombinePaneUncovered ) ) )
                 {
                 layoutRect.LayoutRect(
                     rect,
@@ -5488,6 +5507,10 @@
         TInt textMSKVariety = 3;
         TInt graphicMSKVariety = 1;
 
+        if ( iCbaFlags & EEikCbaFlagAppMskIcon )
+        	{
+            graphicMSKVariety = 0 ;
+        	}
         if ( mskEnabledInApplication && mskEnabledInPlatform )
             {
             MSKSoftkey = (*iControlArray)[KControlArrayCBAButtonMSKPosn].iControl;
@@ -6455,7 +6478,7 @@
     // Right pane:    
     TInt rightPaneTextVariety = 0;
     
-    if ( iExtension->iEnablePostingTransparency ||
+    if ( ( iExtension && iExtension->iEnablePostingTransparency ) ||
          ( iCbaFlags & EEikCbaFlagTransparent ) )
         {
         rightPaneTextVariety = 1; // Outline font used
@@ -7657,11 +7680,16 @@
         CFbsBitmap *bitmap = NULL;
         CFbsBitmap *mask = NULL;
       
+        TInt graphicMSKVariety = 1;
+        if ( iCbaFlags & EEikCbaFlagAppMskIcon )
+        	{
+            graphicMSKVariety = 0 ;
+        	}
         TAknLayoutRect qgn_graf_sk_msk;
         TRect rect;
         qgn_graf_sk_msk.LayoutRect(
             rect,
-            AknLayoutScalable_Avkon::control_pane_g4( 1 ).LayoutLine() );
+            AknLayoutScalable_Avkon::control_pane_g4( graphicMSKVariety ).LayoutLine() );
 
         TSize iconSize( qgn_graf_sk_msk.Rect().Width(),
                         qgn_graf_sk_msk.Rect().Height() );
@@ -7881,17 +7909,12 @@
 
 // ---------------------------------------------------------------------------
 // CEikCba::CommandChangeAllowed
-// 
 // ---------------------------------------------------------------------------
 //     
-TBool CEikCba::CommandChangeAllowed()
-    {
-    if ( iFlags.IsSet( ECbaSingleClickEnabled ) 
-            && iFlags.IsSet( ECbaMultipleMarkingActive ) )
-        {
-        return EFalse;
-        }
-    return ETrue;
+TBool CEikCba::CommandChangeAllowed() const
+    {
+    return ( !( iFlags.IsSet( ECbaSingleClickEnabled ) 
+            && iFlags.IsSet( ECbaMultipleMarkingActive ) ) );
     }