mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-31 17:33:24 +00:00
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:
parent
3b0936eca3
commit
4059f5d995
2 changed files with 66 additions and 7 deletions
|
@ -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));
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue