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,6 +44,7 @@ | ||
| 44 | GtkWidget * dialog; | 44 | GtkWidget * dialog; |
| 45 | GtkEntry * file[2]; | 45 | GtkEntry * file[2]; |
| 46 | GtkEntry * parm[5]; | 46 | GtkEntry * parm[5]; |
| 47 | + GtkWidget * ready; | ||
| 47 | }; | 48 | }; |
| 48 | 49 | ||
| 49 | struct ftoption | 50 | struct ftoption |
| @@ -81,10 +82,14 @@ static void error_dialog(GtkWidget *widget, const gchar *title, const gchar *msg | @@ -81,10 +82,14 @@ static void error_dialog(GtkWidget *widget, const gchar *title, const gchar *msg | ||
| 81 | gtk_widget_destroy(popup); | 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 | static void browse_file(GtkButton *button,struct ftdialog *dlg) | 95 | static void browse_file(GtkButton *button,struct ftdialog *dlg) |
| @@ -117,6 +122,38 @@ 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 | static void add_file_fields(GObject *action, struct ftdialog *dlg) | 157 | static void add_file_fields(GObject *action, struct ftdialog *dlg) |
| 121 | { | 158 | { |
| 122 | static const gchar * label[] = { N_( "_Local file name:" ), N_( "_Host file name:" ) }; | 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,7 +166,7 @@ static void add_file_fields(GObject *action, struct ftdialog *dlg) | ||
| 129 | 166 | ||
| 130 | for(f=0;f<2;f++) | 167 | for(f=0;f<2;f++) |
| 131 | { | 168 | { |
| 132 | - const gchar *val; | 169 | + gchar *val; |
| 133 | 170 | ||
| 134 | widget = gtk_label_new_with_mnemonic(gettext(label[f])); | 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,21 +174,13 @@ static void add_file_fields(GObject *action, struct ftdialog *dlg) | ||
| 137 | gtk_table_attach(GTK_TABLE(table),widget,0,1,f,f+1,GTK_FILL,GTK_FILL,2,2); | 174 | gtk_table_attach(GTK_TABLE(table),widget,0,1,f,f+1,GTK_FILL,GTK_FILL,2,2); |
| 138 | 175 | ||
| 139 | dlg->file[f] = GTK_ENTRY(gtk_entry_new()); | 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 | gtk_widget_set_name(GTK_WIDGET(dlg->file[f]),attr[f]); | 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 | gtk_entry_set_width_chars(dlg->file[f],40); | 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,18 +295,10 @@ static gboolean run_ft_dialog(GObject *action, GtkWidget *widget, struct ftdialo | ||
| 266 | { | 295 | { |
| 267 | if(dlg->parm[f]) | 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,8 +332,6 @@ static gboolean run_ft_dialog(GObject *action, GtkWidget *widget, struct ftdialo | ||
| 311 | parm[4], // dft | 332 | parm[4], // dft |
| 312 | &msg ); | 333 | &msg ); |
| 313 | 334 | ||
| 314 | - trace("%s ft=%p msg=%p",__FUNCTION__,ft,&msg); | ||
| 315 | - | ||
| 316 | if(msg) | 335 | if(msg) |
| 317 | { | 336 | { |
| 318 | GtkWidget *popup = gtk_message_dialog_new_with_markup( | 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,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 | void download_action(GtkAction *action, GtkWidget *widget) | 372 | void download_action(GtkAction *action, GtkWidget *widget) |
| 339 | { | 373 | { |
| 340 | struct ftdialog dlg; | 374 | struct ftdialog dlg; |
| @@ -350,12 +384,12 @@ void download_action(GtkAction *action, GtkWidget *widget) | @@ -350,12 +384,12 @@ void download_action(GtkAction *action, GtkWidget *widget) | ||
| 350 | dlg.dialog = gtk_dialog_new_with_buttons( _( "Receive file from host" ), \ | 384 | dlg.dialog = gtk_dialog_new_with_buttons( _( "Receive file from host" ), \ |
| 351 | GTK_WINDOW(gtk_widget_get_toplevel(widget)), | 385 | GTK_WINDOW(gtk_widget_get_toplevel(widget)), |
| 352 | GTK_DIALOG_DESTROY_WITH_PARENT, \ | 386 | GTK_DIALOG_DESTROY_WITH_PARENT, \ |
| 353 | - GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, \ | ||
| 354 | - GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, \ | ||
| 355 | NULL ); | 387 | NULL ); |
| 356 | 388 | ||
| 357 | dlg.name = gtk_action_get_name(action); | 389 | dlg.name = gtk_action_get_name(action); |
| 358 | dlg.option = LIB3270_FT_OPTION_RECEIVE; | 390 | dlg.option = LIB3270_FT_OPTION_RECEIVE; |
| 391 | + | ||
| 392 | + add_buttons(&dlg); | ||
| 359 | add_file_fields(G_OBJECT(action),&dlg); | 393 | add_file_fields(G_OBJECT(action),&dlg); |
| 360 | add_transfer_options(G_OBJECT(action),&dlg); | 394 | add_transfer_options(G_OBJECT(action),&dlg); |
| 361 | 395 | ||
| @@ -410,12 +444,12 @@ void upload_action(GtkAction *action, GtkWidget *widget) | @@ -410,12 +444,12 @@ void upload_action(GtkAction *action, GtkWidget *widget) | ||
| 410 | dlg.dialog = gtk_dialog_new_with_buttons( _( "Send file to host" ), \ | 444 | dlg.dialog = gtk_dialog_new_with_buttons( _( "Send file to host" ), \ |
| 411 | GTK_WINDOW(gtk_widget_get_toplevel(widget)), | 445 | GTK_WINDOW(gtk_widget_get_toplevel(widget)), |
| 412 | GTK_DIALOG_DESTROY_WITH_PARENT, \ | 446 | GTK_DIALOG_DESTROY_WITH_PARENT, \ |
| 413 | - GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, \ | ||
| 414 | - GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, \ | ||
| 415 | NULL ); | 447 | NULL ); |
| 416 | 448 | ||
| 417 | dlg.name = gtk_action_get_name(action); | 449 | dlg.name = gtk_action_get_name(action); |
| 418 | dlg.option = LIB3270_FT_OPTION_SEND; | 450 | dlg.option = LIB3270_FT_OPTION_SEND; |
| 451 | + | ||
| 452 | + add_buttons(&dlg); | ||
| 419 | add_file_fields(G_OBJECT(action),&dlg); | 453 | add_file_fields(G_OBJECT(action),&dlg); |
| 420 | add_transfer_options(G_OBJECT(action),&dlg); | 454 | add_transfer_options(G_OBJECT(action),&dlg); |
| 421 | 455 | ||
| @@ -456,15 +490,9 @@ void upload_action(GtkAction *action, GtkWidget *widget) | @@ -456,15 +490,9 @@ void upload_action(GtkAction *action, GtkWidget *widget) | ||
| 456 | GtkWidget * frame = gtk_frame_new(gettext(fdesk[f].title)); | 490 | GtkWidget * frame = gtk_frame_new(gettext(fdesk[f].title)); |
| 457 | GtkWidget * vbox = gtk_vbox_new(TRUE,2); | 491 | GtkWidget * vbox = gtk_vbox_new(TRUE,2); |
| 458 | GSList * group = NULL; | 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 | int p; | 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 | for(p=0;p<4;p++) | 496 | for(p=0;p<4;p++) |
| 469 | { | 497 | { |
| 470 | GtkWidget *widget = gtk_radio_button_new_with_label(group,gettext(fdesk[f].option[p].label)); | 498 | GtkWidget *widget = gtk_radio_button_new_with_label(group,gettext(fdesk[f].option[p].label)); |