diff -r 7d48bed6ce0c -r 987c9837762f telutils/dialpad/src/dialpadmultitaphandler.cpp --- a/telutils/dialpad/src/dialpadmultitaphandler.cpp Tue Aug 31 15:45:17 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,121 +0,0 @@ -/*! -* 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: Dialpad multitap handler -* -*/ - -#include -#include -#include -#include "dialpadmultitaphandler.h" - -static const int DialpadMaxMultitapTime = 800; // ms -static const int DialpadAsteriskMultitapCount = 4; -static const int DialpadAsteriskMultitapChars[DialpadAsteriskMultitapCount] = - {Qt::Key_Asterisk, Qt::Key_Plus, Qt::Key_P, Qt::Key_W}; - - -DialpadMultitapHandler::DialpadMultitapHandler( - HbLineEdit& editor, - QObject* parent) : - QObject(parent), - mEditor(editor), - mAsteriskMultitapIndex(0), - mGeneratedAsterisk(false) -{ - // extra characters - mExtraChar.insert(Qt::Key_Asterisk, '*'); - mExtraChar.insert(Qt::Key_Plus, '+'); - mExtraChar.insert(Qt::Key_P, 'p'); - mExtraChar.insert(Qt::Key_W, 'w'); -} - -DialpadMultitapHandler::~DialpadMultitapHandler() -{ -} - -bool DialpadMultitapHandler::eventFilter(QObject *watched, QEvent *event) -{ - if (watched!=&mEditor) { - return false; - } - - int type = event->type(); - - if (type==QEvent::KeyPress) { - QKeyEvent *keyEvent = static_cast(event); - if (isNumericKey(keyEvent->key()) && - keyEvent->text().isEmpty() ) { - return true; - } - } - - bool keyEventEaten = false; - - if (type==QEvent::KeyPress) { - QKeyEvent *keyEvent = static_cast(event); - - if (keyEvent->key()==Qt::Key_Asterisk) { - if ((mMultitapTimer.elapsed() <= DialpadMaxMultitapTime) && - !mGeneratedAsterisk) { - // remove the last char by generated backspace - QKeyEvent backspaceEvent(QEvent::KeyPress, - Qt::Key_Backspace, - Qt::NoModifier, ""); - HbApplication::sendEvent(&mEditor,&backspaceEvent); - - // generate +,p,w,* character - mAsteriskMultitapIndex = - ++mAsteriskMultitapIndex % DialpadAsteriskMultitapCount; - - int key = DialpadAsteriskMultitapChars[mAsteriskMultitapIndex]; - - // Allow + character only as a first char in editor - int cursorPosition = mEditor.cursorPosition(); - if(cursorPosition != 0 && key == Qt::Key_Plus) { - mAsteriskMultitapIndex = ++mAsteriskMultitapIndex; - Q_ASSERT(mAsteriskMultitapIndex < DialpadAsteriskMultitapCount); - key = DialpadAsteriskMultitapChars[mAsteriskMultitapIndex]; - } - - QKeyEvent generatedEvent(QEvent::KeyPress, key, - Qt::KeypadModifier, - mExtraChar.value(key)); - if (key==Qt::Key_Asterisk) { - mGeneratedAsterisk = true; - } - - HbApplication::sendEvent(&mEditor,&generatedEvent); - keyEventEaten = true; - mMultitapTimer.start(); - } else { - mMultitapTimer.start(); - mAsteriskMultitapIndex = 0; - } - - mGeneratedAsterisk = false; - } - } - - return keyEventEaten; -} - -bool DialpadMultitapHandler::isNumericKey(int key) -{ - if (key==Qt::Key_Yes || key==Qt::Key_Backspace) { - return false; - } else { - return true; - } -}