diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2020-12-17 22:27:40 +0100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2021-02-06 10:00:39 -0800 |
commit | 1ed2f1681ad32eb73cf68964788e81bc03786577 (patch) | |
tree | a709e455af9352b757fcb88d5e7ae416712fe210 /desktop-widgets/mainwindow.h | |
parent | 122092707c608e930fbade660be2cb3f7a9c1946 (diff) | |
download | subsurface-1ed2f1681ad32eb73cf68964788e81bc03786577.tar.gz |
desktop: remove the view-state
There was the "application state", which decided what to show
in the "quadrants" and the "view state" which decided which
quadrant to show. These interacted in a hard-to-grasp way.
The "view state" is used to show the map or dive list in
full screen.
I simply couldn't get these two orthogonal states to interact
properly. Moreover the thing was buggy: If a quadrant was hidden,
the user could still show it, by dragging from the side of the
window, at least under KDE.
To solve these woes, merge the two states into a single
application state. If the widget of a quadrant is set to null,
don't show it. So the four "view states" are now "application
states" where three of the four quadrants are not shown.
This also changes the memory management of the widgets:
widgets that are not shown are now removed from the QSplitter
objects. This makes it possible that the same widget is
shown in *different* quadrants.
While writing this, I stumbled upon a Qt bug, which is known
since 2014:
https://forum.qt.io/topic/43176/qsplitter-sizes-return-0
When restoring the quadrant sizes there was a test whether
the quadrant size is 0. If that was the case, a default size
was set. This seems not to work if the widgets were recently
added. Since this test now always fails, make the quadrants
non-collapsible and thus guarantee that 0 is never saved as
a size.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets/mainwindow.h')
-rw-r--r-- | desktop-widgets/mainwindow.h | 28 |
1 files changed, 7 insertions, 21 deletions
diff --git a/desktop-widgets/mainwindow.h b/desktop-widgets/mainwindow.h index 6734eb7bd..ef29e86bb 100644 --- a/desktop-widgets/mainwindow.h +++ b/desktop-widgets/mainwindow.h @@ -41,19 +41,6 @@ class LocationInformationWidget; class MainWindow : public QMainWindow { Q_OBJECT public: - enum { - COLLAPSED, - EXPANDED - }; - - enum CurrentState { - VIEWALL, - MAP_MAXIMIZED, - INFO_MAXIMIZED, - PROFILE_MAXIMIZED, - LIST_MAXIMIZED - }; - MainWindow(); ~MainWindow(); static MainWindow *instance(); @@ -165,6 +152,8 @@ slots: private: Ui::MainWindow ui; FilterWidget filterWidget; + QSplitter *topSplitter; + QSplitter *bottomSplitter; QAction *actionNextDive; QAction *actionPreviousDive; QAction *undoAction; @@ -172,7 +161,6 @@ private: #ifndef NO_USERMANUAL UserManual *helpView; #endif - CurrentState state; QString filter_open(); QString filter_import(); QString filter_import_dive_sites(); @@ -188,15 +176,13 @@ private: void writeSettings(); int file_save(); int file_save_as(); - void beginChangeState(CurrentState s); void saveSplitterSizes(); - void toggleCollapsible(bool toggle); - void showFilterIfEnabled(); + void restoreSplitterSizes(); void updateLastUsedDir(const QString &s); - void enterState(CurrentState); + void clearSplitters(); bool filesAsArguments; UpdateManager *updateManager; - LocationInformationWidget *diveSiteEdit; + std::unique_ptr<LocationInformationWidget> diveSiteEdit; bool plannerStateClean(); void configureToolbar(); @@ -226,8 +212,8 @@ private: }; Quadrants applicationState[(size_t)ApplicationState::Count]; - static void setQuadrant(const Quadrant &, QStackedWidget *); - static void addWidgets(const Quadrant &, QStackedWidget *); + static void addWidgets(const Quadrant &); + void setQuadrantWidget(const Quadrant &q, QSplitter *splitter); void registerApplicationState(ApplicationState state, Quadrants q); QMenu *connections; |