mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-14 04:19:12 +00:00
Create submenus in File > Scripts for each directory in the user scripts/ folder
This commit is contained in:
parent
674e108b00
commit
57aa2de6d9
@ -379,23 +379,7 @@ void AppMenus::reload()
|
||||
std::string scriptsDir = rf.getFirstOrCreateDefault();
|
||||
scriptsDir = base::get_file_path(scriptsDir);
|
||||
if (base::is_directory(scriptsDir)) {
|
||||
Command* cmd_run_script =
|
||||
Commands::instance()->byId(CommandId::RunScript());
|
||||
|
||||
for (auto fn : base::list_files(scriptsDir)) {
|
||||
if (base::string_to_lower(base::get_file_extension(fn)) == "lua") {
|
||||
std::string fullFn = base::join_path(scriptsDir, fn);
|
||||
if (base::is_file(fullFn)) {
|
||||
Params params;
|
||||
params.set("filename", fullFn.c_str());
|
||||
auto menuitem = new AppMenuItem(
|
||||
base::get_file_title(fn).c_str(),
|
||||
cmd_run_script,
|
||||
params);
|
||||
scriptsMenu->getSubmenu()->addChild(menuitem);
|
||||
}
|
||||
}
|
||||
}
|
||||
loadScriptsSubmenu(scriptsMenu->getSubmenu(), scriptsDir);
|
||||
}
|
||||
#else
|
||||
// Scripting is not available
|
||||
@ -411,6 +395,45 @@ void AppMenus::reload()
|
||||
createNativeMenus();
|
||||
}
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
void AppMenus::loadScriptsSubmenu(ui::Menu* menu, const std::string& dir)
|
||||
{
|
||||
Command* cmd_run_script =
|
||||
Commands::instance()->byId(CommandId::RunScript());
|
||||
|
||||
auto files = base::list_files(dir);
|
||||
std::sort(files.begin(), files.end());
|
||||
for (auto fn : files) {
|
||||
std::string fullFn = base::join_path(dir, fn);
|
||||
AppMenuItem* menuitem = nullptr;
|
||||
|
||||
if (base::is_file(fullFn)) {
|
||||
if (base::string_to_lower(base::get_file_extension(fn)) == "lua") {
|
||||
Params params;
|
||||
params.set("filename", fullFn.c_str());
|
||||
menuitem = new AppMenuItem(
|
||||
base::get_file_title(fn).c_str(),
|
||||
cmd_run_script,
|
||||
params);
|
||||
}
|
||||
}
|
||||
else if (base::is_directory(fullFn)) {
|
||||
if (fn == "." || fn == "..")
|
||||
continue;
|
||||
|
||||
Menu* submenu = new Menu();
|
||||
loadScriptsSubmenu(submenu, fullFn);
|
||||
|
||||
menuitem = new AppMenuItem(
|
||||
base::get_file_title(fn).c_str());
|
||||
menuitem->setSubmenu(submenu);
|
||||
}
|
||||
if (menuitem)
|
||||
menu->addChild(menuitem);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void AppMenus::initTheme()
|
||||
{
|
||||
updateMenusList();
|
||||
|
@ -77,6 +77,10 @@ namespace app {
|
||||
void createNativeMenus();
|
||||
void createNativeSubmenus(os::Menu* osMenu, const ui::Menu* uiMenu);
|
||||
|
||||
#ifdef ENABLE_SCRIPTING
|
||||
void loadScriptsSubmenu(ui::Menu* menu, const std::string& dir);
|
||||
#endif
|
||||
|
||||
std::unique_ptr<Menu> m_rootMenu;
|
||||
MenuItem* m_recentListMenuitem;
|
||||
MenuItem* m_helpMenuitem;
|
||||
|
Loading…
x
Reference in New Issue
Block a user