landmarksui/uicontrols/inc/CLmkSelectorImplBase.h
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) 2004 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 -    Selector functionality common to both application (view-based) and
                 common ui components (dialog-based).
*
*/







#ifndef CLMKSELECTORIMPLBASE_H
#define CLMKSELECTORIMPLBASE_H

//  INCLUDES
#include "MLmkListProviderObserver.h"
#include <EPos_Landmarks.h> // Lm typedefs, constants etc.

// FORWARD DECLARATIONS
class CPosLandmarkDatabase;
class CLmkListProviderBase;
class CLmkSelectorIconMgr;
class CAknIconArray;
class CLmkUiUtils;
class MLmkListMemento;
class CEikListBox;
class CEikonEnv;

// CLASS DECLARATION

/**
*  Selector functionality common to both application (view-based) and
*  common ui components (dialog-based).
*
*/
class CLmkSelectorImplBase
: public CBase,
  public MLmkListProviderObserver
    {
    public:  // Constructors and destructor
        /**
        * Destructor.
        */
        ~CLmkSelectorImplBase();

    public: // New functions
        /**
        * Sets memento to be used by this class. Memento's
        * lifetime must be at least as long as this class's lifetime.
        * @param aMemento
        */
        IMPORT_C void SetMemento( MLmkListMemento& aMemento );

        /**
        * Creates a memento (but does not set it with SetMemento()).
        * @return created memento, ownership is transferred
        */
        virtual MLmkListMemento* MementoL() = 0;

        /**
        * Template method implemented by the subclass and called by
        * the base class.
        */
        virtual void SetupListProviderL() = 0;

        /**
        * Template method implemented by the subclass and called by
        * the base class. Needed since composite selector doesn't
        * have own list provider but it utilizes other providers.
        * @return CLmkListProviderBase reference
        */
        virtual const CLmkListProviderBase& ListProvider() const = 0;

        /**
        * Return number of visible items
        * @return TInt
        */
        virtual TInt ListVisibleItemCount() = 0;

        /**
        * Return number of marked items
        * @return TInt
        */
        virtual TInt ListMarkedItemCountL() = 0;

    protected: // New functions
        /**
        * Helper method which creates icon array and icon manager, sets
        * default icons and gives icon manager reference to list provider.
        * @return created icon array, left in the cleanup stack
        */
        CAknIconArray* SetupIconMgrLC();

        /**
        * Helper method for storing listbox state.
        * @param aListbox
        * @param aProvider
        * @param aFiltered
        */
        void Store( const CEikListBox& aListBox,
                    const CLmkListProviderBase& aProvider,
                    TBool aFiltered );

        /**
        * Helper method for restoring listbox state
        * @param aListbox
        * @param aProvider
        * @param aFiltered
        */
        void Restore( const CEikListBox& aListBox,
                      const CLmkListProviderBase& aProvider,
                      TBool aFiltered );

    protected: // From MLmkListProviderObserver
        void HandleListProviderEvent( TLmkListProviderEventType aEvent );

    protected: // Constructors and destructor
        /**
        * C++ default constructor.
        * @param aDb
        * @return newly instantiated object
        */
        CLmkSelectorImplBase( CPosLandmarkDatabase& aDb );

        /**
        * By default Symbian 2nd phase constructor is private.
        */
        void BaseConstructL();

    protected: // Data

        ///Ref:
        CPosLandmarkDatabase& iDb;

        ///Ref:
        MLmkListMemento* iMemento;

        ///Own:
        CLmkListProviderBase* iListProvider;

        ///Own:
        CLmkSelectorIconMgr* iIconMgr;

        ///Own:
        CLmkUiUtils* iLmkUiUtils;

    private: // Internal classes

        // This struct-like class is used for postponing memento.
        // It does not own any heap data.
        class TLmkRestoreData
            {
            public: // Constructor:
                TLmkRestoreData();

            public: // Public data:
                TBool iRestoreRequested;
                const CEikListBox* iListBox;
                const CLmkListProviderBase* iProvider;
                TBool iFiltered;
            };

    private: // Data
        // These should not be used by subclasses, their content is
        // guaranteed to be correct only within this class.

        ///Latest provider event recorded by this class
        TLmkListProviderEventType iSelectorImplBaseLatestListEvent;

        ///Contains information for possible postponed memento operation
        TLmkRestoreData iRestoreData;

    protected:
        // Ref
        CEikonEnv*      iEnv;
    };

#endif      // CLMKSELECTORIMPLBASE_H

// End of File