Commit 5e333817b3fe10f980a5f10a488608bf08b88fae
1 parent
c7a62db8
Exists in
master
and in
5 other branches
Implementando diálogo de transferência de arquivos
Showing
2 changed files
with
54 additions
and
28 deletions
Show diff stats
src/pw3270/ft/ftdialog.c
| @@ -141,8 +141,9 @@ static void toggle_option(GtkToggleButton *button, v3270FTD *dialog) | @@ -141,8 +141,9 @@ static void toggle_option(GtkToggleButton *button, v3270FTD *dialog) | ||
| 141 | 141 | ||
| 142 | static GtkWidget * ftoption_new(v3270FTD *dialog, const struct ftoptions *opt) | 142 | static GtkWidget * ftoption_new(v3270FTD *dialog, const struct ftoptions *opt) |
| 143 | { | 143 | { |
| 144 | - GtkGrid * grid = GTK_GRID(gtk_grid_new()); | ||
| 145 | - int f; | 144 | + GtkContainer * frame = GTK_CONTAINER(gtk_frame_new(_("Transfer options"))); |
| 145 | + GtkGrid * grid = GTK_GRID(gtk_grid_new()); | ||
| 146 | + int f; | ||
| 146 | 147 | ||
| 147 | gtk_grid_set_row_homogeneous(grid,TRUE); | 148 | gtk_grid_set_row_homogeneous(grid,TRUE); |
| 148 | gtk_grid_set_column_homogeneous(grid,TRUE); | 149 | gtk_grid_set_column_homogeneous(grid,TRUE); |
| @@ -152,7 +153,7 @@ static GtkWidget * ftoption_new(v3270FTD *dialog, const struct ftoptions *opt) | @@ -152,7 +153,7 @@ static GtkWidget * ftoption_new(v3270FTD *dialog, const struct ftoptions *opt) | ||
| 152 | for(f=0;opt[f].label;f++) | 153 | for(f=0;opt[f].label;f++) |
| 153 | { | 154 | { |
| 154 | GtkWidget * button = gtk_check_button_new_with_mnemonic(gettext(opt[f].label)); | 155 | GtkWidget * button = gtk_check_button_new_with_mnemonic(gettext(opt[f].label)); |
| 155 | - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),dialog->options & opt[f].flag); | 156 | + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),(dialog->options & opt[f].flag) != 0); |
| 156 | gtk_widget_set_tooltip_text(GTK_WIDGET(button),gettext(opt[f].tooltip)); | 157 | gtk_widget_set_tooltip_text(GTK_WIDGET(button),gettext(opt[f].tooltip)); |
| 157 | gtk_widget_set_hexpand(button,TRUE); | 158 | gtk_widget_set_hexpand(button,TRUE); |
| 158 | gtk_grid_attach(grid,button,f&1,f/2,1,1); | 159 | gtk_grid_attach(grid,button,f&1,f/2,1,1); |
| @@ -160,25 +161,41 @@ static GtkWidget * ftoption_new(v3270FTD *dialog, const struct ftoptions *opt) | @@ -160,25 +161,41 @@ static GtkWidget * ftoption_new(v3270FTD *dialog, const struct ftoptions *opt) | ||
| 160 | g_signal_connect(G_OBJECT(button),"toggled",G_CALLBACK(toggle_option),dialog); | 161 | g_signal_connect(G_OBJECT(button),"toggled",G_CALLBACK(toggle_option),dialog); |
| 161 | } | 162 | } |
| 162 | 163 | ||
| 163 | - return GTK_WIDGET(grid); | 164 | + gtk_container_add(frame,GTK_WIDGET(grid)); |
| 165 | + | ||
| 166 | + return GTK_WIDGET(frame); | ||
| 164 | } | 167 | } |
| 165 | 168 | ||
| 166 | -static GtkWidget * ftvalue_new(v3270FTD *dialog, const struct ftvalues *val) | 169 | +/* |
| 170 | +http://stackoverflow.com/questions/16539127/gtkentry-change-text-on-user-input | ||
| 171 | +void entry_insert(GtkEntryBuffer *buffer, guint position, gchar *chars, guint n_chars, gpointer user_data) | ||
| 167 | { | 172 | { |
| 168 | - GtkGrid * grid = GTK_GRID(gtk_grid_new()); | ||
| 169 | - int f; | ||
| 170 | 173 | ||
| 171 | - gtk_grid_set_row_homogeneous(grid,TRUE); | ||
| 172 | - gtk_grid_set_column_homogeneous(grid,TRUE); | ||
| 173 | - gtk_grid_set_column_spacing(grid,5); | ||
| 174 | - gtk_grid_set_row_spacing(grid,5); | 174 | +} |
| 175 | +static void setup_numeric_entry(GtkEntry *entry) | ||
| 176 | +{ | ||
| 177 | + gtk_entry_set_max_length(entry,10); | ||
| 178 | + gtk_entry_set_width_chars(entry,10); | ||
| 179 | + gtk_entry_set_alignment(entry,1); | ||
| 180 | + gtk_entry_set_input_purpose(entry,GTK_INPUT_PURPOSE_NUMBER); | ||
| 181 | + g_signal_connect_after(G_OBJECT(entry), "insert-text", G_CALLBACK(entry_insert),NULL); | ||
| 182 | +} | ||
| 183 | +*/ | ||
| 184 | + | ||
| 185 | +static GtkWidget * ftvalue_new(v3270FTD *dialog, GtkGrid *grid, int r, const struct ftvalues *val) | ||
| 186 | +{ | ||
| 187 | + int f; | ||
| 175 | 188 | ||
| 176 | for(f=0;val[f].label;f++) | 189 | for(f=0;val[f].label;f++) |
| 177 | { | 190 | { |
| 178 | - int col = (f&1)*2; | ||
| 179 | - int row = f/2; | ||
| 180 | - GtkWidget * label = gtk_label_new_with_mnemonic(gettext(val[f].label)); | ||
| 181 | - GtkEntry * entry = GTK_ENTRY(gtk_entry_new()); | 191 | + int col = (f&1)*2; |
| 192 | + int row = (f/2)+r; | ||
| 193 | + GtkWidget * label = gtk_label_new_with_mnemonic(gettext(val[f].label)); | ||
| 194 | + GtkWidget * entry = GTK_WIDGET(gtk_spin_button_new_with_range(0,99999,1)); | ||
| 195 | + | ||
| 196 | + gtk_widget_set_hexpand(GTK_WIDGET(label),TRUE); | ||
| 197 | + gtk_widget_set_tooltip_text(GTK_WIDGET(label),gettext(val[f].tooltip)); | ||
| 198 | + gtk_misc_set_alignment(GTK_MISC(label),0,0.5); | ||
| 182 | 199 | ||
| 183 | gtk_label_set_mnemonic_widget(GTK_LABEL(label),GTK_WIDGET(entry)); | 200 | gtk_label_set_mnemonic_widget(GTK_LABEL(label),GTK_WIDGET(entry)); |
| 184 | gtk_widget_set_tooltip_text(GTK_WIDGET(entry),gettext(val[f].tooltip)); | 201 | gtk_widget_set_tooltip_text(GTK_WIDGET(entry),gettext(val[f].tooltip)); |
| @@ -204,7 +221,7 @@ static GtkWidget * ftradio_new(v3270FTD *dialog, const gchar *title, const gchar | @@ -204,7 +221,7 @@ static GtkWidget * ftradio_new(v3270FTD *dialog, const gchar *title, const gchar | ||
| 204 | for(f=0;opt[f].label;f++) | 221 | for(f=0;opt[f].label;f++) |
| 205 | { | 222 | { |
| 206 | GtkWidget * button = gtk_radio_button_new_with_label(lst,gettext(opt[f].label)); | 223 | 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); | 224 | + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),(dialog->options & opt[f].flag) != 0); |
| 208 | if(opt[f].tooltip) | 225 | if(opt[f].tooltip) |
| 209 | gtk_widget_set_tooltip_text(button,gettext(opt[f].tooltip)); | 226 | gtk_widget_set_tooltip_text(button,gettext(opt[f].tooltip)); |
| 210 | 227 | ||
| @@ -304,6 +321,7 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) | @@ -304,6 +321,7 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) | ||
| 304 | gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),ftoption_new(dialog,opt),FALSE,TRUE,2); | 321 | gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),ftoption_new(dialog,opt),FALSE,TRUE,2); |
| 305 | 322 | ||
| 306 | // Create values box | 323 | // Create values box |
| 324 | + /* | ||
| 307 | static const struct ftvalues val[] = | 325 | static const struct ftvalues val[] = |
| 308 | { | 326 | { |
| 309 | { | 327 | { |
| @@ -319,8 +337,8 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) | @@ -319,8 +337,8 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) | ||
| 319 | } | 337 | } |
| 320 | }; | 338 | }; |
| 321 | 339 | ||
| 322 | - gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),ftvalue_new(dialog,val),FALSE,TRUE,2); | ||
| 323 | - | 340 | + // gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),ftvalue_new(dialog,val),FALSE,TRUE,2); |
| 341 | + */ | ||
| 324 | } | 342 | } |
| 325 | else | 343 | else |
| 326 | { | 344 | { |
| @@ -374,7 +392,9 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) | @@ -374,7 +392,9 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) | ||
| 374 | 392 | ||
| 375 | 393 | ||
| 376 | // Create format box | 394 | // Create format box |
| 377 | - GtkBox * box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2)); | 395 | + GtkGrid * grid = GTK_GRID(gtk_grid_new()); |
| 396 | + gtk_grid_set_column_spacing(grid,5); | ||
| 397 | + gtk_grid_set_row_spacing(grid,5); | ||
| 378 | 398 | ||
| 379 | // Create record format box | 399 | // Create record format box |
| 380 | static const struct ftoptions recfm[] = | 400 | static const struct ftoptions recfm[] = |
| @@ -406,8 +426,10 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) | @@ -406,8 +426,10 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) | ||
| 406 | } | 426 | } |
| 407 | }; | 427 | }; |
| 408 | 428 | ||
| 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); | 429 | + gtk_grid_attach( grid, |
| 430 | + ftradio_new(dialog,_("Record format"),_("Controls the record format of files created on the host."),recfm), | ||
| 431 | + 0,0,2,1 | ||
| 432 | + ); | ||
| 411 | 433 | ||
| 412 | 434 | ||
| 413 | // Create allocation unit box | 435 | // Create allocation unit box |
| @@ -440,15 +462,18 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) | @@ -440,15 +462,18 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) | ||
| 440 | } | 462 | } |
| 441 | }; | 463 | }; |
| 442 | 464 | ||
| 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); | 465 | + gtk_grid_attach( grid, |
| 466 | + ftradio_new(dialog,_("Space allocation units"),_("Specifies the units for the TSO host primary and secondary space options."),units), | ||
| 467 | + 2,0,2,1 | ||
| 468 | + ); | ||
| 469 | + | ||
| 445 | 470 | ||
| 446 | // Create values box | 471 | // Create values box |
| 447 | static const struct ftvalues val[] = | 472 | static const struct ftvalues val[] = |
| 448 | { | 473 | { |
| 449 | { | 474 | { |
| 450 | VALUE_LRECL, | 475 | VALUE_LRECL, |
| 451 | - N_( "Lrecl:" ), | 476 | + N_( "Record Length:" ), |
| 452 | N_( "Specifies the record length (or maximum record length) for files created on the host." ) | 477 | N_( "Specifies the record length (or maximum record length) for files created on the host." ) |
| 453 | }, | 478 | }, |
| 454 | 479 | ||
| @@ -461,7 +486,7 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) | @@ -461,7 +486,7 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) | ||
| 461 | 486 | ||
| 462 | { | 487 | { |
| 463 | VALUE_BLKSIZE, | 488 | VALUE_BLKSIZE, |
| 464 | - N_( "Blksize:" ), | 489 | + N_( "Block size:" ), |
| 465 | N_( "Specifies the block size for files created on the host (TSO hosts only)." ) | 490 | N_( "Specifies the block size for files created on the host (TSO hosts only)." ) |
| 466 | }, | 491 | }, |
| 467 | 492 | ||
| @@ -484,8 +509,9 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) | @@ -484,8 +509,9 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) | ||
| 484 | } | 509 | } |
| 485 | }; | 510 | }; |
| 486 | 511 | ||
| 487 | - gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),GTK_WIDGET(box),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); | 512 | + ftvalue_new(dialog,grid,1,val); |
| 513 | + | ||
| 514 | + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),GTK_WIDGET(grid),FALSE,TRUE,2); | ||
| 489 | 515 | ||
| 490 | } | 516 | } |
| 491 | 517 |
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(LIB3270_FT_OPTION_SEND); | 41 | + win = v3270_dialog_ft_new(LIB3270_FT_OPTION_SEND|LIB3270_FT_OPTION_REMAP); |
| 42 | 42 | ||
| 43 | 43 | ||
| 44 | gtk_widget_show_all (win); | 44 | gtk_widget_show_all (win); |