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)); | ... | ... |