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,6 +105,7 @@
105 char * get_copy(void); 105 char * get_copy(void);
106 106
107 char * get_clipboard(void); 107 char * get_clipboard(void);
  108 + int set_clipboard(const char *text);
108 109
109 protected: 110 protected:
110 111
@@ -281,6 +282,12 @@ @@ -281,6 +282,12 @@
281 return gtk_clipboard_wait_for_text(gtk_widget_get_clipboard(pw3270_get_toplevel(),GDK_SELECTION_CLIPBOARD)); 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 void plugin::free(void *ptr) 291 void plugin::free(void *ptr)
285 { 292 {
286 g_free(ptr); 293 g_free(ptr);
src/plugins/rx3270/rexx_methods.cc
@@ -481,3 +481,13 @@ RexxMethod1(RexxStringObject, rx3270_method_get_clipboard, CSELF, sessionPtr) @@ -481,3 +481,13 @@ RexxMethod1(RexxStringObject, rx3270_method_get_clipboard, CSELF, sessionPtr)
481 return context->String(""); 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,6 +188,11 @@ char * rx3270::get_clipboard(void)
188 return NULL; 188 return NULL;
189 } 189 }
190 190
  191 +int rx3270::set_clipboard(const char *text)
  192 +{
  193 + return EINVAL;
  194 +}
  195 +
191 void rx3270::free(void *ptr) 196 void rx3270::free(void *ptr)
192 { 197 {
193 free(ptr); 198 free(ptr);
src/plugins/rx3270/rx3270.cls
@@ -80,6 +80,7 @@ @@ -80,6 +80,7 @@
80 ::METHOD SETSELECTION EXTERNAL "LIBRARY rx3270 rx3270_method_set_selection" 80 ::METHOD SETSELECTION EXTERNAL "LIBRARY rx3270 rx3270_method_set_selection"
81 81
82 ::METHOD GETCLIPBOARD EXTERNAL "LIBRARY rx3270 rx3270_method_get_clipboard" 82 ::METHOD GETCLIPBOARD EXTERNAL "LIBRARY rx3270 rx3270_method_get_clipboard"
  83 +::METHOD SETCLIPBOARD EXTERNAL "LIBRARY rx3270 rx3270_method_set_clipboard"
83 84
84 ::method waitForStringAt 85 ::method waitForStringAt
85 use arg row, col, key, timeout 86 use arg row, col, key, timeout
src/plugins/rx3270/rx3270.h
@@ -113,6 +113,7 @@ @@ -113,6 +113,7 @@
113 REXX_METHOD_PROTOTYPE(rx3270_method_get_selection); 113 REXX_METHOD_PROTOTYPE(rx3270_method_get_selection);
114 REXX_METHOD_PROTOTYPE(rx3270_method_set_selection); 114 REXX_METHOD_PROTOTYPE(rx3270_method_set_selection);
115 REXX_METHOD_PROTOTYPE(rx3270_method_get_clipboard); 115 REXX_METHOD_PROTOTYPE(rx3270_method_get_clipboard);
  116 + REXX_METHOD_PROTOTYPE(rx3270_method_set_clipboard);
116 REXX_METHOD_PROTOTYPE(rx3270_method_get_cursor_addr); 117 REXX_METHOD_PROTOTYPE(rx3270_method_get_cursor_addr);
117 REXX_METHOD_PROTOTYPE(rx3270_method_set_cursor_addr); 118 REXX_METHOD_PROTOTYPE(rx3270_method_set_cursor_addr);
118 REXX_METHOD_PROTOTYPE(rx3270_method_input_text); 119 REXX_METHOD_PROTOTYPE(rx3270_method_input_text);
@@ -195,6 +196,7 @@ @@ -195,6 +196,7 @@
195 virtual char * get_copy(void); 196 virtual char * get_copy(void);
196 197
197 virtual char * get_clipboard(void); 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,6 +151,7 @@ RexxMethodEntry rx3270_methods[] =
151 REXX_METHOD(rx3270_method_get_selection, rx3270_method_get_selection ), 151 REXX_METHOD(rx3270_method_get_selection, rx3270_method_get_selection ),
152 REXX_METHOD(rx3270_method_set_selection, rx3270_method_set_selection ), 152 REXX_METHOD(rx3270_method_set_selection, rx3270_method_set_selection ),
153 REXX_METHOD(rx3270_method_get_clipboard, rx3270_method_get_clipboard ), 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 REXX_METHOD(rx3270_method_get_cursor_addr, rx3270_method_get_cursor_addr ), 156 REXX_METHOD(rx3270_method_get_cursor_addr, rx3270_method_get_cursor_addr ),
156 REXX_METHOD(rx3270_method_set_cursor_addr, rx3270_method_set_cursor_addr ), 157 REXX_METHOD(rx3270_method_set_cursor_addr, rx3270_method_set_cursor_addr ),
src/plugins/rx3270/sample/clipboard.rex
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 return 0 13 return 0
14 end 14 end
15 15
16 - text = host~GetClipboard() 16 + text = strip(host~GetClipboard())
17 if text = "" then 17 if text = "" then
18 do 18 do
19 say "Clipboard is empty" 19 say "Clipboard is empty"
@@ -38,45 +38,36 @@ @@ -38,45 +38,36 @@
38 38
39 field_len = host~GetFieldLen() 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 do 46 do
43 - /* Text is smaller than field, just insert it */  
44 - host~input(text) 47 + s = strip(text)
  48 + text = ""
45 end 49 end
46 - else 50 +
  51 + when p = 0 then
47 do 52 do
48 - /* Text is bigger than field, split ... */  
49 s = strip(left(text,field_len)) 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 end 60 end
70 61
71 - say text 62 + /* Insert new string */
  63 + host~input(s)
72 64
73 if next <= cursor then 65 if next <= cursor then
74 do 66 do
75 /* Next field is before the original position */ 67 /* Next field is before the original position */
76 - leave 68 + return 0
77 end 69 end
78 70
79 - text = ""  
80 end 71 end
81 72
82 return 0 73 return 0