changeset 347:dde533ba4fcc

Added table item delegate for certificates.
author Raimund Renkert <rrenkert@intevation.de>
date Thu, 10 Apr 2014 14:13:34 +0200
parents a54925d41056
children e6aa82466420
files ui/certificatetabledelegate.cpp ui/certificatetabledelegate.h
diffstat 2 files changed, 132 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /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 <QtWidgets>
+#include <QComboBox>
+
+#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<QComboBox*>(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<QComboBox*>(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);
+}
--- /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 <QStyledItemDelegate>
+
+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

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