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