photosgallery/viewframework/views/cloudview/src/glxtagscontextmenucontrol.cpp
branchRCL_3
changeset 32 78ad99c24f08
parent 25 191387a8b767
child 56 b023a8d2866a
--- 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 <alf/alflayout.h>
 #include <alf/alfgridlayout.h> // For CAlfGridLayout
 #include <alf/alfborderbrush.h> // For CAlfBorderBrush
+#include <alf/alfroster.h> // For CalfRoster
 #include <alf/alfanchorlayout.h>
 #include <alf/alftextvisual.h>
 #include <alf/alfimagevisual.h>
@@ -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);