Commit c7a62db8b9b926fae91a7db0d8bafbbe2131bc77

Authored by perry.werneck@gmail.com
1 parent 1211f8b2

Trabalhando no diálogo de transferência de arquivos

src/include/lib3270/filetransfer.h
@@ -37,30 +37,48 @@ @@ -37,30 +37,48 @@
37 #include <sys/time.h> 37 #include <sys/time.h>
38 #include <lib3270/charset.h> 38 #include <lib3270/charset.h>
39 39
40 - #define LIB3270_FT_OPTION_SEND 0x0000  
41 40
  41 +/*
42 #define LIB3270_FT_RECORD_FORMAT_DEFAULT 0x0000 42 #define LIB3270_FT_RECORD_FORMAT_DEFAULT 0x0000
43 #define LIB3270_FT_RECORD_FORMAT_FIXED 0x0100 43 #define LIB3270_FT_RECORD_FORMAT_FIXED 0x0100
44 #define LIB3270_FT_RECORD_FORMAT_VARIABLE 0x0200 44 #define LIB3270_FT_RECORD_FORMAT_VARIABLE 0x0200
45 #define LIB3270_FT_RECORD_FORMAT_UNDEFINED 0x0300 45 #define LIB3270_FT_RECORD_FORMAT_UNDEFINED 0x0300
46 #define LIB3270_FT_RECORD_FORMAT_MASK LIB3270_FT_RECORD_FORMAT_UNDEFINED 46 #define LIB3270_FT_RECORD_FORMAT_MASK LIB3270_FT_RECORD_FORMAT_UNDEFINED
  47 +*/
47 48
  49 +/*
48 #define LIB3270_FT_ALLOCATION_UNITS_DEFAULT 0x0000 50 #define LIB3270_FT_ALLOCATION_UNITS_DEFAULT 0x0000
49 #define LIB3270_FT_ALLOCATION_UNITS_TRACKS 0x1000 51 #define LIB3270_FT_ALLOCATION_UNITS_TRACKS 0x1000
50 #define LIB3270_FT_ALLOCATION_UNITS_CYLINDERS 0x2000 52 #define LIB3270_FT_ALLOCATION_UNITS_CYLINDERS 0x2000
51 #define LIB3270_FT_ALLOCATION_UNITS_AVBLOCK 0x3000 53 #define LIB3270_FT_ALLOCATION_UNITS_AVBLOCK 0x3000
52 #define LIB3270_FT_ALLOCATION_UNITS_MASK LIB3270_FT_ALLOCATION_UNITS_AVBLOCK 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 } LIB3270_FT_OPTION; 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 typedef enum _lib3270_ft_state 82 typedef enum _lib3270_ft_state
65 { 83 {
66 LIB3270_FT_STATE_NONE, /**< No transfer in progress */ 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,6 +135,8 @@ static void toggle_option(GtkToggleButton *button, v3270FTD *dialog)
135 else 135 else
136 dialog->options &= ~opt->flag; 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 static GtkWidget * ftoption_new(v3270FTD *dialog, const struct ftoptions *opt) 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,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 GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) 223 GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options)
196 { 224 {
197 v3270FTD *dialog = g_object_new(GTK_TYPE_V3270FTD, NULL); 225 v3270FTD *dialog = g_object_new(GTK_TYPE_V3270FTD, NULL);
@@ -345,6 +373,76 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) @@ -345,6 +373,76 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options)
345 gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),ftoption_new(dialog,opt),FALSE,TRUE,2); 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 // Create values box 446 // Create values box
349 static const struct ftvalues val[] = 447 static const struct ftvalues val[] =
350 { 448 {
@@ -358,7 +456,7 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) @@ -358,7 +456,7 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options)
358 { 456 {
359 VALUE_PRIMSPACE, 457 VALUE_PRIMSPACE,
360 N_( "Primary space:" ), 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,7 +468,7 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options)
370 { 468 {
371 VALUE_SECSPACE, 469 VALUE_SECSPACE,
372 N_( "Secondary space:" ), 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,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 gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),ftvalue_new(dialog,val),FALSE,TRUE,2); 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 return GTK_WIDGET(dialog); 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,7 +38,7 @@ int main (int argc, char *argv[])
38 38
39 gtk_init (&argc, &argv); 39 gtk_init (&argc, &argv);
40 // win = v3270_dialog_ft_new(LIB3270_FT_OPTION_RECEIVE|LIB3270_FT_OPTION_ASCII); 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 gtk_widget_show_all (win); 44 gtk_widget_show_all (win);