cpsecplugins/cpadvancedsecplugin/src/advsecsettingscertificatedetailview.cpp
author hgs
Thu, 14 Oct 2010 13:56:11 +0300
changeset 63 989397f9511c
permissions -rw-r--r--
201039_03

/*
* 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 detail view in advanced security settings
*
*/

#include "advsecsettingscertificatedetailview.h"
#include "advsecsettingscertificatemodel.h"
#include "advsecsettingscertificate.h"
#include "advsecsettingscerttrustsettingsview.h"
#include <QGraphicsLinearLayout>
#include <QTextStream>
#include <HbGroupBox>
#include <HbScrollArea>
#include <HbLabel>
#include <HbMenu>
#include <HbAction>


// ======== MEMBER FUNCTIONS ========

// ---------------------------------------------------------------------------
// AdvSecSettingsCertificateDetailView::AdvSecSettingsCertificateDetailView()
// ---------------------------------------------------------------------------
//
AdvSecSettingsCertificateDetailView::AdvSecSettingsCertificateDetailView(
        AdvSecSettingsCertificateModel &model, QGraphicsItem *parent) :
        AdvSecSettingsViewBase(0, parent), mModel(model), mCertificate(0),
        mDetails(), mViewLabel(0), mScrollArea(0), mDetailsText(0)
{
    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);

    mViewLabel = new HbGroupBox;
    layout->addItem(mViewLabel);

    mScrollArea = new HbScrollArea;
    mDetailsText = new HbLabel;
    mDetailsText->setTextWrapping(Hb::TextWordWrap);
    mScrollArea->setContentWidget(mDetailsText);
    mScrollArea->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOn);
    layout->addItem(mScrollArea);

    setLayout(layout);

    connect(&mModel, SIGNAL(getCertificateDetailsCompleted()),
        this, SLOT(certificateDetailsCompleted()));
    connect(&mModel, SIGNAL(deleteCertificateCompleted()),
        this, SLOT(displayPreviousView()));
}

// ---------------------------------------------------------------------------
// AdvSecSettingsCertificateDetailView::~AdvSecSettingsCertificateDetailView()
// ---------------------------------------------------------------------------
//
AdvSecSettingsCertificateDetailView::~AdvSecSettingsCertificateDetailView()
{
}

// ---------------------------------------------------------------------------
// AdvSecSettingsCertificateDetailView::setCertificate()
// ---------------------------------------------------------------------------
//
void AdvSecSettingsCertificateDetailView::setCertificate(
    const AdvSecSettingsCertificate &cert)
{
    mCertificate = &cert;

    menu()->clearActions();
    if (cert.certType() == AdvSecSettingsCertificate::AuthorityCertificate) {
        HbAction *trustSettingsAction = 0;
        trustSettingsAction = new HbAction(hbTrId("txt_certificate_manager_menu_trust_settings"));
        connect(trustSettingsAction, SIGNAL(triggered()), this, SLOT(showTrustSettings()));
        menu()->addAction(trustSettingsAction);
    }
    if (mModel.isDeletable(cert)) {
        HbAction *deleteAction = new HbAction(hbTrId("txt_common_menu_delete"));
        connect(deleteAction, SIGNAL(triggered()), this, SLOT(deleteCertificate()));
        menu()->addAction(deleteAction);
    }

    mDetails.clear();
    mModel.getCertificateDetails(cert, mDetails);

    mDetailsText->clear();
}

// ---------------------------------------------------------------------------
// AdvSecSettingsCertificateDetailView::certificateDetailsCompleted()
// ---------------------------------------------------------------------------
//
void AdvSecSettingsCertificateDetailView::certificateDetailsCompleted()
{
    QString label;
    QString details;
    QTextStream stream(&details);

    bool isFirst(true);
    QMapIterator<int, QString> iter(mDetails);
    while (iter.hasNext()) {
        if (!isFirst) {
            stream << endl;
        }
        isFirst = false;

        int key = iter.next().key();
        switch (key) {
        case AdvSecSettingsCertificateModel::Label:
            label = iter.value();
            break;
        case AdvSecSettingsCertificateModel::Issuer:
            stream << hbTrId("txt_certificate_list_issuer") << endl
                << iter.value() << endl;
            break;
        case AdvSecSettingsCertificateModel::Subject:
            stream << hbTrId("txt_certificate_list_subject") << endl
                << iter.value() << endl;
            break;
        case AdvSecSettingsCertificateModel::ValidFrom:
            stream << hbTrId("txt_certificate_list_valid_from") << endl
                << iter.value() << endl;
            break;
        case AdvSecSettingsCertificateModel::ValidTo:
            stream << hbTrId("txt_certificate_list_valid_until") << endl
                << iter.value() << endl;
            break;
        case AdvSecSettingsCertificateModel::Location:
            // TODO: localized UI string needed
            stream << tr("Location:") << endl << iter.value() << endl;
            break;
        case AdvSecSettingsCertificateModel::Format:
            stream << hbTrId("txt_certificate_list_certificate_format") << endl
                << iter.value() << endl;
            break;
        case AdvSecSettingsCertificateModel::KeyUsage:
            // TODO: localized UI string needed
            stream << tr("Key usage:") << endl << iter.value() << endl;
            break;
        case AdvSecSettingsCertificateModel::KeyLocation:
            // TODO: localized UI string needed
            stream << tr("Key location:") << endl << iter.value() << endl;
            break;
        case AdvSecSettingsCertificateModel::Algorithm:
            stream << hbTrId("txt_certificate_list_algorithm") << endl
                << iter.value() << endl;
            break;
        case AdvSecSettingsCertificateModel::SerialNumber:
            stream << hbTrId("txt_certificate_list_serial_number") << endl
                << iter.value() << endl;
            break;
        case AdvSecSettingsCertificateModel::FingerprintSHA1:
            stream << hbTrId("txt_certificate_list_fingerprint_sha1") << endl
                << iter.value() << endl;
            break;
        case AdvSecSettingsCertificateModel::FingerprintMD5:
            stream << hbTrId("txt_certificate_list_fingerprint_md5") << endl
                << iter.value() << endl;
            break;
        case AdvSecSettingsCertificateModel::PublicKey:
            // TODO: localized UI string needed
            stream << tr("Public key:") << endl << iter.value() << endl;
            break;
        case AdvSecSettingsCertificateModel::TrustedSites:
            // TODO: localized UI string needed
            stream << tr("Trusted sites:") << endl << iter.value() << endl;
            break;
        default:
            break;
        }
    }

    mViewLabel->setHeading(label);
    mDetailsText->setPlainText(details);
}

// ---------------------------------------------------------------------------
// AdvSecSettingsCertificateDetailView::showTrustSettings()
// ---------------------------------------------------------------------------
//
void AdvSecSettingsCertificateDetailView::showTrustSettings()
{
    Q_ASSERT(mCertificate != 0);
    AdvSecSettingsCertTrustSettingsView *trustSettingsView =
        new AdvSecSettingsCertTrustSettingsView(mModel);
    trustSettingsView->setDeleteOnClose(true);
    trustSettingsView->setCertificate(*mCertificate);
    displayView(trustSettingsView);
}

// ---------------------------------------------------------------------------
// AdvSecSettingsCertificateDetailView::deleteCertificate()
// ---------------------------------------------------------------------------
//
void AdvSecSettingsCertificateDetailView::deleteCertificate()
{
    Q_ASSERT(mCertificate != 0);
    // TODO: localized UI string needed
    QString confirmText(tr("Delete %1?").arg(mCertificate->label()));
    displayQuestionNote(confirmText, this, SLOT(deleteConfirmationAccepted()));
}

// ---------------------------------------------------------------------------
// AdvSecSettingsCertificateDetailView::deleteConfirmationAccepted()
// ---------------------------------------------------------------------------
//
void AdvSecSettingsCertificateDetailView::deleteConfirmationAccepted()
{
    Q_ASSERT(mCertificate != 0);
    mModel.deleteCertificate(*mCertificate);
}