--- 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())
{