Commit 6c6092190e1933d2982105f6de61c511738731b9
1 parent
0a3c9668
Exists in
master
and in
5 other branches
Incluindo suporte para janelas popup no plugin rexx
Showing
13 changed files
with
114 additions
and
32 deletions
Show diff stats
src/include/lib3270.h
... | ... | @@ -275,21 +275,6 @@ |
275 | 275 | |
276 | 276 | #define LIB3270_SSL_FAILED LIB3270_SSL_UNSECURE |
277 | 277 | |
278 | - /** | |
279 | - * Notification message types. | |
280 | - * | |
281 | - */ | |
282 | - typedef enum _LIB3270_NOTIFY | |
283 | - { | |
284 | - LIB3270_NOTIFY_INFO, /**< Simple information dialog */ | |
285 | - LIB3270_NOTIFY_WARNING, | |
286 | - LIB3270_NOTIFY_ERROR, | |
287 | - LIB3270_NOTIFY_CRITICAL, /**< Critical error, user can abort application */ | |
288 | - | |
289 | - LIB3270_NOTIFY_USER /**< Reserved, always the last one */ | |
290 | - } LIB3270_NOTIFY; | |
291 | - | |
292 | - | |
293 | 278 | #ifdef __cplusplus |
294 | 279 | extern "C" { |
295 | 280 | #endif |
... | ... | @@ -1018,17 +1003,6 @@ |
1018 | 1003 | */ |
1019 | 1004 | LIB3270_EXPORT const char * lib3270_get_revision(void); |
1020 | 1005 | |
1021 | - /** | |
1022 | - * Pop up an error dialog, based on an error number. | |
1023 | - * | |
1024 | - * @param hSession Session handle | |
1025 | - * @param errn Error number (errno). | |
1026 | - * @param fmt Message format | |
1027 | - * @param ... Arguments for message | |
1028 | - */ | |
1029 | - LIB3270_EXPORT void lib3270_popup_an_errno(H3270 *hSession, int errn, const char *fmt, ...); | |
1030 | - | |
1031 | - | |
1032 | 1006 | LIB3270_EXPORT char * lib3270_vsprintf(const char *fmt, va_list args); |
1033 | 1007 | |
1034 | 1008 | LIB3270_EXPORT int lib3270_clear_operator_error(H3270 *hSession); | ... | ... |
src/include/lib3270/popup.h
... | ... | @@ -37,9 +37,35 @@ |
37 | 37 | extern "C" { |
38 | 38 | #endif |
39 | 39 | |
40 | + /** | |
41 | + * Notification message types. | |
42 | + * | |
43 | + */ | |
44 | + typedef enum _LIB3270_NOTIFY | |
45 | + { | |
46 | + LIB3270_NOTIFY_INFO, /**< Simple information dialog */ | |
47 | + LIB3270_NOTIFY_WARNING, | |
48 | + LIB3270_NOTIFY_ERROR, | |
49 | + LIB3270_NOTIFY_CRITICAL, /**< Critical error, user can abort application */ | |
50 | + | |
51 | + LIB3270_NOTIFY_USER /**< Reserved, always the last one */ | |
52 | + } LIB3270_NOTIFY; | |
53 | + | |
40 | 54 | LIB3270_EXPORT void lib3270_set_popup_handler(int (*popup_handler)(H3270 *, void *, LIB3270_NOTIFY, const char *, const char *, const char *, va_list)); |
55 | + | |
56 | + /** | |
57 | + * Pop up an error dialog, based on an error number. | |
58 | + * | |
59 | + * @param hSession Session handle | |
60 | + * @param errn Error number (errno). | |
61 | + * @param fmt Message format | |
62 | + * @param ... Arguments for message | |
63 | + */ | |
64 | + LIB3270_EXPORT void lib3270_popup_an_errno(H3270 *hSession, int errn, const char *fmt, ...); | |
65 | + | |
41 | 66 | LIB3270_EXPORT void lib3270_popup_dialog(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...); |
42 | 67 | |
68 | + LIB3270_EXPORT void lib3270_popup_va(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, va_list); | |
43 | 69 | |
44 | 70 | #ifdef __cplusplus |
45 | 71 | } | ... | ... |
src/include/lib3270/session.h
src/include/pw3270/v3270.h
src/lib3270/screen.c
... | ... | @@ -845,14 +845,19 @@ LIB3270_EXPORT void lib3270_set_popup_handler(int (*handler)(H3270 *, void *, LI |
845 | 845 | LIB3270_EXPORT void lib3270_popup_dialog(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...) |
846 | 846 | { |
847 | 847 | va_list args; |
848 | + va_start(args, fmt); | |
849 | + lib3270_popup_va(session, id, title, message, fmt, args); | |
850 | + va_end(args); | |
851 | +} | |
852 | + | |
853 | +LIB3270_EXPORT void lib3270_popup_va(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, va_list args) | |
854 | +{ | |
848 | 855 | |
849 | 856 | CHECK_SESSION_HANDLE(session); |
850 | 857 | |
851 | 858 | trace("%s: title=%s msg=%s",__FUNCTION__,"3270 Error",message); |
852 | 859 | |
853 | - va_start(args, fmt); | |
854 | 860 | popup_handler(session,session->widget,id,title ? title : _( "3270 Error" ), message,fmt,args); |
855 | - va_end(args); | |
856 | 861 | } |
857 | 862 | |
858 | 863 | LIB3270_EXPORT int lib3270_is_protected(H3270 *h, unsigned int baddr) | ... | ... |
src/plugins/rx3270/local.cc
... | ... | @@ -88,6 +88,8 @@ |
88 | 88 | int get_field_len(int baddr = -1); |
89 | 89 | int get_next_unprotected(int baddr = -1); |
90 | 90 | |
91 | + int popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...); | |
92 | + | |
91 | 93 | private: |
92 | 94 | |
93 | 95 | const char * (*_get_version)(void); |
... | ... | @@ -114,6 +116,7 @@ |
114 | 116 | int (*_get_cursor_addr)(H3270 *h); |
115 | 117 | int (*_emulate_input)(H3270 *session, const char *s, int len, int pasting); |
116 | 118 | int (*_get_next_unprotected)(H3270 *hSession, int baddr0); |
119 | + void (*_popup_va)(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, va_list); | |
117 | 120 | |
118 | 121 | #ifdef WIN32 |
119 | 122 | HMODULE hModule; |
... | ... | @@ -247,7 +250,7 @@ dynamic::dynamic() |
247 | 250 | { (void **) & _get_cursor_addr, "lib3270_get_cursor_address" }, |
248 | 251 | { (void **) & _emulate_input, "lib3270_emulate_input" }, |
249 | 252 | { (void **) & _get_next_unprotected, "lib3270_get_next_unprotected" }, |
250 | - | |
253 | + { (void **) & _popup_va, "lib3270_popup_va" }, | |
251 | 254 | }; |
252 | 255 | |
253 | 256 | // Load lib3270.dll |
... | ... | @@ -572,3 +575,16 @@ int dynamic::get_next_unprotected(int baddr) |
572 | 575 | return _get_next_unprotected(hSession,baddr); |
573 | 576 | return -1; |
574 | 577 | } |
578 | + | |
579 | +int dynamic::popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...) | |
580 | +{ | |
581 | + if(hModule) | |
582 | + { | |
583 | + va_list args; | |
584 | + va_start(args, fmt); | |
585 | + _popup_va(hSession, id, title, message, fmt, args); | |
586 | + va_end(args); | |
587 | + return 0; | |
588 | + } | |
589 | + return -1; | |
590 | +} | ... | ... |
src/plugins/rx3270/pluginmain.cc
... | ... | @@ -107,6 +107,8 @@ |
107 | 107 | char * get_clipboard(void); |
108 | 108 | int set_clipboard(const char *text); |
109 | 109 | |
110 | + int popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...); | |
111 | + | |
110 | 112 | protected: |
111 | 113 | |
112 | 114 | private: |
... | ... | @@ -313,6 +315,15 @@ |
313 | 315 | return lib3270_get_next_unprotected(hSession,baddr); |
314 | 316 | } |
315 | 317 | |
318 | +int plugin::popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...) | |
319 | +{ | |
320 | + va_list args; | |
321 | + va_start(args, fmt); | |
322 | + lib3270_popup_va(hSession, id, title, message, fmt, args); | |
323 | + va_end(args); | |
324 | + return 0; | |
325 | +} | |
326 | + | |
316 | 327 | static int REXXENTRY Rexx_IO_exit(RexxExitContext *context, int exitnumber, int subfunction, PEXIT parmBlock) |
317 | 328 | { |
318 | 329 | trace("%s call with ExitNumber: %d Subfunction: %d",__FUNCTION__,(int) exitnumber, (int) subfunction); | ... | ... |
src/plugins/rx3270/rexx_methods.cc
... | ... | @@ -35,6 +35,7 @@ |
35 | 35 | #include "rx3270.h" |
36 | 36 | #include <time.h> |
37 | 37 | #include <string.h> |
38 | + #include <ctype.h> | |
38 | 39 | |
39 | 40 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
40 | 41 | |
... | ... | @@ -491,3 +492,38 @@ RexxMethod2(int, rx3270_method_set_clipboard, CSELF, sessionPtr, CSTRING, text) |
491 | 492 | return -1; |
492 | 493 | } |
493 | 494 | |
495 | + | |
496 | +RexxMethod5(int, rx3270_method_popup, CSELF, sessionPtr, CSTRING, s_id, CSTRING, title, CSTRING, message, OPTIONAL_CSTRING, det) | |
497 | +{ | |
498 | + LIB3270_NOTIFY id = LIB3270_NOTIFY_INFO; | |
499 | + rx3270 * hSession = (rx3270 *) sessionPtr; | |
500 | + | |
501 | + if(!hSession) | |
502 | + return -1; | |
503 | + | |
504 | + if(*s_id) | |
505 | + { | |
506 | + static const struct _descr | |
507 | + { | |
508 | + char str; | |
509 | + LIB3270_NOTIFY id; | |
510 | + } descr[] = | |
511 | + { | |
512 | + { 'I', LIB3270_NOTIFY_INFO }, | |
513 | + { 'W', LIB3270_NOTIFY_WARNING }, | |
514 | + { 'E', LIB3270_NOTIFY_ERROR }, | |
515 | + { 'C', LIB3270_NOTIFY_CRITICAL }, | |
516 | + }; | |
517 | + | |
518 | + for(int f=0;f<4;f++) | |
519 | + { | |
520 | + if(toupper(*s_id) == descr[f].str) | |
521 | + { | |
522 | + id = descr[f].id; | |
523 | + trace("Using mode %c (%d)",toupper(*s_id),(int) id); | |
524 | + } | |
525 | + } | |
526 | + } | |
527 | + | |
528 | + return hSession->popup_dialog(id, title, message, "%s", det ? det : ""); | |
529 | +} | ... | ... |
src/plugins/rx3270/rx3270.cc
... | ... | @@ -44,7 +44,7 @@ |
44 | 44 | #endif // HAVE_SYSLOG |
45 | 45 | |
46 | 46 | #include <string.h> |
47 | - | |
47 | + #include <stdarg.h> | |
48 | 48 | |
49 | 49 | static rx3270 * factory_default(const char *type); |
50 | 50 | |
... | ... | @@ -198,4 +198,8 @@ void rx3270::free(void *ptr) |
198 | 198 | free(ptr); |
199 | 199 | } |
200 | 200 | |
201 | +int rx3270::popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...) | |
202 | +{ | |
203 | + return -1; | |
204 | +} | |
201 | 205 | ... | ... |
src/plugins/rx3270/rx3270.cls
... | ... | @@ -82,6 +82,8 @@ |
82 | 82 | ::METHOD GETCLIPBOARD EXTERNAL "LIBRARY rx3270 rx3270_method_get_clipboard" |
83 | 83 | ::METHOD SETCLIPBOARD EXTERNAL "LIBRARY rx3270 rx3270_method_set_clipboard" |
84 | 84 | |
85 | +::METHOD POPUP EXTERNAL "LIBRARY rx3270 rx3270_method_popup" | |
86 | + | |
85 | 87 | ::method waitForStringAt |
86 | 88 | use arg row, col, key, timeout |
87 | 89 | if datatype(timeout) <> "NUM" | ... | ... |
src/plugins/rx3270/rx3270.h
... | ... | @@ -46,6 +46,7 @@ |
46 | 46 | #include <stdio.h> |
47 | 47 | #include <lib3270.h> |
48 | 48 | #include <lib3270/log.h> |
49 | + #include <lib3270/popup.h> | |
49 | 50 | #include <stdarg.h> |
50 | 51 | |
51 | 52 | #ifndef ETIMEDOUT |
... | ... | @@ -114,6 +115,7 @@ |
114 | 115 | REXX_METHOD_PROTOTYPE(rx3270_method_set_selection); |
115 | 116 | REXX_METHOD_PROTOTYPE(rx3270_method_get_clipboard); |
116 | 117 | REXX_METHOD_PROTOTYPE(rx3270_method_set_clipboard); |
118 | + REXX_METHOD_PROTOTYPE(rx3270_method_popup); | |
117 | 119 | REXX_METHOD_PROTOTYPE(rx3270_method_get_cursor_addr); |
118 | 120 | REXX_METHOD_PROTOTYPE(rx3270_method_set_cursor_addr); |
119 | 121 | REXX_METHOD_PROTOTYPE(rx3270_method_input_text); |
... | ... | @@ -198,6 +200,8 @@ |
198 | 200 | virtual char * get_clipboard(void); |
199 | 201 | virtual int set_clipboard(const char *text); |
200 | 202 | |
203 | + virtual int popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...); | |
204 | + | |
201 | 205 | }; |
202 | 206 | |
203 | 207 | rx3270 * create_lib3270_instance(void); | ... | ... |
src/plugins/rx3270/rxapimain.cc
... | ... | @@ -153,6 +153,8 @@ RexxMethodEntry rx3270_methods[] = |
153 | 153 | REXX_METHOD(rx3270_method_get_clipboard, rx3270_method_get_clipboard ), |
154 | 154 | REXX_METHOD(rx3270_method_set_clipboard, rx3270_method_set_clipboard ), |
155 | 155 | |
156 | + REXX_METHOD(rx3270_method_popup, rx3270_method_popup ), | |
157 | + | |
156 | 158 | REXX_METHOD(rx3270_method_get_cursor_addr, rx3270_method_get_cursor_addr ), |
157 | 159 | REXX_METHOD(rx3270_method_set_cursor_addr, rx3270_method_set_cursor_addr ), |
158 | 160 | REXX_METHOD(rx3270_method_input_text, rx3270_method_input_text ), | ... | ... |
src/plugins/rx3270/sample/clipboard.rex
... | ... | @@ -9,7 +9,7 @@ |
9 | 9 | |
10 | 10 | if host~connected() = 0 then |
11 | 11 | do |
12 | - say "Disconnected from host" | |
12 | + host~popup("error","Can't start script","Disconnected from host") | |
13 | 13 | return 0 |
14 | 14 | end |
15 | 15 | |
... | ... | @@ -22,7 +22,7 @@ |
22 | 22 | |
23 | 23 | if host~WaitForReady(60) <> 0 then |
24 | 24 | do |
25 | - say "Timeout waiting for host" | |
25 | + host~popup("error","Failed","Timeout waiting for host response") | |
26 | 26 | return 0 |
27 | 27 | end |
28 | 28 | ... | ... |