uifw/AvKon/aknhlist/src/akntreelistview.cpp
branchRCL_3
changeset 38 c52421ed5f07
parent 25 941195f2d488
child 55 aecbbf00d063
--- a/uifw/AvKon/aknhlist/src/akntreelistview.cpp	Wed Jun 09 09:58:37 2010 +0300
+++ b/uifw/AvKon/aknhlist/src/akntreelistview.cpp	Mon Jun 21 15:57:43 2010 +0300
@@ -876,6 +876,22 @@
                         {
                         SetFocusedItem( focusedItem, index, ETrue );
                         }
+                    else
+                        {
+                        // This block moves visible view after layout switch
+                        // if there are not enough items to fill whole screen
+                        TInt visibleItemIndex = iTree.VisibleItemIndex( focusedItem );
+                        if ( visibleItemIndex != KErrNotFound )
+                            {
+                            TInt visibleItemCount( iTree.VisibleItemCount() );
+                            TInt itemCountLimit = iItems.Count();
+                            if ( visibleItemCount <= itemCountLimit - KAdditionalItems )
+                                {
+                                UpdateVisibleItems( visibleItemIndex, focusedItem );
+                                }
+                            }
+                        }
+
                     }
                 else
                     {
@@ -899,9 +915,8 @@
                             if ( height < itemCountLimit &&
                                  height < visibleItemCount )
                                 {
-                                TInt move = itemCountLimit - height;                
-                                UpdateVisibleItems(
-                                    focusedItemIndex + move, focusedItem );
+                                TInt move = itemCountLimit - height;
+                                UpdateVisibleItems( focusedItemIndex + move, focusedItem );
                                 }
                             }
                         }
@@ -2036,7 +2051,10 @@
             // This should not fail, if enough space was reserved for the
             // array, and if it fails, it results only fewer items being
             // shown in the list.
-            iItems.Append( TAknTreeListViewItem() );
+			if ( KErrNone != iItems.Append( TAknTreeListViewItem() ) )
+				{
+				return;
+				}
             }
         }
 
@@ -2050,11 +2068,19 @@
         iterator.Previous();
         }
     if ( iFlags.IsSet( EFlagMarkingMode ) )    
-
         {
-        itemRect.iBr.iX -= 
-                AknLayoutScalable_Avkon::list_double_graphic_pane_t1( 
-                        0 ).LayoutLine().il;
+        if ( iFlags.IsSet( EFlagMirroredLayoutInUse ))
+            {
+            itemRect.iBr.iX -= 
+                    AknLayoutScalable_Avkon::list_double_graphic_pane_t1( 
+                            0 ).LayoutLine().ir;        
+            }
+        else
+            {
+            itemRect.iBr.iX -= 
+                    AknLayoutScalable_Avkon::list_double_graphic_pane_t1( 
+                            0 ).LayoutLine().il;
+            }
         }
 
     // Update items and their rectangles.
@@ -2844,9 +2870,22 @@
     CWindowGc& gc = SystemGc();
 #endif
 
-    TInt checkBoxOffset = 
-            AknLayoutScalable_Avkon::list_double_graphic_pane_t1( 
-                    0 ).LayoutLine().il;                                         
+    TInt checkBoxOffset ( 0 );
+    if ( iFlags.IsSet( EFlagMarkingMode ) )
+        {
+        if ( iFlags.IsSet( EFlagMirroredLayoutInUse ) )
+            {   
+            checkBoxOffset = 
+                    AknLayoutScalable_Avkon::list_double_graphic_pane_t1( 
+                            0 ).LayoutLine().ir;                                         
+            }
+        else
+            {
+            checkBoxOffset =           
+                    AknLayoutScalable_Avkon::list_double_graphic_pane_t1( 
+                            0 ).LayoutLine().il;                                         
+            }
+        }
 #ifdef RD_UI_TRANSITION_EFFECTS_LIST
     MAknListBoxTfxInternal* transApi = CAknListLoader::TfxApiInternal( &gc );
     if ( !empty && transApi )
@@ -2982,46 +3021,13 @@
                     }
 #endif
 
-                if ( iFlags.IsSet( EFlagMarkingMode ) && iMarkingIconArray 
-                        && iMarkingIconArray->Count() == 
-                                KMarkingModeIconArraySize )
-                    {
-                    // Rect for the marking icon
-                    TRect iconRect = RectFromLayout( drawRect,
-                        AknLayoutScalable_Avkon::list_single_graphic_pane_g1( 0 ) );
-            
-                    iconRect.Move( 0, -offset );
-                    // unchecked icon
-                    CGulIcon* icon = ( *iMarkingIconArray )[1];                    
-
-                    TBool marked = ( iItems[ii].Item()->IsMarked() );
-                    if ( marked )
-                        {
-                        icon = (*iMarkingIconArray)[0];
-                        }
-
-                    CFbsBitmap* bitmap = icon->Bitmap();
-
-                    if ( bitmap )
-                        {
-                        gc.BitBltMasked( iconRect.iTl, bitmap, 
-                            iconRect.Size(), icon->Mask(), EFalse );
-                       }
-                    }
-
                 if ( iItems[ii].Item() != iBottomItem )
                     {
                     TRect offsetRect( drawRect );
                     offsetRect.Move( 0, -offset );
                     AknListUtils::DrawSeparator( gc, offsetRect, textColor, skin );
                     }
-
-                if ( iFlags.IsSet( EFlagMarkingMode ) )
-                    {
-                    gc.SetOrigin( TPoint( checkBoxOffset, 0 ) );
-                    drawRect.iBr.iX -= checkBoxOffset;                
-                    }
-
+                
                 TBool focused = ( FocusedItem() &&
                     iItems[ii].Item() == FocusedItem() );
 
@@ -3035,6 +3041,12 @@
                     // Draw highlight for focused item.
                     TRect highlightRect( iItems[ii].HighlightRect(
                         iViewLevel, Indention(), IndentionWidth() ) );
+                     
+                    if ( iFlags.IsSet( EFlagMarkingMode ) )
+                        {
+                        highlightRect.iBr.iX = drawRect.iBr.iX;
+                        highlightRect.iTl.iX = drawRect.iTl.iX;
+                        }
 
 #ifdef RD_UI_TRANSITION_EFFECTS_LIST
                         TRect tfxHighlightRect( highlightRect );
@@ -3073,6 +3085,42 @@
 #endif //RD_UI_TRANSITION_EFFECTS_LIST
                     }
 
+                if ( iFlags.IsSet( EFlagMarkingMode ) && iMarkingIconArray
+                        && iMarkingIconArray->Count() == 
+                                KMarkingModeIconArraySize )
+                    {
+                    // Rect for the marking icon
+                    TRect iconRect = RectFromLayout( drawRect,
+                        AknLayoutScalable_Avkon::list_single_graphic_pane_g1( 0 ) );
+            
+                    iconRect.Move( 0, -offset );
+                    // unchecked icon
+                    CGulIcon* icon = ( *iMarkingIconArray )[1];                    
+
+                    TBool marked = ( iItems[ii].Item()->IsMarked() );
+                    if ( marked )
+                        {
+                        icon = (*iMarkingIconArray)[0];
+                        }
+
+                    CFbsBitmap* bitmap = icon->Bitmap();
+
+                    if ( bitmap )
+                        {
+                        gc.BitBltMasked( iconRect.iTl, bitmap, 
+                            iconRect.Size(), icon->Mask(), EFalse );
+                       }
+                    }
+                
+                if ( iFlags.IsSet( EFlagMarkingMode ) )
+                    {
+                    drawRect.iBr.iX -= checkBoxOffset;
+                    if ( iFlags.IsClear( EFlagMirroredLayoutInUse ) )
+                        {
+                        gc.SetOrigin( TPoint( checkBoxOffset, 0 ) );
+                        }
+                    }
+
 #ifdef RD_UI_TRANSITION_EFFECTS_LIST
                 if (iItems[ii].Item()) 
                 {