Mercurial > trustbridge
view ui/certificateitemdelegate.cpp @ 582:88c9bdc74175 trustbridge-refactor
New widgets to display certificates in lists.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Tue, 27 May 2014 16:16:21 +0200 |
parents | d4bf4ceee99d |
children |
line wrap: on
line source
/* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik * Software engineering by Intevation GmbH * * This file is Free Software under the GNU GPL (v>=2) * and comes with ABSOLUTELY NO WARRANTY! * See LICENSE.txt for details. */ #include <QtWidgets> #include "certificate.h" #include "mainwindow.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(StatusRole).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); } QSize CertificateItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { int width = QStyledItemDelegate::sizeHint(option, index).width() + 75; int height = 25; return QSize(width, height); }