bool QMLManager::undoDelete(int id) { if (!deletedDive || deletedDive->id != id) { qDebug() << "can't find the deleted dive"; return false; } if (deletedTrip) insert_trip(&deletedTrip); if (deletedDive->divetrip) { struct dive_trip *trip = deletedDive->divetrip; tripflag_t tripflag = deletedDive->tripflag; // this gets overwritten in add_dive_to_trip() deletedDive->divetrip = NULL; deletedDive->next = NULL; deletedDive->pprev = NULL; add_dive_to_trip(deletedDive, trip); deletedDive->tripflag = tripflag; } record_dive(deletedDive); QList<dive *>diveAsList; diveAsList << deletedDive; DiveListModel::instance()->addDive(diveAsList); changesNeedSaving(); deletedDive = NULL; deletedTrip = NULL; return true; }
void QMLManager::undoDelete(int id) { if (!deletedDive || deletedDive->id != id) { qDebug() << "can't find the deleted dive"; return; } if (deletedTrip) insert_trip(&deletedTrip); if (deletedDive->divetrip) { struct dive_trip *trip = deletedDive->divetrip; tripflag_t tripflag = deletedDive->tripflag; // this gets overwritten in add_dive_to_trip() deletedDive->divetrip = NULL; deletedDive->next = NULL; deletedDive->pprev = NULL; add_dive_to_trip(deletedDive, trip); deletedDive->tripflag = tripflag; } record_dive(deletedDive); QList<dive *>diveAsList; diveAsList << deletedDive; DiveListModel::instance()->addDive(diveAsList); // make sure the changes get saved if the app is no longer in the foreground // or if the user requests a save mark_divelist_changed(true); deletedDive = NULL; deletedTrip = NULL; }
static void trip_end(void) { if (!cur_trip) return; insert_trip(&cur_trip); cur_trip = NULL; }
static void finish_active_trip(void) { dive_trip_t *trip = active_trip; if (trip) { active_trip = NULL; insert_trip(&trip); } }
void UndoDeleteDive::undo() { // first bring back the trip(s) Q_FOREACH(struct dive_trip *trip, tripList) insert_trip(&trip); // now walk the list of deleted dives for (int i = 0; i < diveList.count(); i++) { struct dive *d = diveList.at(i); // we adjusted the divetrip to point to the "new" divetrip if (d->divetrip) { struct dive_trip *trip = d->divetrip; tripflag_t tripflag = d->tripflag; // this gets overwritten in add_dive_to_trip() d->divetrip = NULL; d->next = NULL; d->pprev = NULL; add_dive_to_trip(d, trip); d->tripflag = tripflag; } record_dive(diveList.at(i)); } mark_divelist_changed(true); MainWindow::instance()->refreshDisplay(); }