mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Offer an option to just complete the text
Make the kids fight no more. Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
4dfb39cc49
commit
cd3f10d5ad
4 changed files with 73 additions and 9 deletions
|
@ -1,6 +1,8 @@
|
||||||
#include "divelocationmodel.h"
|
#include "divelocationmodel.h"
|
||||||
#include "dive.h"
|
#include "dive.h"
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <QLineEdit>
|
||||||
|
#include <QIcon>
|
||||||
|
|
||||||
bool dive_site_less_than(dive_site *a, dive_site *b)
|
bool dive_site_less_than(dive_site *a, dive_site *b)
|
||||||
{
|
{
|
||||||
|
@ -13,7 +15,9 @@ LocationInformationModel *LocationInformationModel::instance()
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
LocationInformationModel::LocationInformationModel(QObject *obj) : QAbstractTableModel(obj), internalRowCount(0)
|
LocationInformationModel::LocationInformationModel(QObject *obj) : QAbstractTableModel(obj),
|
||||||
|
internalRowCount(0),
|
||||||
|
textField(NULL)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,19 +29,45 @@ int LocationInformationModel::columnCount(const QModelIndex &parent) const
|
||||||
int LocationInformationModel::rowCount(const QModelIndex &parent) const
|
int LocationInformationModel::rowCount(const QModelIndex &parent) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(parent);
|
Q_UNUSED(parent);
|
||||||
return internalRowCount;
|
return internalRowCount + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant LocationInformationModel::data(const QModelIndex &index, int role) const
|
QVariant LocationInformationModel::data(const QModelIndex &index, int role) const
|
||||||
{
|
{
|
||||||
if (!index.isValid())
|
if (!index.isValid())
|
||||||
return QVariant();
|
return QVariant();
|
||||||
struct dive_site *ds = get_dive_site(index.row());
|
|
||||||
|
// Special case to handle the 'create dive site' with name.
|
||||||
|
if (index.row() == 0) {
|
||||||
|
if (index.column() == UUID)
|
||||||
|
return 0;
|
||||||
|
switch(role) {
|
||||||
|
case Qt::DisplayRole : {
|
||||||
|
struct dive_site *ds;
|
||||||
|
int i;
|
||||||
|
for_each_dive_site(i, ds) {
|
||||||
|
QString dsName(ds->name);
|
||||||
|
if (dsName.startsWith(textField->text()))
|
||||||
|
return dsName;
|
||||||
|
}
|
||||||
|
return textField->text();
|
||||||
|
}
|
||||||
|
case Qt::ToolTipRole : {
|
||||||
|
return QString(tr("Create dive site"));
|
||||||
|
}
|
||||||
|
case Qt::EditRole : return textField->text();
|
||||||
|
case Qt::DecorationRole : return QIcon(":plus");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// The dive sites are -1 because of the first item.
|
||||||
|
struct dive_site *ds = get_dive_site(index.row()-1);
|
||||||
|
|
||||||
if (!ds)
|
if (!ds)
|
||||||
return QVariant();
|
return QVariant();
|
||||||
|
|
||||||
switch(role) {
|
switch(role) {
|
||||||
|
case Qt::EditRole:
|
||||||
case Qt::DisplayRole :
|
case Qt::DisplayRole :
|
||||||
switch(index.column()) {
|
switch(index.column()) {
|
||||||
case UUID: return ds->uuid;
|
case UUID: return ds->uuid;
|
||||||
|
@ -52,11 +82,22 @@ QVariant LocationInformationModel::data(const QModelIndex &index, int role) cons
|
||||||
case TAXONOMY_3: return "TODO";
|
case TAXONOMY_3: return "TODO";
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case Qt::DecorationRole : {
|
||||||
|
if (dive_site_has_gps_location(ds))
|
||||||
|
return QIcon(":geocode");
|
||||||
|
else
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LocationInformationModel::setFirstRowTextField(QLineEdit *t)
|
||||||
|
{
|
||||||
|
textField = t;
|
||||||
|
}
|
||||||
|
|
||||||
void LocationInformationModel::update()
|
void LocationInformationModel::update()
|
||||||
{
|
{
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
|
@ -71,7 +112,7 @@ int32_t LocationInformationModel::addDiveSite(const QString& name, int lon, int
|
||||||
latitude.udeg = lat;
|
latitude.udeg = lat;
|
||||||
longitude.udeg = lon;
|
longitude.udeg = lon;
|
||||||
|
|
||||||
beginInsertRows(QModelIndex(), dive_site_table.nr, dive_site_table.nr);
|
beginInsertRows(QModelIndex(), dive_site_table.nr + 1, dive_site_table.nr + 1);
|
||||||
uint32_t uuid = create_dive_site_with_gps(name.toUtf8().data(), latitude, longitude);
|
uint32_t uuid = create_dive_site_with_gps(name.toUtf8().data(), latitude, longitude);
|
||||||
qSort(dive_site_table.dive_sites, dive_site_table.dive_sites + dive_site_table.nr, dive_site_less_than);
|
qSort(dive_site_table.dive_sites, dive_site_table.dive_sites + dive_site_table.nr, dive_site_less_than);
|
||||||
internalRowCount = dive_site_table.nr;
|
internalRowCount = dive_site_table.nr;
|
||||||
|
@ -81,7 +122,7 @@ int32_t LocationInformationModel::addDiveSite(const QString& name, int lon, int
|
||||||
|
|
||||||
bool LocationInformationModel::setData(const QModelIndex &index, const QVariant &value, int role)
|
bool LocationInformationModel::setData(const QModelIndex &index, const QVariant &value, int role)
|
||||||
{
|
{
|
||||||
if (!index.isValid())
|
if (!index.isValid() || index.row() == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (role != Qt::EditRole)
|
if (role != Qt::EditRole)
|
||||||
|
@ -99,7 +140,7 @@ bool LocationInformationModel::removeRows(int row, int count, const QModelIndex
|
||||||
if(row >= rowCount())
|
if(row >= rowCount())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
beginRemoveRows(QModelIndex(), row, row);
|
beginRemoveRows(QModelIndex(), row + 1, row + 1);
|
||||||
struct dive_site *ds = get_dive_site(row);
|
struct dive_site *ds = get_dive_site(row);
|
||||||
if (ds)
|
if (ds)
|
||||||
delete_dive_site(ds->uuid);
|
delete_dive_site(ds->uuid);
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
#include <QStringListModel>
|
#include <QStringListModel>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
class QLineEdit;
|
||||||
|
|
||||||
class LocationInformationModel : public QAbstractTableModel {
|
class LocationInformationModel : public QAbstractTableModel {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
@ -16,12 +18,14 @@ public:
|
||||||
int32_t addDiveSite(const QString& name, int lat = 0, int lon = 0);
|
int32_t addDiveSite(const QString& name, int lat = 0, int lon = 0);
|
||||||
bool setData(const QModelIndex &index, const QVariant &value, int role);
|
bool setData(const QModelIndex &index, const QVariant &value, int role);
|
||||||
bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex());
|
bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex());
|
||||||
|
void setFirstRowTextField(QLineEdit *textField);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void update();
|
void update();
|
||||||
private:
|
private:
|
||||||
LocationInformationModel(QObject *obj = 0);
|
LocationInformationModel(QObject *obj = 0);
|
||||||
int internalRowCount;
|
int internalRowCount;
|
||||||
|
QLineEdit *textField;
|
||||||
};
|
};
|
||||||
|
|
||||||
class GeoReferencingOptionsModel : public QStringListModel {
|
class GeoReferencingOptionsModel : public QStringListModel {
|
||||||
|
|
|
@ -61,10 +61,11 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent),
|
||||||
|
|
||||||
QCompleter *completer = new QCompleter();
|
QCompleter *completer = new QCompleter();
|
||||||
QListView *completerListview = new QListView();
|
QListView *completerListview = new QListView();
|
||||||
|
LocationInformationModel::instance()->setFirstRowTextField(ui.location);
|
||||||
|
|
||||||
completer->setPopup(completerListview);
|
completer->setPopup(completerListview);
|
||||||
completer->setModel(LocationInformationModel::instance());
|
completer->setModel(LocationInformationModel::instance());
|
||||||
completer->setCompletionColumn(LocationInformationModel::NAME);
|
completer->setCompletionColumn(LocationInformationModel::NAME);
|
||||||
completer->setCompletionRole(Qt::DisplayRole);
|
|
||||||
completer->setCaseSensitivity(Qt::CaseInsensitive);
|
completer->setCaseSensitivity(Qt::CaseInsensitive);
|
||||||
completerListview->setItemDelegate(new LocationFilterDelegate());
|
completerListview->setItemDelegate(new LocationFilterDelegate());
|
||||||
|
|
||||||
|
|
|
@ -495,14 +495,22 @@ void LocationFilterDelegate::paint(QPainter *painter, const QStyleOptionViewItem
|
||||||
QStyledItemDelegate::initStyleOption(&opt, index);
|
QStyledItemDelegate::initStyleOption(&opt, index);
|
||||||
QBrush bg;
|
QBrush bg;
|
||||||
QString diveSiteName = index.data().toString();
|
QString diveSiteName = index.data().toString();
|
||||||
|
QString bottomText;
|
||||||
|
QIcon icon = index.data(Qt::DecorationRole).value<QIcon>();
|
||||||
struct dive_site *ds = get_dive_site_by_uuid(
|
struct dive_site *ds = get_dive_site_by_uuid(
|
||||||
index.model()->data(index.model()->index(index.row(),0)).toInt()
|
index.model()->data(index.model()->index(index.row(),0)).toInt()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//Special case: do not show name, but instead, show
|
||||||
|
if (index.row() == 0) {
|
||||||
|
diveSiteName = index.data().toString();
|
||||||
|
bottomText = index.data(Qt::ToolTipRole).toString();
|
||||||
|
goto print_part;
|
||||||
|
}
|
||||||
|
|
||||||
if (!ds)
|
if (!ds)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QString bottomText;
|
|
||||||
for (int i = 0; i < ds->taxonomy.nr; i++) {
|
for (int i = 0; i < ds->taxonomy.nr; i++) {
|
||||||
if(ds->taxonomy.category[i].category == TC_NONE)
|
if(ds->taxonomy.category[i].category == TC_NONE)
|
||||||
continue;
|
continue;
|
||||||
|
@ -517,11 +525,13 @@ void LocationFilterDelegate::paint(QPainter *painter, const QStyleOptionViewItem
|
||||||
free( (void*) gpsCoords);
|
free( (void*) gpsCoords);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print_part:
|
||||||
fontBigger.setPointSize(fontBigger.pointSize() + 1);
|
fontBigger.setPointSize(fontBigger.pointSize() + 1);
|
||||||
fontBigger.setBold(true);
|
fontBigger.setBold(true);
|
||||||
|
|
||||||
initStyleOption(&opt, index);
|
initStyleOption(&opt, index);
|
||||||
opt.text = QString();
|
opt.text = QString();
|
||||||
|
opt.icon = QIcon();
|
||||||
qApp->style()->drawControl(QStyle::CE_ItemViewItem, &opt, painter, NULL);
|
qApp->style()->drawControl(QStyle::CE_ItemViewItem, &opt, painter, NULL);
|
||||||
|
|
||||||
painter->save();
|
painter->save();
|
||||||
|
@ -539,6 +549,14 @@ void LocationFilterDelegate::paint(QPainter *painter, const QStyleOptionViewItem
|
||||||
painter->setBrush(option.palette.brightText());
|
painter->setBrush(option.palette.brightText());
|
||||||
painter->drawText(option.rect.x(),option.rect.y() + fmBigger.boundingRect("YH").height() * 2, bottomText);
|
painter->drawText(option.rect.x(),option.rect.y() + fmBigger.boundingRect("YH").height() * 2, bottomText);
|
||||||
painter->restore();
|
painter->restore();
|
||||||
|
|
||||||
|
if (!icon.isNull()) {
|
||||||
|
painter->save();
|
||||||
|
painter->drawPixmap(
|
||||||
|
option.rect.x() + option.rect.width() - 24,
|
||||||
|
option.rect.y() + option.rect.height() - 24, icon.pixmap(20,20));
|
||||||
|
painter->restore();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QSize LocationFilterDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
|
QSize LocationFilterDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
|
||||||
|
|
Loading…
Add table
Reference in a new issue