phonebookui/Phonebook2/remotecontactlookup/engine/inc/cpbkxrclsearchresultdlg.h
branchRCL_3
changeset 63 f4a778e096c2
child 64 c1e8ba0c2b16
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/remotecontactlookup/engine/inc/cpbkxrclsearchresultdlg.h	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,459 @@
+/*
+* Copyright (c) 2008 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:  Definition of the class CPbkxRclSearchResultDlg.
+*
+*/
+
+
+#ifndef CPBKXRCLSEARCHRESULTDIALOG_H
+#define CPBKXRCLSEARCHRESULTDIALOG_H
+
+#include <coemain.h>
+
+#include "cpbkxrclbasedlg.h"
+#include "pbkxrclengineconstants.h"
+#include "fsccontactactionmenudefines.h"  //"pbkxcontactactionmenudefines.h"
+
+class CAknNavigationControlContainer;
+class CAknNavigationDecorator;
+class CAknTitlePane;
+class CContactCard;
+class CPbkContactEngine;
+class CPbkxRclActionServiceWrapper;
+class CPbkxContactActionMenu;
+class CGulIcon;
+class CFscContactActionMenu;
+class CAknLongTapDetector;
+class CIdle;
+/**
+* Dialog for showing remote contact lookup search results.
+*
+* Offers menu options and acion menu to initiate actions for contacts.
+*/
+class CPbkxRclSearchResultDlg : 
+    public CPbkxRclBaseDlg, 
+    public MCoeForegroundObserver,
+    public MEikListBoxObserver, 
+    public MFsActionMenuPositionGiver
+    {                          
+public: // constructor and destructor
+    
+    /**
+    * Creates new object and returns pointer to it.
+    *
+    * @param aIndex Index which user selected from the list (probably not used?)
+    * @param aArray Array of items.
+    * @param aCommand Command observer for observing menu commands.
+    * @param aContactItems Contact items to be shown on the dialog.
+    * @param aContactEngine Contact engine for creating pbk contact items.
+    * @param aActionService Action service wrapper.
+    * @param aNaviText Navi text to be displayed.
+    * @param aContactSelectorEnabled Flag indicating whether RCL is in contact
+    *                                selector mode or not.
+    * @return Created object.
+    */
+    static CPbkxRclSearchResultDlg* NewL(
+        TInt &aIndex,
+        CDesCArray* aArray,
+        MEikCommandObserver* aCommand,
+        RPointerArray<CContactCard>& aContactItems,
+        CPbkContactEngine& aContactEngine,
+        CPbkxRclActionServiceWrapper& aActionService,
+        TBool aContactSelectorEnabled,
+        TBool aMoreThanMaxResults);
+        
+    /**
+    * Destructor.
+    */
+    virtual ~CPbkxRclSearchResultDlg();
+
+public: // methods from base classes
+
+    /**
+    * Hides menu items that are not usable.
+    *
+    * @param aResourceId Menu resource id.
+    * @param aMenu Menu pane.
+    */
+    virtual void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane *aMenuPane );
+
+    /**
+    * Gets help context for this view.
+    *
+    * @param aContext On return, contains help context information
+    */
+    virtual void GetHelpContext( TCoeHelpContext& aContext ) const;
+ 
+    /**
+    * Dialog is popped on foreground.
+    */
+    virtual void HandleGainingForeground();
+
+    /**
+    * Dialog is popped background.
+    */
+    virtual void HandleLosingForeground();
+    
+    /**
+    * From MEikListBoxObserver
+    * Handles listbox pointer events
+    */
+    void HandleListBoxEventL(
+            CEikListBox *aListBox, TListBoxEvent aEventType );
+
+
+public: // new methods
+
+    /**
+    * Executes dialog and destroys it after dialog is closed.
+    */
+    void ExecuteLD();
+
+    /**
+    * Returns index of the currently selected item.
+    *
+    * @return Index of the currently selected item.
+    */
+    TInt CurrentItemIndex() const;
+
+    /**
+    * Sets index of the currently selected item.
+    *
+    * @param aIndex Index to be set.
+    */
+    void SetCurrentItemIndexL( TInt aIndex );
+    
+    /**
+    * Sets current contact to action service.
+    *
+    * This affect menu item visibility.
+    */
+    void SetCurrentContactToActionServiceL();
+    
+    /**
+    * Closes dialog.
+    */
+    void Close();
+    
+    /**
+    * Updates search result dialog.
+    *
+    * @param aNaviText New navi text.
+    */
+    void UpdateDialogL();
+    
+    /**
+    * Sends business card of the currently selected contact.
+    */
+    void SendBusinessCardL();
+
+    //Fix for: PKAO-7NNCJ2
+    /**
+    * Informs dialog that info dialog is visible.
+    */
+    void InfoDlgVisible( TBool aVisible );
+    
+    /**
+     * Set the internal flag telling wether last search found more than
+     * maximum number of results. 
+     * 
+     * @param aMoreThanMax ETrue\EFalse
+     */
+    void SetMoreThanMaxResults(TBool aMoreThanMax);
+    
+    /**
+     * The state of the internal flag telling wether last search
+     * found more than maximum number of results.
+     * 
+     * @return TBool ETrue\EFalse
+     */
+    TBool MoreThanMaxResults();
+
+protected: // redefinition of functions of the base class
+
+    /**
+    * From CAknSelectionListDialog.
+    *
+    * Handles key events.
+    *
+    * @param aKeyEvent Key event.
+    * @param aType Type of the key event.
+    * @return Key response (handled/not handled).
+    */
+    TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+    TBool OkToExitL( TInt aButtonId );
+    
+private: // methods used internally
+    
+   /**
+    * Sets up title pane text.
+    */
+    void SetTitlePaneTextL();
+    
+    /**
+    * Sets up status pane.
+    */
+    void SetupStatusPaneL();
+    
+    /**
+    * Updates status pane.
+    */
+    void UpdateStatusPaneL();
+
+    /**
+    * Resets status pane.
+    */
+    void ResetStatusPane();
+
+    /**
+    * Creates list box entries.
+    */
+    void CreateListBoxEntriesL();
+
+    /**
+    * Creates given list box entry.
+    *
+    * @param aIndex Index of the list box entry.
+    */
+    void CreateListBoxEntryL( TInt aIndex );
+    
+    /**
+    * Updates given list box entry.
+    *
+    * @param aIndex List box entry index.
+    */
+    void UpdateListBoxEntryL( TInt aIndex );
+
+    /**
+    * Loads navi text from resources.
+    *
+    * @return Navi text.
+    */
+    void LoadNaviTextL();
+
+    /**
+    * Returns ETrue if there is at least one call action available.
+    *
+    * @return ETrue if there is at least one call action available.
+    */
+    TBool CallActionsAvailable() const;
+
+    /**
+    * Creates and initializes action menu.
+    */
+    void InitializeActionMenuL();
+
+    /**
+    * Shows action menu and handles possible custom command.
+    */
+    void ShowActionMenuL( const TPoint& aPenEventScreenLocation );
+
+    /**
+    * Calculates action menu position based on currently selected
+    * item.
+    *
+    * @return Action menu position.
+    */
+    TFscContactActionMenuPosition GetActionMenuPosition();
+
+    /**
+    * Returns ETrue if action menu is available.
+    *
+    * @return ETrue if action menu is available.
+    */
+    TBool ActionMenuAvailable() const;
+
+    /**
+    * Creates and adds save as contact action to action menu.
+    */
+    void CreateAndAddSaveAsContactActionL();
+
+    /**
+    * Returns ETrue if scrolling is in progress.
+    *
+    * Scrolling means that user is pressing up or down arrow so that
+    * it creates multiple key presses.
+    *
+    * @return ETrue if scrolling is enabled.
+    */ 
+    TBool ScrollingInProgress() const;
+    
+    /**
+    * This method is called when scrolling has stopped.
+    */
+    void ScrollingStoppedL();
+    
+    /**
+     * Shows a note to user that more than max number of
+     * results found and only N number of those is shown
+     */
+    void DisplayTooManyResultsInfoNoteL();
+
+private: // constructors
+
+    /**
+    * Constructor.
+    *
+    * @param aIndex Index which user selected from the list (probably not used?)
+    * @param aArray Array of items.
+    * @param aCommand Command observer for observing menu commands.
+    * @param aContactItems Contact items to be shown on the dialog.
+    * @param aContactEngine Contact engine for creating pbk contact items.
+    * @param aActionService For executing menu commands.
+    * @param aContactSelectorEnabled Flag indicating whether RCL is in contact
+    *                                selector mode or not.
+    */ 
+    CPbkxRclSearchResultDlg(
+        TInt& aIndex,
+        CDesCArray* aArray,
+        MEikCommandObserver* aCommand,
+        RPointerArray<CContactCard>& aContactItems,
+        CPbkContactEngine& aContactEngine,
+        CPbkxRclActionServiceWrapper& aActionService,
+        TBool aContactSelectorEnabled,
+        TBool aMoreThanMaxResults);
+        
+
+    /**
+    * Second-phase constructor.
+    *
+    * @param aNaviText Navi text to be displayed.
+    */
+    void ConstructL();
+
+    /**
+    * Constructs menu bar.
+    * 
+    * @param aResourceId - menubar resource id 
+    */
+    void ConstructMenuBarL( TInt aResourceId );
+  
+private:
+    
+    /**
+    * From CCoeControl,HandlePointerEventL.
+    */
+    void HandlePointerEventL(const TPointerEvent& aPointerEvent);    
+    
+    
+    /**
+    * From MFsActionMenuPositionGiver
+    */    
+    TPoint ActionMenuPosition();
+    
+    
+    CAknLongTapDetector& LongTapDetectorL();
+    
+    /**
+     * Idle callback for the "more than 50 results" info note.
+     * 
+     * For smooth showing of the note, an idle object is used to
+     * schedule the display of the note.
+     * 
+     * @param aSelf - handle for the object that made the request
+     */
+    static TInt TooManyResultsIdleCallbackL(TAny* aSelf );
+    
+private: // data
+    
+    // Indexes of icon array.
+    enum TIconIndex
+        {
+        EActionMenuEnabled = 0    // Action menu enabled icon
+        };
+
+    // Contact engine.
+    CPbkContactEngine& iContactEngine;
+
+    // Contact action service wrapper. Used to execute menu commands.
+    CPbkxRclActionServiceWrapper& iContactActionService;
+
+    // Contact action menu for executing commands. Owned.
+    CFscContactActionMenu* iActionMenu;
+    
+    // Items. Not owned.
+    CDesCArray* iItems;
+
+    // Navi pane of the current UI application. Not owned.
+    CAknNavigationControlContainer* iNaviPane;
+    
+    // Navigation label to be shown while result dialog is shown. Owned.
+    CAknNavigationDecorator* iNaviDecorator;
+    
+    // Contact items. Not owned.
+    RPointerArray<CContactCard>& iContactItems;
+
+    // Flag indicating if contact selector is enabled.
+    TBool iContactSelectorEnabled;
+
+    // Flag indicating whether dialog should be closed after processing user command.
+    TBool iClose;
+
+    // Selected item index.
+    TInt& iSelectedItemIndex;
+
+    // Navigation label text. Owned.
+    RBuf iNaviText;
+
+    // Icon for add recipient action menu item. Owned.
+    CGulIcon* iAddRecipientIcon;
+
+    // Flag indicating whether save as contact action menu item is
+    // already added.
+    TBool iSaveAsAdded;
+
+    // Set when dialog is exiting. After that no key presses are handled.
+    TBool iExit;
+    
+    // Flag indicating that up or down arrow is held down.
+    TBool iKeyDown;
+
+    // Counter how many keypresses has occurred since key has been pressed 
+    // down.
+    TInt iKeyCounter;
+
+    //Fix for: PWAN-7MC7WA
+    //Flag indicating that CAS query was performed
+    TBool iIsScrollLaunched;
+    
+    //Fix for: PKAO-7NNCJ2
+    //Flag indicating that info dialog is visible. Owned.
+    TBool iIsInfoDlgVisible;
+    
+    //Holds the position of the Contact Action Menu
+    TPoint iActionMenuPosition;
+    
+    //ETrue - If Contact Action Menu is being Shown
+    TBool iActionMenuStarted;
+	
+    ///ETrue - if the more than max results note needs to be shown
+    TBool iMoreThanMaxResults;
+    
+    TBool iFocusableContactPointed;
+    
+    // Title pane text. Owned.
+    HBufC* iTitleText;
+    // Original title pane text (of the caller view). Owned.
+    HBufC* iOriginalTitleText;
+   
+    // Pointer reference to title pane. Not owned.
+    CAknTitlePane* iTitlePane;
+    
+    /// own. idle object for scheduling the showing of the "more than 50 results" 
+    /// info note
+    CIdle* iIdleNote;
+    };
+
+#endif