mirror of
https://github.com/tildearrow/furnace.git
synced 2024-12-18 14:30:15 +00:00
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();
|
|||
|
}
|
|||
|
|