landmarksui/uicontrols/inc/CLmkDlgCombiSelectorImpl.h
branchRCL_3
changeset 18 870918037e16
parent 0 522cd55cc3d7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarksui/uicontrols/inc/CLmkDlgCombiSelectorImpl.h	Wed Sep 01 12:31:27 2010 +0100
@@ -0,0 +1,241 @@
+/*
+* 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 -    Common UI's (dialog-based) landmark selector impl class.
+*
+*/
+
+
+
+
+
+
+
+#ifndef CLMKDLGCOMBISELECTORIMPL_H
+#define CLMKDLGCOMBISELECTORIMPL_H
+
+//  INCLUDES
+#include "CLmkDlgSelectorImplBase.h"
+#include "MLmkListProviderObserver.h"
+#include "MLmkListMemento.h"
+#include <eikcmobs.h>       // MEikCommandObserver
+#include <AknTabObserver.h>
+// FORWARD DECLARATIONS
+class CLmkSelectorDialog;
+class CAknNavigationControlContainer;
+class CAknTabGroup;
+class CAknNavigationDecorator;
+
+// CLASS DECLARATION
+
+/**
+*  Common UI's (dialog-based) landmark selector impl class.
+*  This selector contains both landmark by name & by category tabs
+*  and it utilizes landmark and category selectors to do that.
+*
+*/
+class CLmkDlgCombiSelectorImpl : public CLmkDlgSelectorImplBase, public MAknTabObserver
+    {
+    private:    // Type definitions
+
+        enum TLmkSelectorState
+            {
+            ELmkLandmarkSelector = 0,   // used as index in iSelectors
+            ELmkCategorySelector,       // used as index in iSelectors
+            ELmkFilteredLmSelector,     // used as index in iSelectors
+            ELmkInitialState,
+            ELmkFinalState,
+            };
+
+        enum TLmkSelectorStateEvent
+            {
+            ELmkSelectorStart = 0,
+            ELmkSelectorStop,
+            ELmkSelectorNavigating,
+            ELmkSelectorAbort,
+            ELmkSelectorNoEvent
+            };
+
+    public:  // Constructors and destructor
+        /**
+        * Two-phased constructor.
+        * @param aDb database reference
+        * @return newly instantiated object
+        */
+        IMPORT_C static CLmkDlgCombiSelectorImpl* NewL(
+                                    CPosLandmarkDatabase& aDb );
+
+        /**
+        * Destructor.
+        */
+        ~CLmkDlgCombiSelectorImpl();
+
+    public: // From CLmkSelectorImplBase
+        void StopExecutionL();
+        TInt ExecuteL( TPosLmItemId& aOpenedItem,
+                       TBool aAlwaysModifyOpened = EFalse );
+        TInt ExecuteL( RArray<TPosLmItemId>& aSelectedItems,
+                       TBool aAlwaysModifySelected = EFalse );
+
+        void SetupListProviderL();
+        const CLmkListProviderBase& ListProvider() const;
+        void GetDlgResources( TBool aIsSingleSelector,
+                              TInt& aTitlePaneResource,
+                              TInt& aMenuBarResource,
+                              TInt& aDialogResource ) const;
+        
+        void SetDialogTitleL(const TDesC& aTitle);
+
+    protected: // From CLmkDlgSelectorImplBase
+        void StoreMemento();
+        void RestoreMemento();
+
+    protected: // From MEikCommandObserver
+        void ProcessCommandL( TInt aCommandId );
+
+    protected: // From MLmkNavigationObserver
+        TKeyResponse HandleNavigationEventL( const TKeyEvent& aKeyEvent );
+        void HandleLaunchingEventL();
+        void HandleClosingEventL();
+
+	protected: // From MAknTabObserver
+		void TabChangedL( TInt aIndex );
+
+    protected:  // New functions
+        /**
+        * Handle any state event.
+        * @param aEvent
+        * @return TLmkSelectorStateEvent
+        */
+        TLmkSelectorStateEvent HandleAnyStateEventL(
+                                    TLmkSelectorStateEvent aEvent );
+
+        /**
+        * Handle initial state event.
+        * @param aEvent
+        * @return TLmkSelectorStateEvent
+        */
+        TLmkSelectorStateEvent HandleInitialStateEventL(
+                                    TLmkSelectorStateEvent aEvent );
+
+        /**
+        * Handle landmark selector state event.
+        * @param aEvent
+        * @return TLmkSelectorStateEvent
+        */
+        TLmkSelectorStateEvent HandleLandmarkSelectorStateEventL(
+                                    TLmkSelectorStateEvent aEvent );
+
+        /**
+        * Handle category selector state event.
+        * @param aEvent
+        * @return TLmkSelectorStateEvent
+        */
+        TLmkSelectorStateEvent HandleCategorySelectorStateEventL(
+                                    TLmkSelectorStateEvent aEvent );
+
+        /**
+        * Handle filtered selector state event.
+        * @param aEvent
+        * @return TLmkSelectorStateEvent
+        */
+        TLmkSelectorStateEvent HandleFilteredLmSelectorStateEventL(
+                                    TLmkSelectorStateEvent aEvent );
+
+        /**
+        * Handle default state state evelt.
+        * @param aEvent
+        * @return TLmkSelectorStateEvent
+        */
+        TLmkSelectorStateEvent HandleDefaultStateStateEventL(
+                                    TLmkSelectorStateEvent aEvent );
+
+        /**
+        * Helper method for getting selector corresponding to the
+        * current state. If it doesn't exist yet it is created.
+        * @param aCategoryId is only used when creating filtered lm
+        *        selector which requires a category id for criteria
+        */
+        CLmkDlgSelectorImplBase& CurrentStateSelectorL(
+                            TPosLmItemId aCategoryId = KPosLmNullItemId );
+
+    protected:  // Constructors and destructor
+        /**
+        * C++ default constructor.
+        * @param aDb
+        * @return newly instantiated object
+        */
+        CLmkDlgCombiSelectorImpl( CPosLandmarkDatabase& aDb );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+    private:
+
+		/**
+        * Add the individual tabs to tabgroup of NaviPane
+        * @param aaTabGroup
+        * @
+        */
+		void AddTabsL(CAknTabGroup& aTabGroup);
+
+		/**
+        * Fetch the name of the Bitmap file
+        *
+        * @return pointer to name of bitmap file containing tab icons
+        */
+		HBufC* GetBitmapFilenameLC();
+
+    private:    // Data
+        /// Current state of this class
+        TLmkSelectorState iSelectorState;
+
+        /// used when opening a category contents view
+        TInt iCategoryIndex;
+
+        /// dialog return value
+        TInt iDlgRetVal;
+
+        RPointerArray<CLmkDlgSelectorImplBase> iSelectors;
+
+        RPointerArray<MLmkListMemento> iMementos;
+
+        /// Is user currently navigating between tabs?
+        TBool iNavigating;
+
+        /// Is user interested in return values even if dialog was cancelled?
+        TBool iAlwaysModify;
+
+        ///Ref: used in multi selector mode
+        RArray<TPosLmItemId>* iSelectedItems;
+
+        ///Ref: used in single selector mode
+        TPosLmItemId* iOpenedItem;
+
+        ///Ref: navi pane reference
+        CAknNavigationControlContainer* iNaviPane;
+
+        ///Ref: tab group
+        CAknTabGroup* iTabGroup;
+
+        ///Own: navi decorator
+        CAknNavigationDecorator* iNaviDeco;
+        
+        /// Own: custom title for the landmark selection dialog
+        HBufC* iCustomLandmarksTitle;
+    };
+
+#endif      // CLMKDLGCOMBISELECTORIMPL_H
+
+// End of File