CFFI hookups for nfd "open directory" functionality
This commit is contained in:
committed by
Joshua Granick
parent
97fb0dcccc
commit
1ddb43b990
@@ -52,6 +52,10 @@ class FileDialog {
|
||||
|
||||
worker.sendComplete (lime_file_dialog_open_files (filter, defaultPath));
|
||||
|
||||
case OPEN_DIRECTORY:
|
||||
|
||||
worker.sendComplete (lime_file_dialog_open_directory (filter, defaultPath));
|
||||
|
||||
case SAVE:
|
||||
|
||||
worker.sendComplete (lime_file_dialog_save_file (filter, defaultPath));
|
||||
@@ -64,7 +68,7 @@ class FileDialog {
|
||||
|
||||
switch (type) {
|
||||
|
||||
case OPEN, SAVE:
|
||||
case OPEN, OPEN_DIRECTORY, SAVE:
|
||||
|
||||
var path:String = cast result;
|
||||
|
||||
@@ -108,6 +112,10 @@ class FileDialog {
|
||||
case OPEN:
|
||||
|
||||
path = lime_file_dialog_open_file (filter, defaultPath);
|
||||
|
||||
case OPEN_DIRECTORY:
|
||||
|
||||
path = lime_file_dialog_open_directory (filter, defaultPath);
|
||||
|
||||
case OPEN_MULTIPLE:
|
||||
|
||||
@@ -121,7 +129,7 @@ class FileDialog {
|
||||
|
||||
switch (type) {
|
||||
|
||||
case OPEN, SAVE:
|
||||
case OPEN, OPEN_DIRECTORY, SAVE:
|
||||
|
||||
if (path != null) {
|
||||
|
||||
@@ -301,6 +309,7 @@ class FileDialog {
|
||||
|
||||
|
||||
#if (cpp || neko || nodejs)
|
||||
@:cffi private static function lime_file_dialog_open_directory (filter:String, defaultPath:String):Dynamic;
|
||||
@:cffi private static function lime_file_dialog_open_file (filter:String, defaultPath:String):Dynamic;
|
||||
@:cffi private static function lime_file_dialog_open_files (filter:String, defaultPath:String):Dynamic;
|
||||
@:cffi private static function lime_file_dialog_save_file (filter:String, defaultPath:String):Dynamic;
|
||||
|
||||
@@ -6,5 +6,6 @@ enum FileDialogType {
|
||||
OPEN;
|
||||
OPEN_MULTIPLE;
|
||||
SAVE;
|
||||
OPEN_DIRECTORY;
|
||||
|
||||
}
|
||||
@@ -12,6 +12,7 @@ namespace lime {
|
||||
|
||||
public:
|
||||
|
||||
static const char* OpenDirectory (const char* filter = 0, const char* defaultPath = 0);
|
||||
static const char* OpenFile (const char* filter = 0, const char* defaultPath = 0);
|
||||
static void OpenFiles (std::vector<const char*>* files, const char* filter = 0, const char* defaultPath = 0);
|
||||
static const char* SaveFile (const char* filter = 0, const char* defaultPath = 0);
|
||||
|
||||
@@ -264,6 +264,17 @@ namespace lime {
|
||||
}
|
||||
|
||||
|
||||
value lime_file_dialog_open_directory (HxString filter, HxString defaultPath) {
|
||||
|
||||
#ifdef LIME_NFD
|
||||
const char* path = FileDialog::OpenDirectory (filter.__s, defaultPath.__s);
|
||||
return path ? alloc_string (path) : alloc_null ();
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
value lime_file_dialog_open_file (HxString filter, HxString defaultPath) {
|
||||
|
||||
#ifdef LIME_NFD
|
||||
@@ -1410,6 +1421,7 @@ namespace lime {
|
||||
DEFINE_PRIME1 (lime_cffi_set_finalizer);
|
||||
DEFINE_PRIME0 (lime_clipboard_get_text);
|
||||
DEFINE_PRIME1v (lime_clipboard_set_text);
|
||||
DEFINE_PRIME2 (lime_file_dialog_open_directory);
|
||||
DEFINE_PRIME2 (lime_file_dialog_open_file);
|
||||
DEFINE_PRIME2 (lime_file_dialog_open_files);
|
||||
DEFINE_PRIME2 (lime_file_dialog_save_file);
|
||||
|
||||
@@ -6,6 +6,34 @@
|
||||
namespace lime {
|
||||
|
||||
|
||||
const char* FileDialog::OpenDirectory (const char* filter, const char* defaultPath) {
|
||||
|
||||
nfdchar_t *savePath = 0;
|
||||
nfdresult_t result = NFD_OpenDirectoryDialog (filter, defaultPath, &savePath);
|
||||
|
||||
switch (result) {
|
||||
|
||||
case NFD_OKAY:
|
||||
|
||||
return savePath;
|
||||
break;
|
||||
|
||||
case NFD_CANCEL:
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
printf ("Error: %s\n", NFD_GetError ());
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
return savePath;
|
||||
|
||||
}
|
||||
|
||||
|
||||
const char* FileDialog::OpenFile (const char* filter, const char* defaultPath) {
|
||||
|
||||
nfdchar_t *savePath = 0;
|
||||
|
||||
Reference in New Issue
Block a user