phonebookui/Speeddial/VPbkControlSrc/SpdiaGridDlgVPbk.cpp
branchRCL_3
changeset 63 f4a778e096c2
child 64 c1e8ba0c2b16
child 68 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Speeddial/VPbkControlSrc/SpdiaGridDlgVPbk.cpp	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,346 @@
+/*
+* 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:    
+*     The main UI container element of the Speeddial Control Utility 
+*     that contains the 3x3 grid of speeddial entries.
+*
+*/
+
+
+
+
+
+// INCLUDE FILES
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <uikon/eikctrlstatus.h>
+#endif
+#include <eikdialg.h>
+#include <avkon.hrh>
+#include <aknlists.h>
+#include <aknkeys.h>
+
+#include <eikapp.h>
+#include <eikbtgpc.h>
+#include <eikmenub.h>
+
+#include <eiklbx.h>
+#include <gulicon.h>
+#include <eikclbd.h>
+
+#include <aknlayoutscalable_apps.cdl.h>
+#include <layoutmetadata.cdl.h>
+#include <SpdCtrl.rsg>
+#include "SpdiaControl.hrh"
+#include "speeddialprivate.h"
+#include "SpdiaGridDlgVPbk.h"
+#include "SpdiaGridVPbk.h"
+#include "Speeddial.laf"
+
+const TUint KShortcutKey0('0');
+const TInt KMaxIndex(8);
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CSpdiaGridDlgVPbk::NewL()
+// 
+// ---------------------------------------------------------
+CSpdiaGridDlgVPbk* CSpdiaGridDlgVPbk::NewL(TInt& aDial, const CSpeedDialPrivate& aControl)
+	{
+	CSpdiaGridDlgVPbk* self = new (ELeave) CSpdiaGridDlgVPbk(aDial, aControl);
+	return self;
+	}
+
+// ---------------------------------------------------------
+// CSpdiaGridDlgVPbk::~CSpdiaGridDlgVPbk()
+// 
+// ---------------------------------------------------------
+CSpdiaGridDlgVPbk::~CSpdiaGridDlgVPbk()
+    {
+    
+    }
+
+// ---------------------------------------------------------
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------
+//
+CSpdiaGridDlgVPbk::CSpdiaGridDlgVPbk(TInt& aDial, const CSpeedDialPrivate& aControl): iDial(aDial)
+    {
+    iControl = CONST_CAST(CSpeedDialPrivate*, &aControl);
+    iCbaID = R_AVKON_SOFTKEYS_BACK;
+    }
+
+// ----------------------------------------------------
+// CSpdiaGridDlgVPbk::PreLayoutDynInitL
+//
+// ----------------------------------------------------
+//
+void CSpdiaGridDlgVPbk::PreLayoutDynInitL()
+    {
+    iGrid = STATIC_CAST(CSpdiaGridVPbk*, Control(ESpdGridItem));
+
+    CDesCArray* itemArray = STATIC_CAST(CDesCArray*,
+                            iGrid->Model()->ItemTextArray());
+
+    itemArray->Reset();
+    iControl->CreateDataL(*iGrid);   
+
+    // Set the Obsever
+    // CPbkContactEngine* pbkEngine = iControl->PbkEngine();
+    // iPbkNotifier = pbkEngine->CreateContactChangeNotifierL(this);
+    }
+
+// ----------------------------------------------------
+// CSpdiaGridDlgVPbk::PostLayoutDynInitL
+//
+// ----------------------------------------------------
+//
+void CSpdiaGridDlgVPbk::PostLayoutDynInitL()
+    {
+    iControl->SetLayout(Rect());
+    if(AknLayoutUtils::LayoutMirrored())
+	{
+	iGrid->SetCurrentDataIndex(0);
+	LoadCbaL();
+	}
+	HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+    }
+
+// ---------------------------------------------------------
+// CSpdiaGridDlgVPbk::CreateCustomControlL
+//
+// ---------------------------------------------------------
+//
+SEikControlInfo CSpdiaGridDlgVPbk::CreateCustomControlL(TInt aControlType)
+    {
+    SEikControlInfo ctrlInfo;
+    ctrlInfo.iControl=NULL;
+    ctrlInfo.iTrailerTextId=0;
+    ctrlInfo.iFlags = EEikControlHasEars;
+    if (aControlType == ESpdiaGrid)
+        {
+        ctrlInfo.iControl = CSpdiaGridVPbk::NewL(*iControl);
+        }
+    return ctrlInfo;
+    }
+// ---------------------------------------------------------
+// CSpdiaGridDlgVPbk::OkToExitL
+//
+// ---------------------------------------------------------
+//
+TBool CSpdiaGridDlgVPbk::OkToExitL(TInt aButtonId)    // Pressed button id
+    {
+    TBool result(ETrue);
+    if (aButtonId == EAknSoftkeyOk)
+        {
+         iDial = iControl->Number(iGrid->CurrentDataIndex());
+         TInt index(iGrid->CurrentDataIndex());
+        if (iControl->VMBoxPosition() == index)
+            {
+            result = EFalse;
+            }
+        }
+    return result;
+    }
+
+// ---------------------------------------------------------
+// CSpdiaGridDlgVPbk::OfferKeyEventL
+//
+// ---------------------------------------------------------
+//
+TKeyResponse CSpdiaGridDlgVPbk::OfferKeyEventL
+            (const TKeyEvent& aKeyEvent, 
+             TEventCode aType)
+    {
+    TBool keyConsumed(EFalse);
+    if (iGrid != NULL)
+    {
+    	TChar code(aKeyEvent.iCode);
+    	if(AknLayoutUtils::LayoutMirrored())
+    	{
+    		if(code == EKeyLeftArrow)
+	    	{
+		    	TInt index = iGrid->CurrentDataIndex();
+		    	if(index == KMaxIndex)
+		    	{
+		    		iGrid->SetCurrentDataIndex(0);
+		    		LoadCbaL();
+		    		return EKeyWasConsumed; 
+		    	}
+	    	}
+			if(code == EKeyRightArrow)
+		    {
+		    	TInt index = iGrid->CurrentDataIndex();
+		    	if(index == 0)
+		    	{
+		    		iGrid->SetCurrentDataIndex(KMaxIndex);
+		    		LoadCbaL();
+		    		return EKeyWasConsumed; 
+		    	}
+		    }	
+    	}
+    	else
+    	{
+	    if(code == EKeyRightArrow)
+	    {
+	    	TInt index = iGrid->CurrentDataIndex();
+	    	if(index == KMaxIndex)
+	    	{
+	    		iGrid->SetCurrentDataIndex(0);
+	    		LoadCbaL();
+	    		return EKeyWasConsumed; 
+	    	}
+	    }
+		if(code == EKeyLeftArrow)
+	    {
+	    	TInt index = iGrid->CurrentDataIndex();
+	    	if(index == 0)
+	    	{
+	    		iGrid->SetCurrentDataIndex(KMaxIndex);
+	    		LoadCbaL();
+	    		return EKeyWasConsumed; 
+	    	}
+		    }
+	    }
+        TKeyResponse exitCode(
+            iGrid->OfferKeyEventL(aKeyEvent, aType));
+        if (exitCode != EKeyWasNotConsumed)
+            {
+            if (code.IsDigit())
+                {
+                if (aKeyEvent.iCode - KShortcutKey0 > 0)
+                    {
+                    iGrid->SetCurrentDataIndex(
+                            iControl->Index(aKeyEvent.iCode - KShortcutKey0));
+                    LoadCbaL();
+                    keyConsumed = ETrue;
+                    }
+                }
+            else if (aKeyEvent.iCode == EKeyLeftArrow ||
+                aKeyEvent.iCode == EKeyRightArrow ||
+                aKeyEvent.iCode == EKeyUpArrow ||
+                aKeyEvent.iCode == EKeyDownArrow)
+                {
+                LoadCbaL();
+                keyConsumed = ETrue;
+                }
+
+            if (aKeyEvent.iCode == EKeyOK)
+                {
+                TryExitL(EAknSoftkeyOk);
+                keyConsumed = ETrue;
+                }
+            else if (aKeyEvent.iCode == EKeyEscape)
+                {
+                TryExitL(EAknSoftkeyBack);
+                keyConsumed = ETrue;
+                }
+            }
+        }
+
+    if (keyConsumed)
+        {
+        return EKeyWasConsumed;
+        }
+
+    return CEikDialog::OfferKeyEventL(aKeyEvent, aType);
+    }
+
+// ---------------------------------------------------------
+// CSpdiaGridDlgVPbk::FocusChanged()
+// Changes focus.  
+// ---------------------------------------------------------
+//
+void CSpdiaGridDlgVPbk::FocusChanged(TDrawNow aDrawNow)
+	{
+    if (IsFocused() && aDrawNow == EDrawNow && iControl->UpdateFlag())
+        {
+        TRAP_IGNORE(iControl->CreateDataL(*iGrid));
+        iControl->SetUpdateFlag(EFalse);
+        }
+	}
+
+// ---------------------------------------------------------
+// CSpdiaGridDlgVPbk::LoadCbaL()
+// Loads CBA buttons.  
+// ---------------------------------------------------------
+//
+void CSpdiaGridDlgVPbk::LoadCbaL()
+    {
+    TInt id(R_AVKON_SOFTKEYS_BACK);
+    if (iGrid->CurrentDataIndex() != iControl->VMBoxPosition())
+        {
+        id =  R_SPDCTRL_SOFTKEYS_ASSIGN_BACK_ASSIGN;
+         }
+    if (id != iCbaID)
+        {
+        iCbaID = id;
+        ButtonGroupContainer().SetCommandSetL(id);
+        ButtonGroupContainer().DrawNow();
+        }
+        iPrevIndex = iGrid->CurrentDataIndex();
+    }
+
+// ---------------------------------------------------------
+// CSpdiaGridDlgVPbk::HandleResourceChange()
+// Handle layout and skin change event.  
+// ---------------------------------------------------------
+//
+void CSpdiaGridDlgVPbk::HandleResourceChange(TInt aType)
+	{
+	TRect			   	 mainPaneRect ;
+    TRect 			   	 statusPaneRect;
+    
+	if( aType == KEikDynamicLayoutVariantSwitch )
+	 {
+		if (Layout_Meta_Data::IsLandscapeOrientation())
+		{
+		 AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane,mainPaneRect);
+		}
+		else
+		{
+		AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane,mainPaneRect);
+	 	AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStatusPane,statusPaneRect);
+	 	mainPaneRect.iTl= statusPaneRect.iTl;
+		}
+	 SetRect(mainPaneRect);
+	 DrawNow();
+	 }
+	 else
+	 {
+	 CAknDialog::HandleResourceChange(aType);
+	 }
+	}
+	
+	// ---------------------------------------------------------
+// CSpdiaGridDlg::HandleDialogPageEventL()
+// Handles the events on the dialog page (for Touch)
+// ---------------------------------------------------------
+//	
+void CSpdiaGridDlgVPbk::HandleDialogPageEventL(TInt /*aEventId*/)
+    {
+        //Get the current Index      
+        TInt index(iGrid->CurrentDataIndex());
+        //If current index is the previous index, then try opening it
+        if(index == iPrevIndex)
+        {
+            
+            TryExitL(EAknSoftkeyOk);
+        }
+        else //else load the cba buttons
+        {
+            LoadCbaL();    
+        }
+
+    }
+// End of File