diff ui/certificateitemdelegate.cpp @ 266:dd6a09d2699f

Added delegate for certificate list items to render a custom ui.
author Raimund Renkert <rrenkert@intevation.de>
date Wed, 02 Apr 2014 09:26:38 +0200
parents
children 6cc124e79066
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/certificateitemdelegate.cpp	Wed Apr 02 09:26:38 2014 +0200
@@ -0,0 +1,90 @@
+#include <QtWidgets>
+
+#include "certificate.h"
+#include "certificateitemdelegate.h"
+
+void CertificateItemDelegate::paint(QPainter *painter,
+    const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+    // Save the current painter.
+    painter->save();
+    int status = index.data(Qt::UserRole + 1).toInt();
+    if (status == 0) {
+        // This status is not known, so draw the default item.
+        QStyledItemDelegate::paint(painter, option, index);
+        painter->restore();
+        return;
+    }
+
+    if (status == Certificate::InstallNew) {
+        //Set the icon and use bold and bigger font to highlight this item.
+        QIcon *icon = new QIcon(":/img/list-add.png");
+        QFont *font = new QFont();
+        font->setBold(true);
+        font->setPointSize(font->pointSize() + 1);
+        drawItem(painter, option, index, icon, font);
+    }
+    else if (status == Certificate::InstallOld) {
+        // Set the icon and use the default font for this item.
+        QIcon *icon = new QIcon(":/img/list-add.png");
+        QFont *font = new QFont();
+        drawItem(painter, option, index, icon, font);
+    }
+    else if (status == Certificate::RemoveNew) {
+        //Set the icon and use bold and bigger font to highlight this item.
+        QIcon *icon = new QIcon(":/img/list-remove.png");
+        QFont *font = new QFont();
+        font->setBold(true);
+        font->setPointSize(font->pointSize() + 1);
+        drawItem(painter, option, index, icon, font);
+    }
+    else if (status == Certificate::RemoveOld) {
+        // Set the icon and use the default font for this item.
+        QIcon *icon = new QIcon(":/img/list-remove.png");
+        QFont *font = new QFont();
+        drawItem(painter, option, index, icon, font);
+    }
+    else {
+        // Draw the default item.
+        QStyledItemDelegate::paint(painter, option, index);
+    }
+    // Restore the painter to have an unmodified painter for the next draw
+    // action.
+    painter->restore();
+    return;
+}
+
+void CertificateItemDelegate::drawItem(QPainter *painter,
+    const QStyleOptionViewItem &option, const QModelIndex &index,
+    QIcon *icon, QFont *font) const
+{
+    // Get temporary style option to draw a checkbox only.
+    QStyleOptionViewItem opt = option;
+    // Initialize the style options with the temporary option object.
+    initStyleOption(&opt, index);
+    // Clear all text to draw the checkbox only.
+    opt.text.clear();
+
+    // Draw highlighted background.
+    if (option.state & QStyle::State_Selected) {
+        painter->fillRect(option.rect, option.palette.highlight());
+    }
+
+    // Draw the checkbox control with the temporary options.
+    QApplication::style()->drawControl(QStyle::CE_ItemViewItem, &opt, painter);
+
+    // Draw the icon.
+    int iconSpace = 25;
+    if (!icon->isNull()) {
+        QRect rect = option.rect.adjusted(25, 0, 0, 0);
+        icon->paint(painter, rect, Qt::AlignVCenter|Qt::AlignLeft);
+        iconSpace = 50;
+    }
+
+    // Draw the text using the given font.
+    QString text = index.data().toString();
+    QRect rect = option.rect.adjusted(iconSpace, 0, 0, 0);
+    painter->setFont(*font);
+    painter->drawText(rect.left(), rect.top(), rect.width(), rect.height(),
+        Qt::AlignVCenter|Qt::AlignLeft, text, &rect);
+}

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