diff --git a/src/pw3270/ft/ftdialog.c b/src/pw3270/ft/ftdialog.c index 7eea46f..a924509 100644 --- a/src/pw3270/ft/ftdialog.c +++ b/src/pw3270/ft/ftdialog.c @@ -39,10 +39,22 @@ FILENAME_COUNT }; + enum _value + { + VALUE_LRECL, + VALUE_BLKSIZE, + VALUE_PRIMSPACE, + VALUE_SECSPACE, + VALUE_DFT, + + VALUE_COUNT + }; + struct _v3270FTD { GtkDialog parent; GtkWidget * filename[FILENAME_COUNT]; /**< Filenames for the transfer */ + int value[VALUE_COUNT]; LIB3270_FT_OPTION options; }; @@ -55,7 +67,21 @@ G_DEFINE_TYPE(v3270FTD, v3270FTD, GTK_TYPE_DIALOG); -/*--[ Globals ]--------------------------------------------------------------------------------------*/ + struct ftoptions + { + LIB3270_FT_OPTION flag; + const gchar * label; + const gchar * tooltip; + }; + + struct ftvalues + { + int id; + const gchar * label; + const gchar * tooltip; + }; + +/*--[ Implement ]------------------------------------------------------------------------------------*/ static void v3270FTD_class_init(v3270FTDClass *klass) { @@ -100,14 +126,6 @@ static void browse_file(GtkButton *button,v3270FTD *parent) } - struct ftoptions - { - LIB3270_FT_OPTION flag; - const gchar * label; - const gchar * tooltip; - }; - - static void toggle_option(GtkToggleButton *button, v3270FTD *dialog) { const struct ftoptions *opt = (const struct ftoptions *) g_object_get_data(G_OBJECT(button),"cfg"); @@ -143,6 +161,37 @@ static GtkWidget * ftoption_new(v3270FTD *dialog, const struct ftoptions *opt) return GTK_WIDGET(grid); } +static GtkWidget * ftvalue_new(v3270FTD *dialog, const struct ftvalues *val) +{ + GtkGrid * grid = GTK_GRID(gtk_grid_new()); + int f; + + gtk_grid_set_row_homogeneous(grid,TRUE); + gtk_grid_set_column_homogeneous(grid,TRUE); + gtk_grid_set_column_spacing(grid,5); + gtk_grid_set_row_spacing(grid,5); + + for(f=0;val[f].label;f++) + { + int col = (f&1)*2; + int row = f/2; + GtkWidget * label = gtk_label_new_with_mnemonic(gettext(val[f].label)); + GtkEntry * entry = GTK_ENTRY(gtk_entry_new()); + + gtk_label_set_mnemonic_widget(GTK_LABEL(label),GTK_WIDGET(entry)); + gtk_widget_set_tooltip_text(GTK_WIDGET(entry),gettext(val[f].tooltip)); + + g_object_set_data(G_OBJECT(entry),"cfg",(gpointer) &val[f]); + + gtk_grid_attach(grid,GTK_WIDGET(label),col,row,1,1); + gtk_grid_attach(grid,GTK_WIDGET(entry),col+1,row,1,1); + + } + + return GTK_WIDGET(grid); + +} + GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) { v3270FTD *dialog = g_object_new(GTK_TYPE_V3270FTD, NULL); @@ -172,38 +221,50 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) gtk_grid_set_column_spacing(grid,5); gtk_grid_set_row_spacing(grid,5); -// GtkButton * browse = GTK_BUTTON(gtk_button_new_with_mnemonic(_( "_Browse"))); GtkButton * browse = GTK_BUTTON(gtk_button_new_from_icon_name("text-x-generic",GTK_ICON_SIZE_BUTTON)); gtk_button_set_focus_on_click(browse,FALSE); gtk_widget_set_tooltip_text(GTK_WIDGET(browse),_("Select file")); g_signal_connect(G_OBJECT(browse),"clicked",G_CALLBACK(browse_file),dialog); - GtkWidget * ftOptions; - if(options & LIB3270_FT_OPTION_RECEIVE) { // It's receiving file first host filename, then local filename + gtk_window_set_title(GTK_WINDOW(dialog),_( "Receive file from host" )); + + gtk_grid_attach(grid,label[FILENAME_HOST],0,0,1,1); + gtk_grid_attach(grid,label[FILENAME_LOCAL],0,1,1,1); + + gtk_grid_attach(grid,dialog->filename[FILENAME_HOST],1,0,3,1); + gtk_grid_attach(grid,dialog->filename[FILENAME_LOCAL],1,1,3,1); + gtk_grid_attach(grid,GTK_WIDGET(browse),5,1,1,1); + + gtk_widget_set_tooltip_text(dialog->filename[FILENAME_HOST],_("Name of the source file.")); + gtk_widget_set_tooltip_text(dialog->filename[FILENAME_LOCAL],_("Where to save the received file.")); + + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),GTK_WIDGET(grid),FALSE,TRUE,2); + + // Create options box static const struct ftoptions opt[] = { { LIB3270_FT_OPTION_ASCII, - N_( "_Text file" ), - N_( "Mark this box if it's a text file.") + N_( "_Text file." ), + N_( "Check for text files.") }, { LIB3270_FT_OPTION_CRLF, - N_( "Add/Remove _CR at end of line" ), - N_( "If check the file will receive a CR/LF at the end of every line.") + N_( "Add _CR at end of line." ), + N_( "Adds Newline characters to each host file record before transferring it to the local workstation.") }, { LIB3270_FT_OPTION_APPEND, - N_( "_Append" ), - N_( "If check the data will be appended to the current file, if uncheck the file will be replaced.") + N_( "_Append to destination" ), + N_( "Appends the source file to the destination file.") }, { LIB3270_FT_OPTION_REMAP, - N_("_Remap ASCII Characters"), - N_("Check to translate file contents from EBCDIC to ASCII.") + N_("_Remap to ASCII Characters."), + N_("Remap the text to ensure maximum compatibility between the workstation's character set and encoding and the host's EBCDIC code page.") }, { 0, @@ -212,19 +273,25 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) } }; - gtk_window_set_title(GTK_WINDOW(dialog),_( "Receive file from host" )); - - gtk_grid_attach(grid,label[FILENAME_HOST],0,0,1,1); - gtk_grid_attach(grid,label[FILENAME_LOCAL],0,1,1,1); - - gtk_grid_attach(grid,dialog->filename[FILENAME_HOST],1,0,3,1); - gtk_grid_attach(grid,dialog->filename[FILENAME_LOCAL],1,1,3,1); - gtk_grid_attach(grid,GTK_WIDGET(browse),5,1,1,1); + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),ftoption_new(dialog,opt),FALSE,TRUE,2); - gtk_widget_set_tooltip_text(dialog->filename[FILENAME_HOST],_("Name of the origin file on the host")); - gtk_widget_set_tooltip_text(dialog->filename[FILENAME_LOCAL],_("Where to save the received file")); + // Create values box + static const struct ftvalues val[] = + { + { + VALUE_DFT, + N_( "DFT B_uffer size:" ), + N_( "Buffer size for DFT-mode transfers. Can range from 256 to 32768. Larger values give better performance, but some hosts may not be able to support them." ) + }, + + { + 0, + NULL, + NULL + } + }; - ftOptions = ftoption_new(dialog,opt); + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),ftvalue_new(dialog,val),FALSE,TRUE,2); } else @@ -232,19 +299,97 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) // It's sending file first local filename, then hostfilename gtk_window_set_title(GTK_WINDOW(dialog),_( "Send file to host" )); - gtk_grid_attach(grid,dialog->filename[FILENAME_LOCAL],0,0,1,1); - gtk_grid_attach(grid,dialog->filename[FILENAME_HOST],0,1,1,1); + gtk_grid_attach(grid,label[FILENAME_LOCAL],0,0,1,1); + gtk_grid_attach(grid,label[FILENAME_HOST],0,1,1,1); gtk_grid_attach(grid,dialog->filename[FILENAME_LOCAL],1,0,3,1); + gtk_grid_attach(grid,GTK_WIDGET(browse),5,0,1,1); + gtk_grid_attach(grid,dialog->filename[FILENAME_HOST],1,1,3,1); - gtk_widget_set_tooltip_text(dialog->filename[FILENAME_HOST],_("Name of the target file on the host")); - gtk_widget_set_tooltip_text(dialog->filename[FILENAME_LOCAL],_("Path of the local file to send")); + gtk_widget_set_tooltip_text(dialog->filename[FILENAME_HOST],_("Name of the target file.")); + gtk_widget_set_tooltip_text(dialog->filename[FILENAME_LOCAL],_("Path of the local file to send.")); + + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),GTK_WIDGET(grid),FALSE,TRUE,2); + + // Create options box + static const struct ftoptions opt[] = + { + { + LIB3270_FT_OPTION_ASCII, + N_( "_Text file." ), + N_( "Check for text files.") + }, + { + LIB3270_FT_OPTION_CRLF, + N_( "_CR delimited file." ), + N_( "Remove the default newline characters in local files before transferring them to the host.") + }, + { + LIB3270_FT_OPTION_APPEND, + N_( "_Append to destination" ), + N_( "Appends the source file to the destination file.") + }, + { + LIB3270_FT_OPTION_REMAP, + N_("_Remap to EBCDIC Characters."), + N_("Remap the text to ensure maximum compatibility between the workstation's character set and encoding and the host's EBCDIC code page.") + }, + { + 0, + NULL, + NULL + } + }; + + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),ftoption_new(dialog,opt),FALSE,TRUE,2); + + + // Create values box + static const struct ftvalues val[] = + { + { + VALUE_LRECL, + N_( "Lrecl:" ), + N_( "Specifies the record length (or maximum record length) for files created on the host." ) + }, + + + { + VALUE_PRIMSPACE, + N_( "Primary space:" ), + N_( "Primary allocation for a file created on a TSO host.\nThe units are given by the Allocation option." ) + }, + + { + VALUE_BLKSIZE, + N_( "Blksize:" ), + N_( "Specifies the block size for files created on the host (TSO hosts only)." ) + }, + + { + VALUE_SECSPACE, + N_( "Secondary space:" ), + N_( "Secondary allocation for a file created on a TSO host.\nThe units are given by the Allocation option." ) + }, + + { + VALUE_DFT, + N_( "DFT B_uffer size:" ), + N_( "Buffer size for DFT-mode transfers. Can range from 256 to 32768. Larger values give better performance, but some hosts may not be able to support them." ) + }, + + { + 0, + NULL, + NULL + } + }; + + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),ftvalue_new(dialog,val),FALSE,TRUE,2); } - gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),GTK_WIDGET(grid),FALSE,TRUE,2); - gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),ftOptions,FALSE,TRUE,2); // File transfer options diff --git a/src/pw3270/ft/testprogram.c b/src/pw3270/ft/testprogram.c index cd51a04..0acd160 100644 --- a/src/pw3270/ft/testprogram.c +++ b/src/pw3270/ft/testprogram.c @@ -37,7 +37,8 @@ int main (int argc, char *argv[]) GtkWidget *win; gtk_init (&argc, &argv); - win = v3270_dialog_ft_new(LIB3270_FT_OPTION_RECEIVE|LIB3270_FT_OPTION_ASCII); +// win = v3270_dialog_ft_new(LIB3270_FT_OPTION_RECEIVE|LIB3270_FT_OPTION_ASCII); + win = v3270_dialog_ft_new(0); gtk_widget_show_all (win); -- libgit2 0.21.2