3#include <imgui/imgui.h>
4#include <imgui/imgui_internal.h>
16 layouts_directory_ = layouts_directory;
19 fs::create_directories(layouts_directory_, err);
21 load_presets_from_disk();
27 const char* ini_data = ImGui::SaveIniSettingsToMemory(&ini_size);
28 if(!ini_data || ini_size == 0)
34 std::string data(ini_data, ini_size);
35 presets_[
name] = data;
36 save_preset_to_disk(
name, data);
43 auto it = presets_.find(
name);
44 if(it == presets_.end())
50 ImGui::ClearIniSettings();
51 ImGui::LoadIniSettingsFromMemory(it->second.c_str(), it->second.size());
52 ImGui::MarkIniSettingsDirty();
59 auto it = presets_.find(
name);
60 if(it == presets_.end())
66 delete_preset_from_disk(
name);
73 ImGui::ClearIniSettings();
77 ImGui::MarkIniSettingsDirty();
84 std::vector<std::string> names;
85 names.reserve(presets_.size());
86 for(
const auto& [
name, data] : presets_)
88 names.push_back(
name);
95 return presets_.contains(
name);
100 return layouts_directory_;
103void layout_manager::load_presets_from_disk()
106 if(!fs::exists(layouts_directory_, err))
111 for(
const auto&
entry : fs::directory_iterator(layouts_directory_, err))
113 if(!
entry.is_regular_file())
118 const auto& path =
entry.path();
119 if(path.extension() !=
".ini")
124 std::ifstream file(path.string(), std::ios::binary);
130 std::ostringstream ss;
132 std::string data = ss.str();
136 auto name = path.stem().string();
137 presets_[
name] = std::move(data);
142void layout_manager::save_preset_to_disk(
const std::string&
name,
const std::string& ini_data)
144 auto path = get_preset_path(
name);
146 std::ofstream file(path.string(), std::ios::binary | std::ios::trunc);
153 file.write(ini_data.data(), std::streamsize(ini_data.size()));
156void layout_manager::delete_preset_from_disk(
const std::string&
name)
158 auto path = get_preset_path(
name);
160 fs::remove(path, err);
163auto layout_manager::get_preset_path(
const std::string&
name)
const -> fs::path
165 return layouts_directory_ / (
name +
".ini");
void save_preset(const std::string &name)
auto has_preset(const std::string &name) const -> bool
void init(const fs::path &layouts_directory)
auto get_preset_names() const -> std::vector< std::string >
void load_preset(const std::string &name)
void delete_preset(const std::string &name)
auto get_layouts_directory() const -> const fs::path &
#define APPLOG_WARNING(...)
Hash specialization for batch_key to enable use in std::unordered_map.