From 0edddbafd25482f1e33be4f34911209494ad1af6 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Mon, 15 Dec 2014 15:16:41 -0800 Subject: [PATCH] file-picker: adding start of cross-platform file-picker. --- extra/file-picker/file-picker.factor | 7 +++ extra/file-picker/linux/linux.factor | 56 ++++++++++++++++++++++++ extra/file-picker/linux/platforms.txt | 1 + extra/file-picker/macosx/macosx.factor | 6 +++ extra/file-picker/macosx/platforms.txt | 1 + extra/file-picker/windows/platforms.txt | 1 + extra/file-picker/windows/windows.factor | 1 + 7 files changed, 73 insertions(+) create mode 100644 extra/file-picker/file-picker.factor create mode 100644 extra/file-picker/linux/linux.factor create mode 100644 extra/file-picker/linux/platforms.txt create mode 100644 extra/file-picker/macosx/macosx.factor create mode 100644 extra/file-picker/macosx/platforms.txt create mode 100644 extra/file-picker/windows/platforms.txt create mode 100644 extra/file-picker/windows/windows.factor diff --git a/extra/file-picker/file-picker.factor b/extra/file-picker/file-picker.factor new file mode 100644 index 0000000000..d5bc6c404f --- /dev/null +++ b/extra/file-picker/file-picker.factor @@ -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 diff --git a/extra/file-picker/linux/linux.factor b/extra/file-picker/linux/linux.factor new file mode 100644 index 0000000000..9ad1138c75 --- /dev/null +++ b/extra/file-picker/linux/linux.factor @@ -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 + + ( title action -- dialog ) + [ + utf8 encode + f + GTK_FILE_CHOOSER_ACTION_OPEN + "Cancel" utf8 encode + GTK_RESPONSE_CANCEL int + ] [ + utf8 encode + GTK_RESPONSE_ACCEPT int + f + gtk_file_chooser_dialog_new + >k_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" + run-and-get-filename + ] with-destructors ; + +M: linux save-file-dialog + [ + "Save File" "Save" + dup t gtk_file_chooser_set_do_overwrite_confirmation + dup rot gtk_file_chooser_set_filename drop + run-and-get-filename + ] with-destructors ; diff --git a/extra/file-picker/linux/platforms.txt b/extra/file-picker/linux/platforms.txt new file mode 100644 index 0000000000..a08e1f35eb --- /dev/null +++ b/extra/file-picker/linux/platforms.txt @@ -0,0 +1 @@ +linux diff --git a/extra/file-picker/macosx/macosx.factor b/extra/file-picker/macosx/macosx.factor new file mode 100644 index 0000000000..490c9080d1 --- /dev/null +++ b/extra/file-picker/macosx/macosx.factor @@ -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 ; diff --git a/extra/file-picker/macosx/platforms.txt b/extra/file-picker/macosx/platforms.txt new file mode 100644 index 0000000000..6e806f449e --- /dev/null +++ b/extra/file-picker/macosx/platforms.txt @@ -0,0 +1 @@ +macosx diff --git a/extra/file-picker/windows/platforms.txt b/extra/file-picker/windows/platforms.txt new file mode 100644 index 0000000000..8e1a55995e --- /dev/null +++ b/extra/file-picker/windows/platforms.txt @@ -0,0 +1 @@ +windows diff --git a/extra/file-picker/windows/windows.factor b/extra/file-picker/windows/windows.factor new file mode 100644 index 0000000000..d8a9dfacb6 --- /dev/null +++ b/extra/file-picker/windows/windows.factor @@ -0,0 +1 @@ +IN: file-picker.windows