# HG changeset patch # User Raimund Renkert # Date 1401200181 -7200 # Node ID 88c9bdc74175823f9152af56cdeed78f80f7c6a8 # Parent ab622e09478609f2e3d04a420238d2c48ae5332c New widgets to display certificates in lists. diff -r ab622e094786 -r 88c9bdc74175 ui/certificateitemwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ui/certificateitemwidget.cpp Tue May 27 16:16:21 2014 +0200 @@ -0,0 +1,41 @@ +/* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik + * Software engineering by Intevation GmbH + * + * This file is Free Software under the GNU GPL (v>=2) + * and comes with ABSOLUTELY NO WARRANTY! + * See LICENSE.txt for details. + */ +#include "certificateitemwidget.h" + +#include +#include + +CertificateItemWidget::CertificateItemWidget( + QWidget *parent, + const Certificate &cert) : QWidget(parent) +{ + mCertificate = cert; + setupGUI(); +} + +void CertificateItemWidget::setupGUI() +{ + mLabel = new QLabel(mCertificate.subjectCN()); + mComboBox = new QComboBox; + mComboBox->setFixedWidth(46); + + if (mCertificate.isInstallCert()) { + mComboBox->addItem(QIcon(":/img/list-add.png"), tr("add"), QVariant("true")); + mComboBox->addItem(QIcon(":/img/list-remove.png"), + tr("remove"), QVariant("false")); + } + else { + mComboBox->addItem(QIcon(":/img/list-add.png"), tr("add"), QVariant("true")); + mComboBox->addItem(QIcon(":/img/list-remove.png"), + tr("remove"), QVariant("false")); + } + QHBoxLayout *layout = new QHBoxLayout; + layout->addWidget(mComboBox); + layout->addWidget(mLabel); + this->setLayout(layout); +} diff -r ab622e094786 -r 88c9bdc74175 ui/certificateitemwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ui/certificateitemwidget.h Tue May 27 16:16:21 2014 +0200 @@ -0,0 +1,34 @@ +/* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik + * Software engineering by Intevation GmbH + * + * This file is Free Software under the GNU GPL (v>=2) + * and comes with ABSOLUTELY NO WARRANTY! + * See LICENSE.txt for details. + */ +#ifndef CERTIFICATELISTITEM_H +#define CERTIFICATELISTITEM_H +/** + * @file certificateitemdelegate.h + * @brief Item delegate drawing custom certificate items in list views. + * + */ +#include +#include +#include + +#include "certificate.h" + +class CertificateItemWidget : public QWidget +{ + +public: + CertificateItemWidget(QWidget *parent = 0, const Certificate &cert = Certificate()); + +private: + void setupGUI(); + + Certificate mCertificate; + QLabel *mLabel; + QComboBox *mComboBox; +}; +#endif diff -r ab622e094786 -r 88c9bdc74175 ui/certificatelistwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ui/certificatelistwidget.cpp Tue May 27 16:16:21 2014 +0200 @@ -0,0 +1,115 @@ +/* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik + * Software engineering by Intevation GmbH + * + * This file is Free Software under the GNU GPL (v>=2) + * and comes with ABSOLUTELY NO WARRANTY! + * See LICENSE.txt for details. + */ +#include "certificatelistwidget.h" +#include +#include +#include +#include +#include + +#include "certificateitemwidget.h" + +CertificateListWidget::CertificateListWidget(QWidget *parent, Qt::WindowFlags flags) : + QWidget(parent, flags) +{ + setupGUI(); +} + +void CertificateListWidget::setupGUI() +{ + QHBoxLayout *mainLayout = new QHBoxLayout; + mCertificateList = new QListWidget; + mCertificateList->setFixedWidth(250); + connect(mCertificateList, + SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), + this, + SLOT(updateDetails(QListWidgetItem*))); + + QHBoxLayout *detailLayout = new QHBoxLayout; + QVBoxLayout *detailLabelLayout = new QVBoxLayout; + QVBoxLayout *detailContentLayout = new QVBoxLayout; + QGroupBox *detailBox = new QGroupBox(); + QLabel *subjectCN = new QLabel(tr("Subject Common Name:")); + QLabel *subjectOU = new QLabel(tr("Subject Organisation:")); + QLabel *issuerCN = new QLabel(tr("Issuer Common Name:")); + QLabel *issuerOU = new QLabel(tr("Issuer Organisation:")); + QLabel *validFrom = new QLabel(tr("Valid from:")); + QLabel *validTo = new QLabel(tr("Valid to:")); + QLabel *fingerprint = new QLabel(tr("Fingerprint:")); + detailLabelLayout->addWidget(subjectCN); + detailLabelLayout->addWidget(subjectOU); + detailLabelLayout->addWidget(issuerCN); + detailLabelLayout->addWidget(issuerOU); + detailLabelLayout->addWidget(validFrom); + detailLabelLayout->addWidget(validTo); + detailLabelLayout->addWidget(fingerprint); + mSubjectCN = new QLabel(tr("")); + mSubjectO = new QLabel(tr("")); + mIssuerCN = new QLabel(tr("")); + mIssuerO = new QLabel(tr("")); + mValidFrom = new QLabel(tr("")); + mValidTo = new QLabel(tr("")); + mFingerprint = new QLabel(tr("")); + mFingerprint->setFont(QFont("DejaVu Sans Mono")); + detailContentLayout->addWidget(mSubjectCN); + detailContentLayout->addWidget(mSubjectO); + detailContentLayout->addWidget(mIssuerCN); + detailContentLayout->addWidget(mIssuerO); + detailContentLayout->addWidget(mValidFrom); + detailContentLayout->addWidget(mValidTo); + detailContentLayout->addWidget(mFingerprint); + detailLayout->addLayout(detailLabelLayout); + detailLayout->addLayout(detailContentLayout); + detailBox->setLayout(detailLayout); + + mainLayout->addWidget(mCertificateList); + mainLayout->addWidget(detailBox); + this->setLayout(mainLayout); +} + +void CertificateListWidget::addCertificate(const Certificate &certificate) +{ + QListWidgetItem* item = new QListWidgetItem(mCertificateList); + item->setData(Qt::UserRole, + QVariant::fromValue(certificate)); + mCertificateList->addItem(item); + CertificateItemWidget *widget = + new CertificateItemWidget(mCertificateList, certificate); + item->setSizeHint(widget->minimumSizeHint()); + mCertificateList->setItemWidget(item, widget); +} + +void CertificateListWidget::addCertificates(const QList &list) +{ + +} + +void CertificateListWidget::removeCertificate(int ndx) +{ + +} + +QList CertificateListWidget::getCertificates() +{ + return QList(); +} + +void CertificateListWidget::updateDetails(QListWidgetItem *item) +{ + if (item == NULL) { + return; + } + Certificate cert = item->data(Qt::UserRole).value(); + mSubjectCN->setText(cert.subjectCN()); + mSubjectO->setText(cert.subjectO()); + mIssuerCN->setText(cert.issuerCN()); + mIssuerO->setText(cert.issuerO()); + mValidFrom->setText(cert.validFrom().toString()); + mValidTo->setText(cert.validTo().toString()); + mFingerprint->setText(cert.fingerprint()); +} diff -r ab622e094786 -r 88c9bdc74175 ui/certificatelistwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ui/certificatelistwidget.h Tue May 27 16:16:21 2014 +0200 @@ -0,0 +1,51 @@ +/* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik + * Software engineering by Intevation GmbH + * + * This file is Free Software under the GNU GPL (v>=2) + * and comes with ABSOLUTELY NO WARRANTY! + * See LICENSE.txt for details. + */ +#ifndef CERTIFICATELISTWIDGET_H +#define CERTIFICATELISTWIDGET_H + +#include +#include +#include +#include + +#include "certificate.h" +/** + * @file certificatelistwidget.h + * @brief Displays a list of certificates and a details panel for a selected + * certificate. + */ + +Q_DECLARE_METATYPE(Certificate); +class CertificateListWidget : public QWidget +{ + Q_OBJECT +public: + CertificateListWidget(QWidget *parent, Qt::WindowFlags flags = 0); + + void addCertificate(const Certificate &certificate); + void addCertificates(const QList &list); + void removeCertificate(int ndx); + QList getCertificates(); + +private: + void setupGUI(); + + QListWidget *mCertificateList; + QLabel *mSubjectCN; + QLabel *mSubjectO; + QLabel *mIssuerCN; + QLabel *mIssuerO; + QLabel *mValidFrom; + QLabel *mValidTo; + QLabel *mFingerprint; + +private slots: + void updateDetails(QListWidgetItem *item); + +}; +#endif // CERTIFICATELISTWIDGET_H