/*
* Copyright (c) 2003-2006 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: PtiLanguage class definitions.
*
*/
#ifndef _PTI_LANGUAGE_H
#define _PTI_LANGUAGE_H
// INCLUDES
#include <e32base.h>
#include <f32file.h>
#include <barsc.h>
#include <barsread.h>
#include "PtiDefs.h"
const TInt KMaxMultitapResourceFileName = 20;
const TInt KMaxQwertyResourceFileName = 32;
// FORWARD DECLARATIONS
class MPtiKeyMappings;
class MPtiCore;
class CPtiCore;
class CPtiKeyMapData;
class CPtiKeyMapDataFactory;
/**
* An item in list used for binding a core object to input mode.
*/
class TPtiCoreBinding
{
public:
TInt iInputMode;
MPtiCore* iCore;
};
/*
* Helper class for storing keymapping pointers.
*/
class TPtiKeyMappingsHolder
{
public:
TPtiKeyMappingsHolder();
~TPtiKeyMappingsHolder();
void Clear();
MPtiKeyMappings* iKeyMappings;
MPtiKeyMappings* iQwertyKeyMappings;
MPtiKeyMappings* iHalfQwertyMappings;
};
/**
* Client side interface for querying PtiEngine language related attributes.
* All PtiEngine client side API methods related to handling languages access
* languages through this interface class.
*/
class MPtiLanguage
{
public:
/**
* Returns a boolean value indicating whether this language supports
* requested input mode.
*
* @param aMode A input mode to be queried.
* @return ETrue if this language supports requested input mode.
* EFalse otherwise.
*/
virtual TBool HasInputMode(TPtiEngineInputMode aMode) const = 0;
/**
* Returns list of all inputmodes currently supported by this language.
*
* @param aResult List of supported input modes will be stored here.
*/
virtual void GetAvailableInputModesL(CArrayFix<TInt>* aResult) = 0;
/**
* Returns Symbian OS language code for this language.
*
* @return Symbian OS language code.
*/
virtual TInt LanguageCode() const = 0;
/**
* Returns localized name for this language.
*
* @return A constant pointer to localized language name.
*/
virtual TPtrC LocalizedName() const = 0;
};
/**
* Implementation class for a PtiEngine language. This class is used
* mainly in PtiEngine and core objects code and it implements clients side
* language interface class.
* PtiEngine maintains language list containing instances of this class.
* CPtiCoreLanguage class also maintains list of <core <-> input mode> bindings.
*/
NONSHARABLE_CLASS(CPtiCoreLanguage) : public CBase, public MPtiLanguage
{
public:
IMPORT_C static CPtiCoreLanguage* NewL();
IMPORT_C ~CPtiCoreLanguage();
/**
* Sets multitapping keymappings.
*
* @param aMappings Pointer to keymappings object to be set.
*/
IMPORT_C void SetKeyMappings(MPtiKeyMappings* aMappings);
/**
* Sets qwerty keymappings.
*
* @param aMappings Pointer to keymappings object to be set.
*/
IMPORT_C void SetQwertyKeyMappings(MPtiKeyMappings* aMappings);
/**
* Sets Symbian OS language code for this language.
*
* @param aCode Language code to be set.
*/
IMPORT_C void SetLanguageCode(TInt aCode);
/**
* Returns pointer to multitapping keymappings object.
*
* @return Pointer to current multitapping keymappings.
* NULL if no multitapping keymappings available.
*/
IMPORT_C MPtiKeyMappings* GetKeymappings() const;
/**
* Returns pointer to qwerty keymappings object.
*
* @return Pointer to current qwerty keymappings.
* NULL if no qwerty keymappings available.
*/
IMPORT_C MPtiKeyMappings* GetQwertyKeymappings() const;
/**
* Resets current multitapping keymappings.
*/
IMPORT_C void ClearMultitapping();
/**
* Resets current qwerty keymappings.
*/
IMPORT_C void ClearQwerty();
/**
* Sets localized language name.
*
* @param aName Language name to be set.
*/
IMPORT_C void SetLocalizedName(const TDesC& aName);
/**
* Returns descriptor pointing to localized language name.
*
* @return Localoized language name descriptor.
*/
IMPORT_C TDes& LocalizedNameDes();
/**
* Returns core object for given input mode.
*
* @aMode Input mode to be queried.
* @return Pointer to core object.
* NULL if no core object is asigned to given input mode.
*/
IMPORT_C MPtiCore* GetCore(TPtiEngineInputMode aMode);
/**
* Sets core object for given input mode. If input mode already
* has a core object asigned to it, it will be replaced.
*
* @param aCore Pointer to core object
* @param aMode Input mode for core object.
*/
IMPORT_C void SetCore(MPtiCore *aCore, TPtiEngineInputMode aMode);
/**
* Returns an array of available input modes for this language object.
*
* @param aResult Resulting input mode list.
*/
IMPORT_C void GetAvailableInputModesL(CArrayFix<TInt>* aResult);
/**
* Returns an array of available input modes for this language object.
*
* @param aResult Resulting input mode list.
* @since 3.0
*/
IMPORT_C void GetAvailableInputModesL(RArray<TInt>& aResult);
/**
* Returns a boolean value indicating whether this language
* supports given input mode.
*
* @param aMode Input mode to be queried.
* @return ETrue if input mode is supported.
* EFalse otherwise.
*/
IMPORT_C TBool HasInputMode(TPtiEngineInputMode aMode) const;
/**
* Returns Symbian OS language code for this language object.
*
* @return Language code
*/
inline TInt LanguageCode() const;
/**
* Returns constant descriptor pointing to localized name for
* this language.
*
* @return Localized language name.
*/
inline TPtrC LocalizedName() const;
/**
* Returns a boolean value indicating whether given core object is
* already asigned to some input mode for this language.
*
* @param aCore A core object to be queried.
* @return ETrue if given core object is asigned to any input mode.
* EFalse otherwise.
*/
IMPORT_C TBool HasCore(MPtiCore* aCore) const;
/**
* Removes detachs given core object from all input modes it is attached to.
*
* @param aCore A core object to be detached.
*/
IMPORT_C void RemoveCore(MPtiCore* aCore);
/**
* Returns pointer to half qwerty keymappings object.
*
* @return Pointer to half qwerty keymappings.
* NULL if no half qwerty keymappings available.
*/
IMPORT_C MPtiKeyMappings* GetHalfQwertyKeymappings() const;
/**
* Sets half qwerty keymappings.
*
* @param aMappings Pointer to keymappings object to be set.
*/
IMPORT_C void SetHalfQwertyKeyMappings(MPtiKeyMappings* aMappings);
/**
* Resets current half qwerty keymappings.
*/
IMPORT_C void ClearHalfQwerty();
/**
* Sets keymap data factory class.
*
* @since S60 5.0
* @param aFactory A keymap data factory to be used.
*/
void SetKeyMapDataFactory(CPtiKeyMapDataFactory* aFactory);
/**
* Returns active data factory.
*
* @since S60 5.0
* @return A pointer to active data factory.
*/
IMPORT_C CPtiKeyMapDataFactory* DataFactory() const;
/**
* Returns raw keymap data object.
*
* @since S60 5.0
* @return A pointer to raw keymap data object.
*/
IMPORT_C CPtiKeyMapData* RawKeyMapData() const;
private:
CPtiCoreLanguage();
void ConstructL();
void Clear();
void LoadKeymappingsL() const;
CPtiCore* GetCoreForNumericMode() const;
void SetCoreLocal(MPtiCore *aCore, TPtiEngineInputMode aMode) const;
private:
TInt iLanguageCode;
TPtiKeyMappingsHolder* iHolder;
CPtiKeyMapDataFactory* iDataFactory; // Not owned
TBuf<KMaxLanguageNameLength> iLocalizedName;
mutable RArray<TPtiCoreBinding> iCores;
mutable CPtiKeyMapData* iKeyMapData; // Owns
};
#include <PtiLanguage.inl>
#endif // _PTI_LANGUAGE_H
// End of file