mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
Planner: better handle the temporary dive used for planning
This still crashes when you abort the plan. And when you accept the plan, the profile stays stuck in PLAN mode. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
7feea7ccfa
commit
d1cd1eb933
3 changed files with 29 additions and 6 deletions
|
@ -247,8 +247,10 @@ DivePlannerWidget::DivePlannerWidget(QWidget *parent, Qt::WindowFlags f) : QWidg
|
|||
// Creating the plan
|
||||
connect(ui.buttonBox, SIGNAL(accepted()), plannerModel, SLOT(createPlan()));
|
||||
connect(ui.buttonBox, SIGNAL(rejected()), plannerModel, SLOT(cancelPlan()));
|
||||
connect(plannerModel, SIGNAL(planCreated()), MainWindow::instance(), SLOT(removeFakeDiveForAddAndPlan()));
|
||||
connect(plannerModel, SIGNAL(planCreated()), MainWindow::instance(), SLOT(showProfile()));
|
||||
connect(plannerModel, SIGNAL(planCreated()), MainWindow::instance(), SLOT(refreshDisplay()));
|
||||
connect(plannerModel, SIGNAL(planCanceled()), MainWindow::instance(), SLOT(removeFakeDiveForAddAndPlan()));
|
||||
connect(plannerModel, SIGNAL(planCanceled()), MainWindow::instance(), SLOT(showProfile()));
|
||||
|
||||
/* set defaults. */
|
||||
|
@ -647,14 +649,17 @@ void DivePlannerPointsModel::cancelPlan()
|
|||
}
|
||||
}
|
||||
clear();
|
||||
// we unselected all dives earlier, so restore that first and then recreate the dive list
|
||||
MainWindow::instance()->dive_list()->restoreSelection();
|
||||
MainWindow::instance()->dive_list()->reload(DiveTripModel::CURRENT);
|
||||
MainWindow::instance()->refreshDisplay();
|
||||
emit planCanceled();
|
||||
if (mode != ADD)
|
||||
if (mode != ADD) {
|
||||
free(stagingDive);
|
||||
stagingDive = NULL;
|
||||
}
|
||||
setPlanMode(NOTHING);
|
||||
stagingDive = NULL;
|
||||
diveplan.dp = NULL;
|
||||
CylindersModel::instance()->setDive(current_dive);
|
||||
CylindersModel::instance()->update();
|
||||
}
|
||||
|
||||
DivePlannerPointsModel::Mode DivePlannerPointsModel::currentMode() const
|
||||
|
@ -854,6 +859,9 @@ void DivePlannerPointsModel::createPlan()
|
|||
// the dive by mistake.
|
||||
diveplan.dp = NULL;
|
||||
clear();
|
||||
|
||||
// we unselected all dives earlier, so as a side effect recreating the dive list will select the new dive
|
||||
MainWindow::instance()->recreateDiveList();
|
||||
planCreated();
|
||||
setPlanMode(NOTHING);
|
||||
free(stagingDive);
|
||||
|
|
|
@ -58,7 +58,8 @@ MainWindow::MainWindow() : QMainWindow(),
|
|||
yearlyStats(0),
|
||||
yearlyStatsModel(0),
|
||||
state(VIEWALL),
|
||||
updateManager(0)
|
||||
updateManager(0),
|
||||
fakeDiveId(0)
|
||||
{
|
||||
Q_ASSERT_X(m_Instance == NULL, "MainWindow", "MainWindow recreated!");
|
||||
m_Instance = this;
|
||||
|
@ -372,6 +373,7 @@ void MainWindow::createFakeDiveForAddAndPlan()
|
|||
// now cheat - create one dive that we use to store the info tab data in
|
||||
//TODO: C-function create_temporary_dive ?
|
||||
struct dive *dive = alloc_dive();
|
||||
fakeDiveId = dive->id;
|
||||
dive->when = QDateTime::currentMSecsSinceEpoch() / 1000L + gettimezoneoffset();
|
||||
dive->dc.model = "manually added dive"; // don't translate! this is stored in the XML file
|
||||
|
||||
|
@ -386,6 +388,16 @@ void MainWindow::createFakeDiveForAddAndPlan()
|
|||
ui.InfoWidget->updateDiveInfo(selected_dive);
|
||||
}
|
||||
|
||||
void MainWindow::removeFakeDiveForAddAndPlan()
|
||||
{
|
||||
int idx;
|
||||
|
||||
if (!fakeDiveId ||
|
||||
(idx = get_idx_by_uniq_id(fakeDiveId)) == dive_table.nr)
|
||||
return;
|
||||
delete_single_dive(idx);
|
||||
}
|
||||
|
||||
void MainWindow::on_actionDivePlanner_triggered()
|
||||
{
|
||||
if(!plannerStateClean())
|
||||
|
@ -409,7 +421,8 @@ void MainWindow::on_actionDivePlanner_triggered()
|
|||
createFakeDiveForAddAndPlan();
|
||||
DivePlannerPointsModel::instance()->createSimpleDive(true);
|
||||
|
||||
// disable the dive list
|
||||
// reload and then disable the dive list
|
||||
ui.ListWidget->reload(DiveTripModel::CURRENT);
|
||||
ui.ListWidget->setEnabled(false);
|
||||
}
|
||||
|
||||
|
|
|
@ -151,6 +151,7 @@ slots:
|
|||
void recreateDiveList();
|
||||
void showProfile();
|
||||
void editCurrentDive();
|
||||
void removeFakeDiveForAddAndPlan();
|
||||
|
||||
private:
|
||||
Ui::MainWindow ui;
|
||||
|
@ -175,6 +176,7 @@ private:
|
|||
|
||||
bool plannerStateClean();
|
||||
void createFakeDiveForAddAndPlan();
|
||||
int fakeDiveId;
|
||||
};
|
||||
|
||||
#endif // MAINWINDOW_H
|
||||
|
|
Loading…
Reference in a new issue