diff -r c84cf270c54f -r 8871b09be73b phoneuis/dialer/inc/cdialerkeypadlabelmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/inc/cdialerkeypadlabelmanager.h Fri Feb 19 22:50:26 2010 +0200 @@ -0,0 +1,222 @@ +/* +* Copyright (c) 2009, 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: Helper class to handle virtual keypad text labels +* +*/ + +#ifndef CDIALERKEYPADLABELMANAGER_H +#define CDIALERKEYPADLABELMANAGER_H + +// INCLUDES +#include +#include +#include "cdialercenrepwrapper.h" + + +// FORWARD DECLARATIONS +class CPtiEngine; +class CEnvironmentChangeNotifier; + + +// CALLBACK INTERFACE +NONSHARABLE_CLASS( MDialerKeyPadLabelManagerCallback ) + { +public: + /** + * This event is given when change in system settings has + * caused key label texts to change. All the TPtrC descriptors + * previously returned by CDialerKeyPadLabelManager become + * dangling references when this happens and they must not + * be used after this method is called. + */ + virtual void KeyLabelsChanged() = 0; + }; + + +// CLASS DECLARATION + +/** + * CDialerKeyPadLabelManager + * + */ +NONSHARABLE_CLASS( CDialerKeyPadLabelManager ) : public CBase, public MDialerCenRepObserver + { +public: // Constructors and destructor + + /** + * Destructor. + */ + ~CDialerKeyPadLabelManager(); + + /** + * Two-phased constructor. + */ + static CDialerKeyPadLabelManager* NewL( CCoeEnv& aCoeEnv, + MDialerKeyPadLabelManagerCallback& aObserver ); + + /** + * Two-phased constructor. + */ + static CDialerKeyPadLabelManager* NewLC( CCoeEnv& aCoeEnv, + MDialerKeyPadLabelManagerCallback& aObserver ); + +private: // consturctors + + /** + * Constructor for performing 1st stage construction + */ + CDialerKeyPadLabelManager( CCoeEnv& aCoeEnv, + MDialerKeyPadLabelManagerCallback& aObserver ); + + /** + * Symbian default constructor for performing 2nd stage construction + */ + void ConstructL(); + +public: // methods + + /** + * Get number label for the button. + * @return Reference to the number text in current global number mode. + * The reference is valid until this label manager is deleted or + * global number mode is changed. Callback KeyLabelsChanged() + * is given to observer in the latter case. + */ + TPtrC ButtonNumLabel( TInt aIndex ) const; + + /** + * Get first row alphabet label for the button + * @return Reference to descriptor containing text for the first + * row of alphabets to be shown on the key. The reference is + * valid until this label manager is deleted or input language + * is changed. Callback KeyLabelsChanged() + * is given to observer in the latter case. + */ + TPtrC ButtonFirstAlphaLabel( TInt aIndex ) const; + + /** + * Get second row alphabet label for the button + * @return Reference to descriptor containing text for the first + * row of alphabets to be shown on the key. The reference is + * valid until this label manager is deleted or input language + * is changed. Callback KeyLabelsChanged() + * is given to observer in the latter case. + */ + TPtrC ButtonSecondAlphaLabel( TInt aIndex ) const; + +public: // from MDialerCenRepObserver + + /** + * Handle change in one of the observed repositories. + */ + void HandleRepositoryChange( TUid aRepository, TUint32 aId ); + +private: // methods + + /** + * Handle environment change event. We are interested about digit + * type changes in locale data. + */ + void HandleEnvChange(); + + /** + * Static wrapper for HandleEnvChange() function to be passed in TCallBack object. + */ + static TInt EnvChangeCallback( TAny* aSelfPtr ); + + /** + * Update button text labels to match current input and UI language. + */ + void UpdateTextLabelsL(); + + /** + * Update button number labels to use current global number mode. + */ + void UpdateNumLabelsL(); + + /** + * Get the full path of the keypad resource file to be used in current situation. + * @param aFileName On return, contains the file name. Caller is responsible + * of supplying large enough buffer. Maximum path length + * in Symbian is 256 characters. + */ + void GetResourceFileNameL( TDes& aFileName ); + + /** + * Returns code of the script to be used in current situation. + * It depends on the current input language, current UI language, and all + * available input languages on the device. + */ + TInt LabelScriptToUseL() const; + + /** + * Returns code of the Chinese script to be used in key labels. + * This depends on the currently active Chinese adaptive search mode. + * This should be used only when current input language is Chinese. + */ + TInt ChineseScriptToUseL() const; + +private: // data + + /** Control environment to use for resource management */ + CCoeEnv& iCoeEnv; + + /** Observer is notified when keypad labels are changed */ + MDialerKeyPadLabelManagerCallback& iObserver; + + /** PtiEngine instance is needed to find out available input languages */ + CPtiEngine* iPtiEngine; + + /** AknFep repository stores the current input language */ + CDialerCenRepWrapper* iAknFepRepository; + + /** Avkon repository stores the current Chinese matching mode */ + CDialerCenRepWrapper* iAvkonRepository; + + /** Helper to observe locale changes. Locale data contains digit type used for number labels. */ + CEnvironmentChangeNotifier* iEnvChangeNotifier; + + /** + * Array of number labels. Indexing matches that of the + * CDialerKeypadContainer::iButtons array. Owned. + */ + CDesCArray* iKeypadNumLabelArray; + + /** + * Array of first row alphabet labels. Indexing matches that of the + * CDialerKeypadContainer::iButtons array. Owned. + */ + CDesCArray* iKeypadFirstLabelArray; + + /** + * Array of second row alphabet labels. Indexing matches that of the + * CDialerKeypadContainer::iButtons array. Owned. + */ + CDesCArray* iKeypadSecondLabelArray; + + /** + * Offset value of currently loaded keypad resource. + * 0 if there's no loaded resource. + */ + TInt iResourceOffset; + + /** Script ID of the current keypad labels */ + TInt iLabelScriptInUse; + + /** Digit type currently used for keypad number labels */ + TDigitType iDigitTypeInUse; + }; + +#endif // CDIALERKEYPADLABELMANAGER_H +