Vivid
Loading...
Searching...
No Matches
FileDialogue.cpp
1#include "FileDialogue.h"
2#include <nfd.h>
3#include <stdio.h>
4#include <stdlib.h>
5#include <iostream>
6
7static Vector<nfdfilteritem_t> makeFilterItem(Vector<String> names, Vector<String> specs);
8
9namespace Vivid
10{
11 String FileDialogue::OpenFile(Vector<String> filterName, Vector<String> filterSpecs)
12 {
13 NFD_Init();
14
15 nfdchar_t* outPath;
16 Vector<nfdfilteritem_t> filterItem = makeFilterItem(filterName, filterSpecs);
17 nfdresult_t result = NFD_OpenDialog(&outPath, filterItem.data(), filterItem.size(), NULL);
18 String path;
19 if (result == NFD_OKAY)
20 {
21 path = String(outPath);
22 std::cout << "Open Path: " << outPath << std::endl;
23 NFD_FreePath(outPath);
24 }
25 else if (result == NFD_CANCEL)
26 {
27 std::cout << "User pressed cancel." << std::endl;
28 }
29 else
30 {
31 std::cerr << "Error: " << NFD_GetError() << std::endl;
32 }
33
34 NFD_Quit();
35
36 return path;
37 }
38
39 String FileDialogue::SaveFile(Vector<String> filter, Vector<String> filterSpecs)
40 {
41 NFD_Init();
42
43 nfdchar_t* savePath;
44
45 Vector<nfdfilteritem_t> filterItem = makeFilterItem(filter, filterSpecs);
46
47 nfdresult_t result = NFD_SaveDialog(&savePath, filterItem.data(), 2, NULL, "Untitled.c");
48 String path;
49 if (result == NFD_OKAY)
50 {
51 std::cout << "Save Path: " << savePath << std::endl;
52 path = String(savePath);
53 NFD_FreePath(savePath);
54 }
55 else if (result == NFD_CANCEL)
56 {
57 std::cout << "User pressed cancel." << std::endl;
58 }
59 else
60 {
61 std::cerr << "Error: " << NFD_GetError() << std::endl;
62 }
63
64 NFD_Quit();
65 return path;
66 }
67}
68
69static Vector<nfdfilteritem_t> makeFilterItem(Vector<String> names, Vector<String> specs)
70{
71 int size = names.size();
72 Vector<nfdfilteritem_t> filterItems(size);
73 if (size != specs.size())
74 {
75 printf("Error: Name and extensions size mismatch\n");
76 return filterItems;
77 }
78
79 for (int i = 0; i < size; i++)
80 {
81 filterItems[i].name = names[i].c_str();
82 filterItems[i].spec = specs[i].c_str();
83 }
84
85 return filterItems;
86}