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