91 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			91 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | ## File Open API
 | ||
|  | 
 | ||
|  | The `pfd::open_file` class handles file opening dialogs. It can be provided a title, a starting | ||
|  | directory and/or pre-selected file, an optional filter for recognised file types, and an optional | ||
|  | flag to allow multiple selection: | ||
|  | 
 | ||
|  | ```cpp | ||
|  | pfd::open_file::open_file(std::string const &title, | ||
|  |                           std::string const &initial_path, | ||
|  |                           std::vector<std::string> filters = { "All Files", "*" }, | ||
|  |                           pfd::opt option = pfd::opt::none); | ||
|  | ``` | ||
|  | 
 | ||
|  | The `option` parameter can be `pfd::opt::multiselect` to allow selecting multiple files. | ||
|  | 
 | ||
|  | The selected files are queried using `pfd::open_file::result()`. If the user canceled the | ||
|  | operation, the returned list is empty: | ||
|  | 
 | ||
|  | ```cpp | ||
|  | std::vector<std::string> pfd::open_file::result(); | ||
|  | ``` | ||
|  | 
 | ||
|  | It is possible to ask the file open dialog whether the user took action using the | ||
|  | `pfd::message::ready()` method, with an optional `timeout` argument. If the user did not validate | ||
|  | the dialog within `timeout` milliseconds, the function will return `false`: | ||
|  | 
 | ||
|  | ```cpp | ||
|  | bool pfd::open_file::ready(int timeout = pfd::default_wait_timeout); | ||
|  | ``` | ||
|  | 
 | ||
|  | ## Example 1: simple file selection
 | ||
|  | 
 | ||
|  | Using `pfd::open_file::result()` will wait for user action before returning. This operation will | ||
|  | block and return the user choice: | ||
|  | 
 | ||
|  | ```cpp | ||
|  | auto selection = pfd::open_file("Select a file").result(); | ||
|  | if (!selection.empty()) | ||
|  |     std::cout << "User selected file " << selection[0] << "\n"; | ||
|  | ``` | ||
|  | 
 | ||
|  | ## Example 2: filters
 | ||
|  | 
 | ||
|  | The filter list enumerates filter names and corresponded space-separated wildcard lists. It | ||
|  | defaults to `{ "All Files", "*" }`, but here is how to use other options: | ||
|  | 
 | ||
|  | ```cpp | ||
|  | auto selection = pfd::open_file("Select a file", ".", | ||
|  |                                 { "Image Files", "*.png *.jpg *.jpeg *.bmp", | ||
|  |                                   "Audio Files", "*.wav *.mp3", | ||
|  |                                   "All Files", "*" }, | ||
|  |                                 pfd::opt::multiselect).result(); | ||
|  | // Do something with selection | ||
|  | for (auto const &filename : dialog.result()) | ||
|  |     std::cout << "Selected file: " << filename << "\n"; | ||
|  | ``` | ||
|  | 
 | ||
|  | ## Example 3: asynchronous file open
 | ||
|  | 
 | ||
|  | Using `pfd::open_file::ready()` allows the application to perform other tasks while waiting for | ||
|  | user input: | ||
|  | 
 | ||
|  | ```cpp | ||
|  | // File open dialog | ||
|  | auto dialog = pfd::open_file("Select file to open"); | ||
|  | 
 | ||
|  | // Do something while waiting for user input | ||
|  | while (!dialog.ready(1000)) | ||
|  |     std::cout << "Waited 1 second for user input...\n"; | ||
|  | 
 | ||
|  | // Act depending on the user choice | ||
|  | std::cout << "Number of selected files: " << dialog.result().size() << "\n"; | ||
|  | ``` | ||
|  | 
 | ||
|  | ## Screenshots
 | ||
|  | 
 | ||
|  | Windows 10: | ||
|  |  | ||
|  | 
 | ||
|  | Mac OS X (dark theme): | ||
|  |  | ||
|  | 
 | ||
|  | Mac OS X (light theme): | ||
|  |  | ||
|  | 
 | ||
|  | Linux (GNOME desktop): | ||
|  |  | ||
|  | 
 | ||
|  | Linux (KDE desktop): | ||
|  |  |