Package: xpdf-reader Version: 3.01-9 Severity: normal Tags: patch This patch alows to print from xpdf usung user choosed print order (even/odd pages etc) Order change is possible only at printer print. It is necessary to correct module working with PS too much for print in file. So this function may be done some later:)
screenshot: http://img440.imageshack.us/img440/5018/ssxf6.png =patch --- xpdf/XPDFViewer.cc 2007-01-26 02:32:15.000000000 +0300 +++ xpdf/XPDFViewer.cc.new 2007-01-26 01:21:28.000000000 +0300 @@ -2169,7 +2169,7 @@ //------------------------------------------------------------------------ void XPDFViewer::initPrintDialog() { - Widget sep1, sep2, row, label1, label2, okBtn, cancelBtn; + Widget sep1, sep2, sep3, sep4, row, label1, label2, okBtn, cancelBtn; Arg args[20]; int n; XmString s; @@ -2294,11 +2294,105 @@ XtSetArg(args[n], XmNorientation, XmHORIZONTAL); ++n; sep2 = XmCreateSeparator(printDialog, "sep2", args, n); XtManageChild(sep2); + + //----- Print All Pages + n = 0; + XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; + XtSetArg(args[n], XmNtopWidget, sep2); ++n; + XtSetArg(args[n], XmNtopOffset, 8); ++n; + XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; + XtSetArg(args[n], XmNleftOffset, 8); ++n; + XtSetArg(args[n], XmNindicatorType, XmONE_OF_MANY); ++n; + XtSetArg(args[n], XmNset, XmSET); ++n; + s = XmStringCreateLocalized("Print all pages"); + XtSetArg(args[n], XmNlabelString, s); ++n; + printAllPages = XmCreateToggleButton(printDialog, "printAllPages", args, n); + XmStringFree(s); + XtManageChild(printAllPages); + XtAddCallback(printAllPages, XmNvalueChangedCallback, + &printAllPagesBtnCbk, (XtPointer)this); + + //----- Print Odd Pages + n = 0; + XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; + XtSetArg(args[n], XmNtopWidget, printAllPages); ++n; +// XtSetArg(args[n], XmNtopOffset, 4); ++n; + XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; + XtSetArg(args[n], XmNleftOffset, 8); ++n; + XtSetArg(args[n], XmNindicatorType, XmONE_OF_MANY); ++n; + XtSetArg(args[n], XmNset, XmUNSET); ++n; + s = XmStringCreateLocalized("Print odd pages"); + XtSetArg(args[n], XmNlabelString, s); ++n; + printOddPages = XmCreateToggleButton(printDialog, "printOddPages", args, n); + XmStringFree(s); + XtManageChild(printOddPages); + XtAddCallback(printOddPages, XmNvalueChangedCallback, + &printOddPagesBtnCbk, (XtPointer)this); + + //----- Print Even Pages + n = 0; + XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; + XtSetArg(args[n], XmNtopWidget, printOddPages); ++n; +// XtSetArg(args[n], XmNtopOffset, 4); ++n; + XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; + XtSetArg(args[n], XmNleftOffset, 8); ++n; + XtSetArg(args[n], XmNindicatorType, XmONE_OF_MANY); ++n; + XtSetArg(args[n], XmNset, XmUNSET); ++n; + s = XmStringCreateLocalized("Print even pages"); + XtSetArg(args[n], XmNlabelString, s); ++n; + printEvenPages = XmCreateToggleButton(printDialog, "printEvenPages", args, n); + XmStringFree(s); + XtManageChild(printEvenPages); + XtAddCallback(printEvenPages, XmNvalueChangedCallback, + &printEvenPagesBtnCbk, (XtPointer)this); + + //----- separator + n = 0; + XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; + XtSetArg(args[n], XmNtopWidget, printEvenPages); ++n; + XtSetArg(args[n], XmNtopOffset, 8); ++n; + XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; + XtSetArg(args[n], XmNleftOffset, 8); ++n; + XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; + XtSetArg(args[n], XmNrightOffset, 8); ++n; + XtSetArg(args[n], XmNorientation, XmHORIZONTAL); ++n; + sep3 = XmCreateSeparator(printDialog, "sep3", args, n); + XtManageChild(sep3); + + //----- Print Back Order + n = 0; + XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; + XtSetArg(args[n], XmNtopWidget, sep3); ++n; + XtSetArg(args[n], XmNtopOffset, 8); ++n; + XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; + XtSetArg(args[n], XmNleftOffset, 8); ++n; + XtSetArg(args[n], XmNindicatorType, XmONE_OF_MANY); ++n; + XtSetArg(args[n], XmNset, XmUNSET); ++n; + s = XmStringCreateLocalized("Print back order"); + XtSetArg(args[n], XmNlabelString, s); ++n; + printBackOrder = XmCreateToggleButton(printDialog, "printBackOrder", args, n); + XmStringFree(s); + XtManageChild(printBackOrder); + XtAddCallback(printBackOrder, XmNvalueChangedCallback, + &printBackOrderBtnCbk, (XtPointer)this); + + //----- separator + n = 0; + XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; + XtSetArg(args[n], XmNtopWidget, printBackOrder); ++n; + XtSetArg(args[n], XmNtopOffset, 8); ++n; + XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; + XtSetArg(args[n], XmNleftOffset, 8); ++n; + XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; + XtSetArg(args[n], XmNrightOffset, 8); ++n; + XtSetArg(args[n], XmNorientation, XmHORIZONTAL); ++n; + sep3 = XmCreateSeparator(printDialog, "sep3", args, n); + XtManageChild(sep3); //----- "print" and "cancel" buttons n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, sep2); ++n; + XtSetArg(args[n], XmNtopWidget, sep3); ++n; XtSetArg(args[n], XmNtopOffset, 8); ++n; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNleftOffset, 4); ++n; @@ -2310,7 +2404,7 @@ &printPrintCbk, (XtPointer)this); n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, sep2); ++n; + XtSetArg(args[n], XmNtopWidget, sep3); ++n; XtSetArg(args[n], XmNtopOffset, 8); ++n; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNrightOffset, 4); ++n; @@ -2335,6 +2429,60 @@ } } +void XPDFViewer::printAllPagesBtnCbk(Widget widget, + XtPointer ptr, XtPointer callData) +{ + XPDFViewer *viewer = (XPDFViewer *)ptr; + XmToggleButtonCallbackStruct *data = + (XmToggleButtonCallbackStruct *)callData; + + if (data->set != XmSET) { + XmToggleButtonSetState(viewer->printAllPages, True, False); + } + XmToggleButtonSetState(viewer->printEvenPages, False, False); + XmToggleButtonSetState(viewer->printOddPages, False, False); +} + +void XPDFViewer::printEvenPagesBtnCbk(Widget widget, + XtPointer ptr, XtPointer callData) +{ + XPDFViewer *viewer = (XPDFViewer *)ptr; + XmToggleButtonCallbackStruct *data = + (XmToggleButtonCallbackStruct *)callData; + + if (data->set != XmSET) { + XmToggleButtonSetState(viewer->printEvenPages, True, False); + } + XmToggleButtonSetState(viewer->printAllPages, False, False); + XmToggleButtonSetState(viewer->printOddPages, False, False); + XmToggleButtonSetState(viewer->printWithCmdBtn, True, False); + XmToggleButtonSetState(viewer->printToFileBtn, False, False); +} + +void XPDFViewer::printOddPagesBtnCbk(Widget widget, + XtPointer ptr, XtPointer callData) +{ + XPDFViewer *viewer = (XPDFViewer *)ptr; + XmToggleButtonCallbackStruct *data = + (XmToggleButtonCallbackStruct *)callData; + + if (data->set != XmSET) { + XmToggleButtonSetState(viewer->printOddPages, True, False); + } + XmToggleButtonSetState(viewer->printAllPages, False, False); + XmToggleButtonSetState(viewer->printEvenPages, False, False); + XmToggleButtonSetState(viewer->printWithCmdBtn, True, False); + XmToggleButtonSetState(viewer->printToFileBtn, False, False); +} + +void XPDFViewer::printBackOrderBtnCbk(Widget widget, XtPointer ptr, + XtPointer callData) +{ + XPDFViewer *viewer = (XPDFViewer *)ptr; + XmToggleButtonSetState(viewer->printWithCmdBtn, True, False); + XmToggleButtonSetState(viewer->printToFileBtn, False, False); +} + void XPDFViewer::setupPrintDialog() { PDFDoc *doc; char buf[20]; @@ -2402,12 +2550,17 @@ XmToggleButtonSetState(viewer->printWithCmdBtn, False, False); XtVaSetValues(viewer->printFileText, XmNsensitive, True, NULL); XtVaSetValues(viewer->printCmdText, XmNsensitive, False, NULL); + + XmToggleButtonSetState(viewer->printAllPages, True, False); + XmToggleButtonSetState(viewer->printOddPages, False, False); + XmToggleButtonSetState(viewer->printEvenPages, False, False); + XmToggleButtonSetState(viewer->printBackOrder, False, False); } void XPDFViewer::printPrintCbk(Widget widget, XtPointer ptr, XtPointer callData) { XPDFViewer *viewer = (XPDFViewer *)ptr; - unsigned char withCmd; + unsigned char withCmd, printAll, printOdd, printEven, printBack; GString *psFileName; int firstPage, lastPage; PDFDoc *doc; @@ -2424,6 +2577,11 @@ viewer->core->setBusyCursor(gTrue); XtVaGetValues(viewer->printWithCmdBtn, XmNset, &withCmd, NULL); + XtVaGetValues(viewer->printAllPages, XmNset, &printAll, NULL); + XtVaGetValues(viewer->printOddPages, XmNset, &printOdd, NULL); + XtVaGetValues(viewer->printEvenPages, XmNset, &printEven, NULL); + XtVaGetValues(viewer->printBackOrder, XmNset, &printBack, NULL); + if (withCmd) { psFileName = new GString(XmTextFieldGetString(viewer->printCmdText)); psFileName->insert(0, '|'); @@ -2444,14 +2602,72 @@ lastPage = doc->getNumPages(); } - psOut = new PSOutputDev(psFileName->getCString(), doc->getXRef(), - doc->getCatalog(), firstPage, lastPage, - psModePS); - if (psOut->isOk()) { - doc->displayPages(psOut, firstPage, lastPage, 72, 72, - 0, gTrue, globalParams->getPSCrop(), gFalse); + // Normal print mode + if (printAll && !printBack) + { + psOut = new PSOutputDev(psFileName->getCString(), doc->getXRef(), + doc->getCatalog(), firstPage, lastPage, + psModePS); + if (psOut->isOk()) { + doc->displayPages(psOut, firstPage, lastPage, 72, 72, + 0, gTrue, globalParams->getPSCrop(), gFalse); + } + delete psOut; + } + // Additional prints mode's + else + { + int step=1, i; + int beginPage, endPage; + + if (!printAll) + { + step=2; + if (printEven) + { + firstPage+=firstPage&0x01?1:0; + lastPage-=lastPage&0x01?1:0; + } + else + { + firstPage+=firstPage&0x01?0:1; + lastPage-=lastPage&0x01?0:1; + } + } + + if (printBack) + { + step=-step; + beginPage=lastPage; + endPage=firstPage; + } + else + { + beginPage=firstPage; + endPage=lastPage; + } + + if (firstPage<=lastPage) + { + for (i=beginPage;; i+=step) + { + psOut = new PSOutputDev(psFileName->getCString(), doc->getXRef(), + doc->getCatalog(), i, i, psModePS); + if (psOut->isOk()) { + doc->displayPages(psOut, i, i, 72, 72, + 0, gTrue, globalParams->getPSCrop(), gFalse); + } + else + { + delete psOut; + break; + } + delete psOut; + if (i==endPage) break; + } + } } - delete psOut; + delete psFileName; viewer->core->setBusyCursor(gFalse); --- xpdf/XPDFViewer.h 2005-08-17 09:34:31.000000000 +0400 +++ xpdf-3.01/xpdf/XPDFViewer.h.new 2007-01-26 00:45:09.000000000 +0300 @@ -178,6 +178,16 @@ XtPointer callData); static void printToFileBtnCbk(Widget widget, XtPointer ptr, XtPointer callData); + + static void printAllPagesBtnCbk(Widget widget, XtPointer ptr, + XtPointer callData); + static void printEvenPagesBtnCbk(Widget widget, XtPointer ptr, + XtPointer callData); + static void printOddPagesBtnCbk(Widget widget, XtPointer ptr, + XtPointer callData); + static void printBackOrderBtnCbk(Widget widget, XtPointer ptr, + XtPointer callData); + static void printPrintCbk(Widget widget, XtPointer ptr, XtPointer callData); @@ -242,6 +252,8 @@ Widget printFileText; Widget printFirstPage; Widget printLastPage; + + Widget printAllPages, printEvenPages, printOddPages, printBackOrder; }; #endif =end patch -- System Information: Debian Release: 4.0 APT prefers testing APT policy: (500, 'testing') Architecture: i386 (i686) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.6.18-3-k7 Locale: LANG=ru_RU.UTF-8, LC_CTYPE=ru_RU.UTF-8 (charmap=UTF-8) Versions of packages xpdf depends on: ii xpdf-common 3.01-9 Portable Document Format (PDF) sui ii xpdf-reader 3.01-9 Portable Document Format (PDF) sui ii xpdf-utils 3.01-9 Portable Document Format (PDF) sui xpdf recommends no packages. Versions of packages xpdf-reader depends on: ii gsfonts 1:8.11+urwcyr1.0.7~pre41-1 Fonts for the Ghostscript interpre ii lesstif2 1:0.94.4-2 OSF/Motif 2.1 implementation relea ii libc6 2.3.6.ds1-8 GNU C Library: Shared libraries ii libfreetype6 2.2.1-5 FreeType 2 font engine, shared lib ii libgcc1 1:4.1.1-21 GCC support library ii libice6 1:1.0.1-2 X11 Inter-Client Exchange library ii libpaper1 1.1.21 Library for handling paper charact ii libsm6 1:1.0.1-3 X11 Session Management library ii libstdc++6 4.1.1-21 The GNU Standard C++ Library v3 ii libt1-5 5.1.0-2 Type 1 font rasterizer library - r ii libx11-6 2:1.0.3-4 X11 client-side library ii libxext6 1:1.0.1-2 X11 miscellaneous extension librar ii libxp6 1:1.0.0.xsf1-1 X Printing Extension (Xprint) clie ii libxpm4 1:3.5.5-2 X11 pixmap library ii libxt6 1:1.0.2-2 X11 toolkit intrinsics library ii xpdf-common 3.01-9 Portable Document Format (PDF) sui ii zlib1g 1:1.2.3-13 compression library - runtime -- debconf-show failed -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]