Mercurial > trustbridge
view ui/certificateitemwidget.cpp @ 746:d73f4e58d117
Add strecht also between remove button
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Fri, 04 Jul 2014 16:20:58 +0200 |
parents | b6172b9f885d |
children | 9f13c00a2647 |
line wrap: on
line source
/* 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 <QHBoxLayout> #include <QDebug> #include <QStyleFactory> CertificateItemWidget::CertificateItemWidget(QWidget *parent, const Certificate &cert, bool state, bool editable, const QString &installLabel, const QString &removeLabel) : QWidget(parent), mInstallLabel (installLabel), mRemoveLabel (removeLabel) { mCertificate = cert; mState = state; mEditable = editable; setupGUI(); } /* We use the label as data to hide it in the normal dropdown menu and only * show it when the popup is shown.*/ void CertificateItemWidget::setupGUI() { mLabel = new QLabel; mComboBox = new IconOnlyTextPopupBox; QStyle *fusionStyle = QStyleFactory::create("Fusion"); if (!fusionStyle) { qDebug() << "Failed to create fusion style"; } else { mComboBox->setStyle(fusionStyle); } mComboBox->setIconSize(QSize(48, 48)); mComboBox->setFixedWidth(68); const QString validity = tr("Valid: %1 until %2").arg( QLocale::system().toString(mCertificate.validFrom().date(), QLocale::ShortFormat)).arg( QLocale::system().toString(mCertificate.validTo().date(), QLocale::ShortFormat)); const QString fpstring = tr("Fingerprint (SHA1): <%1>").arg(mCertificate.fingerprint()); mLabel->setText(QString::fromLatin1("<big><b>%1</b><br/>%2<br/>%3<br/>%4</big>").arg (mCertificate.subjectCN()).arg(mCertificate.subjectO()).arg(validity).arg (fpstring)); mLabel->setTextFormat(Qt::RichText); mLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); mComboBox->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); connect(mComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(currentStateChanged(int))); QHBoxLayout *layout = new QHBoxLayout; if (mCertificate.isInstallCert()) { mComboBox->addItem(QIcon(":/img/security-high.png"), QString(), mInstallLabel); mComboBox->addItem(QIcon(":/img/security-low.png"), QString(), mRemoveLabel); if (mState) mComboBox->setCurrentIndex(0); else { mComboBox->setCurrentIndex(1); } layout->addWidget(mComboBox); } else if (!mCertificate.isInstallCert() && !mEditable){ QImage *img = new QImage(":/img/trash-empty.png"); QLabel *imgLabel = new QLabel; imgLabel->setPixmap(QPixmap::fromImage(*img)); imgLabel->setFixedSize(48, 48); imgLabel->setMargin(2); layout->addWidget(imgLabel); } else { mComboBox->addItem(QIcon(":/img/trash-empty.png"), QString(), tr("uninstall")); mComboBox->addItem(QIcon(":/img/security-medium.png"), QString(), tr("keep")); if (mState) mComboBox->setCurrentIndex(0); else { mComboBox->setCurrentIndex(1); } layout->addWidget(mComboBox); } layout->addWidget(mLabel); this->setLayout(layout); } bool CertificateItemWidget::state() { if (!mEditable) { return true; } const QString currentString = mComboBox->currentData().toString(); if (!mCertificate.isInstallCert()) { return currentString == tr("uninstall"); } return currentString == mInstallLabel; } void CertificateItemWidget::setState(bool state) { disconnect(mComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(currentStateChanged(int))); if (state) { mComboBox->setCurrentIndex(0); } else { mComboBox->setCurrentIndex(1); } connect(mComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(currentStateChanged(int))); } Certificate CertificateItemWidget::certificate() { return mCertificate; } void CertificateItemWidget::currentStateChanged(int) { bool state = mComboBox->currentData().toBool(); emit stateChanged(state, mCertificate); } void IconOnlyTextPopupBox::showPopup() { for (int i = 0; i < count(); i++) { setItemText(i, itemData(i).toString()); } QComboBox::showPopup(); } void IconOnlyTextPopupBox::hidePopup() { for (int i = 0; i < count(); i++) { setItemText(i, QString()); } QComboBox::hidePopup(); }