// Squawk messenger. // Copyright (C) 2019 Yury Gubich // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . #include "keydelegate.h" #include #include #include "keysmodel.h" constexpr int minHeight = 50; constexpr int minWidth = 400; UI::KeyDelegate::KeyDelegate(QObject* parent): QStyledItemDelegate(parent), fingerPrintFont(QFontDatabase::systemFont(QFontDatabase::FixedFont)) { } UI::KeyDelegate::~KeyDelegate() {} void UI::KeyDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { painter->save(); painter->setRenderHint(QPainter::Antialiasing, true); bool hover = option.state & QStyle::State_MouseOver; if (hover) { painter->save(); painter->fillRect(option.rect, option.palette.brush(QPalette::Inactive, QPalette::Highlight)); painter->restore(); } QVariant fingerPrintV = index.data(UI::KeysModel::FingerPrint); if (fingerPrintV.isValid()) { painter->save(); QByteArray fingerPrint = fingerPrintV.toByteArray(); painter->setFont(fingerPrintFont); painter->drawText(option.rect, option.displayAlignment | Qt::AlignTop, fingerPrint.toHex()); painter->restore(); } painter->drawText(option.rect, option.displayAlignment, index.data().toString()); painter->restore(); } QSize UI::KeyDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const { QSize size = QStyledItemDelegate::sizeHint(option, index); if (size.width() < minWidth) size.setWidth(minWidth); if (size.height() < minHeight) size.setHeight(minHeight); return size; }