locationcentre/lcapp/src/lcappui.cpp
changeset 0 522cd55cc3d7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/locationcentre/lcapp/src/lcappui.cpp	Tue Feb 02 00:16:03 2010 +0200
@@ -0,0 +1,186 @@
+/*
+* Copyright (c) 2007 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:  Application class for Location Centre Application UI.
+*
+*/
+
+
+// SYSTEM FILES
+#include <avkon.hrh>
+#include <lcservice.h>
+#include <lclocationappinfo.h>
+#include <lclocationappfilter.h>
+#include <AknsConstants.h>
+#include <aknnotewrappers.h>
+#include <textresolver.h>
+
+// USER INCLUDES
+#include "lcappui.h"
+#include "lcapp.hrh"
+#include "lcview.h"
+#include "lclistboxmodel.h"
+
+// ----------------- Member funtions for CLcApp ------------------------------
+
+// ---------------------------------------------------------------------------
+// void CLcAppUi::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CLcAppUi::ConstructL()
+    {
+    BaseConstructL( EAknEnableSkin | EAknEnableMSK |EAknSingleClickCompatible );
+    
+    // Create the Service class
+    iLcService = CLcService::NewL();    
+    iLcService->SetObserverL( *this );
+    
+    // Handle condition where the function leaves with KErrNotFound
+    // Create the Listbox Model
+    
+    CLcLocationAppInfoArray* appInfoArray = NULL;
+    TRAPD( error, appInfoArray = iLcService->GetLocationApplicationsL());
+    if ( KErrNotFound == error || KErrNone == error )
+    	{
+    	CleanupStack::PushL( appInfoArray );
+    	// The ownership of the array is transferred.
+    	iListBoxModel = CLcListBoxModel::NewL( appInfoArray );    	
+    	CleanupStack::Pop( appInfoArray );
+    	}
+	else
+		{
+		// Not handling other error conditions. So better let others handle it.
+		User::Leave( error );
+		}
+    
+    // Create the View object and add it to the View stack
+    CLcView* lcView = CLcView::NewL( *this, *iListBoxModel );
+    CleanupStack::PushL( lcView );  	
+    AddViewL( lcView );
+    CleanupStack::Pop( lcView );
+    iLcView = lcView;
+    }
+
+// ---------------------------------------------------------------------------
+// CLcAppUi::~CLcAppUi
+// ---------------------------------------------------------------------------
+//
+CLcAppUi::~CLcAppUi()
+    {        
+    // Delete the Service class    
+    delete iLcService;
+    
+    // Delete the Model
+    delete iListBoxModel;
+    }
+
+// ---------------------------------------------------------------------------
+// TKeyResponse CLcAppUi::HandleKeyEventL
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CLcAppUi::HandleKeyEventL( const TKeyEvent& /*aKeyEvent*/,
+                                              TEventCode /*aType*/ )
+    {
+    return EKeyWasNotConsumed;
+    }
+
+// ---------------------------------------------------------------------------
+// void CLcAppUi::HandleCommandL
+// ---------------------------------------------------------------------------
+//
+void CLcAppUi::HandleCommandL( TInt aCommand )
+    {
+    switch ( aCommand )
+        {
+        case EAknSoftkeyExit: 
+        case EEikCmdExit:
+            {
+            Exit();
+            break;
+            }
+        case ELcOpen:
+            {
+            HandleEventL( ELcOpen );
+            break;
+            }
+       default: 
+       	    { 	          	           	    
+       	    break; 
+       	    }
+        }
+    }
+	
+// ---------------------------------------------------------------------------
+// void CLcAppUi::LcStatusChangedL
+// ---------------------------------------------------------------------------
+//    
+void CLcAppUi::LcStatusChangedL( TInt aErrorCode )
+    {
+    // Update the listbox only if its a valid update.		
+    if ( KErrNone == aErrorCode )
+    	{
+    	// There has been a change in Location Centre's registry. We have to
+    	// update the list of Applications
+    	
+	    CLcLocationAppInfoArray* appInfoArray = NULL;
+	    TRAPD( error, appInfoArray = iLcService->GetLocationApplicationsL());
+	    if ( KErrNotFound == error || KErrNone == error )
+	    	{
+	    	// The ownership of the new array is transferred.
+	    	iListBoxModel->UpdateModel( appInfoArray );
+	    	iLcView->UpdateL( *iListBoxModel );   	
+	    	}
+		else
+			{
+			// Not handling other error conditions. So better let others handle it.
+			User::Leave( error );
+			}    	
+    	}
+    }
+
+// ---------------------------------------------------------------------------
+// void CLcAppUi::HandleEventL
+// ---------------------------------------------------------------------------
+//    
+void CLcAppUi::HandleEventL( TInt	aEvent )
+	{
+	switch( aEvent )
+		{
+		case KEikDynamicLayoutVariantSwitch:
+			{
+			// Request the Client container to change its rect to a new Rect
+			iLcView->ScreenSizeChanged();
+			break;
+			}
+		case KAknsMessageSkinChange:
+			{
+			iLcView->UpdateIconsL();
+			break;
+			}
+		case ELcOpen:
+			{
+			// Obtain the Identifier corresponding to the Selected Item
+			TInt selectedItem = iLcView->GetFocussedItem();
+			if ( selectedItem >= 0 && selectedItem < iListBoxModel->MdcaCount())
+				{
+				TRAP_IGNORE( iLcService->
+						LaunchLocationApplicationL( iListBoxModel->AppInfoId( selectedItem )));
+				}
+			break;
+			}
+		default:
+			break;
+		}
+	}
+	
+// End of File