calendarui/commonutils/src/calennavilabel.cpp
changeset 0 f979ecb2b13e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/commonutils/src/calennavilabel.cpp	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,165 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Navigation label
+*
+*/
+
+//debug
+#include "calendarui_debug.h"
+
+
+
+// INCLUDE FILES
+#include <AknUtils.h>
+#include <AknStatuspaneUtils.h>
+#include <aknnavide.h>
+#include <calennavilabel.h>
+
+#include <aknlayoutscalable_avkon.cdl.h>
+// ---------------------------------------------------------
+// CCalenNaviLabel::SetLabelObserver
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C void CCalenNaviLabel::SetLabelObserver(MCCalenNaviLabelObserver* aObserver)
+    {
+    TRACE_ENTRY_POINT;
+    
+    iLabelObserver = aObserver;
+    
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------
+// CCalenNaviLabel::HandlePointerEventL
+// Handles pointer events in navi label
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C void CCalenNaviLabel::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+    {
+    TRACE_ENTRY_POINT;
+
+    if(AknLayoutUtils::PenEnabled())
+        {
+        switch(aPointerEvent.iType)
+            {
+            case TPointerEvent::EDrag:
+            case TPointerEvent::EButtonRepeat:
+                if(!Rect().Contains(aPointerEvent.iPosition))
+                    {
+                    IgnoreEventsUntilNextPointerUp();
+                    Window().CancelPointerRepeatEventRequest();
+                    }
+                break;
+            case TPointerEvent::EButton1Down:
+                {
+                Window().CancelPointerRepeatEventRequest();
+                TRect repeatRect;
+                TInt event;
+                TRect labelRect(Rect());
+                TBool repeat(ETrue);
+                
+                TInt indexR = 0;
+                // Is battery pane visible in current layout
+                if (AknStatuspaneUtils::IdleLayoutActive())
+                    {
+                    indexR = 1;
+                    }
+                TAknTextLineLayout layout = 
+                    AknLayout::Navi_pane_texts_Line_1( indexR );
+                
+                if (AknStatuspaneUtils::FlatLayoutActive()) 
+                    {
+                    TAknWindowLineLayout screenLayout = AknLayout::screen();
+                    TRect screenRect = screenLayout.Rect(); 
+                    
+                    TAknWindowLineLayout tmpLayout = 
+                        AknLayoutScalable_Avkon::navi_pane(2).LayoutLine();
+                    TAknLayoutRect naviRect;        
+                    naviRect.LayoutRect(screenRect, tmpLayout);        
+                    
+                    if(naviRect.Rect().Width() > Rect().Width())
+                        layout = AknLayoutScalable_Avkon::navi_text_pane_srt_t1().LayoutLine();
+                    }
+                const CFont* font = AknLayoutUtils::FontFromId(layout.FontId());
+                TInt txtWidth = font->TextWidthInPixels(*Text());
+                TInt space = (labelRect.Width() - txtWidth) / 2;
+                
+                if(aPointerEvent.iPosition.iX < labelRect.iTl.iX + 5)
+                    {
+                    repeatRect.SetRect(labelRect.iTl.iX - 10, labelRect.iTl.iY,
+                                       labelRect.iTl.iX + 5, labelRect.iBr.iY);
+                    event = MCCalenNaviLabelObserver::ECCalenNaviLabelEventLeft;
+                    }
+                else if(aPointerEvent.iPosition.iX > labelRect.iBr.iX - 7)
+                    {
+                    repeatRect.SetRect(labelRect.iBr.iX - 7, labelRect.iTl.iY,
+                                       labelRect.iBr.iX + 10, labelRect.iBr.iY);
+                    event = MCCalenNaviLabelObserver::ECCalenNaviLabelEventRight;
+                    }
+                else if(aPointerEvent.iPosition.iX > labelRect.iTl.iX + space &&
+                        aPointerEvent.iPosition.iX < labelRect.iBr.iX - space)
+                    {
+                    repeat = EFalse;
+                    event = MCCalenNaviLabelObserver::ECCalenNaviLabelGo;
+                    }
+                else
+	                {
+	                return; 
+	                }
+                
+                if(iLabelObserver)
+                    {
+                    iLabelObserver->HandleNaviLabelEventL(event);
+                    if(repeat)
+                        Window().RequestPointerRepeatEvent(TTimeIntervalMicroSeconds32(500000),
+                                                           repeatRect);
+                    }
+                break;
+                }
+            case TPointerEvent::EButton1Up:
+                Window().CancelPointerRepeatEventRequest();
+                break;
+                
+            }
+        }
+    
+    TRACE_EXIT_POINT;
+    }
+
+// ---------------------------------------------------------
+// CCalenNaviLabel::CCalenNaviLabel
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C CCalenNaviLabel::CCalenNaviLabel( )
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+    }
+    
+// ---------------------------------------------------------
+// CCalenNaviLabel::~CCalenNaviLabel
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C CCalenNaviLabel::~CCalenNaviLabel( )
+    {
+    TRACE_ENTRY_POINT;
+    TRACE_EXIT_POINT;
+    }
+
+
+// End of file