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,8 +5,8 @@ msgid "" | ||
| 5 | msgstr "" | 5 | msgstr "" |
| 6 | "Project-Id-Version: pw3270 5.0\n" | 6 | "Project-Id-Version: pw3270 5.0\n" |
| 7 | "Report-Msgid-Bugs-To: \n" | 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 | "Last-Translator: Perry Werneck <perry.werneck@gmail.com>\n" | 10 | "Last-Translator: Perry Werneck <perry.werneck@gmail.com>\n" |
| 11 | "Language-Team: Português do Brasil <>\n" | 11 | "Language-Team: Português do Brasil <>\n" |
| 12 | "Language: pt_BR\n" | 12 | "Language: pt_BR\n" |
| @@ -264,18 +264,22 @@ msgstr "" | @@ -264,18 +264,22 @@ msgstr "" | ||
| 264 | msgid "Can't set lib3270 I/O handlers" | 264 | msgid "Can't set lib3270 I/O handlers" |
| 265 | msgstr "Não foi possível registrar manipuladores de I/O 3270" | 265 | msgstr "Não foi possível registrar manipuladores de I/O 3270" |
| 266 | 266 | ||
| 267 | -#: filetransfer.c:262 | 267 | +#: filetransfer.c:307 |
| 268 | msgid "Can't start download" | 268 | msgid "Can't start download" |
| 269 | msgstr "Não foi possível iniciar o download" | 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 | msgid "Can't start upload" | 276 | msgid "Can't start upload" |
| 273 | msgstr "Não foi possível iniciar upload" | 277 | msgstr "Não foi possível iniciar upload" |
| 274 | 278 | ||
| 275 | #: telnet.c:387 | 279 | #: telnet.c:387 |
| 276 | #, c-format | 280 | #, c-format |
| 277 | msgid "Can't use winsock version %d.%d" | 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 | #: ft.c:157 | 284 | #: ft.c:157 |
| 281 | msgid "Cancelled by user" | 285 | msgid "Cancelled by user" |
| @@ -311,6 +315,7 @@ msgid "Colors" | @@ -311,6 +315,7 @@ msgid "Colors" | ||
| 311 | msgstr "Cores" | 315 | msgstr "Cores" |
| 312 | 316 | ||
| 313 | #: ft_cut.c:326 | 317 | #: ft_cut.c:326 |
| 318 | +#, fuzzy | ||
| 314 | msgid "Complete" | 319 | msgid "Complete" |
| 315 | msgstr "Complete" | 320 | msgstr "Complete" |
| 316 | 321 | ||
| @@ -432,7 +437,11 @@ msgstr "" | @@ -432,7 +437,11 @@ msgstr "" | ||
| 432 | msgid "Fields" | 437 | msgid "Fields" |
| 433 | msgstr "" | 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 | msgid "File transfer is already active" | 445 | msgid "File transfer is already active" |
| 437 | msgstr "Transferência de arquivos já está ativa" | 446 | msgstr "Transferência de arquivos já está ativa" |
| 438 | 447 | ||
| @@ -660,9 +669,9 @@ msgstr "Púrpura" | @@ -660,9 +669,9 @@ msgstr "Púrpura" | ||
| 660 | msgid "Receive file" | 669 | msgid "Receive file" |
| 661 | msgstr "Receber arquivo" | 670 | msgstr "Receber arquivo" |
| 662 | 671 | ||
| 663 | -#: filetransfer.c:268 | 672 | +#: filetransfer.c:313 |
| 664 | msgid "Receive file from host" | 673 | msgid "Receive file from host" |
| 665 | -msgstr "Receber arquivo" | 674 | +msgstr "Receber arquivo do servidor" |
| 666 | 675 | ||
| 667 | #: colors.c:353 | 676 | #: colors.c:353 |
| 668 | msgid "Red" | 677 | msgid "Red" |
| @@ -738,7 +747,7 @@ msgstr "Seleção retangular" | @@ -738,7 +747,7 @@ msgstr "Seleção retangular" | ||
| 738 | 747 | ||
| 739 | #: filetransfer.c:86 | 748 | #: filetransfer.c:86 |
| 740 | msgid "Select file to receive" | 749 | msgid "Select file to receive" |
| 741 | -msgstr "Select file to receive" | 750 | +msgstr "Selecione arquivo a receber" |
| 742 | 751 | ||
| 743 | #: filetransfer.c:86 | 752 | #: filetransfer.c:86 |
| 744 | msgid "Select file to send" | 753 | msgid "Select file to send" |
| @@ -770,7 +779,7 @@ msgstr "Enviar/Receber" | @@ -770,7 +779,7 @@ msgstr "Enviar/Receber" | ||
| 770 | 779 | ||
| 771 | #: ui/00default.xml:142 | 780 | #: ui/00default.xml:142 |
| 772 | msgid "Set hostname" | 781 | msgid "Set hostname" |
| 773 | -msgstr "Selecione host" | 782 | +msgstr "Selecione servidor" |
| 774 | 783 | ||
| 775 | #: glue.c:325 | 784 | #: glue.c:325 |
| 776 | msgid "Set terminal model (screen size)" | 785 | msgid "Set terminal model (screen size)" |
src/include/lib3270/filetransfer.h
| @@ -37,6 +37,18 @@ | @@ -37,6 +37,18 @@ | ||
| 37 | 37 | ||
| 38 | #define LIB3270_FT_OPTION_SEND 0x0000 | 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 | typedef enum _lib3270_FT_FLAG | 52 | typedef enum _lib3270_FT_FLAG |
| 41 | { | 53 | { |
| 42 | LIB3270_FT_OPTION_RECEIVE = 0x0001, | 54 | LIB3270_FT_OPTION_RECEIVE = 0x0001, |
src/lib3270/api.h
| @@ -213,15 +213,15 @@ | @@ -213,15 +213,15 @@ | ||
| 213 | // #define LIB3270_FT_OPTION_TSO 0x0010 | 213 | // #define LIB3270_FT_OPTION_TSO 0x0010 |
| 214 | // #define LIB3270_FT_OPTION_REMAP_ASCII 0x0020 | 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 | #define FT_NONE LIB3270_FT_STATE_NONE | 226 | #define FT_NONE LIB3270_FT_STATE_NONE |
| 227 | #define FT_AWAIT_ACK LIB3270_FT_STATE_AWAIT_ACK | 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,7 +206,13 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state); | ||
| 206 | 206 | ||
| 207 | unsigned int flen; | 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 | if(ftsession) | 217 | if(ftsession) |
| 212 | { | 218 | { |
src/pw3270/filetransfer.c
| @@ -53,6 +53,14 @@ | @@ -53,6 +53,14 @@ | ||
| 53 | const gchar * label; | 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 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 64 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| 57 | 65 | ||
| 58 | 66 | ||
| @@ -186,6 +194,7 @@ static void add_transfer_options(GObject *action, struct ftdialog *dlg) | @@ -186,6 +194,7 @@ static void add_transfer_options(GObject *action, struct ftdialog *dlg) | ||
| 186 | 194 | ||
| 187 | GtkTable * table = GTK_TABLE(gtk_table_new(3,2,TRUE)); | 195 | GtkTable * table = GTK_TABLE(gtk_table_new(3,2,TRUE)); |
| 188 | GtkWidget * frame = gtk_frame_new( _( "Transfer options" ) ); | 196 | GtkWidget * frame = gtk_frame_new( _( "Transfer options" ) ); |
| 197 | + GtkWidget * label = gtk_frame_get_label_widget(GTK_FRAME(frame)); | ||
| 189 | int row, col, f; | 198 | int row, col, f; |
| 190 | 199 | ||
| 191 | row=0; | 200 | row=0; |
| @@ -196,6 +205,7 @@ static void add_transfer_options(GObject *action, struct ftdialog *dlg) | @@ -196,6 +205,7 @@ static void add_transfer_options(GObject *action, struct ftdialog *dlg) | ||
| 196 | GtkWidget * widget = gtk_check_button_new_with_mnemonic( gettext(option[f].label) ); | 205 | GtkWidget * widget = gtk_check_button_new_with_mnemonic( gettext(option[f].label) ); |
| 197 | gboolean active = FALSE; | 206 | gboolean active = FALSE; |
| 198 | 207 | ||
| 208 | + | ||
| 199 | gtk_widget_set_name(widget,option[f].name); | 209 | gtk_widget_set_name(widget,option[f].name); |
| 200 | 210 | ||
| 201 | if(val) | 211 | if(val) |
| @@ -252,11 +262,55 @@ static void setup_dft(GObject *action, struct ftdialog *dlg, GtkWidget **label) | @@ -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 | void download_action(GtkAction *action, GtkWidget *widget) | 310 | void download_action(GtkAction *action, GtkWidget *widget) |
| 256 | { | 311 | { |
| 257 | struct ftdialog dlg; | 312 | struct ftdialog dlg; |
| 258 | 313 | ||
| 259 | - | ||
| 260 | if(lib3270_get_ft_state(v3270_get_session(widget)) != LIB3270_FT_STATE_NONE) | 314 | if(lib3270_get_ft_state(v3270_get_session(widget)) != LIB3270_FT_STATE_NONE) |
| 261 | { | 315 | { |
| 262 | error_dialog(widget,_( "Can't start download" ), _( "File transfer is already active" ), NULL); | 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,29 +343,142 @@ void download_action(GtkAction *action, GtkWidget *widget) | ||
| 289 | gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dlg.dialog))),hbox,FALSE,FALSE,2); | 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 | void upload_action(GtkAction *action, GtkWidget *widget) | 368 | void upload_action(GtkAction *action, GtkWidget *widget) |
| 307 | { | 369 | { |
| 370 | + struct ftdialog dlg; | ||
| 371 | + | ||
| 308 | if(lib3270_get_ft_state(v3270_get_session(widget)) != LIB3270_FT_STATE_NONE) | 372 | if(lib3270_get_ft_state(v3270_get_session(widget)) != LIB3270_FT_STATE_NONE) |
| 309 | { | 373 | { |
| 310 | error_dialog(widget,_( "Can't start upload" ), _( "File transfer is already active" ), NULL); | 374 | error_dialog(widget,_( "Can't start upload" ), _( "File transfer is already active" ), NULL); |
| 311 | return; | 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 |