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

/*
* 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:    Landmarks category selector dialog
*
*/









// INCLUDE FILES
#include "TLmkItemIdDbCombiInfo.h"
#include "CLmkCategorySelectorDlg.h"
#include "CLmkDlgCategorySelectorImpl.h"
#include <lmkui.rsg>
#include <landmarks.rsg>
#include <lmkerrors.h>


// CONSTANTS
/// Unnamed namespace for local definitions
namespace {

//const TInt KSingleSelectedGranularity = 1;
_LIT( KPanicMsg, "CLmkCategorySelectorDlg" );

void Panic( TPanicCode aReason )
    {
    User::Panic( KPanicMsg, aReason );
    }
}  // namespace

// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// CLmkCategorySelectorDlg::CLmkCategorySelectorDlg
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CLmkCategorySelectorDlg::CLmkCategorySelectorDlg()
    : iIsMultiSelector( ETrue )
    {
    }

// -----------------------------------------------------------------------------
// CLmkCategorySelectorDlg::ConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CLmkCategorySelectorDlg::ConstructL(
    TBool aShowEmptyCategories )
    {
    iDbs.Append( CPosLandmarkDatabase::OpenL());
    iSelector = CLmkDlgCategorySelectorImpl::NewL( *(iDbs[0]), aShowEmptyCategories );
    iSelector->SetEmptyDlgLabel(R_LMK_EMPTY_NO_CATEGORIES ,R_LMK_GUIDE_CREATE_LANDMARK);
    }

// -----------------------------------------------------------------------------
// CLmkCategorySelectorDlg::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
 EXPORT_C CLmkCategorySelectorDlg* CLmkCategorySelectorDlg::NewL(
 								 TBool aShowEmptyCategories )
    {
    CLmkCategorySelectorDlg* self = new ( ELeave ) CLmkCategorySelectorDlg();
    CleanupStack::PushL( self );
    self->ConstructL(aShowEmptyCategories );
    CleanupStack::Pop();
    return self;
    }

// -----------------------------------------------------------------------------
// CLmkCategorySelectorDlg::~CLmkCategorySelectorDlg
// -----------------------------------------------------------------------------
//
EXPORT_C CLmkCategorySelectorDlg::~CLmkCategorySelectorDlg()
    {
    if ( iDestroyedPtr )
        {
        *iDestroyedPtr = ETrue;
        }
        delete iSelector;
    if (iDbs.Count() > 0 )
        {
        delete iDbs[0];
        iDbs.Close();
        }
    }

// -----------------------------------------------------------------------------
// CLmkCategorySelectorDlg::SetMopParent
// -----------------------------------------------------------------------------
//
EXPORT_C void CLmkCategorySelectorDlg::SetMopParent( MObjectProvider* aParent )
    {
    __ASSERT_DEBUG( iSelector, Panic( KLmkPanicNullMember ) );
    iSelector->SetMopParent( aParent );
    }

// -----------------------------------------------------------------------------
// CLmkCategorySelectorDlg::ExecuteLD
// -----------------------------------------------------------------------------
//
// For multiple database support
EXPORT_C TInt CLmkCategorySelectorDlg::ExecuteLD( TLmkItemIdDbCombiInfo& aSelected )
    {
    __ASSERT_ALWAYS( iSelector, Panic( KLmkPanicNullMember ) );

    // "D" function semantics
    CleanupStack::PushL( this );
    TBool thisDestroyed( EFalse );
    iDestroyedPtr = &thisDestroyed;

    TPosLmItemId selectedId;

    TInt result = iSelector->ExecuteL( selectedId );

   	//If user has selected Ok then only return the selected items
    if(result)
		{
		aSelected.SetItemId(selectedId);
		aSelected.SetLmDb(CPosLandmarkDatabase::OpenL());
		}	//end if(result)

    if ( thisDestroyed )
        {
        // this object has been deleted already
        CleanupStack::Pop( this );
        }
    else
        {
        CleanupStack::PopAndDestroy( this );
        }

    return result;
    }

// -----------------------------------------------------------------------------
// CLmkCategorySelectorDlg::ExecuteLD
// -----------------------------------------------------------------------------
//
// For multiple database support
  EXPORT_C TInt CLmkCategorySelectorDlg::ExecuteLD(
    RArray<TLmkItemIdDbCombiInfo>& aSelectedItems )
    {
	__ASSERT_ALWAYS( iSelector, Panic( KLmkPanicNullMember ) );

	// "D" function semantics
	CleanupStack::PushL( this );
	TBool thisDestroyed( EFalse );
	iDestroyedPtr = &thisDestroyed;
	RArray<TPosLmItemId> selectedItems;
	selectedItems.Reset();
	for(TInt i = 0; i < aSelectedItems.Count(); i++)
        {
        TLmkItemIdDbCombiInfo getItem = aSelectedItems[i];
        selectedItems.Append(getItem.GetItemId());
        }
	TInt result = iSelector->ExecuteL( selectedItems );
    aSelectedItems.Reset();
	//If user has clicked on Ok then only return the selection
	TInt itemCount = selectedItems.Count();
	if(itemCount > 0)
		{

		CPosLandmarkDatabase* pDb = CPosLandmarkDatabase::OpenL();

		for (TInt i = 0; i < itemCount; i++)
			{
			TLmkItemIdDbCombiInfo selItem;
			selItem.SetItemId(selectedItems[i]);
			selItem.SetLmDb(pDb);
			aSelectedItems.Append(selItem);
			}

	}	//end if(result)

	selectedItems.Close();
	if ( thisDestroyed )
		{
		// this object has been deleted already
		CleanupStack::Pop( this );
		}
	else
		{
		CleanupStack::PopAndDestroy( this );
		}

	return result;
 }
//  End of File