From 3ae3462597715f9b7ffd27a603da54c864ae6e7c Mon Sep 17 00:00:00 2001 From: Le Tan Date: Sun, 20 Nov 2016 11:12:15 +0800 Subject: [PATCH] save/restore window state and geometry Signed-off-by: Le Tan --- src/vconfigmanager.cpp | 4 ++++ src/vconfigmanager.h | 50 ++++++++++++++++++++++++++++++++++++++++++ src/vmainwindow.cpp | 40 ++++++++++++++++++++++++++++----- src/vmainwindow.h | 6 +++++ 4 files changed, 95 insertions(+), 5 deletions(-) diff --git a/src/vconfigmanager.cpp b/src/vconfigmanager.cpp index b91b6325..7a7d52da 100644 --- a/src/vconfigmanager.cpp +++ b/src/vconfigmanager.cpp @@ -61,6 +61,10 @@ void VConfigManager::initialize() curRenderBackgroundColor = getConfigFromSettings("global", "current_render_background_color").toString(); + m_toolsDockChecked = getConfigFromSettings("session", "tools_dock_checked").toBool(); + m_mainWindowGeometry = getConfigFromSettings("session", "main_window_geometry").toByteArray(); + m_mainWindowState = getConfigFromSettings("session", "main_window_state").toByteArray(); + // Update notebooks readNotebookFromSettings(); diff --git a/src/vconfigmanager.h b/src/vconfigmanager.h index 485be6f1..4246897f 100644 --- a/src/vconfigmanager.h +++ b/src/vconfigmanager.h @@ -83,6 +83,15 @@ public: inline const QString &getCurRenderBackgroundColor() const; inline void setCurRenderBackgroundColor(const QString &colorName); + inline bool getToolsDockChecked() const; + inline void setToolsDockChecked(bool p_checked); + + inline const QByteArray &getMainWindowGeometry() const; + inline void setMainWindowGeometry(const QByteArray &p_geometry); + + inline const QByteArray &getMainWindowState() const; + inline void setMainWindowState(const QByteArray &p_state); + private: void updateMarkdownEditStyle(); QVariant getConfigFromSettings(const QString §ion, const QString &key); @@ -120,6 +129,11 @@ private: QString curBackgroundColor; QString curRenderBackgroundColor; + bool m_toolsDockChecked; + + QByteArray m_mainWindowGeometry; + QByteArray m_mainWindowState; + // The name of the config file in each directory static const QString dirConfigFileName; // The name of the default configuration file @@ -289,4 +303,40 @@ inline void VConfigManager::setCurRenderBackgroundColor(const QString &colorName curRenderBackgroundColor); } +inline bool VConfigManager::getToolsDockChecked() const +{ + return m_toolsDockChecked; +} + +inline void VConfigManager::setToolsDockChecked(bool p_checked) +{ + m_toolsDockChecked = p_checked; + setConfigToSettings("session", "tools_dock_checked", + m_toolsDockChecked); +} + +inline const QByteArray& VConfigManager::getMainWindowGeometry() const +{ + return m_mainWindowGeometry; +} + +inline void VConfigManager::setMainWindowGeometry(const QByteArray &p_geometry) +{ + m_mainWindowGeometry = p_geometry; + setConfigToSettings("session", "main_window_geometry", + m_mainWindowGeometry); +} + +inline const QByteArray& VConfigManager::getMainWindowState() const +{ + return m_mainWindowState; +} + +inline void VConfigManager::setMainWindowState(const QByteArray &p_state) +{ + m_mainWindowState = p_state; + setConfigToSettings("session", "main_window_state", + m_mainWindowState); +} + #endif // VCONFIGMANAGER_H diff --git a/src/vmainwindow.cpp b/src/vmainwindow.cpp index 90bc6c58..f5235391 100644 --- a/src/vmainwindow.cpp +++ b/src/vmainwindow.cpp @@ -25,6 +25,7 @@ VMainWindow::VMainWindow(QWidget *parent) initToolBar(); initMenuBar(); initDockWindows(); + restoreStateAndGeometry(); updateNotebookComboBox(vnote->getNotebooks()); } @@ -273,6 +274,7 @@ void VMainWindow::initActions() void VMainWindow::initToolBar() { QToolBar *fileToolBar = addToolBar(tr("Note")); + fileToolBar->setObjectName("note"); fileToolBar->addAction(newRootDirAct); fileToolBar->addAction(newNoteAct); fileToolBar->addAction(noteInfoAct); @@ -292,6 +294,7 @@ void VMainWindow::initToolBar() saveNoteAct->setVisible(false); QToolBar *viewToolBar = addToolBar(tr("View")); + viewToolBar->setObjectName("view"); viewToolBar->addAction(twoPanelViewAct); viewToolBar->addAction(onePanelViewAct); viewToolBar->addAction(expandViewAct); @@ -355,8 +358,9 @@ void VMainWindow::initMenuBar() void VMainWindow::initDockWindows() { - QDockWidget *dock = new QDockWidget(tr("Tools"), this); - dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); + toolDock = new QDockWidget(tr("Tools"), this); + toolDock->setObjectName("tools_dock"); + toolDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); toolBox = new QToolBox(this); outline = new VOutline(this); connect(editArea, &VEditArea::outlineChanged, @@ -366,9 +370,9 @@ void VMainWindow::initDockWindows() connect(editArea, &VEditArea::curHeaderChanged, outline, &VOutline::updateCurHeader); toolBox->addItem(outline, QIcon(":/resources/icons/outline.svg"), tr("Outline")); - dock->setWidget(toolBox); - addDockWidget(Qt::RightDockWidgetArea, dock); - viewMenu->addAction(dock->toggleViewAction()); + toolDock->setWidget(toolBox); + addDockWidget(Qt::RightDockWidgetArea, toolDock); + viewMenu->addAction(toolDock->toggleViewAction()); } void VMainWindow::updateNotebookComboBox(const QVector ¬ebooks) @@ -789,3 +793,29 @@ void VMainWindow::deleteCurNote() { fileList->deleteFile(curEditNotebook, curEditRelativePath); } + +void VMainWindow::closeEvent(QCloseEvent *event) +{ + saveStateAndGeometry(); + QMainWindow::closeEvent(event); +} + +void VMainWindow::saveStateAndGeometry() +{ + vconfig.setMainWindowGeometry(saveGeometry()); + vconfig.setMainWindowState(saveState()); + vconfig.setToolsDockChecked(toolDock->isVisible()); +} + +void VMainWindow::restoreStateAndGeometry() +{ + const QByteArray &geometry = vconfig.getMainWindowGeometry(); + if (!geometry.isEmpty()) { + restoreGeometry(geometry); + } + const QByteArray &state = vconfig.getMainWindowState(); + if (!state.isEmpty()) { + restoreState(state); + } + toolDock->setVisible(vconfig.getToolsDockChecked()); +} diff --git a/src/vmainwindow.h b/src/vmainwindow.h index db9eada5..81941fab 100644 --- a/src/vmainwindow.h +++ b/src/vmainwindow.h @@ -56,6 +56,9 @@ private slots: signals: void curNotebookChanged(const QString ¬ebookName); +protected: + void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE; + private: void setupUI(); void initActions(); @@ -69,6 +72,8 @@ private: void changeSplitterView(int nrPanel); void updateWindowTitle(const QString &str); void updateToolbarFromTabChage(bool empty, bool editMode, bool modifiable); + void saveStateAndGeometry(); + void restoreStateAndGeometry(); // If true, comboBox changes will not trigger any signal out bool notebookComboMuted; @@ -87,6 +92,7 @@ private: VDirectoryTree *directoryTree; QSplitter *mainSplitter; VEditArea *editArea; + QDockWidget *toolDock; QToolBox *toolBox; VOutline *outline;