ui: Refactored recent projects menu (#956)

fixes #848
This commit is contained in:
Eberhard Gräther
2020-04-02 12:30:30 +02:00
committed by GitHub
parent 5a4de2d46a
commit 0c577f2f69
7 changed files with 26 additions and 44 deletions
+1 -1
View File
@@ -450,7 +450,7 @@ void Application::updateRecentProjects(const FilePath& projectSettingsFilePath)
}
recentProjects.insert(recentProjects.begin(), projectSettingsFilePath);
while (static_cast<int>(recentProjects.size()) > appSettings->getMaxRecentProjectsCount())
while (recentProjects.size() > appSettings->getMaxRecentProjectsCount())
{
recentProjects.pop_back();
}
+1 -1
View File
@@ -138,7 +138,7 @@ bool ApplicationSettings::operator==(const ApplicationSettings& other) const
utility::isPermutation<FilePath>(getFrameworkSearchPaths(), other.getFrameworkSearchPaths());
}
int ApplicationSettings::getMaxRecentProjectsCount() const
size_t ApplicationSettings::getMaxRecentProjectsCount() const
{
return 7;
}
+1 -1
View File
@@ -22,7 +22,7 @@ public:
bool operator==(const ApplicationSettings& other) const;
int getMaxRecentProjectsCount() const;
size_t getMaxRecentProjectsCount() const;
// application
std::string getFontName() const;
+1 -1
View File
@@ -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<MessageBase> message)
+17 -34
View File
@@ -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<FilePath> recentProjects = ApplicationSettings::getInstance()->getRecentProjects();
for (int i = 0; i < ApplicationSettings::getInstance()->getMaxRecentProjectsCount(); i++)
m_recentProjectsMenu->clear();
const std::vector<FilePath> 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();
+3 -2
View File
@@ -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<std::shared_ptr<Bookmark>> m_bookmarks;
QAction** m_recentProjectAction;
QMenu* m_recentProjectsMenu;
QAction* m_showTitleBarsAction;
bool m_showDockWidgetTitleBars;
+2 -4
View File
@@ -64,9 +64,7 @@ void QtRecentProjectButton::handleButtonClick()
{
std::vector<FilePath> 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