desktop: remember previous state when switching to dive site mode

The dive-site editing can be reached from two states: from the
dive view and the dive list view. It always jumped back to
the dive view.

Therefore, remember the state. Use a stack-like structure, so
that the feature can be used for the dive-site view as well.

This is a bit inconsistent, because for example the statistics
view does not remember the previous state and allows a direct
jump to a different state. That should be fixed at some point.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2022-09-18 15:25:41 +02:00
parent 17033d0d83
commit 621a0a4e3a
4 changed files with 17 additions and 2 deletions

View file

@ -282,6 +282,7 @@ void MainWindow::editDiveSite(dive_site *ds)
if (!ds)
return;
diveSiteEdit->initFields(ds);
state_stack.push_back(appState);
setApplicationState(ApplicationState::EditDiveSite);
}
@ -765,6 +766,7 @@ void MainWindow::on_actionViewDiveSites_triggered()
{
if (!userMayChangeAppState())
return;
state_stack.push_back(appState);
setApplicationState(ApplicationState::DiveSites);
}
@ -1472,6 +1474,17 @@ bool MainWindow::userMayChangeAppState() const
return applicationState[(int)appState].allowUserChange;
}
// For the dive-site list view and the dive-site edit states,
// we remember the previous state and then switch back to that.
void MainWindow::enterPreviousState()
{
if (state_stack.empty())
setApplicationState(ApplicationState::Default);
ApplicationState prev = state_stack.back();
state_stack.pop_back();
setApplicationState(prev);
}
void MainWindow::setApplicationState(ApplicationState state)
{
if (appState == state)