1
0
mirror of synced 2025-01-19 01:24:15 +01:00

ux: Display an error message if file picker can't be opened (#748)

* add error message for the file picker

* set a different message for Windows/MacOS

* fix typos

* Moved file dialog error handling to a callback function

Co-authored-by: Nik <werwolv98@gmail.com>
This commit is contained in:
iTrooz_ 2022-09-20 15:47:59 +02:00 committed by GitHub
parent 9656b40d53
commit 3a94be9abb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 144 additions and 7 deletions

View File

@ -75,17 +75,16 @@ namespace hex::fs {
std::fs::path toShortPath(const std::fs::path &path);
enum class DialogMode
{
enum class DialogMode {
Open,
Save,
Folder
};
void setFileBrowserErrorCallback(const std::function<void()> &callback);
bool openFileBrowser(DialogMode mode, const std::vector<nfdfilteritem_t> &validExtensions, const std::function<void(std::fs::path)> &callback, const std::string &defaultPath = {});
enum class ImHexPath
{
enum class ImHexPath {
Patterns,
PatternsInclude,
Magic,

View File

@ -75,6 +75,11 @@ namespace hex::fs {
return result;
}
static std::function<void()> s_fileBrowserErrorCallback;
void setFileBrowserErrorCallback(const std::function<void()> &callback) {
s_fileBrowserErrorCallback = callback;
}
bool openFileBrowser(DialogMode mode, const std::vector<nfdfilteritem_t> &validExtensions, const std::function<void(std::fs::path)> &callback, const std::string &defaultPath) {
NFD::Init();
@ -94,10 +99,15 @@ namespace hex::fs {
hex::unreachable();
}
if (result == NFD_OKAY && outPath != nullptr) {
if (result == NFD_OKAY){
if(outPath != nullptr) {
callback(reinterpret_cast<char8_t*>(outPath));
NFD::FreePath(outPath);
}
} else if (result==NFD_ERROR) {
if (s_fileBrowserErrorCallback != nullptr)
s_fileBrowserErrorCallback();
}
NFD::Quit();

View File

@ -123,6 +123,14 @@ namespace hex::plugin::builtin {
ProviderExtraData::erase(provider);
});
fs::setFileBrowserErrorCallback([]{
#if defined(NFD_PORTAL)
View::showErrorPopup("hex.builtin.popup.error.file_dialog.portal"_lang);
#else
View::showErrorPopup("hex.builtin.popup.error.file_dialog.common"_lang);
#endif
});
}
}

View File

@ -119,6 +119,21 @@ namespace hex::plugin::builtin {
{ "hex.builtin.popup.error.project.save", "Speichern des Projektes fehlgeschlagen!!" },
{ "hex.builtin.popup.error.create", "Erstellen der neuen Datei fehlgeschlagen!" },
{ "hex.builtin.popup.error.task_exception", "Fehler in Task '{}':\n\n{}" },
{ "hex.builtin.popup.error.file_dialog.portal",
"Ein Fehler trat beim öffnen des Dateibrowser auf! Der Grund dafür kann sein, dass dein System kein xdg-desktop-portal Backend korrekt installiert hat.\n"
"\n"
"Auf KDE wird xdg-desktop-portal-kde benötigt.\n"
"Auf Gnome wird xdg-desktop-portal-gnome benötigt.\n"
"Auf wlroots wird xdg-desktop-portal-wlr benötigt.\n"
"Andernfalls kann xdg-desktop-portal-gtk.\n"
"\n"
"Starte dein System neu nach der Installation.\n"
"\n"
"Falls der Dateibrowser immer noch nicht funktionieren sollte, erstelle ein Issue auf https://github.com/WerWolv/ImHex/issues\n"
"\n"
"In der Zwischenzeit können Dateien immer noch geöffnet werden, in dem sie auf das ImHex Fenster gezogen werden."
},
{ "hex.builtin.popup.error.file_dialog.common", "Ein Fehler trat beim öffnen des Dateibrowser auf!" },
{ "hex.builtin.menu.file", "Datei" },
{ "hex.builtin.file.open_file", "Datei öffnen..." },

View File

@ -120,6 +120,21 @@ namespace hex::plugin::builtin {
{ "hex.builtin.popup.error.project.load", "Failed to load project!" },
{ "hex.builtin.popup.error.project.save", "Failed to save project!" },
{ "hex.builtin.popup.error.task_exception", "Exception thrown in Task '{}':\n\n{}" },
{ "hex.builtin.popup.error.file_dialog.portal",
"There was an error while opening the file browser. This might be caused by your system not having a xdg-desktop-portal backend installed correctly.\n"
"\n"
"On KDE, it's xdg-desktop-portal-kde.\n"
"On Gnome it's xdg-desktop-portal-gnome.\n"
"On wlroots it's xdg-desktop-portal-wlr.\n"
"Otherwise, you can try to use xdg-desktop-portal-gtk.\n"
"\n"
"Reboot your system after installing it.\n"
"\n"
"If the file browser still doesn't work after this, submit an issue at https://github.com/WerWolv/ImHex/issues\n"
"\n"
"In the meantime files can still be opened by dragging them onto the ImHex window!"
},
{ "hex.builtin.popup.error.file_dialog.common", "An error occurred while opening the file browser!" },
{ "hex.builtin.menu.file", "File" },
{ "hex.builtin.menu.file.create_file", "New File..." },

View File

@ -119,6 +119,21 @@ namespace hex::plugin::builtin {
//{ "hex.builtin.popup.error.project.load", "Failed to load project!" },
//{ "hex.builtin.popup.error.project.save", "Failed to save project!" },
//{ "hex.builtin.popup.error.task_exception", "Exception thrown in Task '{}':\n\n{}" },
//{ "hex.builtin.popup.error.file_dialog.portal",
// "There was an error while opening the file browser. This might be caused by your system not having a xdg-desktop-portal backend installed correctly.\n"
// "\n"
// "On KDE, it's xdg-desktop-portal-kde.\n"
// "On Gnome it's xdg-desktop-portal-gnome.\n"
// "On wlroots it's xdg-desktop-portal-wlr.\n"
// "Otherwise, you can try to use xdg-desktop-portal-gtk.\n"
// "\n"
// "Reboot your system after installing it.\n"
// "\n"
// "If the file browser still doesn't work after this, submit an issue at https://github.com/WerWolv/ImHex/issues\n"
// "\n"
// "In the meantime files can still be opened by dragging them onto the ImHex window!"
//},
//{ "hex.builtin.popup.error.file_dialog.common", "An error occurred while opening the file browser!" },
{ "hex.builtin.menu.file", "File" },
//{ "hex.builtin.menu.file.create_file", "New File..." },

View File

@ -119,6 +119,21 @@ namespace hex::plugin::builtin {
//{ "hex.builtin.popup.error.project.load", "Failed to load project!" },
//{ "hex.builtin.popup.error.project.save", "Failed to save project!" },
//{ "hex.builtin.popup.error.task_exception", "Exception thrown in Task '{}':\n\n{}" },
//{ "hex.builtin.popup.error.file_dialog.portal",
// "There was an error while opening the file browser. This might be caused by your system not having a xdg-desktop-portal backend installed correctly.\n"
// "\n"
// "On KDE, it's xdg-desktop-portal-kde.\n"
// "On Gnome it's xdg-desktop-portal-gnome.\n"
// "On wlroots it's xdg-desktop-portal-wlr.\n"
// "Otherwise, you can try to use xdg-desktop-portal-gtk.\n"
// "\n"
// "Reboot your system after installing it.\n"
// "\n"
// "If the file browser still doesn't work after this, submit an issue at https://github.com/WerWolv/ImHex/issues\n"
// "\n"
// "In the meantime files can still be opened by dragging them onto the ImHex window!"
//},
//{ "hex.builtin.popup.error.file_dialog.common", "An error occurred while opening the file browser!" },
{ "hex.builtin.menu.file", "ファイル" },
//{ "hex.builtin.menu.file.create_file", "New File..." },

View File

@ -119,6 +119,21 @@ namespace hex::plugin::builtin {
//{ "hex.builtin.popup.error.project.load", "Failed to load project!" },
//{ "hex.builtin.popup.error.project.save", "Failed to save project!" },
//{ "hex.builtin.popup.error.task_exception", "Exception thrown in Task '{}':\n\n{}" },
//{ "hex.builtin.popup.error.file_dialog.portal",
// "There was an error while opening the file browser. This might be caused by your system not having a xdg-desktop-portal backend installed correctly.\n"
// "\n"
// "On KDE, it's xdg-desktop-portal-kde.\n"
// "On Gnome it's xdg-desktop-portal-gnome.\n"
// "On wlroots it's xdg-desktop-portal-wlr.\n"
// "Otherwise, you can try to use xdg-desktop-portal-gtk.\n"
// "\n"
// "Reboot your system after installing it.\n"
// "\n"
// "If the file browser still doesn't work after this, submit an issue at https://github.com/WerWolv/ImHex/issues\n"
// "\n"
// "In the meantime files can still be opened by dragging them onto the ImHex window!"
//},
//{ "hex.builtin.popup.error.file_dialog.common", "An error occurred while opening the file browser!" },
{ "hex.builtin.menu.file", "파일" },
{ "hex.builtin.menu.file.create_file", "새 파일..." },

View File

@ -119,6 +119,21 @@ namespace hex::plugin::builtin {
//{ "hex.builtin.popup.error.project.load", "Failed to load project!" },
//{ "hex.builtin.popup.error.project.save", "Failed to save project!" },
//{ "hex.builtin.popup.error.task_exception", "Exception thrown in Task '{}':\n\n{}" },
//{ "hex.builtin.popup.error.file_dialog.portal",
// "There was an error while opening the file browser. This might be caused by your system not having a xdg-desktop-portal backend installed correctly.\n"
// "\n"
// "On KDE, it's xdg-desktop-portal-kde.\n"
// "On Gnome it's xdg-desktop-portal-gnome.\n"
// "On wlroots it's xdg-desktop-portal-wlr.\n"
// "Otherwise, you can try to use xdg-desktop-portal-gtk.\n"
// "\n"
// "Reboot your system after installing it.\n"
// "\n"
// "If the file browser still doesn't work after this, submit an issue at https://github.com/WerWolv/ImHex/issues\n"
// "\n"
// "In the meantime files can still be opened by dragging them onto the ImHex window!"
//},
//{ "hex.builtin.popup.error.file_dialog.common", "An error occurred while opening the file browser!" },
{ "hex.builtin.menu.file", "File" },
//{ "hex.builtin.menu.file.create_file", "New File..." },

View File

@ -119,6 +119,21 @@ namespace hex::plugin::builtin {
//{ "hex.builtin.popup.error.project.load", "Failed to load project!" },
//{ "hex.builtin.popup.error.project.save", "Failed to save project!" },
{ "hex.builtin.popup.error.task_exception", "任务 '{}' 异常:\n\n{}" },
//{ "hex.builtin.popup.error.file_dialog.portal",
// "There was an error while opening the file browser. This might be caused by your system not having a xdg-desktop-portal backend installed correctly.\n"
// "\n"
// "On KDE, it's xdg-desktop-portal-kde.\n"
// "On Gnome it's xdg-desktop-portal-gnome.\n"
// "On wlroots it's xdg-desktop-portal-wlr.\n"
// "Otherwise, you can try to use xdg-desktop-portal-gtk.\n"
// "\n"
// "Reboot your system after installing it.\n"
// "\n"
// "If the file browser still doesn't work after this, submit an issue at https://github.com/WerWolv/ImHex/issues\n"
// "\n"
// "In the meantime files can still be opened by dragging them onto the ImHex window!"
//},
//{ "hex.builtin.popup.error.file_dialog.common", "An error occurred while opening the file browser!" },
{ "hex.builtin.menu.file", "文件" },
{ "hex.builtin.menu.file.create_file", "新建文件..." },

View File

@ -119,6 +119,21 @@ namespace hex::plugin::builtin {
//{ "hex.builtin.popup.error.project.load", "Failed to load project!" },
//{ "hex.builtin.popup.error.project.save", "Failed to save project!" },
//{ "hex.builtin.popup.error.task_exception", "Exception thrown in Task '{}':\n\n{}" },
//{ "hex.builtin.popup.error.file_dialog.portal",
// "There was an error while opening the file browser. This might be caused by your system not having a xdg-desktop-portal backend installed correctly.\n"
// "\n"
// "On KDE, it's xdg-desktop-portal-kde.\n"
// "On Gnome it's xdg-desktop-portal-gnome.\n"
// "On wlroots it's xdg-desktop-portal-wlr.\n"
// "Otherwise, you can try to use xdg-desktop-portal-gtk.\n"
// "\n"
// "Reboot your system after installing it.\n"
// "\n"
// "If the file browser still doesn't work after this, submit an issue at https://github.com/WerWolv/ImHex/issues\n"
// "\n"
// "In the meantime files can still be opened by dragging them onto the ImHex window!"
//},
//{ "hex.builtin.popup.error.file_dialog.common", "An error occurred while opening the file browser!" },
{ "hex.builtin.menu.file", "檔案" },
//{ "hex.builtin.menu.file.create_file", "New File..." },