summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--qt-ui/diveplanner.cpp16
-rw-r--r--qt-ui/mainwindow.cpp17
-rw-r--r--qt-ui/mainwindow.h2
3 files changed, 29 insertions, 6 deletions
diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp
index c26aa9569..f6127e5c4 100644
--- a/qt-ui/diveplanner.cpp
+++ b/qt-ui/diveplanner.cpp
@@ -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);
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index 9d8a0643c..8a637ff6b 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -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);
}
diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h
index 8bb62b933..882534722 100644
--- a/qt-ui/mainwindow.h
+++ b/qt-ui/mainwindow.h
@@ -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