locationlandmarksuirefapp/src/LmUiRefAppView.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:31:27 +0100
branchRCL_3
changeset 18 870918037e16
parent 0 522cd55cc3d7
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* 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