cpsecplugins/cpadvancedsecplugin/src/advsecsettingssecuritymoduleview.cpp
changeset 63 989397f9511c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cpsecplugins/cpadvancedsecplugin/src/advsecsettingssecuritymoduleview.cpp	Thu Oct 14 13:56:11 2010 +0300
@@ -0,0 +1,226 @@
+/*
+* 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:  Security module view in advanced security settings.
+*
+*/
+
+#include "advsecsettingssecuritymoduleview.h"
+#include "advsecsettingssecuritymodulemodel.h"
+#include <QGraphicsLinearLayout>
+#include <HbGroupBox>
+#include <HbDataForm>
+#include <HbDataFormModel>
+#include <HbLineEdit>
+#include <QDebug>
+
+const QString KEchoModeProperty = "echoMode";
+const QString KTextProperty = "text";
+const QString KAdditionalTextProperty = "additionalText";
+const QString KReadOnlyProperty = "readOnly";
+const QString KPasswordValue = "****";
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsSecurityModuleView::AdvSecSettingsSecurityModuleView()
+// ---------------------------------------------------------------------------
+//
+AdvSecSettingsSecurityModuleView::AdvSecSettingsSecurityModuleView(
+    AdvSecSettingsSecurityModuleModel &model, QGraphicsItem *parent) :
+    AdvSecSettingsViewBase(0, parent), mModel(model), mViewLabel(0),
+    mModulePin(0), mModulePinRequested(0), mModuleStatus(0), mSigningPin(0),
+    mModelIndex(0)
+{
+    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
+
+    // View title
+    mViewLabel = new HbGroupBox;
+    layout->addItem(mViewLabel);
+
+    HbDataForm *dataForm = new HbDataForm;
+    mDataFormModel = new HbDataFormModel;
+    HbDataFormModelItem *rootItem = mDataFormModel->invisibleRootItem();
+
+    // Module PIN
+    // TODO: localized UI strings needed
+    HbDataFormModelItem *moduleGroup = 0;
+    moduleGroup = mDataFormModel->appendDataFormGroup(tr("Module PIN"), rootItem);
+    mModulePin = mDataFormModel->appendDataFormItem(HbDataFormModelItem::TextItem,
+        tr("PIN code"), moduleGroup);
+    mModulePin->setContentWidgetData(KEchoModeProperty, HbLineEdit::Password);
+    mModulePin->setContentWidgetData(KTextProperty, KPasswordValue);
+    mModulePin->setContentWidgetData(KReadOnlyProperty, true);
+
+    // Module PIN Request
+    mModulePinRequested = mDataFormModel->appendDataFormItem(
+        HbDataFormModelItem::ToggleValueItem, tr("PIN code required"), moduleGroup);
+    mModulePinRequested->setContentWidgetData(KTextProperty, tr("On"));
+    //mModulePinRequested->setContentWidgetData(KAdditionalTextProperty, tr("Changing..."));
+    // TODO: remove
+    mModulePinRequested->setEnabled(false);
+
+    // Module Status
+    mModuleStatus = mDataFormModel->appendDataFormItem(
+        HbDataFormModelItem::ToggleValueItem, tr("Status"), moduleGroup);
+    mModuleStatus->setContentWidgetData(KTextProperty, tr("Closed"));
+    mModuleStatus->setEnabled(false);
+
+    dataForm->setModel(mDataFormModel);
+    layout->addItem(dataForm);
+    setLayout(layout);
+
+    connect(dataForm, SIGNAL(activated(const QModelIndex &)),
+        this, SLOT(itemActivated(const QModelIndex &)));
+    connect(&mModel, SIGNAL(statusCompleted(int)), this, SLOT(moduleStatusChanged(int)));
+    connect(&mModel, SIGNAL(statusChanged(int)), this, SLOT(moduleStatusChanged(int)));
+    connect(&mModel, SIGNAL(pinCodeRequestStateCompleted()), this, SLOT(updateModuleStatus()));
+    connect(&mModel, SIGNAL(pinCodeChangeCompleted()), this, SLOT(updateModuleStatus()));
+    connect(&mModel, SIGNAL(closeCompleted()), this, SLOT(updateModuleStatus()));
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsSecurityModuleView::~AdvSecSettingsSecurityModuleView()
+// ---------------------------------------------------------------------------
+//
+AdvSecSettingsSecurityModuleView::~AdvSecSettingsSecurityModuleView()
+{
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsSecurityModuleView::setSecurityModule()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsSecurityModuleView::setSecurityModule(const QString &moduleTitle,
+    int modelIndex)
+{
+    mViewLabel->setHeading(moduleTitle);
+    mModelIndex = modelIndex;
+
+    // Signing PIN
+    if (mModel.isSigningPinSupported(mModelIndex)) {
+        if (!mSigningPin) {
+            HbDataFormModelItem *rootItem = mDataFormModel->invisibleRootItem();
+            HbDataFormModelItem *signingGroup = 0;
+            signingGroup = mDataFormModel->appendDataFormGroup(tr("Signing PIN"), rootItem);
+            mSigningPin = mDataFormModel->appendDataFormItem(HbDataFormModelItem::TextItem,
+                tr("PIN code"), signingGroup);
+            mSigningPin->setContentWidgetData(KEchoModeProperty, HbLineEdit::Password);
+            mSigningPin->setContentWidgetData(KTextProperty, KPasswordValue);
+            mSigningPin->setContentWidgetData(KReadOnlyProperty, true);
+        }
+    } else {
+        if (mSigningPin) {
+            mDataFormModel->removeItem(mSigningPin);
+            mSigningPin = 0;
+        }
+    }
+
+    updateModuleStatus();
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsSecurityModuleView::updateModuleStatus()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsSecurityModuleView::updateModuleStatus()
+{
+    mModel.getModuleStatus(mModelIndex);
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsSecurityModuleView::moduleStatusChanged()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsSecurityModuleView::moduleStatusChanged(int status)
+{
+    // TODO: localized UI strings needed
+    if (status & AdvSecSettingsSecurityModuleModel::EBlockedPermanently) {
+        mModulePinRequested->setContentWidgetData(KTextProperty, tr("Blocked"));
+        mModulePinRequested->setEnabled(false);
+    } else if (status & AdvSecSettingsSecurityModuleModel::EPinBlocked) {
+        mModulePinRequested->setContentWidgetData(KTextProperty, tr("Blocked"));
+        // TODO: mModulePinRequested->setEnabled(true);
+        mModulePinRequested->setEnabled(false);
+    } else {
+        if (status & AdvSecSettingsSecurityModuleModel::EPinRequested) {
+            mModulePinRequested->setContentWidgetData(KTextProperty, tr("On"));
+        } else {
+            mModulePinRequested->setContentWidgetData(KTextProperty, tr("Off"));
+        }
+        if (status & AdvSecSettingsSecurityModuleModel::EPinChangeAllowed) {
+            // TODO:
+            //mModulePinRequested->setContentWidgetData(KAdditionalTextProperty, tr("Changing..."));
+            //mModulePinRequested->setEnabled(true);
+            mModulePinRequested->setEnabled(false);
+        } else {
+            mModulePinRequested->setContentWidgetData(KAdditionalTextProperty, QString());
+            mModulePinRequested->setEnabled(false);
+        }
+    }
+    if (status & AdvSecSettingsSecurityModuleModel::EPinEntered) {
+        mModuleStatus->setContentWidgetData(KTextProperty, tr("Open"));
+        // TODO:
+        //mModuleStatus->setContentWidgetData(KAdditionalTextProperty, tr("Closing..."));
+        //mModuleStatus->setEnabled(true);
+        mModuleStatus->setEnabled(false);
+    } else {
+        mModuleStatus->setContentWidgetData(KTextProperty, tr("Closed"));
+        mModuleStatus->setContentWidgetData(KAdditionalTextProperty, QString());
+        mModuleStatus->setEnabled(false);
+    }
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsSecurityModuleView::itemActivated()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsSecurityModuleView::itemActivated(const QModelIndex &/*itemIndex*/)
+{
+    // TODO: this does not work yet
+#if 0
+    bool isOperationStarted = false;
+    HbDataFormModelItem *item = mDataFormModel->itemFromIndex(itemIndex);
+    if (item == mModulePin) {
+        mModel.changePinCode(mModelIndex);
+        isOperationStarted = true;
+    } else if (item == mModulePinRequested) {
+        QString contentData = mModulePinRequested->contentWidgetData(KTextProperty).toString();
+        bool enable = (contentData != tr("On"));
+        mModel.setPinCodeRequestState(mModelIndex, enable);
+        isOperationStarted = true;
+    } else if (item == mModuleStatus) {
+        QString contentData = mModulePinRequested->contentWidgetData(KTextProperty).toString();
+        bool isClosed = (contentData == tr("Closed"));
+        if (!isClosed) {
+            mModel.closeModule(mModelIndex);
+            isOperationStarted = true;
+        }
+    } else if (item == mSigningPin) {
+        mModel.changeSigningPinCode(mModelIndex);
+        isOperationStarted = true;
+    } else {
+        // ignored, one of the group titles
+    }
+    if (isOperationStarted) {
+        mModulePin->setEnabled(false);
+        mModulePinRequested->setEnabled(false);
+        mModuleStatus->setEnabled(false);
+        if (mSigningPin) {
+            mSigningPin->setEnabled(false);
+        }
+    }
+#endif
+}
+