From 1e786740cfd5944d63a7628baebae17dfdce0328 Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Mon, 17 Jun 2013 14:05:10 +0000 Subject: [PATCH] Iniciando implementação da função que permite selecionar um arquivo no plugin rexx --- src/plugins/rx3270/rexx_methods.cc | 39 +++++++++++++++++++++++++++++++++++++++ src/plugins/rx3270/rx3270.cc | 5 +++++ src/plugins/rx3270/rx3270.cls | 1 + src/plugins/rx3270/rx3270.h | 4 ++++ src/plugins/rx3270/rxapimain.cc | 1 + 5 files changed, 50 insertions(+), 0 deletions(-) diff --git a/src/plugins/rx3270/rexx_methods.cc b/src/plugins/rx3270/rexx_methods.cc index 3db421e..0618d0b 100644 --- a/src/plugins/rx3270/rexx_methods.cc +++ b/src/plugins/rx3270/rexx_methods.cc @@ -33,6 +33,7 @@ */ #include "rx3270.h" + #include #include #include #include @@ -527,3 +528,41 @@ RexxMethod5(int, rx3270_method_popup, CSELF, sessionPtr, CSTRING, s_id, CSTRING, return hSession->popup_dialog(id, title, message, "%s", det ? det : ""); } + +RexxMethod5(RexxStringObject, rx3270_method_get_filename, CSELF, sessionPtr, CSTRING, action_name, CSTRING, title, OPTIONAL_CSTRING, extension, OPTIONAL_CSTRING, filename) +{ + static const struct _action + { + const gchar * action_name; + GtkFileChooserAction id; + } action[] = + { + { "open", GTK_FILE_CHOOSER_ACTION_OPEN }, + { "save", GTK_FILE_CHOOSER_ACTION_SAVE }, + { "folder", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER }, + { "select_folder", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER }, + { "create_folder", GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER } + }; + + GtkFileChooserAction id = GTK_FILE_CHOOSER_ACTION_OPEN; + char * ret; + + for(int f=0;f<5;f++) + { + if(!strcasecmp(action_name,action[f].action_name)) + { + id = action[f].id; + } + } + + ret = ((rx3270 *) sessionPtr)->file_chooser_dialog(id, title, extension,filename); + if(ret) + { + RexxStringObject obj = context->String(ret); + ((rx3270 *) sessionPtr)->free(ret); + return obj; + } + + return context->String(""); +} + diff --git a/src/plugins/rx3270/rx3270.cc b/src/plugins/rx3270/rx3270.cc index add0bf1..3a495ec 100644 --- a/src/plugins/rx3270/rx3270.cc +++ b/src/plugins/rx3270/rx3270.cc @@ -203,3 +203,8 @@ int rx3270::popup_dialog(LIB3270_NOTIFY id , const char *title, const char *mess return -1; } +char * rx3270::file_chooser_dialog(GtkFileChooserAction action, const char *title, const char *extension, const char *filename) +{ + return NULL; +} + diff --git a/src/plugins/rx3270/rx3270.cls b/src/plugins/rx3270/rx3270.cls index 0ba87f4..018a8ac 100644 --- a/src/plugins/rx3270/rx3270.cls +++ b/src/plugins/rx3270/rx3270.cls @@ -83,6 +83,7 @@ ::METHOD SETCLIPBOARD EXTERNAL "LIBRARY rx3270 rx3270_method_set_clipboard" ::METHOD POPUP EXTERNAL "LIBRARY rx3270 rx3270_method_popup" +::METHOD GETFILENAME EXTERNAL "LIBRARY rx3270 rx3270_method_get_filename" ::method waitForStringAt use arg row, col, key, timeout diff --git a/src/plugins/rx3270/rx3270.h b/src/plugins/rx3270/rx3270.h index 51482d8..3c85145 100644 --- a/src/plugins/rx3270/rx3270.h +++ b/src/plugins/rx3270/rx3270.h @@ -48,6 +48,7 @@ #include #include #include + #include #ifndef ETIMEDOUT #define ETIMEDOUT -1 @@ -116,6 +117,7 @@ REXX_METHOD_PROTOTYPE(rx3270_method_get_clipboard); REXX_METHOD_PROTOTYPE(rx3270_method_set_clipboard); REXX_METHOD_PROTOTYPE(rx3270_method_popup); + REXX_METHOD_PROTOTYPE(rx3270_method_get_filename); REXX_METHOD_PROTOTYPE(rx3270_method_get_cursor_addr); REXX_METHOD_PROTOTYPE(rx3270_method_set_cursor_addr); REXX_METHOD_PROTOTYPE(rx3270_method_input_text); @@ -200,7 +202,9 @@ virtual char * get_clipboard(void); virtual int set_clipboard(const char *text); + // Dialogs virtual int popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...); + virtual char * file_chooser_dialog(GtkFileChooserAction action, const char *title, const char *extension, const char *filename); }; diff --git a/src/plugins/rx3270/rxapimain.cc b/src/plugins/rx3270/rxapimain.cc index 6051547..361de74 100644 --- a/src/plugins/rx3270/rxapimain.cc +++ b/src/plugins/rx3270/rxapimain.cc @@ -154,6 +154,7 @@ RexxMethodEntry rx3270_methods[] = REXX_METHOD(rx3270_method_set_clipboard, rx3270_method_set_clipboard ), REXX_METHOD(rx3270_method_popup, rx3270_method_popup ), + REXX_METHOD(rx3270_method_get_filename, rx3270_method_get_filename ), REXX_METHOD(rx3270_method_get_cursor_addr, rx3270_method_get_cursor_addr ), REXX_METHOD(rx3270_method_set_cursor_addr, rx3270_method_set_cursor_addr ), -- libgit2 0.21.2