meetingrequest/mrgui/mrlocationplugin/src/cesmrlocationpluginimpl.cpp
branchRCL_3
changeset 12 4ce476e64c59
parent 1 12c456ceeff2
child 16 b5fbb9b25d57
--- a/meetingrequest/mrgui/mrlocationplugin/src/cesmrlocationpluginimpl.cpp	Mon Mar 15 12:39:10 2010 +0200
+++ b/meetingrequest/mrgui/mrlocationplugin/src/cesmrlocationpluginimpl.cpp	Wed Mar 31 21:08:33 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008-2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2009 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"
@@ -16,21 +16,50 @@
 */
 
 
-#include "emailtrace.h"
+#include "cesmrlocationpluginimpl.h"
+#include "mesmrlocationpluginobserver.h"
+#include "cesmrurlparserplugin.h"
+
 #include <mnproviderfinder.h>
 #include <mnprovider.h>
-//<cmail>
-#include "mnmapview.h"
-#include <EPos_CPosLandmark.h>
-#include <StringLoader.h>
+#include <mnmapview.h>
+#include <epos_cposlandmark.h>
+#include <stringloader.h>
 #include <esmrgui.rsg>
-#include "cesmrurlparserplugin.h"
-//</cmail>
 #include <ct/rcpointerarray.h>
+#include <calentry.h>
+
+#include "emailtrace.h"
+
+// ======== LOCAL FUNCTIONS ========
 
-#include "cesmrlocationpluginimpl.h"
-#include "mesmrlocationpluginobserver.h"
+namespace
+    {
+/**
+ * Converts vCal GEO value to landmark with coordinates
+ *
+ * @param aGeoValue coordinates
+ * @return a landmark with coordinates
+ */
+CPosLandmark* CreateLandmarkL( const CCalGeoValue& aGeoValue )
+    {
+    TReal lat;
+    TReal lon;
 
+    if( !aGeoValue.GetLatLong( lat, lon ) )
+        {
+        User::Leave( KErrArgument );
+        }
+
+    CPosLandmark* landmark = CPosLandmark::NewLC();
+    TLocality coordinate;
+    coordinate.SetCoordinate( lat, lon );
+    landmark->SetPositionL( coordinate );
+    CleanupStack::Pop( landmark );
+    return landmark;
+    }
+
+    }
 // ======== MEMBER FUNCTIONS ========
 
 // ---------------------------------------------------------------------------
@@ -38,7 +67,7 @@
 // ---------------------------------------------------------------------------
 //
 CESMRLocationPluginImpl::CESMRLocationPluginImpl()
-	: CESMRLocationPlugin( CActive::EPriorityStandard )
+    : CESMRLocationPlugin( CActive::EPriorityStandard )
     {
     FUNC_LOG;
     }
@@ -54,23 +83,20 @@
     RCPointerArray<CMnProvider> providers;
     CleanupClosePushL( providers );
     MnProviderFinder::FindProvidersL( providers,
-    							      CMnProvider::EServiceMapView
-    							      | CMnProvider::EServiceNavigation
-    							      | CMnProvider::EServiceGeocoding );
+                                      CMnProvider::EServiceMapView
+                                      | CMnProvider::EServiceNavigation );
     if ( providers.Count() == 0 )
-    	{
-    	User::Leave( KErrNotSupported );
-    	}
+        {
+        User::Leave( KErrNotSupported );
+        }
     iProvider = providers[ 0 ];
-    providers.Remove( 0 );    
+    providers.Remove( 0 );
     // PopAndDestroy provides from cleanupstack
     CleanupStack::PopAndDestroy( &providers );
-    
+
     // Create Map & Navigation view
     CreateMapViewL();
-	
-    iUrlParser = CESMRUrlParserPlugin::NewL();
-    
+
     CActiveScheduler::Add( this );
     }
 
@@ -113,7 +139,7 @@
         }
     delete iProvider;
     delete iUrlParser;
-    
+
     iLandMarks.ResetAndDestroy();
     }
 
@@ -137,66 +163,38 @@
 // ---------------------------------------------------------------------------
 //
 void CESMRLocationPluginImpl::SelectFromMapL( const TDesC& aSearchQuery,
-								      	      const TDesC& aLocationUrl )
-	{
+                                              const TDesC& aLocationUrl )
+    {
     FUNC_LOG;
-	iLandMarks.ResetAndDestroy();
-	
-	if ( IsActive() )
-		{
-		User::Leave( KErrInUse );
-		}
-	
-	CreateMapViewL();
-	
-	iMapView->ResetMapArea();
-	
-	// Create landmark from location URL. TRAP errors because URL is optional.
-	CPosLandmark* location = NULL;
-	TRAP_IGNORE( location = //codescanner::forgottoputptroncleanupstack
-                 iUrlParser->CreateLandmarkFromUrlL( aLocationUrl ) )
-	
-	if ( location ) // Landmark created. Set search string as landmark name
-	    {
-	    if ( aSearchQuery.Length() > 0 )
-	        {
-	        CleanupStack::PushL( location );
-	    
-	        location->SetLandmarkNameL( aSearchQuery );
-	    
-	        iLandMarks.AppendL( location );
-	        CleanupStack::Pop( location );
-	    
-	        iMapView->ResetLandmarksToShow();
-	        iMapView->AddLandmarksToShowL( iLandMarks );
-	        }
-	    }
-	else
+
+    // Create landmark from location URL. TRAP errors because URL is optional.
+    CPosLandmark* location = NULL;
+    TRAP_IGNORE( location = //codescanner::forgottoputptroncleanupstack
+            UrlParserL().CreateLandmarkFromUrlL( aLocationUrl ) )
+
+    SelectFromMapL( aSearchQuery, location );
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRLocationPluginImpl::SelectFromMapL
+// From class MESMRLocationPlugin.
+// ---------------------------------------------------------------------------
+//
+void CESMRLocationPluginImpl::SelectFromMapL(
+            const TDesC& aSearchQuery,
+            const CCalGeoValue* aGeoValue )
+    {
+    FUNC_LOG;
+
+    CPosLandmark* location = NULL;
+
+    if ( aGeoValue )
         {
-        // No location url provided, let's search from maps
-        // with search string. It was agreed that search is done by
-        // passing a landmark with search string as the name of the landmark
-        // forward
-         if ( aSearchQuery.Length() > 0 )
-            {
-            location = CPosLandmark::NewLC();
-            location->SetLandmarkNameL( aSearchQuery );
+        location = CreateLandmarkL( *aGeoValue );
+        }
 
-            iLandMarks.AppendL( location );
-            CleanupStack::Pop( location );
-            
-            iMapView->ResetLandmarksToShow();
-            iMapView->AddLandmarksToShowL( iLandMarks );
-            }        
-        
-        // Enable current location focus on map
-        iMapView->
-            SetCurrentLocationOption( CMnMapView::ECurrentLocationEnabled );
-        }
-	
-	SetActive();
-	iMapView->SelectFromMapL( iStatus );
-	}
+    SelectFromMapL( aSearchQuery, location );
+    }
 
 // ---------------------------------------------------------------------------
 // CESMRLocationPluginImpl::SearchFromMapL
@@ -207,13 +205,13 @@
     {
     FUNC_LOG;
     iLandMarks.ResetAndDestroy();
-    
+
     CPosLandmark* location = CPosLandmark::NewLC();
     location->SetLandmarkNameL( aSearchQuery );
 
     iLandMarks.AppendL( location );
     CleanupStack::Pop( location );
-            
+
     iMapView->ResetLandmarksToShow();
     iMapView->AddLandmarksToShowL( iLandMarks );
     iMapView->ShowMapL();
@@ -224,23 +222,27 @@
 // From class MESMRLocationPlugin.
 // ---------------------------------------------------------------------------
 //
-void CESMRLocationPluginImpl::ShowOnMapL( const TDesC& aLocation, const TDesC& aLocationUrl )
-	{
+void CESMRLocationPluginImpl::ShowOnMapL( const TDesC& aLocationUrl )
+    {
     FUNC_LOG;
-	CreateMapViewL();
+
+    CPosLandmark* landmark =
+        UrlParserL().CreateLandmarkFromUrlL( aLocationUrl );
+    ShowLandmarkL( landmark );
+    }
 
-	iMapView->ResetLandmarksToShow();
-    RCPointerArray<CPosLandmark> landmarks;
-    CleanupClosePushL( landmarks );
-    CPosLandmark* landmark = iUrlParser->CreateLandmarkFromUrlL( aLocationUrl );
-    landmark->SetLandmarkNameL(aLocation);    
-    CleanupStack::PushL( landmark ); 
-    landmarks.AppendL( landmark );
-    CleanupStack::Pop( landmark );
-    iMapView->AddLandmarksToShowL( landmarks );
-    CleanupStack::PopAndDestroy( &landmarks );
-    iMapView->ShowMapL();
-	}
+// ---------------------------------------------------------------------------
+// CESMRLocationPluginImpl::ShowOnMapL
+// From class MESMRLocationPlugin.
+// ---------------------------------------------------------------------------
+//
+void CESMRLocationPluginImpl::ShowOnMapL( const CCalGeoValue& aGeoValue )
+    {
+    FUNC_LOG;
+
+    CPosLandmark* landmark = CreateLandmarkL( aGeoValue );
+    ShowLandmarkL( landmark );
+    }
 
 // ---------------------------------------------------------------------------
 // CESMRLocationPluginImpl::DoCancel
@@ -252,9 +254,9 @@
     {
     FUNC_LOG;
     if( iMapView )
-    	{
-    	iMapView->Cancel();
-    	}
+        {
+        iMapView->Cancel();
+        }
     }
 
 // ---------------------------------------------------------------------------
@@ -268,7 +270,7 @@
     FUNC_LOG;
     HandleSelectFromMapCompletedL();
     }
-    
+
 // ---------------------------------------------------------------------------
 // CESMRLocationPluginImpl::HandleSelectFromMapCompletedL
 // ---------------------------------------------------------------------------
@@ -280,7 +282,7 @@
         {
         CMnMapView::TSelectionResultType type;
         type = iMapView->SelectionResultType();
-        
+
         if ( iObserver )
             {
             switch ( type )
@@ -288,9 +290,9 @@
                 case CMnMapView::ESelectionFreeLandmark:
                     {
                     // Read selection from map view, send result to observer
-                    CPosLandmark* landmark = 
+                    CPosLandmark* landmark =
                                 iMapView->RetrieveSelectionResultL();
-                    iObserver->SelectFromMapCompleted( iStatus.Int(), 
+                    iObserver->SelectFromMapCompleted( iStatus.Int(),
                                                        landmark );
                     break;
                     }
@@ -298,11 +300,11 @@
                     {
                     TInt landmarkIndex = 0;
                     iMapView->RetrieveSelectionResultL( landmarkIndex );
-            
+
                     if ( landmarkIndex < iLandMarks.Count() )
                         {
-                        iObserver->SelectFromMapCompleted( 
-                            iStatus.Int(), 
+                        iObserver->SelectFromMapCompleted(
+                            iStatus.Int(),
                             iLandMarks[landmarkIndex] );
                         iLandMarks.Remove( landmarkIndex );
                         }
@@ -326,9 +328,9 @@
         iObserver->SelectFromMapCompleted( iStatus.Int(), NULL );
         }
 
-    // Close Map view 
+    // Close Map view
     delete iMapView;
-    iMapView = NULL;        
+    iMapView = NULL;
     }
 
 // ---------------------------------------------------------------------------
@@ -337,20 +339,20 @@
 // ---------------------------------------------------------------------------
 //
 TInt CESMRLocationPluginImpl::RunError( TInt aError )
-	{
+    {
     FUNC_LOG;
-	// Notify error to observer
-	if(iObserver)
-	    {
-	    iObserver->SelectFromMapCompleted( aError, NULL );
-	    }
-	
-	// Close Map view
-	delete iMapView;
-	iMapView = NULL;
-	
-	return KErrNone;
-	}
+    // Notify error to observer
+    if(iObserver)
+        {
+        iObserver->SelectFromMapCompleted( aError, NULL );
+        }
+
+    // Close Map view
+    delete iMapView;
+    iMapView = NULL;
+
+    return KErrNone;
+    }
 
 // ---------------------------------------------------------------------------
 // CESMRLocationPluginImpl::HandleServerAppExit
@@ -361,14 +363,111 @@
     {
     FUNC_LOG;
     Cancel();
-    
+
     if ( iObserver )
         {
         // Notify observer that application has been closed without selection.
         iObserver->SelectFromMapCompleted( aReason, NULL );
         }
-    
+
     delete iMapView;
     iMapView = NULL;
     }
 
+// ---------------------------------------------------------------------------
+// CESMRLocationPluginImpl::ShowLandmarkL
+// ---------------------------------------------------------------------------
+//
+void CESMRLocationPluginImpl::SelectFromMapL(
+        const TDesC& aSearchQuery,
+        CPosLandmark* aLandmark )
+    {
+    iLandMarks.ResetAndDestroy();
+
+    if ( IsActive() )
+        {
+        User::Leave( KErrInUse );
+        }
+
+    CreateMapViewL();
+
+    iMapView->ResetMapArea();
+
+    CPosLandmark* location = aLandmark;
+
+    if ( location ) // Landmark created. Set search string as landmark name
+        {
+        if ( aSearchQuery.Length() > 0 )
+            {
+            CleanupStack::PushL( location );
+
+            location->SetLandmarkNameL( aSearchQuery );
+
+            iLandMarks.AppendL( location );
+            CleanupStack::Pop( location );
+
+            iMapView->ResetLandmarksToShow();
+            iMapView->AddLandmarksToShowL( iLandMarks );
+            }
+        }
+    else
+        {
+        // No location url provided, let's search from maps
+        // with search string. It was agreed that search is done by
+        // passing a landmark with search string as the name of the landmark
+        // forward
+         if ( aSearchQuery.Length() > 0 )
+            {
+            location = CPosLandmark::NewLC();
+            location->SetLandmarkNameL( aSearchQuery );
+
+            iLandMarks.AppendL( location );
+            CleanupStack::Pop( location );
+
+            iMapView->ResetLandmarksToShow();
+            iMapView->AddLandmarksToShowL( iLandMarks );
+            }
+
+        // Enable current location focus on map
+        iMapView->
+            SetCurrentLocationOption( CMnMapView::ECurrentLocationEnabled );
+        }
+
+    SetActive();
+    iMapView->SelectFromMapL( iStatus );
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRLocationPluginImpl::ShowLandmarkL
+// ---------------------------------------------------------------------------
+//
+void CESMRLocationPluginImpl::ShowLandmarkL( CPosLandmark* aLandmark )
+    {
+    CreateMapViewL();
+
+    iMapView->ResetLandmarksToShow();
+    RCPointerArray<CPosLandmark> landmarks;
+    CleanupClosePushL( landmarks );
+    CleanupStack::PushL( aLandmark );
+    landmarks.AppendL( aLandmark );
+    CleanupStack::Pop( aLandmark );
+    iMapView->AddLandmarksToShowL( landmarks );
+    CleanupStack::PopAndDestroy( &landmarks );
+    iMapView->ShowMapL();
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRLocationPluginImpl::UrlParserL
+// ---------------------------------------------------------------------------
+//
+CESMRUrlParserPlugin& CESMRLocationPluginImpl::UrlParserL()
+    {
+    if ( !iUrlParser )
+        {
+        iUrlParser = CESMRUrlParserPlugin::NewL();
+        }
+
+    return *iUrlParser;
+    }
+
+// EOF