From e803a31a906d701a51724c211ca4aedee996452b Mon Sep 17 00:00:00 2001 From: Winnie Date: Wed, 28 Aug 2019 22:51:54 +0200 Subject: [PATCH] Simplify TemplatesMenu class (#5155) --- include/TemplatesMenu.h | 6 ++-- src/gui/menus/TemplatesMenu.cpp | 50 +++++++++++++++------------------ 2 files changed, 24 insertions(+), 32 deletions(-) diff --git a/include/TemplatesMenu.h b/include/TemplatesMenu.h index b686ee60e..049f1f47e 100644 --- a/include/TemplatesMenu.h +++ b/include/TemplatesMenu.h @@ -12,12 +12,10 @@ public: virtual ~TemplatesMenu() = default; private slots: - void createNewProjectFromTemplate( QAction * _idx ); + static void createNewProjectFromTemplate(QAction * _action); void fillTemplatesMenu(); - int addTemplatesFromDir( const QDir& dir ); + void addTemplatesFromDir( const QDir& dir ); -private: - int m_customTemplatesCount; }; #endif // TEMPLATESMENU_H diff --git a/src/gui/menus/TemplatesMenu.cpp b/src/gui/menus/TemplatesMenu.cpp index b1cca87ab..5fb740203 100644 --- a/src/gui/menus/TemplatesMenu.cpp +++ b/src/gui/menus/TemplatesMenu.cpp @@ -1,14 +1,15 @@ #include "TemplatesMenu.h" -#include "GuiApplication.h" + #include "ConfigManager.h" #include "Engine.h" -#include "embed.h" -#include "MainWindow.h" #include "Song.h" +#include "embed.h" +#include "GuiApplication.h" +#include "MainWindow.h" + TemplatesMenu::TemplatesMenu(QWidget *parent) : - QMenu(tr("New from template"), parent), - m_customTemplatesCount(0) + QMenu(tr("New from template"), parent) { connect( this, SIGNAL( aboutToShow() ), SLOT( fillTemplatesMenu() ) ); connect( this, SIGNAL( triggered( QAction * ) ), @@ -18,18 +19,12 @@ TemplatesMenu::TemplatesMenu(QWidget *parent) : -void TemplatesMenu::createNewProjectFromTemplate( QAction * _idx ) +void TemplatesMenu::createNewProjectFromTemplate(QAction * _action) { if( gui->mainWindow()->mayChangeProject(true) ) { - int indexOfTemplate = actions().indexOf( _idx ); - bool isFactoryTemplate = indexOfTemplate >= m_customTemplatesCount; - QString dirBase = isFactoryTemplate ? - ConfigManager::inst()->factoryTemplatesDir() : - ConfigManager::inst()->userTemplateDir(); - - const QString f = dirBase + _idx->text().replace("&&", "&") + ".mpt"; - Engine::getSong()->createNewProjectFromTemplate(f); + const QString& templateFilePath = _action->data().toString(); + Engine::getSong()->createNewProjectFromTemplate(templateFilePath); } } @@ -41,33 +36,32 @@ void TemplatesMenu::fillTemplatesMenu() { clear(); - m_customTemplatesCount = addTemplatesFromDir(ConfigManager::inst()->userTemplateDir() ); - addTemplatesFromDir( ConfigManager::inst()->factoryProjectsDir() + "templates" ); + addTemplatesFromDir(ConfigManager::inst()->userTemplateDir()); + addTemplatesFromDir(ConfigManager::inst()->factoryProjectsDir() + "templates"); } -int TemplatesMenu::addTemplatesFromDir( const QDir& dir ) { - QStringList templates = dir.entryList( QStringList( "*.mpt" ), +void TemplatesMenu::addTemplatesFromDir( const QDir& dir ) { + QFileInfoList templates = dir.entryInfoList( QStringList( "*.mpt" ), QDir::Files | QDir::Readable ); - if ( templates.size() && ! actions().isEmpty() ) + if (!templates.empty() && !actions().isEmpty()) { addSeparator(); } - for( QStringList::iterator it = templates.begin(); - it != templates.end(); ++it ) + auto projectFileIcon = embed::getIconPixmap( "project_file" ); + + for(const QFileInfo& templateFile : templates) { - addAction( - embed::getIconPixmap( "project_file" ), - ( *it ).left( ( *it ).length() - 4 ).replace("&", "&&") ); + auto action = addAction(projectFileIcon, + templateFile.completeBaseName().replace("&", "&&")); + action->setData(templateFile.absoluteFilePath()); #ifdef LMMS_BUILD_APPLE - actions().last()->setIconVisibleInMenu(false); // QTBUG-44565 workaround - actions().last()->setIconVisibleInMenu(true); + action->setIconVisibleInMenu(false); // QTBUG-44565 workaround + action->setIconVisibleInMenu(true); #endif } - - return templates.size(); }