securitydialogs/secuinotifications/secuinotificationdialogplugin/src/secuinotificationcontentwidget.cpp
branchRCL_3
changeset 49 09b1ac925e3f
--- /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 <QGraphicsLinearLayout>
+#include <QToolButton>
+#include <hblabel.h>
+#include <hbpushbutton.h>
+#include <hbiconitem.h>
+#include <hbcombobox.h>
+#include <hblineedit.h>
+#include <hbinputeditorinterface.h>
+#include <QDebug>
+
+#include <HbCheckBox>  // needed for a checkbox dialog
+#include <HbListWidget>  // needed for multicheckbox dialog
+#include <HbListWidgetItem>
+#include <HbAbstractItemView>
+#include <HbEmailAddressFilter>
+
+#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 &parameters)
+{
+		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);
+    }
+