summaryrefslogtreecommitdiffstats
path: root/qt-models
diff options
context:
space:
mode:
Diffstat (limited to 'qt-models')
-rw-r--r--qt-models/divelocationmodel.cpp53
-rw-r--r--qt-models/divelocationmodel.h4
2 files changed, 51 insertions, 6 deletions
diff --git a/qt-models/divelocationmodel.cpp b/qt-models/divelocationmodel.cpp
index 42af4f63a..bddca8f77 100644
--- a/qt-models/divelocationmodel.cpp
+++ b/qt-models/divelocationmodel.cpp
@@ -1,6 +1,8 @@
#include "divelocationmodel.h"
#include "dive.h"
#include <QDebug>
+#include <QLineEdit>
+#include <QIcon>
bool dive_site_less_than(dive_site *a, dive_site *b)
{
@@ -13,7 +15,9 @@ LocationInformationModel *LocationInformationModel::instance()
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
{
Q_UNUSED(parent);
- return internalRowCount;
+ return internalRowCount + 1;
}
QVariant LocationInformationModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
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)
return QVariant();
switch(role) {
+ case Qt::EditRole:
case Qt::DisplayRole :
switch(index.column()) {
case UUID: return ds->uuid;
@@ -52,11 +82,22 @@ QVariant LocationInformationModel::data(const QModelIndex &index, int role) cons
case TAXONOMY_3: return "TODO";
}
break;
+ case Qt::DecorationRole : {
+ if (dive_site_has_gps_location(ds))
+ return QIcon(":geocode");
+ else
+ return QVariant();
+ }
}
return QVariant();
}
+void LocationInformationModel::setFirstRowTextField(QLineEdit *t)
+{
+ textField = t;
+}
+
void LocationInformationModel::update()
{
beginResetModel();
@@ -71,7 +112,7 @@ int32_t LocationInformationModel::addDiveSite(const QString& name, int lon, int
latitude.udeg = lat;
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);
qSort(dive_site_table.dive_sites, dive_site_table.dive_sites + dive_site_table.nr, dive_site_less_than);
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)
{
- if (!index.isValid())
+ if (!index.isValid() || index.row() == 0)
return false;
if (role != Qt::EditRole)
@@ -99,7 +140,7 @@ bool LocationInformationModel::removeRows(int row, int count, const QModelIndex
if(row >= rowCount())
return false;
- beginRemoveRows(QModelIndex(), row, row);
+ beginRemoveRows(QModelIndex(), row + 1, row + 1);
struct dive_site *ds = get_dive_site(row);
if (ds)
delete_dive_site(ds->uuid);
diff --git a/qt-models/divelocationmodel.h b/qt-models/divelocationmodel.h
index 8cae3a08a..ee52d2ba4 100644
--- a/qt-models/divelocationmodel.h
+++ b/qt-models/divelocationmodel.h
@@ -5,6 +5,8 @@
#include <QStringListModel>
#include <stdint.h>
+class QLineEdit;
+
class LocationInformationModel : public QAbstractTableModel {
Q_OBJECT
public:
@@ -16,12 +18,14 @@ public:
int32_t addDiveSite(const QString& name, int lat = 0, int lon = 0);
bool setData(const QModelIndex &index, const QVariant &value, int role);
bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex());
+ void setFirstRowTextField(QLineEdit *textField);
public slots:
void update();
private:
LocationInformationModel(QObject *obj = 0);
int internalRowCount;
+ QLineEdit *textField;
};
class GeoReferencingOptionsModel : public QStringListModel {