Tanoda
StandaloneFileBrowser.mm
Go to the documentation of this file.
1#import <Foundation/Foundation.h>
2#import <UIKit/UIKit.h>
3
4typedef void (*callbackFunc)(const char *);
5static callbackFunc asyncCallback;
6
7@interface StandaloneFileBrowser : NSObject<UIDocumentPickerDelegate>
8+ (void) createOpenPanel:(NSString*)title
9 directory:(NSString*)directory
10 filters:(NSString*)filters
11 multiselect:(BOOL)multiselect
12 canChooseFiles:(BOOL)canChooseFiles
13 canChooseFolders:(BOOL)canChooseFolders
14 save:(BOOL)save;
15@end
16
17extern "C" {
18 const char* DialogOpenFilePanel(const char* title,
19 const char* directory,
20 const char* filters,
21 bool multiselect);
22 void DialogOpenFilePanelAsync(const char* title,
23 const char* directory,
24 const char* filters,
25 bool multiselect,
26 callbackFunc cb);
27 const char* DialogOpenFolderPanel(const char* title,
28 const char* directory,
29 bool multiselect);
30 void DialogOpenFolderPanelAsync(const char* title,
31 const char* directory,
32 bool multiselect,
33 callbackFunc cb);
34 const char* DialogSaveFilePanel(const char* title,
35 const char* directory,
36 const char* defaultName,
37 const char* filters);
38 void DialogSaveFilePanelAsync(const char* title,
39 const char* directory,
40 const char* defaultName,
41 const char* filters,
42 callbackFunc cb);
43 UIViewController* UnityGetGLViewController();
44}
45
46const char* DialogOpenFilePanel(const char* title,
47 const char* directory,
48 const char* filters,
49 bool multiselect) {
50 return 0;
51
52}
53
54void DialogOpenFilePanelAsync(const char* title,
55 const char* directory,
56 const char* filters,
57 bool multiselect,
58 callbackFunc cb) {
59 asyncCallback = cb;
60 [StandaloneFileBrowser createOpenPanel:[NSString stringWithUTF8String:title ?: ""]
61 directory:[NSString stringWithUTF8String:directory ?: ""]
62 filters:[NSString stringWithUTF8String:filters ?: ""]
63 multiselect:multiselect
66 save:NO];
67}
68
69const char* DialogOpenFolderPanel(const char* title,
70 const char* directory,
71 bool multiselect) {
72 return 0;
73}
74
75void DialogOpenFolderPanelAsync(const char* title,
76 const char* directory,
77 bool multiselect,
78 callbackFunc cb) {
79 asyncCallback = cb;
80 [StandaloneFileBrowser createOpenPanel:[NSString stringWithUTF8String:title ?: ""]
81 directory:[NSString stringWithUTF8String:directory ?: ""]
82 filters:@""
83 multiselect:multiselect
86 save:NO];
87}
88
89const char* DialogSaveFilePanel(const char* title,
90 const char* directory,
91 const char* defaultName,
92 const char* filters) {
93 return 0;
94}
95
96void DialogSaveFilePanelAsync(const char* title,
97 const char* directory,
98 const char* defaultName,
99 const char* filters,
100 callbackFunc cb) {
101 asyncCallback = cb;
102 [StandaloneFileBrowser createOpenPanel:[NSString stringWithUTF8String:title ?: ""]
103 directory:[NSString stringWithUTF8String:directory ?: ""]
104 filters:@""
105 multiselect:NO
108 save:YES];
109}
110
111@implementation StandaloneFileBrowser
112+ (void) documentPicker:(UIDocumentPickerViewController *)controller
113 didPickDocumentsAtURLs:(NSArray <NSURL *>*)urls {
114 NSString* pathsStr = @"";
115 NSMutableArray* paths = [NSMutableArray arrayWithCapacity:[urls count]];
116 for (int i = 0; i < [urls count]; i++) {
117 NSURL* url = [urls objectAtIndex:i];
118 [paths addObject:[url path]];
119 }
120 NSString* seperator = [NSString stringWithFormat:@"%c", 28];
121 pathsStr = [paths componentsJoinedByString:seperator];
122 if (asyncCallback) {
123 asyncCallback([pathsStr UTF8String]);
124 }
125}
126+ (void) documentPicker:(UIDocumentPickerViewController *)controller
127 didPickDocumentAtURL:(NSURL *)url {
128 NSString* pathsStr = @"";
129 NSMutableArray* paths = [NSMutableArray arrayWithCapacity:1];
130 [paths addObject:[url path]];
131 NSString* seperator = [NSString stringWithFormat:@"%c", 28];
132 pathsStr = [paths componentsJoinedByString:seperator];
133 if (asyncCallback) {
134 asyncCallback([pathsStr UTF8String]);
135 }
136}
137+ (void) createOpenPanel:(NSString*)title
138 directory:(NSString*)directory
139 filters:(NSString*)filters
140 multiselect:(BOOL)multiselect
141 canChooseFiles:(BOOL)canChooseFiles
142 canChooseFolders:(BOOL)canChooseFolders
143 save:(BOOL)save
144{
145 NSURL* url = [NSURL URLWithString:directory];
146 NSMutableArray* fileTypes = [[NSMutableArray alloc] init];
147 if (canChooseFiles) {
148 [fileTypes addObject:@"public.item"];
149 }
150 if (canChooseFolders) {
151 [fileTypes addObject:@"public.directory"];
152 }
153 UIDocumentPickerViewController *controller = [[UIDocumentPickerViewController alloc]
154 initWithDocumentTypes:fileTypes
155 inMode:save?UIDocumentPickerModeExportToService:UIDocumentPickerModeImport];
156 [controller setTitle:title];
157 [controller setDirectoryURL:url];
158 [controller setAllowsMultipleSelection:multiselect];
159 [controller setShouldShowFileExtensions:true];
160 [controller setDelegate:self];
161 [UnityGetGLViewController() presentViewController:controller animated:YES completion:nil];
162}
163@end
const char * DialogOpenFilePanel(const char *title, const char *directory, const char *filters, bool multiselect)
void DialogOpenFilePanelAsync(const char *title, const char *directory, const char *filters, bool multiselect, callbackFunc cb)
const char * DialogSaveFilePanel(const char *title, const char *directory, const char *defaultName, const char *filters)
void DialogSaveFilePanelAsync(const char *title, const char *directory, const char *defaultName, const char *filters, callbackFunc cb)
void(* callbackFunc)(const char *)
const char * DialogOpenFolderPanel(const char *title, const char *directory, bool multiselect)
UIViewController * UnityGetGLViewController()
void DialogOpenFolderPanelAsync(const char *title, const char *directory, bool multiselect, callbackFunc cb)
void createOpenPanel:directory:filters:multiselect:canChooseFiles:canChooseFolders:save:(NSString *title,[directory] NSString *directory,[filters] NSString *filters,[multiselect] BOOL multiselect,[canChooseFiles] BOOL canChooseFiles,[canChooseFolders] BOOL canChooseFolders,[save] BOOL save)