Make File Dialogs less hacky

This commit is contained in:
WerWolv
2021-01-27 00:44:10 +01:00
parent ab2458bdf4
commit 8990fad85a
8 changed files with 119 additions and 97 deletions

View File

@@ -18,6 +18,12 @@ namespace hex {
std::string SharedData::errorPopupMessage;
std::list<ImHexApi::Bookmarks::Entry> SharedData::bookmarkEntries;
imgui_addons::ImGuiFileBrowser SharedData::fileBrowser;
imgui_addons::ImGuiFileBrowser::DialogMode SharedData::fileBrowserDialogMode;
std::string SharedData::fileBrowserTitle;
std::string SharedData::fileBrowserValidExtensions;
std::function<void(std::string)> SharedData::fileBrowserCallback;
int SharedData::mainArgc;
char **SharedData::mainArgv;

View File

@@ -24,6 +24,17 @@ namespace hex {
return EventManager::post(eventType, userData);
}
void View::openFileBrowser(std::string title, imgui_addons::ImGuiFileBrowser::DialogMode mode, std::string validExtensions, const std::function<void(std::string)> &callback) {
SharedData::fileBrowserTitle = title;
SharedData::fileBrowserDialogMode = mode;
SharedData::fileBrowserValidExtensions = std::move(validExtensions);
SharedData::fileBrowserCallback = callback;
View::doLater([title]{
ImGui::OpenPopup(title.c_str());
});
}
void View::drawCommonInterfaces() {
if (ImGui::BeginPopupModal("Error", nullptr, ImGuiWindowFlags_AlwaysAutoResize)) {
ImGui::NewLine();
@@ -38,6 +49,11 @@ namespace hex {
ImGui::CloseCurrentPopup();
ImGui::EndPopup();
}
if (SharedData::fileBrowser.showFileDialog(SharedData::fileBrowserTitle, SharedData::fileBrowserDialogMode, ImVec2(0, 0), SharedData::fileBrowserValidExtensions)) {
SharedData::fileBrowserCallback(SharedData::fileBrowser.selected_path);
SharedData::fileBrowserTitle = "";
}
}
void View::showErrorPopup(std::string_view errorMessage) {