diff -r 7d48bed6ce0c -r 987c9837762f satui/satapp/src/satappinputprovider.cpp --- a/satui/satapp/src/satappinputprovider.cpp Tue Aug 31 15:45:17 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,636 +0,0 @@ -/* -* Copyright (c) 2010 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: Provides input methods like query dialogs -* -*/ - -// qt -#include -#include -// hb -#include -#include -#include -#include -#include -#include -#include -// satapp -#include "satappinputprovider.h" -#include "satappconstant.h" -#include "satappaction.h" - - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::SatAppInputProvider -// ---------------------------------------------------------------------------- -// -SatAppInputProvider::SatAppInputProvider(QObject *parent) - : QObject(parent), mCurrentAction(0), mCurrentDialog(0) -{ - qDebug("SATAPP: SatAppInputProvider::SatAppInputProvider >"); - mDurationTimer = new QTimer(this); - qDebug("SATAPP: SatAppInputProvider::SatAppInputProvider <"); -} - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::~SatAppInputProvider -// ---------------------------------------------------------------------------- -// -SatAppInputProvider::~SatAppInputProvider() -{ - qDebug("SATAPP: SatAppInputProvider::~SatAppInputProvider >"); - delete mCurrentDialog; - mCurrentDialog = 0; - qDebug("SATAPP: SatAppInputProvider::~SatAppInputProvider <"); -} - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::getInkey -// requests user to enter a SINGLE key, character or digit -// ---------------------------------------------------------------------------- -// -void SatAppInputProvider::getInkey(SatAppAction& action) -{ - qDebug("SATAPP: SatAppInputProvider::getInkey >"); - - delete mCurrentDialog; - mCurrentDialog=0; - - QString heading = action.value(KeyText).toString(); - qDebug() << "SATAPP: getInkey: heading=" << heading; - - TSatCharacterSet characterSet = - static_cast(action.value(KeyCharacterSet).toInt()); - - qDebug("SATAPP: SatAppInputProvider::getInkey char set %d", characterSet); - - // yes no query must have text. - if ((0 == heading.length()) && (ESatYesNo == characterSet)) { - action.completeWithFailure(); - return; - } - - // duration - int duration = action.value(KeyDuration).toInt(); - if (duration == 0) { - duration = KDefaultSelectionTimeoutMseconds; - } - qDebug("SATAPP: getInkey: duration=%d", duration); - mInputTimer.start(); - - if (heading.isEmpty()) { - if (ESatDigitOnly == characterSet) { - heading = hbTrId("txt_simatk_dialog_entern1_digit_09"); - } else { - // ESatCharSmsDefaultAlphabet or ESatCharUcs2Alphabet - heading = hbTrId("txt_simatk_dialog_entern1_character"); - } - } - qDebug() << "SATAPP: getInkey: heading=" << heading; - - mCurrentAction = &action; - bool immediate = action.value(KeyImmediate).toBool(); - qDebug() << "SATAPP: getInkey: immediate=" << immediate; - - if (characterSet == ESatYesNo) { - //Yes no imediate will be combine with YES no. - showGetYesNoQuery(heading, duration); - } - else if (immediate) { - // we only have digit immediate - showGetImmediateQuery(heading, duration); - } - else { - // Reminder, there is no default inkey in get inkey - // proactive command. - showGetInkeyQuery(heading, characterSet, duration); - } - SAT_ASSERT(connect(mCurrentAction, SIGNAL(actionCompleted(SatAppAction*)), - this, SLOT(clearDurationTimer()))); - qDebug("SATAPP: SatAppInputProvider::getInkey <"); -} - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::getInput -// requests user to enter a STRING of free text, number or password etc. -// ---------------------------------------------------------------------------- -// -void SatAppInputProvider::getInput(SatAppAction& action) -{ - qDebug("SATAPP: SatAppInputProvider::getInput >"); - - delete mCurrentDialog; - mCurrentDialog=0; - // character set - TSatCharacterSet characterSet = - static_cast(action.value(KeyCharacterSet).toInt()); - - qDebug("SATAPP: SatAppInputProvider::getInput char set %d", characterSet); - - // heading - QString heading = action.value(KeyText).toString(); - qDebug() << "SATAPP: getInput: heading=" << heading; - if (heading.isEmpty()) { - if (ESatDigitOnly == characterSet) { - heading = hbTrId("txt_simatk_dialog_entern1_digit_09"); - } else { - // ESatCharSmsDefaultAlphabet or ESatCharUcs2Alphabet - heading = hbTrId("txt_simatk_dialog_entern1_character"); - } - } - qDebug() << "SATAPP: getInput: heading=" << heading; - - // min length - int minLength = action.value(KeyMinLength).toInt(); - if (minLength<0) { - minLength=0; - } - if (minLength>KGetInputStringMaxSize){ - minLength=KGetInputStringMaxSize; - } - - // max length - int maxLength = action.value(KeyMaxLength).toInt(); - if (maxLengthKGetInputStringMaxSize) { - maxLength=KGetInputStringMaxSize; - } - qDebug("SATAPP: SatAppInputProvider::getInput min %d", minLength); - qDebug("SATAPP: SatAppInputProvider::getInput max %d", maxLength); - - // default input text - QString inputText = action.value(KeyInputString).toString(); - if (inputText.length() < minLength || inputText.length() > maxLength){ - inputText = ""; - } - qDebug() << "SATAPP: getInput: inputText=" << inputText; - - // hide input - bool hideInput = action.value(KeyHideInput).toBool(); - qDebug("SATAPP: SatAppInputProvider::getInput hide %d", hideInput); - - qDebug("SATAPP: getInput: min=%d,max=%d,hide=%d", - minLength, maxLength, hideInput); - - mCurrentAction = &action; - showGetInputQuery( heading, inputText, - characterSet, minLength, maxLength, hideInput); - - SAT_ASSERT(connect(mCurrentAction, SIGNAL(actionCompleted(SatAppAction*)), - this, SLOT(clearDurationTimer()))); - qDebug("SATAPP: SatAppInputProvider::getInput <"); -} - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::showGetInkeyQuery -// ---------------------------------------------------------------------------- -// -void SatAppInputProvider::showGetInkeyQuery( - const QString &heading, - TSatCharacterSet characterSet, - int duration) -{ - qDebug("SATAPP: SatAppInputProvider::showGetInkeyQuery >"); - - HbInputDialog* inputDialog = new HbInputDialog(); - mCurrentDialog = inputDialog; - // Set PromptText - inputDialog->setPromptText(heading); - // Set ContentText - HbEditorInterface inputMode(inputDialog->lineEdit()); - inputDialog->lineEdit()->setFocus(); - if (ESatDigitOnly == characterSet) { - // digit mode, digits only (0 9, *, #, and +) - inputMode.setFilter(HbPhoneNumberFilter::instance()); - inputMode.setMode(HbInputModeNumeric); - inputMode.setInputConstraints(HbEditorConstraintFixedInputMode); - } else { - // char mode - inputMode.setUpAsLatinAlphabetOnlyEditor(); - } - composeDialog(inputDialog, GetInkey); - mCurrentAction->set(KeyMinLength, 1); - inputDialog->lineEdit()->setMaxLength(1); - - // when input changed, enable/disable OK button - SAT_ASSERT(connect(inputDialog->lineEdit(), SIGNAL(textChanged(QString)), - this, SLOT(updateQueryAction(QString)))); - // when OK pressed, fill in data to action and complete it - SAT_ASSERT(connect(inputDialog->actions().at(0), SIGNAL(triggered()), - this, SLOT(transmitInkeyFromDialog()))); - // when cancel pressed, complete action with ESatBackwardModeRequestedByUser - SAT_ASSERT(connect(inputDialog->actions().at(1), SIGNAL(triggered()), - mCurrentAction, SLOT(completeWithBackRequested()))); - // after timeout, reset the provider - startDurationTimer(duration); - // open the dialog. When the dialog closes, reset everything - inputDialog->open(); - - qDebug("SATAPP: SatAppInputProvider::showGetInkeyQuery <"); -} - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::showGetImmediateQuery -// ---------------------------------------------------------------------------- -// -void SatAppInputProvider::showGetImmediateQuery( - const QString &heading, - int duration) -{ - qDebug("SATAPP: SatAppInputProvider::showGetImmediateQuery >"); - - HbInputDialog* inputDialog = new HbInputDialog(); - mCurrentDialog = inputDialog; - // Set PromptText - inputDialog->setPromptText(heading); - // Set ContentText - HbEditorInterface inputMode(inputDialog->lineEdit()); - inputDialog->lineEdit()->setFocus(); - - inputMode.setFilter(HbPhoneNumberFilter::instance()); - inputMode.setMode(HbInputModeNumeric); - inputMode.setInputConstraints(HbEditorConstraintFixedInputMode); - - composeDialog(inputDialog, GetImmediate); - - // when receiving first input character, send it immediately - SAT_ASSERT(connect(inputDialog->lineEdit(), SIGNAL(textChanged(QString)), - this, SLOT(transmitInkeyImmediately(QString)))); - // when cancel pressed, complete action with ESatBackwardModeRequestedByUser - SAT_ASSERT(connect(inputDialog->actions().at(0), SIGNAL(triggered()), - mCurrentAction, SLOT(completeWithBackRequested()))); - // after timeout, reset the provider - startDurationTimer(duration); - // open the dialog. When the dialog closes, reset everything - inputDialog->open(); - - qDebug("SATAPP: SatAppInputProvider::showGetImmediateQuery <"); -} - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::showGetYesNoQuery -// ---------------------------------------------------------------------------- -// -void SatAppInputProvider::showGetYesNoQuery( - const QString &text, - int duration) -{ - qDebug("SATAPP: SatAppInputProvider::showGetYesNoQuery >"); - HbMessageBox* messageBox = new HbMessageBox(HbMessageBox::MessageTypeInformation); - mCurrentDialog = messageBox; - - // Set the label as heading widget - HbLabel *lHeading = new HbLabel(text, messageBox); - messageBox->setHeadingWidget(lHeading); - messageBox->setIconVisible(false); - - composeDialog(messageBox, GetYesNo); - - // when YES pressed, complete action with ESatSuccess, inkey set to 1 - SAT_ASSERT(connect(messageBox->actions().at(0), SIGNAL(triggered()), - this, SLOT(transmitInkeyTrue()))); - // when NO pressed, complete action with ESatSuccess, inkey set to 0 - SAT_ASSERT(connect(messageBox->actions().at(1), SIGNAL(triggered()), - this, SLOT(transmitInkeyFalse()))); - - startDurationTimer(duration); - // show dialog. - messageBox->open(); - - qDebug("SATAPP: SatAppInputProvider::showGetYesNoQuery <"); -} - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::showGetInputQuery -// ---------------------------------------------------------------------------- -// -void SatAppInputProvider::showGetInputQuery( - const QString& heading, - const QString& content, - TSatCharacterSet characterSet, - int minLength, - int maxLength, - bool hideInput) -{ - Q_UNUSED(minLength); - qDebug("SATAPP: SatAppInputProvider::showGetInputQuery >"); - - HbInputDialog* inputQuery = new HbInputDialog(); - mCurrentDialog = inputQuery; - inputQuery->setPromptText(heading); - inputQuery->setValue(QVariant(content)); - HbEditorInterface inputMode(inputQuery->lineEdit()); - inputQuery->lineEdit()->setFocus(); - if (ESatDigitOnly == characterSet) { - // digit mode, digits only (0 9, *, #, and +) - inputMode.setFilter(HbPhoneNumberFilter::instance()); - inputMode.setMode(HbInputModeNumeric); - inputMode.setInputConstraints(HbEditorConstraintFixedInputMode); - } else { - // char mode - inputMode.setUpAsLatinAlphabetOnlyEditor(); - } - - inputQuery->lineEdit()->setMaxLength(maxLength); - - composeDialog(inputQuery, GetInput); - // initially set the button states - updateQueryAction(inputQuery->value().toString()); - - if (hideInput) { - inputQuery->lineEdit()->setEchoMode(HbLineEdit::Password); - qDebug("SATAPP: showGetInputQuery: hiding input"); - } - - // when dialog content changes, dim ok button accordingly, use - // use contentChanged signal from the base class of the editor - // to get the signal when in password mode - SAT_ASSERT(connect(inputQuery->lineEdit(), SIGNAL(contentsChanged()), - this, SLOT(updateQueryAction()))); - // transmit the text on OK press - SAT_ASSERT(connect(inputQuery->actions().at(0), SIGNAL(triggered()), - this, SLOT(transmitStringFromDialog()))); - // on Cancel key complete action with ESatBackwardModeRequestedByUser - SAT_ASSERT(connect(inputQuery->actions().at(1), SIGNAL(triggered()), - mCurrentAction, SLOT(completeWithBackRequested()))); - // after timeout, reset the provider - startDurationTimer(KDefaultSelectionTimeoutMseconds); - // open dialog. When it closes, reset everything - inputQuery->open(); - - qDebug("SATAPP: SatAppInputProvider::showGetInputQuery <"); -} - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::resetState -// ---------------------------------------------------------------------------- -// -void SatAppInputProvider::resetState() -{ - qDebug("SATAPP: SatAppInputProvider::resetState >"); - if (mCurrentAction) { - qDebug("SATAPP: SatAppInputProvider::resetState action"); - mCurrentAction->completeWithNoResponse(); - mCurrentAction = 0; - } - - qDebug("SATAPP: SatAppInputProvider::resetState action done"); - - delete mCurrentDialog; - mCurrentDialog = 0; - qDebug("SATAPP: SatAppInputProvider::resetState <"); -} - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::composeDialog -// make sure dlg has 2 buttons -// ---------------------------------------------------------------------------- -// -void SatAppInputProvider::composeDialog( - HbDialog *dlg, - DialogMode mode) -{ - qDebug("SATAPP: SatAppInputProvider::composeDialog >"); - Q_ASSERT(mCurrentAction); - - dlg->setModal(true); - dlg->setDismissPolicy(HbDialog::NoDismiss); - - dlg->clearActions(); - HbAction *primaryAction = new HbAction(dlg); - dlg->addAction(primaryAction); - - HbAction *secondaryAction = new HbAction(dlg); - dlg->addAction(secondaryAction); - - switch(mode){ - case GetYesNo: - { - primaryAction->setText(hbTrId("txt_common_button_yes")); - secondaryAction->setText(hbTrId("txt_common_button_no")); - break; - } - case GetImmediate: - { - dlg->removeAction(primaryAction); - secondaryAction->setText(hbTrId("txt_common_button_cancel")); - break; - } - default: - { - primaryAction->setText(hbTrId("txt_common_button_ok")); - primaryAction->setEnabled(false); - secondaryAction->setText(hbTrId("txt_common_button_cancel")); - break; - } - } - qDebug("SATAPP: SatAppInputProvider::composeDialog <"); -} - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::updateQueryAction -// Updates dialog's OK button according to input text length limits -// ---------------------------------------------------------------------------- -// -void SatAppInputProvider::updateQueryAction() -{ - qDebug("SATAPP: SatAppInputProvider::updateQueryAction >"); - Q_ASSERT(mCurrentDialog); - QString content = - qobject_cast(mCurrentDialog)->value().toString(); - qDebug() << "SATAPP: updateQueryAction: content=" << content; - updateQueryAction(content); - qDebug("SATAPP: SatAppInputProvider::updateQueryAction >"); -} - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::updateQueryAction -// Updates dialog's OK button according to input text length limits -// ---------------------------------------------------------------------------- -// -void SatAppInputProvider::updateQueryAction(QString text) -{ - qDebug("SATAPP: SatAppInputProvider::updateQueryAction 2>"); - Q_ASSERT(mCurrentDialog); - qDebug() << "SATAPP: updateQueryAction 2: text=" << text; - int min=0; - if (mCurrentAction->hasValue(KeyMinLength)) - min=mCurrentAction->value(KeyMinLength).toInt(); - int max=10; - if (mCurrentAction->hasValue(KeyMaxLength)) - max=mCurrentAction->value(KeyMaxLength).toInt(); - if (mCurrentDialog->actions().at(0)) { - if (text.length() >= min && text.length() <= max) { - mCurrentDialog->actions().at(0)->setEnabled(true); - } else { - mCurrentDialog->actions().at(0)->setEnabled(false); - } - } - qDebug("SATAPP: SatAppInputProvider::updateQueryAction 2<"); -} - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::transmitInkeyFromDialog -// ---------------------------------------------------------------------------- -// -void SatAppInputProvider::transmitInkeyFromDialog() -{ - qDebug("SATAPP: SatAppInputProvider::transmitInkeyFromDialog >"); - Q_ASSERT(mCurrentDialog); - Q_ASSERT(mCurrentAction->action()==ESatGetInkeyAction); - // grab the input string - HbInputDialog* inkeyQuery = static_cast(mCurrentDialog); - QString inputString = inkeyQuery->value().toString(); - qDebug() << "SATAPP: transmitInkeyFromDialog: input=" << inputString; - transmitInkeyImmediately(inputString); - qDebug("SATAPP: SatAppInputProvider::transmitInkeyFromDialog <"); -} - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::transmitInkeyImmediately -// ---------------------------------------------------------------------------- -// -void SatAppInputProvider::transmitInkeyImmediately(QString text) -{ - qDebug("SATAPP: SatAppInputProvider::transmitInkeyImmediately >"); - transmitInkey((int)text.utf16()[0]); - qDebug("SATAPP: SatAppInputProvider::transmitInkeyImmediately <"); -} - - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::transmitInkeyTrue -// ---------------------------------------------------------------------------- -// -void SatAppInputProvider::transmitInkeyTrue() -{ - qDebug("SATAPP: SatAppInputProvider::transmitInkeyTrue >"); - Q_ASSERT(mCurrentAction); - Q_ASSERT(mCurrentAction->action()==ESatGetInkeyAction); - Q_ASSERT(mCurrentAction->value(KeyCharacterSet).toInt()==ESatYesNo); - transmitInkey(1); - qDebug("SATAPP: SatAppInputProvider::transmitInkeyTrue <"); -} - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::transmitInkeyFalse -// ---------------------------------------------------------------------------- -// -void SatAppInputProvider::transmitInkeyFalse() -{ - qDebug("SATAPP: SatAppInputProvider::transmitInkeyFalse >"); - Q_ASSERT(mCurrentAction); - Q_ASSERT(mCurrentAction->action()==ESatGetInkeyAction); - Q_ASSERT(mCurrentAction->value(KeyCharacterSet).toInt()==ESatYesNo); - transmitInkey(0); - qDebug("SATAPP: SatAppInputProvider::transmitInkeyFalse >"); -} - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::transmit -// ---------------------------------------------------------------------------- -// -void SatAppInputProvider::transmitInkey(int key) -{ - qDebug("SATAPP: SatAppInputProvider::transmitInkey >"); - qDebug("SATAPP: SatAppInputProvider::transmitInkey %d",key); - Q_ASSERT(mCurrentAction); - Q_ASSERT(mCurrentAction->action()==ESatGetInkeyAction); - // write inkey - mCurrentAction->set(KeyInKey,key); - // overwrite timer duration - if (mCurrentAction->hasValue(KeyDuration)) { - int newDuration = mInputTimer.elapsed(); - qDebug("SATAPP: SatAppInputProvider::transmitInkey dur ", newDuration); - mCurrentAction->set(KeyDuration, newDuration); - } - bool immediate = mCurrentAction->value(KeyImmediate).toBool(); - if(immediate) { - mCurrentDialog->close(); - } - mCurrentAction->completeWithSuccess(); - mCurrentAction = 0; - qDebug("SATAPP: SatAppInputProvider::transmitInkey >"); -} - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::transmitStringFromDialog -// ---------------------------------------------------------------------------- -// -void SatAppInputProvider::transmitStringFromDialog() -{ - qDebug("SATAPP: SatAppInputProvider::transmitStringFromDialog >"); - Q_ASSERT(mCurrentDialog); - Q_ASSERT(mCurrentAction); - Q_ASSERT(mCurrentAction->action()==ESatGetInputAction); - // write input string - HbInputDialog* inputQuery = static_cast(mCurrentDialog); - QString inputString = inputQuery->value().toString(); - qDebug() << "SATAPP: transmitStringFromDialog: string=" << inputString; - - mCurrentAction->set(KeyInputString,inputString); - // overwrite timer duration - if (mCurrentAction->hasValue(KeyDuration)) { - int newDuration = mInputTimer.elapsed(); - qDebug("SATAPP: SatAppInputProvider::transmitStringFromDialog dur ", - newDuration); - mCurrentAction->set(KeyDuration, newDuration); - } - mCurrentAction->completeWithSuccess(); - mCurrentAction = 0; - qDebug("SATAPP: SatAppInputProvider::transmitStringFromDialog >"); -} - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::startDurationTimer -// ---------------------------------------------------------------------------- -// -void SatAppInputProvider::startDurationTimer(int duration) -{ - qDebug("SATAPP: SatAppInputProvider::startDurationTimer %d>", duration); - Q_ASSERT(mDurationTimer); - if (duration) { - mDurationTimer->setSingleShot(true); - SAT_ASSERT(connect(mDurationTimer, SIGNAL(timeout()), - this, SLOT(resetState()))); - mDurationTimer->start(duration); - } - qDebug("SATAPP: SatAppInputProvider::startDurationTimer <"); -} - -// ---------------------------------------------------------------------------- -// SatAppInputProvider::clearDurationTimer -// ---------------------------------------------------------------------------- -// -void SatAppInputProvider::clearDurationTimer() -{ - qDebug("SATAPP: SatAppInputProvider::clearDurationTimer >"); - Q_ASSERT(mDurationTimer); - Q_ASSERT(mCurrentAction); - - bool res = disconnect(mCurrentAction, SIGNAL(actionCompleted(SatAppAction*)), - this, SLOT(clearDurationTimer())); - qDebug("SATAPP: SatAppInputProvider::clearDurationTimer act %d>", res); - res = disconnect(mDurationTimer, SIGNAL(timeout()), - this, SLOT(resetState())); - qDebug("SATAPP: SatAppInputProvider::clearDurationTimer dur %d>", res); - - mDurationTimer->stop(); - qDebug("SATAPP: SatAppInputProvider::clearDurationTimer <"); -} - -//End of file