--- Begin Message ---
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
--- End Message ---