Commit 3d6f9f7ba5fb42126c516f67cc02e10431010df3
1 parent
44977a0a
Exists in
master
and in
5 other branches
Separando fontes para tratamento das propriedades do widget, convertendo luname numa propriedade
Showing
7 changed files
with
185 additions
and
134 deletions
Show diff stats
pw3270.cbp
... | ... | @@ -435,6 +435,9 @@ |
435 | 435 | <Option compilerVar="CC" /> |
436 | 436 | </Unit> |
437 | 437 | <Unit filename="src/pw3270/v3270/private.h" /> |
438 | + <Unit filename="src/pw3270/v3270/properties.c"> | |
439 | + <Option compilerVar="CC" /> | |
440 | + </Unit> | |
438 | 441 | <Unit filename="src/pw3270/v3270/security.c"> |
439 | 442 | <Option compilerVar="CC" /> |
440 | 443 | </Unit> | ... | ... |
src/lib3270/ctlr.c
src/pw3270/v3270/oia.c
... | ... | @@ -647,22 +647,29 @@ void v3270_update_luname(GtkWidget *widget,const gchar *name) |
647 | 647 | GdkRectangle * rect; |
648 | 648 | v3270 * terminal = GTK_V3270(widget); |
649 | 649 | |
650 | - if(!terminal->surface) | |
651 | - return; | |
650 | + if(terminal->surface) | |
651 | + { | |
652 | + cr = set_update_region(terminal,&rect,V3270_OIA_LUNAME); | |
652 | 653 | |
653 | - cr = set_update_region(terminal,&rect,V3270_OIA_LUNAME); | |
654 | + if(name) | |
655 | + { | |
656 | + cairo_move_to(cr,rect->x,rect->y+terminal->metrics.height); | |
657 | + gdk_cairo_set_source_rgba(cr,terminal->color+V3270_COLOR_OIA_LUNAME); | |
658 | + cairo_show_text(cr,name); | |
659 | + cairo_stroke(cr); | |
660 | + } | |
654 | 661 | |
655 | - if(name) | |
656 | - { | |
657 | - cairo_move_to(cr,rect->x,rect->y+terminal->metrics.height); | |
658 | - gdk_cairo_set_source_rgba(cr,terminal->color+V3270_COLOR_OIA_LUNAME); | |
659 | - cairo_show_text(cr,name); | |
660 | - cairo_stroke(cr); | |
662 | + cairo_destroy(cr); | |
663 | + | |
664 | + gtk_widget_queue_draw_area(GTK_WIDGET(terminal),rect->x,rect->y,rect->width,rect->height); | |
661 | 665 | } |
662 | 666 | |
663 | - cairo_destroy(cr); | |
667 | +#if GTK_CHECK_VERSION(2,26,0) | |
668 | + g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties[PROP_LUNAME]); | |
669 | +#else | |
670 | + g_object_notify(G_OBJECT(widget),"luname"); | |
671 | +#endif // GTK_CHECK_VERSION | |
664 | 672 | |
665 | - gtk_widget_queue_draw_area(GTK_WIDGET(terminal),rect->x,rect->y,rect->width,rect->height); | |
666 | 673 | } |
667 | 674 | |
668 | 675 | void v3270_update_message(v3270 *widget, LIB3270_MESSAGE id) | ... | ... |
src/pw3270/v3270/private.h
... | ... | @@ -51,7 +51,6 @@ G_BEGIN_DECLS |
51 | 51 | void (*activate)(GtkWidget *widget); |
52 | 52 | void (*toggle_changed)(v3270 *widget,LIB3270_TOGGLE toggle_id,gboolean toggle_state,const gchar *toggle_name); |
53 | 53 | void (*message_changed)(v3270 *widget, LIB3270_MESSAGE id); |
54 | - void (*luname_changed)(GtkWidget *widget,const gchar *luname); | |
55 | 54 | void (*popup_message)(GtkWidget *widget, LIB3270_NOTIFY id , const gchar *title, const gchar *message, const gchar *text); |
56 | 55 | gboolean (*keypress)(GtkWidget *widget,guint keyval,GdkModifierType state); |
57 | 56 | |
... | ... | @@ -71,7 +70,6 @@ G_BEGIN_DECLS |
71 | 70 | { |
72 | 71 | SIGNAL_TOGGLE_CHANGED, |
73 | 72 | SIGNAL_MESSAGE_CHANGED, |
74 | - SIGNAL_LUNAME_CHANGED, | |
75 | 73 | SIGNAL_KEYPRESS, |
76 | 74 | SIGNAL_CONNECTED, |
77 | 75 | SIGNAL_DISCONNECTED, |
... | ... | @@ -211,11 +209,34 @@ G_BEGIN_DECLS |
211 | 209 | |
212 | 210 | }; |
213 | 211 | |
212 | +/*--[ Properties ]-----------------------------------------------------------------------------------*/ | |
213 | + | |
214 | + enum | |
215 | + { | |
216 | + PROP_0, | |
217 | + | |
218 | + /* Construct */ | |
219 | + PROP_TYPE, | |
220 | + | |
221 | + | |
222 | + /* Widget properties */ | |
223 | + PROP_ONLINE, | |
224 | + PROP_SELECTION, | |
225 | + PROP_MODEL, | |
226 | + PROP_LUNAME, | |
227 | + | |
228 | + /* Toggles - always the last one, the real values are PROP_TOGGLE+LIB3270_TOGGLE */ | |
229 | + PROP_TOGGLE | |
230 | + }; | |
231 | + | |
232 | + #define PROP_LAST (PROP_TOGGLE+LIB3270_TOGGLE_COUNT) | |
233 | + | |
234 | + | |
214 | 235 | /*--[ Globals ]--------------------------------------------------------------------------------------*/ |
215 | 236 | |
216 | 237 | G_GNUC_INTERNAL guint v3270_widget_signal[LAST_SIGNAL]; |
217 | 238 | G_GNUC_INTERNAL GdkCursor * v3270_cursor[V3270_CURSOR_COUNT]; |
218 | - | |
239 | + G_GNUC_INTERNAL GParamSpec * v3270_properties[PROP_LAST]; | |
219 | 240 | |
220 | 241 | /*--[ Prototipes ]-----------------------------------------------------------------------------------*/ |
221 | 242 | |
... | ... | @@ -271,12 +292,13 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int h |
271 | 292 | |
272 | 293 | void v3270_update_cursor_rect(v3270 *widget, GdkRectangle *rect, unsigned char chr, unsigned short attr); |
273 | 294 | |
274 | -void v3270_update_luname(GtkWidget *widget,const gchar *name); | |
275 | 295 | void v3270_update_message(v3270 *widget, LIB3270_MESSAGE id); |
276 | 296 | void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col, unsigned char c, unsigned short attr); |
277 | 297 | void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on); |
278 | 298 | void v3270_update_ssl(H3270 *session, LIB3270_SSL_STATE state); |
279 | 299 | |
300 | +G_GNUC_INTERNAL void v3270_update_luname(GtkWidget *widget,const gchar *name); | |
301 | + | |
280 | 302 | // Keyboard & Mouse |
281 | 303 | gboolean v3270_key_press_event(GtkWidget *widget, GdkEventKey *event); |
282 | 304 | gboolean v3270_key_release_event(GtkWidget *widget, GdkEventKey *event); | ... | ... |
... | ... | @@ -0,0 +1,133 @@ |
1 | +/* | |
2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. | |
5 | + * | |
6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | |
7 | + * | |
8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
10 | + * Free Software Foundation. | |
11 | + * | |
12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
15 | + * obter mais detalhes. | |
16 | + * | |
17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | |
19 | + * St, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | + * | |
21 | + * Este programa está nomeado como properties.c e possui - linhas de código. | |
22 | + * | |
23 | + * Contatos: | |
24 | + * | |
25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
27 | + * | |
28 | + */ | |
29 | + | |
30 | + #include <gtk/gtk.h> | |
31 | + #include <lib3270.h> | |
32 | + #include <lib3270/session.h> | |
33 | + #include <lib3270/actions.h> | |
34 | + #include <lib3270/log.h> | |
35 | + #include <lib3270/macros.h> | |
36 | + #include <errno.h> | |
37 | + #include <pw3270/v3270.h> | |
38 | + #include "private.h" | |
39 | + | |
40 | +/*--[ Globals ]--------------------------------------------------------------------------------------*/ | |
41 | + | |
42 | + GParamSpec * v3270_properties[PROP_LAST] = { 0 }; | |
43 | + | |
44 | +/*--[ Implement ]------------------------------------------------------------------------------------*/ | |
45 | + | |
46 | + static void v3270_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) | |
47 | + { | |
48 | + v3270 *window = GTK_V3270(object); | |
49 | + | |
50 | + switch (prop_id) | |
51 | + { | |
52 | + case PROP_MODEL: | |
53 | + lib3270_set_model(window->host,g_value_get_string(value)); | |
54 | + break; | |
55 | + | |
56 | + default: | |
57 | + if(prop_id < (PROP_TOGGLE + LIB3270_TOGGLE_COUNT)) | |
58 | + { | |
59 | + lib3270_set_toggle(window->host,prop_id - PROP_TOGGLE, (int) g_value_get_boolean (value)); | |
60 | + return; | |
61 | + } | |
62 | + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | |
63 | + } | |
64 | + | |
65 | + } | |
66 | + | |
67 | + static void v3270_get_property(GObject *object,guint prop_id, GValue *value, GParamSpec *pspec) | |
68 | + { | |
69 | + v3270 *window = GTK_V3270(object); | |
70 | + | |
71 | + switch (prop_id) | |
72 | + { | |
73 | + case PROP_MODEL: | |
74 | + g_value_set_string(value,lib3270_get_model(window->host)); | |
75 | + break; | |
76 | + | |
77 | + case PROP_LUNAME: | |
78 | + g_value_set_string(value,lib3270_get_luname(window->host)); | |
79 | + break; | |
80 | + | |
81 | + case PROP_ONLINE: | |
82 | + g_value_set_boolean(value,lib3270_is_connected(window->host) ? TRUE : FALSE ); | |
83 | + break; | |
84 | + | |
85 | + case PROP_SELECTION: | |
86 | + g_value_set_boolean(value,lib3270_has_selection(window->host) ? TRUE : FALSE ); | |
87 | + break; | |
88 | + | |
89 | + default: | |
90 | + if(prop_id < (PROP_TOGGLE + LIB3270_TOGGLE_COUNT)) | |
91 | + { | |
92 | + g_value_set_boolean(value,lib3270_get_toggle(window->host,prop_id - PROP_TOGGLE) ? TRUE : FALSE ); | |
93 | + return; | |
94 | + } | |
95 | + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | |
96 | + } | |
97 | + } | |
98 | + | |
99 | + void v3270_init_properties(GObjectClass * gobject_class) | |
100 | + { | |
101 | + gobject_class->set_property = v3270_set_property; | |
102 | + gobject_class->get_property = v3270_get_property; | |
103 | + | |
104 | + v3270_properties[PROP_ONLINE] = g_param_spec_boolean( | |
105 | + "online", | |
106 | + "online", | |
107 | + "True if is online", | |
108 | + FALSE,G_PARAM_READABLE); | |
109 | + g_object_class_install_property(gobject_class,PROP_ONLINE,v3270_properties[PROP_ONLINE]); | |
110 | + | |
111 | + v3270_properties[PROP_SELECTION] = g_param_spec_boolean( | |
112 | + "selection", | |
113 | + "selection", | |
114 | + "True on selected area", | |
115 | + FALSE,G_PARAM_READABLE); | |
116 | + g_object_class_install_property(gobject_class,PROP_SELECTION,v3270_properties[PROP_SELECTION]); | |
117 | + | |
118 | + v3270_properties[PROP_MODEL] = g_param_spec_string( | |
119 | + "model", | |
120 | + "model", | |
121 | + "The model of 3270 display to be emulated", | |
122 | + FALSE,G_PARAM_READABLE|G_PARAM_WRITABLE); | |
123 | + g_object_class_install_property(gobject_class,PROP_MODEL,v3270_properties[PROP_MODEL]); | |
124 | + | |
125 | + // Toggle properties | |
126 | + int f; | |
127 | + | |
128 | + for(f=0;f<LIB3270_TOGGLE_COUNT;f++) | |
129 | + { | |
130 | + v3270_properties[PROP_TOGGLE+f] = g_param_spec_boolean(lib3270_get_toggle_name(f),lib3270_get_toggle_name(f),lib3270_get_toggle_description(f),FALSE,G_PARAM_WRITABLE|G_PARAM_READABLE); | |
131 | + g_object_class_install_property(gobject_class,PROP_TOGGLE+f,v3270_properties[PROP_TOGGLE+f]); | |
132 | + } | |
133 | + } | ... | ... |
src/pw3270/v3270/sources.mak
src/pw3270/v3270/widget.c
... | ... | @@ -68,38 +68,15 @@ |
68 | 68 | |
69 | 69 | /*--[ Widget definition ]----------------------------------------------------------------------------*/ |
70 | 70 | |
71 | - enum | |
72 | - { | |
73 | - PROP_0, | |
74 | - | |
75 | - /* Construct */ | |
76 | - PROP_TYPE, | |
77 | - | |
78 | - | |
79 | - /* Widget properties */ | |
80 | - PROP_ONLINE, | |
81 | - PROP_SELECTION, | |
82 | - PROP_MODEL, | |
83 | - | |
84 | - /* Toggles - always the last one, the real values are PROP_TOGGLE+LIB3270_TOGGLE */ | |
85 | - PROP_TOGGLE | |
86 | - }; | |
87 | - | |
88 | - #define PROP_LAST (PROP_TOGGLE+LIB3270_TOGGLE_COUNT) | |
89 | - | |
90 | 71 | G_DEFINE_TYPE(v3270, v3270, GTK_TYPE_WIDGET); |
91 | 72 | |
92 | -/*--[ Globals ]----------LIB3270_TOGGLE_COUNT----------------------------------------------------------------------------*/ | |
73 | +/*--[ Globals ]--------------------------------------------------------------------------------------*/ | |
93 | 74 | |
94 | 75 | guint v3270_widget_signal[LAST_SIGNAL] = { 0 }; |
95 | 76 | GdkCursor * v3270_cursor[V3270_CURSOR_COUNT] = { 0 }; |
96 | 77 | |
97 | - static GParamSpec * v3270_properties[PROP_LAST] = { 0 }; | |
98 | - | |
99 | 78 | /*--[ Prototipes ]-----------------------------------------------------------------------------------*/ |
100 | 79 | |
101 | - // http://git.gnome.org/browse/gtk+/tree/gtk/gtkdrawingarea.c?h=gtk-3-0 | |
102 | - | |
103 | 80 | static void v3270_realize ( GtkWidget * widget) ; |
104 | 81 | static void v3270_size_allocate ( GtkWidget * widget, |
105 | 82 | GtkAllocation * allocation ); |
... | ... | @@ -337,55 +314,6 @@ gboolean v3270_query_tooltip(GtkWidget *widget, gint x, gint y, gboolean keyboa |
337 | 314 | return FALSE; |
338 | 315 | } |
339 | 316 | |
340 | -static void v3270_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) | |
341 | -{ | |
342 | - v3270 *window = GTK_V3270(object); | |
343 | - | |
344 | - switch (prop_id) | |
345 | - { | |
346 | - case PROP_MODEL: | |
347 | - lib3270_set_model(window->host,g_value_get_string(value)); | |
348 | - break; | |
349 | - | |
350 | - default: | |
351 | - if(prop_id < (PROP_TOGGLE + LIB3270_TOGGLE_COUNT)) | |
352 | - { | |
353 | - lib3270_set_toggle(window->host,prop_id - PROP_TOGGLE, (int) g_value_get_boolean (value)); | |
354 | - return; | |
355 | - } | |
356 | - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | |
357 | - } | |
358 | - | |
359 | -} | |
360 | - | |
361 | -static void v3270_get_property(GObject *object,guint prop_id, GValue *value, GParamSpec *pspec) | |
362 | -{ | |
363 | - v3270 *window = GTK_V3270(object); | |
364 | - | |
365 | - switch (prop_id) | |
366 | - { | |
367 | - case PROP_MODEL: | |
368 | - g_value_set_string(value,lib3270_get_model(window->host)); | |
369 | - break; | |
370 | - | |
371 | - case PROP_ONLINE: | |
372 | - g_value_set_boolean(value,lib3270_is_connected(window->host) ? TRUE : FALSE ); | |
373 | - break; | |
374 | - | |
375 | - case PROP_SELECTION: | |
376 | - g_value_set_boolean(value,lib3270_has_selection(window->host) ? TRUE : FALSE ); | |
377 | - break; | |
378 | - | |
379 | - default: | |
380 | - if(prop_id < (PROP_TOGGLE + LIB3270_TOGGLE_COUNT)) | |
381 | - { | |
382 | - g_value_set_boolean(value,lib3270_get_toggle(window->host,prop_id - PROP_TOGGLE) ? TRUE : FALSE ); | |
383 | - return; | |
384 | - } | |
385 | - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | |
386 | - } | |
387 | -} | |
388 | - | |
389 | 317 | static void v3270_class_init(v3270Class *klass) |
390 | 318 | { |
391 | 319 | GObjectClass * gobject_class = G_OBJECT_CLASS(klass); |
... | ... | @@ -416,7 +344,6 @@ static void v3270_class_init(v3270Class *klass) |
416 | 344 | klass->activate = v3270_activate; |
417 | 345 | klass->toggle_changed = v3270_toggle_changed; |
418 | 346 | klass->message_changed = v3270_update_message; |
419 | - klass->luname_changed = v3270_update_luname; | |
420 | 347 | klass->popup_message = v3270_popup_message; |
421 | 348 | |
422 | 349 | #if GTK_CHECK_VERSION(3,0,0) |
... | ... | @@ -524,15 +451,6 @@ static void v3270_class_init(v3270Class *klass) |
524 | 451 | v3270_VOID__VOID_ENUM, |
525 | 452 | G_TYPE_NONE, 1, G_TYPE_UINT); |
526 | 453 | |
527 | - v3270_widget_signal[SIGNAL_LUNAME_CHANGED] = | |
528 | - g_signal_new( "luname_changed", | |
529 | - G_OBJECT_CLASS_TYPE (gobject_class), | |
530 | - G_SIGNAL_RUN_FIRST, | |
531 | - G_STRUCT_OFFSET (v3270Class, luname_changed), | |
532 | - NULL, NULL, | |
533 | - v3270_VOID__VOID_POINTER, | |
534 | - G_TYPE_NONE, 1, G_TYPE_STRING); | |
535 | - | |
536 | 454 | v3270_widget_signal[SIGNAL_KEYPRESS] = |
537 | 455 | g_signal_new( "keypress", |
538 | 456 | G_OBJECT_CLASS_TYPE (gobject_class), |
... | ... | @@ -651,40 +569,7 @@ static void v3270_class_init(v3270Class *klass) |
651 | 569 | v3270_VOID__VOID, |
652 | 570 | G_TYPE_NONE, 0); |
653 | 571 | |
654 | - | |
655 | - // Properties | |
656 | - gobject_class->set_property = v3270_set_property; | |
657 | - gobject_class->get_property = v3270_get_property; | |
658 | - | |
659 | - v3270_properties[PROP_ONLINE] = g_param_spec_boolean( | |
660 | - "online", | |
661 | - "online", | |
662 | - "True if is online", | |
663 | - FALSE,G_PARAM_READABLE); | |
664 | - g_object_class_install_property(gobject_class,PROP_ONLINE,v3270_properties[PROP_ONLINE]); | |
665 | - | |
666 | - v3270_properties[PROP_SELECTION] = g_param_spec_boolean( | |
667 | - "selection", | |
668 | - "selection", | |
669 | - "True on selected area", | |
670 | - FALSE,G_PARAM_READABLE); | |
671 | - g_object_class_install_property(gobject_class,PROP_SELECTION,v3270_properties[PROP_SELECTION]); | |
672 | - | |
673 | - v3270_properties[PROP_MODEL] = g_param_spec_string( | |
674 | - "model", | |
675 | - "model", | |
676 | - "The model of 3270 display to be emulated", | |
677 | - FALSE,G_PARAM_READABLE|G_PARAM_WRITABLE); | |
678 | - g_object_class_install_property(gobject_class,PROP_MODEL,v3270_properties[PROP_MODEL]); | |
679 | - | |
680 | - // Toggle properties | |
681 | - int f; | |
682 | - | |
683 | - for(f=0;f<LIB3270_TOGGLE_COUNT;f++) | |
684 | - { | |
685 | - v3270_properties[PROP_TOGGLE+f] = g_param_spec_boolean(lib3270_get_toggle_name(f),lib3270_get_toggle_name(f),lib3270_get_toggle_description(f),FALSE,G_PARAM_WRITABLE|G_PARAM_READABLE); | |
686 | - g_object_class_install_property(gobject_class,PROP_TOGGLE+f,v3270_properties[PROP_TOGGLE+f]); | |
687 | - } | |
572 | + v3270_init_properties(gobject_class); | |
688 | 573 | |
689 | 574 | } |
690 | 575 | |
... | ... | @@ -825,7 +710,7 @@ static void update_message(H3270 *session, LIB3270_MESSAGE id) |
825 | 710 | |
826 | 711 | static void update_luname(H3270 *session, const char *name) |
827 | 712 | { |
828 | - g_signal_emit(GTK_WIDGET(session->widget), v3270_widget_signal[SIGNAL_LUNAME_CHANGED], 0, (gchar *) name); | |
713 | + v3270_update_luname(GTK_WIDGET(session->widget),name); | |
829 | 714 | } |
830 | 715 | |
831 | 716 | static void select_cursor(H3270 *session, LIB3270_CURSOR id) | ... | ... |