diff -r 000000000000 -r 4a5361db8937 logsui/logscntfinder/src/logspredictivetranslator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/logscntfinder/src/logspredictivetranslator.cpp Tue May 04 12:39:37 2010 +0300 @@ -0,0 +1,153 @@ +/* +* 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: +* +*/ +#include +#include +#include +#include +#include + +#include "logspredictivetranslator.h" +#include "logslogger.h" + +LogsPredictiveTranslator* LogsPredictiveTranslator::mInstance = 0; + + +// ----------------------------------------------------------------------------- +// LogsPredictiveTranslator::instance() +// ----------------------------------------------------------------------------- +// +LogsPredictiveTranslator* LogsPredictiveTranslator::instance() +{ + if ( !mInstance ) { + mInstance = new LogsPredictiveTranslator(); + } + return mInstance; +} + +// ----------------------------------------------------------------------------- +// LogsPredictiveTranslator::deleteInstance() +// ----------------------------------------------------------------------------- +// +void LogsPredictiveTranslator::deleteInstance() +{ + delete mInstance; + mInstance = 0; +} + + +// ----------------------------------------------------------------------------- +// LogsPredictiveTranslator::LogsPredictiveTranslator() +// ----------------------------------------------------------------------------- +// +LogsPredictiveTranslator::LogsPredictiveTranslator() +{ + LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::\ +LogsPredictiveTranslator()" ) + HbInputLanguage lang = + HbInputSettingProxy::instance()->globalInputLanguage(); + mKeyMap = HbKeymapFactory::instance()->keymap( lang.language(), + lang.variant() ); + + LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\ +LogsPredictiveTranslator()" ) +} + + +// ----------------------------------------------------------------------------- +// LogsPredictiveTranslator::~LogsPredictiveTranslator() +// ----------------------------------------------------------------------------- +// +LogsPredictiveTranslator::~LogsPredictiveTranslator() +{ + LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::\ +~LogsPredictiveTranslator()" ) + mInstance = 0; + LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::\ +~LogsPredictiveTranslator()" ) + +} + +// ----------------------------------------------------------------------------- +// LogsPredictiveTranslator::translate() +// ----------------------------------------------------------------------------- +// +const QChar LogsPredictiveTranslator::translate( const QChar character ) const +{ + const HbMappedKey* mappedKey = mKeyMap->keyForCharacter( HbKeyboardVirtual12Key, + character ); + if (!mappedKey) { + QString decomposed = character.decomposition(); + if (decomposed.isEmpty()) { + return character; + } + return translate (decomposed.at(0)); + } + return mappedKey->keycode; +} + + +// ----------------------------------------------------------------------------- +// LogsPredictiveTranslator::translate() +// ----------------------------------------------------------------------------- +// +const QString LogsPredictiveTranslator::translate( const QString& name, + int count ) const +{ + LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::translate()" ) + LOGS_QDEBUG_2( "logs [FINDER] name ", name ); + + count = count == -1 ? name.length() : count; + QString result; + const QChar* content = name.data(); + int index = 0; + while( index < name.length() && index < count ) { + result.insert( index++, translate( *content++ ) ); + } + + LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::translate()" ) + return result; +} + +// ----------------------------------------------------------------------------- +// LogsPredictiveTranslator::startsWith() +// ----------------------------------------------------------------------------- +// +int LogsPredictiveTranslator::startsWith( const QString& text, + const QString& pattern, + bool optimize ) const +{ + LOGS_QDEBUG( "logs [FINDER] -> LogsPredictiveTranslator::startsWith()" ) + //assumed that text has found based on pattern, thus only checking with + //first char is enough, if mightContainZeroes eq false + int matchCount = pattern.length(); + if ( text.isEmpty() || matchCount > text.length() ) { + matchCount = 0; + } else { + if ( !optimize ) { + QString translatedText = translate( text, pattern.length() ); + matchCount = translatedText == pattern ? matchCount : 0; + } else { + matchCount = translate( *text.data() ) == *pattern.data() ? + matchCount : 0; + } + } + + LOGS_QDEBUG_2( "logs [FINDER] matchCount=", matchCount ) + LOGS_QDEBUG( "logs [FINDER] <- LogsPredictiveTranslator::startsWith()" ) + return matchCount; +} +