cpsecplugins/cpadvancedsecplugin/src/advsecsettingscertificatelistview.cpp
changeset 63 989397f9511c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cpsecplugins/cpadvancedsecplugin/src/advsecsettingscertificatelistview.cpp	Thu Oct 14 13:56:11 2010 +0300
@@ -0,0 +1,380 @@
+/*
+* 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:  Certificate list view in advanced security settings
+*
+*/
+
+#include "advsecsettingscertificatelistview.h"
+#include "advsecsettingscertificatemodel.h"
+#include "advsecsettingscertificatedetailview.h"
+#include "advsecsettingscerttrustsettingsview.h"
+#include <QGraphicsLinearLayout>
+#include <HbAbstractViewItem>
+#include <HbGroupBox>
+#include <HbListWidget>
+#include <HbListWidgetItem>
+#include <HbLabel>
+#include <HbStackedWidget>
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsCertificateListView::AdvSecSettingsCertificateListView()
+// ---------------------------------------------------------------------------
+//
+AdvSecSettingsCertificateListView::AdvSecSettingsCertificateListView(
+    QGraphicsItem *parent) : AdvSecSettingsViewBase(0, parent),
+    mCertType(AdvSecSettingsCertificate::NotDefined),
+    mListWidget(0), mEmptyText(0), mRetrievingText(0), mStackedWidget(0),
+    mIsRetrieving(true), mModelCertificateList(), mDisplayedCertificates(),
+    mModel(0), mDetailView(), mTrustSettingsView(0), mCurrentCertificate(0)
+{
+    mModel = new AdvSecSettingsCertificateModel(this);
+    mModel->initialize();
+    connect(mModel, SIGNAL(initializeCompleted()),
+        this, SLOT(readAllCertificatesFromModel()));
+    connect(mModel, SIGNAL(getCertificatesCompleted()),
+        this, SLOT(displayAllCertificatesReadFromModel()));
+    connect(mModel, SIGNAL(deleteCertificateCompleted()),
+        this, SLOT(refreshAfterCurrentCertRemoved()));
+    connect(mModel, SIGNAL(moveToPersonalCertificatesCompleted()),
+        this, SLOT(refreshAfterCurrentCertRemoved()));
+    connect(mModel, SIGNAL(moveToDeviceCertificatesCompleted()),
+        this, SLOT(refreshAfterCurrentCertRemoved()));
+    connect(mModel, SIGNAL(errorOccurred(int)),
+        this, SLOT(displayError(int)));
+
+    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
+
+    // View title
+    mViewLabel = new HbGroupBox;
+    layout->addItem(mViewLabel);
+
+    // Certificate list or empty text
+    mStackedWidget = new HbStackedWidget;
+
+    mListWidget = new HbListWidget;
+    connect(mListWidget, SIGNAL(activated(QModelIndex)),
+        this, SLOT(openCertificate(QModelIndex)));
+    connect(mListWidget, SIGNAL(longPressed(HbAbstractViewItem*, QPointF)),
+        this, SLOT(indicateLongPress(HbAbstractViewItem*, QPointF)));
+    mStackedWidget->addWidget(mListWidget);
+
+    // TODO: localized UI string needed
+    mEmptyText = new HbLabel(tr("No certificates"));
+    mEmptyText->setAlignment(Qt::AlignCenter);
+    mStackedWidget->addWidget(mEmptyText);
+
+    mRetrievingText = new HbLabel(tr("Retrieving..."));
+    mRetrievingText->setAlignment(Qt::AlignCenter);
+    mStackedWidget->addWidget(mRetrievingText);
+
+    mStackedWidget->setCurrentWidget(mRetrievingText);
+    layout->addItem(mStackedWidget);
+
+    setLayout(layout);
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsCertificateListView::~AdvSecSettingsCertificateListView()
+// ---------------------------------------------------------------------------
+//
+AdvSecSettingsCertificateListView::~AdvSecSettingsCertificateListView()
+{
+    clearModelCertificates();
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsCertificateListView::displayCertificates()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsCertificateListView::displayCertificates(
+    AdvSecSettingsCertificate::CertificateType type)
+{
+    if (type != mCertType) {
+        mCertType = type;
+        switch (mCertType) {
+        case AdvSecSettingsCertificate::AuthorityCertificate:
+            mViewLabel->setHeading(hbTrId("txt_certificate_manager_subhead_authority_certific"));
+            break;
+        case AdvSecSettingsCertificate::TrustedSiteCertificate:
+            mViewLabel->setHeading(hbTrId("txt_certificate_manager_subhead_trusted_site_certi"));
+            break;
+        case AdvSecSettingsCertificate::PersonalCertificate:
+            mViewLabel->setHeading(hbTrId("txt_certificate_manager_subhead_personal_certifica"));
+            break;
+        case AdvSecSettingsCertificate::DeviceCertificate:
+            mViewLabel->setHeading(hbTrId("txt_certificate_manager_subhead_device_certificate"));
+            break;
+        default:
+            break;
+        }
+    }
+    refreshDisplayedCertificates();
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsCertificateListView::setCurrentIndex()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsCertificateListView::setCurrentIndex(const QModelIndex& index)
+{
+    mListWidget->setCurrentIndex(index, QItemSelectionModel::SelectCurrent);
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsCertificateListView::indicateLongPress()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsCertificateListView::indicateLongPress(
+    HbAbstractViewItem *item, const QPointF &position)
+{
+    Q_ASSERT(item != 0);
+    mCurrentCertificate = mDisplayedCertificates.at(item->modelIndex().row());
+
+    clearItemSpecificMenu();
+    addItemSpecificMenuAction(hbTrId("txt_common_menu_open"),
+        this, SLOT(openCurrentCertificate()));
+
+    switch (mCertType) {
+    case AdvSecSettingsCertificate::AuthorityCertificate:
+        addItemSpecificMenuAction(hbTrId("txt_certificate_manager_menu_trust_settings"),
+            this, SLOT(displayCurrentCertTrustSettings()));
+        break;
+    case AdvSecSettingsCertificate::TrustedSiteCertificate:
+        break;
+    case AdvSecSettingsCertificate::PersonalCertificate:
+        addItemSpecificMenuAction(hbTrId("txt_certificate_manager_menu_move_to_device_certif"),
+            this, SLOT(moveCurrentCertToDeviceCertificates()));
+        break;
+    case AdvSecSettingsCertificate::DeviceCertificate:
+        addItemSpecificMenuAction(hbTrId("txt_certificate_manager_menu_move_to_personal_cert"),
+            this, SLOT(moveCurrentCertToPersonalCertificates()));
+        break;
+    default:
+        break;
+    }
+
+    Q_ASSERT(mCurrentCertificate != 0);
+    if (mModel->isDeletable(*mCurrentCertificate)) {
+        addItemSpecificMenuAction(hbTrId("txt_common_menu_delete"),
+            this, SLOT(deleteCurrentCertificate()));
+    }
+
+    displayItemSpecificMenu(position);
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsCertificateListView::openCertificate()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsCertificateListView::openCertificate(const QModelIndex& modelIndex)
+{
+    mCurrentCertificate = mDisplayedCertificates.at(modelIndex.row());
+    openCurrentCertificate();
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsCertificateListView::openCurrentCertificate()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsCertificateListView::openCurrentCertificate()
+{
+    if (!mDetailView) {
+        mDetailView = new AdvSecSettingsCertificateDetailView(*mModel, this);
+    }
+    Q_ASSERT(mCurrentCertificate != 0);
+    mDetailView->setCertificate(*mCurrentCertificate);
+    displayView(mDetailView);
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsCertificateListView::displayCurrentCertTrustSettings()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsCertificateListView::displayCurrentCertTrustSettings()
+{
+    if (!mTrustSettingsView) {
+        mTrustSettingsView = new AdvSecSettingsCertTrustSettingsView(*mModel, this);
+    }
+    Q_ASSERT(mCurrentCertificate != 0);
+    mTrustSettingsView->setCertificate(*mCurrentCertificate);
+    displayView(mTrustSettingsView);
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsCertificateListView::deleteCurrentCertificate()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsCertificateListView::deleteCurrentCertificate()
+{
+    Q_ASSERT(mCurrentCertificate != 0);
+    // TODO: localized UI string needed
+    QString confirmText(tr("Delete %1?").arg(mCurrentCertificate->label()));
+    displayQuestionNote(confirmText, this, SLOT(deleteConfirmationAccepted()));
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsCertificateListView::deleteConfirmationAccepted()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsCertificateListView::deleteConfirmationAccepted()
+{
+    Q_ASSERT(mCurrentCertificate != 0);
+    mModel->deleteCertificate(*mCurrentCertificate);
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsCertificateListView::moveCurrentCertToDeviceCertificates()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsCertificateListView::moveCurrentCertToDeviceCertificates()
+{
+    Q_ASSERT(mCurrentCertificate != 0);
+    QString confirmText(hbTrId("txt_certificate_info_device_certificates_can_be_us"));
+    displayQuestionNote(confirmText, this, SLOT(moveToDeviceCertsConfirmationAccepted()));
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsCertificateListView::moveToDeviceCertsConfirmationAccepted()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsCertificateListView::moveToDeviceCertsConfirmationAccepted()
+{
+    Q_ASSERT(mCurrentCertificate != 0);
+    mModel->moveToDeviceCertificates(*mCurrentCertificate);
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsCertificateListView::moveCurrentCertToPersonalCertificates()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsCertificateListView::moveCurrentCertToPersonalCertificates()
+{
+    Q_ASSERT(mCurrentCertificate != 0);
+    // TODO: localized UI string needed
+    QString confirmText(tr("Using personal certificates may require user confirmation. Continue?"));
+    displayQuestionNote(confirmText, this, SLOT(moveToPersonalCertsConfirmationAccepted()));
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsCertificateListView::moveToPersonalCertsConfirmationAccepted()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsCertificateListView::moveToPersonalCertsConfirmationAccepted()
+{
+    Q_ASSERT(mCurrentCertificate != 0);
+    mModel->moveToPersonalCertificates(*mCurrentCertificate);
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsCertificateListView::readAllCertificatesFromModel()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsCertificateListView::readAllCertificatesFromModel()
+{
+    clearModelCertificates();
+    mModel->getCertificates(mModelCertificateList);
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsCertificateListView::displayAllCertificatesReadFromModel()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsCertificateListView::displayAllCertificatesReadFromModel()
+{
+    if (mCertType != AdvSecSettingsCertificate::NotDefined) {
+        mIsRetrieving = false;
+        refreshDisplayedCertificates();
+    }
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsCertificateListView::clearModelCertificates()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsCertificateListView::clearModelCertificates()
+{
+    if (!mModelCertificateList.isEmpty()) {
+        QMutableListIterator<AdvSecSettingsCertificate *> iter(mModelCertificateList);
+        while (iter.hasNext()) {
+            delete iter.next();
+        }
+        mModelCertificateList.clear();
+    }
+    mCurrentCertificate = 0;
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsCertificateListView::refreshDisplayedCertificates()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsCertificateListView::refreshDisplayedCertificates()
+{
+    int currentRow = mListWidget->currentRow();
+    mListWidget->clear();
+    mDisplayedCertificates.clear();
+    QListIterator<AdvSecSettingsCertificate *> iter(mModelCertificateList);
+    while (iter.hasNext()) {
+        AdvSecSettingsCertificate *cert = iter.next();
+        if (cert->certType() == mCertType) {
+            mDisplayedCertificates.append(cert);
+            HbListWidgetItem *item = new HbListWidgetItem;
+            item->setText(cert->label());
+            mListWidget->addItem(item);
+        }
+    }
+    if (mListWidget->count()) {
+        if (currentRow < mListWidget->count()) {
+            mListWidget->setCurrentRow(currentRow);
+        }
+        mStackedWidget->setCurrentWidget(mListWidget);
+    } else {
+        if (mIsRetrieving) {
+            mStackedWidget->setCurrentWidget(mRetrievingText);
+        } else {
+            mStackedWidget->setCurrentWidget(mEmptyText);
+        }
+    }
+}
+
+// ---------------------------------------------------------------------------
+// AdvSecSettingsCertificateListView::refreshAfterCurrentCertRemoved()
+// ---------------------------------------------------------------------------
+//
+void AdvSecSettingsCertificateListView::refreshAfterCurrentCertRemoved()
+{
+    Q_ASSERT(mCurrentCertificate != 0);
+
+    QString currentCertLabel = mCurrentCertificate->label();
+    for (TInt row = 0; row < mListWidget->count(); row++) {
+        HbListWidgetItem *item = mListWidget->item(row);
+        if (item->text() == currentCertLabel) {
+            item = mListWidget->takeItem(row);
+            delete item;
+        }
+    }
+    if (mListWidget->count()) {
+        mStackedWidget->setCurrentWidget(mListWidget);
+    } else {
+        mStackedWidget->setCurrentWidget(mEmptyText);
+    }
+
+    mDisplayedCertificates.removeAll(mCurrentCertificate);
+    mCurrentCertificate = 0;
+
+    readAllCertificatesFromModel();
+}
+