5#include <ImGuiFileDialog/ImGuiFileDialog.h>
9 std::string WebFileDialog::ConvertFilters(
const std::vector<std::string>& filters)
const
12 for (
const auto& f : filters)
14 totalSize += f.length();
17 std::string filterString;
18 filterString.reserve(totalSize);
20 for (
size_t i = 0; i < filters.size(); ++i)
22 filterString += filters[i].substr(1, filters[i].length() - 1);
23 if (i < filters.size() - 1)
33 void WebFileDialog::OpenFile(
const std::string& title,
const std::string& defaultPathOrFile,
const std::vector<std::string>& filters,
const std::string& filterDescription,
bool allowMultiple)
35 IGFD::FileDialogConfig config;
36 config.path = defaultPathOrFile;
37 config.flags = ImGuiFileDialogFlags_Modal;
39 ImGuiFileDialog::Instance()->OpenDialog(title, title, ConvertFilters(filters).c_str(), config);
40 SetWaitingForFilePath();
43 void WebFileDialog::SaveFile(
const std::string& title,
const std::string& defaultPathOrFile,
const std::vector<std::string>& filters,
const std::string& filterDescription)
45 IGFD::FileDialogConfig config;
46 config.path = defaultPathOrFile;
47 config.flags = ImGuiFileDialogFlags_Modal;
49 ImGuiFileDialog::Instance()->OpenDialog(title, title, ConvertFilters(filters).c_str(), config);
50 SetWaitingForFilePath();
53 void WebFileDialog::SelectFolder(
const std::string& title,
const std::string& defaultPath)
55 IGFD::FileDialogConfig config;
56 config.path = defaultPath;
57 config.flags = ImGuiFileDialogFlags_Modal;
59 ImGuiFileDialog::Instance()->OpenDialog(title, title,
"", config);
60 SetWaitingForDirPath();
63 bool WebFileDialog::DisplayAndGetResult(std::string& outPath)
66 if (ImGuiFileDialog::Instance()->Display(m_titleCache, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_Modal, ImVec2(600, 400))) {
67 if (ImGuiFileDialog::Instance()->IsOk()) {
68 if (m_waitiingForFilePath)
70 SetResult(ImGuiFileDialog::Instance()->GetFilePathName());
72 else if (m_waitingForDirPath)
74 SetResult(ImGuiFileDialog::Instance()->GetCurrentPath());
78 ImGuiFileDialog::Instance()->Close();
85 outPath = ConsumeResult();
91 void WebFileDialog::SetWaitingForDirPath()
94 m_waitingForDirPath =
true;
95 m_waitiingForFilePath =
false;
98 void WebFileDialog::SetWaitingForFilePath()
101 m_waitingForDirPath =
false;
102 m_waitiingForFilePath =
true;