QML UI: deal with multiple buddies correctly

When editing adive in Subsurface-mobile we can only handle one buddy
due to the limitations of the combobox. To prevent loss of data when editing
a dive with more than one buddy we display "Multiple Buddies" in the buddy
field. This creates a special case where no changes are written to the buddy field
unless the user changes buddy for that dive.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Joakim Bygdell 2016-09-12 20:30:07 +02:00 committed by Dirk Hohndel
parent ed11dab7fb
commit 1219dc6931
3 changed files with 17 additions and 4 deletions

View file

@ -425,6 +425,7 @@ QStringList DiveObjectHelper::buddyList() const
QRegExp sep("(,\\s)"); QRegExp sep("(,\\s)");
QStringList tempList = temp.split(sep); QStringList tempList = temp.split(sep);
buddies << tempList; buddies << tempList;
buddies << "Multiple Buddies";
} }
} }
buddies.removeDuplicates(); buddies.removeDuplicates();

View file

@ -156,7 +156,11 @@ Kirigami.Page {
airtemp = diveDetailsListView.currentItem.modelData.dive.airTemp airtemp = diveDetailsListView.currentItem.modelData.dive.airTemp
watertemp = diveDetailsListView.currentItem.modelData.dive.waterTemp watertemp = diveDetailsListView.currentItem.modelData.dive.waterTemp
suitIndex = diveDetailsListView.currentItem.modelData.dive.suitList.indexOf(diveDetailsListView.currentItem.modelData.dive.suit) suitIndex = diveDetailsListView.currentItem.modelData.dive.suitList.indexOf(diveDetailsListView.currentItem.modelData.dive.suit)
buddyIndex = diveDetailsListView.currentItem.modelData.dive.buddyList.indexOf(diveDetailsListView.currentItem.modelData.dive.buddy) if (diveDetailsListView.currentItem.modelData.dive.buddy.search(",")) {
buddyIndex = diveDetailsListView.currentItem.modelData.dive.buddyList.indexOf("Multiple Buddies");
} else {
buddyIndex = diveDetailsListView.currentItem.modelData.dive.buddyList.indexOf(diveDetailsListView.currentItem.modelData.dive.buddy)
}
divemasterIndex = diveDetailsListView.currentItem.modelData.dive.divemasterList.indexOf(diveDetailsListView.currentItem.modelData.dive.divemaster) divemasterIndex = diveDetailsListView.currentItem.modelData.dive.divemasterList.indexOf(diveDetailsListView.currentItem.modelData.dive.divemaster)
notes = diveDetailsListView.currentItem.modelData.dive.notes notes = diveDetailsListView.currentItem.modelData.dive.notes
if (diveDetailsListView.currentItem.modelData.dive.singleWeight) { if (diveDetailsListView.currentItem.modelData.dive.singleWeight) {

View file

@ -869,9 +869,17 @@ void QMLManager::commitChanges(QString diveId, QString date, QString location, Q
d->suit = strdup(qPrintable(suit)); d->suit = strdup(qPrintable(suit));
} }
if (myDive->buddy() != buddy) { if (myDive->buddy() != buddy) {
diveChanged = true; if (myDive->buddy().contains(",")) {
free(d->buddy); if (!buddy.contains("Multiple Buddies")) {
d->buddy = strdup(qPrintable(buddy)); diveChanged = true;
free(d->buddy);
d->buddy = strdup(qPrintable(buddy));
}
} else {
diveChanged = true;
free(d->buddy);
d->buddy = strdup(qPrintable(buddy));
}
} }
if (myDive->divemaster() != diveMaster) { if (myDive->divemaster() != diveMaster) {
diveChanged = true; diveChanged = true;