view ui/certificateitemwidget.cpp @ 685:248d4f24e618

(Issue 29) Uneditable items are always selected
author Andre Heinecke <andre.heinecke@intevation.de>
date Tue, 01 Jul 2014 12:06:38 +0200
parents c7405d526ead
children 973a7ce19658
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>

CertificateItemWidget::CertificateItemWidget(
    QWidget *parent,
    const Certificate &cert,
    bool state,
    bool editable) : QWidget(parent)
{
    mCertificate = cert;
    mState = state;
    mEditable = editable;
    setupGUI();
}

void CertificateItemWidget::setupGUI()
{
    mLabel = new QLabel(mCertificate.subjectCN());
    mComboBox = new QComboBox;
    mComboBox->setFixedWidth(46);
    connect(mComboBox, SIGNAL(currentIndexChanged(int)),
        this, SLOT(currentStateChanged(int)));

    QHBoxLayout *layout = new QHBoxLayout;
    if (mCertificate.isInstallCert()) {
        mComboBox->addItem(QIcon(":/img/security-high.png"), tr("install"), QVariant("true"));
        mComboBox->addItem(QIcon(":/img/security-low.png"), tr("remove"), QVariant("false"));
        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(28, 28);
        imgLabel->setMargin(2);
        layout->addWidget(imgLabel);
    }
    else {
        mComboBox->addItem(QIcon(":/img/trash-empty.png"), tr("uninstall"), QVariant("true"));
        mComboBox->addItem(QIcon(":/img/security-medium.png"), tr("keep"), QVariant("false"));
        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;
    }
    return mComboBox->currentData().toBool();
}

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);
}

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