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 @@ |
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 | 201 | |
202 | 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 | 205 | lib3270_move_selection(GTK_V3270(widget)->host,(LIB3270_DIRECTION) g_object_get_data(G_OBJECT(action),"direction")); |
206 | 206 | } |
207 | 207 | |
208 | 208 | static void cursor_move_action(GtkAction *action, GtkWidget *widget) |
209 | 209 | { |
210 | 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 | 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 | 36 | |
37 | 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 | 48 | } PRINT_INFO; |
42 | 49 | |
43 | 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 | 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 | 84 | static void done(GtkPrintOperation *prt, GtkPrintOperationResult result, PRINT_INFO *info) |
58 | 85 | { |
59 | 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 | 94 | g_free(info); |
63 | 95 | } |
... | ... | @@ -69,28 +101,41 @@ |
69 | 101 | } |
70 | 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 | 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 | 117 | GtkWidget * container = gtk_table_new(2,2,FALSE); |
76 | 118 | GtkWidget * widget; |
77 | 119 | int f; |
78 | 120 | |
79 | 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 | 124 | gtk_misc_set_alignment(GTK_MISC(widget),0,0.5); |
83 | 125 | gtk_table_attach(GTK_TABLE(container),widget,0,1,f,f+1,GTK_FILL,GTK_FILL,0,0); |
84 | 126 | } |
85 | 127 | |
86 | 128 | // Font selection button |
87 | 129 | widget = gtk_font_button_new(); |
88 | - gtk_font_button_set_show_size(GTK_FONT_BUTTON(widget),FALSE); | |
89 | 130 | #if GTK_CHECK_VERSION(3,2,0) |
90 | 131 | gtk_font_chooser_set_filter_func(widget,filter_monospaced,0); |
91 | 132 | #endif // GTK(3,2,0) |
92 | 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 | 139 | // Color scheme dropdown |
95 | 140 | |
96 | 141 | // Show and return |
... | ... | @@ -103,33 +148,39 @@ |
103 | 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 | 153 | GtkPrintOperation * print = gtk_print_operation_new(); |
110 | 154 | // GtkPrintSettings * settings = gtk_print_settings_new(); |
111 | 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 | 161 | // Basic setup |
115 | 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 | 176 | gtk_print_operation_set_custom_tab_label(print,_( "Style" )); |
124 | 177 | |
125 | 178 | // gtk_print_operation_set_show_progress(print,TRUE); |
126 | 179 | |
127 | 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 | 185 | // Finish settings |
135 | 186 | // gtk_print_operation_set_print_settings(print,settings); |
... | ... | @@ -140,10 +191,14 @@ |
140 | 191 | |
141 | 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 | 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 | 202 | // Run Print dialog |
148 | 203 | gtk_print_operation_run(print,GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,GTK_WINDOW(gtk_widget_get_toplevel(widget)),NULL); |
149 | 204 | ... | ... |