diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2018-05-03 19:19:54 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2018-05-13 07:08:34 -0700 |
commit | 57bf174c4f0092d25865b7f15b864c9bbaa45eda (patch) | |
tree | b535cea18d651ec3a665c7b6f1aefa015f695a4e /desktop-widgets | |
parent | 9d342d0e1aac56c44a80e5025d4cf3b89c5746cf (diff) | |
download | subsurface-57bf174c4f0092d25865b7f15b864c9bbaa45eda.tar.gz |
Desktop: On dive edit from the dive list or map, switch to new state
If "Edit dive" is selected from the dive list or the map view, switch
to a new mode, which shows the dive infos and the profile.
After the edit, switch back to the previous state.
Fixes #1213
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets')
-rw-r--r-- | desktop-widgets/mainwindow.cpp | 74 | ||||
-rw-r--r-- | desktop-widgets/mainwindow.h | 7 | ||||
-rw-r--r-- | desktop-widgets/tab-widgets/maintab.cpp | 3 |
3 files changed, 65 insertions, 19 deletions
diff --git a/desktop-widgets/mainwindow.cpp b/desktop-widgets/mainwindow.cpp index 910c7a290..4069d8405 100644 --- a/desktop-widgets/mainwindow.cpp +++ b/desktop-widgets/mainwindow.cpp @@ -1228,6 +1228,61 @@ void MainWindow::on_actionViewAll_triggered() ui.bottomSplitter->setCollapsible(1,false); } +void MainWindow::enterEditState() +{ + stateBeforeEdit = state; + if (state == VIEWALL || state == INFO_MAXIMIZED) + return; + toggleCollapsible(true); + beginChangeState(EDIT); + ui.topSplitter->setSizes({ EXPANDED, EXPANDED }); + ui.mainSplitter->setSizes({ EXPANDED, COLLAPSED }); + int appW = qApp->desktop()->size().width(); + QList<int> infoProfileSizes { (int)lrint(appW * 0.3), (int)lrint(appW * 0.7) }; + + QSettings settings; + settings.beginGroup("MainWindow"); + if (settings.value("mainSplitter").isValid()) { + ui.topSplitter->restoreState(settings.value("topSplitter").toByteArray()); + if (ui.topSplitter->sizes().first() == 0 || ui.topSplitter->sizes().last() == 0) + ui.topSplitter->setSizes(infoProfileSizes); + } else { + ui.topSplitter->setSizes(infoProfileSizes); + } +} + +void MainWindow::exitEditState() +{ + if (stateBeforeEdit == state) + return; + enterState(stateBeforeEdit); +} + +void MainWindow::enterState(CurrentState newState) +{ + state = newState; + switch (state) { + case VIEWALL: + on_actionViewAll_triggered(); + break; + case MAP_MAXIMIZED: + on_actionViewMap_triggered(); + break; + case INFO_MAXIMIZED: + on_actionViewInfo_triggered(); + break; + case LIST_MAXIMIZED: + on_actionViewList_triggered(); + break; + case PROFILE_MAXIMIZED: + on_actionViewProfile_triggered(); + break; + case EDIT: + default: + break; + } +} + void MainWindow::beginChangeState(CurrentState s) { if (state == VIEWALL && state != s) { @@ -1433,24 +1488,7 @@ void MainWindow::initialUiSetup() restoreState(settings.value("windowState", 0).toByteArray()); } - state = (CurrentState)settings.value("lastState", 0).toInt(); - switch (state) { - case VIEWALL: - on_actionViewAll_triggered(); - break; - case MAP_MAXIMIZED: - on_actionViewMap_triggered(); - break; - case INFO_MAXIMIZED: - on_actionViewInfo_triggered(); - break; - case LIST_MAXIMIZED: - on_actionViewList_triggered(); - break; - case PROFILE_MAXIMIZED: - on_actionViewProfile_triggered(); - break; - } + enterState((CurrentState)settings.value("lastState", 0).toInt()); settings.endGroup(); show(); } diff --git a/desktop-widgets/mainwindow.h b/desktop-widgets/mainwindow.h index 03ebcf636..3a9848f62 100644 --- a/desktop-widgets/mainwindow.h +++ b/desktop-widgets/mainwindow.h @@ -54,7 +54,8 @@ public: MAP_MAXIMIZED, INFO_MAXIMIZED, PROFILE_MAXIMIZED, - LIST_MAXIMIZED + LIST_MAXIMIZED, + EDIT }; MainWindow(); @@ -87,6 +88,8 @@ public: NotificationWidget *getNotificationWidget(); void enableDisableCloudActions(); void setCheckedActionFilterTags(bool checked); + void enterEditState(); + void exitEditState(); private slots: @@ -190,6 +193,7 @@ private: QAction *actionPreviousDive; UserManual *helpView; CurrentState state; + CurrentState stateBeforeEdit; QString filter_open(); QString filter_import(); static MainWindow *m_Instance; @@ -210,6 +214,7 @@ private: QString lastUsedDir(); void updateLastUsedDir(const QString &s); void registerApplicationState(const QByteArray& state, QWidget *topLeft, QWidget *topRight, QWidget *bottomLeft, QWidget *bottomRight); + void enterState(CurrentState); bool filesAsArguments; UpdateManager *updateManager; diff --git a/desktop-widgets/tab-widgets/maintab.cpp b/desktop-widgets/tab-widgets/maintab.cpp index 525079908..bd16f9686 100644 --- a/desktop-widgets/tab-widgets/maintab.cpp +++ b/desktop-widgets/tab-widgets/maintab.cpp @@ -334,6 +334,7 @@ void MainTab::enableEdition(EditMode newEditMode) ui.editDiveSiteButton->setEnabled(false); MainWindow::instance()->dive_list()->setEnabled(false); MainWindow::instance()->setEnabledToolbar(false); + MainWindow::instance()->enterEditState(); if (isTripEdit) { // we are editing trip location and notes @@ -991,6 +992,7 @@ void MainTab::acceptChanges() DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::NOTHING); MainWindow::instance()->dive_list()->verticalScrollBar()->setSliderPosition(scrolledBy); MainWindow::instance()->dive_list()->setFocus(); + MainWindow::instance()->exitEditState(); cylindersModel->changed = false; weightModel->changed = false; MainWindow::instance()->setEnabledToolbar(true); @@ -1058,6 +1060,7 @@ void MainTab::rejectChanges() // show the profile and dive info MainWindow::instance()->graphics()->replot(); MainWindow::instance()->setEnabledToolbar(true); + MainWindow::instance()->exitEditState(); cylindersModel->changed = false; weightModel->changed = false; cylindersModel->updateDive(); |