| 2895 | } |
| 2896 | |
| 2897 | bool UI::ShowSaveFileDialog(String& filename) { |
| 2898 | // Use portable-file-dialogs for cross-platform save dialog |
| 2899 | try { |
| 2900 | auto dialog = pfd::save_file( |
| 2901 | "Save Scene File", // title |
| 2902 | WORKING_FOLDER_FULL, // initial directory (like open dialog) |
| 2903 | { |
| 2904 | "OpenMVS Scene Files", "*.mvs", |
| 2905 | "PLY Mesh / Point Cloud Files", "*.ply", |
| 2906 | "GLTF Mesh / Point Cloud Files", "*.gltf", |
| 2907 | "GLB Mesh / Point Cloud Files", "*.glb", |
| 2908 | "OBJ Mesh Files", "*.obj", |
| 2909 | "All Files", "*" |
| 2910 | }, // filters |
| 2911 | pfd::opt::none // options |
| 2912 | ); |
| 2913 | |
| 2914 | // Get the result - save_file returns a string directly, not a vector |
| 2915 | auto result = dialog.result(); |
| 2916 | if (!result.empty()) { |
| 2917 | filename = result; |
| 2918 | return true; |
| 2919 | } |
| 2920 | } catch (const std::exception& e) { |
| 2921 | DEBUG("File dialog error: %s", e.what()); |
| 2922 | } |
| 2923 | return false; |
| 2924 | } |
| 2925 | |
| 2926 | bool UI::ShowSaveImageDialog(String& filename) { |
| 2927 | try { |
no test coverage detected