From 191e11f6dc9f8ac42f39a8866a8f4dfb4f75433c Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Sun, 2 Apr 2023 00:03:33 +0900 Subject: [PATCH] Window's position, size and maximized status are now saved and restored across executions Signed-off-by: Michele Calgaro --- src/MainWindow.cpp | 126 +++++++++++++++++++----------------------- src/MainWindow.h | 7 +-- src/UiGuiSettings.cpp | 47 +++++++++++++--- 3 files changed, 99 insertions(+), 81 deletions(-) diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 81326ab..38e893b 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -185,31 +185,18 @@ void MainWindow::initMainWindow() _actionClearRecentlyOpenedListId = popupMenuRecentlyOpenedFiles->idAt( popupMenuRecentlyOpenedFiles->count() - 1); -///-- // Handle last opened window size -///-- // ------------------------------ -///-- bool maximized = _settings->getValueByName("maximized").toBool(); -///-- TQPoint pos = _settings->getValueByName("position").toPoint(); -///-- TQSize size = _settings->getValueByName("size").toSize(); -///-- resize(size); -///-- move(pos); -///-- if (maximized) -///-- { -///-- showMaximized(); -///-- } -///-- -///-- // Handle if first run of this version -///-- // ----------------------------------- -///-- TQString readVersion = _settings->getValueByName("version").toString(); -///-- // If version strings are not equal set first run true. -///-- if (readVersion != PROGRAM_VERSION_STRING) -///-- { -///-- _isFirstRunOfThisVersion = true; -///-- } -///-- else -///-- { -///-- _isFirstRunOfThisVersion = false; -///-- } -///-- + // Handle last opened window size + // ------------------------------ + bool maximized = m_settings->getValueByName("WindowIsMaximized").toBool(); + TQPoint pos = m_settings->getValueByName("WindowPosition").toPoint(); + TQSize size = m_settings->getValueByName("WindowSize").toSize(); + resize(size); + move(pos); + if (maximized) + { + showMaximized(); + } + ///-- // Get last selected file encoding ///-- // ------------------------------- ///-- _currentEncoding = _settings->getValueByName("encoding").toString(); @@ -1078,44 +1065,44 @@ void MainWindow::exportToHTML() ///-- // Update the mainwindow title to show the name of the loaded source code file. ///-- updateWindowTitle(); ///-- } -///-- -///-- /* -///-- \brief Saves the _settings for the main application to the file "UniversalIndentGUI.ini". -///-- -///-- Settings are for example last selected indenter, last loaded config file and so on. -///-- */ -///-- void MainWindow::saveSettings() -///-- { -///-- _settings->setValueByName("encoding", _currentEncoding); -///-- _settings->setValueByName("version", PROGRAM_VERSION_STRING); -///-- _settings->setValueByName("maximized", isMaximized()); -///-- if (!isMaximized()) -///-- { -///-- _settings->setValueByName("position", pos()); -///-- _settings->setValueByName("size", size()); -///-- } -///-- _settings->setValueByName("MainWindowState", saveState()); + +/* + \brief Saves the m_settings for the main application to the file "UniversalIndentGUI.ini". + + Settings are for example last selected indenter, last loaded config file and so on. +*/ +void MainWindow::saveSettings() +{ +///-- m_settings->setValueByName("encoding", _currentEncoding); +///-- m_settings->setValueByName("version", PROGRAM_VERSION_STRING); + m_settings->setValueByName("WindowIsMaximized", isMaximized()); + if (!isMaximized()) + { + m_settings->setValueByName("WindowPosition", pos()); + m_settings->setValueByName("WindowSize", size()); + } +///-- m_settings->setValueByName("MainWindowState", saveState()); ///-- ///-- // Also save the syntax highlight style for all lexers. ///-- _highlighter->writeCurrentSettings(""); -///-- } -///-- -///-- /* -///-- \brief Is always called when the program is quit. Calls the saveSettings function before really quits. -///-- */ -///-- void MainWindow::closeEvent(TQCloseEvent *event) -///-- { -///-- if (maybeSave()) -///-- { -///-- saveSettings(); -///-- event->accept(); -///-- } -///-- else -///-- { -///-- event->ignore(); -///-- } -///-- } -///-- +} + +/* + \brief Called when the program exits. Calls the saveSettings function before really quits. +*/ +void MainWindow::closeEvent(TQCloseEvent *event) +{ + if (maybeSave()) + { + saveSettings(); + event->accept(); + } + else + { + event->ignore(); + } +} + ///-- /* ///-- \brief This function is setup to capture tooltip events. ///-- @@ -1143,12 +1130,13 @@ void MainWindow::exportToHTML() ///-- return TQMainWindow::eventFilter(obj, event); ///-- } ///-- } -///-- -///-- /* -///-- \brief Is called at application exit and asks whether to save the source code file, if it has been changed. -///-- */ -///-- bool MainWindow::maybeSave() -///-- { + +/* + \brief Is called at application exit and asks whether to save the source code file, + if it has been changed. + */ +bool MainWindow::maybeSave() +{ ///-- if (isWindowModified()) ///-- { ///-- int ret = TQMessageBox::warning(this, tr("Modified code"), tr( @@ -1163,9 +1151,9 @@ void MainWindow::exportToHTML() ///-- return false; ///-- } ///-- } -///-- return true; -///-- } -///-- + return true; +} + ///-- /* ///-- \brief This slot is called whenever a language is selected in the menu. It tries to find the ///-- corresponding action in the languageInfoList and sets the language. diff --git a/src/MainWindow.h b/src/MainWindow.h index f99b4c4..7326c5c 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -50,7 +50,7 @@ class MainWindow : public MainWindowBase ~MainWindow(); ///-- protected: -///-- void closeEvent(TQCloseEvent *event); + void closeEvent(TQCloseEvent *event); ///-- bool eventFilter(TQObject *obj, TQEvent *event); ///-- private slots: @@ -82,8 +82,8 @@ class MainWindow : public MainWindowBase ///-- TQString openFileDialog(TQString dialogHeaderStr, TQString startPath, TQString fileMaskStr); ///-- void updateWindowTitle(); ///-- void loadLastOpenedFile(); -///-- void saveSettings(); -///-- bool maybeSave(); + void saveSettings(); + bool maybeSave(); ///-- void createEncodingMenu(); ///-- void createHighlighterMenu(); ///-- bool initApplicationLanguage(); @@ -120,7 +120,6 @@ class MainWindow : public MainWindowBase ///-- TQActionGroup *_highlighterActionGroup; ///-- TQTranslator *_uiGuiTranslator; ///-- TQTranslator *_qTTranslator; -///-- bool _isFirstRunOfThisVersion; ///-- ///-- bool _sourceCodeChanged; ///-- bool _scrollPositionChanged; diff --git a/src/UiGuiSettings.cpp b/src/UiGuiSettings.cpp index b231577..baea1d9 100644 --- a/src/UiGuiSettings.cpp +++ b/src/UiGuiSettings.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -175,13 +176,35 @@ bool UiGuiSettings::setValueByName(const TQString &settingName, TQVariant value) */ void UiGuiSettings::loadSettings() { - // Read the version string saved in the settings file. + // Read the version string m_settings["VersionInSettingsFile"] = m_qsettings->readEntry("version", TQString::null); - // Read windows last size and position from the settings file. + // Read window's maximized status m_settings["WindowIsMaximized"] = m_qsettings->readBoolEntry("maximized", false); - m_settings["WindowPosition"] = m_qsettings->readEntry("position", "@Point(50, 50)"); - m_settings["WindowSize"] = m_qsettings->readEntry("size", "@Size(800, 600)"); + + // Read window's position + TQString positionString = m_qsettings->readEntry("position", "@Point(50 50)"); + TQRegExp posrx("@Point\\((-?\\d+)[ \\t]+(-?\\d+)\\)"); + TQPoint position(50, 50); + if (posrx.exactMatch(positionString.stripWhiteSpace())) + { + TQStringList posList = posrx.capturedTexts(); + position.setX(posList[1].toInt()); + position.setY(posList[2].toInt()); + } + m_settings["WindowPosition"] = position; + + // Read window's size + TQString sizeString = m_qsettings->readEntry("size", "@Size(800 600)"); + TQRegExp sizerx("@Size\\((-?\\d+)[ \\t]+(-?\\d+)\\)"); + TQSize size(800, 600); + if (sizerx.exactMatch(sizeString.stripWhiteSpace())) + { + TQStringList sizeList = sizerx.capturedTexts(); + size.setWidth(sizeList[1].toInt()); + size.setHeight(sizeList[2].toInt()); + } + m_settings["WindowSize"] = size; // Read last selected encoding for the opened source code file. m_settings["FileEncoding"] = m_qsettings->readEntry("encoding", "UTF-8"); @@ -241,13 +264,21 @@ void UiGuiSettings::loadSettings() */ void UiGuiSettings::saveSettings() { - // Write the version string saved in the settings file. + // Write the version string m_qsettings->writeEntry("version", m_settings["VersionInSettingsFile"].toString()); - // Write windows last size and position from the settings file. + // Write window's maximized status m_qsettings->writeEntry("maximized", m_settings["WindowIsMaximized"].toBool()); - m_qsettings->writeEntry("position", m_settings["WindowPosition"].toString()); - m_qsettings->writeEntry("size", m_settings["WindowSize"].toString()); + + // Write window's position + TQPoint position = m_settings["WindowPosition"].toPoint(); + TQString positionString = TQString("@Point(%1 %2)").arg(position.x()).arg(position.y()); + m_qsettings->writeEntry("position", positionString); + + // Write window's size + TQSize size = m_settings["WindowSize"].toSize(); + TQString sizeString = TQString("@Size(%1 %2)").arg(size.width()).arg(size.height()); + m_qsettings->writeEntry("size", sizeString); // Write last selected encoding for the opened source code file. m_qsettings->writeEntry("encoding", m_settings["FileEncoding"].toString());