aheinecke@404: /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik
aheinecke@404:  * Software engineering by Intevation GmbH
aheinecke@404:  *
aheinecke@404:  * This file is Free Software under the GNU GPL (v>=2)
aheinecke@404:  * and comes with ABSOLUTELY NO WARRANTY!
aheinecke@404:  * See LICENSE.txt for details.
aheinecke@404:  */
rrenkert@347: #include <QtWidgets>
rrenkert@347: #include <QComboBox>
rrenkert@347: 
rrenkert@347: #include "certificatetabledelegate.h"
rrenkert@347: 
rrenkert@347: void CertificateTableDelegate::paint(QPainter *painter,
rrenkert@347:     const QStyleOptionViewItem &option, const QModelIndex &index) const
rrenkert@347: {
rrenkert@347:     painter->save();
rrenkert@347: 
rrenkert@347:     if (index.column() == 0) {
rrenkert@347:         if (option.state & QStyle::State_Selected) {
rrenkert@347:             painter->fillRect(option.rect, option.palette.highlight());
rrenkert@347:         }
rrenkert@347:         bool value = index.data(Qt::DisplayRole).toBool();
rrenkert@347:         QIcon icon = value ? QIcon(":/img/list-add.png"):QIcon(":/img/list-remove.png") ;
rrenkert@347:         icon.paint(painter, option.rect, Qt::AlignVCenter|Qt::AlignHCenter);
rrenkert@347:     }
rrenkert@347:     else {
rrenkert@347:         QStyledItemDelegate::paint(painter, option, index);
rrenkert@347:     }
rrenkert@347:     painter->restore();
rrenkert@347: }
rrenkert@347: 
rrenkert@347: QWidget *CertificateTableDelegate::createEditor(QWidget *parent,
rrenkert@347:     const QStyleOptionViewItem &option, const QModelIndex &index) const
rrenkert@347: {
rrenkert@347:     if (index.column() == 0) {
rrenkert@347:         // Draw a combobox in the first column for install/remove certificate
rrenkert@347:         // selection.
rrenkert@347:         return drawComboBox(parent, option, index);
rrenkert@347:     }
rrenkert@347:     else {
rrenkert@347:         return QStyledItemDelegate::createEditor(parent, option, index);
rrenkert@347:     }
rrenkert@347: }
rrenkert@347: 
rrenkert@347: QWidget *CertificateTableDelegate::drawComboBox(QWidget *parent,
rrenkert@347:     const QStyleOptionViewItem &option, const QModelIndex &index) const
rrenkert@347: {
rrenkert@358:     bool editable = index.data(Qt::UserRole).toBool();
rrenkert@347:     // Create a combobox and add two items for install/remove.
rrenkert@347:     QComboBox *comboBox = new QComboBox(parent);
andre@1054:     comboBox->setFixedWidth(110);
rrenkert@402:     comboBox->addItem(QIcon(":/img/list-add.png"), tr("add"), QVariant("true"));
rrenkert@358:     if (editable) {
rrenkert@358:         comboBox->addItem(QIcon(":/img/list-remove.png"),
rrenkert@402:             tr("remove"), QVariant("false"));
rrenkert@358:     }
rrenkert@347:     return comboBox;
rrenkert@347: }
rrenkert@347: 
rrenkert@347: void CertificateTableDelegate::setEditorData(QWidget *editor,
rrenkert@347:     const QModelIndex &index) const
rrenkert@347: {
rrenkert@347:     if (index.column() != 0) {
rrenkert@347:         return;
rrenkert@347:     }
rrenkert@347:     // Get the current value from the model.
rrenkert@347:     QString value = index.data(Qt::DisplayRole).toString();
rrenkert@347: 
rrenkert@347:     // Find the index in comboxbox items and set the current index.
rrenkert@347:     QComboBox *comboBox = static_cast<QComboBox*>(editor);
rrenkert@347:     int ndx = comboBox->findData(value, Qt::UserRole);
rrenkert@347:     comboBox->setCurrentIndex(ndx);
rrenkert@347: }
rrenkert@347: 
rrenkert@347: void CertificateTableDelegate::setModelData(QWidget *editor,
rrenkert@347:     QAbstractItemModel *model, const QModelIndex &index) const
rrenkert@347: {
rrenkert@347:     if (index.column() != 0) {
rrenkert@347:         return;
rrenkert@347:     }
rrenkert@347:     QComboBox *comboBox = static_cast<QComboBox*>(editor);
rrenkert@347:     bool value = comboBox->currentData().toBool();
rrenkert@347:     model->setData(index, value, Qt::EditRole);
rrenkert@347: }
rrenkert@347: 
rrenkert@347: void CertificateTableDelegate::updateEditorGeometry(QWidget *editor,
rrenkert@347:     const QStyleOptionViewItem &option, const QModelIndex &index) const
rrenkert@347: {
rrenkert@347:     if (index.column() != 0) {
rrenkert@347:         return;
rrenkert@347:     }
rrenkert@347:     editor->setGeometry(option.rect);
rrenkert@347: }