diff -r 63339781d179 -r 09b1ac925e3f securitydialogs/secuinotifications/secuinotificationdialogplugin/src/secuinotificationcontentwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/securitydialogs/secuinotifications/secuinotificationdialogplugin/src/secuinotificationcontentwidget.cpp Tue Aug 31 16:04:40 2010 +0300 @@ -0,0 +1,367 @@ +/* +* 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: SecUi notification content widget. +* +*/ + +#include "secuinotificationdebug.h" +#include "secuinotificationcontentwidget.h" +#include "secuinotificationdialogpluginkeys.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include // needed for a checkbox dialog +#include // needed for multicheckbox dialog +#include +#include +#include + +#define ESecUiCancelSupported 0x1000000 +#define ESecUiCancelNotSupported 0x0000000 + +#define ESecUiEmergencySupported 0x2000000 +#define ESecUiEmergencyNotSupported 0x0000000 + +#define ESecUiAlphaSupported 0x4000000 +#define ESecUiAlphaNotSupported 0x0000000 + +#define ESecUiSecretSupported 0x8000000 +#define ESecUiSecretNotSupported 0x0000000 + +#define ESecUiMaskFlags 0xFF000000 +#define ESecUiMaskType 0x00FFFFFF + +#define ESecUiTypeDeviceLock 0x00100000 +#define ESecUiTypeKeyguard 0x00200000 +#define ESecUiTypeClock 0x00300000 +#define ESecUiTypeScreensaver 0x00400000 + +#define ESecUiTypeMaskLock 0x00F00000 + + +// ---------------------------------------------------------------------------- +// SecUiNotificationContentWidget::SecUiNotificationContentWidget() +// ---------------------------------------------------------------------------- +// +SecUiNotificationContentWidget::SecUiNotificationContentWidget( + QGraphicsItem *parent, Qt::WindowFlags flags) : HbWidget(parent, flags) +{ + RDEBUG("0", 0); +} + +// ---------------------------------------------------------------------------- +// SecUiNotificationContentWidget::~SecUiNotificationContentWidget() +// ---------------------------------------------------------------------------- +// +SecUiNotificationContentWidget::~SecUiNotificationContentWidget() +{ +} + +// ---------------------------------------------------------------------------- +// SecUiNotificationContentWidget::constructFromParameters() +// ---------------------------------------------------------------------------- +// +void SecUiNotificationContentWidget::constructFromParameters(const QVariantMap ¶meters) +{ + RDEBUG("0", 0); + RDEBUGQT("parameters", parameters); + QGraphicsLinearLayout *mainLayout = new QGraphicsLinearLayout(Qt::Vertical); + + lMinLength = 4; // might be replaced later + lMaxLength = 8; // might be replaced later + queryDual=0; + isEmergency=0; + codeTop=0; + + // KApplicationSize + if (parameters.contains(KQueryType)) { + RDEBUG("0", 0); + queryType = parameters.value(KQueryType).toUInt(); + RDEBUG("queryType", queryType); + if( (queryType & ESecUiTypeMaskLock) ) + { + RDEBUG("KQueryType=ESecUiTypeMaskLock", queryType); + // showing "Lock" icon. All other params are irrelevant. codeTop is not even created + + HbLabel *iconLabel = new HbLabel("Locked"); + HbIcon *icon = new HbIcon("qtg_large_device_lock"); + // iconLabel->setAspectRatioMode(Qt::IgnoreAspectRatio); + // iconLabel->setGeometry(QRectF(QPointF(10,10),QSizeF(300,300))); + iconLabel->setIcon(*icon); + if( (queryType & ESecUiTypeMaskLock)==ESecUiTypeDeviceLock ) + { // really big icon for the devicelock + iconLabel->setPreferredHeight(500); + iconLabel->setPreferredWidth(500); + } + else if( (queryType & ESecUiTypeMaskLock)==ESecUiTypeKeyguard ) + { // smaller icon for the keyguard + iconLabel->setPreferredHeight(100); + iconLabel->setPreferredWidth(100); + } + + // icon->setWidth(300); + // icon->setHeight(350); + // icon->setGeometry(QRectF(QPointF(10,10),QSizeF(500,300))); + // icon->setSize(QSizeF(300,300)); + + mainLayout->addItem(iconLabel); + mainLayout->setAlignment(iconLabel, Qt::AlignCenter ); + // mainLayout->setGeometry(QRectF(QPointF(10,10),QSizeF(300,300))); + + /* + QToolButton* mLabelIcon = new QToolButton; + mLabelIcon->setIcon(QIcon(":/AutolockSrv_hbicon/qtg_large_device_lock.svg")); + mLabelIcon->setIconSize(QSize(300,300)); + HbLabel *iconLabel = new HbLabel("Locked"); + iconLabel->setIcon(*mLabelIcon); + mainLayout->addItem(iconLabel); + */ + + // mainLayout->setContentsMargins(10,10,300,500); // this makes the dialog really big + setLayout(mainLayout); // same as at the end + return; + } + // not ESecUiTypeMaskLock + lEmergencySupported = ESecUiEmergencyNotSupported; + if((queryType & ESecUiEmergencySupported)==ESecUiEmergencySupported) + { + lEmergencySupported = ESecUiEmergencySupported; + } + RDEBUG("lEmergencySupported", lEmergencySupported); + } + + if (parameters.contains(KQueryMinLength)) { + RDEBUG("KQueryMinLength", 0); + lMinLength = parameters.value(KQueryMinLength).toUInt(); + RDEBUG("lMinLength", lMinLength); + } + if (parameters.contains(KQueryMaxLength)) { + RDEBUG("KQueryMaxLength", 0); + lMaxLength = parameters.value(KQueryMaxLength).toUInt(); + RDEBUG("lMaxLength", lMaxLength); + } + + if (parameters.contains(KEmergency)) { + RDEBUG("KEmergency", 0); + QString emergencyText = parameters.value(KEmergency).toString(); + RDEBUGQT("emergencyText", emergencyText); + if(!emergencyText.compare("emergencyYes")) + { + RDEBUG("emergencyYes", 1); + isEmergency = 1; + } + if(!emergencyText.compare("emergencyNo")) + { + RDEBUG("emergencyNo", 0); + isEmergency = 0; + } + } + + + // KCodeTop + if (parameters.contains(KCodeTop)) { + RDEBUG("KCodeTop", 0); + codeTop = new HbLineEdit(""); // no default value + RDEBUG("queryType", queryType); + codeTop->setInputMethodHints(Qt::ImhDigitsOnly); // default + if (queryType & ESecUiAlphaSupported) + { + RDEBUG("ESecUiAlphaSupported", ESecUiAlphaSupported); + codeTop->setInputMethodHints(Qt::ImhNone); + } + if (queryType & ESecUiSecretSupported) + { + RDEBUG("ESecUiSecretSupported", ESecUiSecretSupported); + codeTop->setEchoMode(HbLineEdit::PasswordEchoOnEdit); + } + RDEBUG("lMaxLength", lMaxLength); + if(lMaxLength>2) + codeTop->setMaxLength(lMaxLength); + + if (parameters.contains(KDefaultCode)) { + RDEBUG("KDefaultCode", 0); + QString defaultCode = parameters.value(KDefaultCode).toString(); + RDEBUGQT("defaultCode", defaultCode); + codeTop->setText(defaultCode); + } + RDEBUG("1", 1); + + connect(codeTop, SIGNAL(textChanged(const QString &)), this, SIGNAL(codeTopChanged(const QString &))); + connect(codeTop, SIGNAL(contentsChanged()), this, SIGNAL(codeTopContentChanged())); + + if (parameters.contains(KDefaultCode)) { // this is done in this step so that the OK becomes valid (if rules are fulfilled) + RDEBUG("KDefaultCode", 0); + QString defaultCode = parameters.value(KDefaultCode).toString(); + RDEBUGQT("defaultCode", defaultCode); + codeTop->setText(defaultCode); + } + RDEBUG("2", 2); + + if (parameters.contains(KDialogTitle)) { + QString titleText = parameters.value(KDialogTitle).toString(); + QString titleAttempts = ""; + if(titleText.indexOf('|')>0) + { // if separator, take only first part + titleText = titleText.left(titleText.indexOf('|')); + } + if(titleText.indexOf('$')>0) + { // if separator, take only first part + // it comes translated alredy, from the client + titleAttempts = titleText.right(titleText.length()-titleText.indexOf('$')-1); + RDEBUGQT("titleAttempts", titleAttempts); + int nAttempts = titleAttempts.toInt(); + RDEBUG("nAttempts", nAttempts); + titleText = titleText.left(titleText.indexOf('$')); // this comes translated already + if(nAttempts==1) // last attempt + { + // This must be in a new line, to avoid problems with left-to-right writing + titleAttempts = hbTrId("txt_pin_code_dpophead_last_attempt"); + } + else if(nAttempts>0) + { + titleAttempts = hbTrId("attempts") + "=" + QString::number(nAttempts); + // TODO this requires %L1 localization using txt_pin_code_dpopinfo_ln_attempts_remaining + } + else if(nAttempts==0) + { + titleAttempts = ""; // something special for the last attempt ? + } + else + { + titleAttempts = ""; + } + } + HbLabel *titleTop = new HbLabel(titleText); + mainLayout->addItem(titleTop); + if (titleAttempts.length()>0 ) + { + HbLabel *titleTopAttemps = new HbLabel(titleAttempts); + mainLayout->addItem(titleTopAttemps); + } + // in the dialog, it was setHeadingWidget(title); + } + RDEBUG("3", 3); + mainLayout->addItem(codeTop); + // double-query + if (parameters.contains(KCodeBottom)) + { + queryDual=1; + QString titleText = parameters.value(KDialogTitle).toString(); + if(titleText.indexOf('|')>0) + { // if no separator, don't create label + QString titleBottomStr = titleText.right(titleText.length()-titleText.indexOf('|')-1); + // no need to translate + HbLabel *titleBottom = new HbLabel(titleBottomStr); + mainLayout->addItem(titleBottom); + } + + codeBottom = new HbLineEdit(""); // no default value + if(lMaxLength>2) + codeBottom->setMaxLength(lMaxLength); + codeBottom->setInputMethodHints(Qt::ImhDigitsOnly); // default + if (queryType & ESecUiAlphaSupported) + { + RDEBUG("setInputMethodHints", 0); + codeBottom->setInputMethodHints(Qt::ImhNone); + } + if (queryType & ESecUiSecretSupported) + { + RDEBUG("ESecUiSecretSupported", 0); + codeBottom->setEchoMode(HbLineEdit::PasswordEchoOnEdit); // this will also remove predictive, which is what we want + } + RDEBUG("connecting", 0); + connect(codeBottom, SIGNAL(textChanged(const QString &)), this, SIGNAL(codeBottomChanged(const QString &))); + connect(codeBottom, SIGNAL(contentsChanged(const QString &)), this, SIGNAL(codeBottomChanged(const QString &))); + mainLayout->addItem(codeBottom); + } + + QGraphicsLinearLayout *mainLayoutButtons = new QGraphicsLinearLayout(Qt::Horizontal); + HbPushButton *but1 = new HbPushButton("1234"); + HbPushButton *but2 = new HbPushButton("+1"); + HbPushButton *but3 = new HbPushButton("+5"); + connect(but1, SIGNAL(clicked()), this, SIGNAL(but1Changed())); + connect(but2, SIGNAL(clicked()), this, SIGNAL(but2Changed())); + connect(but3, SIGNAL(clicked()), this, SIGNAL(but3Changed())); + #if defined(_DEBUG) + mainLayoutButtons->addItem(but1); + mainLayoutButtons->addItem(but2); + mainLayoutButtons->addItem(but3); + #endif + + mainLayout->addItem(mainLayoutButtons); + + // remove setFocus from PIN query because Orbit can't handle it + // codeTop->setFocus(); // this should open the VKB + + } + + if (parameters.contains(KChecboxType)) { + RDEBUG("KChecboxType", 0); + if (parameters.contains(KDialogTitle)) { + //TODO position of the label is not centered + QString tmpText=parameters.value(KDialogTitle).toString(); + if (tmpText.endsWith("\n")) tmpText=tmpText.left(tmpText.length()-1); + DialogText= new HbLabel(tmpText); + DialogText->setTextWrapping(Hb::TextWordWrap); + DialogText->setAlignment(Qt::AlignVCenter); + mainLayout->addItem(DialogText); + } + + checkbox = new HbCheckBox("Caption"); + if (parameters.contains(KDefaultCode)) { + RDEBUG("KDefaultCode", 0); + QStringList list1 = parameters.value(KDefaultCode).toString().split("|"); + if (!list1.isEmpty() && list1.count()==2) { + if (!list1[0].isNull() && !list1[0].isEmpty()) checkbox->setText(list1[0]); + if (!list1[1].isNull() && !list1[1].isEmpty()) checkbox->setChecked(list1[1].toInt()); + } + // TODO this needs localization + } + mainLayout->addItem(checkbox); + } + + if (parameters.contains(KMultiChecboxType) && parameters.contains(KDefaultCode)) + { + RDEBUG("KMultiChecboxType", 0); + QStringList list1 = parameters.value(KDefaultCode).toString().split("1\t"); + if (!list1.isEmpty()) { + listWidget = new HbListWidget(); + for (int i = 0; (i < list1.count()); i++) + if (!list1[i].isEmpty() && !list1[i].isNull()) { + HbListWidgetItem* modelItem = new HbListWidgetItem(); + modelItem->setData(QVariant(list1[i]), Qt::DisplayRole); + // TODO this needs localization + listWidget->addItem(modelItem); + } + listWidget->setCurrentRow(0); + listWidget->setSelectionMode(HbAbstractItemView::MultiSelection); + //listWidget->setClampingStyle(HbScrollArea::BounceBackClamping); + listWidget->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded); + listWidget->setMaximumHeight(150); + mainLayout->addItem(listWidget); + // delete listWidget; + } + } + + setLayout(mainLayout); + } +