diff --git a/src/app/core/platform/file_dialog.h b/src/app/core/platform/file_dialog.h index 45725bc9..7a69d0a0 100644 --- a/src/app/core/platform/file_dialog.h +++ b/src/app/core/platform/file_dialog.h @@ -43,10 +43,16 @@ class FileDialogWrapper { #elif defined(__APPLE__) #include +#include class FileDialogWrapper { public: static std::string ShowOpenFileDialog(); + static std::string ShowOpenFolderDialog(); + static std::vector GetSubdirectoriesInFolder( + const std::string& folder_path); + static std::vector GetFilesInFolder( + const std::string& folder_path); }; #elif defined(__linux__) diff --git a/src/app/core/platform/file_dialog.mm b/src/app/core/platform/file_dialog.mm index 91c3581d..21dca047 100644 --- a/src/app/core/platform/file_dialog.mm +++ b/src/app/core/platform/file_dialog.mm @@ -1,4 +1,8 @@ #import + +#include +#include + #include "app/core/platform/file_dialog.h" std::string FileDialogWrapper::ShowOpenFileDialog() { @@ -15,3 +19,54 @@ std::string FileDialogWrapper::ShowOpenFileDialog() { return ""; } + +std::string FileDialogWrapper::ShowOpenFolderDialog() { + NSOpenPanel* openPanel = [NSOpenPanel openPanel]; + [openPanel setCanChooseFiles:NO]; + [openPanel setCanChooseDirectories:YES]; + [openPanel setAllowsMultipleSelection:NO]; + + if ([openPanel runModal] == NSModalResponseOK) { + NSURL* url = [[openPanel URLs] objectAtIndex:0]; + NSString* path = [url path]; + return std::string([path UTF8String]); + } + + return ""; +} + +std::vector FileDialogWrapper::GetFilesInFolder(const std::string& folder) { + std::vector filenames; + NSFileManager* fileManager = [NSFileManager defaultManager]; + NSDirectoryEnumerator* enumerator = + [fileManager enumeratorAtPath:[NSString stringWithUTF8String:folder.c_str()]]; + NSString* file; + while (file = [enumerator nextObject]) { + if ([file hasPrefix:@"."]) { + continue; + } + filenames.push_back(std::string([file UTF8String])); + } + return filenames; +} + +std::vector FileDialogWrapper::GetSubdirectoriesInFolder(const std::string& folder) { + std::vector subdirectories; + NSFileManager* fileManager = [NSFileManager defaultManager]; + NSDirectoryEnumerator* enumerator = + [fileManager enumeratorAtPath:[NSString stringWithUTF8String:folder.c_str()]]; + NSString* file; + while (file = [enumerator nextObject]) { + if ([file hasPrefix:@"."]) { + continue; + } + BOOL isDirectory; + NSString* path = + [NSString stringWithFormat:@"%@/%@", [NSString stringWithUTF8String:folder.c_str()], file]; + [fileManager fileExistsAtPath:path isDirectory:&isDirectory]; + if (isDirectory) { + subdirectories.push_back(std::string([file UTF8String])); + } + } + return subdirectories; +} \ No newline at end of file