22 const char* vFilters,
const std::vector<std::string>& extensions,
23 const std::filesystem::path& startPath,
24 size_t id, [[maybe_unused]]
const std::string& nameId,
25 const char* buttonText)
29 if (ImGui::InputText(
"Filepath", &path))
31 LOG_DEBUG(
"{}: Filepath changed to {}", nameId, path);
34 if (ImGui::IsItemHovered())
36 ImGui::SetTooltip(
"%s", path.c_str());
39 std::string saveFileDialogKey = fmt::format(
"Save File ({})",
id);
40 if (ImGui::Button(buttonText))
42 ImGuiFileDialog::Instance()->OpenDialog(saveFileDialogKey, vName, vFilters, (startPath /
".").
string(), 1,
nullptr, ImGuiFileDialogFlags_ConfirmOverwrite);
43 for (
const auto& ext : extensions)
45 ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtention, ext.c_str(), ImVec4(0.0F, 1.0F, 0.0F, 0.9F));
49 if (ImGuiFileDialog::Instance()->Display(saveFileDialogKey, ImGuiWindowFlags_NoCollapse, ImVec2(600, 500)))
51 if (ImGuiFileDialog::Instance()->IsOk())
53 path = ImGuiFileDialog::Instance()->GetFilePathName();
54 if (path.find(startPath.string()) != std::string::npos)
56 path = path.substr(startPath.string().size() + 1);
58 LOG_DEBUG(
"{}: Selected file: {}", nameId, path);
62 ImGuiFileDialog::Instance()->Close();
69 const char* vFilters,
const std::vector<std::string>& extensions,
70 const std::filesystem::path& startPath,
71 size_t id, [[maybe_unused]]
const std::string& nameId,
72 const char* buttonText)
76 if (ImGui::InputText(fmt::format(
"Filepath##{}",
id).c_str(), &path))
78 LOG_DEBUG(
"{}: Filepath changed to {}", nameId, path);
81 if (ImGui::IsItemHovered())
83 ImGui::SetTooltip(
"%s", path.c_str());
86 std::string openFileDialogKey = fmt::format(
"Select File ({})",
id);
87 if (ImGui::Button(fmt::format(
"{}##{}", buttonText,
id).c_str()))
89 ImGuiFileDialog::Instance()->OpenDialog(openFileDialogKey, vName, vFilters, (startPath /
".").
string());
90 for (
const auto& ext : extensions)
92 ImGuiFileDialog::Instance()->SetFileStyle(ext.starts_with(
'(') ? IGFD_FileStyleByFullName : IGFD_FileStyleByExtention, ext.c_str(), ImVec4(0.0F, 1.0F, 0.0F, 0.9F));
96 if (ImGuiFileDialog::Instance()->Display(openFileDialogKey, ImGuiWindowFlags_NoCollapse, ImVec2(600, 500)))
98 if (ImGuiFileDialog::Instance()->IsOk())
100 if (!ImGuiFileDialog::Instance()->GetSelection().empty())
102 if (std::filesystem::exists(ImGuiFileDialog::Instance()->GetSelection().begin()->second))
104 path = ImGuiFileDialog::Instance()->GetSelection().begin()->second;
105 if (path.find(startPath.string()) != std::string::npos)
107 path = path.substr(startPath.string().size() + 1);
109 LOG_DEBUG(
"{}: Selected file: {}", nameId, path);
114 LOG_WARN(
"{}: Selected path does not exist: {}", nameId, ImGuiFileDialog::Instance()->GetSelection().begin()->second);
119 LOG_WARN(
"{}: FileDialog is okay, but nothing selected", nameId);
123 ImGuiFileDialog::Instance()->Close();