Commit 438f898aabf91509e231ed6b41886dfba9c0bb14
1 parent
baf5dd1b
Exists in
master
and in
1 other branch
Finishing print settings custom widget.
Showing
7 changed files
with
95 additions
and
50 deletions
Show diff stats
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 | ... | ... |