14 * Description: |
14 * Description: |
15 * |
15 * |
16 */ |
16 */ |
17 #include <QObject> |
17 #include <QObject> |
18 #include <QLocale> |
18 #include <QLocale> |
19 #include <hbinputkeymapfactory.h> |
19 #include <QHash> |
20 #include <hbinputkeymap.h> |
|
21 #include <hbinputsettingproxy.h> |
20 #include <hbinputsettingproxy.h> |
|
21 #include <QStringList> |
22 |
22 |
23 #include "logspredictivetranslator.h" |
23 #include "logspredictivetranslator.h" |
|
24 #include "logspredictivelatin12keytranslator.h" |
|
25 #include "logspredictivethai12keytranslator.h" |
24 #include "logslogger.h" |
26 #include "logslogger.h" |
25 |
27 |
26 LogsPredictiveTranslator* LogsPredictiveTranslator::mInstance = 0; |
28 LogsPredictiveTranslator* LogsPredictiveTranslator::mInstance = 0; |
27 |
29 |
28 |
30 |
31 // ----------------------------------------------------------------------------- |
33 // ----------------------------------------------------------------------------- |
32 // |
34 // |
33 LogsPredictiveTranslator* LogsPredictiveTranslator::instance() |
35 LogsPredictiveTranslator* LogsPredictiveTranslator::instance() |
34 { |
36 { |
35 if ( !mInstance ) { |
37 if ( !mInstance ) { |
36 mInstance = new LogsPredictiveTranslator(); |
38 HbInputLanguage lang = |
|
39 HbInputSettingProxy::instance()->globalInputLanguage(); |
|
40 switch( lang.language() ) { |
|
41 case QLocale::Thai: |
|
42 mInstance = new LogsPredictiveThai12KeyTranslator(); |
|
43 break; |
|
44 default: |
|
45 mInstance = new LogsPredictiveLatin12KeyTranslator(); |
|
46 break; |
|
47 } |
37 } |
48 } |
38 return mInstance; |
49 return mInstance; |
39 } |
50 } |
40 |
51 |
41 // ----------------------------------------------------------------------------- |
52 // ----------------------------------------------------------------------------- |
55 // |
66 // |
56 LogsPredictiveTranslator::LogsPredictiveTranslator() |
67 LogsPredictiveTranslator::LogsPredictiveTranslator() |
57 { |
68 { |
58 LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::\ |
69 LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::\ |
59 LogsPredictiveTranslator()" ) |
70 LogsPredictiveTranslator()" ) |
60 HbInputLanguage lang = |
|
61 HbInputSettingProxy::instance()->globalInputLanguage(); |
|
62 mKeyMap = HbKeymapFactory::instance()->keymap( lang.language(), |
|
63 lang.variant() ); |
|
64 |
|
65 LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\ |
71 LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\ |
66 LogsPredictiveTranslator()" ) |
72 LogsPredictiveTranslator()" ) |
67 } |
73 } |
68 |
74 |
69 |
75 |
74 LogsPredictiveTranslator::~LogsPredictiveTranslator() |
80 LogsPredictiveTranslator::~LogsPredictiveTranslator() |
75 { |
81 { |
76 LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::\ |
82 LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::\ |
77 ~LogsPredictiveTranslator()" ) |
83 ~LogsPredictiveTranslator()" ) |
78 mInstance = 0; |
84 mInstance = 0; |
|
85 mKeyMap = 0; |
79 LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\ |
86 LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\ |
80 ~LogsPredictiveTranslator()" ) |
87 ~LogsPredictiveTranslator()" ) |
81 |
88 |
82 } |
89 } |
83 |
|
84 // ----------------------------------------------------------------------------- |
|
85 // LogsPredictiveTranslator::translate() |
|
86 // ----------------------------------------------------------------------------- |
|
87 // |
|
88 const QChar LogsPredictiveTranslator::translate( const QChar character ) const |
|
89 { |
|
90 const HbMappedKey* mappedKey = mKeyMap->keyForCharacter( HbKeyboardVirtual12Key, |
|
91 character ); |
|
92 if (!mappedKey) { |
|
93 QString decomposed = character.decomposition(); |
|
94 if (decomposed.isEmpty()) { |
|
95 return character; |
|
96 } |
|
97 return translate (decomposed.at(0)); |
|
98 } |
|
99 return mappedKey->keycode; |
|
100 } |
|
101 |
|
102 |
90 |
103 // ----------------------------------------------------------------------------- |
91 // ----------------------------------------------------------------------------- |
104 // LogsPredictiveTranslator::translate() |
92 // LogsPredictiveTranslator::translate() |
105 // ----------------------------------------------------------------------------- |
93 // ----------------------------------------------------------------------------- |
106 // |
94 // |
112 |
100 |
113 count = count == -1 ? name.length() : count; |
101 count = count == -1 ? name.length() : count; |
114 QString result; |
102 QString result; |
115 const QChar* content = name.data(); |
103 const QChar* content = name.data(); |
116 int index = 0; |
104 int index = 0; |
117 while( index < name.length() && index < count ) { |
105 while( index < count ) { |
118 result.insert( index++, translate( *content++ ) ); |
106 QChar ch = translateChar( *content++ ); |
|
107 if ( !ch.isNull() ) { |
|
108 result.append( ch ); |
|
109 } |
|
110 index++; |
119 } |
111 } |
120 |
|
121 LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::translate()" ) |
112 LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::translate()" ) |
122 return result; |
113 return result; |
123 } |
114 } |
124 |
115 |
125 // ----------------------------------------------------------------------------- |
116 // ----------------------------------------------------------------------------- |
139 } else { |
130 } else { |
140 if ( !optimize ) { |
131 if ( !optimize ) { |
141 QString translatedText = translate( text, pattern.length() ); |
132 QString translatedText = translate( text, pattern.length() ); |
142 matchCount = translatedText == pattern ? matchCount : 0; |
133 matchCount = translatedText == pattern ? matchCount : 0; |
143 } else { |
134 } else { |
144 matchCount = translate( *text.data() ) == *pattern.data() ? |
135 matchCount = translateChar( *text.data() ) == *pattern.data() ? |
145 matchCount : 0; |
136 matchCount : 0; |
146 } |
137 } |
147 } |
138 } |
148 |
139 |
149 LOGS_QDEBUG_2( "logs [FINDER] matchCount=", matchCount ) |
140 LOGS_QDEBUG_2( "logs [FINDER] matchCount=", matchCount ) |