diff -r 7d48bed6ce0c -r 987c9837762f cbs/cbsui/UiInc/CCbsUiTopicListView.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cbs/cbsui/UiInc/CCbsUiTopicListView.h Wed Sep 01 12:15:03 2010 +0100 @@ -0,0 +1,429 @@ +/* +* Copyright (c) 2002 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: +* This is the application main view. Shows all the topics which +* has been received and their status: subscribed, hotmarked, new messages +* +* +*/ + + +#ifndef __CCBSTOPICLISTVIEW_H +#define __CCBSTOPICLISTVIEW_H + +// INCLUDES +#include +#include +#include "MCbsUiTopicMonitorObserver.h" +#include "CbsUiDebug.h" + +// CONSTANTS +const TInt KNumberOfStandardTopics = 17; + + +// FORWARD DECLARATIONS + +class CSelectionList; +class CListBoxNumbers; +class CCbsUiTopicListViewContainer; +class MCbs; +class CAknNavigationDecorator; +class CAknNavigationControlContainer; + +// CLASS DECLARATION + +/** +* This is the application main view. Shows all the topics which +* has been received and their status: subscribed, hotmarked, new messages +* +*/ +class CCbsUiTopicListView : public CAknView, + public MCbsUiTopicMonitorObserver + { + private: // Data declaration + + enum TTopicListViewFocusState + { + ESetFocusToCurrentHandle, + ESetFocusToFirstItem, + ESetFocusToNewestItem, + ENoFocusUpdate + }; + + public: // Constructors and destructor + + /** + * Creates an instance of the class. + * + * @param aServer It is the server. + * @return It returns a pointer to the created class. + */ + static CCbsUiTopicListView* NewL( MCbs& aServer ); + + /** + * Destructor. + */ + virtual ~CCbsUiTopicListView(); + + public: // New functions + + /** + * Calls the server to add or change a topic. Which is called + * depends on the type of the dialog. + * + * @param aType is it a edit or add query. True is add query + * @param aNumber topic number to add or change + * @param aName topic name to add or change + * @return error code if something goes wrong + */ + TInt EditTopic( + TBool aType, + TCbsTopicNumber aNumber, + const TCbsTopicName aName ); + + /** + * Adds a topic with specified number and name. + * + * @param aNumber It is the number of the topic. + * @param aName It is the name of the topic. + * @return a error code if the addition fails + */ + TInt AddTopic( + const TCbsTopicNumber& aNumber, + const TCbsTopicName& aName ); + + /** + * Marks topic which is focused. This should be called only when + * the Options menu is created and when the Ok (selection) key + * has been pressed. Focus behaviour is based on this. + */ + void MarkCurrentHandle(); + + public: // From MCbsUiTopicMonitorObserver + + /** + * Topic list or topic messages are changed. + * + * @param aEvent reason for event + * @param aTopicNumber Topic number, which caused the event + */ + void TopicListChangedL( + TCbsTopicListEvent aEvent, TCbsTopicNumber aTopicNumber ); + + public: // from CAknView + + /** + * Returns the identifier of the view. + * + * @return It returns the identifier. + */ + TUid Id() const; + + /** + * Handles the options menu commands. + * + * @param aCommand command to be executed + */ + void HandleCommandL( TInt aCommand ); + + public: // New function + /** + * Handle changes in container when rect changes. + */ + void HandleRectChangeInContainer(); + + private: // from CAknView + + /** + * Activates the view. + * + * @param aPrevViewId + * @param aCustomMessageId + */ + void DoActivateL( + const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, + const TDesC8& aCustomMessage ); + + /** + * Deactivates the view. + */ + void DoDeactivate(); + + /** + * Checks new topic count, if it has been changed after + * application switch. + */ + void ViewActivatedL( + const TVwsViewId& aPrevViewId, + TUid aCustomMessageId,const + TDesC8& aCustomMessage ); + + void ViewDeactivated(); + + private: // MEikMenuObserver + + /** + * Sets the menu items according to the state of the topic, which + * is focused on. Used when options menu is opened. Marks also + * a current topic handle. + * + * @param aResourceId resource id of the menu + * @param aMenuPane used to modify menu dynamically + */ + void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ); + + private: // New functions + + /** + * Sets current topic number according to aTopicNumber. + * + * @param aTopicNumber contains current topic number. + */ + void SetCurrentTopicNumber( const TDesC8& aTopicNumber ); + + /** + * Sets current topic number according to aTopicNumber. + * + * @param aTopicNumber new current topic number. + */ + void SetCurrentTopicNumber( const TCbsTopicNumber aTopicNumber ); + + /** + * Updates the topics information. + */ + void ReloadTopicsL(); + + /** + * Prepares container for reloading. + */ + void PrepareReloading(); + + /** + * Reloads topics from the server. + */ + void ReloadL(); + + /** + * Ends reloading. + */ + void EndReloadingL(); + + /** + * Sets focus after reload. Should be called after ReloadTopicsL(). + * + * @param aFocusState focus is set according to this + */ + void SetFocusAfterReload( TTopicListViewFocusState aFocusState ); + + /** + * Sets focus to aIndex. + * + * @param aIndex new focused index + */ + void SetFocusToTopic( TInt aIndex ); + + /** + * Updates the focus according to Selection Service after deletion. + * + * @param aDeletedTopic Calculates the new focus according to deleted + * topic. + */ + void UpdateCurrentTopicAfterDeletion( TCbsTopicNumber aDeletedTopic ); + + /** + * Returns the total amount of topics. + * + * @return It is the amount of topics. + */ + TInt TotalTopics() const; + + /** + * Requests the view to move to the previous topic. + */ + void MoveToPreviousTopic(); + + /** + * Writes a CBS to title pane. + */ + void UpdateTitlePaneL() const; + + /** + * Writes to navi pane a right message: + * No new messages + * One new message + * %N new messages + */ + void UpdateNaviPaneL(); + + /** + * Gets resouce id for text to be displayed. + * + * @param aUnreadMessages Number of unread messages. + * @return resource id for text + */ + TInt GetInfoResourceId( TInt aUnreadMessages ) const; + + /** + * Creates a new decorated label to navi pane. + * + * @param aResourceId text resource id. + * @param aUnreadMessages number of unread messages + */ + void CreateNewLabelL( TInt aResourceId, TInt aUnreadMessages ); + + /** + * Launches an edit or add topic query dialog. + * + * @param aType type of the query. + * ETrue is add and EFalse is edit query. + * @param aTopicName name of the topic + * @param aTopicNumber number of the topic + */ + void ShowTopicQueryL( + TBool aType, + TDes& aTopicName, + TDes& aTopicNumber ); + + /** + * Launchs the edit topic query with the right parameters. + */ + void ShowEditTopicQueryL(); + + /** + * Checks if there has come new topics while this function was + * last called. Shows a note how many new topics has been added, + * since last been in TopicListView. + */ + void CheckNewTopicCountL(); + + /** + * Returns the new topics count from server. + * + * @return new topic count + */ + TInt GetNewTopicsCount(); + + /** + * Changes the topic name and number to the specified. + * + * @param aHandle It is the handle to the topic. + * @param aNumber It is the new number of the topic. + * @param aName It is the name of the topic. + * @return error code in case fail + */ + TInt UpdateTopic( + const TCbsTopicNumber& aOldNumber, + const TCbsTopicNumber& aNumber, + const TCbsTopicName& aName ); + + /** + * Finds topic index by topic number. + * + * @param aIndex it will contain the topic index + * @param aTopicNumber topic number + * @return KErrNone if no errors + */ + TInt FindTopicIndexByNumber( + TInt& aIndex, + const TCbsTopicNumber& aTopicNumber ); + + /** + * Activates the topic view. + */ + void ActivateTopicViewL() const; + + /** + * Activates settings view. + */ + void ActivateSettingsViewL() const; + + /** + * Activates a add from index dialog. + */ + void ActivateAddFromIndexViewL(); + + /** + * Activates an idle object to show an information note. + * Used in call back function. + * + * @param aNewTopics count of new topics + * @return always KErrNone + */ + static TInt ActivateBackgroundNoteL( TAny* aNewTopics ); + + private: + + /** + * It is type for topic handles array. + */ + typedef CArrayFixFlat< TCbsTopicNumber > TCbsUiTopicNumberList; + + /** + * Constructor. + * + * @param aServer connection to the server + */ + CCbsUiTopicListView(MCbs& aServer); + + /** + * Finalizes the construction. + * + * Note that it is assumed that the server exists for the life + * time of the class. + */ + void ConstructL(); + + private: // Data + + // It is the control for the view. + CCbsUiTopicListViewContainer* iContainer; + + // It is the label in status pane. + CAknNavigationDecorator* iDecoratedLabel; + + // Pointer to server session. Owned by UiApp + MCbs& iServer; + + // It is the array that contains the topic numbers. + TCbsUiTopicNumberList* iTopicNumberList; + + // Handle that is focused. + TCbsTopicNumber iCurrentTopicNumber; + + // For updating information about messages to navi pane. + CAknNavigationControlContainer* iNaviPane; + + // iFocusState is set in HandleCommandL and focus is set in + // TopicListChangedL. + TTopicListViewFocusState iFocusState; + + // To see wheather it is needed to update navi pane. + // if ETrue: navi pane is not updated + TBool iAddFromIndexDialogIsActive; + + // for showing background note + CIdle* iBackgroundNote; + + // Count of new topics. + TInt iNewTopicsCount; + + + }; + + +#endif // __CCBSTOPICLISTVIEW_H + + +// End of File