diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index a2f18ab72..fb12451e8 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -56,7 +56,7 @@ #include -const int MainWindow::MaxRecentFiles; +int MainWindow::MaxRecentFiles; MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), @@ -213,6 +213,10 @@ void MainWindow::init() QShortcut* shortcutFocusEditor = new QShortcut(QKeySequence(tr("Ctrl+PgUp")), ui->tabSqlAreas, nullptr, nullptr, Qt::WidgetWithChildrenShortcut); connect(shortcutFocusEditor, &QShortcut::activated, this, &MainWindow::focusSqlEditor); + // Get MaxRecentFiles value from QSettings. + MaxRecentFiles = Settings::getValue("General", "maxRecentFiles").toInt(); + recentFileActs.resize(MaxRecentFiles); + // Create the actions for the recently opened dbs list for(int i = 0; i < MaxRecentFiles; ++i) { recentFileActs[i] = new QAction(this); @@ -222,7 +226,8 @@ void MainWindow::init() for(int i = 0; i < MaxRecentFiles; ++i) ui->fileRecentFiles->insertAction(ui->fileExitAction, recentFileActs[i]); - QAction *clearRecentFilesAction = ui->fileRecentFiles->addAction(tr("Clear List")); + recentSeparatorAct = ui->fileRecentFiles->insertSeparator(ui->fileExitAction); + clearRecentFilesAction = ui->fileRecentFiles->addAction(tr("Clear List")); ui->fileRecentFiles->insertAction(ui->fileExitAction, clearRecentFilesAction); connect(clearRecentFilesAction, &QAction::triggered, this, &MainWindow::clearRecentFiles); @@ -2154,6 +2159,40 @@ void MainWindow::reloadSettings() w->reloadSettings(); } + // Set max recent files + const int newMaxRecentFiles = Settings::getValue("General", "maxRecentFiles").toInt(); + + if(MaxRecentFiles < newMaxRecentFiles) { + // If user increase max recent files value. + ui->fileRecentFiles->removeAction(clearRecentFilesAction); + + recentFileActs.resize(newMaxRecentFiles); + for(int i = MaxRecentFiles; i < newMaxRecentFiles; ++i) { + recentFileActs[i] = new QAction(this); + recentFileActs[i]->setVisible(false); + connect(recentFileActs[i], &QAction::triggered, this, &MainWindow::openRecentFile); + } + + for(int i = 0; i < newMaxRecentFiles; ++i) + ui->fileRecentFiles->insertAction(ui->fileExitAction, recentFileActs[i]); + + ui->fileRecentFiles->insertSeparator(ui->fileExitAction); + ui->fileRecentFiles->insertAction(ui->fileExitAction, clearRecentFilesAction); + + MaxRecentFiles = newMaxRecentFiles; + updateRecentFileActions(); + } else if (MaxRecentFiles > newMaxRecentFiles) { + // If user decrease max recent files value. + for(int i = (MaxRecentFiles - 1); i >= newMaxRecentFiles; --i) { + ui->fileRecentFiles->removeAction(recentFileActs[i]); + delete recentFileActs[i]; + } + + recentFileActs.resize(newMaxRecentFiles); + MaxRecentFiles = newMaxRecentFiles; + updateRecentFileActions(); + } + switch (static_cast(Settings::getValue("General", "appStyle").toInt())) { case Settings::FollowDesktopStyle : qApp->setStyleSheet(""); diff --git a/src/MainWindow.h b/src/MainWindow.h index 7a2f432d6..acf9e9333 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -80,8 +80,10 @@ class MainWindow : public QMainWindow DbStructureModel* dbStructureModel; - static const int MaxRecentFiles = 5; - QAction *recentFileActs[MaxRecentFiles]; + static int MaxRecentFiles; + QVector recentFileActs; + QAction* clearRecentFilesAction; + QAction* recentSeparatorAct; EditDialog* editDock; PlotDock* plotDock; diff --git a/src/PreferencesDialog.cpp b/src/PreferencesDialog.cpp index 74f44ba1c..9d43c3bff 100644 --- a/src/PreferencesDialog.cpp +++ b/src/PreferencesDialog.cpp @@ -206,6 +206,7 @@ void PreferencesDialog::loadSettings() ui->toolbarStyleComboSql->setCurrentIndex(Settings::getValue("General", "toolbarStyleSql").toInt()); ui->toolbarStyleComboEditCell->setCurrentIndex(Settings::getValue("General", "toolbarStyleEditCell").toInt()); ui->spinGeneralFontSize->setValue(Settings::getValue("General", "fontsize").toInt()); + ui->spinMaxRecentFiles->setValue(Settings::getValue("General", "maxRecentFiles").toInt()); } void PreferencesDialog::saveSettings() @@ -337,6 +338,7 @@ void PreferencesDialog::saveSettings() Settings::setValue("General", "toolbarStyleEditCell", ui->toolbarStyleComboEditCell->currentIndex()); Settings::setValue("General", "DBFileExtensions", m_dbFileExtensions.join(";;") ); Settings::setValue("General", "fontsize", ui->spinGeneralFontSize->value()); + Settings::setValue("General", "maxRecentFiles", ui->spinMaxRecentFiles->value()); m_proxyDialog->saveSettings(); diff --git a/src/PreferencesDialog.ui b/src/PreferencesDialog.ui index ddf136922..0cece9152 100644 --- a/src/PreferencesDialog.ui +++ b/src/PreferencesDialog.ui @@ -7,7 +7,7 @@ 0 0 755 - 618 + 625 @@ -122,7 +122,7 @@ - + Toolbar style @@ -132,7 +132,7 @@ - + @@ -182,7 +182,7 @@ - + @@ -232,7 +232,7 @@ - + @@ -282,7 +282,7 @@ - + @@ -332,7 +332,7 @@ - + Show remote options @@ -342,7 +342,7 @@ - + enabled @@ -352,7 +352,7 @@ - + Automatic &updates @@ -362,14 +362,14 @@ - + enabled - + DB file extensions @@ -379,14 +379,14 @@ - + Manage - + Main Window @@ -399,7 +399,7 @@ - + Database Structure @@ -412,7 +412,7 @@ - + Browse Data @@ -425,7 +425,7 @@ - + Execute SQL @@ -438,7 +438,7 @@ - + @@ -488,7 +488,7 @@ - + Edit Database Cell @@ -565,6 +565,23 @@ + + + + Max Recent Files + + + + + + + 1 + + + 40 + + + diff --git a/src/Settings.cpp b/src/Settings.cpp index eed20b075..956605b89 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -160,6 +160,10 @@ QVariant Settings::getDefaultValue(const std::string& group, const std::string& if(group == "General" && name == "recentFileList") return QStringList(); + // General/maxRecentFiles? + if(group == "General" && name == "maxRecentFiles") + return 5; + // General/language? if(group == "General" && name == "language") return QLocale::system().name();