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)); worker.sendComplete (lime_file_dialog_open_files (filter, defaultPath));
case OPEN_DIRECTORY:
worker.sendComplete (lime_file_dialog_open_directory (filter, defaultPath));
case SAVE: case SAVE:
worker.sendComplete (lime_file_dialog_save_file (filter, defaultPath)); worker.sendComplete (lime_file_dialog_save_file (filter, defaultPath));
@@ -64,7 +68,7 @@ class FileDialog {
switch (type) { switch (type) {
case OPEN, SAVE: case OPEN, OPEN_DIRECTORY, SAVE:
var path:String = cast result; var path:String = cast result;
@@ -108,6 +112,10 @@ class FileDialog {
case OPEN: case OPEN:
path = lime_file_dialog_open_file (filter, defaultPath); path = lime_file_dialog_open_file (filter, defaultPath);
case OPEN_DIRECTORY:
path = lime_file_dialog_open_directory (filter, defaultPath);
case OPEN_MULTIPLE: case OPEN_MULTIPLE:
@@ -121,7 +129,7 @@ class FileDialog {
switch (type) { switch (type) {
case OPEN, SAVE: case OPEN, OPEN_DIRECTORY, SAVE:
if (path != null) { if (path != null) {
@@ -301,6 +309,7 @@ class FileDialog {
#if (cpp || neko || nodejs) #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_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_open_files (filter:String, defaultPath:String):Dynamic;
@:cffi private static function lime_file_dialog_save_file (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;
OPEN_MULTIPLE; OPEN_MULTIPLE;
SAVE; SAVE;
OPEN_DIRECTORY;
} }

View File

@@ -12,6 +12,7 @@ namespace lime {
public: 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 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 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); 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) { value lime_file_dialog_open_file (HxString filter, HxString defaultPath) {
#ifdef LIME_NFD #ifdef LIME_NFD
@@ -1410,6 +1421,7 @@ namespace lime {
DEFINE_PRIME1 (lime_cffi_set_finalizer); DEFINE_PRIME1 (lime_cffi_set_finalizer);
DEFINE_PRIME0 (lime_clipboard_get_text); DEFINE_PRIME0 (lime_clipboard_get_text);
DEFINE_PRIME1v (lime_clipboard_set_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_file);
DEFINE_PRIME2 (lime_file_dialog_open_files); DEFINE_PRIME2 (lime_file_dialog_open_files);
DEFINE_PRIME2 (lime_file_dialog_save_file); DEFINE_PRIME2 (lime_file_dialog_save_file);

View File

@@ -6,6 +6,34 @@
namespace lime { 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) { const char* FileDialog::OpenFile (const char* filter, const char* defaultPath) {
nfdchar_t *savePath = 0; nfdchar_t *savePath = 0;