File System
This commit is contained in:
parent
93d383ece0
commit
bea61cf43f
4
External/portable-file-dialogs/.gitignore
vendored
Normal file
4
External/portable-file-dialogs/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
CMakeCache.txt
|
||||
CMakeFiles
|
||||
Makefile
|
||||
cmake_install.cmake
|
6
External/portable-file-dialogs/CMakeLists.txt
vendored
Normal file
6
External/portable-file-dialogs/CMakeLists.txt
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
cmake_minimum_required(VERSION 3.1.0)
|
||||
|
||||
project(portable_file_dialogs VERSION 1.00 LANGUAGES CXX)
|
||||
|
||||
add_library(${PROJECT_NAME} INTERFACE)
|
||||
target_include_directories(${PROJECT_NAME} INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
|
14
External/portable-file-dialogs/COPYING
vendored
Normal file
14
External/portable-file-dialogs/COPYING
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
Version 2, December 2004
|
||||
|
||||
Copyright (C) 2004 Sam Hocevar
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim or modified
|
||||
copies of this license document, and changing it is allowed as long
|
||||
as the name is changed.
|
||||
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. You just DO WHAT THE FUCK YOU WANT TO.
|
||||
|
57
External/portable-file-dialogs/README.md
vendored
Normal file
57
External/portable-file-dialogs/README.md
vendored
Normal file
@ -0,0 +1,57 @@
|
||||
# Portable File Dialogs
|
||||
|
||||
A free C++11 file dialog library.
|
||||
|
||||
* works on Windows, Mac OS X, Linux
|
||||
* **single-header**, no extra library dependencies
|
||||
* **synchronous *or* asynchronous** (does not block the rest of your program!)
|
||||
* **cancelable** (kill asynchronous dialogues without user interaction)
|
||||
* **secure** (immune to shell-quote vulnerabilities)
|
||||
|
||||
## Status
|
||||
|
||||
The library is pretty robust. It is not as feature-complete as
|
||||
[Tiny File Dialogs](https://sourceforge.net/projects/tinyfiledialogs/),
|
||||
but has asynchonous dialogs, more maintainable code, and fewer potential
|
||||
security issues.
|
||||
|
||||
The currently available backends are:
|
||||
|
||||
* Win32 API (all known versions of Windows)
|
||||
* Mac OS X (using AppleScript)
|
||||
* GNOME desktop (using [Zenity](https://en.wikipedia.org/wiki/Zenity) or its clones Matedialog and Qarma)
|
||||
* KDE desktop (using [KDialog](https://github.com/KDE/kdialog))
|
||||
|
||||
Experimental support for Emscripten is on its way.
|
||||
|
||||
## Documentation
|
||||
|
||||
* [Message Box API](doc/message.md)
|
||||
* [Notification API](doc/notify.md)
|
||||
* [File Open API](doc/open_file.md)
|
||||
* [Folder Selection Open API](select_folder.md)
|
||||
|
||||
## Screenshots (Windows 10)
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
## Screenshots (Mac OS X, dark theme)
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
## Screenshots (Linux, GNOME desktop)
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
## Screenshots (Linux, KDE Plasma desktop)
|
||||
|
||||

|
||||

|
||||

|
||||
|
97
External/portable-file-dialogs/doc/message.md
vendored
Normal file
97
External/portable-file-dialogs/doc/message.md
vendored
Normal file
@ -0,0 +1,97 @@
|
||||
## 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 (dark theme):
|
||||

|
||||
|
||||
Mac OS X (light theme):
|
||||

|
||||
|
||||
Linux (GNOME desktop):
|
||||

|
||||
|
||||
Linux (KDE desktop):
|
||||

|
||||
|
41
External/portable-file-dialogs/doc/notify.md
vendored
Normal file
41
External/portable-file-dialogs/doc/notify.md
vendored
Normal file
@ -0,0 +1,41 @@
|
||||
## Notification API
|
||||
|
||||
Displaying a desktop notification is done using the `pfd::notify` class. It can be provided a
|
||||
title, a message text, and an `icon` for the notification style:
|
||||
|
||||
```cpp
|
||||
pfd::notify::notify(std::string const &title,
|
||||
std::string const &text,
|
||||
pfd::icon icon = pfd::icon::info);
|
||||
|
||||
enum class pfd::icon { info, warning, error };
|
||||
```
|
||||
|
||||
## Example
|
||||
|
||||
Displaying a notification is straightforward. Emoji are supported:
|
||||
|
||||
```cpp
|
||||
pfd::notify("System event", "Something might be on fire 🔥",
|
||||
pfd::icon::warning);
|
||||
```
|
||||
|
||||
The `pfd::notify` object needs not be kept around, letting the object clean up itself is enough.
|
||||
|
||||
## Screenshots
|
||||
|
||||
Windows 10:
|
||||

|
||||
|
||||
Mac OS X (dark theme):
|
||||

|
||||
|
||||
Mac OS X (light theme):
|
||||

|
||||
|
||||
Linux (GNOME desktop):
|
||||

|
||||
|
||||
Linux (KDE desktop):
|
||||

|
||||
|
89
External/portable-file-dialogs/doc/open_file.md
vendored
Normal file
89
External/portable-file-dialogs/doc/open_file.md
vendored
Normal file
@ -0,0 +1,89 @@
|
||||
## File Open API
|
||||
|
||||
The `pfd::open_file` class handles file opening dialogs. It can be provided a title, a starting
|
||||
directory and/or pre-selected file, an optional filter for recognised file types, and an optional
|
||||
flag to allow multiple selection:
|
||||
|
||||
```cpp
|
||||
pfd::open_file::open_file(std::string const &title,
|
||||
std::string const &initial_path,
|
||||
std::vector<std::string> filters = { "All Files", "*" },
|
||||
bool allow_multiselect = false);
|
||||
```
|
||||
|
||||
The selected files are queried using `pfd::open_file::result()`. If the user canceled the
|
||||
operation, the returned list is empty:
|
||||
|
||||
```cpp
|
||||
std::vector<std::string> pfd::open_file::result();
|
||||
```
|
||||
|
||||
It is possible to ask the file open dialog whether the user took action using the
|
||||
`pfd::message::ready()` method, with an optional `timeout` argument. If the user did not validate
|
||||
the dialog within `timeout` milliseconds, the function will return `false`:
|
||||
|
||||
```cpp
|
||||
bool pfd::open_file::ready(int timeout = pfd::default_wait_timeout);
|
||||
```
|
||||
|
||||
## Example 1: simple file selection
|
||||
|
||||
Using `pfd::open_file::result()` will wait for user action before returning. This operation will
|
||||
block and return the user choice:
|
||||
|
||||
```cpp
|
||||
auto selection = pfd::open_file("Select a file").result();
|
||||
if (!selection.empty())
|
||||
std::cout << "User selected file " << selection[0] << "\n";
|
||||
```
|
||||
|
||||
## Example 2: filters
|
||||
|
||||
The filter list enumerates filter names and corresponded space-separated wildcard lists. It
|
||||
defaults to `{ "All Files", "*" }`, but here is how to use other options:
|
||||
|
||||
```cpp
|
||||
auto selection = pfd::open_file("Select a file", ".",
|
||||
{ "Image Files", "*.png *.jpg *.jpeg *.bmp",
|
||||
"Audio Files", "*.wav *.mp3",
|
||||
"All Files", "*" },
|
||||
true).result();
|
||||
// Do something with selection
|
||||
for (auto const &filename : dialog.result())
|
||||
std::cout << "Selected file: " << filename << "\n";
|
||||
```
|
||||
|
||||
## Example 3: asynchronous file open
|
||||
|
||||
Using `pfd::open_file::ready()` allows the application to perform other tasks while waiting for
|
||||
user input:
|
||||
|
||||
```cpp
|
||||
// File open dialog
|
||||
auto dialog = pfd::open_file("Select file to open");
|
||||
|
||||
// Do something while waiting for user input
|
||||
while (!dialog.ready(1000))
|
||||
std::cout << "Waited 1 second for user input...\n";
|
||||
|
||||
// Act depending on the user choice
|
||||
std::cout << "Number of selected files: " << dialog.result().size() << "\n";
|
||||
```
|
||||
|
||||
## Screenshots
|
||||
|
||||
Windows 10:
|
||||

|
||||
|
||||
Mac OS X (dark theme):
|
||||

|
||||
|
||||
Mac OS X (light theme):
|
||||

|
||||
|
||||
Linux (GNOME desktop):
|
||||

|
||||
|
||||
Linux (KDE desktop):
|
||||

|
||||
|
51
External/portable-file-dialogs/doc/select_folder.md
vendored
Normal file
51
External/portable-file-dialogs/doc/select_folder.md
vendored
Normal file
@ -0,0 +1,51 @@
|
||||
## Folder Selection API
|
||||
|
||||
The `pfd::select_folder` class handles folder opening dialogs. It can be provided a title, and an
|
||||
optional starting directory:
|
||||
|
||||
```cpp
|
||||
pfd::select_folder::select_folder(std::string const &title,
|
||||
std::string const &default_path = "");
|
||||
```
|
||||
|
||||
The selected folder is queried using `pfd::select_folder::result()`. If the user canceled the
|
||||
operation, the returned string is empty:
|
||||
|
||||
```cpp
|
||||
std::string pfd::select_folder::result();
|
||||
```
|
||||
|
||||
It is possible to ask the folder selection dialog whether the user took action using the
|
||||
`pfd::message::ready()` method, with an optional `timeout` argument. If the user did not validate
|
||||
the dialog within `timeout` milliseconds, the function will return `false`:
|
||||
|
||||
```cpp
|
||||
bool pfd::select_folder::ready(int timeout = pfd::default_wait_timeout);
|
||||
```
|
||||
|
||||
## Example 1: simple folder selection
|
||||
|
||||
Using `pfd::select_folder::result()` will wait for user action before returning. This operation
|
||||
will block and return the user choice:
|
||||
|
||||
```cpp
|
||||
auto selection = pfd::select_folder("Select a folder").result();
|
||||
if (!selection.empty())
|
||||
std::cout << "User selected folder " << selection << "\n";
|
||||
```
|
||||
|
||||
## Example 2: asynchronous folder open
|
||||
|
||||
Using `pfd::select_folder::ready()` allows the application to perform other tasks while waiting for user input:
|
||||
|
||||
```cpp
|
||||
// Folder selection dialog
|
||||
auto dialog = pfd::select_folder("Select folder to open");
|
||||
|
||||
// Do something while waiting for user input
|
||||
while (!dialog.ready(1000))
|
||||
std::cout << "Waited 1 second for user input...\n";
|
||||
|
||||
// Act depending on the user choice
|
||||
std::cout << "Selected folder: " << dialog.result() << "\n";
|
||||
```
|
11
External/portable-file-dialogs/examples/.gitignore
vendored
Normal file
11
External/portable-file-dialogs/examples/.gitignore
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
example
|
||||
example.exe
|
||||
kill
|
||||
kill.exe
|
||||
|
||||
Debug
|
||||
Release
|
||||
*.vcxproj.user
|
||||
|
||||
.idea
|
||||
cmake-build-*
|
103
External/portable-file-dialogs/examples/example.cpp
vendored
Normal file
103
External/portable-file-dialogs/examples/example.cpp
vendored
Normal file
@ -0,0 +1,103 @@
|
||||
//
|
||||
// Portable File Dialogs
|
||||
//
|
||||
// Copyright © 2018—2019 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()
|
||||
{
|
||||
// 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();
|
||||
}
|
||||
|
96
External/portable-file-dialogs/examples/example.vcxproj
vendored
Normal file
96
External/portable-file-dialogs/examples/example.vcxproj
vendored
Normal file
@ -0,0 +1,96 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="example.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="../portable-file-dialogs.h" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>15.0</VCProjectVersion>
|
||||
<ProjectGuid>{10F4364D-27C4-4C74-8079-7C42971E81E7}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>example</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>..</AdditionalIncludeDirectories>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
|
||||
<ClCompile>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
42
External/portable-file-dialogs/examples/kill.cpp
vendored
Normal file
42
External/portable-file-dialogs/examples/kill.cpp
vendored
Normal file
@ -0,0 +1,42 @@
|
||||
//
|
||||
// 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 <cstdio>
|
||||
|
||||
int main()
|
||||
{
|
||||
// Set verbosity to true
|
||||
pfd::settings::verbose(true);
|
||||
|
||||
// Message box with nice message
|
||||
auto m = pfd::message("Upgrade software?",
|
||||
"Press OK to upgrade this software.\n"
|
||||
"\n"
|
||||
"By default, the software will update itself\n"
|
||||
"automatically in 10 seconds.",
|
||||
pfd::choice::ok_cancel,
|
||||
pfd::icon::warning);
|
||||
|
||||
// Wait for an answer for up to 10 seconds
|
||||
for (int i = 0; i < 10 && !m.ready(1000); ++i)
|
||||
;
|
||||
|
||||
// Upgrade software if user clicked OK, or if user didn’t interact
|
||||
bool upgrade = m.ready() ? m.result() == pfd::button::ok : m.kill();
|
||||
if (upgrade)
|
||||
std::cout << "Upgrading software!\n";
|
||||
else
|
||||
std::cout << "Not upgrading software.\n";
|
||||
}
|
||||
|
96
External/portable-file-dialogs/examples/kill.vcxproj
vendored
Normal file
96
External/portable-file-dialogs/examples/kill.vcxproj
vendored
Normal file
@ -0,0 +1,96 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="kill.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="../portable-file-dialogs.h" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>15.0</VCProjectVersion>
|
||||
<ProjectGuid>{B94D26B1-7EF7-43A2-A973-9A96A08E2E17}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>kill</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>..</AdditionalIncludeDirectories>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
|
||||
<ClCompile>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
1647
External/portable-file-dialogs/portable-file-dialogs.h
vendored
Normal file
1647
External/portable-file-dialogs/portable-file-dialogs.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
Test/Test.sgp
Normal file
1
Test/Test.sgp
Normal file
@ -0,0 +1 @@
|
||||
{}
|
Loading…
x
Reference in New Issue
Block a user