diff -r a60acebbbd9d -r 78ad99c24f08 photosgallery/viewframework/views/cloudview/src/glxtagscontextmenucontrol.cpp --- a/photosgallery/viewframework/views/cloudview/src/glxtagscontextmenucontrol.cpp Tue May 11 16:13:40 2010 +0300 +++ b/photosgallery/viewframework/views/cloudview/src/glxtagscontextmenucontrol.cpp Tue May 25 12:42:31 2010 +0300 @@ -19,6 +19,7 @@ #include #include // For CAlfGridLayout #include // For CAlfBorderBrush +#include // For CalfRoster #include #include #include @@ -65,7 +66,7 @@ //6 Seconds delay for menu control visibility on screen const TInt KTimerDelay = 6000000; //Control complete height -const TInt KGridHeight = KReqHeightPerMenuItem * KNumofMenuItems; +const TInt KGridHeight = ((KReqHeightPerMenuItem * KNumofMenuItems) + (KMinimalGap * (KNumofMenuItems + 1))); //Text size for menu items const TInt KTextSizeInPixels = 20; //X shrink factor for stylus menu border to be drawn/visible @@ -73,7 +74,7 @@ //Y shrink factor for stylus menu border to be drawn/visible const TInt KShrinkYCoord = 5; //Padding value for Minimum width for control -const TInt KWidthPadding = 20; +const TInt KWidthPadding = 30; //Padding value for Minimum spacing for line separators const TInt KLinePadding = 5; //Context menu separator line thickness value @@ -116,7 +117,7 @@ // CGlxTagsContextMenuControl::CGlxTagsContextMenuControl( MGlxItemMenuObserver& aItemMenuObserver) : - iItemMenuObserver(aItemMenuObserver) + iItemMenuObserver(aItemMenuObserver), iCommandId(KErrNotFound) { TRACER("GLX_CLOUD::CGlxTagsContextMenuControl::CGlxTagsContextMenuControl"); //Nothing more to do for now @@ -142,11 +143,14 @@ // Create a new 3x1 grid layout visual. iGrid = CAlfGridLayout::AddNewL(*this, KNoOfColumns, KNumofMenuItems, iMainVisual);//columns, rows - + iGrid->SetFlag(EAlfVisualFlagManualLayout); //Finally create the menu list that will appear in screen CreateMenuListL(CreateFontL()); CalculateMaxWidth(); iMainVisual->SetSize(TSize(KWidthPadding + iMaxTextWidth, KGridHeight)); + iGrid->SetInnerPadding(TPoint(KLinePadding,KLinePadding)); + const TRect gridSize(TPoint(KLinePadding,KLinePadding),TSize(KTextSizeInPixels + iMaxTextWidth, KGridHeight - 10)); + iGrid->SetRect(TAlfRealRect(gridSize)); iMainVisual->EnableBrushesL(ETrue); @@ -163,7 +167,7 @@ CleanupStack::Pop(frameBrush); DrawLineSeparatorsL(); - ShowItemMenu(EFalse); + ShowItemMenuL(EFalse); } // --------------------------------------------------------------------------- // ~CGlxTagsContextMenuControl() @@ -296,12 +300,12 @@ } // --------------------------------------------------------------------------- -// ShowItemMenu() +// ShowItemMenuL() // --------------------------------------------------------------------------- // -void CGlxTagsContextMenuControl::ShowItemMenu (TBool aShow) +void CGlxTagsContextMenuControl::ShowItemMenuL(TBool aShow) { - TRACER("GLX_CLOUD::CGlxTagsContextMenuControl::ShowItemMenu"); + TRACER("GLX_CLOUD::CGlxTagsContextMenuControl::ShowItemMenuL"); if(aShow) { iMainVisual->SetOpacity(KOpacityOpaque); @@ -310,6 +314,9 @@ else { iMainVisual->SetOpacity(KOpacityTransparent); + iRenameTextVisual->EnableBrushesL(EFalse); + iDeleteTextVisual->EnableBrushesL(EFalse); + iSlideshowTextVisual->EnableBrushesL(EFalse); iItemMenuVisibility = EFalse; iMainVisual->SetPos(TAlfRealPoint(KDummyPoint)); } @@ -333,42 +340,99 @@ TRACER("GLX_CLOUD::CGlxTagsContextMenuControl::OfferEventL"); TBool consumed = EFalse; - if(iItemMenuVisibility && aEvent.IsPointerEvent() && aEvent.PointerDown() ) + if (aEvent.IsPointerEvent() && iItemMenuVisibility ) { - CAlfVisual* onVisual = aEvent.Visual(); - TInt cmdId = KErrNotFound; - if(AlfUtil::TagMatches(onVisual->Tag(), KTagSlideshow)) - { - cmdId = EGlxCmdSlideshowPlay; - } - else if(AlfUtil::TagMatches(onVisual->Tag(), KTagDelete)) + if (aEvent.PointerDown()) { - cmdId = EGlxCmdDelete; - } - else if(AlfUtil::TagMatches(onVisual->Tag(), KTagRename)) + iCommandId = KErrNotFound; + Display()->Roster().SetPointerEventObservers( + EAlfPointerEventReportDrag + + EAlfPointerEventReportLongTap + + EAlfPointerEventReportUnhandled, *this); + if (iItemMenuVisibility) + { + CAlfVisual* onVisual = aEvent.Visual(); + CAlfFrameBrush* brush = CAlfFrameBrush::NewLC(*iAlfEnv, + KAknsIIDQsnFrList); + TRect textVisualRect = TRect(TPoint( + iSlideshowTextVisual->Pos().IntValueNow()), TSize( + iSlideshowTextVisual->Size().ValueNow().AsSize())); + TRect innerRect(textVisualRect); + innerRect.Shrink(KShrinkXCoord, KShrinkYCoord); + brush->SetFrameRectsL(innerRect, textVisualRect); + iTimer->Cancel(); //cancels any outstanding requests + if (AlfUtil::TagMatches(onVisual->Tag(), KTagSlideshow)) + { + iSlideshowTextVisual->EnableBrushesL(ETrue); + iSlideshowTextVisual->Brushes()->AppendL(brush, + EAlfHasOwnership); + + iCommandId = EGlxCmdSlideshowPlay; + } + else if (AlfUtil::TagMatches(onVisual->Tag(), KTagDelete)) + { + iDeleteTextVisual->EnableBrushesL(ETrue); + iDeleteTextVisual->Brushes()->AppendL(brush, + EAlfHasOwnership); + + iCommandId = EGlxCmdDelete; + } + else if (AlfUtil::TagMatches(onVisual->Tag(), KTagRename)) + { + iRenameTextVisual->EnableBrushesL(ETrue); + iRenameTextVisual->Brushes()->AppendL(brush, + EAlfHasOwnership); + + iCommandId = EGlxCmdRename; + } + consumed = ETrue; + CleanupStack::Pop(brush); + }//End of iItemMenuVisibility check + }//End of Pointer down event + else if (aEvent.PointerUp()) { - cmdId = EGlxCmdRename; - } - - if(cmdId >= 0) - { - ShowItemMenu(EFalse); - iItemMenuObserver.HandleGridMenuListL(cmdId); + if (iCommandId >= 0) + { + TBool eventInsideControl = HitTest( + aEvent.PointerEvent().iParentPosition); + //If Up event is received only within Menu control, handle the command + if (eventInsideControl) + { + ShowItemMenuL(EFalse); + + iItemMenuObserver.HandleGridMenuListL(iCommandId); + iCommandId = KErrNotFound; + } + else + { + HandleUpEventL(); + } + } consumed = ETrue; } + else if (aEvent.PointerEvent().EDrag) + { + TBool eventInsideControl = HitTest( + aEvent.PointerEvent().iParentPosition); + if (!eventInsideControl) + { + HandleUpEventL(); + } + consumed = ETrue; + } + consumed = ETrue; } - return consumed; } // --------------------------------------------------------------------------- -// TimerComplete() +// TimerCompleteL() // --------------------------------------------------------------------------- // -void CGlxTagsContextMenuControl::TimerComplete() +void CGlxTagsContextMenuControl::TimerCompleteL() { - TRACER("GLX_CLOUD::CGlxTagsContextMenuControl::TimerComplete"); - ShowItemMenu(EFalse); + TRACER("GLX_CLOUD::CGlxTagsContextMenuControl::TimerCompleteL"); + ShowItemMenuL(EFalse); } // --------------------------------------------------------------------------- @@ -402,6 +466,23 @@ } // --------------------------------------------------------------------------- +// HandleUpEventL() +// --------------------------------------------------------------------------- +// +void CGlxTagsContextMenuControl::HandleUpEventL() + { + TRACER("GLX_CLOUD::CGlxTagsContextMenuControl::HandleUpEventL"); + if(iCommandId >=0 && iItemMenuVisibility) + { + iCommandId = KErrNotFound; + + iRenameTextVisual->EnableBrushesL(EFalse); + iDeleteTextVisual->EnableBrushesL(EFalse); + iSlideshowTextVisual->EnableBrushesL(EFalse); + + iTimer->SetDelay(KTimerDelay); + } + } // --------------------------------------------------------------------------- // DrawLineSeparatorsL() // --------------------------------------------------------------------------- @@ -417,13 +498,12 @@ for (TInt i = 1; i < KNumofMenuItems; i++) { CAlfCurvePath* curvePath = CAlfCurvePath::NewLC(*iAlfEnv); - curvePath->AppendArcL( - TPoint(KLinePadding, KReqHeightPerMenuItem * i), TSize(), 0, - 0, 0); - curvePath->AppendLineL( - TPoint(KLinePadding, KReqHeightPerMenuItem * i), TPoint( - iMainVisual->DisplayRect().Width() - KLinePadding, - KReqHeightPerMenuItem * i), 0); + curvePath->AppendArcL(TPoint(KLinePadding, ((KReqHeightPerMenuItem + * i) + (KLinePadding * i + 2))), TSize(), 0, 0, 0); + curvePath->AppendLineL(TPoint(KLinePadding, ((KReqHeightPerMenuItem + * i) + (KLinePadding * i + 2))), TPoint( + iMainVisual->DisplayRect().Width() - KLinePadding, + ((KReqHeightPerMenuItem * i) + (KLinePadding * i + 2))), 0); CAlfLineVisual* line = CAlfLineVisual::AddNewL(*this, iMainVisual); line->SetPath(curvePath, EAlfHasOwnership);