browserui/browser/FavouritesInc/BrowserBookmarksView.h
branchRCL_3
changeset 48 8e6fa1719340
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesInc/BrowserBookmarksView.h	Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,576 @@
+/*
+* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+*      Declaration of class CBrowserBookmarksView.
+*      
+*
+*/
+
+
+#ifndef BROWSER_BOOKMARKS_VIEW_H
+#define BROWSER_BOOKMARKS_VIEW_H
+
+// INCLUDE FILES
+#include "BrowserFavouritesView.h"
+#include "BrowserBookmarksGotoPane.h"
+#include "Preferences.h"
+#include <apchangeobserver.h>
+#include <brctlinterface.h>
+#include <AknToolbarObserver.h>
+
+
+// CONSTANTS
+
+//FORWARD DECLARATION
+
+class CBrowserBookmarksContainer;
+class CRecentUrlStore;
+class CAsyncDownloadsListExecuter;
+
+// CLASS DECLARATION
+
+/**
+* Bookmarks View of the WML browser. Derived from CBrowserFavouritesView;
+* new methods mostly process Bookmark View specific commands.
+*/
+class CBrowserBookmarksView:
+                            public CBrowserFavouritesView, 
+                            public MBookmarksGotoPaneObserver,
+                            public MApChangeObserver,
+                            public MPreferencesObserver,
+                            public MBrCtlLoadEventObserver,
+                            public MAknToolbarObserver
+	{
+	public:     // construction
+
+        /**
+        * Two-phased constructor. Leaves on failure.
+        * @param aApiProvider The API provider.
+        * @return The constructed view.
+        */
+        static CBrowserBookmarksView* NewLC( MApiProvider& aApiProvider,  CRecentUrlStore& aRecentUrlStore, TInt aInitialFolderUid = KFavouritesRootUid);
+
+        /**
+        * Destructor.
+        */
+        virtual ~CBrowserBookmarksView();
+
+    public:     // new methods
+
+        /**
+        * Force updating the Goto Pane. Does nothing if Goto Pane is not
+        * visible.
+		* @since 1.2
+        */
+        void UpdateGotoPaneL();
+        
+        /**
+        * Exits Adaptive Bookmarks folder. Called also from BrowserAppUi when a page is
+        * downloaded from Adaptive Bookmarks.
+		* @since 2.1
+        */
+        void ExitAdaptiveBookmarks();
+
+        /**
+        * Opens Adaptive Bookmarks folder.
+		* @since 3.1
+        */
+        inline void OpenAdaptiveBookmarksWhenActivated( )
+        	{ iOpenAdaptiveBookmarksWhenActivated = ETrue; }
+
+        /**
+        * Gets the status of selection of the adaptive bookmarks folder.
+		* @since 3.1
+        */
+        inline TBool GetAdaptiveBookmarksFolderSelected( )
+        	{ return iAdaptiveBookmarksFolderSelected; }
+
+        inline TBool GetAdaptiveBookmarksFolderWasActive( )
+        	{ return iAdaptiveBookmarksFolderWasActive; }
+        	
+        void DimToolbarButtons(TBool aDimButtons);
+
+	public:     // public methods from CBrowserFavouritesView
+
+        /**
+        * Handle command.
+		* @since 1.2
+        * @param aCommand Command id.
+        */
+		void HandleCommandL( TInt aCommand );
+
+        /**
+        * Get view id.
+		* @since 1.2
+        * @return The view id for this view.
+        */
+		TUid Id() const;
+
+	public:     // From MCbaSetter (CBrowserViewBase)
+        
+        /**
+        * Return command set id, to be displayed.
+		* @since 1.2
+        * @return The command set's resource id.
+        */
+        virtual TInt CommandSetResourceIdL();
+        
+		/**
+		* Set command set lsk,rsk,msk dynamically via pointers.
+		* Derived classes should implement, though it can be empty.
+		* If it does nothing, empty softkeys will be assigned
+		* @since 5.0
+		*/
+		void CommandSetResourceDynL(TSKPair& /*lsk*/, TSKPair& /*rsk*/, TSKPair& /*msk*/);
+
+		/**
+		* Helper function to dynamically set LSK
+		* @since 5.0
+		*/
+		void SetLSKDynL(TSKPair& aLsk,
+			CBrowserBookmarksGotoPane* aTheGotoPane);
+
+		/**
+		* Helper function to dynamically set RSK
+		* @since 5.0
+		*/
+		void SetRSKDynL(TSKPair& aRsk,
+			CBrowserBookmarksGotoPane* aTheGotoPane);
+
+		/**
+		* Helper function to dynamically set MSK
+		* @since 5.0
+		*/
+		void SetMSKDynL(TSKPair& aMsk, const TSKPair aLsk,
+			CBrowserFavouritesContainer* aTheContainer,
+			CBrowserBookmarksGotoPane* aTheGotoPane);
+        
+
+    public:     // from MBookmarksGotoPaneObserver
+
+        /**
+        * Handle Goto Pane event.
+		* @since 1.2
+        * @param aGotoPane The Goto Pane in which the event occurred.
+        * @param aEvent Goto Pane event.
+        */
+        virtual void HandleBookmarksGotoPaneEventL
+            (
+            CBrowserBookmarksGotoPane* aGotoPane,
+            MBookmarksGotoPaneObserver::TEvent aEvent
+            );
+
+    public: // MAknToolbarObserver
+        /**
+        * Called when toolbar events occur
+        *
+        * @since 5.0
+        * @return void
+        */
+        void OfferToolbarEventL( TInt aCommand ) { HandleCommandL(aCommand); }
+
+	protected:  // construction
+
+        /**
+        * Constructor.
+        * @param aApiProvider The API provider.
+        */
+        CBrowserBookmarksView( MApiProvider& aApiProvider, CRecentUrlStore& aRecentUrlStore, TInt aInitialFolderUid = KFavouritesRootUid );
+
+        /**
+        * Second phase constructor. Leaves on failure.
+        * @param aViewResourceId Resource id for this view.
+        * Derived classes should call this first during construction.
+        */
+		void ConstructL( TInt aViewResourceId );
+
+	protected:	// protected CBrowserFavouritesView
+
+        /**
+        * Handle listbox event.
+		* @since 1.2
+        * @param aListBox Listbox in which the event occurred.
+        * @param aEventType Event.
+        */
+        void HandleListBoxEventL(
+            CEikListBox* aListBox,
+            MEikListBoxObserver::TListBoxEvent aEventType );
+
+        /**
+        * Initialize context-sensitive menu.
+		* @since 1.2
+        * @param aResourceId Resource id of the menu pane.
+        * @param aMenuPane Menu pane object being initialized.
+        * @param aIndex Index into the visibility map.
+        * @param aState Selection state.
+        */
+        virtual void DynInitMenuPaneL
+                (
+                TInt aResourceId,
+                CEikMenuPane* aMenuPane,
+                TCommandVisibility::TIndex /*aIndex*/,
+                const TBrowserFavouritesSelectionState& aState
+                );
+
+        /**
+        * Get resource id of text to be displayed in navi pane when
+        * root folder is shown (TBUF).
+		* @since 1.2
+        * @return Resource id.
+        */
+        TInt RootTitleResourceId() const;
+
+        /**
+        * Get resource id of Options menu (RESOURCE MENU_BAR).
+		* @since 1.2
+        * @return Resource id.
+        */
+        TInt OptionsMenuResourceId() const;
+
+        /**
+        * Get resource id of OK-Options menu (RESOURCE MENU_BAR).
+		* @since 1.2
+        * @return Resource id.
+        */
+        TInt OkOptionsMenuResourceId() const;
+
+        /**
+        * Create the model. Leave on failure. The model is owned by the
+        * caller (this view, base class). The created model is really
+        * a CBrowserBokmarksModel.
+		* @since 1.2
+        * @return The constructed model.
+        */
+        virtual CBrowserFavouritesModel* CreateModelL();
+
+        /**
+        * Create the container (the main control of the view). The container
+        * is owned by the caller (this view, base class). The created container
+        * is really a CBrowserBookmarksContainer.
+        * Leave on failure.
+		* @since 1.2
+        * @return The constructed main control.
+        */
+        virtual CBrowserFavouritesContainer* CreateContainerL();
+
+        /**
+        * Get items to be displayed in a folder. Expects the model's db be
+        * open.
+		* @since 1.2
+        * @param aFolder Folder which contains the items.
+        * @return List of items. Pushed on the cleanup stack.
+        */
+        virtual CFavouritesItemList* GetItemsLC( TInt aFolder );
+
+        /**
+        * Some displayed data has changed (Favourites database, AP-s, etc).
+        * Update the view so changes become visible. Safe to call if the view
+        * is not active; in this case it does nothing.
+        * This method should not be called if the data change is due to direct
+        * user activity (opening folders etc.); only for notification
+        * processing.
+        * (Same as base class method, except active Goto Pane is not reset if
+        * downloading is in progress.)
+		* @since 1.2
+        * @param aDbErrorNote If ETrue, unsuccesful database access will bring
+        * up an error note.
+        */
+        virtual void RefreshL( TBool aDbErrorNote = EFalse );
+        
+        void HandleForegroundEventL( TBool aForeground );
+
+	protected:	// protected methods from CAknView
+
+        /**
+        * Activate the view.
+		* @since 1.2
+        * @param aCustomMessageId Custom Message Id.
+        * @param aCustomMessage Custom Message.
+        */
+        virtual void DoActivateL
+            (
+            const TVwsViewId& aPrevViewId,
+            TUid aCustomMessageId,
+            const TDesC8& aCustomMessage
+            );
+
+        /**
+        * Deactivate the view.
+		* @since 1.2
+        */
+        virtual void DoDeactivate();
+
+    private:    // command handling (additional commands)
+
+        /**
+        * Available only to process EWmlCmdDelete and EWmlCmdDeleteItems commands.Command "Go to" when the user is editing in the Goto Pane.
+        */
+        void DeleteItems( TInt aCommand );
+
+        /**
+        * Command "Go to" when the user is editing in the Goto Pane.
+        * Go to the URL found in Goto Pane.
+        * Does nothing if no Goto Pane.
+        */
+        void GotoUrlInGotoPaneL();
+
+        /**
+        * Command "Activate". Activate highlighted bookmark.
+        * Does nothing if no bookmark is highlighted.
+        */
+        void ActivateCurrentBookmarkL();
+
+        /**
+        * Command "Add bookmark". Create new bookmark and launch
+        * Edit bookmark dialog.
+        */
+        void AddNewBookmarkL();
+
+        /**
+        * Command "Edit bookmark". Edit highlighted bookmark.
+        * Does nothing if no bookmark is highlighted.
+        */
+        void EditCurrentBookmarkL();
+
+
+        /**
+        * Command "Send via Unified Messaging".
+        * Send selected bookmark(s).
+        */
+        void SendBookmarksL( );
+
+
+    private:    // new methods
+
+        /**
+        * Get the container (as CBrowserBookmarksContainer).
+        * @return The container.
+        */
+        CBrowserBookmarksContainer* TheContainer();
+
+    private:    // from MApChangeObserver
+        /**
+        * Handle change in currently used Access Point.
+        */
+        void ApChangedL( TUint32 aNewAPId );
+
+    private:    // from MPreferencesObserver
+
+        /**
+        * Handle preferences change.
+        */
+        void HandlePreferencesChangeL( 
+                                    const TPreferencesEvent aEvent,            
+                                    TPreferencesValues& aValues,
+                                    TBrCtlDefs::TBrCtlSettings aSettingType );
+
+    private:
+
+        /**
+        * Create Start Page bookmark. Db needs not be open (not used).
+        * @return The Start Page bookmark, or NULL if no such.
+        * Ownership passed to caller.
+        */
+        CFavouritesItem* CreateStartPageBookmarkL();
+
+    private:    // from MBrCtlLoadEventObserver
+
+        /**
+        * A load events notification
+        * @since 2.8
+        * @param aLoadEvent The load event
+        * @param aSize Size depends on the event
+        * @param aTransactionId The transaction id of the transaction that had this event
+        * @return void
+        */
+        void HandleBrowserLoadEventL( TBrCtlDefs::TBrCtlLoadEvent aLoadEvent,
+                                      TUint aSize,
+                                      TUint16 aTransactionId );
+    private:
+
+        /**
+        * Clear all adaptive bookmarks
+        */
+        void ClearAdaptiveBookmarksL();
+
+    private:
+
+        /**
+        * To set empty text for folders. It is different in Adaptive Bookmarks
+        */
+		void SetEmptyTextL();
+
+	    // from CBrowserFavouritesView
+        TKeyResponse OfferKeyEventL
+            ( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+//from CBrowserFavouritesView
+        /**
+        * Open next folder.
+        * @param aForward Open next folder if ETrue, previous if EFalse.
+        */
+		void OpenNextFolderL( TBool aForward );
+
+        /**
+        * Update and draw navi pane (show tabs for root, or "1/4" style text
+        * for subfolders).
+        * No sanity check; expects the model's table be open.
+        */
+        void UpdateNaviPaneL();
+
+        /**
+        * Sorts bookmark items into the saved manual order
+        * associated to the given folder
+        * @param aFolder The folder in which the items are stored
+        * @param aItems The bookmark item list to sort
+        */
+        TBool ManualBMSortL( TInt aFolder, CFavouritesItemList* aItems );
+
+        /**
+        * Starts 'item moving mode', when softkeys are ok/cancel
+        * and ok moves the selected items to the current position in 
+        * bookmarks list
+        */
+        void StartMoveItemsL();
+
+        /**
+        * moves the selected items to the current position in 
+        * bookmarks list
+        */
+        void MoveItemsL();
+
+        /**
+        * Cancels 'item moving mode', softkeys return to normal,
+        * focus returns to the first selected item
+        */
+        void CancelMoveItemsL();
+
+        /*
+        * Adds the given uid to the last place in bookmarks list
+        * @param aUid The uid to add
+        */
+        void AddUidToLastPlaceToCurrentListL( TInt aUid );
+
+    public:
+        /**
+        * Dim or Un-dim Toolbar buttons.
+        */
+        void UpdateToolbarButtonsState();
+        
+        /**
+        * Check to show downloads.
+        */
+        void CheckForDownloads();
+
+        /**
+        * Initiates update for favicons
+        */
+        void UpdateFavIconsL();
+
+    private:    // data
+        /**
+         * Callback for completing the Browser App init. Normally only
+         * BookmarksView is initialized first on startup. When bookmarks
+         * view is shown then this callback is scheduled to complete the
+         * remaining initialization. 
+         */
+        static TInt CompleteAppInitCallback( TAny* aApiProvider );        
+        
+        /**
+        * Uid of AP which is to be used for creating Start Page bookmark.
+        */
+        TUint32 iStartPageApUid;
+
+        /**
+        * Storing current default AP, to be able to spot when it changes.
+        * (We get notification when preferences change; but don't know
+        * what changed in preferences. We are interested only in default AP
+        * change.)
+        */
+        TUint32 iCurrentDefaultAp;
+
+        /**
+        * This flag is used in fetch observing: this differentiates events from
+        * the newly started fetch from events of ongoing fetches (being
+        * cancelled by the new one). It is ETrue when new fetch has been
+        * initiated but not yet started (existing fetches will be cancelled
+        * during this time).
+        */
+        TBool iFetchInit;
+
+		HBufC* iDomainFolderName;
+		CRecentUrlStore& iRecentUrlStore;
+		TBool iInAdaptiveBookmarksFolder;
+
+		TWmlSettingsAdaptiveBookmarks iAdaptiveBookmarksCurrentSetting;
+
+
+		// For Adaptive Bookmarks - to refresh title when 
+		// coming back from Preferences
+		TBool iPreferencesChanged;
+
+        // For Manual BM Sorting
+        // Indicates item moving mode
+        TBool iManualItemMovingGoingOn;
+
+        // list of uids of items to move
+        CArrayFixFlat<TInt>* iItemsToMove;
+
+        // Current order of bookmarks
+        CBrowserBookmarksOrder* iCurrentOrder;
+
+        // Flag to indicate that Adaptive BM folder has just been inserted to BM list
+        TBool iInsertAdaptiveBookmarksFolder;
+
+        // Flag to indicate that current BM order needs to be saved
+        TBool iSaveBMOrder;
+
+        // Flag to indicate the presence of Start Page item
+        TBool iStartPagePresent;
+
+        // Goto Pane's entered URL and cursor's position
+        HBufC* iEnteredURL;
+        TInt iCursorPos;
+
+        TUint16 iTrId;
+        
+        CAsyncDownloadsListExecuter* iDownloadsListExecuter; // Owned.
+        
+        // True if the view will show the adaptive bookmarks folder
+        // on activation, otherwise false.
+        TBool iOpenAdaptiveBookmarksWhenActivated;
+        
+        // True if the user opned the Adaptive Bookmarks folder,
+        // from bookmarks items, otherwise false.
+        TBool iAdaptiveBookmarksFolderSelected;
+        
+        // True if the view was changed, and the adaptive bookmarks folder
+        // was currently acive.
+        TBool iAdaptiveBookmarksFolderWasActive;       
+        
+        // Pen enabled flag
+        TBool iPenEnabled;
+        
+        // Re-Entry Gate flag for Delete Bookmark routine
+        TBool iHandleDeleteInProgress;
+
+        // Async callback object for delayed App init
+        CIdle *iAsyncComplete;
+        
+        TBool iShowDownlods;
+	};
+
+#endif
+
+// End of file