# HG changeset patch # User Raimund Renkert # Date 1397132014 -7200 # Node ID dde533ba4fcc47188262ceb915943462762c7060 # Parent a54925d41056069bc141ba48fe140ddaab3dcb07 Added table item delegate for certificates. diff -r a54925d41056 -r dde533ba4fcc ui/certificatetabledelegate.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ui/certificatetabledelegate.cpp Thu Apr 10 14:13:34 2014 +0200 @@ -0,0 +1,82 @@ +#include +#include + +#include "certificatetabledelegate.h" + +void CertificateTableDelegate::paint(QPainter *painter, + const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + painter->save(); + + if (index.column() == 0) { + if (option.state & QStyle::State_Selected) { + painter->fillRect(option.rect, option.palette.highlight()); + } + bool value = index.data(Qt::DisplayRole).toBool(); + QIcon icon = value ? QIcon(":/img/list-add.png"):QIcon(":/img/list-remove.png") ; + icon.paint(painter, option.rect, Qt::AlignVCenter|Qt::AlignHCenter); + } + else { + QStyledItemDelegate::paint(painter, option, index); + } + painter->restore(); +} + +QWidget *CertificateTableDelegate::createEditor(QWidget *parent, + const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + if (index.column() == 0) { + // Draw a combobox in the first column for install/remove certificate + // selection. + return drawComboBox(parent, option, index); + } + else { + return QStyledItemDelegate::createEditor(parent, option, index); + } +} + +QWidget *CertificateTableDelegate::drawComboBox(QWidget *parent, + const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + // Create a combobox and add two items for install/remove. + QComboBox *comboBox = new QComboBox(parent); + comboBox->addItem(QIcon(":/img/list-add.png"), QString(""), QVariant("true")); + comboBox->addItem(QIcon(":/img/list-remove.png"), QString(""), QVariant("false")); + return comboBox; +} + +void CertificateTableDelegate::setEditorData(QWidget *editor, + const QModelIndex &index) const +{ + if (index.column() != 0) { + return; + } + // Get the current value from the model. + QString value = index.data(Qt::DisplayRole).toString(); + + qDebug() << "model value is: " + index.data(Qt::DisplayRole).toString(); + // Find the index in comboxbox items and set the current index. + QComboBox *comboBox = static_cast(editor); + int ndx = comboBox->findData(value, Qt::UserRole); + comboBox->setCurrentIndex(ndx); +} + +void CertificateTableDelegate::setModelData(QWidget *editor, + QAbstractItemModel *model, const QModelIndex &index) const +{ + if (index.column() != 0) { + return; + } + QComboBox *comboBox = static_cast(editor); + bool value = comboBox->currentData().toBool(); + model->setData(index, value, Qt::EditRole); +} + +void CertificateTableDelegate::updateEditorGeometry(QWidget *editor, + const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + if (index.column() != 0) { + return; + } + editor->setGeometry(option.rect); +} diff -r a54925d41056 -r dde533ba4fcc ui/certificatetabledelegate.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ui/certificatetabledelegate.h Thu Apr 10 14:13:34 2014 +0200 @@ -0,0 +1,50 @@ +#ifndef CERTIFICATETABLEDELEGATE_H +#define CERTIFICATETABLEDELEGATE_H +/** + * @file certificatetabledelegate.h + * @brief Item delegate drawing custom certificate items in table views. + * + */ + +#include + +class CertificateTableDelegate : public QStyledItemDelegate +{ +Q_OBJECT + +public: + CertificateTableDelegate(QWidget *parent = 0) : QStyledItemDelegate(parent){} + + /** + * @brief Renders the delegate using the given painter and options. + * + * @param painter The painter to draw the item. + * @param option The style options. + * @param index The model index of the item to draw. + */ + void paint(QPainter *painter, const QStyleOptionViewItem &option, + const QModelIndex &index) const; + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, + const QModelIndex &index) const; + + void setEditorData(QWidget *editor, const QModelIndex &index) const; + void setModelData(QWidget *editor, QAbstractItemModel *model, + const QModelIndex &index) const; + + void updateEditorGeometry(QWidget *editor, + const QStyleOptionViewItem &option, const QModelIndex &index) const; +private: + + /** + * @brief Draw the item using the given parameters. + * + * @param painter The painter to draw the item. + * @param option The style options. + * @param index The model index of the item to draw. + * @param icon The icon to display. + * @param font The font used to draw text. + */ + QWidget *drawComboBox(QWidget *parent, const QStyleOptionViewItem &option, + const QModelIndex &index) const; +}; +#endif