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):
 | |
| 
 | 
