Commit 7ec37943e5259d81662137b4f6dbb590c99e0939
1 parent
16917bea
Exists in
master
and in
5 other branches
Updating print settings dialog.
Showing
1 changed file
with
47 additions
and
192 deletions
Show diff stats
src/pw3270/print.c
| ... | ... | @@ -31,18 +31,12 @@ |
| 31 | 31 | |
| 32 | 32 | #include "private.h" |
| 33 | 33 | #include <v3270.h> |
| 34 | + #include <v3270/print.h> | |
| 34 | 35 | #include <lib3270/selection.h> |
| 35 | 36 | #include <lib3270/trace.h> |
| 36 | 37 | |
| 37 | - #define AUTO_FONT_SIZE 1 | |
| 38 | - | |
| 39 | -#ifdef AUTO_FONT_SIZE | |
| 40 | - #define FONT_CONFIG "font-family" | |
| 41 | - #define DEFAULT_FONT "Courier New" | |
| 42 | -#else | |
| 43 | - #define FONT_CONFIG "font" | |
| 44 | - #define DEFAULT_FONT "Courier New 10" | |
| 45 | -#endif // AUTO_FONT_SIZE | |
| 38 | + #define FONT_CONFIG "font-family" | |
| 39 | + #define DEFAULT_FONT "Courier New" | |
| 46 | 40 | |
| 47 | 41 | /*--[ Structs ]--------------------------------------------------------------------------------------*/ |
| 48 | 42 | |
| ... | ... | @@ -63,10 +57,6 @@ |
| 63 | 57 | |
| 64 | 58 | v3270FontInfo font; |
| 65 | 59 | |
| 66 | -// cairo_font_extents_t extents; | |
| 67 | -// cairo_scaled_font_t * font_scaled; | |
| 68 | -// gchar * font; /**< Font name */ | |
| 69 | - | |
| 70 | 60 | double left; |
| 71 | 61 | double width; /**< Report width */ |
| 72 | 62 | double height; /**< Report height (all pages) */ |
| ... | ... | @@ -97,14 +87,9 @@ |
| 97 | 87 | CAIRO_FONT_SLANT_NORMAL, |
| 98 | 88 | pango_font_description_get_weight(descr) == PANGO_WEIGHT_BOLD ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL); |
| 99 | 89 | |
| 100 | -#ifdef AUTO_FONT_SIZE | |
| 101 | 90 | { |
| 102 | 91 | double width = gtk_print_context_get_width(context); |
| 103 | -#if GTK_CHECK_VERSION(3,0,0) | |
| 104 | 92 | double cols = (double) info->cols; |
| 105 | -#else | |
| 106 | - double cols = (double) (info->cols+5); | |
| 107 | -#endif // GTK(3,0,0) | |
| 108 | 93 | double current = width / cols; |
| 109 | 94 | double valid = current; |
| 110 | 95 | |
| ... | ... | @@ -121,7 +106,6 @@ |
| 121 | 106 | cairo_set_font_size(cr,valid); |
| 122 | 107 | |
| 123 | 108 | } |
| 124 | -#endif // AUTO_FONT_SIZE | |
| 125 | 109 | |
| 126 | 110 | pango_font_description_free(descr); |
| 127 | 111 | } |
| ... | ... | @@ -355,44 +339,6 @@ static gchar * enum_to_string(GType type, guint enum_value) |
| 355 | 339 | g_free(info); |
| 356 | 340 | } |
| 357 | 341 | |
| 358 | -#ifndef AUTO_FONT_SIZE | |
| 359 | - | |
| 360 | -#if GTK_CHECK_VERSION(3,2,0) | |
| 361 | - static gboolean filter_monospaced(const PangoFontFamily *family,const PangoFontFace *face,gpointer data) | |
| 362 | - { | |
| 363 | - return pango_font_family_is_monospace((PangoFontFamily *) family); | |
| 364 | - } | |
| 365 | -#endif // GTK(3,2,0) | |
| 366 | - | |
| 367 | - static void font_set(GtkFontButton *widget, PRINT_INFO *info) | |
| 368 | - { | |
| 369 | - trace("%s font=%p",__FUNCTION__,info->font); | |
| 370 | - if(info->font) | |
| 371 | - g_free(info->font); | |
| 372 | - info->font = g_strdup(gtk_font_button_get_font_name(widget)); | |
| 373 | - } | |
| 374 | - | |
| 375 | -#else | |
| 376 | - | |
| 377 | - static void font_name_changed(GtkComboBox *combo, PRINT_INFO *info) | |
| 378 | - { | |
| 379 | - GValue value = { 0, }; | |
| 380 | - GtkTreeIter iter; | |
| 381 | - | |
| 382 | - if(!gtk_combo_box_get_active_iter(combo,&iter)) | |
| 383 | - return; | |
| 384 | - | |
| 385 | - gtk_tree_model_get_value(gtk_combo_box_get_model(combo),&iter,0,&value); | |
| 386 | - | |
| 387 | - if(info->font.family) | |
| 388 | - g_free(info->font.family); | |
| 389 | - | |
| 390 | - info->font.family = g_value_dup_string(&value); | |
| 391 | - | |
| 392 | - } | |
| 393 | - | |
| 394 | -#endif // !AUTO_FONT_SIZE | |
| 395 | - | |
| 396 | 342 | static void toggle_show_selection(GtkToggleButton *togglebutton,PRINT_INFO *info) |
| 397 | 343 | { |
| 398 | 344 | gboolean active = gtk_toggle_button_get_active(togglebutton); |
| ... | ... | @@ -400,158 +346,56 @@ static gchar * enum_to_string(GType type, guint enum_value) |
| 400 | 346 | set_boolean_to_config("print","selection",active); |
| 401 | 347 | } |
| 402 | 348 | |
| 403 | - static void load_settings(PRINT_INFO *info) | |
| 404 | - { | |
| 405 | - gchar *ptr = get_string_from_config("print","colors",""); | |
| 406 | - | |
| 407 | - trace("info->color=%p",info->color); | |
| 408 | - trace("colorlist=%p",ptr); | |
| 409 | - | |
| 410 | - if(*ptr) | |
| 411 | - v3270_set_color_table(info->color,ptr); | |
| 412 | - else | |
| 413 | - v3270_set_mono_color_table(info->color,"black","white"); | |
| 414 | - | |
| 415 | - g_free(ptr); | |
| 416 | - } | |
| 417 | - | |
| 418 | - static GObject * create_custom_widget(GtkPrintOperation *prt, PRINT_INFO *info) | |
| 349 | + static GtkWidget * create_custom_widget(GtkPrintOperation *prt, PRINT_INFO *info) | |
| 419 | 350 | { |
| 420 | - GtkWidget * container = gtk_table_new(3,2,FALSE); | |
| 421 | - static const gchar * text[] = { N_( "_Font:" ), N_( "C_olor scheme:" ) }; | |
| 422 | - GtkWidget * label[G_N_ELEMENTS(text)]; | |
| 423 | - GtkWidget * widget; | |
| 424 | - int f; | |
| 351 | + GtkWidget * widget = gtk_frame_new(""); | |
| 352 | + GtkWidget * settings = V3270_print_settings_new(info->widget); | |
| 425 | 353 | |
| 426 | - trace("%s starts",__FUNCTION__); | |
| 354 | + // Load values from configuration | |
| 355 | + g_autofree gchar * font_family = get_string_from_config("print",FONT_CONFIG,DEFAULT_FONT); | |
| 356 | + if(font_family && *font_family) | |
| 357 | + v3270_print_settings_set_font_family(settings,font_family); | |
| 427 | 358 | |
| 428 | - for(f=0;f<G_N_ELEMENTS(label);f++) | |
| 429 | - { | |
| 430 | - label[f] = gtk_label_new_with_mnemonic(gettext(text[f])); | |
| 431 | - gtk_misc_set_alignment(GTK_MISC(label[f]),0,0.5); | |
| 432 | - gtk_table_attach(GTK_TABLE(container),label[f],0,1,f,f+1,GTK_FILL,GTK_FILL,0,0); | |
| 433 | - } | |
| 434 | - | |
| 435 | - if(info->font.family) | |
| 436 | - g_free(info->font.family); | |
| 359 | + g_autofree gchar * color_scheme = get_string_from_config("print","colors",""); | |
| 360 | + if(color_scheme && *color_scheme) | |
| 361 | + v3270_print_settings_set_color_scheme(settings,color_scheme); | |
| 437 | 362 | |
| 438 | - info->font.family = get_string_from_config("print",FONT_CONFIG,DEFAULT_FONT); | |
| 439 | - if(!*info->font.family) | |
| 440 | - { | |
| 441 | - g_free(info->font.family); | |
| 442 | - info->font.family = g_strdup(DEFAULT_FONT); | |
| 443 | - } | |
| 363 | + // Create frame | |
| 364 | + GtkWidget *label = gtk_label_new(NULL); | |
| 365 | + gtk_label_set_markup(GTK_LABEL(label),_("<b>Text options</b>")); | |
| 366 | + gtk_frame_set_label_widget(GTK_FRAME(widget),label); | |
| 444 | 367 | |
| 445 | - // Font selection button | |
| 446 | -#ifdef AUTO_FONT_SIZE | |
| 447 | - { | |
| 448 | - GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(1,G_TYPE_STRING); | |
| 449 | - GtkCellRenderer * renderer = gtk_cell_renderer_text_new(); | |
| 450 | - PangoFontFamily **families; | |
| 451 | - gint n_families, i; | |
| 452 | - GtkTreeIter iter; | |
| 368 | + gtk_container_set_border_width(GTK_CONTAINER(widget),12); | |
| 453 | 369 | |
| 454 | - widget = gtk_combo_box_new_with_model(model); | |
| 370 | + // The print dialog doesn't follow the guidelines from https://developer.gnome.org/hig/stable/visual-layout.html.en )-: | |
| 371 | + gtk_frame_set_shadow_type(GTK_FRAME(widget),GTK_SHADOW_NONE); | |
| 455 | 372 | |
| 456 | - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE); | |
| 457 | - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget), renderer, "text", 0, NULL); | |
| 373 | + gtk_container_set_border_width(GTK_CONTAINER(settings),6); | |
| 374 | + g_object_set(G_OBJECT(settings),"margin-start",8,NULL); | |
| 458 | 375 | |
| 459 | - g_signal_connect(G_OBJECT(widget),"changed",G_CALLBACK(font_name_changed),info); | |
| 376 | + gtk_container_add(GTK_CONTAINER(widget),settings); | |
| 460 | 377 | |
| 461 | - pango_context_list_families(gtk_widget_get_pango_context(container),&families, &n_families); | |
| 378 | + gtk_widget_show_all(widget); | |
| 462 | 379 | |
| 463 | - for(i=0; i<n_families; i++) | |
| 464 | - { | |
| 465 | - if(pango_font_family_is_monospace(families[i])) | |
| 466 | - { | |
| 467 | - const gchar *name = pango_font_family_get_name (families[i]); | |
| 468 | - gtk_list_store_append((GtkListStore *) model,&iter); | |
| 469 | - gtk_list_store_set((GtkListStore *) model, &iter,0, name, -1); | |
| 470 | - | |
| 471 | - if(!g_ascii_strcasecmp(name,info->font.family)) | |
| 472 | - gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widget),&iter); | |
| 473 | - } | |
| 474 | - } | |
| 475 | - | |
| 476 | - g_free(families); | |
| 477 | - } | |
| 478 | -#else | |
| 479 | - { | |
| 480 | - trace("Font=%s",info->font); | |
| 481 | - widget = gtk_font_button_new_with_font(info->font); | |
| 482 | - gtk_font_button_set_show_size((GtkFontButton *) widget,TRUE); | |
| 483 | - gtk_font_button_set_use_font((GtkFontButton *) widget,TRUE); | |
| 484 | - gtk_label_set_mnemonic_widget(GTK_LABEL(label[0]),widget); | |
| 485 | - g_free(info->font); | |
| 486 | - | |
| 487 | -#if GTK_CHECK_VERSION(3,2,0) | |
| 488 | - gtk_font_chooser_set_filter_func((GtkFontChooser *) widget,filter_monospaced,NULL,NULL); | |
| 489 | -#endif // GTK(3,2,0) | |
| 490 | - | |
| 491 | - g_signal_connect(G_OBJECT(widget),"font-set",G_CALLBACK(font_set),info); | |
| 492 | - | |
| 493 | - } | |
| 494 | -#endif | |
| 495 | - | |
| 496 | - gtk_table_attach(GTK_TABLE(container),widget,1,2,0,1,GTK_EXPAND|GTK_FILL,GTK_FILL,5,0); | |
| 497 | - | |
| 498 | - load_settings(info); | |
| 499 | - | |
| 500 | - widget = color_scheme_new(info->color); | |
| 501 | - gtk_label_set_mnemonic_widget(GTK_LABEL(label[1]),widget); | |
| 502 | - | |
| 503 | - g_object_set_data(G_OBJECT(container),"combo",widget); | |
| 504 | - gtk_table_attach(GTK_TABLE(container),widget,1,2,1,2,GTK_EXPAND|GTK_FILL,GTK_FILL,5,0); | |
| 505 | - | |
| 506 | - // Selection checkbox | |
| 507 | - widget = gtk_check_button_new_with_label( _("Print selection box") ); | |
| 508 | - | |
| 509 | - if(info->src == LIB3270_CONTENT_ALL) | |
| 510 | - { | |
| 511 | - info->show_selection = get_boolean_from_config("print","selection",FALSE); | |
| 512 | - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),info->show_selection); | |
| 513 | - g_signal_connect(G_OBJECT(widget),"toggled",G_CALLBACK(toggle_show_selection),info); | |
| 514 | - } | |
| 515 | - else | |
| 516 | - { | |
| 517 | - gtk_widget_set_sensitive(widget,FALSE); | |
| 518 | - } | |
| 519 | - | |
| 520 | - gtk_table_attach(GTK_TABLE(container),widget,1,2,2,3,GTK_EXPAND|GTK_FILL,GTK_FILL,5,0); | |
| 521 | - | |
| 522 | - // Show and return | |
| 523 | - gtk_widget_show_all(container); | |
| 524 | - | |
| 525 | - trace("%s ends container=%p",__FUNCTION__,container); | |
| 526 | - return G_OBJECT(container); | |
| 380 | + return widget; | |
| 527 | 381 | } |
| 528 | 382 | |
| 529 | 383 | static void custom_widget_apply(GtkPrintOperation *prt, GtkWidget *widget, PRINT_INFO *info) |
| 530 | 384 | { |
| 531 | - GtkWidget * combo = g_object_get_data(G_OBJECT(widget),"combo"); | |
| 532 | - GdkRGBA * clr = g_object_get_data(G_OBJECT(combo),"selected"); | |
| 385 | + GtkWidget * settings = gtk_bin_get_child(GTK_BIN(widget)); | |
| 533 | 386 | |
| 534 | - trace("%s starts combo=%p clr=%p widget=%p",__FUNCTION__,combo,clr,widget); | |
| 387 | + info->show_selection = v3270_print_settings_get_show_selection(settings) ? 1 : 0; | |
| 535 | 388 | |
| 389 | + // Setup font family | |
| 536 | 390 | if(info->font.family) |
| 537 | - set_string_to_config("print",FONT_CONFIG,info->font.family); | |
| 538 | - | |
| 539 | - if(clr) | |
| 540 | - { | |
| 541 | - int f; | |
| 542 | - GString *str = g_string_new(""); | |
| 543 | - for(f=0;f<V3270_COLOR_COUNT;f++) | |
| 544 | - { | |
| 545 | - info->color[f] = clr[f]; | |
| 546 | - if(f) | |
| 547 | - g_string_append_c(str,';'); | |
| 548 | - g_string_append_printf(str,"%s",gdk_rgba_to_string(clr+f)); | |
| 549 | - } | |
| 550 | - set_string_to_config("print","colors","%s",str->str); | |
| 551 | - g_string_free(str,TRUE); | |
| 552 | - } | |
| 391 | + g_free(info->font.family); | |
| 392 | + info->font.family = v3270_print_settings_get_font_family(settings); | |
| 393 | + set_string_to_config("print",FONT_CONFIG,info->font.family); | |
| 553 | 394 | |
| 554 | - trace("%s ends",__FUNCTION__); | |
| 395 | + // Setup print settings | |
| 396 | + v3270_print_settings_get_rgba(settings, info->color, V3270_COLOR_COUNT); | |
| 397 | + g_autofree gchar * colors = v3270_print_settings_get_color_scheme(settings); | |
| 398 | + set_string_to_config("print","colors","%s",colors); | |
| 555 | 399 | |
| 556 | 400 | } |
| 557 | 401 | |
| ... | ... | @@ -620,7 +464,18 @@ static gchar * enum_to_string(GType type, guint enum_value) |
| 620 | 464 | g_signal_connect(print,"create-custom-widget",G_CALLBACK(create_custom_widget), *info); |
| 621 | 465 | g_signal_connect(print,"custom-widget-apply",G_CALLBACK(custom_widget_apply), *info); |
| 622 | 466 | #else |
| 623 | - load_settings(*info); | |
| 467 | + { | |
| 468 | + g_autofree gchar *color_scheme = get_string_from_config("print","colors",""); | |
| 469 | + | |
| 470 | + trace("info->color=%p",info->color); | |
| 471 | + trace("colorlist=%p",ptr); | |
| 472 | + | |
| 473 | + if(color_scheme && *color_scheme) | |
| 474 | + v3270_set_color_table(info->color,color_scheme); | |
| 475 | + else | |
| 476 | + v3270_set_mono_color_table(info->color,"black","white"); | |
| 477 | + | |
| 478 | + } | |
| 624 | 479 | #endif // _WIN32 |
| 625 | 480 | |
| 626 | 481 | // Load page and print settings | ... | ... |