classicui_plat/find_item_ui_api/inc/finditemmenu.h
changeset 0 2f259fa3e83a
child 15 08e69e956a8c
child 30 56e9a0aaad89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/classicui_plat/find_item_ui_api/inc/finditemmenu.h	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,486 @@
+/*
+* Copyright (c) 2002-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: 
+*
+*/
+
+
+#ifndef FINDITEMMENU_H
+#define FINDITEMMENU_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <finditemengine.h>
+#include <ConeResLoader.h>
+#include <ItemFinder.h>
+
+// AIW related headers
+#include <AiwServiceHandler.h>
+#include <aiwdialdataext.h>
+
+#include <apparc.h> // MApaEmbeddedDocObserver
+#include <AiwCommon.h>
+
+#include <cenrepnotifyhandler.h>
+
+// FORWARD DECLARATIONS
+class CRepository;
+class CEikMenuPane;
+class CSendUi;
+#ifndef RD_VIRTUAL_PHONEBOOK
+class CPbkContactEngine;
+class CPbkDataSaveAppUi;
+class RPbkViewResourceFile;
+#endif // !RD_VIRTUAL_PHONEBOOK
+class CSchemeHandler;
+class CFindItemVoIPExtension;
+class CCommonUiMPEngineApiLoader;
+
+// CLASS DECLARATION
+
+NONSHARABLE_CLASS(CCommonUiRepositoryWatcher) : public CBase, public MCenRepNotifyHandlerCallback
+    {
+public:
+    static CCommonUiRepositoryWatcher* NewL(
+        const TUid aUid,
+        const TUint32 aKey,
+        CCenRepNotifyHandler::TCenRepKeyType aKeyType,
+        TCallBack aCallBack,
+        CRepository* aRepository);
+
+    ~CCommonUiRepositoryWatcher();
+
+    TUint32 ChangedKey();
+
+public: // from MCenRepNotifyHandlerCallback
+    void HandleNotifyInt    (TUint32 aKey, TInt aNewValue);
+    void HandleNotifyError  (TUint32 aKey, TInt aError, CCenRepNotifyHandler* aHandler);
+
+private:
+    CCommonUiRepositoryWatcher(
+        const TUid aUid,
+        const TUint32 aKey,
+        TCallBack aCallBack,
+        CRepository* aRepository);
+
+    void ConstructL(CCenRepNotifyHandler::TCenRepKeyType aKeyType);
+
+    void ConstructL();
+
+private:
+    TUid                    iUid;
+    TUint32                 iKey;
+    TUint32                 iChangedKey;
+    TCallBack               iCallBack;
+    CRepository*            iRepository;
+    CCenRepNotifyHandler*   iNotifyHandler;
+
+    };
+// aiw call back funtion
+NONSHARABLE_CLASS( MPBAiwNotify ) : public MAiwNotifyCallback
+    {
+public:
+    IMPORT_C virtual TInt HandleNotifyL(TInt aCmdId, TInt aEventId,
+            CAiwGenericParamList& aEventParamList,
+            const CAiwGenericParamList& aInParamList);
+    };
+/**
+*  CFindItemMenu - class to provide (localized) "Find Item" menu items
+*   for applications to dynamically build Options menu.
+*
+*   Usage:
+*       See Find Item design document for complete example.
+*
+*/
+NONSHARABLE_CLASS(CFindItemMenu) :public CBase
+    {
+    public:  // Constructors and destructor 
+        /**  
+        * Enumeration for menu items that can be handled 
+        * via SetMenuItemVisibility
+        * If you add more items, numbering must follow sequence
+        * 1,2,4,8,16,32,...*/
+        enum TMenuItem
+            {
+            ECallItem = 1
+            };  
+    
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        *
+        * @param aCommandId     Starting point of command ids that the
+        *                       application has to supply aCommandId will
+        *                       be used for the "FindItem" menu commands, so
+        *                       it and cascading three resource id's should
+        *                       be unused.
+        */
+        IMPORT_C static CFindItemMenu* NewL( const TInt aCommandId );
+
+        /**
+        * Two-phased constructor. Pointer is left to CleanupStack.
+        *
+        * @param aCommandId     Starting point of command ids that the
+        *                       application has to supply aCommandId will
+        *                       be used for the "FindItem" menu commands, so
+        *                       it and cascading three resource id's should
+        *                       be unused.
+        */
+        IMPORT_C static CFindItemMenu* NewLC( const TInt aCommandId );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CFindItemMenu();
+
+    public:
+
+        /**
+        * Inserts the FindItem menu item into menupane
+        *
+        * @param aMenuPane  a Menupane that the items will be added
+        * @param aIndex     Position in menupane where items will be added,
+        *                   i.e. a command id of the previous menuitem
+        */
+        IMPORT_C void DisplayFindItemMenuItemL( CEikMenuPane& aMenuPane,
+                                                const TInt aIndex );
+
+        /**
+        * Displays the FindItem cascade menu
+        *
+        * @param aMenuPane  a Menupane that the items will be displayed
+        */
+        IMPORT_C void DisplayFindItemCascadeMenuL( CEikMenuPane&
+                                                    aMenuPane ) const;
+
+        /**
+        * Allows the application's HandleCommandL() method to
+        *   switch appropriately on menuselections
+        *
+        * @param    aCommandId  a Command id to check
+        *
+        * @return   Whether the command id was a valid.
+        */
+        IMPORT_C TBool CommandIsValidL( const TInt aCommandId ) const;
+
+        /**
+        * Gives a search case for a command id
+        *
+        * @param    aCommandId  a Command id to check
+        *
+        * @return   Enumeration that can be given to CFindItemDialog's NewL()
+        */
+        IMPORT_C CFindItemEngine::TFindItemSearchCase SearchCase(
+                                            const TInt aCommandId ) const;
+
+        /**
+        * @since Series 60 2.6
+        * Notify find menu to update items in menupane. Called in applications
+        * DynInitMenuPane for main menu or context menu. Application shuold provide
+        * all unknown menupanes to this method. (AIW, add to contacts etc.)
+        *
+        * @param    aRecource      MenuId of particular menu (defaults to KErrNone)
+        * @param    aMenuPane      Menupane to update (defaults to null)
+        */
+        IMPORT_C void UpdateItemFinderMenuL(TInt aResource=KErrNotFound,CEikMenuPane* aMenuPane = 0);
+
+        /**
+        * @since Series 60 2.6
+        * Request to handle find specific command. Called in applications HandleCommandL().
+        * AknItemFinder related members must be set before calling this method.
+        * As the method does not return value, application should check the command validity
+        * by using CommandIsValidL() before passing command to find menu
+        *
+        * @param    aCommand      Command to be handled, if find menu does not recognize command,
+        *                         method does nothing.
+        */
+        IMPORT_C void HandleItemFinderCommandL(TInt aCommand);
+
+        /**
+        * @since Series 60 2.6
+        * Initialized AIW menu and interests.
+        * Must be called once after construction of class in order to enable AIW
+        *
+        * @param    aResource        Applications main menupane resource id
+        */
+        IMPORT_C void AttachItemFinderMenuL(TInt aResource);
+
+        /**
+        * @since Series 60 2.6
+        * Set callback number .
+        * Must be called before before menu is initialized (AddItemFinderMenuL())
+        * if callback number is found in message
+        * @param    aPhonenumber       Callback number
+        */
+        IMPORT_C void SetCallbackNumber (const TDesC& aPhoneNumber);
+
+        /**
+        * @since Series 60 2.7
+        * Make a call. If callback number is initialised, first we query from user
+        * to which number (CallBack number or aSenderDescriptor) we should make that call.
+        * @param    aSenderDescriptor       Number to which we should call
+        */
+        IMPORT_C void HandleCallL(const TDesC& aSenderDescriptor);
+
+        /**
+        * @since Series 60 3.0
+        * Make a VoIP call. If callback number is initialised, first we query from user
+        * to which number (CallBack number or aSenderDescriptor) we should make that call.
+        * @param    aSenderDescriptor       Number to which we should call
+        */
+        IMPORT_C void HandleVoIPCallL(const TDesC& aSenderDescriptor);
+
+        /**
+        * @since Series 60 3.2
+        * Sets the highlight status of the sender field to indicate if this field is
+        * currently being highlighted or not (set to EFalse by default).
+        * This setting has impact only when automatic find is turned on and focus
+        * is in the header. 
+        * @param    aStatus     ETrue if sender field is currently highlighted, 
+        *                       otherwise EFalse.
+        */
+        IMPORT_C void SetSenderHighlightStatus( TBool aStatus );
+
+        /**
+        * @since Series 60 3.2
+        * Sets the contents of the sender field shown on the display.
+        * This setting has impact only when automatic find is turned on and focus
+        * is in the header.        
+        * @param    aText       Sender contents currently shown on the display.
+        */
+        IMPORT_C void SetSenderDisplayText( const TDesC& aText );
+        
+        /**
+        * @since Series 60 3.2
+        * Initialize members needed to update items in menupane. Called in applications
+        * DynInitMenuPane for main menu or context menu
+        *
+        * @param    aItemFinder    Pointer to CommonUi item finder instance
+        * @param    aMenuPane      Menupane where an items will be added
+        * @param    aIndex         Position in menupane where the item
+        *                          will be added i.e. a command id of the
+        *                          previous menuitem (usually EFindItemMenuPlaceHolder)
+        *                          When AIW in use, this command will be deleted from menu
+        * @param    aSenderDescriptor   Possible sender number/address, can be KNullDesC
+        *                               If not a phone number, corrct type must be set via
+        *                               SetSenderDescriptorType()
+        * @param    aSenderKnown   Is sender known ( defaults to EFalse )
+        * @param    aIsContextMenu Is menu context menu ( defaults to EFalse )
+        */
+        IMPORT_C void AddItemFindMenuL(
+                                    CItemFinder* aItemFinder,
+                                    CEikMenuPane* aMenuPane,
+                                    TInt aIndex,
+                                    const TDesC& aPhoneNumber,
+                                    TBool aKnownSender = EFalse,
+                                    TBool aIsContextMenu = EFalse);
+
+        /**
+        * @since Series 60 3.2
+        * Sets item type for sender descriptor (defaults to EPhoneNumber)
+        * Must be called before before menu is initialized (AddItemFindMenuL())
+        * if descriptor type is not phone number.
+        *
+        * @param    aType        Which kind of data sender descriptor contains
+        */
+        IMPORT_C void SetSenderDescriptorType(CItemFinder::TItemType aType);                            
+             
+        /**
+        * Sets menu item visibility 
+        * Must be called before before menu is initialized (AddItemFindMenuL())
+        * 
+        * @since Series 60 3.2
+        * @param    aItem        menu item
+        * @param    aVisible     ETrue = menu item allowed (visible), 
+        *                        EFalse = menu item not allowed.
+        */
+        IMPORT_C void SetMenuItemVisibility( 
+            CFindItemMenu::TMenuItem aItem,
+            TBool aVisible );                           
+                  
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CFindItemMenu();
+
+        /**
+        * ConstructL
+        */
+        void ConstructL( const TInt aCommandId );
+
+        /**
+        * Loads the resource for menuitems
+        */
+        void LoadResourceFileL();
+
+        /**
+        * Adds the menu item to menupane
+        *
+        * @param    aMenuPane   Menupane where an item will be added
+        * @param    aCommandId  Command id of the item
+        * @param    aIndex      Position in menupane where the item
+        *                       will be added i.e. a command id of the
+        *                       previous menuitem
+        * @param    aCascadeId  Item's cascade id
+        * @param    aText       Text of the menuitem
+        */
+        void AddMenuItemL(
+            CEikMenuPane& aMenuPane,
+            TInt aCommandId,
+            TInt aIndex,
+            TInt aCascadeId,
+            const TDesC& aText ) const;
+
+        // Item finder item handling ( not AIW based )
+
+        void CallL();
+        void VoIPCallL(); // creates VoIP call
+        void SendMessageL( const TUid aMtmUid );
+        void GoToUrlL(TUid aHandlerAppUid);
+        void AddToBookmarkL();
+        void CreateContactCardL( TInt aCommandId );
+        void AddToGalleryL();
+
+        void AutoFindStatusChangedL();
+        static TInt AutoFindStatusChanged(TAny* aThis);
+
+        // added parameter to define the dial data type.
+        TBool FormatDialDataL( TBool aFormatVoIPDialData );
+        void LaunchGenericUriL();
+        HBufC* ChooseNumberQueryL(TInt& aIndex);
+        void LoadMPEngineApiL();
+        void CopyToClipboardL();
+
+        CItemFinder::TItemType CurrentItemType();
+        HBufC* CurrentItemDescriptor();
+        void SetFindModeL( TInt aFlags );
+        TBool ItemFinderExists();
+        TPtrC CurrentSelection(); 
+        
+    private:
+        /**
+        * Enumeration for menu command ids
+        */
+        enum TFindCase
+            {
+            EFindUrlAddress = 1,
+            EFindMailAddress = 2,
+            EFindPhoneNumber = 3
+            };
+
+    private:    // Data
+        // Command id which will be given in construction
+        CCoeEnv* iCoeEnv;
+
+        TInt iFindItemCommandId;
+        // Resource file offset
+        TInt iResourceFileOffset;
+
+        // String for cascaded FindItem menu
+        HBufC* iFindItemMenuItemString;
+        // String for Url menuitem
+        HBufC* iFindItemUrlItemString;
+        // String for Mail menuitem
+        HBufC* iFindItemMailItemString;
+        // String for Phone menuitem
+        HBufC* iFindItemPhoneItemString;
+        //String for Tel Internet menuitem
+        HBufC* iFindItemTelInternetItemString;
+        // Is Menuitem added
+        TBool iFindItemMenuItemAdded;
+        //Resource loader
+        RConeResourceLoader iResLoader;
+
+
+        // Item finder related members
+        CItemFinder* iAutomaticFind; // not owned                
+        
+        CEikMenuPane* iMenuPane;  // not owned
+        HBufC* iSenderDescriptor; // owned, possible sender number
+        TBool iIsSenderKnown; // Shall we show add to Contacts for sender
+        TBool iIsContextMenu;
+        TInt iIndex;
+
+        // SendUi
+        CSendUi* iSendUi;
+
+#ifndef RD_VIRTUAL_PHONEBOOK
+        CPbkContactEngine* iPbkEngine;
+        CPbkDataSaveAppUi* iPbkDataSave;
+        RPbkViewResourceFile* iRPbkResourceFile;
+#endif // !RD_VIRTUAL_PHONEBOOK
+
+        CItemFinder::TItemType iSenderDescType;
+
+        // AIW related members
+        CAiwServiceHandler* iServiceHandler;
+
+        CRepository* iCommonUiRepository;
+        CCommonUiRepositoryWatcher* iCommonUiRepositoryWatcher;
+
+        TBool iHideCallMenu;
+
+        // Is sender field currently highlighted.
+        TBool iSenderHighlighted;
+
+        // The sender contents shown on display.
+        HBufC* iSenderDisplayText;
+        
+        // DialData.
+        CAiwDialDataExt* iDialData;
+
+        // Possible callback number, owned.
+        HBufC* iCallbackNumber; 
+        CSchemeHandler* iSchemeHandler;
+
+        // Contains information of the VoIP profiles.
+        CFindItemVoIPExtension* iFindItemVoIPExtension;
+
+        // Contains information of MMS support
+        TBool iMMSFeatureSupported;
+
+        // Contains information of Audio Messaging support
+        TBool iAudioMessagingFeatureSupported;
+
+        // Contains information of Email over SMS support
+        TBool iEmailOverSmsFeatureSupported;
+
+        // Contains information of MMS support
+        TBool iEmailUiFeatureSupported;
+
+        // Contains information of the internet call support
+        TBool iVoIPFeatureSupported;
+
+        // A handle to a dynamically loadable DLL.
+        RLibrary iMPEngineDll;
+
+        // Has the Npd Api DLL already been loaded.
+        TBool iMPEngineDllLoaded;
+
+        // Loads MPEngine Api DLL dynamically to memory.
+        CCommonUiMPEngineApiLoader* iMPEngineApi;
+                 
+        /**
+        * Menu item flags
+        */
+        TInt iMenuItemFlags;
+        MPBAiwNotify iCallback;
+   };
+
+#endif      // FINDITEMMENU_H
+
+// End of File