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 rrenkert@347: #include 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(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(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: }