phoneuis/dialer/inc/cdialer.h
branchRCL_3
changeset 62 5266b1f337bd
child 81 c26cc2a7c548
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/dialer/inc/cdialer.h	Wed Sep 01 12:30:10 2010 +0100
@@ -0,0 +1,512 @@
+/*
+* Copyright (c) 2007 - 2010 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 CDialer class.
+*
+*/
+
+
+
+#ifndef CDIALER_H
+#define CDIALER_H
+
+//  INCLUDES
+#include <coecntrl.h>
+#include <coemain.h>
+
+#include <peninputsrveventhandler.h>
+#include <peninputclient.h>
+#include "mnumberentry.h"
+#include "mphoneqwertymodeobserver.h"
+
+// CONSTANTS
+
+// FORWARD DECLARATIONS
+class CEikButtonGroupContainer;
+class CDialerKeyPadContainer;
+class CDialerNumberEntry;
+class MNumberEntry;
+class CEikMenuPane;
+class CEikonEnv;
+class CAknEdwinState;
+class MNumberEntryObserver;
+class CDialingExtensionInterface;
+class CDialingExtensionObserver;
+class CDialerToolbarContainer;
+class MPhoneDialerController;
+
+// CLASS DECLARATION
+
+/**
+*  CDialer class.
+*
+*  @lib dialer.lib
+*  @since Series60_5.0
+*
+*  Description:
+*   Dialer is used in two applications, telephony and video telephony.
+*
+*   In Telephony dialer handles number (number/sip address) input from 
+*   user via touch screen, VKB or hw keyboard (ITU-T and QWERTY).
+*
+*   From host application dialer requires:
+*   - View/container as CCoeControl
+*
+* 
+*  Usage:
+*
+
+    // Hide status pane.
+    if ( Layout_Meta_Data::IsLandscapeOrientation() )
+        {
+        static_cast<CAknAppUi*>( CEikonEnv::Static()->EikAppUi())->
+            StatusPane()->MakeVisible( ETrue);
+        }
+    else
+        {
+        static_cast<CAknAppUi*>( CEikonEnv::Static()->EikAppUi())->
+            StatusPane()->MakeVisible( EFalse );
+        }
+
+    // Calculate dialer area:
+    TRect screenRect( 
+        TPoint( 0, 0 ), 
+        iCoeEnv->ScreenDevice()->SizeInPixels() );   
+
+    TAknLayoutRect appRect;
+    appRect.LayoutRect( 
+        screenRect, AknLayout::application_window( screenRect );
+
+    TAknLayoutRect mainRect;
+    mainRect.LayoutRect( 
+        appRect.Rect(), 
+        AknLayout::main_pane( appRect.Rect(), 0, 1, 0 ) );
+
+    TRect mainPane( mainRect.Rect() );
+
+    // Reduce the space that CBA need from the rect
+    CEikButtonGroupContainer cba = iEikEnv.AppUiFactory()->Cba();
+    TRect mainPane( aRect );    
+    cba->ReduceRect( mainPane );
+
+    // Create dialer from container (CCoeControl) that created
+    // dialer window (CreateWindowL).
+
+
+*  In telephony dialer:
+
+    // Create dialer.
+    CDialer* dialer = CDialer::NewL( *this, aDialerArea );
+
+    // Open dialer
+    // Open and show dialer
+    iDialer->CreateNumberEntry();
+
+    // methods in MNumberEntry are available to contol dialer and
+    // get/set text in number entry.
+    
+    // Close dialer
+    iDialer->RemoveNumberEntry( );
+    // Delete dialer
+    delete dialer;
+*
+*/
+NONSHARABLE_CLASS(CDialer) : 
+	public CCoeControl, 
+	public MNumberEntry, 
+	public MCoeControlObserver,
+	public MPhoneQwertyModeObserver,
+    public MPenUiActivationHandler
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * Two phase constructor
+        * @param aContainer Parent container
+        * @param aRect Area to use for dialer
+        * @param aController Dialer controller providing state data for dialer
+        * @return New instance of Dialer
+        */
+        IMPORT_C static CDialer* NewL( const CCoeControl& aContainer,
+                                       const TRect& aRect,
+                                       MPhoneDialerController* aController );
+
+        /**
+        * Destructor.
+        */
+        IMPORT_C virtual ~CDialer();
+
+    public: // New functions
+
+        /**
+        * Return MNumberEntry API of Dialer
+        * @return Pointer to MNumberEntry implementation
+        */
+        IMPORT_C MNumberEntry* NumberEntry();
+
+        /**
+        * Set number entry observer.
+        */
+        IMPORT_C void SetNumberEntryObserver( MNumberEntryObserver& aObserver );
+
+        /**
+        * Sets controller of the dialer. Controller is responsible of providing
+        * toolbar functions, text prompt, etc, as appropriate for the curret dialer state.
+        */
+        IMPORT_C void SetControllerL( MPhoneDialerController* aController );
+
+        /**
+        * Gets current controller of the dialer.
+        */
+        IMPORT_C MPhoneDialerController* Controller();
+        
+        /**
+         * Returns pointer to easydialing interface. This can be NULL if
+         * easydialing is not present in device, so value must be checked
+         * before using the interface.
+         * 
+         * @return  Pointer to easydialing interface
+         */
+        IMPORT_C CDialingExtensionInterface* GetEasyDialingInterface() const;
+        
+        /**
+         * Toolbar of the easydialing layout is owned by the Dialer.
+         * Calling this methods updates status of its buttons.
+         */
+        IMPORT_C void UpdateToolbar();
+        
+        /**
+         * Updates number entry editor to correct state. State depends on
+         * qwerty availability and easydialing and voip settings. 
+         */
+        void UpdateNumberEntryConfiguration();
+        
+		
+		/**
+		 * Relayout and draw control. Also updates toolbar.
+		 */
+		IMPORT_C void RelayoutAndDraw();
+
+    public: // from MNumberEntry 
+
+        /**
+        * Sets number entry active.
+        */
+        void CreateNumberEntry();
+        
+        /**
+        * Return pointer to number entry
+        * @return The NE.
+        */
+        CCoeControl* GetNumberEntry( ) const;
+        
+        /**
+        * Query, is number entry used.
+        * @return ETrue is NE is used.
+        */
+        TBool IsNumberEntryUsed( ) const;
+        
+        /**
+        * This disables NE drawing but doesn't empty the component.
+        * @param aVisibility NE visible or not.
+        */
+        void SetNumberEntryVisible( 
+            const TBool& aVisibility = ETrue );
+        
+        /**
+        * Set Number Entry text.
+        * @param aDesC The text.
+        */
+        void SetTextToNumberEntry( const TDesC& aDesC );
+        
+        /**
+        * Get Number Entry Text.
+        * @param aDes The text.
+        */
+        void GetTextFromNumberEntry( TDes& aDes );
+        
+        /**
+        * Removes NE and empties the buffer.
+        */
+        void RemoveNumberEntry( );
+        
+        /**
+        * Set number entry's editor mode.
+        * @param aMode for number editor input mode.
+        * @return Input mode of the editor.
+        */
+        TInt ChangeEditorMode( TBool aDefaultMode = EFalse );
+        
+        /**
+        * Open VKB
+        */
+        void OpenVkbL();
+        
+        /**
+        * Get number entry's editor mode.
+        * @return Input mode of the editor.
+        */
+        TInt GetEditorMode() const;
+
+        /**
+        * Resets number entry editor to default values.
+        */
+        void ResetEditorToDefaultValues();
+        
+        /**
+        * Set number entry's prompt text.
+        * @param aPromptText.
+        */        
+        void SetNumberEntryPromptText( const TDesC& aPromptText );
+        
+        /**
+        * Enable or disable tactile feedback. 
+        * @param aEnable.
+        */             
+        void EnableTactileFeedback( const TBool aEnable );
+
+        /**
+        * Handle Qwerty mode change.
+        * @param aMode 0 = off, 1 = on
+        */
+        IMPORT_C void HandleQwertyModeChange( TInt aMode );
+
+        /**
+        * @see MIdleQwertyModeObserver.
+        */
+        IMPORT_C void HandleKeyboardLayoutChange();
+
+    private: // Functions from MCoeControlObserver
+        
+        void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType );
+        
+    private:  // Functions from CCoeControl
+        
+        /**
+        * @see CCoeControl
+        */
+        void SizeChanged();
+        
+        /**
+        * @see CCoeControl
+        */
+        void PositionChanged();
+
+        /**
+        * @see CCoeControl
+        */
+        TInt CountComponentControls() const;
+        
+        /**
+        * @see CCoeControl
+        */
+        CCoeControl* ComponentControl( TInt aIndex ) const;
+        
+        /**
+        * @see CCoeControl
+        */
+        void Draw( const TRect& aRect ) const;
+        
+        /**
+        * @see CCoeControl
+        */
+        void FocusChanged( TDrawNow aDrawNow );
+                
+        /**
+        * @see CCoeControl
+        */        
+        void MakeVisible( TBool aVisible );  
+        
+        /**
+        * @see CCoeControl
+        */ 
+        void PrepareForFocusGainL();
+        
+        /**
+        * @see CCoeControl
+        */
+        void HandleResourceChange( TInt aType );
+        
+        /**
+        * @see CCoeControl
+        */
+        void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+              
+        
+    private:
+
+        /**
+        * Constructor
+        */
+        CDialer();
+
+        /**
+        * 2nd phase constructor.
+        * @param aContainer Parent container
+        * @param aRect Area to use for dialer
+        * @param aController Dialer controller providing state data for dialer 
+        */
+        void ConstructL( const CCoeControl& aContainer, 
+            const TRect& aRect,
+            MPhoneDialerController* aController );
+        
+        /**
+        * Load resource file.
+        */
+        void LoadResourceL();
+        
+        /**
+        * Unload resource file.
+        */
+        void UnLoadResources();
+        
+        /**
+        * @see CCoeControl::ComponentControl()
+        * @param aIndex control index
+        */
+        CCoeControl* ComponentControlForDialerMode( const TInt aIndex ) const;
+        
+        /**
+         * Returns edwin state
+         * @return Pointer to CAknEdwinState
+         */
+        CAknEdwinState* EdwinState() const;
+        
+        /** Editor types. */
+        enum TEditorType
+            {
+            ENumericEditor,
+            EAlphanumericEditor,
+            EVirtualKeyboardEditor
+            };
+                
+        /**
+         * Updates editor flags for virtual
+         * keyboard.
+         */
+        void UpdateEdwinState( TEditorType aType );
+
+        /**
+         * Disables numeric key sounds, or removed disabling.
+         */
+        void DisableNumericKeySounds( TBool aSounds );
+
+        /**
+         * Loads easydialing plugin. If loading fails (for instance when
+         * easydialing feature flag is not enabled in the device),
+         * iEasyDialer will be NULL after this function returns.
+         */
+        void LoadEasyDialingPlugin();
+        
+        /**
+         * Checks if Easy dialing is available, allowed, and currently enabled.
+         * 
+         * @return  ETrue if Easy Dialing is enabked 
+         */
+        TBool EasyDialingEnabled() const;
+        
+        /**
+         * Layout number entry component. The used layout depends on
+         * the availability and state of Easy dialing. 
+         */
+        void LayoutNumberEntry( const TRect& aParent, TInt aVariety );
+        
+    public:
+
+        /**
+         * @see MPenUiActivationHandler
+         */
+        void OnPeninputUiDeactivated();
+
+        /**
+         * @see MPenUiActivationHandler
+         */        
+        void OnPeninputUiActivated();
+        
+    private:    // Data
+        
+        // Component controls of dialer.
+        RPointerArray<CCoeControl> iComponentControls;
+          
+        // Keypad container  - owned
+        CDialerKeyPadContainer* iKeypadArea;
+             
+        // Number entry container - owned
+        CDialerNumberEntry* iNumberEntry;
+        
+        // Is Number entry (e.g. dialer) being used at the moment
+        TBool iIsUsed;
+        
+        // Resource 
+        TInt iResourceOffset;
+        
+        // Is virtual key board open
+        TBool iVirtualKeyBoardOpen;
+
+        /**
+         * Easydialing plugin. This can be NULL if easydialing feature flag
+         * is not enabled in the device.
+         * Own.
+         */
+        CDialingExtensionInterface* iEasyDialer;
+        
+        /**
+         * Observer for Easydialing.
+         * Own.
+         */
+        CDialingExtensionObserver* iDialingExtensionObserver;
+        
+        /**
+         * Toolbar used in Easy dialing layout.
+         * Own.
+         */
+        CDialerToolbarContainer* iToolbar;
+        
+        /**
+         * Controller rules the mode of the Dialer (e.g. normal, DTMF, restricted...)
+         * Not owned.
+         */
+        MPhoneDialerController* iController;
+        
+        /*
+         * Is qwerty mode on.
+         */
+        TBool iQwertyMode;
+        
+        /**
+         * Is hybrid keyboard mode used. 
+         */
+        TBool iHybridKeyboardMode;
+
+        /**
+         * Server wich sends events via callback when the virtual keyboard is opened/closed.
+         */		
+        RPeninputServer iPeninputServer;
+
+        /**
+         * Current type of the editor field. The field is numeric unless
+         * the device is in QWERTY mode and there is some consumer (like VoIP, EasyDialing)
+         * for the alphabetic characters.
+         */
+        TEditorType iEditorType;
+        
+        /*
+         * ETrue if numeric keysounds are disabled. They are disabled when number
+         * key should produce DTMF tone.
+         */
+        TBool iNumericKeySoundsDisabled;
+    };
+
+#endif      // CDIALER_H
+
+// End of File