diff -r 41a7f70b3818 -r 5266b1f337bd phoneuis/dialer/inc/cdialer.h --- /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 +#include + +#include +#include +#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( CEikonEnv::Static()->EikAppUi())-> + StatusPane()->MakeVisible( ETrue); + } + else + { + static_cast( 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 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