Commit 4330eeae8c4f4d20b524bb298d239b9564523fda
1 parent
a6ea694c
Exists in
master
and in
5 other branches
Implementando caixa de transferência
Showing
5 changed files
with
223 additions
and
29 deletions
Show diff stats
po/pt_BR.po
| ... | ... | @@ -5,8 +5,8 @@ msgid "" |
| 5 | 5 | msgstr "" |
| 6 | 6 | "Project-Id-Version: pw3270 5.0\n" |
| 7 | 7 | "Report-Msgid-Bugs-To: \n" |
| 8 | -"POT-Creation-Date: 2012-05-07 15:12-0300\n" | |
| 9 | -"PO-Revision-Date: 2012-05-07 15:30-0300\n" | |
| 8 | +"POT-Creation-Date: 2012-05-08 07:23-0300\n" | |
| 9 | +"PO-Revision-Date: 2012-05-08 07:19-0300\n" | |
| 10 | 10 | "Last-Translator: Perry Werneck <perry.werneck@gmail.com>\n" |
| 11 | 11 | "Language-Team: Português do Brasil <>\n" |
| 12 | 12 | "Language: pt_BR\n" |
| ... | ... | @@ -264,18 +264,22 @@ msgstr "" |
| 264 | 264 | msgid "Can't set lib3270 I/O handlers" |
| 265 | 265 | msgstr "Não foi possível registrar manipuladores de I/O 3270" |
| 266 | 266 | |
| 267 | -#: filetransfer.c:262 | |
| 267 | +#: filetransfer.c:307 | |
| 268 | 268 | msgid "Can't start download" |
| 269 | 269 | msgstr "Não foi possível iniciar o download" |
| 270 | 270 | |
| 271 | -#: filetransfer.c:310 | |
| 271 | +#: filetransfer.c:284 | |
| 272 | +msgid "Can't start file transfer" | |
| 273 | +msgstr "Não foi possível iniciar transferência de arquivo" | |
| 274 | + | |
| 275 | +#: filetransfer.c:347 | |
| 272 | 276 | msgid "Can't start upload" |
| 273 | 277 | msgstr "Não foi possível iniciar upload" |
| 274 | 278 | |
| 275 | 279 | #: telnet.c:387 |
| 276 | 280 | #, c-format |
| 277 | 281 | msgid "Can't use winsock version %d.%d" |
| 278 | -msgstr "Não é possível usar a WinSOCK versão %d.%d" | |
| 282 | +msgstr "Não é possível usar a Winsock versão %d.%d" | |
| 279 | 283 | |
| 280 | 284 | #: ft.c:157 |
| 281 | 285 | msgid "Cancelled by user" |
| ... | ... | @@ -311,6 +315,7 @@ msgid "Colors" |
| 311 | 315 | msgstr "Cores" |
| 312 | 316 | |
| 313 | 317 | #: ft_cut.c:326 |
| 318 | +#, fuzzy | |
| 314 | 319 | msgid "Complete" |
| 315 | 320 | msgstr "Complete" |
| 316 | 321 | |
| ... | ... | @@ -432,7 +437,11 @@ msgstr "" |
| 432 | 437 | msgid "Fields" |
| 433 | 438 | msgstr "" |
| 434 | 439 | |
| 435 | -#: filetransfer.c:262 filetransfer.c:310 ft.c:213 | |
| 440 | +#: filetransfer.c:287 | |
| 441 | +msgid "File transfer error" | |
| 442 | +msgstr "Erro na transferência de arquivos" | |
| 443 | + | |
| 444 | +#: filetransfer.c:307 filetransfer.c:347 ft.c:213 | |
| 436 | 445 | msgid "File transfer is already active" |
| 437 | 446 | msgstr "Transferência de arquivos já está ativa" |
| 438 | 447 | |
| ... | ... | @@ -660,9 +669,9 @@ msgstr "Púrpura" |
| 660 | 669 | msgid "Receive file" |
| 661 | 670 | msgstr "Receber arquivo" |
| 662 | 671 | |
| 663 | -#: filetransfer.c:268 | |
| 672 | +#: filetransfer.c:313 | |
| 664 | 673 | msgid "Receive file from host" |
| 665 | -msgstr "Receber arquivo" | |
| 674 | +msgstr "Receber arquivo do servidor" | |
| 666 | 675 | |
| 667 | 676 | #: colors.c:353 |
| 668 | 677 | msgid "Red" |
| ... | ... | @@ -738,7 +747,7 @@ msgstr "Seleção retangular" |
| 738 | 747 | |
| 739 | 748 | #: filetransfer.c:86 |
| 740 | 749 | msgid "Select file to receive" |
| 741 | -msgstr "Select file to receive" | |
| 750 | +msgstr "Selecione arquivo a receber" | |
| 742 | 751 | |
| 743 | 752 | #: filetransfer.c:86 |
| 744 | 753 | msgid "Select file to send" |
| ... | ... | @@ -770,7 +779,7 @@ msgstr "Enviar/Receber" |
| 770 | 779 | |
| 771 | 780 | #: ui/00default.xml:142 |
| 772 | 781 | msgid "Set hostname" |
| 773 | -msgstr "Selecione host" | |
| 782 | +msgstr "Selecione servidor" | |
| 774 | 783 | |
| 775 | 784 | #: glue.c:325 |
| 776 | 785 | msgid "Set terminal model (screen size)" | ... | ... |
src/include/lib3270/filetransfer.h
| ... | ... | @@ -37,6 +37,18 @@ |
| 37 | 37 | |
| 38 | 38 | #define LIB3270_FT_OPTION_SEND 0x0000 |
| 39 | 39 | |
| 40 | + #define LIB3270_FT_RECORD_FORMAT_DEFAULT 0x0000 | |
| 41 | + #define LIB3270_FT_RECORD_FORMAT_FIXED 0x0100 | |
| 42 | + #define LIB3270_FT_RECORD_FORMAT_VARIABLE 0x0200 | |
| 43 | + #define LIB3270_FT_RECORD_FORMAT_UNDEFINED 0x0300 | |
| 44 | + #define LIB3270_FT_RECORD_FORMAT_MASK LIB3270_FT_RECORD_FORMAT_UNDEFINED | |
| 45 | + | |
| 46 | + #define LIB3270_FT_ALLOCATION_UNITS_DEFAULT 0x0000 | |
| 47 | + #define LIB3270_FT_ALLOCATION_UNITS_TRACKS 0x1000 | |
| 48 | + #define LIB3270_FT_ALLOCATION_UNITS_CYLINDERS 0x2000 | |
| 49 | + #define LIB3270_FT_ALLOCATION_UNITS_AVBLOCK 0x3000 | |
| 50 | + #define LIB3270_FT_ALLOCATION_UNITS_MASK LIB3270_FT_ALLOCATION_UNITS_AVBLOCK | |
| 51 | + | |
| 40 | 52 | typedef enum _lib3270_FT_FLAG |
| 41 | 53 | { |
| 42 | 54 | LIB3270_FT_OPTION_RECEIVE = 0x0001, | ... | ... |
src/lib3270/api.h
| ... | ... | @@ -213,15 +213,15 @@ |
| 213 | 213 | // #define LIB3270_FT_OPTION_TSO 0x0010 |
| 214 | 214 | // #define LIB3270_FT_OPTION_REMAP_ASCII 0x0020 |
| 215 | 215 | |
| 216 | - #define FT_RECORD_FORMAT_FIXED 0x0100 | |
| 217 | - #define FT_RECORD_FORMAT_VARIABLE 0x0200 | |
| 218 | - #define FT_RECORD_FORMAT_UNDEFINED 0x0300 | |
| 219 | - #define FT_RECORD_FORMAT_MASK FT_RECORD_FORMAT_UNDEFINED | |
| 220 | - | |
| 221 | - #define FT_ALLOCATION_UNITS_TRACKS 0x1000 | |
| 222 | - #define FT_ALLOCATION_UNITS_CYLINDERS 0x2000 | |
| 223 | - #define FT_ALLOCATION_UNITS_AVBLOCK 0x3000 | |
| 224 | - #define FT_ALLOCATION_UNITS_MASK FT_ALLOCATION_UNITS_AVBLOCK | |
| 216 | + #define FT_RECORD_FORMAT_FIXED LIB3270_FT_RECORD_FORMAT_FIXED | |
| 217 | + #define FT_RECORD_FORMAT_VARIABLE LIB3270_FT_RECORD_FORMAT_VARIABLE | |
| 218 | + #define FT_RECORD_FORMAT_UNDEFINED LIB3270_FT_RECORD_FORMAT_UNDEFINED | |
| 219 | + #define FT_RECORD_FORMAT_MASK LIB3270_FT_RECORD_FORMAT_MASK | |
| 220 | + | |
| 221 | + #define FT_ALLOCATION_UNITS_TRACKS LIB3270_FT_ALLOCATION_UNITS_TRACKS | |
| 222 | + #define FT_ALLOCATION_UNITS_CYLINDERS LIB3270_FT_ALLOCATION_UNITS_CYLINDERS | |
| 223 | + #define FT_ALLOCATION_UNITS_AVBLOCK LIB3270_FT_ALLOCATION_UNITS_AVBLOCK | |
| 224 | + #define FT_ALLOCATION_UNITS_MASK LIB3270_FT_ALLOCATION_UNITS_MASK | |
| 225 | 225 | |
| 226 | 226 | #define FT_NONE LIB3270_FT_STATE_NONE |
| 227 | 227 | #define FT_AWAIT_ACK LIB3270_FT_STATE_AWAIT_ACK | ... | ... |
src/lib3270/ft.c
| ... | ... | @@ -206,7 +206,13 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state); |
| 206 | 206 | |
| 207 | 207 | unsigned int flen; |
| 208 | 208 | |
| 209 | - Trace("%s(%s)",__FUNCTION__,local); | |
| 209 | +// Trace("%s(%s)",__FUNCTION__,local); | |
| 210 | + if(!lib3270_connected(session)) | |
| 211 | + { | |
| 212 | + *msg = N_( "Disconnected from host" ); | |
| 213 | + errno = EINVAL; | |
| 214 | + return NULL; | |
| 215 | + } | |
| 210 | 216 | |
| 211 | 217 | if(ftsession) |
| 212 | 218 | { | ... | ... |
src/pw3270/filetransfer.c
| ... | ... | @@ -53,6 +53,14 @@ |
| 53 | 53 | const gchar * label; |
| 54 | 54 | }; |
| 55 | 55 | |
| 56 | + struct ftmask | |
| 57 | + { | |
| 58 | + unsigned int flag; | |
| 59 | + unsigned int mask; | |
| 60 | + const gchar * name; | |
| 61 | + const gchar * label; | |
| 62 | + }; | |
| 63 | + | |
| 56 | 64 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| 57 | 65 | |
| 58 | 66 | |
| ... | ... | @@ -186,6 +194,7 @@ static void add_transfer_options(GObject *action, struct ftdialog *dlg) |
| 186 | 194 | |
| 187 | 195 | GtkTable * table = GTK_TABLE(gtk_table_new(3,2,TRUE)); |
| 188 | 196 | GtkWidget * frame = gtk_frame_new( _( "Transfer options" ) ); |
| 197 | + GtkWidget * label = gtk_frame_get_label_widget(GTK_FRAME(frame)); | |
| 189 | 198 | int row, col, f; |
| 190 | 199 | |
| 191 | 200 | row=0; |
| ... | ... | @@ -196,6 +205,7 @@ static void add_transfer_options(GObject *action, struct ftdialog *dlg) |
| 196 | 205 | GtkWidget * widget = gtk_check_button_new_with_mnemonic( gettext(option[f].label) ); |
| 197 | 206 | gboolean active = FALSE; |
| 198 | 207 | |
| 208 | + | |
| 199 | 209 | gtk_widget_set_name(widget,option[f].name); |
| 200 | 210 | |
| 201 | 211 | if(val) |
| ... | ... | @@ -252,11 +262,55 @@ static void setup_dft(GObject *action, struct ftdialog *dlg, GtkWidget **label) |
| 252 | 262 | |
| 253 | 263 | } |
| 254 | 264 | |
| 265 | +static gboolean run_ft_dialog(GtkWidget *widget, struct ftdialog *dlg) | |
| 266 | +{ | |
| 267 | + H3270FT * ft = NULL; | |
| 268 | + const char * msg = NULL; | |
| 269 | + | |
| 270 | + gtk_widget_show_all(dlg->dialog); | |
| 271 | + | |
| 272 | + if(gtk_dialog_run(GTK_DIALOG(dlg->dialog)) != GTK_RESPONSE_ACCEPT) | |
| 273 | + return FALSE; | |
| 274 | + | |
| 275 | + ft = lib3270_ft_start( v3270_get_session(widget), | |
| 276 | + dlg->option, | |
| 277 | + gtk_entry_get_text(dlg->file[0]), | |
| 278 | + gtk_entry_get_text(dlg->file[1]), | |
| 279 | + 0, | |
| 280 | + 0, | |
| 281 | + 0, | |
| 282 | + 0, | |
| 283 | + atoi(gtk_entry_get_text(dlg->dft)), | |
| 284 | + &msg ); | |
| 285 | + | |
| 286 | + trace("%s ft=%p msg=%p",__FUNCTION__,ft,&msg); | |
| 287 | + | |
| 288 | + if(msg) | |
| 289 | + { | |
| 290 | + GtkWidget *popup = gtk_message_dialog_new_with_markup( | |
| 291 | + GTK_WINDOW(gtk_widget_get_toplevel(widget)), | |
| 292 | + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, | |
| 293 | + GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE, | |
| 294 | + "%s", _( "Can't start file transfer" )); | |
| 295 | + | |
| 296 | + trace("msg=%s",msg); | |
| 297 | + gtk_window_set_title(GTK_WINDOW(popup),_("File transfer error")); | |
| 298 | + | |
| 299 | + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(popup),"%s",gettext(msg)); | |
| 300 | + | |
| 301 | + gtk_widget_show_all(popup); | |
| 302 | + gtk_dialog_run(GTK_DIALOG(popup)); | |
| 303 | + gtk_widget_destroy(popup); | |
| 304 | + | |
| 305 | + } | |
| 306 | + | |
| 307 | + return ft != NULL; | |
| 308 | +} | |
| 309 | + | |
| 255 | 310 | void download_action(GtkAction *action, GtkWidget *widget) |
| 256 | 311 | { |
| 257 | 312 | struct ftdialog dlg; |
| 258 | 313 | |
| 259 | - | |
| 260 | 314 | if(lib3270_get_ft_state(v3270_get_session(widget)) != LIB3270_FT_STATE_NONE) |
| 261 | 315 | { |
| 262 | 316 | error_dialog(widget,_( "Can't start download" ), _( "File transfer is already active" ), NULL); |
| ... | ... | @@ -289,29 +343,142 @@ void download_action(GtkAction *action, GtkWidget *widget) |
| 289 | 343 | gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dlg.dialog))),hbox,FALSE,FALSE,2); |
| 290 | 344 | } |
| 291 | 345 | |
| 292 | - gtk_widget_show_all(dlg.dialog); | |
| 346 | + run_ft_dialog(widget,&dlg); | |
| 293 | 347 | |
| 294 | - if(gtk_dialog_run(GTK_DIALOG(dlg.dialog)) == GTK_RESPONSE_ACCEPT) | |
| 295 | - { | |
| 296 | - // Begin file transfer | |
| 297 | - } | |
| 348 | + gtk_widget_destroy(dlg.dialog); | |
| 298 | 349 | |
| 350 | +} | |
| 299 | 351 | |
| 300 | -// begin_ft_session(action,widget,LIB3270_FT_OPTION_RECEIVE); | |
| 352 | +static void toggle_format(GtkToggleButton *button, const struct ftmask *option) | |
| 353 | +{ | |
| 354 | + gboolean active = gtk_toggle_button_get_active(button); | |
| 355 | + struct ftdialog * dlg = (struct ftdialog *) g_object_get_data(G_OBJECT(button),"dlg"); | |
| 356 | + const gchar * name = (const gchar *) g_object_get_data(G_OBJECT(button),"setupname"); | |
| 301 | 357 | |
| 302 | - gtk_widget_destroy(dlg.dialog); | |
| 358 | + dlg->option &= ~option->mask; | |
| 359 | + dlg->option |= option->flag; | |
| 303 | 360 | |
| 361 | + if(active) | |
| 362 | + { | |
| 363 | + set_string_to_config(dlg->name,name,"%s",option->name); | |
| 364 | + trace("%s=%s (flags=%04x)",name,option->name,dlg->option); | |
| 365 | + } | |
| 304 | 366 | } |
| 305 | 367 | |
| 306 | 368 | void upload_action(GtkAction *action, GtkWidget *widget) |
| 307 | 369 | { |
| 370 | + struct ftdialog dlg; | |
| 371 | + | |
| 308 | 372 | if(lib3270_get_ft_state(v3270_get_session(widget)) != LIB3270_FT_STATE_NONE) |
| 309 | 373 | { |
| 310 | 374 | error_dialog(widget,_( "Can't start upload" ), _( "File transfer is already active" ), NULL); |
| 311 | 375 | return; |
| 312 | 376 | } |
| 313 | 377 | |
| 314 | -// begin_ft_session(action,widget,LIB3270_FT_OPTION_SEND); | |
| 378 | + memset(&dlg,0,sizeof(dlg)); | |
| 379 | + | |
| 380 | + dlg.dialog = gtk_dialog_new_with_buttons( _( "Send file to host" ), \ | |
| 381 | + GTK_WINDOW(gtk_widget_get_toplevel(widget)), | |
| 382 | + GTK_DIALOG_DESTROY_WITH_PARENT, \ | |
| 383 | + GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, \ | |
| 384 | + GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, \ | |
| 385 | + NULL ); | |
| 386 | + | |
| 387 | + dlg.name = "upload"; | |
| 388 | + dlg.option = LIB3270_FT_OPTION_SEND; | |
| 389 | + add_file_fields(G_OBJECT(action),&dlg); | |
| 390 | + add_transfer_options(G_OBJECT(action),&dlg); | |
| 391 | + | |
| 392 | + { | |
| 393 | + | |
| 394 | + static const struct ftmask recfm[] = | |
| 395 | + { | |
| 396 | + { LIB3270_FT_RECORD_FORMAT_DEFAULT, LIB3270_FT_RECORD_FORMAT_MASK, "default", N_( "Default" ) }, | |
| 397 | + { LIB3270_FT_RECORD_FORMAT_FIXED, LIB3270_FT_RECORD_FORMAT_MASK, "fixed", N_( "Fixed" ) }, | |
| 398 | + { LIB3270_FT_RECORD_FORMAT_VARIABLE, LIB3270_FT_RECORD_FORMAT_MASK, "variable", N_( "Variable" ) }, | |
| 399 | + { LIB3270_FT_RECORD_FORMAT_UNDEFINED, LIB3270_FT_RECORD_FORMAT_MASK, "undefined", N_( "Undefined" ) }, | |
| 400 | + }; | |
| 401 | + | |
| 402 | + static const struct ftmask units[] = | |
| 403 | + { | |
| 404 | + { LIB3270_FT_ALLOCATION_UNITS_DEFAULT, LIB3270_FT_ALLOCATION_UNITS_MASK, "default", N_( "Default" ) }, | |
| 405 | + { LIB3270_FT_ALLOCATION_UNITS_TRACKS, LIB3270_FT_ALLOCATION_UNITS_MASK, "tracks", N_( "Tracks" ) }, | |
| 406 | + { LIB3270_FT_ALLOCATION_UNITS_CYLINDERS, LIB3270_FT_ALLOCATION_UNITS_MASK, "cilinders", N_( "Cylinders" ) }, | |
| 407 | + { LIB3270_FT_ALLOCATION_UNITS_AVBLOCK, LIB3270_FT_ALLOCATION_UNITS_MASK, "avblock", N_( "Avblock" ) }, | |
| 408 | + }; | |
| 409 | + | |
| 410 | + static const struct _fdesc | |
| 411 | + { | |
| 412 | + const gchar * title; | |
| 413 | + const gchar * name; | |
| 414 | + const struct ftmask * option; | |
| 415 | + } fdesk[] = | |
| 416 | + { | |
| 417 | + { N_( "Record format" ), "recordformat", recfm }, | |
| 418 | + { N_( "Space allocation units" ), "allocationunits", units } | |
| 419 | + }; | |
| 420 | + | |
| 421 | + GtkWidget *box = gtk_hbox_new(TRUE,2); | |
| 422 | + int f; | |
| 423 | + | |
| 424 | + for(f=0;f<2;f++) | |
| 425 | + { | |
| 426 | + GtkWidget * frame = gtk_frame_new(gettext(fdesk[f].title)); | |
| 427 | + GtkWidget * vbox = gtk_vbox_new(TRUE,2); | |
| 428 | + GSList * group = NULL; | |
| 429 | + const gchar * attr = g_object_get_data(G_OBJECT(action),fdesk[f].name); | |
| 430 | + gchar * setup; | |
| 431 | + int p; | |
| 432 | + | |
| 433 | + if(attr) | |
| 434 | + setup = g_strdup(attr); | |
| 435 | + else | |
| 436 | + setup = get_string_from_config(dlg.name,fdesk[f].name,fdesk[f].option[0].name); | |
| 437 | + | |
| 438 | + for(p=0;p<4;p++) | |
| 439 | + { | |
| 440 | + GtkWidget *widget = gtk_radio_button_new_with_label(group,gettext(fdesk[f].option[p].label)); | |
| 441 | + g_object_set_data(G_OBJECT(widget),"dlg",(gpointer) &dlg); | |
| 442 | + g_object_set_data(G_OBJECT(widget),"setupname",(gpointer) fdesk[f].name); | |
| 443 | + | |
| 444 | + g_signal_connect(G_OBJECT(widget),"toggled", G_CALLBACK(toggle_format),(gpointer) &fdesk[f].option[p]); | |
| 445 | + | |
| 446 | + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),!g_strcasecmp(fdesk[f].option[p].name,setup)); | |
| 447 | + group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(widget)); | |
| 448 | + gtk_box_pack_start(GTK_BOX(vbox),widget,TRUE,TRUE,0); | |
| 449 | + } | |
| 450 | + | |
| 451 | + g_free(setup); | |
| 452 | + | |
| 453 | + gtk_container_add(GTK_CONTAINER(frame),GTK_WIDGET(vbox)); | |
| 454 | + gtk_box_pack_start(GTK_BOX(box),frame,TRUE,TRUE,2); | |
| 455 | + } | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dlg.dialog))),box,TRUE,TRUE,2); | |
| 461 | + } | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + { | |
| 466 | + // Add dft option | |
| 467 | + GtkWidget *hbox = gtk_hbox_new(FALSE,2); | |
| 468 | + GtkWidget *label = NULL; | |
| 469 | + | |
| 470 | + setup_dft(G_OBJECT(action),&dlg,&label); | |
| 471 | + | |
| 472 | + gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0); | |
| 473 | + gtk_box_pack_start(GTK_BOX(hbox),GTK_WIDGET(dlg.dft),FALSE,FALSE,0); | |
| 474 | + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dlg.dialog))),hbox,FALSE,FALSE,2); | |
| 475 | + } | |
| 476 | + | |
| 477 | + run_ft_dialog(widget,&dlg); | |
| 478 | + | |
| 479 | + gtk_widget_destroy(dlg.dialog); | |
| 480 | + | |
| 481 | + | |
| 315 | 482 | } |
| 316 | 483 | |
| 317 | 484 | ... | ... |