Commit cab7a83b37e80071a4c6eb3cdb23b51711cf5642

Authored by perry.werneck@gmail.com
1 parent 3a46fe56

Implementando metodo para setar o clipboard em rexx

src/plugins/rx3270/pluginmain.cc
... ... @@ -105,6 +105,7 @@
105 105 char * get_copy(void);
106 106  
107 107 char * get_clipboard(void);
  108 + int set_clipboard(const char *text);
108 109  
109 110 protected:
110 111  
... ... @@ -281,6 +282,12 @@
281 282 return gtk_clipboard_wait_for_text(gtk_widget_get_clipboard(pw3270_get_toplevel(),GDK_SELECTION_CLIPBOARD));
282 283 }
283 284  
  285 + int plugin::set_clipboard(const char *text)
  286 + {
  287 + gtk_clipboard_set_text(gtk_widget_get_clipboard(pw3270_get_toplevel(),GDK_SELECTION_CLIPBOARD),(gchar *) text, -1);
  288 + return 0;
  289 + }
  290 +
284 291 void plugin::free(void *ptr)
285 292 {
286 293 g_free(ptr);
... ...
src/plugins/rx3270/rexx_methods.cc
... ... @@ -481,3 +481,13 @@ RexxMethod1(RexxStringObject, rx3270_method_get_clipboard, CSELF, sessionPtr)
481 481 return context->String("");
482 482 }
483 483  
  484 +RexxMethod2(int, rx3270_method_set_clipboard, CSELF, sessionPtr, CSTRING, text)
  485 +{
  486 + rx3270 * hSession = (rx3270 *) sessionPtr;
  487 +
  488 + if(hSession)
  489 + return hSession->set_clipboard(text);
  490 +
  491 + return -1;
  492 +}
  493 +
... ...
src/plugins/rx3270/rx3270.cc
... ... @@ -188,6 +188,11 @@ char * rx3270::get_clipboard(void)
188 188 return NULL;
189 189 }
190 190  
  191 +int rx3270::set_clipboard(const char *text)
  192 +{
  193 + return EINVAL;
  194 +}
  195 +
191 196 void rx3270::free(void *ptr)
192 197 {
193 198 free(ptr);
... ...
src/plugins/rx3270/rx3270.cls
... ... @@ -80,6 +80,7 @@
80 80 ::METHOD SETSELECTION EXTERNAL "LIBRARY rx3270 rx3270_method_set_selection"
81 81  
82 82 ::METHOD GETCLIPBOARD EXTERNAL "LIBRARY rx3270 rx3270_method_get_clipboard"
  83 +::METHOD SETCLIPBOARD EXTERNAL "LIBRARY rx3270 rx3270_method_set_clipboard"
83 84  
84 85 ::method waitForStringAt
85 86 use arg row, col, key, timeout
... ...
src/plugins/rx3270/rx3270.h
... ... @@ -113,6 +113,7 @@
113 113 REXX_METHOD_PROTOTYPE(rx3270_method_get_selection);
114 114 REXX_METHOD_PROTOTYPE(rx3270_method_set_selection);
115 115 REXX_METHOD_PROTOTYPE(rx3270_method_get_clipboard);
  116 + REXX_METHOD_PROTOTYPE(rx3270_method_set_clipboard);
116 117 REXX_METHOD_PROTOTYPE(rx3270_method_get_cursor_addr);
117 118 REXX_METHOD_PROTOTYPE(rx3270_method_set_cursor_addr);
118 119 REXX_METHOD_PROTOTYPE(rx3270_method_input_text);
... ... @@ -195,6 +196,7 @@
195 196 virtual char * get_copy(void);
196 197  
197 198 virtual char * get_clipboard(void);
  199 + virtual int set_clipboard(const char *text);
198 200  
199 201 };
200 202  
... ...
src/plugins/rx3270/rxapimain.cc
... ... @@ -151,6 +151,7 @@ RexxMethodEntry rx3270_methods[] =
151 151 REXX_METHOD(rx3270_method_get_selection, rx3270_method_get_selection ),
152 152 REXX_METHOD(rx3270_method_set_selection, rx3270_method_set_selection ),
153 153 REXX_METHOD(rx3270_method_get_clipboard, rx3270_method_get_clipboard ),
  154 + REXX_METHOD(rx3270_method_set_clipboard, rx3270_method_set_clipboard ),
154 155  
155 156 REXX_METHOD(rx3270_method_get_cursor_addr, rx3270_method_get_cursor_addr ),
156 157 REXX_METHOD(rx3270_method_set_cursor_addr, rx3270_method_set_cursor_addr ),
... ...
src/plugins/rx3270/sample/clipboard.rex
... ... @@ -13,7 +13,7 @@
13 13 return 0
14 14 end
15 15  
16   - text = host~GetClipboard()
  16 + text = strip(host~GetClipboard())
17 17 if text = "" then
18 18 do
19 19 say "Clipboard is empty"
... ... @@ -38,45 +38,36 @@
38 38  
39 39 field_len = host~GetFieldLen()
40 40  
41   - if length(text) < field_len then
  41 + s = strip(left(text,field_len))
  42 + p = lastpos(" ",s)
  43 +
  44 + select
  45 + when length(text) < field_len then
42 46 do
43   - /* Text is smaller than field, just insert it */
44   - host~input(text)
  47 + s = strip(text)
  48 + text = ""
45 49 end
46   - else
  50 +
  51 + when p = 0 then
47 52 do
48   - /* Text is bigger than field, split ... */
49 53 s = strip(left(text,field_len))
50   - p = lastpos(" ",s)
51   - if p = 0 then
52   - do
53   - s = strip(left(text,field_len))
54   - text = substr(text,field_len+1)
55   - end
56   - else
57   - do
58   - s = strip(left(text,p))
59   - text = strip(substr(text,p+1))
60   - end
61   -
62   - /* ... and justify */
63   -
64   - /* TODO */
65   -
66   - /* Insert new string */
67   - host~input(s)
  54 + text = substr(text,field_len+1)
  55 + end
68 56  
  57 + otherwise
  58 + s = strip(left(text,p))
  59 + text = strip(substr(text,p+1))
69 60 end
70 61  
71   - say text
  62 + /* Insert new string */
  63 + host~input(s)
72 64  
73 65 if next <= cursor then
74 66 do
75 67 /* Next field is before the original position */
76   - leave
  68 + return 0
77 69 end
78 70  
79   - text = ""
80 71 end
81 72  
82 73 return 0
... ...