logsui/logscntfinder/src/logspredictive12keytranslator.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 17 Sep 2010 08:29:34 +0300
changeset 19 e4c884866116
parent 16 c5af8598d22c
child 21 2f0af9ba7665
permissions -rw-r--r--
Revision: 201035 Kit: 201037

/*
* 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 <QObject>
#include <QLocale>
#include <QHash>
#include <QRegExp>
#include <hbinputkeymapfactory.h>
#include <hbinputkeymap.h>
#include <hbinputsettingproxy.h>

#include "logspredictive12keytranslator.h"
#include "logslogger.h"

const QChar ZeroSepar('0');
const int NotAssigned = -1;

// -----------------------------------------------------------------------------
// LogsPredictive12KeyTranslator::LogsPredictive12KeyTranslator()
// -----------------------------------------------------------------------------
//
LogsPredictive12KeyTranslator::LogsPredictive12KeyTranslator( 
                                                    const HbInputLanguage& lang ) 
    : LogsPredictiveTranslator( lang )
{
    LOGS_QDEBUG( "logs [FINDER] -> LogsPredictive12KeyTranslator::\
LogsPredictive12KeyTranslator()" )
    LOGS_QDEBUG( "logs [FINDER] <- LogsPredictive12KeyTranslator::\
LogsPredictive12KeyTranslator()" )

}

// -----------------------------------------------------------------------------
// LogsPredictive12KeyTranslator::~LogsPredictive12KeyTranslator()
// -----------------------------------------------------------------------------
//
LogsPredictive12KeyTranslator::~LogsPredictive12KeyTranslator()
{
    LOGS_QDEBUG( "logs [FINDER] -> LogsPredictive12KeyTranslator::\
~LogsPredictive12KeyTranslator()" )
    LOGS_QDEBUG( "logs [FINDER] <- LogsPredictive12KeyTranslator::\
~LogsPredictive12KeyTranslator()" )
    
}

// -----------------------------------------------------------------------------
// LogsPredictive12KeyTranslator::patternTokens()
// -----------------------------------------------------------------------------
//
QStringList LogsPredictive12KeyTranslator::patternTokens( const QString& pattern ) const
{
        
    LOGS_QDEBUG( "logs [FINDER] -> LogsPredictive12KeyTranslator::\
patternTokens()" )
    LOGS_QDEBUG_2( "logs [FINDER] pattern ", pattern );
    QString car;
    QString cdr;
    
    QStringList target;
    splitPattern( pattern, car, cdr );
    if ( car.length() ) {
        target.append( car );
        if ( cdr.length() ) {
            target.append( cdr );
        }
    }
    LOGS_QDEBUG( "logs [FINDER] <- LogsPredictive12KeyTranslator::\
patternTokens()" )
    return target;
}

// -----------------------------------------------------------------------------
// LogsPredictive12KeyTranslator::splitPattern()
// -----------------------------------------------------------------------------
//
void LogsPredictive12KeyTranslator::splitPattern( const QString& pattern, 
                                                  QString& car, QString& cdr ) const
{
    car = "";
    cdr = "";
    
    QChar current;
    QChar previous;
    int splitStart = NotAssigned;
    int splitEnd = NotAssigned;
    int index = 0;
    while( splitEnd == NotAssigned && index < pattern.length() ) {
        current = pattern[index];
        splitStart = splitStart == NotAssigned &&
                    ( previous != ZeroSepar && previous != QChar() ) && 
                    current == ZeroSepar ? 
                        index : splitStart;
        splitEnd = splitStart != NotAssigned && 
                   previous == ZeroSepar && 
                   current != ZeroSepar ?
                      index : splitEnd;
        previous = current;
        index++;
    }
    
    if ( splitStart != NotAssigned && splitEnd != NotAssigned ) {
        car = pattern.left( splitStart );
        cdr = pattern.right( pattern.length() - splitEnd );  
    } else {
        car = pattern; 
    }
}

// -----------------------------------------------------------------------------
// LogsPredictive12KeyTranslator::trimPattern()
// -----------------------------------------------------------------------------
//
QString& LogsPredictive12KeyTranslator::trimPattern( QString& pattern, 
                                                     bool tailOnly ) const
{
    QRegExp lead("^0*");//remove leading zeros
    QRegExp trail("0*$");//remove trailing zeros
    
    if ( pattern.length() ) {
        if ( !tailOnly ) {
            pattern.remove( lead );
        }
        
        pattern.remove( trail );
        
        if( !pattern.length() ) {
            pattern += ZeroSepar;
        }
    }
    return pattern;
}


// -----------------------------------------------------------------------------
// LogsPredictive12KeyTranslator::hasPatternSeparators()
// -----------------------------------------------------------------------------
//
int LogsPredictive12KeyTranslator::hasPatternSeparators( 
        const QString& pattern ) const
{
    return pattern.count( ZeroSepar );

}

// -----------------------------------------------------------------------------
// LogsPredictive12KeyTranslator::translateChar()
// -----------------------------------------------------------------------------
//
const QChar LogsPredictive12KeyTranslator::translateChar( 
        const QChar character ) const
{
    const HbMappedKey* mappedKey = 0;
    if ( mKeyMap ) {
        mappedKey = mKeyMap->keyForCharacter( HbKeyboardVirtual12Key, character );
    }
    return mappedKey ? mappedKey->keycode : QChar();
}