Commit 25832dbabcd362690375d5243ff4194e386c5001
1 parent
7f24770a
Exists in
master
and in
5 other branches
Atualizações no diálogo de transferência de arquivos
Showing
1 changed file
with
69 additions
and
41 deletions
Show diff stats
src/pw3270/filetransfer.c
| ... | ... | @@ -44,6 +44,7 @@ |
| 44 | 44 | GtkWidget * dialog; |
| 45 | 45 | GtkEntry * file[2]; |
| 46 | 46 | GtkEntry * parm[5]; |
| 47 | + GtkWidget * ready; | |
| 47 | 48 | }; |
| 48 | 49 | |
| 49 | 50 | struct ftoption |
| ... | ... | @@ -81,10 +82,14 @@ static void error_dialog(GtkWidget *widget, const gchar *title, const gchar *msg |
| 81 | 82 | gtk_widget_destroy(popup); |
| 82 | 83 | } |
| 83 | 84 | |
| 84 | -static void begin_ft_session(GtkAction *action, GtkWidget *widget, LIB3270_FT_OPTION opt) | |
| 85 | +static gchar * get_attribute(GObject *action, struct ftdialog *dlg, const gchar *name) | |
| 85 | 86 | { |
| 86 | - // Create file-transfer options dialog | |
| 87 | + gchar *val = g_object_get_data(action,name); | |
| 87 | 88 | |
| 89 | + if(val) | |
| 90 | + return g_strdup(val); | |
| 91 | + | |
| 92 | + return get_string_from_config(dlg->name,name,""); | |
| 88 | 93 | } |
| 89 | 94 | |
| 90 | 95 | static void browse_file(GtkButton *button,struct ftdialog *dlg) |
| ... | ... | @@ -117,6 +122,38 @@ static void browse_file(GtkButton *button,struct ftdialog *dlg) |
| 117 | 122 | |
| 118 | 123 | } |
| 119 | 124 | |
| 125 | +static gboolean is_dialog_ok(GtkEditable *editable, struct ftdialog *dlg) | |
| 126 | +{ | |
| 127 | + const gchar *local = gtk_entry_get_text(GTK_ENTRY(dlg->file[0])); | |
| 128 | + const gchar *remote = gtk_entry_get_text(GTK_ENTRY(dlg->file[1])); | |
| 129 | + int f; | |
| 130 | + | |
| 131 | + if(!(*local && *remote)) | |
| 132 | + return FALSE; | |
| 133 | + | |
| 134 | + if( (dlg->option&LIB3270_FT_OPTION_RECEIVE) == 0 && !g_file_test(local,G_FILE_TEST_EXISTS)) | |
| 135 | + return FALSE; | |
| 136 | + | |
| 137 | + for(f=0;f<5;f++) | |
| 138 | + { | |
| 139 | + const gchar *val = gtk_entry_get_text(GTK_ENTRY(dlg->parm[f])); | |
| 140 | + | |
| 141 | + while(*val) | |
| 142 | + { | |
| 143 | + if(*val < '0' || *val > '9') | |
| 144 | + return FALSE; | |
| 145 | + val++; | |
| 146 | + } | |
| 147 | + } | |
| 148 | + | |
| 149 | + return TRUE; | |
| 150 | +} | |
| 151 | + | |
| 152 | +static void check_entry(GtkEditable *editable, struct ftdialog *dlg) | |
| 153 | +{ | |
| 154 | + gtk_widget_set_sensitive(dlg->ready,is_dialog_ok(editable,dlg)); | |
| 155 | +} | |
| 156 | + | |
| 120 | 157 | static void add_file_fields(GObject *action, struct ftdialog *dlg) |
| 121 | 158 | { |
| 122 | 159 | static const gchar * label[] = { N_( "_Local file name:" ), N_( "_Host file name:" ) }; |
| ... | ... | @@ -129,7 +166,7 @@ static void add_file_fields(GObject *action, struct ftdialog *dlg) |
| 129 | 166 | |
| 130 | 167 | for(f=0;f<2;f++) |
| 131 | 168 | { |
| 132 | - const gchar *val; | |
| 169 | + gchar *val; | |
| 133 | 170 | |
| 134 | 171 | widget = gtk_label_new_with_mnemonic(gettext(label[f])); |
| 135 | 172 | |
| ... | ... | @@ -137,21 +174,13 @@ static void add_file_fields(GObject *action, struct ftdialog *dlg) |
| 137 | 174 | gtk_table_attach(GTK_TABLE(table),widget,0,1,f,f+1,GTK_FILL,GTK_FILL,2,2); |
| 138 | 175 | |
| 139 | 176 | dlg->file[f] = GTK_ENTRY(gtk_entry_new()); |
| 177 | + g_signal_connect(G_OBJECT(dlg->file[f]),"changed",G_CALLBACK(check_entry),dlg); | |
| 140 | 178 | |
| 141 | 179 | gtk_widget_set_name(GTK_WIDGET(dlg->file[f]),attr[f]); |
| 142 | 180 | |
| 143 | - val = g_object_get_data(action,attr[f]); | |
| 144 | - | |
| 145 | - if(val) | |
| 146 | - { | |
| 147 | - gtk_entry_set_text(dlg->file[f],val); | |
| 148 | - } | |
| 149 | - else | |
| 150 | - { | |
| 151 | - gchar *name = get_string_from_config(dlg->name,attr[f],""); | |
| 152 | - gtk_entry_set_text(dlg->file[f],name); | |
| 153 | - g_free(name); | |
| 154 | - } | |
| 181 | + val = get_attribute(action,dlg,attr[f]); | |
| 182 | + gtk_entry_set_text(dlg->file[f],val); | |
| 183 | + g_free(val); | |
| 155 | 184 | |
| 156 | 185 | gtk_entry_set_width_chars(dlg->file[f],40); |
| 157 | 186 | |
| ... | ... | @@ -266,18 +295,10 @@ static gboolean run_ft_dialog(GObject *action, GtkWidget *widget, struct ftdialo |
| 266 | 295 | { |
| 267 | 296 | if(dlg->parm[f]) |
| 268 | 297 | { |
| 269 | - const gchar *name = gtk_widget_get_name(GTK_WIDGET(dlg->parm[f])); | |
| 270 | - const gchar *attr = g_object_get_data(action,name); | |
| 271 | - if(attr) | |
| 272 | - { | |
| 273 | - gtk_entry_set_text(dlg->parm[f],attr); | |
| 274 | - } | |
| 275 | - else | |
| 276 | - { | |
| 277 | - gchar *ptr = get_string_from_config(dlg->name,name,""); | |
| 278 | - gtk_entry_set_text(dlg->parm[f],ptr); | |
| 279 | - g_free(ptr); | |
| 280 | - } | |
| 298 | + gchar *val = get_attribute(action,dlg,gtk_widget_get_name(GTK_WIDGET(dlg->parm[f]))); | |
| 299 | + gtk_entry_set_text(dlg->parm[f],val); | |
| 300 | + g_free(val); | |
| 301 | + g_signal_connect(G_OBJECT(dlg->parm[f]),"changed",G_CALLBACK(check_entry),dlg); | |
| 281 | 302 | } |
| 282 | 303 | } |
| 283 | 304 | |
| ... | ... | @@ -311,8 +332,6 @@ static gboolean run_ft_dialog(GObject *action, GtkWidget *widget, struct ftdialo |
| 311 | 332 | parm[4], // dft |
| 312 | 333 | &msg ); |
| 313 | 334 | |
| 314 | - trace("%s ft=%p msg=%p",__FUNCTION__,ft,&msg); | |
| 315 | - | |
| 316 | 335 | if(msg) |
| 317 | 336 | { |
| 318 | 337 | GtkWidget *popup = gtk_message_dialog_new_with_markup( |
| ... | ... | @@ -332,9 +351,24 @@ static gboolean run_ft_dialog(GObject *action, GtkWidget *widget, struct ftdialo |
| 332 | 351 | |
| 333 | 352 | } |
| 334 | 353 | |
| 335 | - return ft != NULL; | |
| 354 | + if(!ft) | |
| 355 | + return FALSE; | |
| 356 | + | |
| 357 | + return TRUE; | |
| 358 | +} | |
| 359 | + | |
| 360 | +static void add_buttons(struct ftdialog *dlg) | |
| 361 | +{ | |
| 362 | + dlg->ready = gtk_dialog_add_button(GTK_DIALOG(dlg->dialog), | |
| 363 | + dlg->option & LIB3270_FT_OPTION_RECEIVE != 0 ? GTK_STOCK_SAVE : GTK_STOCK_OPEN, | |
| 364 | + GTK_RESPONSE_ACCEPT); | |
| 365 | + | |
| 366 | + gtk_widget_set_sensitive(dlg->ready,FALSE); | |
| 367 | + | |
| 368 | + gtk_dialog_add_button(GTK_DIALOG(dlg->dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT); | |
| 336 | 369 | } |
| 337 | 370 | |
| 371 | + | |
| 338 | 372 | void download_action(GtkAction *action, GtkWidget *widget) |
| 339 | 373 | { |
| 340 | 374 | struct ftdialog dlg; |
| ... | ... | @@ -350,12 +384,12 @@ void download_action(GtkAction *action, GtkWidget *widget) |
| 350 | 384 | dlg.dialog = gtk_dialog_new_with_buttons( _( "Receive file from host" ), \ |
| 351 | 385 | GTK_WINDOW(gtk_widget_get_toplevel(widget)), |
| 352 | 386 | GTK_DIALOG_DESTROY_WITH_PARENT, \ |
| 353 | - GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, \ | |
| 354 | - GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, \ | |
| 355 | 387 | NULL ); |
| 356 | 388 | |
| 357 | 389 | dlg.name = gtk_action_get_name(action); |
| 358 | 390 | dlg.option = LIB3270_FT_OPTION_RECEIVE; |
| 391 | + | |
| 392 | + add_buttons(&dlg); | |
| 359 | 393 | add_file_fields(G_OBJECT(action),&dlg); |
| 360 | 394 | add_transfer_options(G_OBJECT(action),&dlg); |
| 361 | 395 | |
| ... | ... | @@ -410,12 +444,12 @@ void upload_action(GtkAction *action, GtkWidget *widget) |
| 410 | 444 | dlg.dialog = gtk_dialog_new_with_buttons( _( "Send file to host" ), \ |
| 411 | 445 | GTK_WINDOW(gtk_widget_get_toplevel(widget)), |
| 412 | 446 | GTK_DIALOG_DESTROY_WITH_PARENT, \ |
| 413 | - GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, \ | |
| 414 | - GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, \ | |
| 415 | 447 | NULL ); |
| 416 | 448 | |
| 417 | 449 | dlg.name = gtk_action_get_name(action); |
| 418 | 450 | dlg.option = LIB3270_FT_OPTION_SEND; |
| 451 | + | |
| 452 | + add_buttons(&dlg); | |
| 419 | 453 | add_file_fields(G_OBJECT(action),&dlg); |
| 420 | 454 | add_transfer_options(G_OBJECT(action),&dlg); |
| 421 | 455 | |
| ... | ... | @@ -456,15 +490,9 @@ void upload_action(GtkAction *action, GtkWidget *widget) |
| 456 | 490 | GtkWidget * frame = gtk_frame_new(gettext(fdesk[f].title)); |
| 457 | 491 | GtkWidget * vbox = gtk_vbox_new(TRUE,2); |
| 458 | 492 | GSList * group = NULL; |
| 459 | - const gchar * attr = g_object_get_data(G_OBJECT(action),fdesk[f].name); | |
| 460 | - gchar * setup; | |
| 493 | + gchar * setup = get_attribute(G_OBJECT(action),&dlg,fdesk[f].name); | |
| 461 | 494 | int p; |
| 462 | 495 | |
| 463 | - if(attr) | |
| 464 | - setup = g_strdup(attr); | |
| 465 | - else | |
| 466 | - setup = get_string_from_config(dlg.name,fdesk[f].name,fdesk[f].option[0].name); | |
| 467 | - | |
| 468 | 496 | for(p=0;p<4;p++) |
| 469 | 497 | { |
| 470 | 498 | GtkWidget *widget = gtk_radio_button_new_with_label(group,gettext(fdesk[f].option[p].label)); | ... | ... |