Commit 3d6f9f7ba5fb42126c516f67cc02e10431010df3

Authored by perry.werneck@gmail.com
1 parent 44977a0a

Separando fontes para tratamento das propriedades do widget, convertendo luname numa propriedade

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
... ... @@ -39,6 +39,7 @@
39 39  
40 40 #include "globals.h"
41 41 #include <errno.h>
  42 +#include <stdlib.h>
42 43 #include "3270ds.h"
43 44 //#include "appres.h"
44 45 // #include "ctlr.h"
... ...
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);
... ...
src/pw3270/v3270/properties.c 0 → 100644
... ... @@ -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
... ... @@ -27,5 +27,5 @@
27 27 #
28 28  
29 29 V3270_SRC=marshal.c widget.c oia.c iocallback.c keyboard.c draw.c mouse.c selection.c \
30   - accessible.c security.c macros.c hostselect.c
  30 + accessible.c security.c macros.c hostselect.c properties.c
31 31  
... ...
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)
... ...