Add ability to replan a dive that we planned before

When doing this, all waypoints of the calculated ascent are now waypoints
in the plan - so the user has to remove the ascent part of the dive in
order to really replan the dive. That's a pain, but we don't keep the data
around that would tell us which waypoints are user input and which ones
were calculated.

Fixes #527

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2014-08-19 15:03:53 -05:00
parent 76f3c0f028
commit a85a219df3
4 changed files with 41 additions and 7 deletions

View file

@ -1155,7 +1155,9 @@ void DivePlannerPointsModel::createPlan()
//TODO: C-based function here?
plan(&diveplan, &cache, isPlanner(), true);
record_dive(clone_dive(&displayed_dive));
if (!current_dive || displayed_dive.id != current_dive->id)
// we were planning a new dive, not re-planning an existing on
record_dive(clone_dive(&displayed_dive));
mark_divelist_changed(true);
// Remove and clean the diveplan, so we don't delete

View file

@ -404,11 +404,13 @@ void MainWindow::planCanceled()
void MainWindow::planCreated()
{
// get the new dive selected and assign a number if reasonable
dive_list()->unselectDives();
select_dive(dive_table.nr - 1);
dive_list()->selectDive(selected_dive);
set_dive_nr_for_current_dive();
if (displayed_dive.id == 0) {
// we might have added a new dive (so displayed_dive was cleared out by clone_dive()
dive_list()->unselectDives();
select_dive(dive_table.nr - 1);
dive_list()->selectDive(selected_dive);
set_dive_nr_for_current_dive();
}
showProfile();
refreshDisplay();
}
@ -448,9 +450,32 @@ void MainWindow::setupForAddAndPlan(const char *model)
DivePlannerPointsModel::instance()->setupCylinders();
}
void MainWindow::on_actionReplanDive_triggered()
{
if (!plannerStateClean())
return;
if (!current_dive || strcmp(current_dive->dc.model, "planned dive")) {
qDebug() << current_dive->dc.model;
return;
}
ui.ListWidget->endSearch();
// put us in PLAN mode
DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::PLAN);
ui.newProfile->setPlanState();
ui.infoPane->setCurrentIndex(PLANNERWIDGET);
DivePlannerPointsModel::instance()->loadFromDive(current_dive);
reset_cylinders(&displayed_dive, true);
ui.diveListPane->setCurrentIndex(1); // switch to the plan output
ui.globePane->setCurrentIndex(1);
#ifdef NO_MARBLE
ui.globePane->show();
#endif
}
void MainWindow::on_actionDivePlanner_triggered()
{
if(!plannerStateClean())
if (!plannerStateClean())
return;
ui.ListWidget->endSearch();

View file

@ -118,6 +118,7 @@ slots:
void on_actionAboutSubsurface_triggered();
void on_actionUserManual_triggered();
void on_actionDivePlanner_triggered();
void on_actionReplanDive_triggered();
void on_action_Check_for_Updates_triggered();
void current_dive_changed(int divenr);

View file

@ -722,6 +722,7 @@ p, li { white-space: pre-wrap; }
</property>
<addaction name="actionAddDive"/>
<addaction name="actionDivePlanner"/>
<addaction name="actionReplanDive"/>
<addaction name="copy"/>
<addaction name="paste"/>
<addaction name="separator"/>
@ -1074,6 +1075,11 @@ p, li { white-space: pre-wrap; }
<string>Configure Dive Computer</string>
</property>
</action>
<action name="actionReplanDive">
<property name="text">
<string>Re-plan dive</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>