--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarksui/uicontrols/src/CLmkDlgLmSelectorImpl.cpp Wed Sep 01 12:31:27 2010 +0100
@@ -0,0 +1,305 @@
+/*
+* Copyright (c) 2002 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 "CLmkDlgLmSelectorImpl.h"
+#include "CLmkMultiSelectorDialog.h"
+#include "CLmkLmItemListProvider.h"
+#include "LmkListProviderFactory.h"
+#include <lmkui.rsg>
+#include "CLmkDbUtils.h"
+#include "CLmkUiUtils.h"
+
+#include <EPos_CPosLmSearchCriteria.h>
+#include <EPos_CPosLmCategoryCriteria.h>
+#include <EPos_CPosLmCategoryManager.h>
+#include <eiktxlbx.h>
+#include <lmkerrors.h>
+
+
+#if defined(_DEBUG)
+
+// CONSTANTS
+/// Unnamed namespace for local definitions
+namespace {
+
+_LIT( KPanicMsg, "CLmkDlgLmSelectorImpl" );
+
+void Panic( TPanicCode aReason )
+ {
+ User::Panic( KPanicMsg, aReason );
+ }
+} // namespace
+#endif
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CLmkDlgLmSelectorImpl::CLmkDlgLmSelectorImpl
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CLmkDlgLmSelectorImpl::CLmkDlgLmSelectorImpl(
+ CPosLandmarkDatabase& aDb )
+ : CLmkDlgSelectorImplBase( aDb )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CLmkDlgLmSelectorImpl::CLmkDlgLmSelectorImpl
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CLmkDlgLmSelectorImpl::CLmkDlgLmSelectorImpl(
+ CPosLandmarkDatabase& aDb,
+ CPosLmSearchCriteria* aCriteria )
+ : CLmkDlgSelectorImplBase( aDb ),
+ iCriteria( aCriteria )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CLmkDlgLmSelectorImpl::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CLmkDlgLmSelectorImpl::ConstructL()
+ {
+ BaseConstructL();
+ }
+
+// -----------------------------------------------------------------------------
+// CLmkDlgLmSelectorImpl::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CLmkDlgLmSelectorImpl* CLmkDlgLmSelectorImpl::NewL(
+ CPosLandmarkDatabase& aDb )
+ {
+ CLmkDlgLmSelectorImpl* self =
+ new( ELeave ) CLmkDlgLmSelectorImpl( aDb );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CLmkDlgLmSelectorImpl::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CLmkDlgLmSelectorImpl* CLmkDlgLmSelectorImpl::NewL(
+ CPosLandmarkDatabase& aDb,
+ CPosLmSearchCriteria* aCriteria )
+ {
+ CLmkDlgLmSelectorImpl* self =
+ new( ELeave ) CLmkDlgLmSelectorImpl( aDb, aCriteria );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+// ----------------------------------------------------
+// CLmkDlgLmSelectorImpl::~CLmkDlgLmSelectorImpl
+// ----------------------------------------------------
+//
+CLmkDlgLmSelectorImpl::~CLmkDlgLmSelectorImpl()
+ {
+ delete iCriteria;
+ }
+
+// ----------------------------------------------------
+// CLmkDlgLmSelectorImpl::SetupListProviderL
+// ----------------------------------------------------
+//
+void CLmkDlgLmSelectorImpl::SetupListProviderL()
+ {
+ if ( !iListProvider )
+ {
+ if ( iCriteria )
+ {
+ iListProvider =
+ LmkListProviderFactory::CreateProviderL( iDb, *iCriteria );
+ }
+ else
+ {
+ iListProvider =
+ LmkListProviderFactory::CreateProviderL( iDb,
+ ELandmarkSelector );
+ }
+ iListProvider->AddObserverL( *this );
+ iListProvider->InitializeL();
+ }
+ }
+
+// ----------------------------------------------------
+// CLmkDlgLmSelectorImpl::ListProvider
+// ----------------------------------------------------
+//
+const CLmkListProviderBase& CLmkDlgLmSelectorImpl::ListProvider() const
+ {
+ __ASSERT_DEBUG( iListProvider, Panic( KLmkPanicNullMember ) );
+ return *iListProvider;
+ }
+
+// ----------------------------------------------------
+// CLmkDlgLmSelectorImpl::GetDlgResources
+// ----------------------------------------------------
+//
+void CLmkDlgLmSelectorImpl::GetDlgResources(
+ TBool aIsSingleSelector,
+ TInt& aTitlePaneResource,
+ TInt& aMenuBarResource,
+ TInt& aDialogResource ) const
+ {
+ aTitlePaneResource = R_LMK_LANDMARK_SELECTOR_TITLE;
+ aMenuBarResource = R_LMK_EMPTY_MENUBAR;
+
+ if ( aIsSingleSelector )
+ {
+ if ( iCriteria )
+ { // this is a "sub-dialog" when search criteria exists
+ aDialogResource = R_LMK_SELECTOR_OK_BACK_DLG;
+ }
+ else
+ {
+ aDialogResource = R_LMK_SELECTOR_OK_CANCEL_DLG;
+ }
+ }
+ else
+ {
+ if ( iCriteria )
+ { // this is a "sub-dialog" when search criteria exists
+ aDialogResource = R_LMK_SELECTOR_OK_BACK_MULTI_DLG;
+ }
+ else
+ {
+ aDialogResource = R_LMK_SELECTOR_OK_CANCEL_MULTI_DLG;
+ }
+ }
+ }
+
+// ----------------------------------------------------
+// CLmkDlgLmSelectorImpl::HandleListProviderEvent
+// ----------------------------------------------------
+//
+void CLmkDlgLmSelectorImpl::HandleListProviderEvent(
+ TLmkListProviderEventType aEvent )
+ {
+ // Give event to the dialog as the first step since others
+ // may then interact with the updated dialog:
+ if (iCriteria)
+ {
+ if ( aEvent == ELmkEventCategoryDeleted )
+ {
+ TBool result = ETrue;
+ TRAP_IGNORE( result = CheckDbIfCriteriaCategoryExistsL() );
+ if ( !result )
+ {
+ // Delete the dialog
+ delete iDialog;
+ iDialog = NULL;
+ }
+ }
+ else if ( aEvent == ELmkEventCategoryUpdated )
+ {
+ TRAP_IGNORE( UpdateNaviLabelL() );
+ }
+ }
+ if ( iDialog )
+ {
+ iDialog->HandleListProviderEvent( aEvent );
+ }
+
+ // Base class implementation:
+ CLmkDlgSelectorImplBase::HandleListProviderEvent( aEvent );
+ }
+
+// ----------------------------------------------------
+// CLmkDlgLmSelectorImpl::HandleListProviderError
+// ----------------------------------------------------
+//
+void CLmkDlgLmSelectorImpl::HandleListProviderError( TInt aError )
+ {
+ // Base class implementation:
+ CLmkDlgSelectorImplBase::HandleListProviderError( aError );
+
+ if ( iDialog )
+ {
+ iDialog->HandleListProviderError( aError );
+ }
+ }
+
+// ----------------------------------------------------
+// CLmkDlgLmSelectorImpl::UpdateNaviLabelL
+// ----------------------------------------------------
+//
+void CLmkDlgLmSelectorImpl::UpdateNaviLabelL()
+ {
+ CPosLmCategoryCriteria* criteria =
+ reinterpret_cast<CPosLmCategoryCriteria*>( iCriteria );
+ TPosLmItemId categoryId( KPosLmNullItemId );
+ categoryId = criteria->CategoryItemId();
+ HBufC* catName = CLmkDbUtils::CategoryNameL( iDb, categoryId );
+ CleanupStack::PushL( catName );
+ iLmkUiUtils->StoreNaviPaneL();
+ iLmkUiUtils->CreateNaviLabelL(catName->Des());
+ CleanupStack::PopAndDestroy(); //catName
+ }
+
+// ----------------------------------------------------
+// CLmkDlgLmSelectorImpl::CheckDbIfCriteriaCategoryExistsL
+// ----------------------------------------------------
+//
+TBool CLmkDlgLmSelectorImpl::CheckDbIfCriteriaCategoryExistsL()
+ {
+ TBool result = ETrue;
+ CPosLmCategoryCriteria* criteria =
+ static_cast<CPosLmCategoryCriteria*>( iCriteria );
+ TPosLmItemId categoryId( KPosLmNullItemId );
+ categoryId = criteria->CategoryItemId();
+ if ( categoryId )
+ {
+ // Construction must fail if category has been deleted:
+ CPosLmCategoryManager* mgr = CPosLmCategoryManager::NewL( iDb );
+ CleanupStack::PushL( mgr );
+ // Leaves with KErrNotFound if category doesn't exist
+ TInt err = KErrNone;
+ TRAP(err,CPosLandmarkCategory* category = mgr->ReadCategoryLC( categoryId );CleanupStack::PopAndDestroy( category ));
+ if(err == KErrNotFound)
+ {
+ result = EFalse;
+ }
+ CleanupStack::PopAndDestroy( 1 );//mgr
+ }
+ return result;
+ }
+// End of File