locationlandmarksuirefapp/src/LmUiRefAppView.cpp
branchRCL_3
changeset 18 870918037e16
parent 0 522cd55cc3d7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/locationlandmarksuirefapp/src/LmUiRefAppView.cpp	Wed Sep 01 12:31:27 2010 +0100
@@ -0,0 +1,484 @@
+/*
+* Copyright (c) 2005 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:   LandmarksUi Content File -
+*
+*/
+
+
+
+
+
+
+// INCLUDE FILES
+#include <e32def.h>
+#include <avkon.hrh>
+#include <aknViewAppUi.h>
+#include <AknsUtils.h>
+#include <StringLoader.h>
+#include <aknnotewrappers.h>
+#include <eikmenup.h>
+#include <EPos_CPosLandmarkDatabase.h>
+#include <lmuirefapp.rsg>
+#include "lmuirefapp.hrh"
+#include "CLmkLandmarkSelectorDlg.h"
+#include "CLmkCategorySelectorDlg.h"
+#include "LmUiRefAppDocument.h"
+#include "LmUiRefAppContainer.h"
+#include "LmUiRefAppUi.h"
+#include "LmUiRefAppView.h"
+#include "CLmkEditorDlg.h"
+#include "TLmkItemIdDbCombiInfo.h"		//For multi db support, combiinfo struct
+
+#define LMK_PARAMS (CLmkEditorDlg::ELmkOnlyName | CLmkEditorDlg::ELmkCategory | CLmkEditorDlg::ELmkStreet | CLmkEditorDlg::ELmkCity | CLmkEditorDlg::ELmkLatitude| CLmkEditorDlg::ELmkLongitude)
+
+#define LMK_PARAMS_DEFAULT CLmkEditorDlg::ELmkAll
+
+// ================= MEMBER FUNCTIONS =======================
+//-------------------------------------------------------------------------
+// CLmUiRefAppView::NewLC
+// Two-phased constructor.
+//-------------------------------------------------------------------------
+//
+CLmUiRefAppView* CLmUiRefAppView::NewLC()
+    {
+    CLmUiRefAppView* self =
+        new( ELeave ) CLmUiRefAppView();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+//---------------------------------------------------------------------------
+// CLmUiRefAppView::CLmUiRefAppView
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//---------------------------------------------------------------------------
+//
+CLmUiRefAppView::CLmUiRefAppView()
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CLmUiRefAppView::ConstructL
+// Symbian 2nd phase constructor can leave.
+// --------------------------------------------------------------------------
+//
+void CLmUiRefAppView::ConstructL()
+    {
+    BaseConstructL(R_LMUIREFAPP_VIEW);
+    }
+
+// --------------------------------------------------------------------------
+// CLmUiRefAppView::~CLmUiRefAppView
+// ------------------------------------------------------------------------
+//
+CLmUiRefAppView::~CLmUiRefAppView()
+    {
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        }
+    delete iContainer;
+    }
+
+// --------------------------------------------------------------------------
+// TUid CLmUiRefAppView::Id
+// --------------------------------------------------------------------------
+//
+TUid CLmUiRefAppView::Id() const
+    {
+    return TUid::Uid(ELmUiRefAppView);
+    }
+
+// --------------------------------------------------------------------------
+// CLmUiRefAppView::HandleCommandL
+// --------------------------------------------------------------------------
+//
+void CLmUiRefAppView::HandleCommandL( TInt aCommand )
+    {
+    switch ( aCommand )
+        {
+        // these all are same: exit
+        case EAknSoftkeyExit:
+        case EAknSoftkeyBack:
+			{
+			AppUi()->HandleCommandL(EEikCmdExit);
+			break;
+			}
+  	    case ELmUiRefAppCmdDeleteLm:
+			{
+			if (IsLmDbEmptyL())
+			    {
+			    // Display some Error Note here
+			    iContainer->DrawNow();
+			    return;
+			    }
+			if (LaunchLandmarksDialogL() == 0)
+			    {
+			    // If Selector is cancelled, return to MAIN view
+			    iContainer->DrawNow();
+			    return;
+			    }
+			// Display Note
+			CEikonEnv* env = CEikonEnv::Static();
+			HBufC* noteText = NULL;
+			noteText
+			   = StringLoader::LoadLC( R_LMUIREFAPP_DELETE_LANDMARK, env );
+			CAknQueryDialog* query =
+			          new( ELeave ) CAknQueryDialog( *noteText );
+			TInt ret = query->ExecuteLD( R_LMUIREFAPP_QUERY);
+			if (!(ret))
+			    {
+			    CleanupStack::PopAndDestroy(noteText); //noteText
+			    iContainer->DrawNow();
+			    return;
+			    }
+			TPosLmItemId delLmItem = SelectedItem();
+			ilDb->RemoveLandmarkL(delLmItem);
+			delete ilDb;
+			CleanupStack::PopAndDestroy(noteText); //noteText
+			break;
+			}
+    	case ELmUiRefAppCmdNewLm :
+			{
+			//if to be used later on or commented because of an Error.
+			NewLmCmdL();
+			break;
+			}
+    	case ELmUiRefAppCmdViewLm:
+			{
+			/* Launch LM Selector only when Landmarks
+			* Database has any entries
+			*/
+			if (IsLmDbEmptyL())
+			    {
+			    // Display some Error Note here
+			    iContainer->DrawNow();
+			    return;
+			    }
+			if (LaunchLandmarksDialogL() == 0)
+			    {
+			    // If Selector is cancelled, return to MAIN view
+			    iContainer->DrawNow();
+			    return;
+			    }
+
+			CLmkEditorDlg::TLmkEditorParams editParams;
+			editParams.iAttributes = CLmkEditorDlg::ELmkAll;
+			editParams.iEditorMode = CLmkEditorDlg::ELmkViewer;
+			TPosLmItemId lmItem = SelectedItem();
+			CLmkEditorDlg *dlg = CLmkEditorDlg::NewL(*ilDb,
+			                                            lmItem,
+			                                            editParams);
+			dlg->ExecuteLD();
+			iContainer->DrawNow();
+			delete ilDb;
+			break;
+			}
+
+    	case ELmUiRefAppCmdEditLm:
+			{
+			if (IsLmDbEmptyL())
+			    {
+			    // Display some Error Note here
+			    iContainer->DrawNow();
+			    return;
+				}
+			if (LaunchLandmarksDialogL() == 0)
+				{
+				// If Selector is cancelled, return to MAIN view
+				iContainer->DrawNow();
+			    return;
+				}
+			CPosLandmark* landmarkedi = NULL;
+			ExecuteLmEditorL(landmarkedi, *ilDb);
+			// Refresh
+			iContainer->DrawNow();
+			delete ilDb;
+			break;
+            }
+		case ELmUiRefAppCmdMultiLmSelector:
+            {
+            if ( IsLmDbEmptyL() )
+            	{
+            	// Display some Error Note here
+            	iContainer->DrawNow();
+            	return;
+            	}
+
+            if ( LaunchMultiLandmarkSelectorDialogL() == 0 )
+            	{
+            	// If Selector is cancelled, return to MAIN view
+            	iContainer->DrawNow();
+            	return;
+            	}
+            break;
+            }
+		case ELmUiRefAppCmdMultiCatSelector:
+    		{
+    		if ( IsLmDbEmptyL() )
+    			{
+    			// Display some Error Note here
+    			iContainer->DrawNow();
+    			return;
+    			}
+
+    		if ( LaunchMultiCategorySelectorDialogL() == 0 )
+    			{
+    			// If Selector is cancelled, return to MAIN view
+    			iContainer->DrawNow();
+    			return;
+    			}
+    		break;
+    		}
+		case ELmUiRefAppCmdSingleCatSelector:
+    		{
+    		if ( IsLmDbEmptyL() )
+    			{
+    			// Display some Error Note here
+    			iContainer->DrawNow();
+    			return;
+    			}
+
+    		if ( LaunchSingleCategoeyDialogL() == 0 )
+    			{
+    			// If Selector is cancelled, return to MAIN view
+    			iContainer->DrawNow();
+    			return;
+    			}
+    		// Refresh view if needed
+			iContainer->DrawNow();
+			delete ilDb;
+    		break;
+    		}
+        default:
+    	   break;
+    	}
+    }
+
+// --------------------------------------------------------------------------
+// CLmUiRefAppView::NewLmCmdL()
+// --------------------------------------------------------------------------
+//
+void CLmUiRefAppView::NewLmCmdL()
+    {
+    CPosLandmark* landmark = CPosLandmark::NewL();
+    CleanupStack::PushL( landmark );
+	CLmUiRefAppUi* lmUiAppUi = static_cast<CLmUiRefAppUi*>( ViewAppUi() );
+	CPosLandmarkDatabase& iaDb = (lmUiAppUi->Document().LmDb());
+    ExecuteLmEditorL( landmark, iaDb );
+    CleanupStack::PopAndDestroy( landmark );
+    }
+
+// -----------------------------------------------------------------------------
+// CLmUiRefAppView::ExecuteLmEditorL()
+// -----------------------------------------------------------------------------
+void CLmUiRefAppView::ExecuteLmEditorL(
+    CPosLandmark* aLandmark, CPosLandmarkDatabase& aDb)
+    {
+	CLmkEditorDlg::TLmkEditorParams editParams;
+    editParams.iAttributes = LMK_PARAMS_DEFAULT;
+    editParams.iEditorMode = CLmkEditorDlg::ELmkEditor;
+	TPosLmItemId lmItem = SelectedItem();
+	if (aLandmark)
+	    {
+	    CLmkEditorDlg *dlg = CLmkEditorDlg::NewL(aDb, *aLandmark, editParams);
+        dlg->ExecuteLD();
+        }
+	else
+        {
+		CLmkEditorDlg *dlg = CLmkEditorDlg::NewL(aDb, lmItem, editParams);
+		dlg->ExecuteLD();
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CLmUiRefAppView::DoActivateL
+// --------------------------------------------------------------------------
+//
+void CLmUiRefAppView::DoActivateL(
+    const TVwsViewId& /*aPrevViewId*/,
+    TUid /*aCustomMessageId*/,
+    const TDesC8& /*aCustomMessage*/ )
+    {
+    if ( !iContainer )
+        {
+        iContainer = CLmUiRefAppContainer::NewL(this, ClientRect() );
+    	AppUi()->AddToStackL( *this, iContainer );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CLmUiRefAppView::DoDeactivate
+// --------------------------------------------------------------------------
+//
+void CLmUiRefAppView::DoDeactivate()
+    {
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        }
+    delete iContainer;
+    iContainer = NULL;
+    }
+
+// --------------------------------------------------------------------------
+// CLmUiRefAppView::LaunchLandmarksDialogL()
+// --------------------------------------------------------------------------
+//
+TInt CLmUiRefAppView::LaunchLandmarksDialogL()
+    {
+    // Launch LMK Selector
+	iLmkSelectDlg = CLmkLandmarkSelectorDlg::NewL();
+	iLmkSelectDlg->SetMopParent(this);
+    TLmkItemIdDbCombiInfo selItem;
+	TInt retVal = iLmkSelectDlg->ExecuteLD( selItem );
+    if (retVal !=0)
+        {
+        iSelectedItem = selItem.GetItemId();
+        ilDb = selItem.GetLmDb();
+        }
+   return retVal;
+   }
+
+// --------------------------------------------------------------------------
+// CLmUiRefAppView::ViewAppUi()
+// --------------------------------------------------------------------------
+//
+CAknViewAppUi* CLmUiRefAppView::ViewAppUi()
+    {
+    return static_cast<CAknViewAppUi*>( iAvkonAppUi );
+    }
+
+// --------------------------------------------------------------------------
+// CLmUiRefAppView::SelectedItem()
+// --------------------------------------------------------------------------
+//
+TPosLmItemId CLmUiRefAppView::SelectedItem() const
+    {
+    return iSelectedItem;
+    }
+
+// --------------------------------------------------------------------------
+// CLmUiRefAppView::IsLmDbEmptyL()
+// --------------------------------------------------------------------------
+//
+TBool CLmUiRefAppView::IsLmDbEmptyL()
+    {
+	CPosLmItemIterator* itemIterator = NULL;CLmUiRefAppUi* lmUiAppUi = static_cast<CLmUiRefAppUi*>( ViewAppUi() );
+	CPosLandmarkDatabase& iaDb = lmUiAppUi->Document().LmDb();
+
+	itemIterator = iaDb.LandmarkIteratorL();
+
+	CleanupStack::PushL(itemIterator);
+	itemIterator->Reset();
+	TUint nrOfItems = itemIterator->NumOfItemsL();
+	CleanupStack::PopAndDestroy(itemIterator);
+	if (nrOfItems == 0)
+	    {
+	    return ETrue;
+	    }
+	return EFalse;
+    }
+
+// ---------------------------------------------------------
+// CLmkByLmView::DynInitMenuPaneL
+// ---------------------------------------------------------
+//
+void CLmUiRefAppView::DynInitMenuPaneL(
+    TInt aResourceId,
+    CEikMenuPane* aMenuPane )
+    {
+    switch ( aResourceId )
+        {
+        case R_LMUIREFAPP_MENU1:
+            {
+  		    if (IsLmDbEmptyL())
+		        {
+                // Show NEW LM Menu Item
+                aMenuPane->SetItemDimmed( ELmUiRefAppCmdEditLm, ETrue );
+                aMenuPane->SetItemDimmed( ELmUiRefAppCmdViewLm, ETrue );
+                aMenuPane->SetItemDimmed( ELmUiRefAppCmdDeleteLm, ETrue );
+                }
+		    break;
+            }
+        default:
+            {
+            break;
+            }
+        }
+    }
+// --------------------------------------------------------------------------
+// CLmUiRefAppView::LaunchMultiLandmarkSelectorDialogL()
+// --------------------------------------------------------------------------
+//
+TInt CLmUiRefAppView::LaunchMultiLandmarkSelectorDialogL()
+	{
+	// Launch LMK Selector
+	iLmkSelectDlg = CLmkLandmarkSelectorDlg::NewL();
+	iLmkSelectDlg->SetMopParent(this);
+	RArray<TLmkItemIdDbCombiInfo> selItemArray;
+	TInt retVal = iLmkSelectDlg->ExecuteLD( selItemArray );
+	TInt count = selItemArray.Count();
+	if ( count > 0 )
+		{
+		CPosLandmarkDatabase* pDb =   selItemArray[0].GetLmDb();
+		delete( pDb );
+		}
+	selItemArray.Close();
+	return retVal;
+	}
+
+//--------------------------------------------------------------------------
+// CLmUiRefAppView::LaunchLandmarksDialogL()
+// --------------------------------------------------------------------------
+//
+TInt CLmUiRefAppView::LaunchMultiCategorySelectorDialogL()
+	{
+	// Launch multiple Category Selector
+	iCategorySelectDlg = CLmkCategorySelectorDlg::NewL();
+	iCategorySelectDlg->SetMopParent(this);
+	RArray<TLmkItemIdDbCombiInfo> selItemArray;
+	TInt retVal = iCategorySelectDlg->ExecuteLD( selItemArray );
+	TInt count = selItemArray.Count();
+	if ( count > 0 )
+		{
+		CPosLandmarkDatabase* pDb =   selItemArray[0].GetLmDb();
+		delete( pDb );
+		}
+	selItemArray.Close();
+	return retVal;
+	}
+
+// --------------------------------------------------------------------------
+// CLmUiRefAppView::LaunchSingleCategoeyDialogL()
+// --------------------------------------------------------------------------
+//
+TInt CLmUiRefAppView::LaunchSingleCategoeyDialogL()
+    {
+    // Launch single category selector
+	iCategorySelectDlg = CLmkCategorySelectorDlg::NewL();
+	iCategorySelectDlg->SetMopParent(this);
+    TLmkItemIdDbCombiInfo selItem;
+	TInt retVal = 	iCategorySelectDlg->ExecuteLD( selItem );
+    if (retVal !=0)
+        {
+        iSelectedItem = selItem.GetItemId();
+        ilDb = selItem.GetLmDb();
+        }
+   return retVal;
+   }
+
+
+// End of File