rrenkert@582: /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik rrenkert@582: * Software engineering by Intevation GmbH rrenkert@582: * rrenkert@582: * This file is Free Software under the GNU GPL (v>=2) rrenkert@582: * and comes with ABSOLUTELY NO WARRANTY! rrenkert@582: * See LICENSE.txt for details. rrenkert@582: */ rrenkert@582: #include "certificatelistwidget.h" rrenkert@582: #include rrenkert@582: #include rrenkert@582: #include rrenkert@582: #include rrenkert@582: #include rrenkert@582: rrenkert@582: #include "certificateitemwidget.h" rrenkert@582: rrenkert@582: CertificateListWidget::CertificateListWidget(QWidget *parent, Qt::WindowFlags flags) : rrenkert@582: QWidget(parent, flags) rrenkert@582: { rrenkert@582: setupGUI(); rrenkert@582: } rrenkert@582: rrenkert@582: void CertificateListWidget::setupGUI() rrenkert@582: { rrenkert@582: QHBoxLayout *mainLayout = new QHBoxLayout; rrenkert@651: QVBoxLayout *detailMainLayout = new QVBoxLayout; rrenkert@582: mCertificateList = new QListWidget; rrenkert@582: mCertificateList->setFixedWidth(250); rrenkert@582: connect(mCertificateList, rrenkert@582: SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), rrenkert@582: this, rrenkert@582: SLOT(updateDetails(QListWidgetItem*))); rrenkert@582: rrenkert@582: QHBoxLayout *detailLayout = new QHBoxLayout; rrenkert@582: QVBoxLayout *detailLabelLayout = new QVBoxLayout; rrenkert@582: QVBoxLayout *detailContentLayout = new QVBoxLayout; rrenkert@651: QGroupBox *detailBox = new QGroupBox(tr("Details")); rrenkert@582: QLabel *subjectCN = new QLabel(tr("Subject Common Name:")); rrenkert@582: QLabel *subjectOU = new QLabel(tr("Subject Organisation:")); rrenkert@582: QLabel *issuerCN = new QLabel(tr("Issuer Common Name:")); rrenkert@582: QLabel *issuerOU = new QLabel(tr("Issuer Organisation:")); rrenkert@582: QLabel *validFrom = new QLabel(tr("Valid from:")); rrenkert@582: QLabel *validTo = new QLabel(tr("Valid to:")); rrenkert@582: QLabel *fingerprint = new QLabel(tr("Fingerprint:")); rrenkert@582: detailLabelLayout->addWidget(subjectCN); rrenkert@582: detailLabelLayout->addWidget(subjectOU); rrenkert@582: detailLabelLayout->addWidget(issuerCN); rrenkert@582: detailLabelLayout->addWidget(issuerOU); rrenkert@582: detailLabelLayout->addWidget(validFrom); rrenkert@582: detailLabelLayout->addWidget(validTo); rrenkert@582: detailLabelLayout->addWidget(fingerprint); rrenkert@582: mSubjectCN = new QLabel(tr("")); rrenkert@582: mSubjectO = new QLabel(tr("")); rrenkert@582: mIssuerCN = new QLabel(tr("")); rrenkert@582: mIssuerO = new QLabel(tr("")); rrenkert@582: mValidFrom = new QLabel(tr("")); rrenkert@582: mValidTo = new QLabel(tr("")); rrenkert@582: mFingerprint = new QLabel(tr("")); rrenkert@582: mFingerprint->setFont(QFont("DejaVu Sans Mono")); rrenkert@582: detailContentLayout->addWidget(mSubjectCN); rrenkert@582: detailContentLayout->addWidget(mSubjectO); rrenkert@582: detailContentLayout->addWidget(mIssuerCN); rrenkert@582: detailContentLayout->addWidget(mIssuerO); rrenkert@582: detailContentLayout->addWidget(mValidFrom); rrenkert@582: detailContentLayout->addWidget(mValidTo); rrenkert@582: detailContentLayout->addWidget(mFingerprint); rrenkert@582: detailLayout->addLayout(detailLabelLayout); rrenkert@582: detailLayout->addLayout(detailContentLayout); rrenkert@582: detailBox->setLayout(detailLayout); rrenkert@651: detailMainLayout->addWidget(detailBox); rrenkert@651: detailMainLayout->addStretch(1); rrenkert@582: rrenkert@582: mainLayout->addWidget(mCertificateList); rrenkert@651: mainLayout->addLayout(detailMainLayout); rrenkert@582: this->setLayout(mainLayout); rrenkert@582: } rrenkert@582: rrenkert@639: void CertificateListWidget::addCertificate( rrenkert@639: const Certificate &certificate, rrenkert@639: bool state, rrenkert@639: bool editable) rrenkert@582: { rrenkert@582: QListWidgetItem* item = new QListWidgetItem(mCertificateList); rrenkert@582: item->setData(Qt::UserRole, rrenkert@582: QVariant::fromValue(certificate)); rrenkert@582: mCertificateList->addItem(item); rrenkert@582: CertificateItemWidget *widget = rrenkert@639: new CertificateItemWidget(mCertificateList, certificate, state, editable); rrenkert@627: connect(widget, SIGNAL(stateChanged(bool, const Certificate&)), rrenkert@627: this, SLOT(certStateChanged(bool, const Certificate&))); rrenkert@582: item->setSizeHint(widget->minimumSizeHint()); rrenkert@582: mCertificateList->setItemWidget(item, widget); rrenkert@582: } rrenkert@582: rrenkert@582: void CertificateListWidget::addCertificates(const QList &list) rrenkert@582: { rrenkert@582: rrenkert@582: } rrenkert@582: rrenkert@639: void CertificateListWidget::removeCertificate(const Certificate &cert) rrenkert@582: { rrenkert@639: for (int i = 0; i < mCertificateList->count(); i++) { rrenkert@639: QListWidgetItem *item = mCertificateList->item(i); rrenkert@639: CertificateItemWidget *itemWidget = rrenkert@639: static_cast(mCertificateList->itemWidget(item)); rrenkert@639: if (itemWidget->certificate() == cert) { rrenkert@639: QListWidgetItem* item = mCertificateList->takeItem(i); rrenkert@639: delete(item); rrenkert@639: } rrenkert@639: } rrenkert@582: } rrenkert@582: rrenkert@627: void CertificateListWidget::clear() rrenkert@582: { rrenkert@627: mCertificateList->clear(); rrenkert@627: } rrenkert@627: rrenkert@627: QStringList CertificateListWidget::certificates() rrenkert@627: { rrenkert@627: QStringList list; rrenkert@627: for (int i = 0; i < mCertificateList->count(); i++) { rrenkert@627: QListWidgetItem *item = mCertificateList->item(i); rrenkert@627: CertificateItemWidget *itemWidget = rrenkert@627: static_cast(mCertificateList->itemWidget(item)); rrenkert@639: list << itemWidget->certificate().base64Line(); rrenkert@639: } rrenkert@639: return list; rrenkert@639: } rrenkert@639: rrenkert@639: QStringList CertificateListWidget::selectedCertificates() { rrenkert@639: QStringList list; rrenkert@639: for (int i = 0; i < mCertificateList->count(); i++) { rrenkert@639: QListWidgetItem *item = mCertificateList->item(i); rrenkert@639: CertificateItemWidget *itemWidget = rrenkert@639: static_cast(mCertificateList->itemWidget(item)); rrenkert@627: if (itemWidget->state()) { rrenkert@627: list << itemWidget->certificate().base64Line(); rrenkert@627: } rrenkert@627: } rrenkert@627: return list; rrenkert@582: } rrenkert@582: rrenkert@639: QStringList CertificateListWidget::unselectedCertificates() { rrenkert@639: QStringList list; rrenkert@639: for (int i = 0; i < mCertificateList->count(); i++) { rrenkert@639: QListWidgetItem *item = mCertificateList->item(i); rrenkert@639: CertificateItemWidget *itemWidget = rrenkert@639: static_cast(mCertificateList->itemWidget(item)); rrenkert@639: if (!itemWidget->state()) { rrenkert@639: list << itemWidget->certificate().base64Line(); rrenkert@639: } rrenkert@639: } rrenkert@639: return list; rrenkert@639: } rrenkert@639: rrenkert@639: QList CertificateListWidget::certificateList() rrenkert@639: { rrenkert@639: QList list; rrenkert@639: for (int i = 0; i < mCertificateList->count(); i++) { rrenkert@639: QListWidgetItem *item = mCertificateList->item(i); rrenkert@639: CertificateItemWidget *itemWidget = rrenkert@639: static_cast(mCertificateList->itemWidget(item)); rrenkert@639: list << itemWidget->certificate(); rrenkert@639: } rrenkert@639: rrenkert@639: return list; rrenkert@639: } rrenkert@639: rrenkert@639: void CertificateListWidget::setCertState(bool state, const Certificate &cert) rrenkert@639: { rrenkert@639: for (int i = 0; i < mCertificateList->count(); i++) { rrenkert@639: QListWidgetItem *item = mCertificateList->item(i); rrenkert@639: CertificateItemWidget *itemWidget = rrenkert@639: static_cast(mCertificateList->itemWidget(item)); rrenkert@639: if (itemWidget->certificate() == cert && rrenkert@639: itemWidget->state() != state) { rrenkert@639: itemWidget->setState(state); rrenkert@639: } rrenkert@639: } rrenkert@639: } rrenkert@639: rrenkert@582: void CertificateListWidget::updateDetails(QListWidgetItem *item) rrenkert@582: { rrenkert@582: if (item == NULL) { rrenkert@582: return; rrenkert@582: } rrenkert@582: Certificate cert = item->data(Qt::UserRole).value(); rrenkert@582: mSubjectCN->setText(cert.subjectCN()); rrenkert@582: mSubjectO->setText(cert.subjectO()); rrenkert@582: mIssuerCN->setText(cert.issuerCN()); rrenkert@582: mIssuerO->setText(cert.issuerO()); rrenkert@582: mValidFrom->setText(cert.validFrom().toString()); rrenkert@582: mValidTo->setText(cert.validTo().toString()); rrenkert@582: mFingerprint->setText(cert.fingerprint()); rrenkert@582: } rrenkert@627: rrenkert@627: void CertificateListWidget::certStateChanged(bool state, const Certificate &cert) rrenkert@627: { rrenkert@627: int selected = 0; rrenkert@627: for (int i = 0; i < mCertificateList->count(); i++) { rrenkert@627: QListWidgetItem *item = mCertificateList->item(i); rrenkert@627: CertificateItemWidget *itemWidget = rrenkert@627: static_cast(mCertificateList->itemWidget(item)); rrenkert@627: if (itemWidget->state()) { rrenkert@627: selected++; rrenkert@627: } rrenkert@627: } rrenkert@627: emit certListChanged(selected); rrenkert@639: emit certChanged(state, cert); rrenkert@627: } rrenkert@627: rrenkert@627: int CertificateListWidget::selectedCertCount() rrenkert@627: { rrenkert@627: int selected = 0; rrenkert@627: for (int i = 0; i < mCertificateList->count(); i++) { rrenkert@627: QListWidgetItem *item = mCertificateList->item(i); rrenkert@627: CertificateItemWidget *itemWidget = rrenkert@627: static_cast(mCertificateList->itemWidget(item)); rrenkert@627: if (itemWidget->state()) { rrenkert@627: selected++; rrenkert@627: } rrenkert@627: } rrenkert@627: return selected; rrenkert@627: } rrenkert@639: rrenkert@639: bool CertificateListWidget::contains(const Certificate &cert) rrenkert@639: { rrenkert@639: for (int i = 0; i < mCertificateList->count(); i++) { rrenkert@639: QListWidgetItem *item = mCertificateList->item(i); rrenkert@639: CertificateItemWidget *itemWidget = rrenkert@639: static_cast(mCertificateList->itemWidget(item)); rrenkert@639: if (itemWidget->certificate() == cert) { rrenkert@639: return true; rrenkert@639: } rrenkert@639: } rrenkert@639: return false; rrenkert@639: } rrenkert@653: rrenkert@653: void CertificateListWidget::setSelected(int index) rrenkert@653: { rrenkert@653: mCertificateList->setFocus(); rrenkert@653: if (mCertificateList->count() > 0) { rrenkert@653: mCertificateList->item(0)->setSelected(true); rrenkert@653: } rrenkert@653: }