diff --git a/redo/dialog_darwin.go b/redo/dialog_darwin.go new file mode 100644 index 0000000..9e65714 --- /dev/null +++ b/redo/dialog_darwin.go @@ -0,0 +1,19 @@ +// 19 august 2014 + +package ui + +import ( + "unsafe" +) + +// #include "objc_darwin.h" +import "C" + +func openFile() string { + fname := C.openFile() + if fname == nil { + return "" + } + defer C.free(unsafe.Pointer(fname)) + return C.GoString(fname) +} diff --git a/redo/dialog_darwin.m b/redo/dialog_darwin.m new file mode 100644 index 0000000..98b2ae8 --- /dev/null +++ b/redo/dialog_darwin.m @@ -0,0 +1,29 @@ +// 19 august 2014 + +#import "objc_darwin.h" +#import + +char *openFile(void) +{ + NSOpenPanel *op; + NSInteger ret; + + op = [NSOpenPanel openPanel]; + [op setCanChooseFiles:YES]; + [op setCanChooseDirectories:NO]; + [op setResolvesAliases:NO]; + [op setAllowsMultipleSelection:NO]; + [op setShowsHiddenFiles:YES]; + [op setCanSelectHiddenExtension:NO]; + [op setExtensionHidden:NO]; + [op setAllowsOtherFileTypes:YES]; + [op setTreatsFilePackagesAsDirectories:YES]; + // disable custom events + // TODO doesn't seem to work + dispatch_suspend(dispatch_get_main_queue()); + ret = [op runModal]; + dispatch_resume(dispatch_get_main_queue()); + if (ret != NSFileHandlingPanelOKButton) + return NULL; + return strdup([[[op URL] path] UTF8String]); +} diff --git a/redo/dialog_unix.go b/redo/dialog_unix.go index 552f485..6a16ac6 100644 --- a/redo/dialog_unix.go +++ b/redo/dialog_unix.go @@ -1,3 +1,5 @@ +// +build !windows,!darwin + // 19 august 2014 package ui diff --git a/redo/objc_darwin.h b/redo/objc_darwin.h index f828445..53cb65d 100644 --- a/redo/objc_darwin.h +++ b/redo/objc_darwin.h @@ -128,4 +128,7 @@ extern void disableAutocorrect(id); /* imagerep_darwin.m */ extern id toImageListImage(void *, intptr_t, intptr_t, intptr_t); +/* dialog_darwin.m */ +extern char *openFile(void); + #endif