19 if (NFD_Init() != NFD_OKAY) {
22 nfdchar_t* outPath =
nullptr;
23 const nfdfilteritem_t* filter_list =
nullptr;
24 size_t filter_count = 0;
25 std::vector<nfdfilteritem_t> filter_items;
26 std::vector<std::string> filter_names;
27 std::vector<std::string> filter_specs;
30 filter_items.reserve(options.
filters.size());
31 filter_names.reserve(options.
filters.size());
32 filter_specs.reserve(options.
filters.size());
34 for (
const auto& filter : options.
filters) {
35 std::string label = filter.label.empty() ?
"Files" : filter.label;
36 std::string spec = filter.spec.empty() ?
"*" : filter.spec;
37 filter_names.push_back(label);
38 filter_specs.push_back(spec);
39 filter_items.push_back(
40 {filter_names.back().c_str(), filter_specs.back().c_str()});
43 filter_list = filter_items.data();
44 filter_count = filter_items.size();
48 NFD_OpenDialog(&outPath, filter_list, filter_count,
nullptr);
50 if (result == NFD_OKAY) {
51 std::string path(outPath);
52 NFD_FreePath(outPath);
93 const std::string& default_name,
const std::string& default_extension) {
94 if (NFD_Init() != NFD_OKAY) {
97 nfdchar_t* outPath =
nullptr;
98 nfdfilteritem_t filterItem[1] = {
99 {default_extension.empty() ?
"All Files" : default_extension.c_str(),
100 default_extension.empty() ?
"*" : default_extension.c_str()}};
102 nfdresult_t result = NFD_SaveDialog(
103 &outPath, default_extension.empty() ?
nullptr : filterItem,
104 default_extension.empty() ? 0 : 1,
nullptr, default_name.c_str());
106 if (result == NFD_OKAY) {
107 std::string path(outPath);
108 NFD_FreePath(outPath);