Commit 438f898aabf91509e231ed6b41886dfba9c0bb14

Authored by Perry Werneck
1 parent baf5dd1b
Exists in master and in 1 other branch develop

Finishing print settings custom widget.

src/dialogs/colorscheme.c
... ... @@ -454,3 +454,31 @@
454 454 v3270_color_scheme_set_rgba(widget,clr);
455 455  
456 456 }
  457 +
  458 + int v3270_color_scheme_get_rgba(GtkWidget *widget, GdkRGBA *colors, size_t num_colors)
  459 + {
  460 + if(num_colors > V3270_COLOR_COUNT)
  461 + num_colors = V3270_COLOR_COUNT;
  462 +
  463 + GdkRGBA * clr = NULL;
  464 + GValue value = { 0, };
  465 + GtkTreeIter iter;
  466 + size_t f;
  467 +
  468 + if(!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(widget),&iter))
  469 + return errno = ENODATA;
  470 +
  471 + gtk_tree_model_get_value(gtk_combo_box_get_model(GTK_COMBO_BOX(widget)),&iter,1,&value);
  472 + clr = g_value_get_pointer(&value);
  473 +
  474 + if(!clr)
  475 + return errno = ENODATA;
  476 +
  477 + for(f=0;f<num_colors;f++)
  478 + {
  479 + colors[f] = clr[f];
  480 + }
  481 +
  482 + return 0;
  483 + }
  484 +
... ...
src/dialogs/print/begin.c
... ... @@ -38,11 +38,8 @@
38 38  
39 39 trace("%s",__FUNCTION__);
40 40  
41   - // Setup options.
42   - operation->show_selection = v3270_print_settings_get_show_selection(GTK_WIDGET(operation->settings));
43   -
44 41 // Setup FONT
45   - PangoFontDescription * fontDescription = pango_font_description_from_string(v3270_font_selection_get_family(operation->settings->font));
  42 + PangoFontDescription * fontDescription = pango_font_description_from_string(operation->font.name);
46 43  
47 44 cairo_select_font_face(
48 45 cr,
... ...
src/dialogs/print/draw.c
... ... @@ -83,7 +83,7 @@
83 83 rect.width = operation->font.info.width;
84 84  
85 85 // Clear drawing area.
86   - gdk_cairo_set_source_rgba(cr,operation->settings->colors + V3270_COLOR_BACKGROUND);
  86 + gdk_cairo_set_source_rgba(cr,operation->settings.colors + V3270_COLOR_BACKGROUND);
87 87 cairo_rectangle(
88 88 cr,
89 89 operation->font.info.left-1,0,
... ... @@ -132,7 +132,7 @@
132 132 operation->session,
133 133 &operation->font.info,
134 134 &rect,
135   - operation->settings->colors
  135 + operation->settings.colors
136 136 );
137 137  
138 138 }
... ...
src/dialogs/print/print.c
... ... @@ -80,18 +80,11 @@
80 80  
81 81 V3270PrintOperation * operation = GTK_V3270_PRINT_OPERATION(object);
82 82  
83   - /*
84   - if(operation->settings)
85   - {
86   - gtk_widget_destroy(GTK_WIDGET(operation->settings));
87   - operation->settings = NULL;
88   - }
89   - */
90   -
91 83 if(operation->font.info.scaled)
92 84 cairo_scaled_font_destroy(operation->font.info.scaled);
93 85  
94   -// g_free(operation->font.name);
  86 + if(operation->font.name)
  87 + g_free(operation->font.name);
95 88  
96 89 if(operation->contents.dynamic)
97 90 {
... ... @@ -108,11 +101,38 @@
108 101 #ifndef _WIN32
109 102 static GtkWidget * custom_widget_new(GtkPrintOperation *prt)
110 103 {
111   - return GTK_WIDGET(GTK_V3270_PRINT_OPERATION(prt)->settings);
  104 + GtkWidget * widget = gtk_frame_new("");
  105 + GtkWidget * settings = V3270_print_settings_new(GTK_WIDGET(GTK_V3270_PRINT_OPERATION(prt)->widget));
  106 +
  107 + GtkWidget *label = gtk_label_new(NULL);
  108 + gtk_label_set_markup(GTK_LABEL(label),_("<b>Text options</b>"));
  109 + gtk_frame_set_label_widget(GTK_FRAME(widget),label);
  110 +
  111 + gtk_container_set_border_width(GTK_CONTAINER(widget),12);
  112 +
  113 + // The print dialog doesn't follow the guidelines from https://developer.gnome.org/hig/stable/visual-layout.html.en )-:
  114 + gtk_frame_set_shadow_type(GTK_FRAME(widget),GTK_SHADOW_NONE);
  115 +
  116 + gtk_container_set_border_width(GTK_CONTAINER(settings),6);
  117 + g_object_set(G_OBJECT(settings),"margin-start",8,NULL);
  118 +
  119 + gtk_container_add(GTK_CONTAINER(widget),settings);
  120 +
  121 + gtk_widget_show_all(widget);
  122 +
  123 + return widget;
112 124 }
113 125  
114 126 static void custom_widget_apply(GtkPrintOperation *prt, GtkWidget *widget)
115 127 {
  128 + V3270PrintOperation * operation = GTK_V3270_PRINT_OPERATION(prt);
  129 + GtkWidget * settings = gtk_bin_get_child(GTK_BIN(widget));
  130 +
  131 + // Setup options.
  132 + operation->show_selection = v3270_print_settings_get_show_selection(settings);
  133 + operation->font.name = g_strdup(v3270_font_selection_get_family(settings));
  134 +
  135 + v3270_print_settings_get_rgba(settings, operation->settings.colors, V3270_COLOR_COUNT);
116 136  
117 137 }
118 138 #endif // _WIN32
... ... @@ -157,7 +177,8 @@ V3270PrintOperation * v3270_print_operation_new(GtkWidget *widget, LIB3270_CONTE
157 177 operation->mode = mode;
158 178 operation->widget = GTK_V3270(widget);
159 179 operation->session = v3270_get_session(widget);
160   - operation->settings = GTK_V3270_PRINT_SETTINGS(V3270_print_settings_new(widget));
  180 +
  181 + v3270_set_mono_color_table(operation->settings.colors,"#000000","#FFFFFF");
161 182  
162 183 // Get contents.
163 184 switch(operation->mode)
... ...
src/dialogs/print/private.h
... ... @@ -54,13 +54,17 @@
54 54 H3270 * session;
55 55 gboolean show_selection; ///< @brief Print selection box?
56 56  
57   - V3270PrintSettings * settings; ///< @brief Custom configuration.
58   -
59 57 size_t lpp; ///< @brief Lines per page (in rows).
60 58 size_t pages; ///< @brief Number of pages.
61 59  
62 60 struct
63 61 {
  62 + GdkRGBA colors[V3270_COLOR_COUNT]; ///< @brief Color scheme for printing.
  63 +
  64 + } settings;
  65 +
  66 + struct
  67 + {
64 68 unsigned int width; ///< @brief Max line width.
65 69 unsigned int height; ///< @brief Number of lines to print.
66 70 GList * dynamic;
... ... @@ -69,21 +73,21 @@
69 73  
70 74 struct
71 75 {
72   - v3270FontInfo info;
  76 + gchar * name;
  77 + v3270FontInfo info;
73 78 } font;
74 79  
75 80 };
76 81  
77 82 struct _V3270PrintSettingsClass
78 83 {
79   - GtkFrameClass parent_class;
  84 + GtkGridClass parent_class;
80 85  
81 86 };
82 87  
83 88 struct _V3270PrintSettings
84 89 {
85   - GtkFrame parent;
86   - GdkRGBA colors[V3270_COLOR_COUNT]; ///< @brief Color scheme for printing.
  90 + GtkGrid parent;
87 91  
88 92 GtkWidget * font; ///< @brief Font selection widget.
89 93 GtkWidget * color; ///< @brief Color scheme selecting widget.
... ...
src/dialogs/print/settings.c
... ... @@ -35,7 +35,7 @@
35 35  
36 36 /*--[ Widget definition ]----------------------------------------------------------------------------*/
37 37  
38   - G_DEFINE_TYPE(V3270PrintSettings, V3270PrintSettings, GTK_TYPE_FRAME);
  38 + G_DEFINE_TYPE(V3270PrintSettings, V3270PrintSettings, GTK_TYPE_GRID);
39 39  
40 40 /*--[ Implement ]------------------------------------------------------------------------------------*/
41 41  
... ... @@ -57,6 +57,7 @@ static void V3270PrintSettings_class_init(V3270PrintSettingsClass *klass)
57 57  
58 58 }
59 59  
  60 +/*
60 61 static void color_scheme_changed(GtkWidget G_GNUC_UNUSED(*widget), const GdkRGBA *colors, V3270PrintSettings *settings)
61 62 {
62 63  
... ... @@ -67,6 +68,7 @@ static void color_scheme_changed(GtkWidget G_GNUC_UNUSED(*widget), const GdkRGBA
67 68 settings->colors[f] = colors[f];
68 69  
69 70 }
  71 +*/
70 72  
71 73 static void V3270PrintSettings_init(V3270PrintSettings *widget)
72 74 {
... ... @@ -77,46 +79,32 @@ static void V3270PrintSettings_init(V3270PrintSettings *widget)
77 79 };
78 80  
79 81 size_t f;
80   - GtkGrid * grid = GTK_GRID(gtk_grid_new());
81   -
82 82 widget->font = v3270_font_selection_new("monospace");
83 83 widget->color = v3270_color_scheme_new();
84 84 widget->selected = gtk_check_button_new_with_label( _("Print selection box") );
85 85  
86   - // The print dialog doesn't follow the guidelines from https://developer.gnome.org/hig/stable/visual-layout.html.en )-:
87   - gtk_frame_set_shadow_type(GTK_FRAME(widget),GTK_SHADOW_NONE);
88   -
89   - GtkWidget *label = gtk_label_new(NULL);
90   -
91   - gtk_label_set_markup(GTK_LABEL(label),_("<b>Text options</b>"));
92   - gtk_frame_set_label_widget(GTK_FRAME(widget),label);
93   -
94   - gtk_container_set_border_width(GTK_CONTAINER(widget),12);
95   - gtk_container_set_border_width(GTK_CONTAINER(grid),6);
96   -
97   - g_object_set(G_OBJECT(grid),"margin-start",8,NULL);
  86 + // https://developer.gnome.org/hig/stable/visual-layout.html.en
  87 + gtk_grid_set_row_spacing(GTK_GRID(widget),6);
  88 + gtk_grid_set_column_spacing(GTK_GRID(widget),12);
98 89  
99   - gtk_grid_set_row_spacing(grid,6);
100   - gtk_grid_set_column_spacing(grid,12);
101   -
102   - g_signal_connect(G_OBJECT(widget->color),"update-colors",G_CALLBACK(color_scheme_changed),widget);
  90 + // g_signal_connect(G_OBJECT(widget->color),"update-colors",G_CALLBACK(color_scheme_changed),widget);
103 91 // g_signal_connect(G_OBJECT(widget->selected),"toggled",G_CALLBACK(toggle_show_selection),widget);
104 92  
105 93 for(f=0;f<G_N_ELEMENTS(text);f++)
106 94 {
107 95 GtkWidget *label = gtk_label_new_with_mnemonic(gettext(text[f]));
108 96 gtk_widget_set_halign(label,GTK_ALIGN_START);
109   - gtk_grid_attach(grid,label,0,f,1,1);
  97 + gtk_grid_attach(GTK_GRID(widget),label,0,f,1,1);
110 98 }
111 99  
112   - gtk_grid_attach(grid,widget->font,1,0,1,1);
113   - gtk_grid_attach(grid,widget->color,1,1,1,1);
114   - gtk_grid_attach(grid,widget->selected,1,2,1,1);
115   -
116   - gtk_container_add(GTK_CONTAINER(widget),GTK_WIDGET(grid));
  100 + gtk_grid_attach(GTK_GRID(widget),widget->font,1,0,1,1);
  101 + gtk_grid_attach(GTK_GRID(widget),widget->color,1,1,1,1);
  102 + gtk_grid_attach(GTK_GRID(widget),widget->selected,1,2,1,1);
117 103  
118   - v3270_set_mono_color_table(widget->colors,"#000000","#FFFFFF");
119   - v3270_color_scheme_set_rgba(widget->color,widget->colors);
  104 + // Set color scheme
  105 + GdkRGBA colors[V3270_COLOR_COUNT];
  106 + v3270_set_mono_color_table(colors,"#000000","#FFFFFF");
  107 + v3270_color_scheme_set_rgba(widget->color,colors);
120 108  
121 109 gtk_widget_show_all(GTK_WIDGET(widget));
122 110  
... ... @@ -132,6 +120,12 @@ LIB3270_EXPORT GtkWidget * V3270_print_settings_new(GtkWidget *widget)
132 120  
133 121 }
134 122  
  123 +LIB3270_EXPORT int v3270_print_settings_get_rgba(GtkWidget *widget, GdkRGBA *colors, size_t num_colors)
  124 +{
  125 + V3270PrintSettings * settings = GTK_V3270_PRINT_SETTINGS(widget);
  126 + return v3270_color_scheme_get_rgba(settings->color, colors, num_colors);
  127 +}
  128 +
135 129 LIB3270_EXPORT gboolean v3270_print_settings_get_show_selection(GtkWidget *widget)
136 130 {
137 131 return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(GTK_V3270_PRINT_SETTINGS(widget)->selected));
... ...
src/include/v3270/print.h
... ... @@ -79,6 +79,7 @@
79 79 LIB3270_EXPORT void v3270_print_settings_set_color_scheme(GtkWidget *widget, const gchar *colors);
80 80 LIB3270_EXPORT const gchar * v3270_print_settings_get_font_family(GtkWidget *widget);
81 81 LIB3270_EXPORT gboolean v3270_print_settings_set_font_family(GtkWidget *widget, const gchar *fontname);
  82 + LIB3270_EXPORT int v3270_print_settings_get_rgba(GtkWidget *widget, GdkRGBA *colors, size_t num_colors);
82 83  
83 84 G_END_DECLS
84 85  
... ...