Commit a23ae44f22524b70d9affa622b97f903e03bf6fb

Authored by Perry Werneck
1 parent 17748432
Exists in master and in 1 other branch develop

Adding toggle button widget and a button bar to enable/disable trace

options on the trace widget.
src/dialogs/togglebutton.c
... ... @@ -29,6 +29,7 @@
29 29  
30 30 #include <internals.h>
31 31 #include <lib3270.h>
  32 + #include <lib3270/toggle.h>
32 33  
33 34 /*--[ Widget definition ]----------------------------------------------------------------------------*/
34 35  
... ... @@ -44,6 +45,7 @@
44 45  
45 46 H3270 * hSession;
46 47 LIB3270_TOGGLE id;
  48 + const void * hListener;
47 49  
48 50 };
49 51  
... ... @@ -57,6 +59,12 @@
57 59  
58 60 V3270ToggleButton * widget = GTK_V3270_TOGGLE_BUTTON(object);
59 61  
  62 + if(widget->hListener)
  63 + {
  64 + lib3270_unregister_toggle_listener(widget->hSession,widget->id,widget->hListener);
  65 + widget->hListener = NULL;
  66 + }
  67 +
60 68 G_OBJECT_CLASS(V3270ToggleButton_parent_class)->dispose(object);
61 69  
62 70 }
... ... @@ -86,10 +94,16 @@
86 94  
87 95 }
88 96  
89   - static void V3270ToggleButton_init(V3270ToggleButton *widget)
  97 + static void V3270ToggleButton_init(V3270ToggleButton G_GNUC_UNUSED(*widget))
90 98 {
91 99 }
92 100  
  101 + static void toggle_listener(H3270 G_GNUC_UNUSED(*hSession), LIB3270_TOGGLE toggle, char state, void *button)
  102 + {
  103 + g_message("%s is %s\n", lib3270_get_toggle_name(toggle),(state ? "ON" : "OFF"));
  104 + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),(state == 0 ? FALSE : TRUE));
  105 + }
  106 +
93 107 GtkWidget * v3270_toggle_button_new(GtkWidget *terminal, LIB3270_TOGGLE toggle)
94 108 {
95 109 g_return_val_if_fail(GTK_IS_V3270(terminal),NULL);
... ... @@ -99,6 +113,8 @@
99 113 widget->hSession = v3270_get_session(terminal);
100 114 widget->id = toggle;
101 115  
  116 + widget->hListener = lib3270_register_toggle_listener(widget->hSession, widget->id,toggle_listener,widget);
  117 +
102 118 gtk_widget_set_name(GTK_WIDGET(widget),lib3270_get_toggle_name(toggle));
103 119 gtk_button_set_label(GTK_BUTTON(widget),gettext(lib3270_get_toggle_label(toggle)));
104 120 gtk_widget_set_tooltip_text(GTK_WIDGET(widget),gettext(lib3270_get_toggle_description(toggle)));
... ...
src/include/internals.h
... ... @@ -117,6 +117,19 @@
117 117 G_GNUC_INTERNAL GtkWidget * v3270_dialog_button_new(GtkWidget *dialog, const gchar *mnemonic, GCallback callback);
118 118 #endif // ! GTK 3.12
119 119  
  120 + // Toggle button widget
  121 + #define GTK_TYPE_V3270_TOGGLE_BUTTON (V3270ToggleButton_get_type ())
  122 + #define GTK_V3270_TOGGLE_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_V3270_TOGGLE_BUTTON, V3270ToggleButton))
  123 + #define GTK_V3270_TOGGLE_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_V3270_TOGGLE_BUTTON, V3270ToggleButtonClass))
  124 + #define GTK_IS_V3270_TOGGLE_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_V3270_TOGGLE_BUTTON))
  125 + #define GTK_IS_V3270_TOGGLE_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_V3270_TOGGLE_BUTTON))
  126 + #define GTK_V3270_TOGGLE_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_V3270_TOGGLE_BUTTON, V3270ToggleButtonClass))
  127 +
  128 + typedef struct _V3270ToggleButton V3270ToggleButton;
  129 + typedef struct _V3270ToggleButtonClass V3270ToggleButtonClass;
  130 +
  131 + G_GNUC_INTERNAL GtkWidget * v3270_toggle_button_new(GtkWidget *widget, LIB3270_TOGGLE toggle);
  132 +
120 133 // Activity list widget.
121 134 #define GTK_TYPE_V3270_FT_ACTIVITY_LIST (V3270FTActivityList_get_type ())
122 135 #define GTK_V3270_FT_ACTIVITY_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_V3270_FT_ACTIVITY_LIST, V3270FTActivityList))
... ...
src/selection/datablock.c
... ... @@ -189,7 +189,7 @@ gboolean v3270_set_from_data_block(v3270 * terminal, const struct SelectionHeade
189 189 raw_pos += (sizeof(struct SelectionFieldHeader) + field->length);
190 190 for(column = 0; column < field->length; column++)
191 191 {
192   - if(lib3270_is_protected(terminal->host,field->baddr+column))
  192 + if(lib3270_get_is_protected(terminal->host,field->baddr+column))
193 193 {
194 194 debug("Column %d is protected",column);
195 195 found = FALSE;
... ...
src/selection/linux/copy.c
... ... @@ -29,6 +29,7 @@
29 29  
30 30 #include <clipboard.h>
31 31 #include <lib3270/selection.h>
  32 + #include <lib3270/toggle.h>
32 33  
33 34 /*--[ Implement ]------------------------------------------------------------------------------------*/
34 35  
... ...
src/terminal/accessible.c
... ... @@ -626,7 +626,7 @@ static AtkAttributeSet * v3270_accessible_get_run_attributes(AtkText *text, gint
626 626 // Either "true" or "false" indicating whether text is editable or not
627 627 attributes = add_attribute( attributes,
628 628 ATK_TEXT_ATTR_EDITABLE,
629   - lib3270_is_protected(host,offset) ? "false" : "true" );
  629 + lib3270_get_is_protected(host,offset) ? "false" : "true" );
630 630  
631 631 // The background color. The value is an RGB value of the format "u,u,u"
632 632 // ATK_TEXT_ATTR_BG_COLOR
... ...
src/terminal/draw.c
... ... @@ -39,6 +39,7 @@
39 39 #include <lib3270.h>
40 40 #include <lib3270/log.h>
41 41 #include <lib3270/session.h>
  42 + #include <lib3270/toggle.h>
42 43 #include <internals.h>
43 44  
44 45 #include <v3270.h>
... ...
src/terminal/font.c
... ... @@ -31,7 +31,7 @@
31 31 #include <terminal.h>
32 32 #include <lib3270.h>
33 33 #include <lib3270/log.h>
34   -
  34 + #include <lib3270/toggle.h>
35 35  
36 36 #define VIEW_HEIGTH_FROM_FONT(font_height) (( ((unsigned int) font_height) * (rows+1)) + OIA_TOP_MARGIN + 2)
37 37 #define VIEW_WIDTH_FROM_FONT(max_x_advance) ( ((unsigned int) max_x_advance) * cols)
... ...
src/terminal/oia.c
... ... @@ -45,6 +45,7 @@
45 45 #include <lib3270.h>
46 46 #include <lib3270/session.h>
47 47 #include <lib3270/log.h>
  48 + #include <lib3270/toggle.h>
48 49 #include <config.h>
49 50 #include <string.h>
50 51 #include <errno.h>
... ...
src/terminal/properties.c
... ... @@ -40,6 +40,7 @@
40 40 #include <lib3270/actions.h>
41 41 #include <lib3270/log.h>
42 42 #include <lib3270/properties.h>
  43 + #include <lib3270/toggle.h>
43 44 #include <stdlib.h>
44 45 #include <errno.h>
45 46 #include <v3270.h>
... ...
src/terminal/widget.c
... ... @@ -33,6 +33,7 @@
33 33  
34 34 #include <lib3270.h>
35 35 #include <lib3270/log.h>
  36 + #include <lib3270/toggle.h>
36 37 #include <lib3270/actions.h>
37 38 #include <internals.h>
38 39  
... ...
src/trace/widget.c
... ... @@ -76,6 +76,7 @@
76 76 GtkTextView * view; ///< @brief Text view;
77 77 GtkTextBuffer * text; ///< @brief Trace window contents.
78 78 GtkEntry * entry; ///< @brief Command line entry.
  79 + GtkWidget * buttons; ///< @brief Button bar.
79 80  
80 81 gchar * filename; ///< @brief Selected file name.
81 82  
... ... @@ -245,82 +246,19 @@
245 246  
246 247 }
247 248  
248   - static void toggle_ds_trace(GtkToggleButton *button, V3270Trace *trace) {
249   - v3270_set_toggle(trace->terminal,LIB3270_TOGGLE_DS_TRACE,gtk_toggle_button_get_active(button));
250   - }
251   -
252   - static void toggle_event_trace(GtkToggleButton *button, V3270Trace *trace) {
253   - v3270_set_toggle(trace->terminal,LIB3270_TOGGLE_EVENT_TRACE,gtk_toggle_button_get_active(button));
254   - }
255   -
256   - static void toggle_ssl_trace(GtkToggleButton *button, V3270Trace *trace) {
257   - v3270_set_toggle(trace->terminal,LIB3270_TOGGLE_SSL_TRACE,gtk_toggle_button_get_active(button));
258   - }
259   -
260   - static void toggle_screen_trace(GtkToggleButton *button, V3270Trace *trace) {
261   - v3270_set_toggle(trace->terminal,LIB3270_TOGGLE_SCREEN_TRACE,gtk_toggle_button_get_active(button));
262   - }
263   -
264 249 static void V3270Trace_init(V3270Trace *widget)
265 250 {
266 251 gtk_orientable_set_orientation(GTK_ORIENTABLE(widget),GTK_ORIENTATION_VERTICAL);
267 252  
268 253 // Create toolbar
269 254 {
270   - size_t ix;
271   -
272   - GtkWidget * toolbar = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
273   - gtk_button_box_set_layout(GTK_BUTTON_BOX(toolbar), GTK_BUTTONBOX_START);
274   - gtk_box_set_spacing(GTK_BOX(toolbar),8);
275   -
276   - static const struct _toggles
277   - {
278   - const gchar * label;
279   - const gchar * tooltip;
280   - GCallback callback;
281   - }
282   - toggles[] =
283   - {
284   - {
285   - N_("DS Trace"),
286   - N_("Toggle DS Trace"),
287   - G_CALLBACK(toggle_ds_trace)
288   - },
289   - {
290   - N_("Event Trace"),
291   - N_("Toggle Event Trace"),
292   - G_CALLBACK(toggle_event_trace)
293   - },
294   - {
295   - N_("Screen Trace"),
296   - N_("Toggle Screen Trace"),
297   - G_CALLBACK(toggle_screen_trace)
298   - },
299   - {
300   - N_("SSL Trace"),
301   - N_("Toggle SSL Trace"),
302   - G_CALLBACK(toggle_ssl_trace)
303   - }
304   -
305   - };
306   -
307   - for(ix = 0; ix < G_N_ELEMENTS(toggles); ix++)
308   - {
309   - GtkWidget * item = gtk_toggle_button_new_with_label(toggles[ix].label);
310   -
311   - gtk_widget_set_can_focus(item,FALSE);
312   - gtk_widget_set_can_default(item,FALSE);
313   - gtk_widget_set_focus_on_click(item,FALSE);
  255 + widget->buttons = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
314 256  
315   - g_signal_connect(item, "toggled", G_CALLBACK(toggles[ix].callback), widget);
  257 + gtk_button_box_set_layout(GTK_BUTTON_BOX(widget->buttons), GTK_BUTTONBOX_START);
  258 + gtk_box_set_spacing(GTK_BOX(widget->buttons),8);
316 259  
317   - gtk_widget_set_tooltip_text(item,toggles[ix].tooltip);
318   - gtk_box_pack_start(GTK_BOX(toolbar),item,FALSE,FALSE,4);
319   -
320   - }
321   -
322   - gtk_widget_set_valign(toolbar,GTK_ALIGN_START);
323   - gtk_box_pack_start(GTK_BOX(widget),toolbar,FALSE,FALSE,4);
  260 + gtk_widget_set_valign(widget->buttons,GTK_ALIGN_START);
  261 + gtk_box_pack_start(GTK_BOX(widget),widget->buttons,FALSE,FALSE,4);
324 262  
325 263 }
326 264  
... ... @@ -374,34 +312,39 @@
374 312  
375 313 }
376 314  
377   - LIB3270_EXPORT void v3270_trace_set_terminal(GtkWidget *widget, GtkWidget *terminal)
378   - {
379   - V3270Trace * trace = GTK_V3270_TRACE(widget);
380 315  
381   - if(trace->terminal == terminal)
382   - return;
  316 + LIB3270_EXPORT GtkWidget * v3270_trace_new(GtkWidget *terminal)
  317 + {
  318 + g_return_val_if_fail(GTK_IS_V3270(terminal),NULL);
383 319  
384   - g_clear_object(&trace->terminal);
  320 + V3270Trace * widget = GTK_V3270_TRACE(g_object_new(GTK_TYPE_V3270_TRACE, NULL));
385 321  
386   - if(terminal)
  322 + // Set terminal widget
387 323 {
388   - trace->terminal = terminal;
  324 + widget->terminal = terminal;
389 325 g_object_ref_sink(G_OBJECT(terminal));
  326 + set_session(widget, v3270_get_session(widget->terminal));
390 327 }
391 328  
392   - set_session(trace, v3270_get_session(trace->terminal));
  329 + // Create toggle buttons
  330 + {
  331 + size_t ix;
  332 +
  333 + static const LIB3270_TOGGLE toggles[] = { LIB3270_TOGGLE_DS_TRACE, LIB3270_TOGGLE_EVENT_TRACE, LIB3270_TOGGLE_SSL_TRACE, LIB3270_TOGGLE_SCREEN_TRACE};
393 334  
394   - gtk_widget_set_sensitive(GTK_WIDGET(trace->entry),trace->terminal != NULL);
  335 + for(ix = 0; ix < G_N_ELEMENTS(toggles); ix++)
  336 + {
  337 + GtkWidget * item = v3270_toggle_button_new(widget->terminal,toggles[ix]);
395 338  
396   - }
  339 + gtk_widget_set_can_focus(item,FALSE);
  340 + gtk_widget_set_can_default(item,FALSE);
  341 + gtk_widget_set_focus_on_click(item,FALSE);
397 342  
398   - LIB3270_EXPORT GtkWidget * v3270_trace_new(GtkWidget *terminal)
399   - {
400   - g_return_val_if_fail(GTK_IS_V3270(terminal),NULL);
  343 + gtk_box_pack_start(GTK_BOX(widget->buttons),item,FALSE,FALSE,4);
401 344  
402   - V3270Trace * widget = GTK_V3270_TRACE(g_object_new(GTK_TYPE_V3270_TRACE, NULL));
  345 + }
  346 + }
403 347  
404   - v3270_trace_set_terminal(GTK_WIDGET(widget),terminal);
405 348  
406 349 return GTK_WIDGET(widget);
407 350 }
... ...
v3270.cbp
... ... @@ -93,6 +93,9 @@
93 93 <Unit filename="src/dialogs/settingsdialog.c">
94 94 <Option compilerVar="CC" />
95 95 </Unit>
  96 + <Unit filename="src/dialogs/togglebutton.c">
  97 + <Option compilerVar="CC" />
  98 + </Unit>
96 99 <Unit filename="src/dialogs/tools.c">
97 100 <Option compilerVar="CC" />
98 101 </Unit>
... ...