Commit c7a62db8b9b926fae91a7db0d8bafbbe2131bc77
1 parent
1211f8b2
Exists in
master
and in
5 other branches
Trabalhando no diálogo de transferência de arquivos
Showing
3 changed files
with
127 additions
and
13 deletions
Show diff stats
src/include/lib3270/filetransfer.h
... | ... | @@ -37,30 +37,48 @@ |
37 | 37 | #include <sys/time.h> |
38 | 38 | #include <lib3270/charset.h> |
39 | 39 | |
40 | - #define LIB3270_FT_OPTION_SEND 0x0000 | |
41 | 40 | |
41 | +/* | |
42 | 42 | #define LIB3270_FT_RECORD_FORMAT_DEFAULT 0x0000 |
43 | 43 | #define LIB3270_FT_RECORD_FORMAT_FIXED 0x0100 |
44 | 44 | #define LIB3270_FT_RECORD_FORMAT_VARIABLE 0x0200 |
45 | 45 | #define LIB3270_FT_RECORD_FORMAT_UNDEFINED 0x0300 |
46 | 46 | #define LIB3270_FT_RECORD_FORMAT_MASK LIB3270_FT_RECORD_FORMAT_UNDEFINED |
47 | +*/ | |
47 | 48 | |
49 | +/* | |
48 | 50 | #define LIB3270_FT_ALLOCATION_UNITS_DEFAULT 0x0000 |
49 | 51 | #define LIB3270_FT_ALLOCATION_UNITS_TRACKS 0x1000 |
50 | 52 | #define LIB3270_FT_ALLOCATION_UNITS_CYLINDERS 0x2000 |
51 | 53 | #define LIB3270_FT_ALLOCATION_UNITS_AVBLOCK 0x3000 |
52 | 54 | #define LIB3270_FT_ALLOCATION_UNITS_MASK LIB3270_FT_ALLOCATION_UNITS_AVBLOCK |
55 | +*/ | |
53 | 56 | |
54 | - typedef enum _lib3270_FT_FLAG | |
57 | + typedef enum _lib3270_FT_OPTION | |
55 | 58 | { |
56 | - LIB3270_FT_OPTION_RECEIVE = 0x0001, | |
57 | - LIB3270_FT_OPTION_ASCII = 0x0002, /**< Convert to ascii */ | |
58 | - LIB3270_FT_OPTION_CRLF = 0x0004, /**< Add crlf to each line */ | |
59 | - LIB3270_FT_OPTION_APPEND = 0x0008, | |
60 | - LIB3270_FT_OPTION_REMAP = 0x0010 /**< Remap ASCII<->EBCDIC */ | |
59 | + LIB3270_FT_OPTION_SEND = 0x0000, | |
60 | + | |
61 | + LIB3270_FT_OPTION_RECEIVE = 0x0001, | |
62 | + LIB3270_FT_OPTION_ASCII = 0x0002, /**< Convert to ascii */ | |
63 | + LIB3270_FT_OPTION_CRLF = 0x0004, /**< Add crlf to each line */ | |
64 | + LIB3270_FT_OPTION_APPEND = 0x0008, | |
65 | + LIB3270_FT_OPTION_REMAP = 0x0010, /**< Remap ASCII<->EBCDIC */ | |
66 | + | |
67 | + LIB3270_FT_RECORD_FORMAT_DEFAULT = 0x0000, | |
68 | + LIB3270_FT_RECORD_FORMAT_FIXED = 0x0100, | |
69 | + LIB3270_FT_RECORD_FORMAT_VARIABLE = 0x0200, | |
70 | + LIB3270_FT_RECORD_FORMAT_UNDEFINED = 0x0300, | |
71 | + | |
72 | + LIB3270_FT_ALLOCATION_UNITS_DEFAULT = 0x0000, | |
73 | + LIB3270_FT_ALLOCATION_UNITS_TRACKS = 0x1000, | |
74 | + LIB3270_FT_ALLOCATION_UNITS_CYLINDERS = 0x2000, | |
75 | + LIB3270_FT_ALLOCATION_UNITS_AVBLOCK = 0x3000 | |
61 | 76 | |
62 | 77 | } LIB3270_FT_OPTION; |
63 | 78 | |
79 | + #define LIB3270_FT_ALLOCATION_UNITS_MASK LIB3270_FT_ALLOCATION_UNITS_AVBLOCK | |
80 | + #define LIB3270_FT_RECORD_FORMAT_MASK LIB3270_FT_RECORD_FORMAT_UNDEFINED | |
81 | + | |
64 | 82 | typedef enum _lib3270_ft_state |
65 | 83 | { |
66 | 84 | LIB3270_FT_STATE_NONE, /**< No transfer in progress */ | ... | ... |
src/pw3270/ft/ftdialog.c
... | ... | @@ -135,6 +135,8 @@ static void toggle_option(GtkToggleButton *button, v3270FTD *dialog) |
135 | 135 | else |
136 | 136 | dialog->options &= ~opt->flag; |
137 | 137 | |
138 | +// g_message("Option \"%s\" is %s flag=%08lx",opt->label,gtk_toggle_button_get_active(button) ? "ON" : "OFF", (unsigned long) opt->flag); | |
139 | + | |
138 | 140 | } |
139 | 141 | |
140 | 142 | static GtkWidget * ftoption_new(v3270FTD *dialog, const struct ftoptions *opt) |
... | ... | @@ -192,6 +194,32 @@ static GtkWidget * ftvalue_new(v3270FTD *dialog, const struct ftvalues *val) |
192 | 194 | |
193 | 195 | } |
194 | 196 | |
197 | +static GtkWidget * ftradio_new(v3270FTD *dialog, const gchar *title, const gchar *tooltip, const struct ftoptions *opt) | |
198 | +{ | |
199 | + GtkContainer * frame = GTK_CONTAINER(gtk_frame_new(title)); | |
200 | + GtkBox * box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2)); | |
201 | + GSList * lst = NULL; | |
202 | + int f; | |
203 | + | |
204 | + for(f=0;opt[f].label;f++) | |
205 | + { | |
206 | + GtkWidget * button = gtk_radio_button_new_with_label(lst,gettext(opt[f].label)); | |
207 | + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),dialog->options & opt[f].flag); | |
208 | + if(opt[f].tooltip) | |
209 | + gtk_widget_set_tooltip_text(button,gettext(opt[f].tooltip)); | |
210 | + | |
211 | + g_object_set_data(G_OBJECT(button),"cfg",(gpointer) &opt[f]); | |
212 | + g_signal_connect(G_OBJECT(button),"toggled",G_CALLBACK(toggle_option),dialog); | |
213 | + | |
214 | + gtk_box_pack_start(box,button,FALSE,TRUE,2); | |
215 | + lst = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button)); | |
216 | + } | |
217 | + | |
218 | + gtk_widget_set_tooltip_text(GTK_WIDGET(frame),tooltip); | |
219 | + gtk_container_add(frame,GTK_WIDGET(box)); | |
220 | + return GTK_WIDGET(frame); | |
221 | +} | |
222 | + | |
195 | 223 | GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) |
196 | 224 | { |
197 | 225 | v3270FTD *dialog = g_object_new(GTK_TYPE_V3270FTD, NULL); |
... | ... | @@ -345,6 +373,76 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) |
345 | 373 | gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),ftoption_new(dialog,opt),FALSE,TRUE,2); |
346 | 374 | |
347 | 375 | |
376 | + // Create format box | |
377 | + GtkBox * box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2)); | |
378 | + | |
379 | + // Create record format box | |
380 | + static const struct ftoptions recfm[] = | |
381 | + { | |
382 | + { | |
383 | + LIB3270_FT_RECORD_FORMAT_DEFAULT, | |
384 | + N_("Default"), | |
385 | + N_("Use host default record format.") | |
386 | + }, | |
387 | + { | |
388 | + LIB3270_FT_RECORD_FORMAT_FIXED, | |
389 | + N_("Fixed"), | |
390 | + N_("Creates a file with fixed-length records.") | |
391 | + }, | |
392 | + { | |
393 | + LIB3270_FT_RECORD_FORMAT_VARIABLE, | |
394 | + N_("Variable"), | |
395 | + N_("Creates a file with variable-length records.") | |
396 | + }, | |
397 | + { | |
398 | + LIB3270_FT_RECORD_FORMAT_UNDEFINED, | |
399 | + N_("Undefined"), | |
400 | + N_("Creates a file with undefined-length records (TSO hosts only).") | |
401 | + }, | |
402 | + { | |
403 | + 0, | |
404 | + NULL, | |
405 | + NULL | |
406 | + } | |
407 | + }; | |
408 | + | |
409 | + gtk_box_pack_start( box, | |
410 | + ftradio_new(dialog,_("Record format"),_("Controls the record format of files created on the host."),recfm),FALSE,TRUE,2); | |
411 | + | |
412 | + | |
413 | + // Create allocation unit box | |
414 | + static const struct ftoptions units[] = | |
415 | + { | |
416 | + { | |
417 | + LIB3270_FT_ALLOCATION_UNITS_DEFAULT, | |
418 | + N_("Default"), | |
419 | + NULL | |
420 | + }, | |
421 | + { | |
422 | + LIB3270_FT_ALLOCATION_UNITS_TRACKS, | |
423 | + N_("Tracks"), | |
424 | + NULL | |
425 | + }, | |
426 | + { | |
427 | + LIB3270_FT_ALLOCATION_UNITS_CYLINDERS, | |
428 | + N_("Cylinders"), | |
429 | + NULL | |
430 | + }, | |
431 | + { | |
432 | + LIB3270_FT_ALLOCATION_UNITS_AVBLOCK, | |
433 | + N_("Avblock"), | |
434 | + NULL | |
435 | + }, | |
436 | + { | |
437 | + 0, | |
438 | + NULL, | |
439 | + NULL | |
440 | + } | |
441 | + }; | |
442 | + | |
443 | + gtk_box_pack_start( box, | |
444 | + ftradio_new(dialog,_("Space allocation units"),_("Specifies the units for the TSO host primary and secondary space options."),units),FALSE,TRUE,2); | |
445 | + | |
348 | 446 | // Create values box |
349 | 447 | static const struct ftvalues val[] = |
350 | 448 | { |
... | ... | @@ -358,7 +456,7 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) |
358 | 456 | { |
359 | 457 | VALUE_PRIMSPACE, |
360 | 458 | N_( "Primary space:" ), |
361 | - N_( "Primary allocation for a file created on a TSO host.\nThe units are given by the Allocation option." ) | |
459 | + N_( "Primary allocation for a file created on a TSO host.\nThe units are given by the space allocation units option." ) | |
362 | 460 | }, |
363 | 461 | |
364 | 462 | { |
... | ... | @@ -370,7 +468,7 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) |
370 | 468 | { |
371 | 469 | VALUE_SECSPACE, |
372 | 470 | N_( "Secondary space:" ), |
373 | - N_( "Secondary allocation for a file created on a TSO host.\nThe units are given by the Allocation option." ) | |
471 | + N_( "Secondary allocation for a file created on a TSO host.\nThe units are given by the space allocation units option." ) | |
374 | 472 | }, |
375 | 473 | |
376 | 474 | { |
... | ... | @@ -386,13 +484,11 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) |
386 | 484 | } |
387 | 485 | }; |
388 | 486 | |
487 | + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),GTK_WIDGET(box),FALSE,TRUE,2); | |
389 | 488 | gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),ftvalue_new(dialog,val),FALSE,TRUE,2); |
390 | 489 | |
391 | 490 | } |
392 | 491 | |
393 | - | |
394 | - // File transfer options | |
395 | - | |
396 | 492 | return GTK_WIDGET(dialog); |
397 | 493 | } |
398 | 494 | ... | ... |
src/pw3270/ft/testprogram.c
... | ... | @@ -38,7 +38,7 @@ int main (int argc, char *argv[]) |
38 | 38 | |
39 | 39 | gtk_init (&argc, &argv); |
40 | 40 | // win = v3270_dialog_ft_new(LIB3270_FT_OPTION_RECEIVE|LIB3270_FT_OPTION_ASCII); |
41 | - win = v3270_dialog_ft_new(0); | |
41 | + win = v3270_dialog_ft_new(LIB3270_FT_OPTION_SEND); | |
42 | 42 | |
43 | 43 | |
44 | 44 | gtk_widget_show_all (win); | ... | ... |