111 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			111 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|   | //
 | |||
|  | //  Portable File Dialogs
 | |||
|  | //
 | |||
|  | //  Copyright © 2018—2020 Sam Hocevar <sam@hocevar.net>
 | |||
|  | //
 | |||
|  | //  This program is free software. It comes without any warranty, to
 | |||
|  | //  the extent permitted by applicable law. You can redistribute it
 | |||
|  | //  and/or modify it under the terms of the Do What the Fuck You Want
 | |||
|  | //  to Public License, Version 2, as published by the WTFPL Task Force.
 | |||
|  | //  See http://www.wtfpl.net/ for more details.
 | |||
|  | //
 | |||
|  | 
 | |||
|  | #include "portable-file-dialogs.h"
 | |||
|  | 
 | |||
|  | #include <iostream>
 | |||
|  | 
 | |||
|  | #if _WIN32
 | |||
|  | #define DEFAULT_PATH "C:\\"
 | |||
|  | #else
 | |||
|  | #define DEFAULT_PATH "/tmp"
 | |||
|  | #endif
 | |||
|  | 
 | |||
|  | int main() | |||
|  | { | |||
|  |     // Check that a backend is available
 | |||
|  |     if (!pfd::settings::available()) | |||
|  |     { | |||
|  |         std::cout << "Portable File Dialogs are not available on this platform.\n"; | |||
|  |         return 1; | |||
|  |     } | |||
|  | 
 | |||
|  |     // Set verbosity to true
 | |||
|  |     pfd::settings::verbose(true); | |||
|  | 
 | |||
|  |     // Notification
 | |||
|  |     pfd::notify("Important Notification", | |||
|  |                 "This is ' a message, pay \" attention \\ to it!", | |||
|  |                 pfd::icon::info); | |||
|  | 
 | |||
|  |     // Message box with nice message
 | |||
|  |     auto m = pfd::message("Personal Message", | |||
|  |                           "You are an amazing person, don’t let anyone make you think otherwise.", | |||
|  |                           pfd::choice::yes_no_cancel, | |||
|  |                           pfd::icon::warning); | |||
|  | 
 | |||
|  |     // Optional: do something while waiting for user action
 | |||
|  |     for (int i = 0; i < 10 && !m.ready(1000); ++i) | |||
|  |         std::cout << "Waited 1 second for user input...\n"; | |||
|  | 
 | |||
|  |     // Do something according to the selected button
 | |||
|  |     switch (m.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; | |||
|  |         default: break; // Should not happen
 | |||
|  |     } | |||
|  | 
 | |||
|  |     // Directory selection
 | |||
|  |     auto dir = pfd::select_folder("Select any directory", DEFAULT_PATH).result(); | |||
|  |     std::cout << "Selected dir: " << dir << "\n"; | |||
|  | 
 | |||
|  |     // File open
 | |||
|  |     auto f = pfd::open_file("Choose files to read", DEFAULT_PATH, | |||
|  |                             { "Text Files (.txt .text)", "*.txt *.text", | |||
|  |                               "All Files", "*" }, | |||
|  |                             pfd::opt::multiselect); | |||
|  |     std::cout << "Selected files:"; | |||
|  |     for (auto const &name : f.result()) | |||
|  |         std::cout << " " + name; | |||
|  |     std::cout << "\n"; | |||
|  | } | |||
|  | 
 | |||
|  | // Unused function that just tests the whole API
 | |||
|  | void api() | |||
|  | { | |||
|  |     // pfd::settings
 | |||
|  |     pfd::settings::verbose(true); | |||
|  |     pfd::settings::rescan(); | |||
|  | 
 | |||
|  |     // pfd::notify
 | |||
|  |     pfd::notify("", ""); | |||
|  |     pfd::notify("", "", pfd::icon::info); | |||
|  |     pfd::notify("", "", pfd::icon::warning); | |||
|  |     pfd::notify("", "", pfd::icon::error); | |||
|  |     pfd::notify("", "", pfd::icon::question); | |||
|  | 
 | |||
|  |     pfd::notify a("", ""); | |||
|  |     (void)a.ready(); | |||
|  |     (void)a.ready(42); | |||
|  | 
 | |||
|  |     // pfd::message
 | |||
|  |     pfd::message("", ""); | |||
|  |     pfd::message("", "", pfd::choice::ok); | |||
|  |     pfd::message("", "", pfd::choice::ok_cancel); | |||
|  |     pfd::message("", "", pfd::choice::yes_no); | |||
|  |     pfd::message("", "", pfd::choice::yes_no_cancel); | |||
|  |     pfd::message("", "", pfd::choice::retry_cancel); | |||
|  |     pfd::message("", "", pfd::choice::abort_retry_ignore); | |||
|  |     pfd::message("", "", pfd::choice::ok, pfd::icon::info); | |||
|  |     pfd::message("", "", pfd::choice::ok, pfd::icon::warning); | |||
|  |     pfd::message("", "", pfd::choice::ok, pfd::icon::error); | |||
|  |     pfd::message("", "", pfd::choice::ok, pfd::icon::question); | |||
|  | 
 | |||
|  |     pfd::message b("", ""); | |||
|  |     (void)b.ready(); | |||
|  |     (void)b.ready(42); | |||
|  |     (void)b.result(); | |||
|  | } | |||
|  | 
 |