ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
ecvLayoutManager.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #ifndef ECV_LAYOUT_MANAGER_H
9 #define ECV_LAYOUT_MANAGER_H
10 
11 // CV_CORE_LIB
12 #include <CVLog.h>
13 
14 // Qt
15 #include <QDockWidget>
16 #include <QGuiApplication>
17 #include <QMainWindow>
18 #include <QScreen>
19 #include <QSet>
20 #include <QSettings>
21 #include <QToolBar>
22 
23 // Forward declarations
24 class ccPluginUIManager;
25 
27 
34 class ecvLayoutManager : public QObject {
35  Q_OBJECT
36 
37 public:
39  explicit ecvLayoutManager(QMainWindow* mainWindow,
40  ccPluginUIManager* pluginManager);
41 
43  virtual ~ecvLayoutManager();
44 
45 public: // Layout operations
47 
49  void setupDefaultLayout();
50 
53 
57 
59  void saveGUILayout();
60 
62 
64  void restoreGUILayout(bool forceDefault = false);
65 
67  void saveCustomLayout();
68 
70  void restoreDefaultLayout();
71 
73 
75  bool restoreCustomLayout();
76 
77 public: // Configuration
79  void setAutoSaveEnabled(bool enabled) { m_autoSaveEnabled = enabled; }
80 
82  bool isAutoSaveEnabled() const { return m_autoSaveEnabled; }
83 
85  void registerRightSideToolBar(QToolBar* toolbar);
86 
88  void registerLeftSideToolBar(QToolBar* toolbar);
89 
91  void registerBottomDockWidget(QDockWidget* dockWidget);
92 
94  void registerRightSideDockWidget(QDockWidget* dockWidget);
95 
99  void setToolbarIconSize(QToolBar* toolbar, int screenWidth);
100 
101 private: // Helper methods
103  QRect getScreenGeometry() const;
104 
106  QSize getIconSizeForScreen(int screenWidth) const;
107 
109 
113  bool isAutoRestoreEnabled() const;
114 
116  void setupToolbarLayout(int screenWidth);
117 
119  void setupDockWidgetLayout(int screenWidth, int screenHeight);
120 
122  void setupMainWindowGeometry(int screenWidth, int screenHeight);
123 
124 private:
125  QMainWindow* m_mainWindow;
126  ccPluginUIManager* m_pluginManager;
127  bool m_autoSaveEnabled;
128 
129  // Toolbar sets for categorization
130  QSet<QToolBar*> m_rightSideToolBars;
131  QSet<QToolBar*> m_leftSideToolBars;
132  QSet<QDockWidget*> m_bottomDockWidgets;
133  QSet<QDockWidget*>
134  m_rightSideDockWidgets;
135 };
136 
137 #endif // ECV_LAYOUT_MANAGER_H
Plugin UI manager.
Layout manager for MainWindow.
void registerBottomDockWidget(QDockWidget *dockWidget)
Register a dock widget to be placed at the bottom.
void registerLeftSideToolBar(QToolBar *toolbar)
Register a toolbar to be placed on the left side.
void restoreGUILayout(bool forceDefault=false)
Restore GUI layout from settings.
void repositionUnifiedPluginToolbar()
Reposition the unified plugin toolbar to the end of the first row.
void setToolbarIconSize(QToolBar *toolbar, int screenWidth)
ecvLayoutManager(QMainWindow *mainWindow, ccPluginUIManager *pluginManager)
Constructor.
bool restoreCustomLayout()
Restore previously saved custom layout.
void registerRightSideToolBar(QToolBar *toolbar)
Register a toolbar to be placed on the right side.
void saveGUILayout()
Save current GUI layout to settings.
bool isAutoSaveEnabled() const
Get whether auto-save is enabled.
void registerRightSideDockWidget(QDockWidget *dockWidget)
Register a dock widget to be placed on the right side.
void hideAdditionalPluginToolbars()
void setAutoSaveEnabled(bool enabled)
Set whether to auto-save layout on close.
void restoreDefaultLayout()
Restore the default layout.
void setupDefaultLayout()
Setup default layout for the main window.
virtual ~ecvLayoutManager()
Destructor.
void saveCustomLayout()
Save current layout as custom layout.