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,6 +29,7 @@
29 29
30 #include <internals.h> 30 #include <internals.h>
31 #include <lib3270.h> 31 #include <lib3270.h>
  32 + #include <lib3270/toggle.h>
32 33
33 /*--[ Widget definition ]----------------------------------------------------------------------------*/ 34 /*--[ Widget definition ]----------------------------------------------------------------------------*/
34 35
@@ -44,6 +45,7 @@ @@ -44,6 +45,7 @@
44 45
45 H3270 * hSession; 46 H3270 * hSession;
46 LIB3270_TOGGLE id; 47 LIB3270_TOGGLE id;
  48 + const void * hListener;
47 49
48 }; 50 };
49 51
@@ -57,6 +59,12 @@ @@ -57,6 +59,12 @@
57 59
58 V3270ToggleButton * widget = GTK_V3270_TOGGLE_BUTTON(object); 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 G_OBJECT_CLASS(V3270ToggleButton_parent_class)->dispose(object); 68 G_OBJECT_CLASS(V3270ToggleButton_parent_class)->dispose(object);
61 69
62 } 70 }
@@ -86,10 +94,16 @@ @@ -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 GtkWidget * v3270_toggle_button_new(GtkWidget *terminal, LIB3270_TOGGLE toggle) 107 GtkWidget * v3270_toggle_button_new(GtkWidget *terminal, LIB3270_TOGGLE toggle)
94 { 108 {
95 g_return_val_if_fail(GTK_IS_V3270(terminal),NULL); 109 g_return_val_if_fail(GTK_IS_V3270(terminal),NULL);
@@ -99,6 +113,8 @@ @@ -99,6 +113,8 @@
99 widget->hSession = v3270_get_session(terminal); 113 widget->hSession = v3270_get_session(terminal);
100 widget->id = toggle; 114 widget->id = toggle;
101 115
  116 + widget->hListener = lib3270_register_toggle_listener(widget->hSession, widget->id,toggle_listener,widget);
  117 +
102 gtk_widget_set_name(GTK_WIDGET(widget),lib3270_get_toggle_name(toggle)); 118 gtk_widget_set_name(GTK_WIDGET(widget),lib3270_get_toggle_name(toggle));
103 gtk_button_set_label(GTK_BUTTON(widget),gettext(lib3270_get_toggle_label(toggle))); 119 gtk_button_set_label(GTK_BUTTON(widget),gettext(lib3270_get_toggle_label(toggle)));
104 gtk_widget_set_tooltip_text(GTK_WIDGET(widget),gettext(lib3270_get_toggle_description(toggle))); 120 gtk_widget_set_tooltip_text(GTK_WIDGET(widget),gettext(lib3270_get_toggle_description(toggle)));
src/include/internals.h
@@ -117,6 +117,19 @@ @@ -117,6 +117,19 @@
117 G_GNUC_INTERNAL GtkWidget * v3270_dialog_button_new(GtkWidget *dialog, const gchar *mnemonic, GCallback callback); 117 G_GNUC_INTERNAL GtkWidget * v3270_dialog_button_new(GtkWidget *dialog, const gchar *mnemonic, GCallback callback);
118 #endif // ! GTK 3.12 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 // Activity list widget. 133 // Activity list widget.
121 #define GTK_TYPE_V3270_FT_ACTIVITY_LIST (V3270FTActivityList_get_type ()) 134 #define GTK_TYPE_V3270_FT_ACTIVITY_LIST (V3270FTActivityList_get_type ())
122 #define GTK_V3270_FT_ACTIVITY_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_V3270_FT_ACTIVITY_LIST, V3270FTActivityList)) 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,7 +189,7 @@ gboolean v3270_set_from_data_block(v3270 * terminal, const struct SelectionHeade
189 raw_pos += (sizeof(struct SelectionFieldHeader) + field->length); 189 raw_pos += (sizeof(struct SelectionFieldHeader) + field->length);
190 for(column = 0; column < field->length; column++) 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 debug("Column %d is protected",column); 194 debug("Column %d is protected",column);
195 found = FALSE; 195 found = FALSE;
src/selection/linux/copy.c
@@ -29,6 +29,7 @@ @@ -29,6 +29,7 @@
29 29
30 #include <clipboard.h> 30 #include <clipboard.h>
31 #include <lib3270/selection.h> 31 #include <lib3270/selection.h>
  32 + #include <lib3270/toggle.h>
32 33
33 /*--[ Implement ]------------------------------------------------------------------------------------*/ 34 /*--[ Implement ]------------------------------------------------------------------------------------*/
34 35
src/terminal/accessible.c
@@ -626,7 +626,7 @@ static AtkAttributeSet * v3270_accessible_get_run_attributes(AtkText *text, gint @@ -626,7 +626,7 @@ static AtkAttributeSet * v3270_accessible_get_run_attributes(AtkText *text, gint
626 // Either "true" or "false" indicating whether text is editable or not 626 // Either "true" or "false" indicating whether text is editable or not
627 attributes = add_attribute( attributes, 627 attributes = add_attribute( attributes,
628 ATK_TEXT_ATTR_EDITABLE, 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 // The background color. The value is an RGB value of the format "u,u,u" 631 // The background color. The value is an RGB value of the format "u,u,u"
632 // ATK_TEXT_ATTR_BG_COLOR 632 // ATK_TEXT_ATTR_BG_COLOR
src/terminal/draw.c
@@ -39,6 +39,7 @@ @@ -39,6 +39,7 @@
39 #include <lib3270.h> 39 #include <lib3270.h>
40 #include <lib3270/log.h> 40 #include <lib3270/log.h>
41 #include <lib3270/session.h> 41 #include <lib3270/session.h>
  42 + #include <lib3270/toggle.h>
42 #include <internals.h> 43 #include <internals.h>
43 44
44 #include <v3270.h> 45 #include <v3270.h>
src/terminal/font.c
@@ -31,7 +31,7 @@ @@ -31,7 +31,7 @@
31 #include <terminal.h> 31 #include <terminal.h>
32 #include <lib3270.h> 32 #include <lib3270.h>
33 #include <lib3270/log.h> 33 #include <lib3270/log.h>
34 - 34 + #include <lib3270/toggle.h>
35 35
36 #define VIEW_HEIGTH_FROM_FONT(font_height) (( ((unsigned int) font_height) * (rows+1)) + OIA_TOP_MARGIN + 2) 36 #define VIEW_HEIGTH_FROM_FONT(font_height) (( ((unsigned int) font_height) * (rows+1)) + OIA_TOP_MARGIN + 2)
37 #define VIEW_WIDTH_FROM_FONT(max_x_advance) ( ((unsigned int) max_x_advance) * cols) 37 #define VIEW_WIDTH_FROM_FONT(max_x_advance) ( ((unsigned int) max_x_advance) * cols)
src/terminal/oia.c
@@ -45,6 +45,7 @@ @@ -45,6 +45,7 @@
45 #include <lib3270.h> 45 #include <lib3270.h>
46 #include <lib3270/session.h> 46 #include <lib3270/session.h>
47 #include <lib3270/log.h> 47 #include <lib3270/log.h>
  48 + #include <lib3270/toggle.h>
48 #include <config.h> 49 #include <config.h>
49 #include <string.h> 50 #include <string.h>
50 #include <errno.h> 51 #include <errno.h>
src/terminal/properties.c
@@ -40,6 +40,7 @@ @@ -40,6 +40,7 @@
40 #include <lib3270/actions.h> 40 #include <lib3270/actions.h>
41 #include <lib3270/log.h> 41 #include <lib3270/log.h>
42 #include <lib3270/properties.h> 42 #include <lib3270/properties.h>
  43 + #include <lib3270/toggle.h>
43 #include <stdlib.h> 44 #include <stdlib.h>
44 #include <errno.h> 45 #include <errno.h>
45 #include <v3270.h> 46 #include <v3270.h>
src/terminal/widget.c
@@ -33,6 +33,7 @@ @@ -33,6 +33,7 @@
33 33
34 #include <lib3270.h> 34 #include <lib3270.h>
35 #include <lib3270/log.h> 35 #include <lib3270/log.h>
  36 + #include <lib3270/toggle.h>
36 #include <lib3270/actions.h> 37 #include <lib3270/actions.h>
37 #include <internals.h> 38 #include <internals.h>
38 39
src/trace/widget.c
@@ -76,6 +76,7 @@ @@ -76,6 +76,7 @@
76 GtkTextView * view; ///< @brief Text view; 76 GtkTextView * view; ///< @brief Text view;
77 GtkTextBuffer * text; ///< @brief Trace window contents. 77 GtkTextBuffer * text; ///< @brief Trace window contents.
78 GtkEntry * entry; ///< @brief Command line entry. 78 GtkEntry * entry; ///< @brief Command line entry.
  79 + GtkWidget * buttons; ///< @brief Button bar.
79 80
80 gchar * filename; ///< @brief Selected file name. 81 gchar * filename; ///< @brief Selected file name.
81 82
@@ -245,82 +246,19 @@ @@ -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 static void V3270Trace_init(V3270Trace *widget) 249 static void V3270Trace_init(V3270Trace *widget)
265 { 250 {
266 gtk_orientable_set_orientation(GTK_ORIENTABLE(widget),GTK_ORIENTATION_VERTICAL); 251 gtk_orientable_set_orientation(GTK_ORIENTABLE(widget),GTK_ORIENTATION_VERTICAL);
267 252
268 // Create toolbar 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,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 g_object_ref_sink(G_OBJECT(terminal)); 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 return GTK_WIDGET(widget); 349 return GTK_WIDGET(widget);
407 } 350 }
@@ -93,6 +93,9 @@ @@ -93,6 +93,9 @@
93 <Unit filename="src/dialogs/settingsdialog.c"> 93 <Unit filename="src/dialogs/settingsdialog.c">
94 <Option compilerVar="CC" /> 94 <Option compilerVar="CC" />
95 </Unit> 95 </Unit>
  96 + <Unit filename="src/dialogs/togglebutton.c">
  97 + <Option compilerVar="CC" />
  98 + </Unit>
96 <Unit filename="src/dialogs/tools.c"> 99 <Unit filename="src/dialogs/tools.c">
97 <Option compilerVar="CC" /> 100 <Option compilerVar="CC" />
98 </Unit> 101 </Unit>