browserui/browser/FeedsInc/FeedsFolderContainer.h
branchRCL_3
changeset 65 8e6fa1719340
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsInc/FeedsFolderContainer.h	Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,674 @@
+/*
+* Copyright (c) 2005-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:  A container to browse a user's list of feeds.
+*
+*/
+
+
+#ifndef FEEDS_FOLDER_CONTAINER_H
+#define FEEDS_FOLDER_CONTAINER_H
+
+
+// INCLUDES
+#include <coecntrl.h>
+#include <coemop.h>
+#include <eiklbo.h>
+
+#include "FeedsEditFeedDialog.h"
+#include "FeedsEditFolderDialog.h"
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CAknDoubleGraphicStyleListBox;
+class CAknNavigationDecorator;
+class CAknIconArray;
+class CAknPopupList;
+class CAknSingleGraphicPopupMenuStyleListBox;
+class CFeedsFolderView;
+class CFeedsEntity;
+class CGulIcon;
+class TAknsItemID;
+class MApiProvider;
+
+// CLASS DECLARATION
+
+
+/**
+*  A container to browse a user's list of feeds.
+*  @lib FeedsEngine.lib
+*  @since 3.0
+*/
+class CFeedsFolderContainer : public CCoeControl, public MEikListBoxObserver,
+        public MFeedsEditFeedDialogObserver, public MFeedsEditFolderDialogObserver
+    {
+    private:
+        enum TIcons
+            {
+            EIconMark = 0,
+            EIconFolder,
+            EIconErrorFolder,
+            EIconFeed,
+            EIconFeedUnread,
+            EIconErrorFeed
+            };
+
+
+    public:
+        /**
+        * Two-phased constructor.
+        */
+        static CFeedsFolderContainer* NewL(
+        	CFeedsFolderView* aView,
+            MApiProvider& aApiProvider,
+            const TRect& aRect);
+
+        /**
+        * Destructor.
+        */        
+        virtual ~CFeedsFolderContainer();
+
+
+    public: // From CoeControl
+	    /**
+	    * Handles key event.
+	    *
+        * @param aKeyEvent The key event.
+        * @param aType The type of the event.
+        * @return Indicates whether the key event was used by this control or not
+        */
+        TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
+
+#ifdef __SERIES60_HELP
+        /**
+        * Get help context for the control.
+        *
+        * @since ?
+        * @param aContext The context that is filled in.
+        * @return None.
+        */
+        virtual void GetHelpContext(TCoeHelpContext& aContext) const;
+#endif // __SERIES60_HELP
+
+
+    protected: // From CoeControl
+        /**
+        * Called by framework when the view size is changed.
+        *
+        * @since ?
+        * @return void.
+        */
+        virtual void SizeChanged();
+
+        /**
+        * Called by the framework when a display resource changes (i.e. skin or layout).
+        *
+        * @since ?
+        * @return void.
+        */
+        virtual void HandleResourceChange(TInt aType);
+
+        /**
+        * Returns number of components.
+	    *
+        * @since ?
+        * @return Number of component controls.
+        */
+        virtual TInt CountComponentControls() const;
+
+        /**
+        * Returns pointer to particular component.
+	    *
+        * @since ?
+        * @param aIndex Index whose control's pointer has to returned.
+        * @return Pointer to component control
+        */
+        virtual CCoeControl* ComponentControl(TInt aIndex) const;
+
+
+    public: // MEikListBoxObserver
+        /**
+        * Processes key events from the listbox.
+        *
+        * @since ?
+        * @param aListBox Listbox being observed.
+        * @param aEventType Event observed.
+        * @return void
+        */
+        virtual void HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType);
+
+
+    public:  // From MFeedEditFeedDialogObserver
+        /**
+        * Called when a feed's name and/or url is changed -- this is called 
+        * after both IsValidFeedName and IsValidFeedUrl are called.
+        *
+        * @since 3.0
+        * @param aName The feed's new name.
+        * @param aUrl The feed's new url.
+        * @param aFreq The frequency for auto updating.
+        * @return void.
+        */
+        virtual void UpdateFeedL(const TDesC& aName, const TDesC& aUrl, TInt aFreq);
+
+        /**
+        * Called when a new feed is created -- this is called after both
+        * IsValidFeedName and IsValidFeedUrl are called.
+        *
+        * @since 3.0
+        * @param aName The feed's new name.
+        * @param aUrl The feed's new url.
+        * @param aFreq The frequency for auto updating.
+        * @return void.
+        */
+        virtual void NewFeedL(const TDesC& aName, const TDesC& aUrl,TInt aFreq);
+
+        /**
+        * Validates the Feed's updated name.
+        *
+        * @since 3.0
+        * @param aName The feed's new name.
+        * @param aIsEditing True if the edit dialog was opened to edit a feed.
+        * @return ETrue if the value is valid.
+        */
+        virtual TBool IsFeedNameValidL(const TDesC* aName, TBool aIsEditing);
+
+        /**
+        * Validates the Feed's updated url.
+        *
+        * @since 3.0
+        * @param aUrl The feed's new url.
+        * @return ETrue if the value is valid.
+        */
+        virtual TBool IsFeedUrlValidL(const TDesC* aUrl);
+
+
+    public:  // From MFeedEditFolderDialogObserver
+        /**
+        * Called when a folder's name is changed -- this is called 
+        * after IsValidFolderName is called.
+        *
+        * @since 3.0
+        * @param aName The feed's new name.
+        * @return void.
+        */
+        virtual void UpdateFolderL(const TDesC& aName);
+
+        /**
+        * Called when a new folder is created -- this is called 
+        * after IsValidFolderName is called.
+        *
+        * @since 3.0
+        * @param aName The feed's new name.
+        * @return void.
+        */
+        virtual void NewFolderL(const TDesC& aName);
+
+        /**
+        * Validates the folder's updated name.
+        *
+        * @since 3.0
+        * @param aName The feed's new name.
+        * @param aIsEditing True if the edit dialog was opened to edit a folder.        
+        * @return ETrue if the value is valid.
+        */
+        virtual TBool IsFolderNameValidL(const TDesC* aName, TBool aIsEditing);
+
+
+    public: // New methods
+        /**
+        * Called to notify the container that root folder has changed.
+        *
+        * @since 3.1
+        * @param aRootFolder The new root folder.
+        * @return Void.
+        */
+        void RootFolderChangedL(const CFeedsEntity& aRootFolder);
+    
+        /**
+        * Update the view's title.
+        *
+        * @since 3.0
+        * @return void.
+        */
+        void UpdateTitleL();
+
+        /**
+        * Returns the current folder-item.
+        *
+        * @since 3.0
+        * @return The current folder-item..
+        */
+        CFeedsEntity* CurrentItem() const;
+
+
+        /**
+        * Returns the index of the current folder-item.
+        *
+        * @since 3.0
+        * @return The index of the current folder-item..
+        */
+        TInt CurrentItemIndex() const;
+
+        /**
+        * Updates the current folder-item.
+        *
+        * @since 3.0
+        * @param aName The new name.
+        * @param aUrl The new url.
+        * @param aFreq The frequency for auto updating.
+        * @return void.
+        */
+        void UpdateCurrentItemL(const TDesC* aName, const TDesC* aUrl, TInt aFreq);
+
+        /**
+        * Add a new feed.
+        *
+        * @since 3.0
+        * @param aName The new name.
+        * @param aUrl The new url.
+        * @param aFreq The frequency for auto updating.
+        * @return void.
+        */
+        void AddNewFeedL(const TDesC& aName, const TDesC& aUrl, TInt aFreq);
+
+        /**
+        * Add a folder feed.
+        *
+        * @since 3.0
+        * @param aName The new name.
+        * @return void.
+        */
+        void AddNewFolderL(const TDesC& aName);
+
+        /**
+        * Delete the current feed or folder
+        *
+        * @since 3.0
+        * @return void.
+        */
+        void DeleteCurrentItemL();
+
+        /**
+        * Returns an array containing the indexes of the marked items.
+        *
+        * @since 3.0
+        * @return The array.
+        */
+        const CArrayFix<TInt>* MarkedItems();
+
+        /**
+        * Replaces the current folder with its parent.
+        *
+        * @since 3.0
+        * @return Returns ETrue if iCurrentFolder != iRootFoler.
+        */
+        TBool HandleShowParentFolderL(void);
+
+        /**
+        * Refreshes the root folder.
+        *
+        * @since 3.0
+        * @return void
+        */
+        //void HandleRefreshRootFolderL(void);
+
+        /**
+        * Handles selections and open commands
+        *
+        * @since 3.0
+        * @return void
+        */
+        void HandleSelectionL(void);
+
+        /**
+        * Handles updating the current Feed.
+        *
+        * @since 3.1
+        * @return void
+        */
+        void HandleUpdateFeedL(TBool aUpdateAll = EFalse);
+
+        /**
+        * Handles the add-feed command.
+        *
+        * @since 3.0
+        * @return void.
+        */
+        void HandleNewFeedL();
+
+        /**
+        * Handles the add-folder command.
+        *
+        * @since 3.0
+        * @return void.
+        */
+        void HandleNewFolderL();
+
+        /**
+        * Handles the edit command.
+        *
+        * @since 3.0
+        * @return void.
+        */
+        void HandleEditL();
+
+        /**
+        * Handles the delete command.
+        *
+        * @since 3.0
+        * @return void.
+        */
+        void HandleDeleteL();
+
+        /**
+        * Handles the move command.
+        *
+        * @since 3.0
+        * @return void.
+        */
+        void HandleMoveL();
+
+        /**
+        * Handles the move to folder command.
+        *
+        * @since 3.0
+        * @return void.
+        */
+        void HandleMoveToFolderL();
+
+        /**
+        * Handles the mark-related commands.
+        *
+        * @since 3.0
+        * @param aCommand The command to process.
+        * @return void.
+        */
+        void HandleMarkL(TInt aCommand);
+
+        /**
+        * Handles the ok commands.
+        *
+        * @since 3.1
+        * @return void.
+        */
+        void HandleOkL();
+
+        /**
+        * Handles the cancel commands.
+        *
+        * @since 3.0
+        * @return void.
+        */
+        void HandleCancelL();
+        
+        /**
+        * Handles the export command.
+        *
+        * @since 3.2
+        * @return void.
+        */
+        void HandleExportL();
+
+        /**
+        * Calculate the unread count based on delta.
+        *
+        * @since 3.1
+        * @return the calculated value.
+        */
+        TInt UnreadCountChangedL( TInt aUnreadCountDelta );
+
+        /**
+        * Set the unread count.
+        *
+        * @since 3.1
+        * @return void.
+        */
+        void SetUnreadCountL( TInt aUnreadCount );
+
+        /**
+        * Count the number of folders in a given feeds folder
+        *
+        * @since 5.0
+        * @param folder to count
+        * @param total count folders
+        * @return void 
+        */
+        void CountFolderFolders(const CFeedsEntity* aFolder, TInt &aFolderCount);
+
+        /**
+        * Update the toolbar buttons' state
+        *
+        * @since 5.0
+        * @return void
+        */
+        void UpdateToolbarButtonsState();
+
+        /**
+        * Recursive loop to find a feed
+        *
+        * @since 5.0
+        * @return ETrue if feed item is found
+        */
+        TBool SearchForFeedL(const CFeedsEntity* item);
+		
+#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
+		/**
+        * To know Whether any feed item selected for move
+        *
+        * @since 7.2
+        * @return ETrue if feed item is selected for move
+        */
+        TBool isMoveActive(){ return iMoveActive;}
+#endif        
+
+    private:
+        /**
+        * C++ default constructor.
+        */
+        CFeedsFolderContainer
+                    ( CFeedsFolderView* aView,
+                             MApiProvider& aApiProvider );
+        
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL(const TRect& aRect);
+
+        /**
+        * Inits the container.
+        *
+        * @since 3.0
+        * @param aRect The drawing rect.
+        * @return void
+        */
+        void InitContainerL(const TRect& aRect);
+
+        /**
+        * Inits the array of needed icons.
+        *
+        * @since 3.0
+        * @return void.
+        */
+        void InitIconArrayL();
+
+        /**
+        * Loads and appends an icon to the icon array..
+        *
+        * @since 3.0
+        * @param aIcons The icon array.
+        * @param aID Item ID of the masked bitmap to be created.
+        * @param aFilename Filename to be used to construct the item, 
+        *        if no matching item was found in the currently active skin.
+        * @param aFileBitmapId ID of the bitmap in the file. 
+        *        Used only if no matching item was found in the currently 
+        *        active skin.
+        * @param aFileMaskId ID of the mask in the file.
+        *        Used only if no matching item was found in the currently
+        *        active skin.
+        * @return void.
+        */
+        void AppendIconL(CArrayPtr<CGulIcon>* aIcons, const TAknsItemID& aID, 
+                const TDesC& aFilename, const TInt aFileBitmapId, const TInt aFileMaskId);
+        
+        /**
+        * Sets the list-box's values.
+        *
+        * @since 3.0
+        * @param aInitialSelection The index of the selection after the update.
+        * @return void
+        */
+        void UpdateListBoxL(TInt aInitialSelection = 0);
+
+        /**
+        * Inits the move-to-folder pop-up.
+        *
+        * @since 3.0
+        * @param aListBox The pop-up's listbox.
+        * @param aPopupList The pop-up.
+        * @return void
+        */
+        void MoveToFolderInitL(CAknSingleGraphicPopupMenuStyleListBox*& aListBox, 
+                CAknPopupList*& aPopupList);
+
+        /**
+        * Sets the move-to-folder list-box's values.
+        *
+        * @since 3.0
+        * @param aListBoxRows Holds the values in the pop-up.
+        * @return void
+        */
+        void MoveToFolderSetItemsL(CDesCArraySeg& aListBoxRows);
+        
+        void AddFoldersToListL(const CFeedsEntity& aFolder, CDesCArraySeg& aListBoxRows);
+
+        /**
+        * Moves the marked items into the target-folder.
+        *
+        * @since 3.0
+        * @param aTargetFolder The folder where the items will be moved.
+        * @return void
+        */
+        void MoveToFolderMoveL(const CFeedsEntity& aTargetFolder);
+
+        /**
+        * Show the feed in the TopicView.
+        *
+        * @since 3.0
+        * @param aFolderItem The folder item to show.
+        * @return void
+        */
+        void ShowFeedL(const CFeedsEntity& aFolderItem);
+
+        /**
+        * Moves the current or marked items -- called after the move-cmd is confirmed.
+        *
+        * @since 3.0
+        * @return void
+        */        
+        void PostHandleMoveL();
+
+        /**
+        * Updates the options softkey to reflect the current state.
+        *
+        * @since 3.0
+        * @return void.
+        */
+        void UpdateCbaL();
+        
+        /**
+        * Changes the current folder.
+        *
+        * @since 3.1
+        * @param aFolder The new current folder.
+        * @param aResetSelection If ETrue the current selection is set to the first item.
+        * @return void.
+        */
+        void SetCurrentFolder(const CFeedsEntity* aFolder, 
+                TBool aResetSelection = EFalse);
+
+        /**
+        * Dynamically initializes the Mark/Unmark submenu.
+        *
+        * @since 3.2
+        * @param aMenu Pointer to the Menu Pane
+        * @return - iListBox.
+        */
+
+        void DynInitMarkUnmarkMenuPane(CEikMenuPane* aMenuPane);
+
+        /**
+        * Dim or Undim toolbar
+        * 
+        * @since 5.0
+        * @param aDim - is ETrue, then dim toolbar ; else undim toolbar
+        * @return - void
+        */
+
+        void DimToolbar(TBool aDim);
+        
+        /**
+        * Check for Marked items are folder or feed
+        * 
+        * @since 5.0
+        * @return - bool
+        */
+
+        TBool IsMarkedItemFolder();        
+
+        /**
+        * Clears the navigation pane.
+        *
+        * @since 7.1
+        * @return void
+        */
+        void ClearNavigationPane();
+
+        /**
+        * Handles the changes needed to the Navigation Pane.
+        *
+        * @since 7.1
+        * @return void
+        */
+        void UpdateNavigationPaneL();
+    public:
+        friend class CFeedsFolderView;
+        
+        
+    private:
+    	CFeedsFolderView* 				iView;				// not owned
+    	MApiProvider& 					iApiProvider;       // not owned
+        CAknDoubleGraphicStyleListBox*  iListBox;
+        CDesCArraySeg*                  iListBoxRows;
+        CAknIconArray*                  iListBoxIcons;
+        TBool                           iOwnsListBoxIcons;
+
+        TBool                           iMoveActive;
+
+        const CFeedsEntity*              iRootFolder;
+        const CFeedsEntity*              iCurrentFolder;
+        TInt                            iCurrentFolderId;
+        RPointerArray<CFeedsEntity>      iTargetFolderList;  // pointers not owned
+        CAknNavigationDecorator*        iNaviDecorator;
+    };
+
+#endif      // FEEDS_FOLDER_CONTAINER_H
+            
+// End of File