56 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			56 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								## Folder Selection API
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The `pfd::select_folder` class handles folder opening dialogs. It can be provided a title, and an
							 | 
						||
| 
								 | 
							
								optional starting directory:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								pfd::select_folder::select_folder(std::string const &title,
							 | 
						||
| 
								 | 
							
								                                  std::string const &default_path = "",
							 | 
						||
| 
								 | 
							
								                                  pfd::opt option = pfd::opt::none);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The `option` parameter can be `pfd::opt::force_path` to force the operating system to use the
							 | 
						||
| 
								 | 
							
								provided path. Some systems default to the most recently used path, if applicable.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The selected folder is queried using `pfd::select_folder::result()`. If the user canceled the
							 | 
						||
| 
								 | 
							
								operation, the returned string is empty:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								std::string pfd::select_folder::result();
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								It is possible to ask the folder selection 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::select_folder::ready(int timeout = pfd::default_wait_timeout);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Example 1: simple folder selection
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Using `pfd::select_folder::result()` will wait for user action before returning. This operation
							 | 
						||
| 
								 | 
							
								will block and return the user choice:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								auto selection = pfd::select_folder("Select a folder").result();
							 | 
						||
| 
								 | 
							
								if (!selection.empty())
							 | 
						||
| 
								 | 
							
								    std::cout << "User selected folder " << selection << "\n";
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Example 2: asynchronous folder open
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Using `pfd::select_folder::ready()` allows the application to perform other tasks while waiting for user input:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cpp
							 | 
						||
| 
								 | 
							
								// Folder selection dialog
							 | 
						||
| 
								 | 
							
								auto dialog = pfd::select_folder("Select folder 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 << "Selected folder: " << dialog.result() << "\n";
							 | 
						||
| 
								 | 
							
								```
							 |