diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2015-07-16 11:19:31 -0700 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2015-07-16 12:22:56 -0700 |
commit | f98ace681acbc3aba64779d639fef4686c6f3474 (patch) | |
tree | 68341813f61cd198149abf146ac6e515e7f3c130 /qt-models/divelocationmodel.cpp | |
parent | 4ec27b17513cd0c6ff6eeb8e55d6f4bd8cb11b5b (diff) | |
download | subsurface-f98ace681acbc3aba64779d639fef4686c6f3474.tar.gz |
Dive site edit: add second "create" line without completion
We now have TWO special entries. One with just what the user has typed and
one with the first completion of that text. This way both Henrik and Linus
can get what they want. I'm not sure I love this, but it's easy to revert
if the consensus is that this is too confusing. But it's much easier to
discuss this if people can actually play with it.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-models/divelocationmodel.cpp')
-rw-r--r-- | qt-models/divelocationmodel.cpp | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/qt-models/divelocationmodel.cpp b/qt-models/divelocationmodel.cpp index 8d7faa890..778496a89 100644 --- a/qt-models/divelocationmodel.cpp +++ b/qt-models/divelocationmodel.cpp @@ -29,7 +29,7 @@ int LocationInformationModel::columnCount(const QModelIndex &parent) const int LocationInformationModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent); - return internalRowCount + 1; + return internalRowCount + 2; } QVariant LocationInformationModel::data(const QModelIndex &index, int role) const @@ -38,17 +38,19 @@ QVariant LocationInformationModel::data(const QModelIndex &index, int role) cons return QVariant(); // Special case to handle the 'create dive site' with name. - if (index.row() == 0) { + if (index.row() < 2) { 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; + if (index.row() == 1) { + 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(); } @@ -60,8 +62,8 @@ QVariant LocationInformationModel::data(const QModelIndex &index, int role) cons } } - // The dive sites are -1 because of the first item. - struct dive_site *ds = get_dive_site(index.row()-1); + // The dive sites are -2 because of the first two items. + struct dive_site *ds = get_dive_site(index.row() - 2); if (!ds) return QVariant(); @@ -112,7 +114,7 @@ int32_t LocationInformationModel::addDiveSite(const QString& name, int lon, int latitude.udeg = lat; longitude.udeg = lon; - beginInsertRows(QModelIndex(), dive_site_table.nr + 1, dive_site_table.nr + 1); + beginInsertRows(QModelIndex(), dive_site_table.nr + 2, dive_site_table.nr + 2); 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; @@ -122,7 +124,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() || index.row() == 0) + if (!index.isValid() || index.row() < 2) return false; if (role != Qt::EditRole) @@ -140,7 +142,7 @@ bool LocationInformationModel::removeRows(int row, int count, const QModelIndex if(row >= rowCount()) return false; - beginRemoveRows(QModelIndex(), row + 1, row + 1); + beginRemoveRows(QModelIndex(), row + 2, row + 2); struct dive_site *ds = get_dive_site(row); if (ds) delete_dive_site(ds->uuid); |