Commit d144f89f7f6708e451ae0f303446044b190077e1
1 parent
84d8d202
Exists in
master
and in
1 other branch
Updating print dialog.
Showing
3 changed files
with
51 additions
and
18 deletions
Show diff stats
src/dialogs/print/print.c
... | ... | @@ -136,14 +136,23 @@ |
136 | 136 | |
137 | 137 | V3270PrintOperation * operation = GTK_V3270_PRINT_OPERATION(object); |
138 | 138 | |
139 | - if(operation->contents.text) | |
140 | - g_strfreev(operation->contents.text); | |
141 | - | |
142 | 139 | if(operation->font.info.scaled) |
143 | 140 | cairo_scaled_font_destroy(operation->font.info.scaled); |
144 | 141 | |
145 | 142 | g_free(operation->font.name); |
146 | 143 | |
144 | + if(operation->contents.text) | |
145 | + { | |
146 | + size_t row; | |
147 | + | |
148 | + for(row = 0; operation->contents.text[row]; row++) | |
149 | + { | |
150 | + g_free(operation->contents.text[row]); | |
151 | + } | |
152 | + g_free(operation->contents.text); | |
153 | + | |
154 | + } | |
155 | + | |
147 | 156 | } |
148 | 157 | |
149 | 158 | static void V3270PrintOperation_class_init(V3270PrintOperationClass *klass) |
... | ... | @@ -191,7 +200,7 @@ V3270PrintOperation * v3270_print_operation_new(GtkWidget *widget, LIB3270_PRINT |
191 | 200 | operation->widget = GTK_V3270(widget); |
192 | 201 | operation->session = v3270_get_session(widget); |
193 | 202 | |
194 | - V3270PrintOperation_set_mode(operation, mode); | |
203 | + V3270PrintOperation_set_text_by_mode(operation, mode); | |
195 | 204 | |
196 | 205 | return operation; |
197 | 206 | } |
... | ... | @@ -223,16 +232,33 @@ V3270PrintOperation * v3270_print_operation_new(GtkWidget *widget, LIB3270_PRINT |
223 | 232 | v3270_print(widget,LIB3270_PRINT_COPY); |
224 | 233 | } |
225 | 234 | |
226 | - void V3270PrintOperation_set_mode(V3270PrintOperation * operation, LIB3270_PRINT_MODE mode) | |
235 | + void V3270PrintOperation_set_text_by_mode(V3270PrintOperation * operation, LIB3270_PRINT_MODE mode) | |
227 | 236 | { |
228 | 237 | operation->mode = mode; |
229 | 238 | |
230 | - // Text rectangle (in characters). | |
231 | 239 | switch(mode) |
232 | 240 | { |
233 | 241 | case LIB3270_PRINT_ALL: |
234 | - operation->contents.height = lib3270_get_height(operation->session); | |
235 | - operation->contents.width = lib3270_get_width(operation->session); | |
242 | + { | |
243 | + size_t row, col; | |
244 | + int baddr = 0; | |
245 | + column * text; | |
246 | + | |
247 | + operation->contents.height = lib3270_get_height(operation->session); | |
248 | + operation->contents.width = lib3270_get_width(operation->session); | |
249 | + | |
250 | + operation->contents.text = g_new0(column *, operation->contents.height+1); | |
251 | + | |
252 | + for(row = 0; row < operation->contents.height; row++) | |
253 | + { | |
254 | + operation->contents.text[row] = text = g_new0(column, operation->contents.width); | |
255 | + for(col = 0; col < operation->contents.width; col++) | |
256 | + { | |
257 | + lib3270_get_element(operation->session,baddr++,&text[col].c,&text[col].attr); | |
258 | + } | |
259 | + } | |
260 | + | |
261 | + } | |
236 | 262 | break; |
237 | 263 | |
238 | 264 | case LIB3270_PRINT_SELECTED: |
... | ... | @@ -260,28 +286,29 @@ V3270PrintOperation * v3270_print_operation_new(GtkWidget *widget, LIB3270_PRINT |
260 | 286 | } |
261 | 287 | } |
262 | 288 | |
263 | - operation->contents.height = rect.height; | |
264 | - operation->contents.width = rect.width; | |
289 | + operation->contents.height = rect.height - rect.y; | |
290 | + operation->contents.width = rect.width - rect.x; | |
265 | 291 | |
266 | 292 | } |
267 | 293 | break; |
268 | 294 | |
269 | 295 | case LIB3270_PRINT_COPY: |
270 | 296 | { |
271 | - lib3270_autoptr(char) text = v3270_get_copy(GTK_WIDGET(operation->widget)); | |
272 | - if(text) | |
297 | + lib3270_autoptr(char) copy = v3270_get_copy(GTK_WIDGET(operation->widget)); | |
298 | + if(copy) | |
273 | 299 | { |
274 | 300 | size_t r; |
275 | - | |
276 | - operation->contents.text = g_strsplit(text,"\n",-1); | |
277 | - operation->contents.height = g_strv_length(operation->contents.text); | |
301 | + gchar ** text = g_strsplit(copy,"\n",-1); | |
302 | + operation->contents.height = g_strv_length(text); | |
278 | 303 | operation->contents.width = 0; |
279 | 304 | |
280 | 305 | for(r=0;r < operation->contents.height;r++) |
281 | 306 | { |
282 | - operation->contents.width = MAX(operation->contents.width,strlen(operation->contents.text[r])); | |
307 | + operation->contents.width = MAX(operation->contents.width,strlen(text[r])); | |
283 | 308 | } |
284 | 309 | |
310 | + g_strfreev(text); | |
311 | + | |
285 | 312 | } |
286 | 313 | } |
287 | 314 | break; | ... | ... |
src/dialogs/print/private.h
... | ... | @@ -40,6 +40,12 @@ |
40 | 40 | |
41 | 41 | }; |
42 | 42 | |
43 | + typedef struct _column | |
44 | + { | |
45 | + unsigned char c; | |
46 | + unsigned short attr; | |
47 | + } column; | |
48 | + | |
43 | 49 | struct _V3270PrintOperation |
44 | 50 | { |
45 | 51 | GtkPrintOperation parent; |
... | ... | @@ -55,7 +61,7 @@ |
55 | 61 | { |
56 | 62 | size_t width; ///< @brief Width of the contents (in columns); |
57 | 63 | size_t height; ///< @brief Height of the contents (in rows); |
58 | - gchar **text; ///< @brief Text contents; | |
64 | + column **text; ///< @brief Report contents. | |
59 | 65 | } contents; |
60 | 66 | |
61 | 67 | struct | ... | ... |
src/include/v3270/print.h
... | ... | @@ -52,7 +52,7 @@ |
52 | 52 | /*--[ Prototipes ]-----------------------------------------------------------------------------------*/ |
53 | 53 | |
54 | 54 | LIB3270_EXPORT V3270PrintOperation * v3270_print_operation_new(GtkWidget *widget, LIB3270_PRINT_MODE mode); |
55 | - LIB3270_EXPORT void V3270PrintOperation_set_mode(V3270PrintOperation * operation, LIB3270_PRINT_MODE mode); | |
55 | + LIB3270_EXPORT void V3270PrintOperation_set_text_by_mode(V3270PrintOperation * operation, LIB3270_PRINT_MODE mode); | |
56 | 56 | |
57 | 57 | LIB3270_EXPORT GtkWidget * v3270_font_selection_new(const gchar *fontname); |
58 | 58 | ... | ... |