Correctly display the data on the delegate

A bit more complex than I tought it would be (and a ton of trial
and error to find the right spot on the delegate to draw stuff)
this delegate follows the current style (so it should be okaish
on a dark and on a light theme)

This is supposed to work on a QCompleter, but it doesn't (I really don't
know why, so maybe I'll remove that completer. sigh.)

Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Tomaz Canabrava 2015-07-01 21:04:03 -03:00 committed by Dirk Hohndel
parent 3b0936eca3
commit 4059f5d995
2 changed files with 66 additions and 7 deletions

View file

@ -63,6 +63,17 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent),
completer->setCompletionColumn(LocationInformationModel::NAME);
completer->setCompletionRole(Qt::DisplayRole);
completer->setCompletionMode(QCompleter::PopupCompletion);
completer->setCaseSensitivity(Qt::CaseInsensitive);
QListView *completerListview = new QListView();
completerListview->setItemDelegate(new LocationFilterDelegate());
completer->setPopup(completerListview);
QListView *completerListView2 = new QListView();
completerListView2->setItemDelegate(new LocationFilterDelegate());
completerListView2->setModel(LocationInformationModel::instance());
completerListView2->setModelColumn(1);
completerListView2->show();
ui.location->setCompleter(completer);
connect(ui.addDiveSite, SIGNAL(clicked()), this, SLOT(showDiveSiteSimpleEdit()));
@ -107,9 +118,6 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent),
connect(ui.cylinders->view(), SIGNAL(clicked(QModelIndex)), this, SLOT(editCylinderWidget(QModelIndex)));
connect(ui.weights->view(), SIGNAL(clicked(QModelIndex)), this, SLOT(editWeightWidget(QModelIndex)));
ui.location->completer()->setCaseSensitivity(Qt::CaseInsensitive);
ui.location->completer()->setCompletionMode(QCompleter::PopupCompletion);
ui.cylinders->view()->setItemDelegateForColumn(CylindersModel::TYPE, new TankInfoDelegate(this));
ui.cylinders->view()->setItemDelegateForColumn(CylindersModel::USE, new TankUseDelegate(this));
ui.weights->view()->setItemDelegateForColumn(WeightModel::TYPE, new WSInfoDelegate(this));

View file

@ -10,10 +10,15 @@
#include "weigthsysteminfomodel.h"
#include "weightmodel.h"
#include "divetripmodel.h"
#include "qthelper.h"
#include <QCompleter>
#include <QKeyEvent>
#include <QTextDocument>
#include <QApplication>
#include <QFont>
#include <QBrush>
#include <QColor>
QSize DiveListDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
@ -483,14 +488,60 @@ LocationFilterDelegate::LocationFilterDelegate(QObject *parent)
void LocationFilterDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QFont fontBigger = qApp->font();
QFont fontSmaller = qApp->font();
QFontMetrics fmBigger(fontBigger);
QStyleOptionViewItemV4 opt = option;
QStyledItemDelegate::initStyleOption(&opt, index);
QBrush bg;
QString diveSiteName = index.data().toString();
struct dive_site *ds = get_dive_site_by_uuid(
index.model()->data(index.model()->index(index.row(),0)).toInt()
);
if (!ds)
return;
const char *gpsCoords = printGPSCoords(displayed_dive_site.latitude.udeg, displayed_dive_site.longitude.udeg);
QString diveSiteCoords(gpsCoords);
free( (void*) gpsCoords);
fontBigger.setPointSize(fontBigger.pointSize() + 2);
fontBigger.setBold(true);
painter->save();
painter->drawText(QPoint(0, 0), index.data().toString());
painter->setRenderHint(QPainter::Antialiasing);
if( ( option.state & QStyle::State_Selected ) || ( option.state & QStyle::State_MouseOver ) )
bg = option.palette.highlight();
else
bg = option.palette.window();
painter->setPen(QPen(Qt::NoPen));
painter->setBrush(bg);
painter->drawRect(option.rect);
painter->restore();
painter->save();
painter->setBrush(option.palette.text());
painter->setFont(fontBigger);
painter->drawText(option.rect.x(),option.rect.y() + fmBigger.boundingRect("YH").height(), diveSiteName);
painter->setFont(fontSmaller);
painter->setBrush(option.palette.brightText());
painter->drawText(option.rect.x(),option.rect.y() + fmBigger.boundingRect("YH").height() * 2, diveSiteCoords);
painter->restore();
}
QSize LocationFilterDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QSize size;
size.setWidth(option.rect.width());
size.setHeight(20);
QFont fontBigger = qApp->font();
fontBigger.setPointSize(fontBigger.pointSize() + 2);
fontBigger.setBold(true);
QFontMetrics fmBigger(fontBigger);
QFont fontSmaller = qApp->font();
QFontMetrics fmSmaller(fontSmaller);
QSize retSize = QStyledItemDelegate::sizeHint(option, index);
retSize.setHeight(fmBigger.boundingRect("Yellow House").height() + 5 /*spacing*/ + fmSmaller.boundingRect("Yellow House").height());
return retSize;
}