diff --git a/src/lib/app/Application.cpp b/src/lib/app/Application.cpp index 0498544c..93355ffd 100644 --- a/src/lib/app/Application.cpp +++ b/src/lib/app/Application.cpp @@ -450,7 +450,7 @@ void Application::updateRecentProjects(const FilePath& projectSettingsFilePath) } recentProjects.insert(recentProjects.begin(), projectSettingsFilePath); - while (static_cast(recentProjects.size()) > appSettings->getMaxRecentProjectsCount()) + while (recentProjects.size() > appSettings->getMaxRecentProjectsCount()) { recentProjects.pop_back(); } diff --git a/src/lib/settings/ApplicationSettings.cpp b/src/lib/settings/ApplicationSettings.cpp index 2d2badb7..35eae9dc 100644 --- a/src/lib/settings/ApplicationSettings.cpp +++ b/src/lib/settings/ApplicationSettings.cpp @@ -138,7 +138,7 @@ bool ApplicationSettings::operator==(const ApplicationSettings& other) const utility::isPermutation(getFrameworkSearchPaths(), other.getFrameworkSearchPaths()); } -int ApplicationSettings::getMaxRecentProjectsCount() const +size_t ApplicationSettings::getMaxRecentProjectsCount() const { return 7; } diff --git a/src/lib/settings/ApplicationSettings.h b/src/lib/settings/ApplicationSettings.h index 49da28b7..c91eb80c 100644 --- a/src/lib/settings/ApplicationSettings.h +++ b/src/lib/settings/ApplicationSettings.h @@ -22,7 +22,7 @@ public: bool operator==(const ApplicationSettings& other) const; - int getMaxRecentProjectsCount() const; + size_t getMaxRecentProjectsCount() const; // application std::string getFontName() const; diff --git a/src/lib_gui/qt/view/QtMainView.cpp b/src/lib_gui/qt/view/QtMainView.cpp index d2c72a77..e83b68e9 100644 --- a/src/lib_gui/qt/view/QtMainView.cpp +++ b/src/lib_gui/qt/view/QtMainView.cpp @@ -138,7 +138,7 @@ void QtMainView::activateWindow() void QtMainView::updateRecentProjectMenu() { - m_onQtThread([=]() { m_window->updateRecentProjectMenu(); }); + m_onQtThread([=]() { m_window->updateRecentProjectsMenu(); }); } void QtMainView::updateHistoryMenu(std::shared_ptr message) diff --git a/src/lib_gui/qt/window/QtMainWindow.cpp b/src/lib_gui/qt/window/QtMainWindow.cpp index 4866b06f..002acc32 100644 --- a/src/lib_gui/qt/window/QtMainWindow.cpp +++ b/src/lib_gui/qt/window/QtMainWindow.cpp @@ -137,9 +137,6 @@ QtMainWindow::QtMainWindow() .c_str()); } - m_recentProjectAction = - new QAction*[ApplicationSettings::getInstance()->getMaxRecentProjectsCount()]; - setupProjectMenu(); setupEditMenu(); setupViewMenu(); @@ -154,11 +151,6 @@ QtMainWindow::QtMainWindow() QtMainWindow::~QtMainWindow() { - if (m_recentProjectAction) - { - delete[] m_recentProjectAction; - } - for (DockWidget& dockWidget: m_dockWidgets) { dockWidget.toggle->clear(); @@ -762,21 +754,23 @@ void QtMainWindow::openRecentProject() } } -void QtMainWindow::updateRecentProjectMenu() +void QtMainWindow::updateRecentProjectsMenu() { - std::vector recentProjects = ApplicationSettings::getInstance()->getRecentProjects(); - for (int i = 0; i < ApplicationSettings::getInstance()->getMaxRecentProjectsCount(); i++) + m_recentProjectsMenu->clear(); + + const std::vector recentProjects = ApplicationSettings::getInstance()->getRecentProjects(); + const size_t recentProjectsCount = ApplicationSettings::getInstance()->getMaxRecentProjectsCount(); + + for (size_t i = 0; i < recentProjects.size() && i < recentProjectsCount; ++i) { - if ((size_t)i < recentProjects.size() && recentProjects[i].exists()) + const FilePath& project = recentProjects[i]; + if (project.exists()) { - FilePath project = recentProjects[i]; - m_recentProjectAction[i]->setVisible(true); - m_recentProjectAction[i]->setText(QString::fromStdWString(project.fileName())); - m_recentProjectAction[i]->setData(QString::fromStdWString(project.wstr())); - } - else - { - m_recentProjectAction[i]->setVisible(false); + QAction* recentProject = new QAction(this); + recentProject->setText(QString::fromStdWString(project.fileName())); + recentProject->setData(QString::fromStdWString(project.wstr())); + connect(recentProject, &QAction::triggered, this, &QtMainWindow::openRecentProject); + m_recentProjectsMenu->addAction(recentProject); } } } @@ -840,20 +834,9 @@ void QtMainWindow::setupProjectMenu() menu->addAction(tr("&New Project..."), this, &QtMainWindow::newProject, QKeySequence::New); menu->addAction(tr("&Open Project..."), this, &QtMainWindow::openProject, QKeySequence::Open); - QMenu* recentProjectMenu = new QMenu(tr("Recent Projects")); - menu->addMenu(recentProjectMenu); - - for (int i = 0; i < ApplicationSettings::getInstance()->getMaxRecentProjectsCount(); ++i) - { - m_recentProjectAction[i] = new QAction(this); - m_recentProjectAction[i]->setVisible(false); - connect( - m_recentProjectAction[i], &QAction::triggered, this, &QtMainWindow::openRecentProject); - recentProjectMenu->addAction(m_recentProjectAction[i]); - } - updateRecentProjectMenu(); - - menu->addMenu(recentProjectMenu); + m_recentProjectsMenu = new QMenu(tr("Recent Projects")); + menu->addMenu(m_recentProjectsMenu); + updateRecentProjectsMenu(); menu->addSeparator(); diff --git a/src/lib_gui/qt/window/QtMainWindow.h b/src/lib_gui/qt/window/QtMainWindow.h index 5c16369f..dcc94d75 100644 --- a/src/lib_gui/qt/window/QtMainWindow.h +++ b/src/lib_gui/qt/window/QtMainWindow.h @@ -147,7 +147,7 @@ public slots: void resetWindowLayout(); void openRecentProject(); - void updateRecentProjectMenu(); + void updateRecentProjectsMenu(); void toggleView(View* view, bool fromMenu); @@ -194,7 +194,8 @@ private: QMenu* m_bookmarksMenu; std::vector> m_bookmarks; - QAction** m_recentProjectAction; + QMenu* m_recentProjectsMenu; + QAction* m_showTitleBarsAction; bool m_showDockWidgetTitleBars; diff --git a/src/lib_gui/qt/window/QtStartScreen.cpp b/src/lib_gui/qt/window/QtStartScreen.cpp index 63417688..578e254e 100644 --- a/src/lib_gui/qt/window/QtStartScreen.cpp +++ b/src/lib_gui/qt/window/QtStartScreen.cpp @@ -64,9 +64,7 @@ void QtRecentProjectButton::handleButtonClick() { std::vector recentProjects = ApplicationSettings::getInstance()->getRecentProjects(); - const int maxRecentProjectsCount = - ApplicationSettings::getInstance()->getMaxRecentProjectsCount(); - for (int i = 0; i < maxRecentProjectsCount; i++) + for (size_t i = 0; i < recentProjects.size(); ++i) { if (recentProjects[i].wstr() == m_projectFilePath.wstr()) { @@ -269,7 +267,7 @@ void QtStartScreen::setupStartScreen() col->addSpacing(20); - for (int i = 0; i < ApplicationSettings::getInstance()->getMaxRecentProjectsCount(); i++) + for (size_t i = 0; i < ApplicationSettings::getInstance()->getMaxRecentProjectsCount(); ++i) { QtRecentProjectButton* button = new QtRecentProjectButton(this); button->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac