| 
									
										
										
										
											2022-06-17 01:02:29 -04:00
										 |  |  | /*
 | 
					
						
							|  |  |  |   Native File Dialog | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   User API | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   http://www.frogtoss.com/labs
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef _NFD_H
 | 
					
						
							|  |  |  | #define _NFD_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <stddef.h>
 | 
					
						
							| 
									
										
										
										
											2022-06-19 02:36:36 -04:00
										 |  |  | #include <functional>
 | 
					
						
							| 
									
										
										
										
											2022-06-24 04:11:16 -04:00
										 |  |  | #include <string>
 | 
					
						
							|  |  |  | #include <vector>
 | 
					
						
							| 
									
										
										
										
											2022-06-17 01:02:29 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* denotes UTF-8 char */ | 
					
						
							|  |  |  | typedef char nfdchar_t; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-19 02:36:36 -04:00
										 |  |  | typedef std::function<void(const char*)> nfdselcallback_t; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-17 01:02:29 -04:00
										 |  |  | /* opaque data structure -- see NFD_PathSet_* */ | 
					
						
							|  |  |  | typedef struct { | 
					
						
							|  |  |  |     nfdchar_t *buf; | 
					
						
							|  |  |  |     size_t *indices; /* byte offsets into buf */ | 
					
						
							|  |  |  |     size_t count;    /* number of indices into buf */ | 
					
						
							|  |  |  | }nfdpathset_t; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef enum { | 
					
						
							|  |  |  |     NFD_ERROR,       /* programmatic error */ | 
					
						
							|  |  |  |     NFD_OKAY,        /* user pressed okay, or successful return */ | 
					
						
							|  |  |  |     NFD_CANCEL       /* user pressed cancel */ | 
					
						
							|  |  |  | }nfdresult_t; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* nfd_<targetplatform>.c */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* single file open dialog */     | 
					
						
							| 
									
										
										
										
											2022-06-24 04:11:16 -04:00
										 |  |  | nfdresult_t NFD_OpenDialog( const std::vector<std::string>& filterList, | 
					
						
							| 
									
										
										
										
											2022-06-17 01:02:29 -04:00
										 |  |  |                             const nfdchar_t *defaultPath, | 
					
						
							| 
									
										
										
										
											2022-06-19 02:36:36 -04:00
										 |  |  |                             nfdchar_t **outPath, | 
					
						
							|  |  |  |                             nfdselcallback_t selCallback = NULL ); | 
					
						
							| 
									
										
										
										
											2022-06-17 01:02:29 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* multiple file open dialog */     | 
					
						
							| 
									
										
										
										
											2022-06-24 04:11:16 -04:00
										 |  |  | nfdresult_t NFD_OpenDialogMultiple( const std::vector<std::string>& filterList, | 
					
						
							| 
									
										
										
										
											2022-06-17 01:02:29 -04:00
										 |  |  |                                     const nfdchar_t *defaultPath, | 
					
						
							| 
									
										
										
										
											2022-06-19 02:36:36 -04:00
										 |  |  |                                     nfdpathset_t *outPaths, | 
					
						
							|  |  |  |                                     nfdselcallback_t selCallback = NULL ); | 
					
						
							| 
									
										
										
										
											2022-06-17 01:02:29 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* save dialog */ | 
					
						
							| 
									
										
										
										
											2022-06-24 04:11:16 -04:00
										 |  |  | nfdresult_t NFD_SaveDialog( const std::vector<std::string>& filterList, | 
					
						
							| 
									
										
										
										
											2022-06-17 01:02:29 -04:00
										 |  |  |                             const nfdchar_t *defaultPath, | 
					
						
							| 
									
										
										
										
											2022-06-19 02:36:36 -04:00
										 |  |  |                             nfdchar_t **outPath, | 
					
						
							|  |  |  |                             nfdselcallback_t selCallback = NULL ); | 
					
						
							| 
									
										
										
										
											2022-06-17 01:02:29 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* select folder dialog */ | 
					
						
							|  |  |  | nfdresult_t NFD_PickFolder( const nfdchar_t *defaultPath, | 
					
						
							|  |  |  |                             nfdchar_t **outPath); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* nfd_common.c */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* get last error -- set when nfdresult_t returns NFD_ERROR */ | 
					
						
							|  |  |  | const char *NFD_GetError( void ); | 
					
						
							|  |  |  | /* get the number of entries stored in pathSet */ | 
					
						
							|  |  |  | size_t      NFD_PathSet_GetCount( const nfdpathset_t *pathSet ); | 
					
						
							|  |  |  | /* Get the UTF-8 path at offset index */ | 
					
						
							|  |  |  | nfdchar_t  *NFD_PathSet_GetPath( const nfdpathset_t *pathSet, size_t index ); | 
					
						
							|  |  |  | /* Free the pathSet */     | 
					
						
							|  |  |  | void        NFD_PathSet_Free( nfdpathset_t *pathSet ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |