diff -r 1fc85118c3ae -r 870918037e16 locationlandmarksuirefapp/src/LmUiRefAppView.cpp --- /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 +#include +#include +#include +#include +#include +#include +#include +#include +#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( 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( iAvkonAppUi ); + } + +// -------------------------------------------------------------------------- +// CLmUiRefAppView::SelectedItem() +// -------------------------------------------------------------------------- +// +TPosLmItemId CLmUiRefAppView::SelectedItem() const + { + return iSelectedItem; + } + +// -------------------------------------------------------------------------- +// CLmUiRefAppView::IsLmDbEmptyL() +// -------------------------------------------------------------------------- +// +TBool CLmUiRefAppView::IsLmDbEmptyL() + { + CPosLmItemIterator* itemIterator = NULL;CLmUiRefAppUi* lmUiAppUi = static_cast( 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 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 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