appinstaller/AppinstUi/sifuidevicedialogplugin/src/sifuidialogcertificatedetails.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 27 May 2010 12:58:35 +0300
changeset 37 6e7b00453237
child 42 d17dc5398051
permissions -rw-r--r--
Revision: 201019 Kit: 2010121

/*
* 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 details dialog in SifUi
*
*/

#include "sifuidialogcertificatedetails.h"      // SifUiCertificateDetails
#include "sifuidialogcertificateinfo.h"         // SifUiDialogCertificateInfo
#include <hblabel.h>                            // HbLabel
#include <hbtextedit.h>                         // HbTextEdit
#include <hblistwidget.h>                       // HbListWidget
#include <hblistwidgetitem.h>                   // HbListWidgetItem
#include <hbaction.h>                           // HbAction
#include <QTextStream>


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

// ----------------------------------------------------------------------------
// SifUiDialogCertificateDetails::SifUiDialogCertificateDetails()
// ----------------------------------------------------------------------------
//
SifUiDialogCertificateDetails::SifUiDialogCertificateDetails(
    const QList<SifUiDialogCertificateInfo*> &certificates) : HbDialog(),
    mCertificates(certificates)
{
    setDismissPolicy(HbPopup::NoDismiss);
    setTimeout(HbPopup::NoTimeout);
}

// ----------------------------------------------------------------------------
// SifUiDialogCertificateDetails::showDetails()
// ----------------------------------------------------------------------------
//
void SifUiDialogCertificateDetails::showDetails()
{
    int count = mCertificates.count();
    Q_ASSERT(count != 0);
    if (count == 1) {
        showCertificate(0);
    } else {
        showList();
    }
    open();
}

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

// ----------------------------------------------------------------------------
// SifUiDialogCertificateDetails::certificateDetails()
// ----------------------------------------------------------------------------
//
QString SifUiDialogCertificateDetails::certificateDetails(
    const SifUiDialogCertificateInfo& certificate)
{
    // TODO: change to properly localizable string
    QString details;
    QTextStream stream(&details);
    stream << tr("Issuer:\n")
        << certificate.issuerName()
        << endl << endl;
    stream << tr("Subject:\n")
        << certificate.subjectName()
        << endl << endl;
    stream << tr("Valid from:\n")
        << certificate.validFrom().toString()
        << endl << endl;
    stream << tr("Valid until:\n")
        << certificate.validTo().toString()
        << endl << endl;
    stream << tr("Serial number:\n")
        << certificate.formattedSerialNumber()
        << endl << endl;
    stream << tr("Fingerprint (SHA1):\n")
        << certificate.formattedFingerprint()
        << endl;
    return details;
}

// ----------------------------------------------------------------------------
// SifUiDialogCertificateDetails::showList()
// ----------------------------------------------------------------------------
//
void SifUiDialogCertificateDetails::showList()
{
    int count = mCertificates.count();
    Q_ASSERT(count > 1);

    // TODO: localisation
    HbLabel *title = new HbLabel(tr("Select certificate"));
    setHeadingWidget(title);

    HbListWidget *content = new HbListWidget;
    for (int index = 0; index < count; ++index ) {
        HbListWidgetItem *item = new HbListWidgetItem();
        item->setData(QVariant(mCertificates.at(index)->subjectName()));
        content->addItem(item);
    }
    setContentWidget(content);
    connect(content, SIGNAL(activated(HbListWidgetItem*)),
        this, SLOT(certificateSelected()));

    setPrimaryAction(new HbAction(hbTrId("txt_common_button_close")));
}

// ----------------------------------------------------------------------------
// SifUiDialogCertificateDetails::certificateSelected()
// ----------------------------------------------------------------------------
//
void SifUiDialogCertificateDetails::certificateSelected()
{
    QGraphicsWidget *content = contentWidget();
    if (content->type() == Hb::ItemType_ListView) {
        HbListWidget *listWidget = reinterpret_cast<HbListWidget*>(content);
        int index = listWidget->currentRow();
        if (index >= 0 && index < mCertificates.count()) {
            showCertificate(index);
        }
    }
}

// ----------------------------------------------------------------------------
// SifUiDialogCertificateDetails::showCertificate()
// ----------------------------------------------------------------------------
//
void SifUiDialogCertificateDetails::showCertificate(int index)
{
    // TODO: localisation
    HbLabel *title = new HbLabel(tr("Certificate details"));
    setHeadingWidget(title);

    HbTextEdit *content = new HbTextEdit;
    Q_ASSERT(index >= 0 && index < mCertificates.count());
    QString details = certificateDetails(*mCertificates[index]);
    content->setPlainText(details);
    content->setReadOnly(true);
    setContentWidget(content);

    setPrimaryAction(new HbAction(hbTrId("txt_common_button_close")));
}