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