mirror of
				https://github.com/Zelda64Recomp/Zelda64Recomp.git
				synced 2025-10-30 08:03:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			56 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "zelda_support.h"
 | |
| #include <SDL.h>
 | |
| #include "nfd.h"
 | |
| #include "RmlUi/Core.h"
 | |
| 
 | |
| namespace zelda64 {
 | |
|     // MARK: - Internal Helpers
 | |
|     void perform_file_dialog_operation(const std::function<void(bool, const std::filesystem::path&)>& callback) {
 | |
|         nfdnchar_t* native_path = nullptr;
 | |
|         nfdresult_t result = NFD_OpenDialogN(&native_path, nullptr, 0, nullptr);
 | |
| 
 | |
|         bool success = (result == NFD_OKAY);
 | |
|         std::filesystem::path path;
 | |
| 
 | |
|         if (success) {
 | |
|             path = std::filesystem::path{native_path};
 | |
|             NFD_FreePathN(native_path);
 | |
|         }
 | |
| 
 | |
|         callback(success, path);
 | |
|     }
 | |
| 
 | |
|     // MARK: - Public API
 | |
| 
 | |
|     std::filesystem::path get_asset_path(const char* asset) {
 | |
|         std::filesystem::path base_path = "";
 | |
| #if defined(__APPLE__)
 | |
|         base_path = get_bundle_resource_directory();
 | |
| #endif
 | |
| 
 | |
|         return base_path / "assets" / asset;
 | |
|     }
 | |
| 
 | |
|     void open_file_dialog(std::function<void(bool success, const std::filesystem::path& path)> callback) {
 | |
| #ifdef __APPLE__
 | |
|         dispatch_on_ui_thread([callback]() {
 | |
|             perform_file_dialog_operation(callback);
 | |
|         });
 | |
| #else
 | |
|         perform_file_dialog_operation(callback);
 | |
| #endif
 | |
|     }
 | |
| 
 | |
|     void show_error_message_box(const char *title, const char *message) {
 | |
| #ifdef __APPLE__
 | |
|     std::string title_copy(title);
 | |
|     std::string message_copy(message);
 | |
| 
 | |
|     dispatch_on_ui_thread([title_copy, message_copy] {
 | |
|         SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, title_copy.c_str(), message_copy.c_str(), nullptr);
 | |
|     });
 | |
| #else
 | |
|         SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, title, message, nullptr);
 | |
| #endif
 | |
|     }
 | |
| }
 | 
