68 const char *default_path,
69 const char *default_name);
71 #ifdef NOC_FILE_DIALOG_IMPLEMENTATION 76 static char *g_noc_file_dialog_ret = NULL;
78 #ifdef NOC_FILE_DIALOG_GTK 84 const char *default_path,
85 const char *default_name)
89 GtkFileChooser *chooser;
90 GtkFileChooserAction action;
92 char buf[128], *patterns;
95 GTK_FILE_CHOOSER_ACTION_OPEN;
97 action = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER;
99 gtk_init_check(NULL, NULL);
100 dialog = gtk_file_chooser_dialog_new(
104 "_Cancel", GTK_RESPONSE_CANCEL,
105 flags & NOC_FILE_DIALOG_SAVE ?
"_Save" :
"_Open", GTK_RESPONSE_ACCEPT,
107 chooser = GTK_FILE_CHOOSER(dialog);
109 gtk_file_chooser_set_do_overwrite_confirmation(chooser, TRUE);
112 gtk_file_chooser_set_filename(chooser, default_path);
114 gtk_file_chooser_set_current_name(chooser, default_name);
116 while (filters && *filters) {
117 filter = gtk_file_filter_new();
118 gtk_file_filter_set_name(filter, filters);
119 filters += strlen(filters) + 1;
122 strcpy(buf, filters);
123 buf[strlen(buf)] =
'\0';
124 for (patterns = buf; *patterns; patterns++)
125 if (*patterns ==
';') *patterns =
'\0';
128 gtk_file_filter_add_pattern(filter, patterns);
129 patterns += strlen(patterns) + 1;
132 gtk_file_chooser_add_filter(chooser, filter);
133 filters += strlen(filters) + 1;
136 res = gtk_dialog_run(GTK_DIALOG(dialog));
138 free(g_noc_file_dialog_ret);
139 g_noc_file_dialog_ret = NULL;
141 if (res == GTK_RESPONSE_ACCEPT)
142 g_noc_file_dialog_ret = gtk_file_chooser_get_filename(chooser);
143 gtk_widget_destroy(dialog);
144 while (gtk_events_pending()) gtk_main_iteration();
145 return g_noc_file_dialog_ret;
160 #ifdef NOC_FILE_DIALOG_WIN32 167 const char *default_path,
168 const char *default_name)
174 ZeroMemory(&ofn,
sizeof(ofn));
175 ofn.lStructSize =
sizeof(ofn);
176 ofn.lpstrFile = szFile;
177 ofn.lpstrFile[0] =
'\0';
178 ofn.nMaxFile =
sizeof(szFile);
179 ofn.lpstrFilter = filters;
180 ofn.nFilterIndex = 1;
181 ofn.lpstrFileTitle = NULL;
182 ofn.nMaxFileTitle = 0;
183 ofn.lpstrInitialDir = NULL;
184 ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
187 ret = GetOpenFileName(&ofn);
189 ret = GetSaveFileName(&ofn);
191 free(g_noc_file_dialog_ret);
192 g_noc_file_dialog_ret = ret ? strdup(szFile) : NULL;
193 return g_noc_file_dialog_ret;
198 #ifdef NOC_FILE_DIALOG_OSX 200 #include <AppKit/AppKit.h> 204 const char *default_path,
205 const char *default_name)
208 const char *utf8_path;
210 NSOpenPanel *open_panel;
211 NSMutableArray *types_array;
213 char buf[128], *patterns;
216 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
218 if (flags & NOC_FILE_DIALOG_OPEN) {
219 panel = open_panel = [NSOpenPanel openPanel];
221 panel = [NSSavePanel savePanel];
224 if (flags & NOC_FILE_DIALOG_DIR) {
225 [open_panel setCanChooseDirectories:YES];
226 [open_panel setCanChooseFiles:NO];
230 default_url = [NSURL fileURLWithPath:
231 [NSString stringWithUTF8String:default_path]];
232 [panel setDirectoryURL:default_url];
233 [panel setNameFieldStringValue:default_url.lastPathComponent];
237 types_array = [NSMutableArray array];
239 filters += strlen(filters) + 1;
241 strcpy(buf, filters);
242 buf[strlen(buf) + 1] =
'\0';
243 for (patterns = buf; *patterns; patterns++)
244 if (*patterns ==
';') *patterns =
'\0';
247 assert(strncmp(patterns,
"*.", 2) == 0);
249 [types_array addObject:[NSString stringWithUTF8String: patterns]];
250 patterns += strlen(patterns) + 1;
252 filters += strlen(filters) + 1;
254 [panel setAllowedFileTypes:types_array];
257 free(g_noc_file_dialog_ret);
258 g_noc_file_dialog_ret = NULL;
259 if ( [panel runModal] == NSModalResponseOK ) {
261 utf8_path = [[url path] UTF8String];
262 g_noc_file_dialog_ret = strdup(utf8_path);
266 return g_noc_file_dialog_ret;
Definition: noc_file_dialog.h:45
Definition: noc_file_dialog.h:44
Definition: noc_file_dialog.h:42
Definition: noc_file_dialog.h:43
const char * noc_file_dialog_open(int flags, const char *filters, const char *default_path, const char *default_name)
GLint GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: wglext.h:328