Skip to content

Commit

Permalink
weird stuff. Idk
Browse files Browse the repository at this point in the history
  • Loading branch information
MatusGuy committed May 12, 2024
1 parent 8795e8b commit 50cada4
Show file tree
Hide file tree
Showing 13 changed files with 55 additions and 64 deletions.
10 changes: 3 additions & 7 deletions src/editor/object_option.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -403,15 +403,11 @@ ScriptObjectOption::add_to_menu(Menu& menu) const
FileObjectOption::FileObjectOption(const std::string& text, std::string* pointer,
std::optional<std::string> default_value,
const std::string& key,
std::vector<std::string> filter,
const std::string& basedir,
bool path_relative_to_basedir,
FileSystemMenu::MenuParams& params,
unsigned int flags) :
ObjectOption(text, key, flags, pointer),
m_default_value(std::move(default_value)),
m_filter(std::move(filter)),
m_basedir(basedir),
m_path_relative_to_basedir(path_relative_to_basedir)
m_params(params)
{
}

Expand Down Expand Up @@ -440,7 +436,7 @@ FileObjectOption::to_string() const
void
FileObjectOption::add_to_menu(Menu& menu) const
{
menu.add_file(get_text(), m_value_pointer, m_filter, m_basedir, m_path_relative_to_basedir);
menu.add_file(get_text(), m_params);
}

ColorObjectOption::ColorObjectOption(const std::string& text, Color* pointer, const std::string& key,
Expand Down
6 changes: 3 additions & 3 deletions src/editor/object_option.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
#include "object/path_walker.hpp"
#include "video/color.hpp"

struct FileSystemMenu::MenuParams;

enum ObjectOptionFlag {
/** Set if the value is a hidden implementation detail that
shouldn't be exposed to the user */
Expand Down Expand Up @@ -283,9 +285,7 @@ class FileObjectOption final : public ObjectOption<std::string>
FileObjectOption(const std::string& text, std::string* pointer,
std::optional<std::string> default_value,
const std::string& key,
std::vector<std::string> filter,
const std::string& basedir,
bool path_relative_to_basedir,
FileSystemMenu::MenuParams& params,
unsigned int flags);

virtual void save(Writer& write) const override;
Expand Down
5 changes: 3 additions & 2 deletions src/editor/particle_editor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -372,17 +372,18 @@ ParticleEditor::reset_texture_ui()
auto chg_texture_btn = std::make_unique<ControlButton>(_("Change texture..."));
chg_texture_btn.get()->m_on_change = std::function<void()>([this](){
const std::vector<std::string>& filter = {".jpg", ".png", ".surface"};
MenuManager::instance().push_menu(std::make_unique<FileSystemMenu>(
MenuManager::instance().push_menu(std::make_unique<FileSystemMenu>({
nullptr,
filter,
{},
"/",
false,
[this](const std::string& new_filename) {
(m_particles->m_textures.begin() + m_texture_current)->texture = Surface::from_file(new_filename);
m_particles->reinit_textures();
this->push_version();
}
));
}));
});
chg_texture_btn.get()->set_rect(Rectf(25.f, 420, 325.f, 440));
m_controls_textures.push_back(std::move(chg_texture_btn));
Expand Down
10 changes: 4 additions & 6 deletions src/gui/menu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -282,15 +282,13 @@ Menu::add_string_select(int id, const std::string& text, int default_item, const
}

ItemAction&
Menu::add_file(const std::string& text, std::string* input, const std::vector<std::string>& extensions,
const std::string& basedir, bool path_relative_to_basedir,
const std::function<void (MenuItem&)>& item_processor, int id)
Menu::add_file(const std::string& text, FileSystemMenu::MenuParams& params, int id)
{
auto item = std::make_unique<ItemAction>(text, id,
[input, extensions, basedir, path_relative_to_basedir, item_processor]()
[params]()
{
MenuManager::instance().push_menu(std::make_unique<FileSystemMenu>(input, extensions, basedir,
path_relative_to_basedir, nullptr, item_processor));
params.callback = nullptr;
MenuManager::instance().push_menu(std::make_unique<FileSystemMenu>(params));
});
auto item_ptr = item.get();
add_item(std::move(item));
Expand Down
6 changes: 3 additions & 3 deletions src/gui/menu.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ class ItemImages;
class MenuItem;
class PathObject;

struct FileSystemMenu::MenuParams;

class Menu
{
public:
Expand Down Expand Up @@ -94,9 +96,7 @@ class Menu
ItemScriptLine& add_script_line(std::string* input, int id = -1);
ItemIntField& add_intfield(const std::string& text, int* input, int id = -1, bool positive = false);
ItemFloatField& add_floatfield(const std::string& text, float* input, int id = -1, bool positive = false);
ItemAction& add_file(const std::string& text, std::string* input, const std::vector<std::string>& extensions,
const std::string& basedir, bool path_relative_to_basedir,
const std::function<void (MenuItem&)>& item_processor = {}, int id = -1);
ItemAction& add_file(const std::string& text, FileSystemMenu::MenuParams& params, int id = -1);

ItemColor& add_color(const std::string& text, Color* color, int id = -1);
ItemColorDisplay& add_color_display(Color* color, int id = -1);
Expand Down
37 changes: 15 additions & 22 deletions src/gui/menu_filesystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,20 +28,13 @@
#include "util/gettext.hpp"
#include "util/string_util.hpp"

FileSystemMenu::FileSystemMenu(std::string* filename, const std::vector<std::string>& extensions,
const std::string& basedir, bool path_relative_to_basedir, std::function<void(std::string)> callback,
const std::function<void (MenuItem&)>& item_processor) :
m_filename(filename),
FileSystemMenu::FileSystemMenu(MenuParams& params) :
m_params(params),
// when a basedir is given, 'filename' is relative to basedir, so
// it's useless as a starting point
m_directory(basedir.empty() ? (filename ? FileSystem::dirname(*filename) : "/") : basedir),
m_extensions(extensions),
m_basedir(basedir),
m_directory(m_params.basedir.empty() ? (m_params.filename ? FileSystem::dirname(*m_params.filename) : "/") : m_params.basedir),
m_directories(),
m_files(),
m_path_relative_to_basedir(path_relative_to_basedir),
m_callback(std::move(callback)),
m_item_processor(std::move(item_processor))
m_files()
{
AddonManager::current()->unmount_old_addons();

Expand Down Expand Up @@ -104,12 +97,12 @@ FileSystemMenu::refresh_items()
item_id++;
}

const bool in_basedir = m_directory == FileSystem::normalize(m_basedir);
const bool in_basedir = m_directory == FileSystem::normalize(m_params.basedir);
for (const auto& item : m_files)
{
MenuItem& menu_item = add_entry(item_id, item);
if (in_basedir && m_item_processor)
m_item_processor(menu_item);
if (in_basedir && m_params.item_processor)
m_params.item_processor(menu_item);

item_id++;
}
Expand All @@ -128,10 +121,10 @@ FileSystemMenu::refresh_items()
bool
FileSystemMenu::has_right_suffix(const std::string& file) const
{
if (m_extensions.empty())
if (m_params.extensions.empty())
return true;

for (const auto& extension : m_extensions) {
for (const auto& extension : m_params.extensions) {
if (StringUtil::has_suffix(file, extension))
{
return true;
Expand All @@ -153,15 +146,15 @@ FileSystemMenu::menu_action(MenuItem& item)
if (id < m_files.size()) {
std::string new_filename = FileSystem::join(m_directory, m_files[id]);

if (!m_basedir.empty() && m_path_relative_to_basedir) {
new_filename = FileSystem::relpath(new_filename, m_basedir);
if (!m_params.basedir.empty() && m_params.path_relative_to_basedir) {
new_filename = FileSystem::relpath(new_filename, m_params.basedir);
}

if (m_filename)
*m_filename = new_filename;
if (m_params.filename)
*m_params.filename = new_filename;

if (m_callback)
m_callback(new_filename);
if (m_params.callback)
m_params.callback(new_filename);

MenuManager::instance().pop_menu();
} else {
Expand Down
22 changes: 13 additions & 9 deletions src/gui/menu_filesystem.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,19 @@

class FileSystemMenu final : public Menu
{
struct MenuParams
{
std::string* filename;
const std::vector<std::string>& extensions;
const std::vector<std::string>& additional_extensions;
const std::string& basedir;
bool path_relative_to_basedir;
const std::function<void(std::string)> callback = nullptr;
const std::function<void (MenuItem&)>& item_processor = {};
};

public:
FileSystemMenu(std::string* filename, const std::vector<std::string>& extensions,
const std::string& basedir, bool path_relative_to_basedir, const std::function<void(std::string)> callback = nullptr,
const std::function<void (MenuItem&)>& item_processor = {});
FileSystemMenu(MenuParams& params);
~FileSystemMenu() override;

void menu_action(MenuItem& item) override;
Expand All @@ -34,15 +43,10 @@ class FileSystemMenu final : public Menu
bool has_right_suffix(const std::string& file) const;

private:
std::string* m_filename;
MenuParams& m_params;
std::string m_directory;
std::vector<std::string> m_extensions;
std::string m_basedir;
std::vector<std::string> m_directories;
std::vector<std::string> m_files;
bool m_path_relative_to_basedir;
std::function<void(std::string)> m_callback;
std::function<void (MenuItem&)> m_item_processor;

private:
FileSystemMenu(const FileSystemMenu&) = delete;
Expand Down
4 changes: 2 additions & 2 deletions src/supertux/menu/editor_converters_menu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ EditorConvertersMenu::EditorConvertersMenu() :
add_label(_("Convert Tiles"));
add_hl();

add_file(_("Select Tile Conversion File"), &m_tile_conversion_file, { "sttc" }, "images/converters", false,
add_file(_("Select Tile Conversion File"), {&m_tile_conversion_file, { ".sttc" }, {}, "images/converters", false,
[this](MenuItem& item) {
auto it = m_converters.find(item.get_text());
if (it == m_converters.end())
Expand All @@ -70,7 +70,7 @@ EditorConvertersMenu::EditorConvertersMenu() :
item.set_text("\"" + it->second.title + "\"");
item.set_help(it->second.description + (it->second.author.empty() ? "" :
"\n\n" + fmt::format(fmt::runtime(_("By: {}")), it->second.author)));
});
}});

add_entry(MNID_CONVERT_TILES, _("Convert Tiles By File"))
.set_help(_("Convert all tiles in the current level by a file, specified above."));
Expand Down
2 changes: 1 addition & 1 deletion src/supertux/menu/editor_level_menu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ EditorLevelMenu::EditorLevelMenu() :
add_textfield(_("Contact"), &(level->m_contact));
add_textfield(_("License"), &(level->m_license));
add_textfield(_("Level Note"), &(level->m_note));
add_file(_("Tileset"), &(level->m_tileset), std::vector<std::string>(1, ".strf"), {}, true);
add_file(_("Tileset"), {&(level->m_tileset), { ".strf" }, {} ,"", true});

if (!is_worldmap) {
add_floatfield(_("Target Time"), &(level->m_target_time));
Expand Down
2 changes: 1 addition & 1 deletion src/supertux/menu/editor_levelset_menu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ EditorLevelsetMenu::initialize()
add_textfield(_("Name"), &m_world->m_title);
add_textfield(_("Description"), &m_world->m_description);
add_string_select(1, _("Type"), &m_levelset_type, {_("Worldmap"), _("Levelset")});
add_file(_("Title Screen Level"), &m_world->m_title_level, { ".stl" }, m_world->m_basedir, false)
add_file(_("Title Screen Level"), {&m_world->m_title_level, { ".stl" }, {}, m_world->m_basedir, false})
.set_help(_("A level to be used for the title screen, after exiting the world."));
add_hl();
add_back(_("OK"));
Expand Down
5 changes: 3 additions & 2 deletions src/supertux/menu/particle_editor_menu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,17 +101,18 @@ ParticleEditorMenu::menu_action(MenuItem& item)
//MenuManager::instance().set_menu(MenuStorage::PARTICLE_EDITOR_OPEN);
{
const std::vector<std::string>& filter = {".stcp"};
MenuManager::instance().push_menu(std::make_unique<FileSystemMenu>(
MenuManager::instance().push_menu(std::make_unique<FileSystemMenu>({
&ParticleEditor::current()->m_filename,
filter,
{},
"/particles",
true,
[](const std::string& new_filename) {
ParticleEditor::current()->open("/particles/" +
ParticleEditor::current()->m_filename);
MenuManager::instance().clear_menu_stack();
}
));
}));
}
break;

Expand Down
4 changes: 1 addition & 3 deletions src/supertux/menu/particle_editor_open.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,7 @@ ParticleEditorOpen::ParticleEditorOpen() :

add_hl();

std::vector<std::string> extensions;
extensions.push_back("stcp");
add_file(_("File"), &m_filename, extensions, "/particles/", true);
add_file(_("File"), {&m_filename, { ".stcp" }, {}, "/particles/", true});
add_entry(MNID_OPEN, _("Open"));

add_hl();
Expand Down
6 changes: 3 additions & 3 deletions src/supertux/menu/web_asset_menu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,13 +68,13 @@ WebAssetMenu::menu_action(MenuItem& item)
{
std::vector<std::string> empty_vec;
MenuManager::instance().push_menu(
std::make_unique<FileSystemMenu>(nullptr, empty_vec, "", false, [](const std::string& file) {
std::make_unique<FileSystemMenu>({nullptr, empty_vec, empty_vec, "", false, [](const std::string& file) {
std::string fullpath(std::string(PHYSFS_getRealDir(file.c_str())) + "/" + file);
FileSystem::open_path(fullpath);
})
}})
);
}
break;
}

default:
break;
Expand Down

0 comments on commit 50cada4

Please sign in to comment.