diff -r 6385c4c93049 -r 8e6fa1719340 browserui/browser/FeedsInc/FeedsFolderContainer.h --- /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 +#include +#include + +#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* 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* 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 iTargetFolderList; // pointers not owned + CAknNavigationDecorator* iNaviDecorator; + }; + +#endif // FEEDS_FOLDER_CONTAINER_H + +// End of File