save/restore window state and geometry

Signed-off-by: Le Tan <tamlokveer@gmail.com>
This commit is contained in:
Le Tan 2016-11-20 11:12:15 +08:00
parent ed785e12d3
commit 3ae3462597
4 changed files with 95 additions and 5 deletions

View File

@ -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();

View File

@ -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 &section, 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

View File

@ -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<VNotebook> &notebooks)
@ -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());
}

View File

@ -56,6 +56,9 @@ private slots:
signals:
void curNotebookChanged(const QString &notebookName);
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;