uifw/AvKon/src/akntabgrp.cpp
branchRCL_3
changeset 18 fcdfafb36fe7
parent 7 08e69e956a8c
child 19 aecbbf00d063
--- a/uifw/AvKon/src/akntabgrp.cpp	Thu Jul 15 18:56:19 2010 +0300
+++ b/uifw/AvKon/src/akntabgrp.cpp	Thu Aug 19 10:11:06 2010 +0300
@@ -104,6 +104,9 @@
 
     /** Indicates whether or not the tab is shown in long tab group layout. */
     TBool iLongTab;
+    
+    /** Indicates the hilight status of the tab*/
+    TBool iHighlight;
     };
 
 CAknTabExtension* CAknTabExtension::NewL()
@@ -295,6 +298,8 @@
     if ( !iExtension )
         {
         iExtension = CAknTabExtension::NewL();
+        //set the default highlight status of the tab
+        iExtension->iHighlight = EFalse;
         }
 
     iLabel = new (ELeave) CEikLabel;
@@ -807,7 +812,14 @@
 
     }
 
-
+// ---------------------------------------------------------------------------
+// sets the highlight status of a tab
+// ---------------------------------------------------------------------------
+//
+void CAknTab::SetHighlight(TBool aHighlight)
+    {
+    iExtension->iHighlight = aHighlight;
+    }
 // ---------------------------------------------------------------------------
 // Handles size change events in flat status pane layouts.
 // ---------------------------------------------------------------------------
@@ -1033,7 +1045,7 @@
             }
         else
             {
-            if ( iActive )
+            if (iActive || iExtension->iHighlight)
                 {
                 TInt error = AknsUtils::GetCachedColor( skin, color,
                     KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG3 );
@@ -1071,7 +1083,7 @@
                 iColorBitmaps->At(KTabColorBitmapActiveColorIndex) &&
                 iColorBitmaps->At(KTabColorBitmapPassiveColorIndex) )
                 {
-                if( iActive )
+                if (iActive || iExtension->iHighlight)
                     {
                     colorBitmap = iColorBitmaps->At(KTabColorBitmapActiveColorIndex);
                     }
@@ -1262,8 +1274,8 @@
     
     if ( !iColorBitmaps )
     	{
-      LoadColorBitmapL();
-      }
+        TRAP_IGNORE(LoadColorBitmapL());
+    	}
     }
 
 void CAknTab::SetNarrowTabLayout( TBool aNarrow )
@@ -1399,6 +1411,9 @@
 
     /** This is the tab width that is set by the application. */
     TInt   iRequestedTabWidth;
+    
+    /** Indicates whether highlight tab is being drawn or not*/ 
+    TBool iHighlight;
     };
 
 
@@ -1406,6 +1421,8 @@
     {
     iPointerDownTab       = -1;
     iPointerDownXPosition = -1;
+    //Highlight is disabled by default.
+    iHighlight = EFalse;
     }
 
 
@@ -1871,7 +1888,7 @@
         {
         iExtension->iTabBackgroundLayout.iUse = EFalse;
 
-        iExtension->iTabSvgGraphics->DrawTabGroupBackgroundL(
+        iExtension->iTabSvgGraphics->DrawTabGroupBackground(
             CAknTabGroupGraphics::ENoDraw,
             iLongTabs,
             iNumberOfTabsShown,
@@ -2617,11 +2634,13 @@
 
         if (iExtension->iNarrowTabLayout)
             {
-            iExtension->iTabSvgGraphics->DrawTabGroupNarrowBackgroundL(
-                    CAknTabGroupGraphics::ENormal, iLongTabs,
-                    iNumberOfTabsShown, positionActive + 1, &gc,
-                    iExtension->iTabBackgroundLayout);
-
+            iExtension->iTabSvgGraphics->DrawTabGroupNarrowBackground(
+                CAknTabGroupGraphics::ENormal,
+                iLongTabs,
+                iNumberOfTabsShown, 
+                positionActive + 1, 
+                &gc,
+                iExtension->iTabBackgroundLayout);
             }
         else
             {
@@ -2631,18 +2650,36 @@
             
             if ( animationOngoing )
                 {
-                animation
-                        = iExtension->iTabCycleAnimationDirection == ELeft
-                                                                           ? CAknTabGroupGraphics::ECycleToLeft
-                                                                              : CAknTabGroupGraphics::ECycleToRight;
+                animation = iExtension->iTabCycleAnimationDirection == ELeft ?
+					CAknTabGroupGraphics::ECycleToLeft : CAknTabGroupGraphics::ECycleToRight;
                 }
-            iExtension->iTabSvgGraphics->DrawTabGroupBackgroundL(
-                    CAknTabGroupGraphics::ENormal, iLongTabs,
-                    iNumberOfTabsShown, positionActive + 1, &gc,
-                    animationOngoing ? iExtension->iNextTabBackgroundLayout
-                                       : iExtension->iTabBackgroundLayout,
-                    iExtension->iTabsHidden, animation);
-
+
+            if (!iExtension->iHighlight)
+                { 
+                // if highlight is not active
+                iExtension->iTabSvgGraphics->DrawTabGroupBackground(
+                    CAknTabGroupGraphics::ENormal,
+                    iLongTabs,
+                    iNumberOfTabsShown,
+                    positionActive + 1,
+                    &gc,
+                    animationOngoing ? iExtension->iNextTabBackgroundLayout : iExtension->iTabBackgroundLayout,
+                    iExtension->iTabsHidden, 
+					animation);
+                }
+            else
+                {
+                // Highlight is active
+                TInt highlightTab = iExtension->iPointerDownTab - iFirstShownTab + 1; //pointer down tab index w.r.t shown tabs
+                iExtension->iTabSvgGraphics->DrawTabGroupBackground(
+                    CAknTabGroupGraphics::ENormal,
+                    iLongTabs,
+                    iNumberOfTabsShown,
+                    positionActive + 1,
+                    &gc,
+                    animationOngoing ? iExtension->iNextTabBackgroundLayout : iExtension->iTabBackgroundLayout,
+                    iExtension->iTabsHidden, animation, highlightTab );
+                }
             }
         }
     else
@@ -2881,6 +2918,20 @@
                 }
             iExtension->iPointerDownTab       = newTab;
             iExtension->iPointerDownXPosition = aPointerEvent.iPosition.iX;
+            
+            //Activates highlight drawing for pressed tab.
+            if (!iExtension->iHighlight)
+                {
+                iExtension->iHighlight = ETrue;
+                
+                // Set the pressed tab to highlight
+                if ( iExtension->iPointerDownTab >= 0 )
+                    {
+                    iTabArray->At( iExtension->iPointerDownTab )->SetHighlight( ETrue );
+                    }
+                DrawDeferred();
+                }
+            
             return;
             }
         else if ( aPointerEvent.iType == TPointerEvent::EButton1Up )
@@ -2910,9 +2961,15 @@
             // if the button up event occurs ouside tabgroup, ignore it.
             if ( !Rect().Contains( aPointerEvent.iPosition ) || iExtension->iPointerDownTab != newTab )
                 {
-                iExtension->iPointerDownTab       = -1;
+                iExtension->iPointerDownTab = -1;
                 iExtension->iPointerDownXPosition = -1;
-                return ;
+                if (iExtension->iHighlight)
+                    {
+                    iExtension->iHighlight = EFalse;
+                    ResetHighlightStatus();
+                    DrawDeferred();
+                    }
+                return;
                 }
 
             if ( newTab != iActiveTab &&
@@ -3020,6 +3077,12 @@
 
             iExtension->iPointerDownTab       = -1;
             iExtension->iPointerDownXPosition = -1;
+            if( iExtension->iHighlight )
+                {
+                iExtension->iHighlight = EFalse;
+                ResetHighlightStatus();
+                DrawDeferred();
+                }
             }
         }
     }
@@ -3388,14 +3451,14 @@
                     ParentRect( iExtension->iNaviArrowsUsed ) );
 
                 iExtension->iTabBackgroundLayout.iUse = EFalse;
-                TRAP_IGNORE( iExtension->iTabSvgGraphics->DrawTabGroupBackgroundL(
+                iExtension->iTabSvgGraphics->DrawTabGroupBackground(
                                 CAknTabGroupGraphics::ENoDraw,
                                 iLongTabs,
                                 iNumberOfTabsShown,
                                 1,
                                 NULL,
                                 iExtension->iTabBackgroundLayout,
-                                CAknTabGroupGraphics::ENone ) );
+                                CAknTabGroupGraphics::ENone );
                 iExtension->iTabBackgroundLayout.iUse = ETrue;
                 SetDecoratorLayout( EFalse );
                 }
@@ -3403,6 +3466,11 @@
         if ( iExtension )
             {
             iExtension->iNarrowTabLayout = EFalse;
+            if( iExtension->iHighlight )
+                {
+                iExtension->iHighlight = EFalse;
+                ResetHighlightStatus();
+                }
             }
 
         if ( !COMPARE_BOOLS( iMirrored, AknLayoutUtils::LayoutMirrored() ) )
@@ -4043,7 +4111,7 @@
     if ( aNarrow )
         {
         iExtension->iNextTabBackgroundLayout.iUse = EFalse;
-        iExtension->iTabSvgGraphics->DrawTabGroupNarrowBackgroundL(
+        iExtension->iTabSvgGraphics->DrawTabGroupNarrowBackground(
             CAknTabGroupGraphics::ENoDraw,
             iLongTabs,
             iNumberOfTabsShown,
@@ -4055,7 +4123,7 @@
         if ( !aUseAnimation )
             {
             iExtension->iTabBackgroundLayout.iUse = EFalse;
-            iExtension->iTabSvgGraphics->DrawTabGroupNarrowBackgroundL(
+            iExtension->iTabSvgGraphics->DrawTabGroupNarrowBackground(
                 CAknTabGroupGraphics::ENoDraw,
                 iLongTabs,
                 iNumberOfTabsShown,
@@ -4068,7 +4136,7 @@
     else
         {
         iExtension->iNextTabBackgroundLayout.iUse = EFalse;
-        iExtension->iTabSvgGraphics->DrawTabGroupBackgroundL(
+        iExtension->iTabSvgGraphics->DrawTabGroupBackground(
             CAknTabGroupGraphics::ENoDraw,
             iLongTabs,
             iNumberOfTabsShown,
@@ -4079,7 +4147,7 @@
         iExtension->iNextTabBackgroundLayout.iUse = ETrue;
 
         iExtension->iTabBackgroundLayout.iUse = EFalse;
-        iExtension->iTabSvgGraphics->DrawTabGroupBackgroundL(
+        iExtension->iTabSvgGraphics->DrawTabGroupBackground(
             CAknTabGroupGraphics::ENoDraw,
             iLongTabs,
             iNumberOfTabsShown,
@@ -4444,4 +4512,12 @@
     CancelTabAnimationEventTimer();
     }
 
+void CAknTabGroup::ResetHighlightStatus()
+    {
+    // Resets highlight status to EFalse
+    for( TInt i = 0; i < iTabArray->Count(); i++ )
+        {
+        iTabArray->At(i)->SetHighlight( EFalse );
+        }
+    }
  //  End of File