CFFI hookups for nfd "open directory" functionality

This commit is contained in:
Lars A. Doucet
2015-12-17 10:34:41 -06:00
committed by Joshua Granick
parent 97fb0dcccc
commit 1ddb43b990
5 changed files with 53 additions and 2 deletions

View File

@@ -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;

View File

@@ -6,5 +6,6 @@ enum FileDialogType {
OPEN;
OPEN_MULTIPLE;
SAVE;
OPEN_DIRECTORY;
}

View File

@@ -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);

View File

@@ -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);

View 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;