view ui/certificateitemwidget.cpp @ 1106:6f7b7d88f048

(issue115) Rework CertificateListWidgets to have a ToolButton instead of a combobox
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 15 Sep 2014 17:43:56 +0200
parents 2b3526ef2d69
children 9bb9932bb819
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>
#include <QToolButton>

CertificateItemWidget::CertificateItemWidget(QWidget *parent,
                                             const Certificate &cert,
                                             bool state,
                                             QToolButton *btn) :
    QWidget(parent),
    mButton(btn)
{
    mCertificate = cert;
    mState = state;
    /* We carry the state explicitly to be better prepared for future
     * changes */
    btn->setCheckable(true);
    btn->setChecked(!state);
    setupGUI();
}

void CertificateItemWidget::setupGUI()
{
    mLabel = new QLabel;

    setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);

    const QString validity = tr("Validity: %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): <code>%1</code>").arg(mCertificate.fingerprint());
    mLabel->setText(QString::fromLatin1("<big><b>%1</b></big><br/>%2<br/>%3<br/>%4").arg
        (mCertificate.subjectCN()).arg(mCertificate.subjectO()).arg(validity).arg
        (fpstring));
    mLabel->setTextFormat(Qt::RichText);

    mLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);

    mLabel->setTextInteractionFlags(
        Qt::TextSelectableByMouse |
        Qt::TextSelectableByKeyboard);
    mButton->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
    connect(mButton, SIGNAL(toggled (bool)),
        this, SLOT(currentStateChanged(bool)));

    QHBoxLayout *layout = new QHBoxLayout;
    layout->addWidget(mButton);
    mButton->setFixedSize(64, 64);
    mButton->setIconSize(QSize(48, 48));
    /*
    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);
            mComboBox->setToolTip(tr("This certificate is currently installed."));
        }
        else {
            mComboBox->setCurrentIndex(1);
            mComboBox->setToolTip(tr("This certificate is currently not installed."));
        }
        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(64, 64);
        imgLabel->setMargin(8);
        imgLabel->setToolTip(tr("This certificate was uninstalled."));
        layout->addWidget(imgLabel);
    }
    else {
        mComboBox->addItem(QIcon(":/img/trash-empty.png"), QString(), tr("uninstall"));
        mComboBox->addItem(QIcon(":/img/security-medium.png"), QString(), tr("keep"));
        mComboBox->setToolTip(tr("This certificate is currently installed."));
        if (mState)
            mComboBox->setCurrentIndex(0);
        else {
            mComboBox->setCurrentIndex(1);
        }
        layout->addWidget(mComboBox);
    }
    */
    layout->addWidget(mLabel);
    this->setLayout(layout);
}

bool CertificateItemWidget::state()
{
    if (!mButton->isEnabled()) {
        return true;
    }

    /*
    const QString currentString = mComboBox->currentData().toString();

    if (!mCertificate.isInstallCert()) {
        return currentString == tr("uninstall");
    }

    return currentString == mInstallLabel;
    */
    return mState;
}

void CertificateItemWidget::setState(bool state)
{
    mState = state;
    mButton->setChecked(!state);
}

Certificate* CertificateItemWidget::certificate()
{
    return &mCertificate;
}

void CertificateItemWidget::currentStateChanged(bool state)
{
    mState = !state;
    emit stateChanged(mState, mCertificate);
}

http://wald.intevation.org/projects/trustbridge/