diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/inc/CPbk2NamesListControl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/inc/CPbk2NamesListControl.h Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,461 @@ +/* +* Copyright (c) 2005-2007 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: Phonebook 2 names list control. +* +*/ + + +#ifndef CPBK2NAMESLISTCONTROL_H +#define CPBK2NAMESLISTCONTROL_H + +// INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "CPbk2ControlContainer.h" +#include "CPbk2ThumbnailManager.h" + +// FORWARD DECLARATIONS +class MPbk2NamesListState; +class CPbk2ContactViewListBox; +class CPbk2NamesListStateFactory; +class CVPbkContactManager; +class MPbk2ContactNameFormatter; +class MPbk2ControlObserver; +class CPbk2StorePropertyArray; +class CAknSearchField; +class CPbk2ThumbnailLoader; +class MPbk2FilteredViewStack; +class CPbk2UiControlEventSender; +class CPbk2FilteredViewStackObserver; +class CPbk2ListBoxSelectionObserver; +class MPbk2ContactUiControlExtension; +class CPbk2PredictiveSearchFilter; +class CPbk2ContactViewDoubleListBox; + +// CLASS DECLARATION + +/** + * Phonebook 2 names list control. + * Responsible for delegating control calls to control state objects, + * selecting correct state object based on events etc. indications, + * and notifying observers about control events. In other words + * this class manages the names list control framework and performs + * the high level operations itself but delegates the detailed operations + * to names list state classes. + */ +class CPbk2NamesListControl : public CCoeControl, + public MPbk2ContactUiControl, + public MPbk2ContactUiControl2, + public MVPbkContactViewObserver, + public MPbk2PointerEventInspector, + public MCoeControlObserver, + public MPbk2ContactUiControlUpdate, + public MEikScrollBarObserver, + public MAdaptiveSearchTextObserver, + public MEikListBoxObserver, + public MPbk2ControlContainerForegroundEventObserver, + public MPbk2CommandItemUpdater + { + public: // Enumerations + + /// The names list states + enum TPbk2NamesListState + { + /// Startup state + EStateStartup = 0, + /// Not ready state + EStateNotReady, + EStateEmpty, + EStateReady, + EStateFiltered, + EStateHidden + }; + + public: // Constructors and destructor + + /** + * Creates a new instance of this class. + * + * @param aResourceId Id of the resource where the control + * is defined in. + * @param aContainer This control's container. + * @param aManager Virtual Phonebook contact manager. + * @param aView The contact view. + * @param aNameFormatter Name formatter. + * @param aStoreProperties An array containg properties + * for the stores that are shown. + * @return A new instance of this class. + */ + IMPORT_C static CPbk2NamesListControl* NewL( + TInt aResourceId, + const CCoeControl* aContainer, + CVPbkContactManager& aManager, + MVPbkContactViewBase& aView, + MPbk2ContactNameFormatter& aNameFormatter, + CPbk2StorePropertyArray& aStoreProperties ); + + /** + * Creates a new instance of this class. + * + * @param aResourceId Id of the resource where the control + * is defined in. + * @param aContainer This control's container. + * @param aManager Virtual Phonebook contact manager. + * @param aView The contact view. + * @param aNameFormatter Name formatter. + * @param aStoreProperties An array containg properties + * for the stores that are shown. + * @param aThumbManager Thumbnail manager for social phonebook //TODO + * @return A new instance of this class. + */ + IMPORT_C static CPbk2NamesListControl* NewL( + TInt aResourceId, + const CCoeControl* aContainer, + CVPbkContactManager& aManager, + MVPbkContactViewBase& aView, + MPbk2ContactNameFormatter& aNameFormatter, + CPbk2StorePropertyArray& aStoreProperties, + CPbk2ThumbnailManager* aThumbManager ); + + /** + * Constructor. Defined as public for custom control needs. + * + * @param aContainer This control's container. + * @param aManager Virtual Phonebook contact manager. + * @param aView The contact view. + * @param aNameFormatter Name formatter. + * @param aStoreProperties An array containg properties + * for the stores that are shown. + */ + IMPORT_C CPbk2NamesListControl( + const CCoeControl* aContainer, + CVPbkContactManager& aManager, + MVPbkContactViewBase& aView, + MPbk2ContactNameFormatter& aNameFormatter, + CPbk2StorePropertyArray& aStoreProperties ); + + /** + * Destructor. + */ + ~CPbk2NamesListControl(); + + public: // Interface + + /** + * Adds an observer to this control. + * + * @param aObserver The observer to add. + */ + IMPORT_C void AddObserverL( + MPbk2ControlObserver& aObserver ); + + /** + * Removes an observer from this control. + * + * @param aObserver The observer to remove. + */ + IMPORT_C void RemoveObserver( + MPbk2ControlObserver& aObserver ); + + /** + * Resets the control. + * -Clears marks + * -Resets the find box + * -Sets focus to the first contact + * -Removes the thumbnail + * -Updates the state of the control asynchronously according to + * the Virtual Phonebook view state + */ + IMPORT_C void Reset(); + + /** + * Sets the new view for the control. This will cause + * the control to reset its state according to state of aView + * asynchronously. + */ + IMPORT_C void SetViewL( MVPbkContactViewBase& aView ); + + /** + * Sets the new view for the control. This will cause + * the control to reset its state according to state of aView + * asynchronously. Control takes given view's ownership. + */ + IMPORT_C void GiveViewL( MVPbkContactViewBase* aView ); + + /** + * Use this method to block pointer events from this control. + */ + IMPORT_C void AllowPointerEvents( TBool aAllow ); + + /** + * Set the group contact link for curently open group. + * + * @param aGroupLinktoSet The input group contact link + */ + IMPORT_C void SetCurrentGroupLinkL( MVPbkContactLink* aGroupLinktoSet); + /** + * Fetches the current view + * + * @return Current view. + */ + MVPbkContactViewBase& View(); + + + + public: // From CCoeControl + void MakeVisible( + TBool aVisible ); + TKeyResponse OfferKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType ); + void ConstructFromResourceL( + TResourceReader& aReader ); + void ActivateL(); + TInt CountComponentControls() const; + CCoeControl* ComponentControl( + TInt aIndex ) const; + void FocusChanged( + TDrawNow aDrawNow ); + void SizeChanged(); + void Draw( + const TRect& aRect ) const; + void HandleResourceChange( + TInt aType ); + void HandlePointerEventL( + const TPointerEvent& aPointerEvent ); + + public: // From MPbk2ContactUiControl + MPbk2ContactUiControl* ParentControl() const; + TInt NumberOfContacts() const; + const MVPbkBaseContact* FocusedContactL() const; + const MVPbkViewContact* FocusedViewContactL() const; + const MVPbkStoreContact* FocusedStoreContact() const; + void SetFocusedContactL( + const MVPbkBaseContact& aContact ); + void SetFocusedContactL( + const MVPbkContactBookmark& aContactBookmark ); + void SetFocusedContactL( + const MVPbkContactLink& aContactLink ); + TInt FocusedContactIndex() const; + void SetFocusedContactIndexL( + TInt aIndex ); + TInt NumberOfContactFields() const; + const MVPbkBaseContactField* FocusedField() const; + TInt FocusedFieldIndex() const; + void SetFocusedFieldIndex( + TInt aIndex ); + TBool ContactsMarked() const; + MVPbkContactLinkArray* SelectedContactsL() const; + MVPbkContactLinkArray* SelectedContactsOrFocusedContactL() const; + MPbk2ContactLinkIterator* SelectedContactsIteratorL() const; + CArrayPtr* SelectedContactStoresL() const; + void ClearMarks(); + void SetSelectedContactL( + TInt aIndex, + TBool aSelected ); + void SetSelectedContactL( + const MVPbkContactBookmark& aContactBookmark, + TBool aSelected ); + void SetSelectedContactL( + const MVPbkContactLink& aContactLink, + TBool aSelected ); + + void DynInitMenuPaneL( + TInt aResourceId, + CEikMenuPane* aMenuPane ) const; + void ProcessCommandL ( + TInt aCommandId ) const; + void UpdateAfterCommandExecution(); + TInt GetMenuFilteringFlagsL() const; + CPbk2ViewState* ControlStateL() const; + void RestoreControlStateL( + CPbk2ViewState* aState ); + const TDesC& FindTextL(); + void ResetFindL(); + void ShowThumbnail(); + void HideThumbnail(); + void SetBlank( + TBool aBlank ); + void RegisterCommand( + MPbk2Command* aCommand ); + void SetTextL( + const TDesC& aText ); + TAny* ContactUiControlExtension(TUid aExtensionUid ); + + public: // From MPbk2ContactUiControl2 + TInt CommandItemCount() const; + const MPbk2UiControlCmdItem& CommandItemAt( TInt aIndex ) const; + const MPbk2UiControlCmdItem* FocusedCommandItem() const; + void DeleteCommandItemL( TInt aIndex ); + void AddCommandItemL(MPbk2UiControlCmdItem* aCommand, TInt aIndex); + + public: // From MVPbkContactViewObserver + void ContactViewReady( + MVPbkContactViewBase& aView ); + void ContactViewUnavailable( + MVPbkContactViewBase& aView ); + void ContactAddedToView( + MVPbkContactViewBase& aView, + TInt aIndex, + const MVPbkContactLink& aContactLink ); + void ContactRemovedFromView( + MVPbkContactViewBase& aView, + TInt aIndex, + const MVPbkContactLink& aContactLink ); + void ContactViewError( + MVPbkContactViewBase& aView, + TInt aError, + TBool aErrorNotified ); + + public: // From MPbk2PointerEventInspector + TBool FocusedItemPointed(); + TBool FocusableItemPointed(); + TBool SearchFieldPointed(); + + public: // From MCoeControlObserver + void HandleControlEventL( + CCoeControl* aControl, + TCoeEvent aEventType ); + + public: // From MPbk2ContactUiControlUpdate + void UpdateContact( + const MVPbkContactLink& aContactLink ); + + public: // From MPbk2CommandItemUpdater + void UpdateCommandItem( TInt aCommandId ); + + public: // from MEikScrollBarObserver + void HandleScrollEventL(CEikScrollBar* aScrollBar, TEikScrollEvent aEventType); + public: // from MEikListBoxObserver + void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType ); + public: // from MAdaptiveSearchTextObserver + + void AdaptiveSearchTextChanged( CAknSearchField* aSearchField ); + private: // Implementation + + /** + * Constructor. + * + * @param aContainer This control's container. + * @param aManager Virtual Phonebook contact manager. + * @param aView The contact view. + * @param aNameFormatter Name formatter. + * @param aStoreProperties An array containg properties + * for the stores that are shown. + * @param aThumbManager Thumbnail manager for social phonebook + */ + CPbk2NamesListControl( + const CCoeControl* aContainer, + CVPbkContactManager& aManager, + MVPbkContactViewBase& aView, + MPbk2ContactNameFormatter& aNameFormatter, + CPbk2StorePropertyArray& aStoreProperties, + CPbk2ThumbnailManager* aThumbManager ); + + void ConstructL( + TInt aResourceId); + void Redraw(); + void DoHandleContactViewReadyL( + MVPbkContactViewBase& aView ); + void DoHandleContactAdditionL( + TInt aIndex ); + void DoHandleContactRemovalL( + TInt aIndex ); + void SelectAndChangeReadyStateL(); + void RelayoutControls(); + void HandleTopViewChangedL( + MVPbkContactViewBase& aOldView ); + void HandleTopViewUpdatedL(); + void HandleBaseViewChangedL(); + void HandleViewStackError( + TInt aError ); + void HandleContactAddedToBaseView( + MVPbkContactViewBase& aBaseView, + TInt aIndex, + const MVPbkContactLink& aContactLink ); + void DeleteIfAlreadyAdded(const MPbk2UiControlCmdItem* aCommand); // Fix ETKI-7NADZC + + + private: //from MPbk2ControlContainerForegroundEventObserver + void HandleForegroundEventL( TBool aForeground ); + + private: // Data + /// Ref: Current state + MPbk2NamesListState* iCurrentState; + /// Own: State factory + CPbk2NamesListStateFactory* iStateFactory; + /// Own: List box + CPbk2ContactViewListBox* iListBox; + /// Own: Observers of this object + RPointerArray iObservers; + /// Own: Previous view count + TInt iPrevCount; + /// Own: Find box + CAknSearchField* iFindBox; + /// Ref: Virtual Phonebook contact manager + CVPbkContactManager& iContactManager; + /// Ref: All contacts view + MVPbkContactViewBase* iBaseView; + /// Ref: The view that is used by the control + MPbk2FilteredViewStack* iViewStack; + /// Ref: Control container + const CCoeControl* iContainer; + /// Ref: Name formatter + MPbk2ContactNameFormatter& iNameFormatter; + /// Ref: The store's UI properties + CPbk2StorePropertyArray& iStoreProperties; + /// Own: Thumbnail loader + CPbk2ThumbnailLoader* iThumbnailLoader; + /// Ref: Command in Execution + MPbk2Command* iCommand; + /// Own: A control event sender + CPbk2UiControlEventSender* iEventSender; + /// Own: An observer for the filtered view stack + CPbk2FilteredViewStackObserver* iStackObserver; + /// Own: An observer for listbox selection mode changes + CPbk2ListBoxSelectionObserver* iListBoxSelectionObserver; + /// Own: Flag for owning the base view + TBool iOwnBaseView; + /// Own: UI extension + MPbk2ContactUiControlExtension* iUiExtension; + /// flag whether pointer moved or not for the thumbnail + TBool iDidMove; + /// Defines whether this control handles pointer events or not. + TBool iAllowPointerEvents; + /// Command items. Owns the array members. + RPointerArray iCommandItems; + /// Own: Search filter + CPbk2PredictiveSearchFilter* iSearchFilter; + //Flag to indicate Feature manager initilization + TBool iFeatureManagerInitilized; + + //REF: Thumbnail manager //TODO + CPbk2ThumbnailManager* iThumbManager; + //OWN: double list box "handle" + CPbk2ContactViewDoubleListBox* iDoubleListBox; + + }; + +#endif // CPBK2NAMESLISTCONTROL_H + +// End of File