diff -r 5b238bc8ffb6 -r 01504893d9cb photosgallery/viewframework/views/cloudview/src/glxcloudviewcontrol.cpp --- a/photosgallery/viewframework/views/cloudview/src/glxcloudviewcontrol.cpp Wed Sep 15 12:13:06 2010 +0300 +++ b/photosgallery/viewframework/views/cloudview/src/glxcloudviewcontrol.cpp Wed Oct 13 14:32:09 2010 +0300 @@ -44,6 +44,7 @@ #include //attribute context #include //for medialist +#include "glxcontainerinfobubble.h" //intelligent class for data of infobubble #include "glxcloudview.hrh" #include "mglxcloudviewmskobserver.h" // For Msk Observer #include "mglxenterkeyeventobserver.h" // For enterkey observer @@ -61,7 +62,7 @@ const TInt KRowHeight = 72; const TInt KLeftMargin = 10; const TInt KNumMinRowSpace = 2; -const TInt KColSpace = 30; +const TInt KColSpace = 20; const TInt KRightmargin = 10;//Aligning Right margin const TInt KMinTagSize = 77; const TInt KTagScreenHeight = 460; @@ -198,6 +199,8 @@ if ( iLabels.Count ()==listCount && iAttributeContext->RequestCountL (&iMediaList)==0) { + //if we navigate in forward direction, first item should be highlighted.if we are navigating in + // backwards direction, index is not necessarily zero, it will be restored. if ( iUiUtility->ViewNavigationDirection ()== EGlxNavigationForwards && iMediaList.Count ()) { iMediaList.SetFocusL (NGlxListDefs::EAbsolute, 0); @@ -209,7 +212,6 @@ iTouchFeedback = MTouchFeedback::Instance(); iPhysics = CAknPhysics::NewL(*this, NULL); InitPhysicsL(); - iShowFocus = EFalse; } @@ -240,6 +242,7 @@ // --------------------------------------------------------------------------- // CGlxCloudViewControl::~CGlxCloudViewControl() + { TRACER("GLX_CLOUD::CGlxCloudViewControl::~CGlxCloudViewControl"); iCloudInfo.Close (); @@ -269,23 +272,20 @@ TInt CGlxCloudViewControl::LayoutVisibleRows(TPoint aStartPoint,TInt aRowStartIndex , TInt aRowEndIndex) { - TRACER("CGlxCloudViewControl::LayoutVisibleRows"); + TRACER("GLX_CLOUD::CGlxCloudViewControl::DrawRow"); TSize vsize; TPoint tl, br; tl = aStartPoint; - br.iX = 0; br.iY = tl.iY + KRowHeight; - const TInt KMaxScreenWidth = iTagScreenWidth - iScrollPaneHandle.iW; //drawing in reverse for arabic hebrew support if ( GlxGeneralUiUtilities::LayoutIsMirrored ()) { - GLX_LOG_INFO("Mirrorred Layout"); - //In Mirrored layout, 'BottomRight' considers scrollpane width for each row - br.iX = aStartPoint.iX - iScrollPaneHandle.iW; + br.iX = aStartPoint.iX; + const TInt KMaxScreenWidth = iTagScreenWidth - iScrollPaneHandle.iW; //Set the positions of tags in a row. for (TInt j = aRowStartIndex; j <= aRowEndIndex; j++) { - vsize = iLabels[j]->TextExtents(); + vsize = iLabels[j]->TextExtents (); if ( vsize.iWidth < KMinTagSize ) { vsize.iWidth = KMinTagSize; @@ -295,15 +295,15 @@ { TAlfRealSize tagSize( KMaxScreenWidth, br.iY ); iLabels[j]->SetWrapping( CAlfTextVisual::ELineWrapTruncate ); + vsize = iLabels[j]->TextExtents (); tl.iX -= aStartPoint.iX; tl.iY = aStartPoint.iY; br.iX = tagSize.iWidth; } else { - tl.iX = br.iX - vsize.iWidth; + tl.iX -= (vsize.iWidth + KColSpace); } - //Set the anchor points for the tags iLayout->SetAnchor (EAlfAnchorTopLeft, iLayoutIndex, EAlfAnchorOriginLeft, EAlfAnchorOriginTop, @@ -313,17 +313,17 @@ EAlfAnchorOriginLeft, EAlfAnchorOriginTop, EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, TAlfTimedPoint (br.iX, br.iY)); - //Bottom-Right corner for next tag in same row br.iX -= (vsize.iWidth + KColSpace); iLayoutIndex += 1; } + } else { - GLX_LOG_INFO("NOT Mirrorred Layout"); + const TInt KMaxScreenWidth = iTagScreenWidth - iScrollPaneHandle.iW; for (TInt j = aRowStartIndex; j <= aRowEndIndex; j++) { - vsize = iLabels[j]->TextExtents(); + vsize = iLabels[j]->TextExtents (); if( vsize.iWidth < KMinTagSize ) { vsize.iWidth = KMinTagSize; @@ -331,6 +331,7 @@ if (vsize.iWidth > KMaxScreenWidth) { TAlfRealSize tagSize( KMaxScreenWidth, br.iY ); + TAlfRealPoint startPos( aStartPoint.iX, 0 ); iLabels[j]->SetWrapping( CAlfTextVisual::ELineWrapTruncate ); tl.iX = aStartPoint.iX; tl.iY = aStartPoint.iY; @@ -338,9 +339,8 @@ } else { - br.iX = tl.iX + vsize.iWidth; + br.iX += vsize.iWidth + KColSpace; } - iLayout->SetAnchor (EAlfAnchorTopLeft, iLayoutIndex, EAlfAnchorOriginLeft, EAlfAnchorOriginTop, EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, @@ -349,21 +349,22 @@ EAlfAnchorOriginLeft, EAlfAnchorOriginTop, EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, TAlfTimedPoint (br.iX, br.iY)); - //Top-Left Corner for next tag in same row - tl.iX += (vsize.iWidth + KColSpace); + tl.iX = br.iX; iLayoutIndex += 1; } } return 0; } + + + // --------------------------------------------------------------------------- // LayoutVisibleArea() // // --------------------------------------------------------------------------- void CGlxCloudViewControl::LayoutVisibleArea() { - TRACER("CGlxCloudViewControl::LayoutVisibleArea"); //screen height for boundary check:how many rows fit in. //find out how many rows can fit in. //add upper and lower margin spacing 5 pixels @@ -376,13 +377,13 @@ { startpoint.iX = iTagScreenWidth - KRightmargin; } - //else start from beginning + + //else start from biginning else { startpoint.iX = KLeftMargin; } startpoint.iY = KNumMinRowSpace; - //associate the active visuals with anchor layout GLX_LOG_INFO("GLX_CLOUD ::CGlxCloudViewControl::::LayoutVisibleArea Layout reset"); GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::::LayoutVisibleArea layout Count after reset %d ", iLayout->Count ()); @@ -393,6 +394,7 @@ { GLX_LOG_INFO("GLX_CLOUD ::CGlxCloudViewControl::::FindEndRowIndex Entering layout append"); + TAlfTimedValue opacity; opacity.SetValueNow(1.0); // immediate change iLabels[j]->SetOpacity(opacity); @@ -401,14 +403,16 @@ GLX_LOG_INFO("GLX_CLOUD ::CGlxCloudViewControl::::LayoutVisibleArea Exiting layout append"); iLayoutIndex = 0; GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::::LayoutVisibleArea layout Count realloc %d ", iLayout->Count ()); - TInt totalHeight = 0; - for (TInt j = 0; j <= iCloudInfo.Count() - 1; j++) + for (TInt j = 0; j <= iEndRowIndex; j++) { GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::::LayoutVisibleArea Drawing row started %d ", j); LayoutVisibleRows (startpoint,iCloudInfo[j].iStartIndex, iCloudInfo[j].iEndIndex); startpoint.iY += KRowHeight + KNumMinRowSpace; - + } + TInt totalHeight = 0; + for (TInt j = 0; j <= iCloudInfo.Count()-1; j++) + { totalHeight+=KRowHeight; totalHeight+=KNumMinRowSpace; } @@ -443,7 +447,9 @@ iScrollEventData.mViewLength, 0); DisplayScrollBar(); - } + } + //constructing the bubblecontainer + CreateBubleContainer(); iLayout->UpdateChildrenLayout (); //update layout @@ -452,191 +458,156 @@ MoveDownIfRequired(); } + // --------------------------------------------------------------------------- // OfferEventL() // --------------------------------------------------------------------------- // TBool CGlxCloudViewControl::OfferEventL(const TAlfEvent &aEvent) - { - TRACER("GLX_CLOUD:: CGlxCloudViewControl::OfferEventL"); + { TRACER("GLX_CLOUD:: CGlxCloudViewControl::OfferEventL"); //check if key inputs needs handling TBool consumed = EFalse; - if (iLabels.Count() == 0) + if ( ( iLabels.Count () == 0 ) ) { GLX_LOG_INFO( "GLX_CLOUD ::CGlxCloudViewControl::offerkeyeventL no key press returning "); return EFalse; //return as no futher processing is required } - if (aEvent.IsKeyEvent() && iTagsContextMenuControl->ItemMenuVisibility()) - { - // Hide the context menu, if visible - ShowContextItemMenuL(EFalse); - } - if ( aEvent.IsKeyEvent ()&& aEvent.Code() == EEventKey ) { switch (aEvent.KeyEvent().iCode) { + //@ EABI-7R7FRU Fute failure: Tag views enter key has no functionality. case EKeyEnter : case EKeyDevice3: { - if (iShowFocus) - { - iShowFocus = EFalse; - iObserverEnterKeyEvent.HandleEnterKeyEventL( - (TInt) EAknCmdOpen); - } - else - { - SetFocusToFirstVisibleItemL(); - } - consumed = ETrue; + iObserverEnterKeyEvent.HandleEnterKeyEventL( (TInt)EAknCmdOpen ); + consumed= ETrue; } break; case EKeyUpArrow: - { - if (iShowFocus) + { + if(iCloudInfo.Count() >1 ) { - HandleKeyUpL(); - iFocusRowIndex = RowNumber(iMediaList.FocusIndex()); + HandleKeyUpL (); + consumed = ETrue; + iFocusRowIndex = RowNumber (iMediaList.FocusIndex ()); - MoveUpIfRequired(); + MoveUpIfRequired(); } - else - { - SetFocusToFirstVisibleItemL(); - } - consumed = ETrue; } break; case EKeyDownArrow: - { - if (iShowFocus) + { + if (iCloudInfo.Count() > 1) { - HandleKeyDownL(); - iFocusRowIndex = RowNumber(iMediaList.FocusIndex()); + HandleKeyDownL (); + consumed = ETrue; + iFocusRowIndex = RowNumber (iMediaList.FocusIndex ()); - MoveDownIfRequired(); - } - else - { - SetFocusToFirstVisibleItemL(); - } - consumed = ETrue; + MoveDownIfRequired(); + } } break; case EKeyLeftArrow: case EKeyPrevious: { - if (iShowFocus) + // arabic hebrew change + if ( GlxGeneralUiUtilities::LayoutIsMirrored () ) { - // arabic hebrew change - if (GlxGeneralUiUtilities::LayoutIsMirrored()) + if ( iMediaList.FocusIndex() == iMediaList.Count() - 1 ) { - if (iMediaList.FocusIndex() == iMediaList.Count() - 1) - { - iMediaList.SetFocusL(NGlxListDefs::EAbsolute, 0); - } - else - { - iMediaList.SetFocusL(NGlxListDefs::EAbsolute, - iMediaList.FocusIndex() + 1); - } - iScrollDirection = 0; + iMediaList.SetFocusL (NGlxListDefs::EAbsolute, 0); } else { - if (iMediaList.FocusIndex() == 0) - { - iMediaList.SetFocusL(NGlxListDefs::EAbsolute, - iMediaList.Count() - 1); - } - else - { - iMediaList.SetFocusL(NGlxListDefs::EAbsolute, - iMediaList.FocusIndex() - 1); - } - iScrollDirection = 1; + iMediaList.SetFocusL (NGlxListDefs::EAbsolute, + iMediaList.FocusIndex ()+ 1); } - TInt focusRowIndex = RowNumber(iMediaList.FocusIndex()); - if (iFocusRowIndex != focusRowIndex) - { - iFocusRowIndex = focusRowIndex; - if (iScrollDirection == 0) - { - MoveDownIfRequired(); - } - else - { - MoveUpIfRequired(); - } - } + iScrollDirection = 0; } else { - SetFocusToFirstVisibleItemL(); + if ( iMediaList.FocusIndex ()== 0 ) + { + iMediaList.SetFocusL (NGlxListDefs::EAbsolute, + iMediaList.Count() - 1 ); + } + else + { + iMediaList.SetFocusL (NGlxListDefs::EAbsolute, + iMediaList.FocusIndex ()- 1); + } + iScrollDirection = 1; } consumed = ETrue; + TInt focusRowIndex = RowNumber (iMediaList.FocusIndex ()); + if(iFocusRowIndex != focusRowIndex) + { + iFocusRowIndex = focusRowIndex; + if( iScrollDirection == 0 ) + { + MoveDownIfRequired(); + } + else + { + MoveUpIfRequired(); + } + } } + break; case EKeyRightArrow: case EKeyNext: - { - if (iShowFocus) + { + // arabic hebrew change + if ( GlxGeneralUiUtilities::LayoutIsMirrored () ) { - // arabic hebrew change - if (GlxGeneralUiUtilities::LayoutIsMirrored()) + if ( iMediaList.FocusIndex ()== 0 ) { - if (iMediaList.FocusIndex() == 0) - { - iMediaList.SetFocusL(NGlxListDefs::EAbsolute, - iMediaList.Count() - 1); - } - else - { - iMediaList.SetFocusL(NGlxListDefs::EAbsolute, - iMediaList.FocusIndex() - 1); - } - iScrollDirection = 1; + iMediaList.SetFocusL (NGlxListDefs::EAbsolute, + iMediaList.Count() - 1 ); } else { - if (iMediaList.FocusIndex() == iMediaList.Count() - 1) - { - iMediaList.SetFocusL(NGlxListDefs::EAbsolute, 0); - } - else - { - iMediaList.SetFocusL(NGlxListDefs::EAbsolute, - iMediaList.FocusIndex() + 1); - } - iScrollDirection = 0; + iMediaList.SetFocusL (NGlxListDefs::EAbsolute, + iMediaList.FocusIndex ()- 1); } - TInt focusRowIndex = RowNumber(iMediaList.FocusIndex()); - - if (iFocusRowIndex != focusRowIndex) - { - iFocusRowIndex = focusRowIndex; - if (iScrollDirection == 1) - { - MoveUpIfRequired(); - } - else - { - MoveDownIfRequired(); - } - } + iScrollDirection = 1; } else { - SetFocusToFirstVisibleItemL(); + if ( iMediaList.FocusIndex ()== iMediaList.Count() - 1 ) + { + iMediaList.SetFocusL (NGlxListDefs::EAbsolute, 0); + } + else + { + iMediaList.SetFocusL (NGlxListDefs::EAbsolute, + iMediaList.FocusIndex ()+ 1); + } + iScrollDirection = 0; } + TInt focusRowIndex = RowNumber (iMediaList.FocusIndex ()); + + if( iFocusRowIndex != focusRowIndex ) + { + iFocusRowIndex = focusRowIndex; + if( iScrollDirection == 1 ) + { + MoveUpIfRequired(); + } + else + { + MoveDownIfRequired(); + } + } + } consumed = ETrue; - } break; default: @@ -678,6 +649,7 @@ iScrollDirection = 1; } + // --------------------------------------------------------------------------- // HandleKeyDown() // --------------------------------------------------------------------------- @@ -712,14 +684,14 @@ { TRACER("GLX_CLOUD::CGlxCloudViewControl::HandleLayoutFocusChange"); - if ((iShowFocus || !iUiUtility->IsPenSupported()) && (iLabels.Count() - 1 - >= iMediaList.FocusIndex())) + if ( iLabels.Count()-1 >= iMediaList.FocusIndex()) { //to highlight focused element SetFocusColor(); } } + // --------------------------------------------------------------------------- // FocusUpdate() // --------------------------------------------------------------------------- @@ -727,12 +699,14 @@ void CGlxCloudViewControl::FocusUpdate() { TRACER("GLX_CLOUD::CGlxCloudViewControl::FocusUpdate"); - iFocusRowIndex = RowNumber(iMediaList.FocusIndex()); - GLX_LOG_INFO1("GLX_CLOUD::FocusUpdate iFocusRowIndex=%d", - iFocusRowIndex); + GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::FocusUpdate HighLighted RowNum %d ",iFocusRowIndex); + GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::FocusUpdate End RowNumn %d ",iCloudInfo.Count()-1); + iFocusRowIndex = RowNumber (iMediaList.FocusIndex ()); + iEndRowIndex = iCloudInfo.Count()-1; LayoutVisibleArea(); } + // --------------------------------------------------------------------------- // ResetLayout() // --------------------------------------------------------------------------- @@ -749,23 +723,25 @@ iLabels.Reset(); } + // --------------------------------------------------------------------------- // GetRownum() // --------------------------------------------------------------------------- // TInt CGlxCloudViewControl::RowNumber(TInt aItemIndex) const - { - TRACER("GLX_CLOUD::CGlxCloudViewControl::GetRownum"); - //Get the rownumber of the given item index. - TInt i; - for (i = 0; i < iCloudInfo.Count(); i++) - { - if ((aItemIndex >= iCloudInfo[i].iStartIndex) && (aItemIndex - <= iCloudInfo[i].iEndIndex)) - break; - } - return i; - } +{ + +TRACER("GLX_CLOUD::CGlxCloudViewControl::GetRownum"); +//Get the rownumber of the given item index. +TInt i; +for (i = 0; i < iCloudInfo.Count (); i++) + { + if ( (aItemIndex >= iCloudInfo[i].iStartIndex) && (aItemIndex <=iCloudInfo[i].iEndIndex)) + break; + } +return i; + +} // --------------------------------------------------------------------------- // FetchAttributeFromCacheL() @@ -799,6 +775,7 @@ } } + //medialist Observers // --------------------------------------------------------------------------- @@ -828,11 +805,16 @@ //reset the layout and get the items from cache UpdateLayout(); //remove all the visuals from the layout.layout is empty now. iCloudInfo.Close (); //row information is reset + //get the new array contents from cache.no need to reset the array as the number + //of items in array will remain same. + FetchAttributeFromCacheL(); + UpdateRowDataL (); //updates the row data and reassigns font sizes and draw the layout on screen. } InitPhysicsL(); } + // --------------------------------------------------------------------------- // HandleMediaL(). // --------------------------------------------------------------------------- @@ -915,6 +897,8 @@ //of items in array will remain same. UpdateLayout(); //remove all the visuals from the layout.layout is empty now. FetchAttributeFromCacheL(); + //if we navigate in forward direction, first item should be highlighted.if we are navigating in + // backwards direction, index is not necessarily zero, it will be restored. if ( iUiUtility->ViewNavigationDirection ()== EGlxNavigationForwards && iMediaList.Count ()) { iMediaList.SetFocusL (NGlxListDefs::EAbsolute, 0); @@ -985,6 +969,7 @@ // --------------------------------------------------------------------------- // void CGlxCloudViewControl::UpdateRowDataL() + { TRACER("GLX_CLOUD::CGlxCloudViewControl::UpdateRowData()"); @@ -1006,7 +991,7 @@ //Setting the Font Styles based on association counts //Finding the maximum value of image association //Determining the Font(Style) for each visual - TInt maxCount = MaxUsageCount (); //Maximum Association count + TInt maxCount= MaxUsageCount (); //Maximum Association count GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::UpdateRowData mediaCount %d ", maxCount); GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::UpdateRowData iLabels.Count() %d ",iLabels.Count()); if ( 0 == maxCount ) @@ -1045,7 +1030,7 @@ } // Current row width will be progressively incremented to fit as many tags as possible - rowWidth += currentTagSize.iWidth + KColSpace; + rowWidth += currentTagSize.iWidth + 10; GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::UpdateRowData currentTagSize.iWidth %d ", currentTagSize.iWidth); GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::UpdateRowData rowWidth %d ", rowWidth); @@ -1069,7 +1054,7 @@ // then we must fit the current visual into the next row. // Do that check now and adjust accordingly. // Fix for EAHN-7BZD78 is to exclude the gap value between the row's tags from the logic - else if ( rowWidth - KColSpace > KMaxScreenWidth ) + else if ( rowWidth - 10 > KMaxScreenWidth ) { GLX_LOG_INFO("GLX_CLOUD :: CGlxCloudViewControl::UpdateRowData Row added"); lastRowStartTagIndex = currentTagIndex - 1; @@ -1097,6 +1082,8 @@ GLX_LOG_INFO1("GLX_CLOUD ::CGlxCloudViewControl::UpdateRowData iCloudInfo.count loop exit %d ", iCloudInfo.Count()); FocusUpdate (); //Start screen drawing + + iEndRowIndex = iCloudInfo.Count()-1; } // --------------------------------------------------------------------------- @@ -1259,11 +1246,11 @@ } // --------------------------------------------------------------------------- -// AppendToCloudArrayL() +// SetFocusColor() // --------------------------------------------------------------------------- // -void CGlxCloudViewControl::AppendToCloudArrayL(TGlxCloudInfo& aCloudInfo, - const TInt& aStartIndex, const TInt& aEndIndex) +void CGlxCloudViewControl::AppendToCloudArrayL( + TGlxCloudInfo& aCloudInfo,const TInt& aStartIndex, const TInt& aEndIndex ) { TRACER("GLX_CLOUD::CGlxCloudViewControl::AppendToCloudArrayL"); aCloudInfo.iStartIndex = aStartIndex; @@ -1275,28 +1262,30 @@ // SetFocusColor() // --------------------------------------------------------------------------- // -void CGlxCloudViewControl::SetFocusColor() +void CGlxCloudViewControl::SetFocusColor() { - TRACER("GLX_CLOUD::CGlxCloudViewControl::SetFocusColor"); - if (iMediaList.Count()) - { - iLabels[iMediaList.FocusIndex()]->SetColor( - KAknsIIDQsnHighlightColors, EAknsCIQsnHighlightColorsCG3); - } + iLabels[iMediaList.FocusIndex()]->SetColor (KAknsIIDQsnHighlightColors ,EAknsCIQsnHighlightColorsCG3); + } + + +// --------------------------------------------------------------------------- +// SetBubleMidPoint() +// --------------------------------------------------------------------------- +// +void CGlxCloudViewControl::SetBubleMidPoint(TPoint& aMidPoint) + { + TRACER("GLX_CLOUD::CGlxCloudViewControl::SetBubleMidPoint"); + //Substract the viewport position so as to set the buble at the right position on the screen + aMidPoint.iX-=iViewPortPosition.iX; + aMidPoint.iY-=iViewPortPosition.iY; } // --------------------------------------------------------------------------- -// ResetFocusColor() +// CreateBubleContainer() // --------------------------------------------------------------------------- -// -void CGlxCloudViewControl::ResetFocusColor() - { - TRACER("GLX_CLOUD::CGlxCloudViewControl::ResetFocusColor"); - if (iMediaList.Count()) - { - iLabels[iMediaList.FocusIndex()]->SetColor(KAknsIIDQsnTextColors, - EAknsCIQsnTextColorsCG6); - } +// +void CGlxCloudViewControl::CreateBubleContainer() + { } // --------------------------------------------------------------------------- @@ -1306,21 +1295,19 @@ void CGlxCloudViewControl::MoveUpIfRequired() { TRACER("GLX_CLOUD::CGlxCloudViewControl::MoveUpIfRequired"); - TInt focusIndex = iMediaList.FocusIndex(); - //get the focused item's position TPoint point; - iLayout->ChildPos(focusIndex,point); + iLayout->ChildPos(iMediaList.FocusIndex(),point); TSize size; - iLayout->ChildSize(focusIndex,size); - - TInt rownumber = RowNumber(focusIndex); + iLayout->ChildSize(iMediaList.FocusIndex(),size); + TInt focus = iMediaList.FocusIndex(); + TInt rownumber = RowNumber(focus); //if the focused item is not visible then move the viewport if(point.iY < iViewPortPosition.iY) { //set the new position of viewport - TInt offset = iViewPortPosition.iY - point.iY; - iViewPortPosition.iY-=offset; + TInt offeset = iViewPortPosition.iY - point.iY; + iViewPortPosition.iY-=offeset; if( (iViewPortPosition.iY < 0) ) { iViewPortPosition.iY = 0; @@ -1336,57 +1323,89 @@ Scroll(); } + // --------------------------------------------------------------------------- // MoveDownIfRequired() // --------------------------------------------------------------------------- // void CGlxCloudViewControl::MoveDownIfRequired() { - TRACER("GLX_CLOUD::CGlxCloudViewControl::MoveDownIfRequired"); - TInt focusIndex = iMediaList.FocusIndex(); - + TRACER("GLX_CLOUD::CGlxCloudViewControl::MoveDownIfRequired"); //get the focused item's position TPoint point; - iLayout->ChildPos(focusIndex, point); + iLayout->ChildPos(iMediaList.FocusIndex(),point); TSize size; - iLayout->ChildSize(focusIndex, size); - - //Reset viewport position for cases: - //case 1)Focus index is first item - if (focusIndex == 0) - { - iViewPortPosition.iY = 0; - } - //case 2)Focused item is in last screen - else if( point.iY > (iViewPortVirtualSize.iHeight - iViewPortSize.iHeight)) + iLayout->ChildSize(iMediaList.FocusIndex(),size); + //if the focused visual is not visible then move the viewport + if(point.iY+size.iHeight > iViewPortPosition.iY+iViewPortSize.iHeight ) + { + //set the new position of viewport + TInt offeset = (point.iY+size.iHeight) - (iViewPortPosition.iY+iViewPortSize.iHeight); + iViewPortPosition.iY+=offeset; + if( (iViewPortPosition.iY > iViewPortVirtualSize.iHeight) ) + { + iViewPortPosition.iY = iViewPortVirtualSize.iHeight - iViewPortSize.iHeight; + } + } + //if its key event then it should be cyclic + else if (iMediaList.FocusIndex() == 0) { - iViewPortPosition.iY = iViewPortVirtualSize.iHeight - iViewPortSize.iHeight; - } - else - { - iViewPortPosition.iY = point.iY + KNumMinRowSpace; - } - - //Validate the viewport position - if ((iViewPortPosition.iY > iViewPortVirtualSize.iHeight)) - { - iViewPortPosition.iY = iViewPortVirtualSize.iHeight - iViewPortSize.iHeight; - } - - GLX_LOG_INFO1("GLX_CLOUD::MoveDownIfRequired() iViewPortPosition.iY:%d", - iViewPortPosition.iY); + iViewPortPosition.iY = 0; + } iViewPortLayout->SetViewportPos(iViewPortPosition, KSlowCloudMovement); iScrollEventData.mViewStartPos = iViewPortPosition.iY; if(iScrollBarWidget) { - Scroll(); + Scroll(); } - } + } + +// --------------------------------------------------------------------------- +// MoveDownIfRequired() +// --------------------------------------------------------------------------- +// +void CGlxCloudViewControl::CalculateBubleMidPoint() + { + TRACER("GLX_CLOUD::CGlxCloudViewControl::CalculateBubleMidPoint"); + TPoint midpoint; + TAlfRealRect focussedItemRect; + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect (AknLayoutUtils::EMainPane, mainPaneRect); + + CAlfVisual& visual = iLayout->Visual( iMediaList.FocusIndex() ); + focussedItemRect = visual.DisplayRect(); + + if( GlxGeneralUiUtilities::LayoutIsMirrored () ) + { + midpoint.iX = focussedItemRect.iBr.iX + + ((focussedItemRect.iTl.iX - focussedItemRect.iBr.iX )/2); + } + + else + { + midpoint.iX=focussedItemRect.iTl.iX + + ((focussedItemRect.iBr.iX - focussedItemRect.iTl.iX )/2); + } + + midpoint.iY=focussedItemRect.iTl.iY+ + ((focussedItemRect.iBr.iY - focussedItemRect.iTl.iY )/2); + TPoint anchorRect; + + //Get the position of anchor layout + iViewPortLayout->ChildPos (0, anchorRect); + + //Add the differance to the midpoint + midpoint.iX+=anchorRect.iX; + midpoint.iY+=anchorRect.iY; + + //Substract from the viewport position the viewport position + SetBubleMidPoint(midpoint); + } // --------------------------------------------------------------------------- // HandlePointerEventL() // --------------------------------------------------------------------------- -// +// TBool CGlxCloudViewControl::HandlePointerEventL( const TAlfEvent &aEvent ) { TRACER("GLX_CLOUD::CGlxCloudViewControl::HandlePointerEventL"); @@ -1424,8 +1443,6 @@ { iTouchFeedback->InstantFeedback(ETouchFeedbackBasic); iMediaList.SetFocusL (NGlxListDefs::EAbsolute, index); - iShowFocus = ETrue; - HandleLayoutFocusChange(); //Start the timer to interpret longpress events iTimerComplete = EFalse; @@ -1448,12 +1465,6 @@ } else if (iDownEventReceived && aEvent.PointerUp()) { - if (!iTagsContextMenuControl->ItemMenuVisibility()) - { - iShowFocus = EFalse; - ResetFocusColor(); - } - iDownEventReceived = EFalse; Display()->Roster().SetPointerEventObservers(0, *this); consumed = ETrue; @@ -1487,8 +1498,10 @@ TInt focus = iMediaList.FocusIndex(); if (index != focus) { + iTouchFeedback->InstantFeedback( ETouchFeedbackBasic ); TInt focusrowindex = iFocusRowIndex; iMediaList.SetFocusL(NGlxListDefs::EAbsolute, index); + SetFocusColor(); iFocusRowIndex = RowNumber (iMediaList.FocusIndex ()); if( iFocusRowIndex > focusrowindex) @@ -1757,17 +1770,15 @@ } // --------------------------------------------------------------------------- -// InitializeScrollBar() +// attachScrollBar() // --------------------------------------------------------------------------- -// -void CGlxCloudViewControl::InitializeScrollBar( - IAlfScrollBarWidget* aScrollBarWidget) +// +void CGlxCloudViewControl::InitializeScrollBar(IAlfScrollBarWidget* aScrollBarWidget) { TRACER("GLX_CLOUD::CGlxCloudViewControl::InitializeScrollBar"); iScrollBarWidget = aScrollBarWidget; ((IAlfScrollBarModel *) (iScrollBarWidget->model()))->initializeData( iScrollEventData.mSpan, iScrollEventData.mViewLength, 0); - Scroll(); DisplayScrollBar(); } @@ -1824,30 +1835,19 @@ // DisplayScrollBar() // --------------------------------------------------------------------------- // -void CGlxCloudViewControl::DisplayScrollBar() +void CGlxCloudViewControl::DisplayScrollBar() { - TRACER("GLX_CLOUD::CGlxCloudViewControl::DisplayScrollBar()"); if (iScrollBarWidget) { IAlfElement* vertBaseElement =(iScrollBarWidget->control()->findElement ("BaseElement")); IAlfScrollBarDefaultBaseElement* scrollbarbaselement=static_cast ( vertBaseElement->makeInterface (IAlfScrollBarDefaultBaseElement::type() ) ); - TInt totalHeight = 0; - for (TInt index = 0; index <= iCloudInfo.Count() - 1; index++) - { - totalHeight += KRowHeight; - totalHeight += KNumMinRowSpace; - } - - // To set the scrollbar visibility, it's enough to set the opacity - // of baselayout. No need to set the opacity of thumb separately. - // Set the scrollbar visibility only - // when visuals height exceeds the screen height - if (iScrollEventData.mSpan && totalHeight > iTagScreenHeight) + // To set the scrollbar visibility, it's enough to set the opacity + // of baselayout. No need to set the opacity of thumb separately. + if (iScrollEventData.mSpan) { //make scroll bar visible - GLX_LOG_INFO("GLX_CLOUD: Make scrollbar visible!"); scrollbarbaselement->setOpacity(1.0); } else @@ -1868,31 +1868,30 @@ AknLayoutUtils::LayoutMetricsRect (AknLayoutUtils::EMainPane, rect); if ((rect.Width() != (iTagScreenWidth + KRightmargin)) || (rect.Height() != iScreenHeight)) { - //set the new screen dimensions - iScreenHeight = rect.Height(); - iTagScreenWidth = rect.Width() - KRightmargin; - if (IsLandscape()) - { - iTagScreenHeight = rect.Height(); - } - else - { - iTagScreenHeight = KTagScreenHeight; - } + //set the new screen dimensions + iScreenHeight=rect.Height(); + iTagScreenWidth = rect.Width()- KRightmargin; + if(IsLandscape()) + { + iTagScreenHeight = rect.Height(); + } + else + { + iTagScreenHeight = KTagScreenHeight; + } - iViewPortLayout->SetSize( - TAlfRealSize(iTagScreenWidth, iTagScreenHeight), 0); - //delete all layout associations - if (iCloudInfo.Count() != 0)//check for the empty cloud view - { - UpdateLayout(); - FetchAttributeFromCacheL(); - //generate row structures and draw rows on screen - UpdateRowDataL(); + iViewPortLayout->SetSize(TAlfRealSize(iTagScreenWidth,iTagScreenHeight), 0); + //delete all layout associations + if ( iCloudInfo.Count ()!= 0)//check for the empty cloud view + { + UpdateLayout(); + FetchAttributeFromCacheL(); + //generate row structures and draw rows on screen + UpdateRowDataL (); - InitPhysicsL(); - } - } + InitPhysicsL(); + } + } } // --------------------------------------------------------------------------- @@ -1964,7 +1963,6 @@ return EFalse; } } - // --------------------------------------------------------------------------- // TimerCompleteL() // --------------------------------------------------------------------------- @@ -1985,54 +1983,23 @@ TRect rect; AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect); - //only if not dragged and physics hasnt started - if (!iPhysicsStarted && !iViewDragged) + if(!iPhysicsStarted)//only if physics hasnt started { iTagsContextMenuControl->SetViewableRect(rect); iTagsContextMenuControl->ShowItemMenuL(ETrue); iTagsContextMenuControl->SetDisplay(midpoint); } } - // --------------------------------------------------------------------------- // ShowContextItemMenuL() // --------------------------------------------------------------------------- // void CGlxCloudViewControl::ShowContextItemMenuL(TBool aShow) { - TRACER("GLX_CLOUD::ShowContextItemMenuL"); - GLX_LOG_INFO1("GLX_CLOUD::ShowContextItemMenuL() aShow=%d", aShow); iTagsContextMenuControl->ShowItemMenuL(aShow); if(!aShow) { iViewPortLayout->UpdateChildrenLayout(0); - iShowFocus = EFalse; - ResetFocusColor(); - } - } - -// --------------------------------------------------------------------------- -// SetFocusToFirstVisibleItemL() -// --------------------------------------------------------------------------- -// -void CGlxCloudViewControl::SetFocusToFirstVisibleItemL() - { - TRACER("GLX_CLOUD::CGlxCloudViewControl::SetFocusToFirstVisibleItemL()"); - iShowFocus = ETrue; - - TInt visIndex = GetAbsoluteIndex(TPoint(KLeftMargin + KLeftMargin, - KColSpace)); - GLX_LOG_INFO1("GLX_CLOUD::SetFocusToFirstVisibleItemL() visIndex=%d", visIndex); - - if (visIndex != KErrNotFound) - { - iMediaList.SetFocusL(NGlxListDefs::EAbsolute, visIndex); - - MoveUpIfRequired(); - } - else - { - HandleLayoutFocusChange(); } }