2 #define MUIMASTER_YES_INLINE_STDARG
6 #define AROS_ALMOST_COMPATIBLE
7 #include <proto/muimaster.h>
8 #include <libraries/mui.h>
10 #include <proto/exec.h>
11 #include <intuition/intuition.h>
12 #include <graphics/gfx.h>
13 #include <exec/libraries.h>
14 #include <proto/graphics.h>
15 #include <proto/intuition.h>
16 #include <proto/locale.h>
17 #include <mui/Rawimage_mcc.h>
24 #include <proto/alib.h>
25 #include <proto/utility.h>
29 #include <private/vapor/vapor.h>
31 #include "poppler_printer.h"
33 #include "pagenumberclass.h"
34 #include "arrowstring_class.h"
35 #include "system/functions.h"
39 #include "printer_image.h"
54 Object
*chkAutorotatescale
;
65 Object
*cycPageScaling
;
66 Object
*cycPagesPerSheet
;
67 Object
*cycPagesOrder
;
83 void kprintf(char *fmt
,...);
85 static STRPTR oddeven
[4] = {NULL
};
86 static STRPTR scaling_modes
[4] = {NULL
};
87 static STRPTR pages_per_sheet
[] = {"2", "4", "6", "9", "Custom", NULL
};
88 static STRPTR pages_order
[10] = {NULL
};
89 static char *ps_levels
[] = {"Level 2", "Level 3", NULL
};
92 int pages_per_sheet_table
[] = {2, 4, 6, 9, 99};
96 Object
*grpPage
, *gauge
, *strOutput
, *sldFirst
, *sldLast
, *cycOddEven
, *btnPrint
, *btnCancel
,
97 *btnCancel2
, *txtStatus
, *chkPS
, *btnPrefs
, *chkAutorotatescale
;
98 Object
*right_group
, *strNumbers
, *grpRight
, *grpLeft
, *chkReverse
,
99 *strCopies
, *chkCollate
, *grpCollate
, *btnReset
, *cycPSVersion
, *grpPSOutput
;
100 Object
*second_page
, *cycPageScaling
, *grpPageHandling
, *grpDriver
, *grpPagesPerSheet1
,
101 *grpPagesPerSheet2
, *grpPagesOrder1
, *grpPagesOrder2
, *cycPagesPerSheet
, *cycPagesOrder
;
104 oddeven
[0] = (STRPTR
) LOCSTR(MSG_PRINTER_ODDEVEN
);
105 oddeven
[1] = (STRPTR
) LOCSTR(MSG_PRINTER_ODD
);
106 oddeven
[2] = (STRPTR
) LOCSTR(MSG_PRINTER_EVEN
);
107 scaling_modes
[0] = (STRPTR
) LOCSTR(MSG_PRINTER_NONE
);
108 scaling_modes
[1] = (STRPTR
) LOCSTR(MSG_PRINTER_BEST
);
109 scaling_modes
[2] = (STRPTR
) LOCSTR(MSG_PRINTER_MULTIPLE
);
110 pages_per_sheet
[4] = (STRPTR
) LOCSTR(MSG_PRINTER_CUSTOM
);
111 pages_order
[0] = (STRPTR
) LOCSTR(MSG_PRINTER_HORIZONTAL_VERTICAL
);
112 pages_order
[1] = (STRPTR
) LOCSTR(MSG_PRINTER_HORIZONTAL_VERTICALREVERSED
);
113 pages_order
[2] = (STRPTR
) LOCSTR(MSG_PRINTER_HORIZONTALREVERSED_VERTICAL
) ;
114 pages_order
[3] = (STRPTR
) LOCSTR(MSG_PRINTER_HORIZONTALREVERSED_VERTICAL_REVERSED
);
115 pages_order
[4] = (STRPTR
) LOCSTR(MSG_PRINTER_VERTICAL_HORIZONTAL
);
116 pages_order
[5] = (STRPTR
) LOCSTR(MSG_PRINTER_VERTICALREVERSED_HORIZONTAL
);
117 pages_order
[6] = (STRPTR
) LOCSTR(MSG_PRINTER_VERTICAL_HORIZONTALREVERSED
) ;
118 pages_order
[7] = (STRPTR
) LOCSTR(MSG_PRINTER_VERTICAL_REVERSED_HORIZONTALREVERSED
);
120 second_page
= VGroup
,
121 Child
, (IPTR
) HVSpace
,
122 Child
, (IPTR
) HGroup
,
123 Child
, (IPTR
) HSpace(0),
124 Child
, (IPTR
) RawimageObject
, MUIA_Rawimage_Data
, (IPTR
) Printer
, End
,
126 //MUI_NewObject("Dtpic.mui",MUIA_Dtpic_Name, "progdir:printer.png", End,
127 Child
, (IPTR
) HSpace(0),
129 Child
, (IPTR
) HVSpace
,
130 Child
, (IPTR
) HGroup
,
131 Child
, (IPTR
) HSpace(0),
132 Child
, (IPTR
) (gauge
= GaugeObject
,
133 MUIA_Gauge_Horiz
, TRUE
,
134 MUIA_Frame
, MUIV_Frame_Gauge
,
135 MUIA_Gauge_InfoText
, (IPTR
) " ",
137 Child
, (IPTR
) HSpace(0),
139 Child
, (IPTR
) HGroup
,
140 Child
, (IPTR
) HSpace(0),
141 Child
, (IPTR
) (btnCancel
= SimpleButton(LOCSTR(MSG_PRINTER_ABORT
))),
142 Child
, (IPTR
) HSpace(0),
144 Child
, (IPTR
) HVSpace
,
147 right_group
= MUI_NewObject(MUIC_Group
,
148 MUIA_Group_Child
, MUI_NewObject(MUIC_Group
,
149 MUIA_Frame
, MUIV_Frame_Group
,
150 MUIA_Background
, MUII_GroupBack
,
151 MUIA_FrameTitle
, (IPTR
) LOCSTR(MSG_PRINTER_RANGE
),
152 MUIA_Group_Child
, MUI_NewObject(MUIC_Group
,
153 MUIA_Group_Columns
, 2,
154 MUIA_Group_Child
, MUI_NewObject(MUIC_Text
,
155 MUIA_Text_Contents
, (IPTR
) LOCSTR(MSG_PRINTER_PAGES
),
156 MUIA_Text_SetMax
, FALSE
,
157 MUIA_Text_PreParse
, (IPTR
) "\33r",
158 MUIA_Frame
, MUIV_Frame_Button
,
159 MUIA_FramePhantomHoriz
, TRUE
,
162 MUIA_Group_Child
, cycOddEven
= MUI_NewObject(MUIC_Cycle
,
163 MUIA_Cycle_Entries
, oddeven
,
165 MUIA_Group_Child
, (grpLeft
= MUI_NewObject(MUIC_Group
,
167 MUIA_Group_Child
, MUI_NewObject(MUIC_Group
,
168 MUIA_Group_Child
, MUI_NewObject(MUIC_Group
,
169 MUIA_Frame
, MUIV_Frame_Slider
,
170 MUIA_FramePhantomHoriz
, TRUE
,
171 MUIA_Group_Child
, MUI_NewObject(MUIC_Text
,
172 MUIA_Text_Contents
, (IPTR
) LOCSTR(MSG_PRINTER_FIRSTPAGE
),
173 MUIA_Text_PreParse
, (IPTR
) "\33r",
174 #if !defined(__AROS__)
176 MUIA_Frame
, MUIV_Frame_SliderKnob
,
178 MUIA_FramePhantomHoriz
, TRUE
,
181 MUIA_Group_Child
, MUI_NewObject(MUIC_Group
,
182 MUIA_Frame
, MUIV_Frame_Slider
,
183 MUIA_FramePhantomHoriz
, TRUE
,
184 MUIA_Group_Child
, MUI_NewObject(MUIC_Text
,
185 MUIA_Text_Contents
, (IPTR
) LOCSTR(MSG_PRINTER_LASTPAGE
),
186 MUIA_Text_PreParse
, (IPTR
) "\33r",
187 #if !defined(__AROS__)
189 MUIA_Frame
, MUIV_Frame_SliderKnob
,
191 MUIA_FramePhantomHoriz
, TRUE
,
195 MUIA_Group_Child
, MUI_NewObject(MUIC_Group
,
196 MUIA_Group_Child
, MUI_NewObject(MUIC_Text
,
197 MUIA_Text_Contents
, (IPTR
) LOCSTR(MSG_PRINTER_MANUAL
),
198 MUIA_Text_PreParse
, (IPTR
) "\33r",
199 MUIA_Frame
, MUIV_Frame_String
,
200 MUIA_FramePhantomHoriz
, TRUE
,
202 MUIA_Group_Child
, MUI_NewObject(MUIC_Rectangle
,
206 MUIA_Group_Child
, (grpRight
= MUI_NewObject(MUIC_Group
,
207 MUIA_Group_Child
, MUI_NewObject(MUIC_Group
,
208 MUIA_Group_Child
, sldFirst
= MUI_NewObject(MUIC_Slider
,
210 MUIA_Slider_Max
, 1, // will be corrected when opened
211 MUIA_Frame
, MUIV_Frame_Slider
,
213 MUIA_Group_Child
, sldLast
= MUI_NewObject(MUIC_Slider
,
215 MUIA_Slider_Max
, 1, // will be corrected when opened
216 MUIA_Frame
, MUIV_Frame_Slider
,
219 MUIA_Group_Child
, HGroup
,
220 Child
, (IPTR
) MUI_NewObject(MUIC_Group
,
221 MUIA_Group_Child
, strNumbers
= VPDFNumberGenerator
, End
,
223 Child
, (IPTR
) (btnReset
= TextObject
,
225 //MUIA_ShowMe, FALSE,
226 MUIA_Font
, MUIV_Font_Button
,
227 MUIA_Text_Contents
, (IPTR
) LOCSTR(MSG_PRINTER_RESET
),
228 MUIA_Text_PreParse
, (IPTR
) "\33c",
229 MUIA_InputMode
, MUIV_InputMode_RelVerify
,
230 MUIA_Background
, MUII_ButtonBack
,
231 MUIA_Text_SetMax
, TRUE
,
237 Child
, (IPTR
) HGroup
,
238 Child
, (IPTR
) (chkReverse
= CheckMark(FALSE
)),
239 Child
, (IPTR
) (TextObject
, MUIA_Text_Contents
, (IPTR
) LOCSTR(MSG_PRINTER_REVERSE
), End
),
244 grpPageHandling
= VGroup
,
245 MUIA_Frame
, MUIV_Frame_Group
,
246 MUIA_Background
, MUII_GroupBack
,
247 MUIA_FrameTitle
, (IPTR
) LOCSTR(MSG_PRINTER_ORIENTATION
),
248 Child
, (IPTR
) ColGroup(2),
249 Child
, (IPTR
) Label(LOCSTR(MSG_PRINTER_COPIES
)),
250 Child
, (IPTR
) HGroup
,
251 Child
, (IPTR
) (strCopies
= ArrowStringObject
,
252 MA_ArrowString_Min
, 1,
254 Child
, (IPTR
) HVSpace
,
255 Child
, (IPTR
) (grpCollate
= HGroup
,
257 Child
, (IPTR
) (chkCollate
= CheckMark(TRUE
)),
258 Child
, (IPTR
) MUI_NewObject(MUIC_Text
,
259 MUIA_Text_Contents
, (IPTR
) LOCSTR(MSG_PRINTER_COLLATE
),
260 MUIA_Text_SetMax
, TRUE
,
264 Child
, (IPTR
) Label(LOCSTR(MSG_PRINTER_SCALING
)),
265 Child
, (IPTR
) (cycPageScaling
= CycleObject
,
266 MUIA_Cycle_Entries
, (IPTR
) scaling_modes
,
268 Child
, (IPTR
) (grpPagesPerSheet1
= PageGroup
,
270 Child
, (IPTR
) Label(" "),
271 Child
, (IPTR
) Label(LOCSTR(MSG_PRINTER_PAGESPERSHEET
)),
273 Child
, (IPTR
) (grpPagesPerSheet2
= PageGroup
,
275 Child
, (IPTR
) Label(" "),
276 Child
, (IPTR
) (HGroup
,
277 Child
, (IPTR
) (cycPagesPerSheet
= CycleObject
,
278 MUIA_Cycle_Entries
, (IPTR
) pages_per_sheet
,
280 Child
, (IPTR
) (free_grp
= HGroup
,
282 Child
, (IPTR
) (StringObject
,
283 MUIA_String_Accept
, (IPTR
) "0123456789",
284 MUIA_Frame
, MUIV_Frame_String
,
285 MUIA_String_MaxLen
, 3,
286 MUIA_FixWidthTxt
, (IPTR
) "12",
288 Child
, (IPTR
) (MUI_NewObject(MUIC_Text
,
289 MUIA_Text_Contents
, (IPTR
) "/",
290 MUIA_Text_SetMax
, TRUE
,
292 Child
, (IPTR
) (StringObject
,
293 MUIA_String_Accept
, (IPTR
) "0123456789",
294 MUIA_Frame
, MUIV_Frame_String
,
295 MUIA_String_MaxLen
, 3,
296 MUIA_FixWidthTxt
, (IPTR
) "12",
302 Child
, (IPTR
) (grpPagesOrder1
= PageGroup
,
304 Child
, (IPTR
) Label(" "),
305 Child
, (IPTR
) Label(LOCSTR(MSG_PRINTER_ORDER
)),
307 Child
, (IPTR
) (grpPagesOrder2
= PageGroup
,
309 Child
, (IPTR
) Label(" "),
310 Child
, (IPTR
) (cycPagesOrder
= CycleObject
,
311 MUIA_Cycle_Entries
, (IPTR
) pages_order
,
315 Child
, (IPTR
) HVSpace
,
316 Child
, (IPTR
) HGroup
,
317 Child
, (IPTR
) (chkAutorotatescale
= CheckMark(TRUE
)),
318 Child
, (IPTR
) TextObject
,
319 MUIA_Text_Contents
, (IPTR
) LOCSTR(MSG_PRINTER_AUTOROTATE
),
326 MUIA_Frame
, MUIV_Frame_Group
,
327 MUIA_Background
, MUII_GroupBack
,
328 MUIA_FrameTitle
, (IPTR
) LOCSTR(MSG_PRINTER_DRIVER
),
329 Child
, (IPTR
) (btnPrefs
= SimpleButton(LOCSTR(MSG_PRINTER_PREFERENCES
))),
330 Child
, (IPTR
) HGroup
,
331 Child
, (IPTR
) HGroup
,
333 MUIA_Frame
, MUIV_Frame_Button
,
334 MUIA_FramePhantomHoriz
, TRUE
,
335 Child
, (IPTR
) (chkPS
= CheckMark(TRUE
)),
336 Child
, (IPTR
) TextObject
,
337 MUIA_Text_Contents
, (IPTR
) "PostScript",
341 Child
, (IPTR
) (grpPSOutput
= HGroup
,
343 Child
, (IPTR
) (cycPSVersion
= MUI_NewObject(MUIC_Cycle
,
344 MUIA_Cycle_Entries
, ps_levels
,
346 Child
, (IPTR
) HVSpace
,
347 Child
, (IPTR
) Label(LOCSTR(MSG_PRINTER_OUTPUT
)),
348 Child
, (IPTR
) (strOutput
= StringObject
,
349 MUIA_Frame
, MUIV_Frame_String
,
350 MUIA_String_Contents
, (IPTR
) "PS:",
351 MUIA_String_MaxLen
, 512,
358 obj
= (Object
*) DoSuperNew(cl
, obj
,
359 MUIA_Window_Title
, LOCSTR(MSG_PRINTER_WINTITLE
),
360 // MUIA_Window_Width, MUIV_Window_Width_Screen(50),
361 // MUIA_Window_Height, MUIV_Window_Height_Screen(50),
362 MUIA_Window_ID
, MAKE_ID('P','R','T','N'),
363 MUIA_Window_AppWindow
, FALSE
,
364 MUIA_Window_RootObject
, grpPage
= PageGroup
,
365 Child
, (IPTR
) VGroup
,
366 Child
, (IPTR
) HGroup
,
367 Child
, (IPTR
) VGroup
,
368 Child
, (IPTR
) grpDriver
,
369 Child
, (IPTR
) right_group
,
371 Child
, (IPTR
) grpPageHandling
,
374 Child
, (IPTR
) HGroup
,
375 Child
, (IPTR
) (btnPrint
= SimpleButton(LOCSTR(MSG_PRINTER_PRINT
))),
376 Child
, (IPTR
) HSpace(0),
377 Child
, (IPTR
) (btnCancel2
= SimpleButton(LOCSTR(MSG_PRINTER_CANCEL
))),
380 Child
, (IPTR
) second_page
,
387 memset(data
, 0, sizeof(struct Data
));
389 data
->sldFirst
= sldFirst
;
390 data
->sldLast
= sldLast
;
391 data
->btnPrint
= btnPrint
;
392 data
->btnCancel
= btnCancel
;
393 data
->strOutput
= strOutput
;
394 data
->txtStatus
= txtStatus
;
395 data
->cycOddEven
= cycOddEven
;
397 data
->chkAutorotatescale
= chkAutorotatescale
;
398 data
->strNumbers
= strNumbers
;
399 data
->grpRight
= grpRight
;
400 data
->chkReverse
= chkReverse
;
401 data
->chkCollate
= chkCollate
;
402 data
->strCopies
= strCopies
;
403 data
->grpCollate
= grpCollate
;
404 data
->btnReset
= btnReset
;
405 data
->grpPage
= grpPage
;
406 data
->cycPSVersion
= cycPSVersion
;
408 data
->cycPageScaling
= cycPageScaling
;
409 data
->cycPagesPerSheet
= cycPagesPerSheet
;
410 data
->cycPagesOrder
= cycPagesOrder
;
413 data
->proc
= MUI_NewObject(MUIC_Process
,
414 MUIA_Process_SourceClass
, cl
,
415 MUIA_Process_SourceObject
, obj
,
416 MUIA_Process_Name
, "[VPDF]: Printing process",
417 MUIA_Process_Priority
, -1,
418 MUIA_Process_AutoLaunch
, FALSE
,
419 MUIA_Process_StackSize
, 1000000,
422 DoMethod(data
->proc
, MUIM_Process_Launch
);
424 DoMethod(btnPrint
, MUIM_Notify
, MUIA_Pressed
, FALSE
, obj
, 1, MUIM_VPDFPrinter_Start
);
425 DoMethod(btnCancel
, MUIM_Notify
, MUIA_Pressed
, FALSE
, obj
, 1, MUIM_VPDFPrinter_Stop
);
426 DoMethod(btnPrefs
, MUIM_Notify
, MUIA_Pressed
, FALSE
, obj
, 1, MUIM_VPDFPrinter_PrinterPrefs
);
427 DoMethod(chkPS
, MUIM_Notify
, MUIA_Selected
, MUIV_EveryTime
, grpPSOutput
, 3, MUIM_Set
, MUIA_ShowMe
, MUIV_TriggerValue
);
428 DoMethod(strCopies
, MUIM_Notify
, MUIA_String_Integer
, MUIV_EveryTime
, obj
, 2, MUIM_VPDFPrinter_HideCollate
, MUIV_TriggerValue
);
430 DoMethod(cycPageScaling
, MUIM_Notify
, MUIA_Cycle_Active
, 2, grpPagesPerSheet1
, 3, MUIM_Set
, MUIA_Group_ActivePage
, 1);
431 DoMethod(cycPageScaling
, MUIM_Notify
, MUIA_Cycle_Active
, 2, grpPagesPerSheet2
, 3, MUIM_Set
, MUIA_Group_ActivePage
, 1);
432 DoMethod(cycPageScaling
, MUIM_Notify
, MUIA_Cycle_Active
, 0, grpPagesPerSheet1
, 3, MUIM_Set
, MUIA_Group_ActivePage
, 0);
433 DoMethod(cycPageScaling
, MUIM_Notify
, MUIA_Cycle_Active
, 0, grpPagesPerSheet2
, 3, MUIM_Set
, MUIA_Group_ActivePage
, 0);
434 DoMethod(cycPageScaling
, MUIM_Notify
, MUIA_Cycle_Active
, 1, grpPagesPerSheet1
, 3, MUIM_Set
, MUIA_Group_ActivePage
, 0);
435 DoMethod(cycPageScaling
, MUIM_Notify
, MUIA_Cycle_Active
, 1, grpPagesPerSheet2
, 3, MUIM_Set
, MUIA_Group_ActivePage
, 0);
436 DoMethod(cycPageScaling
, MUIM_Notify
, MUIA_Cycle_Active
, 2, grpPagesOrder1
, 3, MUIM_Set
, MUIA_Group_ActivePage
, 1);
437 DoMethod(cycPageScaling
, MUIM_Notify
, MUIA_Cycle_Active
, 2, grpPagesOrder2
, 3, MUIM_Set
, MUIA_Group_ActivePage
, 1);
438 DoMethod(cycPageScaling
, MUIM_Notify
, MUIA_Cycle_Active
, 0, grpPagesOrder2
, 3, MUIM_Set
, MUIA_Group_ActivePage
, 0);
439 DoMethod(cycPageScaling
, MUIM_Notify
, MUIA_Cycle_Active
, 0, grpPagesOrder1
, 3, MUIM_Set
, MUIA_Group_ActivePage
, 0);
440 DoMethod(cycPageScaling
, MUIM_Notify
, MUIA_Cycle_Active
, 1, grpPagesOrder2
, 3, MUIM_Set
, MUIA_Group_ActivePage
, 0);
441 DoMethod(cycPageScaling
, MUIM_Notify
, MUIA_Cycle_Active
, 1, grpPagesOrder1
, 3, MUIM_Set
, MUIA_Group_ActivePage
, 0);
443 DoMethod(cycPagesPerSheet
, MUIM_Notify
, MUIA_Cycle_Active
, 4, free_grp
, 3, MUIM_Set
, MUIA_ShowMe
, TRUE
);
444 DoMethod(cycPagesPerSheet
, MUIM_Notify
, MUIA_Cycle_Active
, 1, free_grp
, 3, MUIM_Set
, MUIA_ShowMe
, FALSE
);
445 DoMethod(cycPagesPerSheet
, MUIM_Notify
, MUIA_Cycle_Active
, 0, free_grp
, 3, MUIM_Set
, MUIA_ShowMe
, FALSE
);
446 DoMethod(cycPagesPerSheet
, MUIM_Notify
, MUIA_Cycle_Active
, 2, free_grp
, 3, MUIM_Set
, MUIA_ShowMe
, FALSE
);
447 DoMethod(cycPagesPerSheet
, MUIM_Notify
, MUIA_Cycle_Active
, 3, free_grp
, 3, MUIM_Set
, MUIA_ShowMe
, FALSE
);
449 DoMethod(sldFirst
, MUIM_Notify
, MUIA_Slider_Level
, MUIV_EveryTime
, data
->strNumbers
, 3, MUIM_Set
, MUIA_VPDFNumberGeneratorPageStart
, MUIV_TriggerValue
);
450 DoMethod(sldLast
, MUIM_Notify
, MUIA_Slider_Level
, MUIV_EveryTime
, data
->strNumbers
, 3, MUIM_Set
, MUIA_VPDFNumberGeneratorPageEnd
, MUIV_TriggerValue
);
451 DoMethod(btnReset
, MUIM_Notify
, MUIA_Pressed
, FALSE
, data
->sldFirst
, 3, MUIM_Set
, MUIA_Slider_Level
, 1);
453 DoMethod(obj
, MUIM_Notify
, MUIA_Window_CloseRequest
, MUIV_EveryTime
, obj
, 1, MUIM_VPDFPrinter_Close
);
454 DoMethod(btnCancel2
, MUIM_Notify
, MUIA_Pressed
, FALSE
, obj
, 1, MUIM_VPDFPrinter_Close
);
456 DoMethod(data
->chkPS
, MUIM_Notify
, MUIA_Selected
, MUIV_EveryTime
, obj
, 3, MUIM_Set
, MUIA_VPDFPrinter_PrintingMode
, MUIV_TriggerValue
);
457 DoMethod(data
->strOutput
, MUIM_Notify
, MUIA_String_Contents
, MUIV_EveryTime
, obj
, 3, MUIM_Set
, MUIA_VPDFPrinter_PSName
, MUIV_TriggerValue
);
458 DoMethod(data
->cycPSVersion
, MUIM_Notify
, MUIA_Cycle_Active
, MUIV_EveryTime
, obj
, 3, MUIM_Set
, MUIA_VPDFPrinter_PSMode
, MUIV_TriggerValue
);
471 MUI_DisposeObject(data
->proc
);
477 DEFMMETHOD(VPDFPrinter_PrintDocument
)
482 set(data
->sldFirst
, MUIA_Slider_Max
, pdfGetPagesNum(msg
->doc
));
483 set(data
->sldLast
, MUIA_Slider_Max
, pdfGetPagesNum(msg
->doc
));
484 set(data
->sldLast
, MUIA_Slider_Level
, pdfGetPagesNum(msg
->doc
));
486 set(data
->strNumbers
, MUIA_VPDFNumberGeneratorPageMax
, pdfGetPagesNum(msg
->doc
));
487 set(data
->strNumbers
, MUIA_VPDFNumberGeneratorPageEnd
, pdfGetPagesNum(msg
->doc
));
488 data
->max
= pdfGetPagesNum(msg
->doc
);
489 data
->doc
= msg
->doc
;
492 DoMethod(data
->btnReset
, MUIM_Notify
, MUIA_Pressed
, FALSE
, data
->sldLast
, 3, MUIM_Set
, MUIA_Slider_Level
, data
->max
);
493 set(obj
, MUIA_Window_Open
, TRUE
);
499 DEFMMETHOD(VPDFPrinter_Start
)
502 char params
[512], args
[512], arg
[32];
504 data
->pj
.last
= pdfGetPagesNum(data
->doc
);
506 data
->pj
.mode
= !xget(data
->chkPS
, MUIA_Selected
); // PS or Turboprint
508 if (data
->pj
.mode
==1)
511 data
->pj
.mode
= xget(data
->cycPSVersion
, MUIA_Cycle_Active
);
513 data
->pj
.autorotatescale
= xget(data
->chkAutorotatescale
, MUIA_Radio_Active
);
515 data
->pj
.reverse
= xget(data
->chkReverse
, MUIA_Selected
);
516 data
->pj
.step
= xget(data
->cycOddEven
, MUIA_Cycle_Active
);
519 data
->pj
.total_pages
= DoMethod(data
->strNumbers
, MUIM_VPDFNumberGeneratorFirst
, data
->pj
.reverse
);
520 D(kprintf("total pages: %d", data
->pj
.total_pages
));
522 data
->pj
.collate
= xget(data
->chkCollate
, MUIA_Selected
);
523 data
->pj
.copies
= xget(data
->strCopies
, MUIA_String_Integer
);
525 if (data
->pj
.copies
==0)
528 set(data
->strCopies
, MUIA_String_Integer
, 1);
531 if (data
->pj
.collate
)
532 data
->pj
.total_pages
*= data
->pj
.copies
;
534 data
->pj
.page_scaling
= xget(data
->cycPageScaling
, MUIA_Cycle_Active
);
535 data
->pj
.pages_per_sheet
= xget(data
->cycPagesPerSheet
, MUIA_Cycle_Active
);
536 data
->pj
.pages_per_sheet
= pages_per_sheet_table
[data
->pj
.pages_per_sheet
];
537 data
->pj
.pages_order
= xget(data
->cycPagesOrder
, MUIA_Cycle_Active
);
539 set (data
->gauge
, MUIA_Gauge_Max
, data
->pj
.total_pages
);
540 strncpy(data
->pj
.output
, (char*)xget(data
->strOutput
, MUIA_String_Contents
), sizeof(data
->pj
.output
));
543 switch (data
->pj
.page_scaling
)
546 strcat(args
, "fit-to-page ");
549 sprintf(arg
, "number-up=%d ", data
->pj
.pages_per_sheet
);
556 sprintf(params
, "COPIES=%d ARGS=/%s/ FORMAT=PS", data
->pj
.copies
, args
);
557 strcat(data
->pj
.output
, params
);
558 set(data
->grpPage
, MUIA_Group_ActivePage
, 1);
560 // assuming printer thread is in ready status siting on Wait()
561 DoMethod(data
->proc
, MUIM_Process_Signal
, SIGBREAKF_CTRL_D
);
566 DEFMMETHOD(VPDFPrinter_Stop
)
570 data
->quit
= TRUE
; // this will signal printing thread which will 'recall' this method later
575 DoMethod(obj
, MUIM_VPDFPrinter_Done
);
581 DEFMMETHOD(VPDFPrinter_Done
)
585 data
->printing
= FALSE
;
589 DoMethod(obj
, MUIM_VPDFPrinter_Close
);
591 set(data
->grpPage
, MUIA_Group_ActivePage
, 0);
596 DEFMMETHOD(VPDFPrinter_Close
)
603 set(obj
, MUIA_Window_Open
, FALSE
);
617 DEFMMETHOD(Process_Process
)
623 Wait(SIGBREAKF_CTRL_D
| SIGBREAKF_CTRL_C
);
625 if(data
->quit
== FALSE
)
627 int i
, j
, k
, h
, pages_no
;
628 struct printerjob
*pj
= &data
->pj
;
631 D(kprintf("started printing:%d to %d\n", pj
->first
, pj
->last
));
633 data
->printing
= TRUE
;
634 pctx
= pdfPrintInit(data
->doc
, pj
->output
, pj
->first
, pj
->last
, pj
);
641 pages_no
= 0; // for multipage mode
642 while((MUIV_VPDFNumberGeneratorEndPos
!= (i
= DoMethod(data
->strNumbers
, MUIM_VPDFNumberGeneratorNext
))) ||
643 ((pj
->page_scaling
==2 && (pages_no
))))
645 if((pj
->step
== 1) && (i
% 2 == 0)) continue;
646 if((pj
->step
== 2) && (i
% 2 == 1)) continue;
648 DoMethod(_app(data
->sldFirst
), MUIM_Application_PushMethod
, obj
, 3, MUIM_VPDFPrinter_StatusUpdate
, i
, h
);
655 pdfPrintPage(pctx
, pj
->pages
, pj
->autorotatescale
, (pj
->page_scaling
==2)?pj
->pages_per_sheet
:1);
660 } while ((k
< pj
->copies
) && !pj
->collate
);
662 if(data
->quit
|| (i
==MUIV_VPDFNumberGeneratorEndPos
))
671 DoMethod(data
->strNumbers
, MUIM_VPDFNumberGeneratorFirst
, pj
->reverse
);
673 while((j
<pj
->copies
) && pj
->collate
);
677 DoMethod(_app(data
->sldFirst
), MUIM_Application_PushMethod
, obj
, 1, MUIM_VPDFPrinter_Error
);
682 D(kprintf("printing done...\n"));
683 DoMethod(_app(data
->sldFirst
), MUIM_Application_PushMethod
, obj
, 1, MUIM_VPDFPrinter_Done
);
688 data
->printing
= FALSE
;
694 DEFMMETHOD(VPDFPrinter_StatusUpdate
)
698 snprintf(data
->status
, sizeof(data
->status
), "Printing page %ld...", (unsigned long)msg
->page_number
);
699 D(kprintf("%s\n", data
->status
));
700 set(data
->gauge
, MUIA_Gauge_Current
, msg
->actual_page
);
701 set(data
->gauge
, MUIA_Gauge_InfoText
, data
->status
);
707 DEFMMETHOD(VPDFPrinter_PrinterPrefs
)
710 if (xget(data
->chkPS
, MUIA_Selected
))
711 SystemTagList("MOSSYS:Prefs/Preferences MOSSYS:Prefs/MPrefs/Printers.mprefs", TAG_DONE
);
713 SystemTagList("MOSSYS:Prefs/Preferences MOSSYS:Prefs/MPrefs/Printer.mprefs", TAG_DONE
);
718 DEFMMETHOD(VPDFPrinter_HideCollate
)
722 if (msg
->copies
== 1)
724 set(data
->grpCollate
, MUIA_ShowMe
, FALSE
);
728 set(data
->grpCollate
, MUIA_ShowMe
, TRUE
);
741 case MUIA_VPDFPrinter_PSName
:
743 set(data
->strOutput
, MUIA_String_Contents
, tag
->ti_Data
);
746 case MUIA_VPDFPrinter_PrintingMode
:
748 set(data
->chkPS
, MUIA_Selected
, tag
->ti_Data
);
751 case MUIA_VPDFPrinter_PSMode
:
753 set(data
->cycPSVersion
, MUIA_Cycle_Active
, tag
->ti_Data
);
762 DEFMMETHOD(VPDFPrinter_Error
)
765 MUI_Request(_app(data
->sldFirst
), _window(obj
), 0, "VPDF Print Document Error", "OK", "Failed to initialize output device", NULL
);
773 DECMMETHOD(VPDFPrinter_PrintDocument
)
774 DECMMETHOD(VPDFPrinter_Start
)
775 DECMMETHOD(VPDFPrinter_Stop
)
776 DECMMETHOD(VPDFPrinter_Done
)
777 DECMMETHOD(VPDFPrinter_Close
)
778 DECMMETHOD(VPDFPrinter_StatusUpdate
)
779 DECMMETHOD(VPDFPrinter_PrinterPrefs
)
780 DECMMETHOD(VPDFPrinter_HideCollate
)
781 DECMMETHOD(VPDFPrinter_Error
)
782 DECMMETHOD(Process_Process
)
785 DECSUBCLASS_NC(MUIC_Window
, VPDFPrinterClass
)