98 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ## Message Box API
 | |
| 
 | |
| Displaying a message box is done using the `pfd::message` class. It can be provided a title, a
 | |
| message text, a `choice` representing which buttons need to be rendered, and an `icon` for the
 | |
| message:
 | |
| 
 | |
| ```cpp
 | |
| pfd::message::message(std::string const &title,
 | |
|                       std::string const &text,
 | |
|                       pfd::choice choice = pfd::choice::ok_cancel,
 | |
|                       pfd::icon icon = pfd::icon::info);
 | |
| 
 | |
| enum class pfd::choice { ok, ok_cancel, yes_no, yes_no_cancel };
 | |
| 
 | |
| enum class pfd::icon { info, warning, error, question };
 | |
| ```
 | |
| 
 | |
| The pressed button is queried using `pfd::message::result()`. If the dialog box is closed by any
 | |
| other means, the `pfd::button::cancel` is assumed:
 | |
| 
 | |
| ```cpp
 | |
| pfd::button pfd::message::result();
 | |
| 
 | |
| enum class pfd::button { ok, cancel, yes, no };
 | |
| ```
 | |
| 
 | |
| It is possible to ask the dialog box whether the user took action using the `pfd::message::ready()`
 | |
| method, with an optional `timeout` argument. If the user did not press a button within `timeout`
 | |
| milliseconds, the function will return `false`:
 | |
| 
 | |
| ```cpp
 | |
| bool pfd::message::ready(int timeout = pfd::default_wait_timeout);
 | |
| ```
 | |
| 
 | |
| ## Example 1: simple notification
 | |
| 
 | |
| The `pfd::message` destructor waits for user action, so this operation will block until the user
 | |
| closes the message box:
 | |
| 
 | |
| ```cpp
 | |
| pfd::message("Problem", "An error occurred while doing things",
 | |
|              pfd::choice::ok, pfd::icon::error);
 | |
| ```
 | |
| 
 | |
| ## Example 2: retrieving the pressed button
 | |
| 
 | |
| Using `pfd::message::result()` will also wait for user action before returning. This operation will block and return the user choice:
 | |
| 
 | |
| ```cpp
 | |
| // Ask for user opinion
 | |
| auto button = pfd::message("Action requested", "Do you want to proceed with things?",
 | |
|                            pfd::choice::yes_no, pfd::icon::question).result();
 | |
| // Do something with button…
 | |
| ```
 | |
| 
 | |
| ## Example 3: asynchronous message box
 | |
| 
 | |
| Using `pfd::message::ready()` allows the application to perform other tasks while waiting for
 | |
| user input:
 | |
| 
 | |
| ```cpp
 | |
| // Message box with nice message
 | |
| auto box = pfd::message("Unsaved Files", "Do you want to save the current "
 | |
|                         "document before closing the application?",
 | |
|                         pfd::choice::yes_no_cancel,
 | |
|                         pfd::icon::warning);
 | |
| 
 | |
| // Do something while waiting for user input
 | |
| while (!box.ready(1000))
 | |
|     std::cout << "Waited 1 second for user input...\n";
 | |
| 
 | |
| // Act depending on the selected button
 | |
| switch (box.result())
 | |
| {   
 | |
|     case pfd::button::yes:    std::cout << "User agreed.\n"; break;
 | |
|     case pfd::button::no:     std::cout << "User disagreed.\n"; break;
 | |
|     case pfd::button::cancel: std::cout << "User freaked out.\n"; break;
 | |
| }   
 | |
| ```
 | |
| 
 | |
| ## Screenshots
 | |
| 
 | |
| #### Windows 10
 | |
| 
 | |
| 
 | |
| 
 | |
| #### Mac OS X
 | |
| 
 | |
|  
 | |
| 
 | |
| #### Linux (GNOME desktop)
 | |
| 
 | |
| 
 | |
| 
 | |
| #### Linux (KDE desktop)
 | |
| 
 | |
| 
 | 
