plugins/contacts/symbian/contactsmodel/cntplsql/inc/cpcskeymap.h
changeset 0 876b1a06bc25
child 5 603d3f8b6302
--- /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 <QLocale>
+#if defined(USE_ORBIT_KEYMAP)
+#include <QList>
+#include <hbinputdef.h>	// HbKeyboardType
+#include <hbinputlanguage.h>
+#endif
+#include <e32base.h>
+
+// 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<HbInputLanguage> 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<QString> 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