diff -r 000000000000 -r 876b1a06bc25 plugins/contacts/symbian/contactsmodel/cntplsql/inc/cpcskeymap.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugins/contacts/symbian/contactsmodel/cntplsql/inc/cpcskeymap.h Wed Aug 25 15:49:42 2010 +0300 @@ -0,0 +1,194 @@ +/* +* Copyright (c) 2009 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: Class to hold the character to key mappings and provide +* conversion of strings to their numerical mappings. +* +*/ + +#ifndef __CPCSKEYMAP_H__ +#define __CPCSKEYMAP_H__ + + +// If this macro is defined, Orbit code is used to build the keymap. +// But this might crash at startup for unknown reason. +// +// If macro is not defined, a hardcoded keymap is used. That code does not +// crash, but it supports just a limited range of characters. +#define USE_ORBIT_KEYMAP + +// If this macro is defined, the hardcoded keymap contains also Thai characters +#define THAI_KEYMAP + +// INCLUDES +#include +#if defined(USE_ORBIT_KEYMAP) +#include +#include // HbKeyboardType +#include +#endif +#include + +// FORWARD DECLARATIONS +class QString; +class QChar; + + +// CLASS DECLARATION +NONSHARABLE_CLASS(CPcsKeyMap) : public CBase + { + public: + /** + * Destructor + */ + virtual ~CPcsKeyMap(); + + public: // New functions + /** + * Maps the given string using the key map. + * aSource String to be converted + * returns Conversion result, ownership is transferred + */ + HBufC* GetMappedStringL(const TDesC& aSource) const; + + /** + * Maps the given string using the key map. + * aSource String to be converted + * returns Conversion result + * + * Overloaded version using QString. + */ + QString GetMappedString(QString aSource) const; + + /** + * Computes the upper and lower limits, that can be put into SQL SELECT + * statement, from the string. + * aString Only contains valid characters (for 12-key keymap this means + * 0..9, 'a', 'b', 'f'). This is fulfilled if aString is output from + * GetMappedStringL or GetMappedString, or a sub-string of the output. + * aLowerLimit Lower limit + * aUpperLimit Upper limit + * returns KErrNone if successful + */ + TInt GetNumericLimits(QString aString, + QString& aLowerLimit, + QString& aUpperLimit) const; + +#if defined(USE_ORBIT_KEYMAP) + /* + * Return the separator character. + */ + QChar Separator() const; +#endif + + public: // Pure virtual functions + virtual const QChar ArrayIndexToMappedChar(TInt aArrayIndex) const = 0; +#if !defined(USE_ORBIT_KEYMAP) + virtual const QChar UseHardcodedKeyMap(const QChar input) const = 0; +#endif + + private: // Pure virtual functions + virtual TInt ComputeValue(QString aString, + TBool aUpperLimit, + QString& aValue) const = 0; + +#if defined(USE_ORBIT_KEYMAP) + protected: // Virtual functions + virtual QList SelectLanguages(); + + private: // Virtual functions + virtual void SetHardcodedCharacters(); +#endif + + private: // Virtual functions + /** + * Returns ETrue if characters that are mapped to certain specific keys, + * should be skipped. + */ + virtual TBool DetermineSpecialCharBehaviour(QString aSource) const; + + virtual TBool ShouldSkipChar(QChar aChar, TBool aSkipHashStar) const; + + protected: // Constructors + /** + * Constructor + */ + CPcsKeyMap(TInt aAmountOfKeys, QChar aPadChar, TInt aMaxKeysStoredInDb); + + /** + * Second phase constructor + */ +#if defined(USE_ORBIT_KEYMAP) + void ConstructL(HbKeyboardType aKeyboardType); +#else + void ConstructL(); +#endif + + private: // New functions +#if defined(USE_ORBIT_KEYMAP) + void InitKeyMappings(); + + /** + * Construct mappings between keys and characters for all languages. + */ + void ConstructLanguageMappings(HbKeyboardType aKeyboardType); + + /** + * Returns ETrue if this language is supported + */ + TBool IsLanguageSupported(QLocale::Language aLanguage) const; + + /** + * Returns the key into which the given character is mapped. + */ + const QChar MappedKeyForChar(const QChar aChar) const; +#endif // #if defined(USE_ORBIT_KEYMAP) + +#if defined(USE_ORBIT_KEYMAP) + protected: + // One QString for each key of the keyboard. + // Each contains all the characters that can originate from that key, + // considering the languages available on the device. + // + // 12-key keymap has keys 1-9,0,*,#. + // iKeyMapping[0] has mappings for 1-key, iKeyMapping[1] for 2-key, ... + // iKeyMapping[8] for 9-key, iKeyMapping[9] for 0-key, + // iKeyMapping[10] for *-key, iKeyMapping[11] for #-key. + // + // Qwerty keymap has keys q, w, e, r, ... + // iKeyMapping[0] has mappings for q-key, iKeyMapping[1] for w-key, ... + QList iKeyMapping; + + // Characters that have been hardcoded to certain keys, regardless of + // the actual keymaps. + QString iHardcodedChars; + + private: // Data + // How many keys (not characters) the keymap has + const TInt iAmountOfKeys; + + // Unmapped (unknown) characters are mapped to this + const QChar iPadChar; +#endif // #if defined(USE_ORBIT_KEYMAP) + + // Largest amount of keypresses that can be stored in predictive search + // table, using this keyboard. + const TInt iMaxKeysStoredInDb; + + // For unit testing + friend class UT_CPcsKeyMap; + }; + +#endif // __CPCSKEYMAP_H__ + +// End of file