file-picker: adding start of cross-platform file-picker.

db4
John Benediktsson 2014-12-15 15:16:41 -08:00
parent c2c722891e
commit 0edddbafd2
7 changed files with 73 additions and 0 deletions

View File

@ -0,0 +1,7 @@
USING: accessors sequences system vocabs ;
IN: file-picker
HOOK: open-file-dialog os ( -- paths )
HOOK: save-file-dialog os ( path -- paths )
os name>> "file-picker." prepend require

View File

@ -0,0 +1,56 @@
USING: alien.c-types alien.data alien.strings alien.syntax
destructors file-picker gobject-introspection.standard-types
gtk.ffi io.encodings.string io.encodings.utf8 kernel system ;
IN: file-picker.linux
<PRIVATE
LIBRARY: gtk
FUNCTION: GtkWidget* gtk_file_chooser_dialog_new (
gchar* title,
GtkWindow* parent,
GtkFileChooserAction action,
gchar* first_button_text,
gint* first_button_response,
gchar* second_button_text,
gint* second_button_response,
void* sentinel ) ;
: <gtk-file-chooser-dialog> ( title action -- dialog )
[
utf8 encode
f
GTK_FILE_CHOOSER_ACTION_OPEN
"Cancel" utf8 encode
GTK_RESPONSE_CANCEL int <ref>
] [
utf8 encode
GTK_RESPONSE_ACCEPT int <ref>
f
gtk_file_chooser_dialog_new
&gtk_widget_destroy
] bi* ;
: run-and-get-filename ( dialog -- path/f )
dup gtk_dialog_run GTK_RESPONSE_ACCEPT = [
gtk_file_chooser_get_filename alien>native-string
] [
drop f
] if ;
PRIVATE>
M: linux open-file-dialog
[
"Open File" "Open" <gtk-file-chooser-dialog>
run-and-get-filename
] with-destructors ;
M: linux save-file-dialog
[
"Save File" "Save" <gtk-file-chooser-dialog>
dup t gtk_file_chooser_set_do_overwrite_confirmation
dup rot gtk_file_chooser_set_filename drop
run-and-get-filename
] with-destructors ;

View File

@ -0,0 +1 @@
linux

View File

@ -0,0 +1,6 @@
USING: cocoa.dialogs file-picker system ;
IN: file-picker.macosx
M: macosx open-file-dialog open-panel ;
M: macosx save-file-dialog save-panel ;

View File

@ -0,0 +1 @@
macosx

View File

@ -0,0 +1 @@
windows

View File

@ -0,0 +1 @@
IN: file-picker.windows