williamr@2: /* williamr@2: * Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@2: * under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: * which accompanies this distribution, and is available williamr@2: * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: williamr@2: * Interface class providing information on available input languages williamr@2: * This header is exported williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: #ifndef __AKNINPUTLANGUAGEINFO_H__ williamr@2: #define __AKNINPUTLANGUAGEINFO_H__ williamr@2: williamr@2: // INCLUDES williamr@2: williamr@2: #include williamr@2: williamr@2: // For TBitFlags williamr@2: #include williamr@2: #include williamr@2: williamr@2: #include williamr@2: williamr@2: // Typedefs williamr@2: typedef TBuf<32> TAknLanguageName; williamr@2: williamr@2: williamr@2: // CLASS DECLARATIONS williamr@2: williamr@2: /** williamr@2: * Input language capabilities williamr@2: * williamr@2: */ williamr@2: class TAknInputLanguageCapabilities williamr@2: { williamr@2: public: williamr@2: /** williamr@2: * These indices are used to set/clear capabilities. williamr@2: * Terms: williamr@2: * - multitap refers to capability to enter alphabetic chars by pressing the same key repeatedly williamr@2: * - predictive refers to the device matching (non-multitap) keypresses with potential words williamr@2: * in a dictionary. That is, what words would map to the current set of keypad presses williamr@2: * williamr@2: * williamr@2: */ williamr@2: enum TAknInputLanguageCapabilityIndex williamr@2: { williamr@2: EMultitap = 0x00000000, williamr@2: EPredictive = 0x00000001 williamr@2: }; williamr@2: williamr@2: /** williamr@2: * C++ Constructor. Initializes the internal state to "no capabilities" williamr@2: */ williamr@2: IMPORT_C TAknInputLanguageCapabilities(); williamr@2: williamr@2: /** williamr@2: * Sets the capability at a given index index to the logical value passed williamr@2: * williamr@2: * @param aCapability which capability to set williamr@2: * @param aSet ETrue - enable the capability; EFalse - disable the capability williamr@2: */ williamr@2: IMPORT_C void AssignCapability( TInt aCapabilityIndex, TBool aSet ); williamr@2: williamr@2: /** williamr@2: * Tests a capability williamr@2: * williamr@2: * @param aCapability which capability to test williamr@2: * @return EFalse if the capability is not present; not EFalse otherwise williamr@2: */ williamr@2: IMPORT_C TBool HasCapability( TInt aCapabilityIndex ) const; williamr@2: williamr@2: /** williamr@2: * Sets all capabilities (existing and potential) williamr@2: */ williamr@2: IMPORT_C void SetAllCapabilities(); williamr@2: williamr@2: IMPORT_C TAknInputLanguageCapabilities FilteredCapabilities( TAknInputLanguageCapabilities& aFilter) const; williamr@2: williamr@2: IMPORT_C TBool HasAnySupport() const; williamr@2: williamr@2: private: williamr@2: // Holds the internal state williamr@2: TBitFlags32 iCapabilities; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: * Input Language Item class. williamr@2: * williamr@2: * This object bring together Symbian language code, a language name, and its capabilities williamr@2: * williamr@2: * This method is not meant to be derived from. williamr@2: * williamr@2: */ williamr@2: NONSHARABLE_CLASS(CAknInputLanguageItem) : public CBase williamr@2: { williamr@2: public: williamr@2: /** williamr@2: * static 2-stage construction of the object. The language name descriptor is copied williamr@2: * by the time the method returns. williamr@2: * williamr@2: * Normally this is constructed by the class that supplies the language information. It would williamr@2: * not normally be called by clients who want to find out about system input languages williamr@2: * williamr@2: * @param aLanguageCode Symbian OS language code williamr@2: * @param aName Language name to be attached to code williamr@2: * @param aCapabilities Sets the capabilities williamr@2: * @return Fully constructed input language item williamr@2: */ williamr@2: static CAknInputLanguageItem* NewL( TLanguage aLanguageCode, const TDesC& aName, TAknInputLanguageCapabilities aCapabilities ); williamr@2: williamr@2: /** williamr@2: * C++ destructor williamr@2: * williamr@2: */ williamr@2: IMPORT_C ~CAknInputLanguageItem(); williamr@2: williamr@2: IMPORT_C TLanguage LanguageCode() const; williamr@2: IMPORT_C TPtrC LanguageName() const; williamr@2: IMPORT_C TAknInputLanguageCapabilities Capabilities() const; williamr@2: williamr@2: private: williamr@2: /** williamr@2: * Sets only the langauge code williamr@2: */ williamr@2: CAknInputLanguageItem( TLanguage aLanguageCode); williamr@2: /** williamr@2: * 2nd stage construction. This sets the name and the capabilies williamr@2: */ williamr@2: void ConstructL( const TDesC& aName, TAknInputLanguageCapabilities aCapabilities ); williamr@2: williamr@2: private: williamr@2: TLanguage iLanguageCode; williamr@2: HBufC* iLanguageName; // Owned williamr@2: TAknInputLanguageCapabilities iCapabilities; williamr@2: TInt iSpare; // for expansion williamr@2: }; williamr@2: williamr@2: /** williamr@2: * williamr@2: * Class to hold a list of CAknInputLanguageItem objects williamr@2: * williamr@2: */ williamr@2: class CAknInputLanguageList : public CArrayPtrFlat, public MDesCArray williamr@2: { williamr@2: public: williamr@2: /** williamr@2: * C++ Constructor williamr@2: * williamr@2: */ williamr@2: IMPORT_C CAknInputLanguageList(TInt aGranularity); williamr@2: williamr@2: /** williamr@2: * Destructor williamr@2: * williamr@2: */ williamr@2: IMPORT_C ~CAknInputLanguageList(); williamr@2: williamr@2: public: // from MDesCArray williamr@2: IMPORT_C TInt MdcaCount() const; williamr@2: IMPORT_C TPtrC MdcaPoint(TInt aIndex) const; williamr@2: }; williamr@2: williamr@2: /** williamr@2: * williamr@2: * Input Language information interface. This object is instantiated to create a standard interface williamr@2: * to the native input language services. williamr@2: * williamr@2: */ williamr@2: class CAknInputLanguageInfo : public CBase williamr@2: { williamr@2: public: williamr@2: /** williamr@2: * This method returns the input capabilities of a language. The capability object can then williamr@2: * be queried to see what it is capable of. williamr@2: * williamr@2: * @param aLanguageId Symbian language code williamr@2: * @return a structure indicating what the language is capable of williamr@2: */ williamr@2: virtual TAknInputLanguageCapabilities LanguageCapabilitiesFromLanguage(TLanguage aLanguageId) = 0; williamr@2: williamr@2: /** williamr@2: * Get the language name that corresponds to the passed-in Symbian OS language code. williamr@2: * This name should be localized, or not, depending upon the policy decided for the product williamr@2: * williamr@2: * @param aLanguageCode - language code for the language whose name is required williamr@2: * @return TAknLanguageName - buffer containing williamr@2: */ williamr@2: virtual TAknLanguageName LanguageName( TLanguage aLanguageCode ) const = 0; williamr@2: williamr@2: /** williamr@2: * Provide a language list corresponding to the input list of SymbianOS language codes. williamr@2: * The order of the languages in the output list is that order implemented in the williamr@2: * interface object, and the order of the input list of language codes is ignored. williamr@2: * williamr@2: * @param aInputLanguageList Append to this list; williamr@2: * @param aLanguageCodeList Append only languages whose code is in this list. If Null is passed, then no language code filtering is done williamr@2: * @param aCapabilityFilter Append only languages with capabilities set in this filter. williamr@2: * If a filter with no capabilities whatsoever is passed, then all capabilities are included williamr@2: * williamr@2: */ williamr@2: virtual void AppendLanguagesL( williamr@2: CAknInputLanguageList* aInputLanguageList, williamr@2: CArrayFix* aLanguageCodeList, williamr@2: TAknInputLanguageCapabilities& aCapabilityFilter ) = 0; williamr@2: williamr@2: /** williamr@2: * Appends to an externally owned array of CAknInputLanguageItem-s. These can be interrogated to provide williamr@2: * information upon return. williamr@2: * williamr@2: * @param aInputLanguageList Passed-in array is appended to by this method williamr@2: */ williamr@2: virtual void AppendAvailableLanguagesL( CAknInputLanguageList* aInputLanguageList ) = 0; williamr@2: williamr@2: /** williamr@2: * Return a langauge that is suitable in the product for a URL input language williamr@2: * williamr@2: * @return TLanguage A language code for the designated URL language williamr@2: */ williamr@2: virtual TLanguage UrlLanguage() const = 0; williamr@2: }; williamr@2: williamr@2: /** williamr@2: * This factory class exists to supply an available input language interface williamr@2: */ williamr@2: class AknInputLanguageInfoFactory williamr@2: { williamr@2: public: williamr@2: /** williamr@2: * Factory method to return a generic object from which information on available williamr@2: * languages can be obtained. williamr@2: * williamr@2: * @return a pointer to a fully constructed object conformant to CAknInputLanguageInfo williamr@2: */ williamr@2: IMPORT_C static CAknInputLanguageInfo* CreateInputLanguageInfoL(); williamr@2: }; williamr@2: williamr@2: #endif // __AKNINPUTLANGUAGEINFO_H__ williamr@2: williamr@2: // End of File