Commit b3d7d133b9043857006241a7ad48d45ceea0c6df
1 parent
a3de0daf
Exists in
master
and in
5 other branches
Implementando novo diálogo de impressão
Showing
3 changed files
with
121 additions
and
24 deletions
Show diff stats
| @@ -0,0 +1,42 @@ | @@ -0,0 +1,42 @@ | ||
| 1 | +[X3270] | ||
| 2 | +Label=X3270 | ||
| 3 | +Terminal=black,deepSkyBlue,red,pink,green,turquoise,yellow,white,black,blue3,orange,purple,paleGreen,paleTurquoise2,grey,white | ||
| 4 | +BaseAttributes=green,red,deepSkyBlue,white | ||
| 5 | +SelectedText=dimGrey,black,dimGrey | ||
| 6 | +Cursor=white,white | ||
| 7 | +OIA=black,white,white,white,white | ||
| 8 | + | ||
| 9 | +[Reverse] | ||
| 10 | +Label=Reverse | ||
| 11 | +Label[pt_BR]=Invertido | ||
| 12 | +Terminal=white,blue,firebrick,pink,green4,cadetBlue,goldenrod,black,black,blue3,orange,purple,paleGreen,darkTurquoise,grey,black | ||
| 13 | +BaseAttributes=green4,firebrick,blue,black | ||
| 14 | +SelectedText=dimGrey,black,dimGrey | ||
| 15 | +Cursor=black,black | ||
| 16 | +OIA=white,black,black,black,black | ||
| 17 | + | ||
| 18 | +[Bright] | ||
| 19 | +Label=Bright | ||
| 20 | +Label[pt_BR]=Cores fortes | ||
| 21 | +Terminal=black,blue,red,magenta,green,turquoise,yellow,white,black,blue3,orange,purple,paleGreen,cyan,grey,white | ||
| 22 | +BaseAttributes=green,red,blue,white | ||
| 23 | +SelectedText=dimGrey,black,dimGrey | ||
| 24 | +Cursor=white,white | ||
| 25 | +OIA=black,white,white,white,white | ||
| 26 | + | ||
| 27 | +[CPE] | ||
| 28 | +Label=CPE | ||
| 29 | +Terminal=black,LightBlue1,PaleVioletRed1,pink,green,turquoise,yellow,white,black,LightBlue3,orange,MediumPurple1,paleGreen,paleTurquoise2,grey80,white | ||
| 30 | +BaseAttributes=green,PaleVioletRed1,LightBlue1,white | ||
| 31 | +SelectedText=dimGrey,black,dimGrey | ||
| 32 | +Cursor=white,white | ||
| 33 | +OIA=black,white,white,white,white | ||
| 34 | + | ||
| 35 | +[Green] | ||
| 36 | +Label=Green | ||
| 37 | +Label[pt_BR]=Verde | ||
| 38 | +Terminal=black,green,green,green,green,green,green,green,green,green,green,green,green,green,green,green | ||
| 39 | +BaseAttributes=green,green,green,green | ||
| 40 | +SelectedText=dimGrey,green,dimGrey | ||
| 41 | +Cursor=green,green | ||
| 42 | +OIA=black,green,green,green,green |
src/gtk/actions.c
| @@ -201,14 +201,14 @@ static void lib3270_toggle_action(GtkToggleAction *action,GtkWidget *widget) | @@ -201,14 +201,14 @@ static void lib3270_toggle_action(GtkToggleAction *action,GtkWidget *widget) | ||
| 201 | 201 | ||
| 202 | static void selection_move_action(GtkAction *action, GtkWidget *widget) | 202 | static void selection_move_action(GtkAction *action, GtkWidget *widget) |
| 203 | { | 203 | { |
| 204 | - trace("Action %s activated on widget %p dir=%s",gtk_action_get_name(action),widget,g_object_get_data(G_OBJECT(action),"direction")); | 204 | + trace("Action %s activated on widget %p dir=%s",gtk_action_get_name(action),widget,(const gchar *) g_object_get_data(G_OBJECT(action),"direction")); |
| 205 | lib3270_move_selection(GTK_V3270(widget)->host,(LIB3270_DIRECTION) g_object_get_data(G_OBJECT(action),"direction")); | 205 | lib3270_move_selection(GTK_V3270(widget)->host,(LIB3270_DIRECTION) g_object_get_data(G_OBJECT(action),"direction")); |
| 206 | } | 206 | } |
| 207 | 207 | ||
| 208 | static void cursor_move_action(GtkAction *action, GtkWidget *widget) | 208 | static void cursor_move_action(GtkAction *action, GtkWidget *widget) |
| 209 | { | 209 | { |
| 210 | int flags = (int) g_object_get_data(G_OBJECT(action),"move_flags"); | 210 | int flags = (int) g_object_get_data(G_OBJECT(action),"move_flags"); |
| 211 | - trace("Action %s activated on widget %p flags=%04x",gtk_action_get_name(action),widget,g_object_get_data(G_OBJECT(action),"move_flags")); | 211 | + trace("Action %s activated on widget %p flags=%04x",gtk_action_get_name(action),widget,(unsigned short) g_object_get_data(G_OBJECT(action),"move_flags")); |
| 212 | lib3270_move_cursor(GTK_V3270(widget)->host,(LIB3270_DIRECTION) (flags & 0x03), (flags & 0x80) ); | 212 | lib3270_move_cursor(GTK_V3270(widget)->host,(LIB3270_DIRECTION) (flags & 0x03), (flags & 0x80) ); |
| 213 | } | 213 | } |
| 214 | 214 |
src/gtk/print.c
| @@ -36,28 +36,60 @@ | @@ -36,28 +36,60 @@ | ||
| 36 | 36 | ||
| 37 | typedef struct _print_info | 37 | typedef struct _print_info |
| 38 | { | 38 | { |
| 39 | - GdkColor color[V3270_COLOR_COUNT]; | 39 | + GdkColor color[V3270_COLOR_COUNT]; |
| 40 | + H3270 * session; | ||
| 41 | + gchar * font; | ||
| 42 | + int rows; | ||
| 43 | + int cols; | ||
| 44 | + int pages; | ||
| 45 | + cairo_font_extents_t extents; | ||
| 46 | + cairo_scaled_font_t * font_scaled; | ||
| 40 | 47 | ||
| 41 | } PRINT_INFO; | 48 | } PRINT_INFO; |
| 42 | 49 | ||
| 43 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 50 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| 44 | 51 | ||
| 45 | - static void begin_print(GtkPrintOperation *prt, GtkPrintContext *context, PRINT_INFO *info) | 52 | + static void setup_font(cairo_t *cr, PRINT_INFO *info) |
| 46 | { | 53 | { |
| 47 | - trace("%s",__FUNCTION__); | ||
| 48 | - gtk_print_operation_cancel(prt); | 54 | + cairo_select_font_face(cr, info->font, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); |
| 55 | + | ||
| 56 | + info->font_scaled = cairo_get_scaled_font(cr); | ||
| 57 | + cairo_scaled_font_reference(info->font_scaled); | ||
| 58 | + cairo_scaled_font_extents(info->font_scaled,&info->extents); | ||
| 59 | + | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + static void begin_print_all(GtkPrintOperation *prt, GtkPrintContext *context, PRINT_INFO *info) | ||
| 63 | + { | ||
| 64 | + cairo_t *cr = gtk_print_context_get_cairo_context(context); | ||
| 65 | + | ||
| 66 | + lib3270_get_screen_size(info->session,&info->rows,&info->cols); | ||
| 67 | + setup_font(cr,info); | ||
| 68 | + | ||
| 69 | + gtk_print_operation_set_n_pages(prt,1); | ||
| 49 | } | 70 | } |
| 50 | 71 | ||
| 51 | static void draw_page(GtkPrintOperation *prt, GtkPrintContext *context, gint pg, PRINT_INFO *info) | 72 | static void draw_page(GtkPrintOperation *prt, GtkPrintContext *context, gint pg, PRINT_INFO *info) |
| 52 | { | 73 | { |
| 53 | - trace("%s",__FUNCTION__); | 74 | + cairo_t *cr = gtk_print_context_get_cairo_context(context); |
| 75 | + | ||
| 76 | + cairo_set_scaled_font(cr,info->font_scaled); | ||
| 54 | 77 | ||
| 78 | + cairo_move_to(cr,0,0); | ||
| 79 | + cairo_show_text(cr, "Teste"); | ||
| 80 | + | ||
| 81 | + cairo_stroke(cr); | ||
| 55 | } | 82 | } |
| 56 | 83 | ||
| 57 | static void done(GtkPrintOperation *prt, GtkPrintOperationResult result, PRINT_INFO *info) | 84 | static void done(GtkPrintOperation *prt, GtkPrintOperationResult result, PRINT_INFO *info) |
| 58 | { | 85 | { |
| 59 | trace("%s",__FUNCTION__); | 86 | trace("%s",__FUNCTION__); |
| 60 | 87 | ||
| 88 | + if(info->font_scaled) | ||
| 89 | + cairo_scaled_font_destroy(info->font_scaled); | ||
| 90 | + | ||
| 91 | + if(info->font) | ||
| 92 | + g_free(info->font); | ||
| 61 | 93 | ||
| 62 | g_free(info); | 94 | g_free(info); |
| 63 | } | 95 | } |
| @@ -69,28 +101,41 @@ | @@ -69,28 +101,41 @@ | ||
| 69 | } | 101 | } |
| 70 | #endif // GTK(3,2,0) | 102 | #endif // GTK(3,2,0) |
| 71 | 103 | ||
| 104 | + static void font_set(GtkFontButton *widget, PRINT_INFO *info) | ||
| 105 | + { | ||
| 106 | + if(info->font) | ||
| 107 | + g_free(info->font); | ||
| 108 | + | ||
| 109 | + info->font = g_strdup(gtk_font_button_get_font_name(widget)); | ||
| 110 | + set_string_to_config("print","font","%s",info->font); | ||
| 111 | + trace("Font set to \"%s\"",info->font); | ||
| 112 | + } | ||
| 113 | + | ||
| 72 | static GObject * create_custom_widget(GtkPrintOperation *prt, PRINT_INFO *info) | 114 | static GObject * create_custom_widget(GtkPrintOperation *prt, PRINT_INFO *info) |
| 73 | { | 115 | { |
| 74 | - static const gchar * label[] = { "Font:", "Colors:" }; | 116 | + static const gchar * label[] = { N_( "Font:" ), N_( "Colors:" ) }; |
| 75 | GtkWidget * container = gtk_table_new(2,2,FALSE); | 117 | GtkWidget * container = gtk_table_new(2,2,FALSE); |
| 76 | GtkWidget * widget; | 118 | GtkWidget * widget; |
| 77 | int f; | 119 | int f; |
| 78 | 120 | ||
| 79 | for(f=0;f<G_N_ELEMENTS(label);f++) | 121 | for(f=0;f<G_N_ELEMENTS(label);f++) |
| 80 | { | 122 | { |
| 81 | - widget = gtk_label_new(label[f]); | 123 | + widget = gtk_label_new(gettext(label[f])); |
| 82 | gtk_misc_set_alignment(GTK_MISC(widget),0,0.5); | 124 | gtk_misc_set_alignment(GTK_MISC(widget),0,0.5); |
| 83 | gtk_table_attach(GTK_TABLE(container),widget,0,1,f,f+1,GTK_FILL,GTK_FILL,0,0); | 125 | gtk_table_attach(GTK_TABLE(container),widget,0,1,f,f+1,GTK_FILL,GTK_FILL,0,0); |
| 84 | } | 126 | } |
| 85 | 127 | ||
| 86 | // Font selection button | 128 | // Font selection button |
| 87 | widget = gtk_font_button_new(); | 129 | widget = gtk_font_button_new(); |
| 88 | - gtk_font_button_set_show_size(GTK_FONT_BUTTON(widget),FALSE); | ||
| 89 | #if GTK_CHECK_VERSION(3,2,0) | 130 | #if GTK_CHECK_VERSION(3,2,0) |
| 90 | gtk_font_chooser_set_filter_func(widget,filter_monospaced,0); | 131 | gtk_font_chooser_set_filter_func(widget,filter_monospaced,0); |
| 91 | #endif // GTK(3,2,0) | 132 | #endif // GTK(3,2,0) |
| 92 | gtk_table_attach(GTK_TABLE(container),widget,1,2,0,1,GTK_EXPAND|GTK_FILL,GTK_FILL,5,0); | 133 | gtk_table_attach(GTK_TABLE(container),widget,1,2,0,1,GTK_EXPAND|GTK_FILL,GTK_FILL,5,0); |
| 93 | 134 | ||
| 135 | + info->font = get_string_from_config("print","font","Courier 10"); | ||
| 136 | + gtk_font_button_set_font_name((GtkFontButton *) widget,info->font); | ||
| 137 | + g_signal_connect(G_OBJECT(widget),"font-set",G_CALLBACK(font_set),info); | ||
| 138 | + | ||
| 94 | // Color scheme dropdown | 139 | // Color scheme dropdown |
| 95 | 140 | ||
| 96 | // Show and return | 141 | // Show and return |
| @@ -103,33 +148,39 @@ | @@ -103,33 +148,39 @@ | ||
| 103 | trace("%s",__FUNCTION__); | 148 | trace("%s",__FUNCTION__); |
| 104 | } | 149 | } |
| 105 | 150 | ||
| 106 | - static GtkPrintOperation * begin_print_operation(GtkAction *action, GtkWidget *widget) | 151 | + static GtkPrintOperation * begin_print_operation(GtkAction *action, GtkWidget *widget, PRINT_INFO **info) |
| 107 | { | 152 | { |
| 108 | - PRINT_INFO * info = g_new0(PRINT_INFO,1); | ||
| 109 | GtkPrintOperation * print = gtk_print_operation_new(); | 153 | GtkPrintOperation * print = gtk_print_operation_new(); |
| 110 | // GtkPrintSettings * settings = gtk_print_settings_new(); | 154 | // GtkPrintSettings * settings = gtk_print_settings_new(); |
| 111 | // GtkPageSetup * setup = gtk_page_setup_new(); | 155 | // GtkPageSetup * setup = gtk_page_setup_new(); |
| 112 | -// gchar * ptr; | 156 | + const gchar * attr; |
| 157 | + | ||
| 158 | + *info = g_new0(PRINT_INFO,1); | ||
| 159 | + (*info)->session = v3270_get_session(widget); | ||
| 113 | 160 | ||
| 114 | // Basic setup | 161 | // Basic setup |
| 115 | gtk_print_operation_set_allow_async(print,TRUE); | 162 | gtk_print_operation_set_allow_async(print,TRUE); |
| 116 | 163 | ||
| 117 | -/* | ||
| 118 | - ptr = g_strconcat(PACKAGE_NAME,".",gtk_action_get_name(action),NULL); | ||
| 119 | - gtk_print_operation_set_job_name(print,ptr); | ||
| 120 | - g_free(ptr); | ||
| 121 | -*/ | 164 | + attr = (const gchar *) g_object_get_data(G_OBJECT(action),"jobname"); |
| 165 | + if(attr) | ||
| 166 | + { | ||
| 167 | + gtk_print_operation_set_job_name(print,attr); | ||
| 168 | + } | ||
| 169 | + else | ||
| 170 | + { | ||
| 171 | + gchar *ptr = g_strconcat(PACKAGE_NAME,".",gtk_action_get_name(action),NULL); | ||
| 172 | + gtk_print_operation_set_job_name(print,ptr); | ||
| 173 | + g_free(ptr); | ||
| 174 | + } | ||
| 122 | 175 | ||
| 123 | gtk_print_operation_set_custom_tab_label(print,_( "Style" )); | 176 | gtk_print_operation_set_custom_tab_label(print,_( "Style" )); |
| 124 | 177 | ||
| 125 | // gtk_print_operation_set_show_progress(print,TRUE); | 178 | // gtk_print_operation_set_show_progress(print,TRUE); |
| 126 | 179 | ||
| 127 | // Common signals | 180 | // Common signals |
| 128 | - g_signal_connect(print,"begin_print",G_CALLBACK(begin_print),info); | ||
| 129 | - g_signal_connect(print,"draw_page",G_CALLBACK(draw_page),info); | ||
| 130 | - g_signal_connect(print,"done",G_CALLBACK(done),info); | ||
| 131 | - g_signal_connect(print,"create-custom-widget",G_CALLBACK(create_custom_widget), info); | ||
| 132 | - g_signal_connect(print,"custom-widget-apply",G_CALLBACK(custom_widget_apply), info); | 181 | + g_signal_connect(print,"done",G_CALLBACK(done),*info); |
| 182 | + g_signal_connect(print,"create-custom-widget",G_CALLBACK(create_custom_widget), *info); | ||
| 183 | + g_signal_connect(print,"custom-widget-apply",G_CALLBACK(custom_widget_apply), *info); | ||
| 133 | 184 | ||
| 134 | // Finish settings | 185 | // Finish settings |
| 135 | // gtk_print_operation_set_print_settings(print,settings); | 186 | // gtk_print_operation_set_print_settings(print,settings); |
| @@ -140,10 +191,14 @@ | @@ -140,10 +191,14 @@ | ||
| 140 | 191 | ||
| 141 | void print_all_action(GtkAction *action, GtkWidget *widget) | 192 | void print_all_action(GtkAction *action, GtkWidget *widget) |
| 142 | { | 193 | { |
| 143 | - GtkPrintOperation *print = begin_print_operation(action,widget); | 194 | + PRINT_INFO * info = NULL; |
| 195 | + GtkPrintOperation * print = begin_print_operation(action,widget,&info); | ||
| 144 | 196 | ||
| 145 | trace("Action %s activated on widget %p print=%p",gtk_action_get_name(action),widget,print); | 197 | trace("Action %s activated on widget %p print=%p",gtk_action_get_name(action),widget,print); |
| 146 | 198 | ||
| 199 | + g_signal_connect(print,"begin_print",G_CALLBACK(begin_print_all),info); | ||
| 200 | + g_signal_connect(print,"draw_page",G_CALLBACK(draw_page),info); | ||
| 201 | + | ||
| 147 | // Run Print dialog | 202 | // Run Print dialog |
| 148 | gtk_print_operation_run(print,GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,GTK_WINDOW(gtk_widget_get_toplevel(widget)),NULL); | 203 | gtk_print_operation_run(print,GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,GTK_WINDOW(gtk_widget_get_toplevel(widget)),NULL); |
| 149 | 204 |