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,18 +31,12 @@ | ||
31 | 31 | ||
32 | #include "private.h" | 32 | #include "private.h" |
33 | #include <v3270.h> | 33 | #include <v3270.h> |
34 | + #include <v3270/print.h> | ||
34 | #include <lib3270/selection.h> | 35 | #include <lib3270/selection.h> |
35 | #include <lib3270/trace.h> | 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 | /*--[ Structs ]--------------------------------------------------------------------------------------*/ | 41 | /*--[ Structs ]--------------------------------------------------------------------------------------*/ |
48 | 42 | ||
@@ -63,10 +57,6 @@ | @@ -63,10 +57,6 @@ | ||
63 | 57 | ||
64 | v3270FontInfo font; | 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 | double left; | 60 | double left; |
71 | double width; /**< Report width */ | 61 | double width; /**< Report width */ |
72 | double height; /**< Report height (all pages) */ | 62 | double height; /**< Report height (all pages) */ |
@@ -97,14 +87,9 @@ | @@ -97,14 +87,9 @@ | ||
97 | CAIRO_FONT_SLANT_NORMAL, | 87 | CAIRO_FONT_SLANT_NORMAL, |
98 | pango_font_description_get_weight(descr) == PANGO_WEIGHT_BOLD ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL); | 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 | double width = gtk_print_context_get_width(context); | 91 | double width = gtk_print_context_get_width(context); |
103 | -#if GTK_CHECK_VERSION(3,0,0) | ||
104 | double cols = (double) info->cols; | 92 | double cols = (double) info->cols; |
105 | -#else | ||
106 | - double cols = (double) (info->cols+5); | ||
107 | -#endif // GTK(3,0,0) | ||
108 | double current = width / cols; | 93 | double current = width / cols; |
109 | double valid = current; | 94 | double valid = current; |
110 | 95 | ||
@@ -121,7 +106,6 @@ | @@ -121,7 +106,6 @@ | ||
121 | cairo_set_font_size(cr,valid); | 106 | cairo_set_font_size(cr,valid); |
122 | 107 | ||
123 | } | 108 | } |
124 | -#endif // AUTO_FONT_SIZE | ||
125 | 109 | ||
126 | pango_font_description_free(descr); | 110 | pango_font_description_free(descr); |
127 | } | 111 | } |
@@ -355,44 +339,6 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -355,44 +339,6 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
355 | g_free(info); | 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 | static void toggle_show_selection(GtkToggleButton *togglebutton,PRINT_INFO *info) | 342 | static void toggle_show_selection(GtkToggleButton *togglebutton,PRINT_INFO *info) |
397 | { | 343 | { |
398 | gboolean active = gtk_toggle_button_get_active(togglebutton); | 344 | gboolean active = gtk_toggle_button_get_active(togglebutton); |
@@ -400,158 +346,56 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -400,158 +346,56 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
400 | set_boolean_to_config("print","selection",active); | 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 | static void custom_widget_apply(GtkPrintOperation *prt, GtkWidget *widget, PRINT_INFO *info) | 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 | if(info->font.family) | 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,7 +464,18 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
620 | g_signal_connect(print,"create-custom-widget",G_CALLBACK(create_custom_widget), *info); | 464 | g_signal_connect(print,"create-custom-widget",G_CALLBACK(create_custom_widget), *info); |
621 | g_signal_connect(print,"custom-widget-apply",G_CALLBACK(custom_widget_apply), *info); | 465 | g_signal_connect(print,"custom-widget-apply",G_CALLBACK(custom_widget_apply), *info); |
622 | #else | 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 | #endif // _WIN32 | 479 | #endif // _WIN32 |
625 | 480 | ||
626 | // Load page and print settings | 481 | // Load page and print settings |