diff -r 77415202bfc8 -r fcbbe021d614 connectionutilities/confirmqueries/src/cellularpromptdialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/connectionutilities/confirmqueries/src/cellularpromptdialog.cpp Fri Apr 16 15:21:37 2010 +0300 @@ -0,0 +1,300 @@ +/* +* 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: Prompt Dialog implementation +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "cellularpromptdialog.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "cellularpromptdialogTraces.h" +#endif + + + +// The index numbers of the buttons of the dialog +const int firstButtonIndex = 1; +const int middleButtonIndex = 2; +const int cancelButtonIndex = 3; + +/** + * The constructor + */ +CellularPromptDialog::CellularPromptDialog(const QVariantMap ¶meters) +{ + OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_CELLULARPROMPTDIALOG_ENTRY ); + + // Install localization + QTranslator *translator = new QTranslator(this); + QString lang = QLocale::system().name(); + QString path = "Z:/resource/qt/translations/"; + translator->load("cellularpromptdialog_" + lang, path); + qApp->installTranslator(translator); + + createDialog(parameters); + mClose = false; + + OstTraceFunctionExit0( CELLULARPROMPTDIALOG_CELLULARPROMPTDIALOG_EXIT ); +} + + +/** + * The construction of the dialog + */ +void CellularPromptDialog::createDialog(const QVariantMap ¶meters) +{ + OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_CREATEDIALOG_ENTRY ); + + // Set the button and label texts according to the network (home or abroad) + QString labelText; + QString button1Text; + QString button2Text; + QString button3Text(hbTrId("txt_occ_button_cellular_cancel")); + + // There is only one value in the QVariantMap that we are interested in, + // whether we are in home network or not + QList list = parameters.values(); + bool homeNetwork = true; + + if (list.count() > 0) { + homeNetwork = list[0].toBool(); + } + + if (homeNetwork) { + labelText = QString(hbTrId("txt_occ_title_connect_to_internet_using_cellular_d")); + button1Text = QString(hbTrId("txt_occ_button_connect_automatically")); + button2Text = QString(hbTrId("txt_occ_button_connect_this_time")); + } else { + labelText = QString(hbTrId("txt_occ_title_connect_to_internet_in_this_country")); + button1Text = QString(hbTrId("txt_occ_button_connect_this_time")); + } + + HbDocumentLoader loader; + bool ok = true; + + if (homeNetwork) { + loader.load(":/xml/prompt_home.docml", &ok); + } else { + loader.load(":/xml/prompt_abroad.docml", &ok); + } + + if ( !ok ) { + // send information about cancelling to the observer, the xml loading failed + cancelPressed(); + OstTraceFunctionExit0( CELLULARPROMPTDIALOG_CREATEDIALOG_EXIT ); + return; + } + + // store the pointer to the dialog in order to be able to delete + // it in the destructor + mDialog = qobject_cast( loader.findWidget ("dialog")); + Q_ASSERT(mDialog != NULL); + + // fetch the needed widgets, update their texts and connect the + // clicked signals of the buttons to correct slots. + HbWidget *container = qobject_cast( loader.findWidget ("container")); + this->setContentWidget(container); + + // Set the dialog to be on the screen for 30 seconds, unless + // the user reacts earlier + this->setModal(true); + this->setTimeout(30000); + this->setDismissPolicy(HbPopup::NoDismiss); + + HbLabel* label = qobject_cast( loader.findWidget("label") ); + Q_ASSERT(label != NULL); + label->setPlainText(labelText); + label->setTextWrapping(Hb::TextWordWrap); + + HbPushButton* firstButton = qobject_cast( loader.findWidget("topButton") ); + Q_ASSERT(firstButton != NULL); + firstButton->setText(button1Text); + + HbPushButton* middleButton = NULL; + if ( homeNetwork ) { + middleButton = qobject_cast( loader.findWidget("middleButton") ); + Q_ASSERT(middleButton != NULL); + middleButton->setText(button2Text); + } + + HbPushButton* cancelButton = qobject_cast( loader.findWidget("cancelButton") ); + Q_ASSERT(cancelButton != NULL); + cancelButton->setText(button3Text); + + // Connect the button clicks to slots, assert if connecting fails + bool connected = connect( firstButton, SIGNAL(clicked()), this, SLOT( firstButtonPressed() )); + Q_ASSERT(connected == true); + + if ( homeNetwork ) { + connected = connect( middleButton, SIGNAL(clicked()), this, SLOT( middleButtonPressed() )); + Q_ASSERT(connected == true); + } + + connected = connect( cancelButton, SIGNAL(clicked()), this, SLOT( cancelPressed() )); + Q_ASSERT(connected == true); + // Connect the about to close and hide signals, so that we are able to inform + // the caller that the dialog was closed, for example due to timeout + connected = connect(this, SIGNAL(aboutToClose()), this, SLOT(closingDialog())); + Q_ASSERT(connected == true); + connected = connect(this, SIGNAL(aboutToHide()), this, SLOT(closingDialog())); + Q_ASSERT(connected == true); + + OstTraceFunctionExit0( DUP1_CELLULARPROMPTDIALOG_CREATEDIALOG_EXIT ); +} + +/** + * Destructor + */ +CellularPromptDialog::~CellularPromptDialog() +{ + OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_DCELLULARPROMPTDIALOG_ENTRY ); + + // The dialog widgets are deleted as the dialog is deleted + if (mDialog != NULL) { + delete mDialog; + } + mDialog = NULL; + + OstTraceFunctionExit0( CELLULARPROMPTDIALOG_DCELLULARPROMPTDIALOG_EXIT ); +} + +/** + * Function is called when the first button is pressed and the + * index of the button is emitted + */ +void CellularPromptDialog::firstButtonPressed() +{ + OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_FIRSTBUTTONPRESSED_ENTRY ); + + QVariantMap data; + QVariant variant(firstButtonIndex); + data.insert("button", variant); + // emit the data of the selected button and close the dialog + emit deviceDialogData(data); + close(); + + OstTraceFunctionExit0( CELLULARPROMPTDIALOG_FIRSTBUTTONPRESSED_EXIT ); +} + +/** + * Function is called when the second button is pressed and the + * index of the button is emitted + */ +void CellularPromptDialog::middleButtonPressed() +{ + OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_MIDDLEBUTTONPRESSED_ENTRY ); + + QVariantMap data; + QVariant variant(middleButtonIndex); + data.insert("button", variant); + // emit the data of the selected button and close the dialog + emit deviceDialogData(data); + close(); + + OstTraceFunctionExit0( CELLULARPROMPTDIALOG_MIDDLEBUTTONPRESSED_EXIT ); +} + +/** + * Function is called when the third button is pressed and the + * index of the button is emitted + */ +void CellularPromptDialog::cancelPressed() +{ + OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_CANCELPRESSED_ENTRY ); + + QVariantMap data; + QVariant variant(cancelButtonIndex); + data.insert("button", variant); + // emit the data of the selected button and close the dialog + emit deviceDialogData(data); + close(); + + OstTraceFunctionExit0( CELLULARPROMPTDIALOG_CANCELPRESSED_EXIT ); +} + +/** + * Function is called when the dialog is about to close + */ +void CellularPromptDialog::closingDialog() +{ + OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_CLOSINGDIALOG_ENTRY ); + + if (!mClose) { + mClose = true; + closeDeviceDialog(false); + } + OstTraceFunctionExit0( CELLULARPROMPTDIALOG_CLOSINGDIALOG_EXIT ); +} + + +/** + * Updating the dialog during its showing is not allowed. + */ +bool CellularPromptDialog::setDeviceDialogParameters + (const QVariantMap ¶meters) +{ + OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_SETDEVICEDIALOGPARAMETERS_ENTRY ); + + Q_UNUSED(parameters) + // changing the dialog after presenting it is not supported. + + OstTraceFunctionExit0( CELLULARPROMPTDIALOG_SETDEVICEDIALOGPARAMETERS_EXIT ); + return true; +} + +/** + * Not supported, 0 always returned + */ +int CellularPromptDialog::deviceDialogError() const +{ + OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_DEVICEDIALOGERROR_ENTRY ); + OstTraceFunctionExit0( CELLULARPROMPTDIALOG_DEVICEDIALOGERROR_EXIT); + return 0; +} + +/** + * Dialog is closed and the signal about closing is emitted + */ +void CellularPromptDialog::closeDeviceDialog(bool byClient) +{ + OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_CLOSEDEVICEDIALOG_ENTRY ); + + Q_UNUSED(byClient) + close(); + // If the user closes the dialog, then the deviceDialogClosed is emitted + emit deviceDialogClosed(); + + OstTraceFunctionExit0( CELLULARPROMPTDIALOG_CLOSEDEVICEDIALOG_EXIT ); +} + +/** + * This dialog widget is returned to the caller + */ +HbPopup *CellularPromptDialog::deviceDialogWidget() const +{ + OstTraceFunctionEntry0( CELLULARPROMPTDIALOG_DEVICEDIALOGWIDGET_ENTRY ); + OstTraceFunctionExit0( CELLULARPROMPTDIALOG_DEVICEDIALOGWIDGET_EXIT ); + + return const_cast(this); +} +