diff -r 03228bb411ae -r 125793e17004 mulwidgets/mulcoverflowwidget/src/mulcoverflowcontrol.cpp --- a/mulwidgets/mulcoverflowwidget/src/mulcoverflowcontrol.cpp Tue May 11 16:42:11 2010 +0300 +++ b/mulwidgets/mulcoverflowwidget/src/mulcoverflowcontrol.cpp Tue May 25 13:16:14 2010 +0300 @@ -795,7 +795,15 @@ void MulCoverFlowControl::HandleLessItemsUpdate(int aIndex) { MUL_LOG_ENTRY_EXIT("MUL:MulCoverFlowControl::HandleLessItemsUpdate"); - if(aIndex == mData->mHighlightIndex) + + int highlight = mData->mHighlightIndex; + IMulModelAccessor* accessor = static_cast(widget()->model()); + if(accessor) + { + highlight = accessor->Highlight(); + } + + if(aIndex == highlight) { UpdateCoverflowItem(aIndex,mData->mNumVisibleItem); if(mData->mNumVisibleItem != 1 && TotalModelCount() == 3) @@ -817,11 +825,11 @@ // 2d template landscape mode if(TotalModelCount() == 2) { - UpdateCoverflowItem(aIndex,mData->mNumVisibleItem+(aIndex - mData->mHighlightIndex)); + UpdateCoverflowItem(aIndex,mData->mNumVisibleItem+(aIndex - highlight)); } else { - int relativeIndex = (aIndex - mData->mHighlightIndex) + mData->mNumVisibleItem; + int relativeIndex = (aIndex - highlight) + mData->mNumVisibleItem; if(relativeIndex >= 0 && relativeIndex < 2*mData->mNumVisibleItem+1) { UpdateCoverflowItem(aIndex,relativeIndex); @@ -832,7 +840,7 @@ UpdateCoverflowItem(aIndex,relativeIndex); } - relativeIndex = mData->mNumVisibleItem - (TotalModelCount() - aIndex + mData->mHighlightIndex); + relativeIndex = mData->mNumVisibleItem - (TotalModelCount() - aIndex + highlight); if(relativeIndex >= 0 && relativeIndex < 2*mData->mNumVisibleItem+1) { UpdateCoverflowItem(aIndex,relativeIndex); @@ -858,23 +866,29 @@ int totalVisual = TotalModelCount(); int noOfVisuals = mData->mNumVisibleItem; int highlightRelativeIndex = mData->mNumVisibleItem; - - int leftIndex = mData->mHighlightIndex - noOfVisuals; - int rightIndex = mData->mHighlightIndex + noOfVisuals; + int highlight = mData->mHighlightIndex; + IMulModelAccessor* accessor = static_cast(widget()->model()); + if(accessor) + { + highlight = accessor->Highlight(); + } + + int leftIndex = highlight - noOfVisuals; + int rightIndex = highlight + noOfVisuals; if (leftIndex >= 0) { - if ((aIndex <= mData->mHighlightIndex) && (aIndex >= leftIndex)) + if ((aIndex <= highlight) && (aIndex >= leftIndex)) { - aRelativeIndex = highlightRelativeIndex - (mData->mHighlightIndex - aIndex); + aRelativeIndex = highlightRelativeIndex - (highlight - aIndex); return true; } } else { - if (aIndex <= mData->mHighlightIndex) + if (aIndex <= highlight) { - aRelativeIndex = highlightRelativeIndex - (mData->mHighlightIndex - aIndex); + aRelativeIndex = highlightRelativeIndex - (highlight - aIndex); return true; } else @@ -890,17 +904,17 @@ if (rightIndex < totalVisual) { - if ((aIndex >= mData->mHighlightIndex) && (aIndex <= rightIndex)) + if ((aIndex >= highlight) && (aIndex <= rightIndex)) { - aRelativeIndex = highlightRelativeIndex + (aIndex - mData->mHighlightIndex); + aRelativeIndex = highlightRelativeIndex + (aIndex - highlight); return true; } } else { - if (aIndex >= mData->mHighlightIndex) + if (aIndex >= highlight) { - aRelativeIndex = highlightRelativeIndex + (aIndex - mData->mHighlightIndex); + aRelativeIndex = highlightRelativeIndex + (aIndex - highlight); return true; } rightIndex = rightIndex - totalVisual; @@ -925,6 +939,14 @@ int highlightRelativeIndex = mData->mNumVisibleItem; int absolute = -1; int totalVisuals = TotalModelCount(); + + int highlight = mData->mHighlightIndex; + IMulModelAccessor* accessor = static_cast(widget()->model()); + if(accessor) + { + highlight = accessor->Highlight(); + } + if(totalVisuals <= 0) { // absolute index is always -1, so no need of any calculations @@ -933,7 +955,7 @@ { if(aRelativeIndex == highlightRelativeIndex) { - absolute = mData->mHighlightIndex; + absolute = highlight; } else { @@ -945,7 +967,7 @@ } else if(totalVisuals == 2) { - absolute = mData->mHighlightIndex + 1; + absolute = highlight + 1; absolute = absolute >= totalVisuals ? 0 : absolute; } } @@ -957,18 +979,18 @@ } else if(totalVisuals == 2) { - absolute = mData->mHighlightIndex + (aRelativeIndex - highlightRelativeIndex); + absolute = highlight + (aRelativeIndex - highlightRelativeIndex); absolute = absolute >= totalVisuals ? -1 : absolute; } else // totalvisuals > 3 { if(aRelativeIndex - highlightRelativeIndex > 0) { - absolute = mData->mHighlightIndex + aRelativeIndex - highlightRelativeIndex; + absolute = highlight + aRelativeIndex - highlightRelativeIndex; } else { - absolute = mData->mHighlightIndex + aRelativeIndex - highlightRelativeIndex + absolute = highlight + aRelativeIndex - highlightRelativeIndex + TotalModelCount(); } absolute = absolute >= totalVisuals ? absolute - totalVisuals : absolute; @@ -980,16 +1002,16 @@ { if(aRelativeIndex == highlightRelativeIndex) { - absolute = mData->mHighlightIndex; + absolute = highlight; } else if (aRelativeIndex > highlightRelativeIndex) { - absolute = mData->mHighlightIndex + (aRelativeIndex - highlightRelativeIndex); + absolute = highlight + (aRelativeIndex - highlightRelativeIndex); absolute = absolute >= totalVisuals ? (absolute - totalVisuals) : absolute; } else { - absolute = mData->mHighlightIndex - (highlightRelativeIndex - aRelativeIndex); + absolute = highlight - (highlightRelativeIndex - aRelativeIndex); absolute = absolute <0 ? (totalVisuals + absolute) : absolute; absolute = absolute > totalVisuals - 1 ? -1 : absolute; } @@ -1059,8 +1081,9 @@ mData->mHighlightIndex = aAccessor->Highlight(); CAlfLayout* main = (CAlfLayout*) mData->mBaseElement->findVisual( KMainLayoutIndex ); - int width = main->Size().Target().AsSize().iWidth; - int height = main->Size().Target().AsSize().iHeight; + TSize mainSize = main->Size().Target().AsSize(); + int width = mainSize.iWidth; + int height = mainSize.iHeight; if( width == 0 && height == 0 ) {