From: Tim Silversides (silversides@btinternet.com)
Date: Wed Feb 05 2003 - 16:11:16 EST
Hi,
Below is a patch against stable to allow printing of pages in reverse
order on unix
-
Index: src/af/xap/unix/xap_UnixDlg_Print.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/xap/unix/xap_UnixDlg_Print.cpp,v
retrieving revision 1.54
diff -u -r1.54 xap_UnixDlg_Print.cpp
--- src/af/xap/unix/xap_UnixDlg_Print.cpp 11 Mar 2002 01:38:36 -0000 1.54
+++ src/af/xap/unix/xap_UnixDlg_Print.cpp 5 Feb 2003 18:59:35 -0000
@@ -77,7 +77,7 @@
m_persistPrintDlg.bDoPrintSelection = m_bDoPrintSelection;
m_persistPrintDlg.bDoPrintToFile = m_bDoPrintToFile;
m_persistPrintDlg.bDoCollate = m_bCollate;
-
+ m_persistPrintDlg.bDoReverse = m_bReverse;
m_persistPrintDlg.colorSpace = m_cColorSpace;
m_persistPrintDlg.szPrintCommand = m_szPrintCommand;
}
@@ -91,6 +91,7 @@
m_persistPrintDlg.bDoPrintSelection = m_bDoPrintSelection;
m_persistPrintDlg.bDoPrintToFile = m_bDoPrintToFile;
m_persistPrintDlg.bDoCollate = m_bCollate;
+ m_persistPrintDlg.bDoReverse = m_bReverse;
m_persistPrintDlg.nCopies = m_nCopies;
m_persistPrintDlg.nFromPage = m_nFirstPage;
m_persistPrintDlg.nToPage = m_nLastPage;
@@ -185,6 +186,11 @@
gtk_widget_grab_focus (entry);
}
+static void entry_range_changed( GtkWidget *entry, GtkWidget *togglebutton)
+{
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (togglebutton), TRUE);
+}
+
void XAP_UnixDialog_Print::_raisePrintDialog(XAP_Frame * pFrame)
{
// raise the actual dialog and wait for an answer.
@@ -203,6 +209,7 @@
GtkWidget *buttonSelection;
GtkWidget *button;
GtkWidget *buttonCollate;
+ GtkWidget *buttonReverse;
GtkWidget *buttonEmbedFonts;
GtkWidget *spinCopies;
@@ -355,6 +362,10 @@
gtk_box_pack_start (GTK_BOX (hbox), buttonCollate, TRUE, TRUE, 0);
gtk_widget_show (buttonCollate);
+ buttonReverse = gtk_check_button_new_with_label (pSS->getValue(XAP_STRING_ID_DLG_UP_Reverse));
+ gtk_box_pack_start (GTK_BOX (hbox), buttonReverse, TRUE, TRUE, 0);
+ gtk_widget_show (buttonReverse);
+
buttonEmbedFonts = gtk_check_button_new_with_label (pSS->getValue(XAP_STRING_ID_DLG_UP_EmbedFonts));
gtk_box_pack_start (GTK_BOX (hbox), buttonEmbedFonts, TRUE, TRUE, 0);
gtk_widget_show (buttonEmbedFonts);
@@ -434,6 +445,7 @@
gtk_box_pack_end (GTK_BOX (hbox), button, TRUE, TRUE, 5);
//gtk_widget_grab_default (button);
+ gtk_widget_grab_focus (button);
gtk_widget_show (button);
@@ -491,12 +503,17 @@
gtk_entry_set_text (GTK_ENTRY (entryFrom), str);
sprintf(str, "%d", m_persistPrintDlg.nToPage);
gtk_entry_set_text (GTK_ENTRY (entryTo), str);
-
+
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonCollate), m_persistPrintDlg.bDoCollate);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonReverse), m_persistPrintDlg.bDoReverse);
XAP_App::getApp()->getPrefsValueBool((const XML_Char *)XAP_PREF_KEY_EmbedFontsInPS, &m_bEmbedFonts);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttonEmbedFonts), m_bEmbedFonts);
gtk_spin_button_set_value (GTK_SPIN_BUTTON(spinCopies), m_persistPrintDlg.nCopies);
+ gtk_signal_connect(GTK_OBJECT(entryFrom), "changed",
+ GTK_SIGNAL_FUNC(entry_range_changed), buttonRange);
+ gtk_signal_connect(GTK_OBJECT(entryTo), "changed",
+ GTK_SIGNAL_FUNC(entry_range_changed), buttonRange);
// get top level window and it's GtkWidget *
XAP_UnixFrame * frame = static_cast<XAP_UnixFrame *>(pFrame);
@@ -519,6 +536,7 @@
m_bDoPrintSelection = GTK_TOGGLE_BUTTON(buttonSelection)->active;
m_bDoPrintToFile = GTK_TOGGLE_BUTTON(buttonFile)->active;
m_bCollate = GTK_TOGGLE_BUTTON(buttonCollate)->active;
+ m_bReverse = GTK_TOGGLE_BUTTON(buttonReverse)->active;
bool bEmbedFonts = m_bEmbedFonts;
m_bEmbedFonts = GTK_TOGGLE_BUTTON(buttonEmbedFonts)->active;
m_nCopies = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinCopies));
Index: src/af/xap/unix/xap_UnixDlg_Print.h
===================================================================
RCS file: /cvsroot/abi/src/af/xap/unix/xap_UnixDlg_Print.h,v
retrieving revision 1.19
diff -u -r1.19 xap_UnixDlg_Print.h
--- src/af/xap/unix/xap_UnixDlg_Print.h 3 Mar 2001 22:10:59 -0000 1.19
+++ src/af/xap/unix/xap_UnixDlg_Print.h 5 Feb 2003 18:59:36 -0000
@@ -73,6 +73,7 @@
bool bDoPrintSelection;
bool bDoPrintToFile;
bool bDoCollate;
+ bool bDoReverse;
bool bEnablePrintToFile;
bool bEnableSelection;
bool bEnablePageRange;
Index: src/af/xap/xp/xap_Dlg_Print.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/xap/xp/xap_Dlg_Print.cpp,v
retrieving revision 1.14
diff -u -r1.14 xap_Dlg_Print.cpp
--- src/af/xap/xp/xap_Dlg_Print.cpp 20 Mar 2002 17:44:45 -0000 1.14
+++ src/af/xap/xp/xap_Dlg_Print.cpp 5 Feb 2003 18:59:38 -0000
@@ -38,6 +38,7 @@
m_bPersistValid = false;
m_persistNrCopies = 1;
m_persistCollate = false;
+ m_persistReverse = false;
m_persistColorSpace = GR_Graphics::GR_COLORSPACE_COLOR; /* full color is default */
m_persistPrintToFile = false;
@@ -202,7 +203,14 @@
{
UT_ASSERT(m_answer == a_OK);
- return m_persistCollate;
+ return m_bCollate;
+}
+
+bool XAP_Dialog_Print::getReverse(void) const
+{
+ UT_ASSERT(m_answer == a_OK);
+
+ return m_bReverse;
}
GR_Graphics::ColorSpace XAP_Dialog_Print::getColorSpace(void) const
Index: src/af/xap/xp/xap_Dlg_Print.h
===================================================================
RCS file: /cvsroot/abi/src/af/xap/xp/xap_Dlg_Print.h,v
retrieving revision 1.11
diff -u -r1.11 xap_Dlg_Print.h
--- src/af/xap/xp/xap_Dlg_Print.h 6 Feb 2001 22:54:25 -0000 1.11
+++ src/af/xap/xp/xap_Dlg_Print.h 5 Feb 2003 18:59:39 -0000
@@ -54,6 +54,7 @@
bool getDoPrintToFile(const char *) const;
UT_uint32 getNrCopies(void) const;
bool getCollate(void) const;
+ bool getReverse(void) const;
GR_Graphics::ColorSpace getColorSpace(void) const;
virtual GR_Graphics * getPrinterGraphicsContext(void) = 0;
@@ -66,6 +67,7 @@
UT_uint32 m_bPersistValid; /* persists (internal) */
UT_uint32 m_persistNrCopies; /* persists (internal) */
bool m_persistCollate; /* persists (internal) */
+ bool m_persistReverse; /* persists (internal) */
GR_Graphics::ColorSpace m_persistColorSpace; /* persists (internal) */
bool m_persistPrintToFile; /* persists (internal) */
@@ -77,8 +79,10 @@
bool m_bEnablePrintToFile; /* input */
bool m_bDoPrintRange; /* output */
bool m_bDoPrintSelection; /* output */
- bool m_bDoPrintToFile; /* output */
- bool m_bCollate; /* output */
+ bool m_bDoPrintToFile; /* output */
+ bool m_bCollate; /* output */
+ bool m_bReverse; /* output */
+
GR_Graphics::ColorSpace m_cColorSpace; /* output */
UT_uint32 m_nFirstPage; /* input/output */
UT_uint32 m_nLastPage; /* input/output */
Index: src/af/xap/xp/xap_String_Id.h
===================================================================
RCS file: /cvsroot/abi/src/af/xap/xp/xap_String_Id.h,v
retrieving revision 1.78.2.1
diff -u -r1.78.2.1 xap_String_Id.h
--- src/af/xap/xp/xap_String_Id.h 21 Aug 2002 07:23:08 -0000 1.78.2.1
+++ src/af/xap/xp/xap_String_Id.h 5 Feb 2003 18:59:46 -0000
@@ -154,6 +154,7 @@
dcl(DLG_UP_To, " to ")
dcl(DLG_UP_Selection, "Selection")
dcl(DLG_UP_Collate, "Collate")
+dcl(DLG_UP_Reverse, "Reverse Order")
dcl(DLG_UP_EmbedFonts, "Embed Fonts")
dcl(DLG_UP_Copies, "Copies: ")
dcl(DLG_UP_PrintButton, "Print")
Index: src/wp/ap/xp/ap_EditMethods.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/xp/ap_EditMethods.cpp,v
retrieving revision 1.477.2.8
diff -u -r1.477.2.8 ap_EditMethods.cpp
--- src/wp/ap/xp/ap_EditMethods.cpp 2 Aug 2002 08:39:39 -0000 1.477.2.8
+++ src/wp/ap/xp/ap_EditMethods.cpp 5 Feb 2003 19:00:52 -0000
@@ -5635,7 +5635,7 @@
bool s_actuallyPrint(PD_Document *doc, GR_Graphics *pGraphics,
FV_View * pPrintView, const char *pDocName,
- UT_uint32 nCopies, bool bCollate,
+ UT_uint32 nCopies, bool bCollate, bool bReverse,
UT_sint32 iWidth, UT_sint32 iHeight,
UT_uint32 nToPage, UT_uint32 nFromPage)
{
@@ -5663,16 +5663,50 @@
XML_Char msgBuf [1024];
- if (bCollate)
+ if (bCollate&&bReverse)
+ {
+ for (k=nToPage; (k >= nFromPage); k--)
+ for (j=1; (j <= nCopies); j++)
+ {
+ sprintf (msgBuf, msgTmpl, k, nToPage);
+ pFrame->setStatusMessage ( msgBuf );
+ pFrame->nullUpdate();
+
+ // NB we will need a better way to calc
+ // pGraphics->m_iRasterPosition when
+ // iHeight is allowed to vary page to page
+ pGraphics->m_iRasterPosition = (k-1)*iHeight;
+ pGraphics->startPage(pDocName, k, orient, iWidth, iHeight);
+ pPrintView->draw(k-1, &da);
+ }
+ }
+ else if(bCollate)
+ {
+ for (k=nFromPage; (k <= nToPage); k++)
+ for (j=1; (j <= nCopies); j++)
+ {
+ sprintf (msgBuf, msgTmpl, k, nToPage);
+ pFrame->setStatusMessage ( msgBuf );
+ pFrame->nullUpdate();
+
+ // NB we will need a better way to calc
+ // pGraphics->m_iRasterPosition when
+ // iHeight is allowed to vary page to page
+ pGraphics->m_iRasterPosition = (k-1)*iHeight;
+ pGraphics->startPage(pDocName, k, orient, iWidth, iHeight);
+ pPrintView->draw(k-1, &da);
+ }
+ }
+ else if(bReverse)
{
for (j=1; (j <= nCopies); j++)
- for (k=nFromPage; (k <= nToPage); k++)
+ for (k=nToPage; (k >= nFromPage); k--)
{
sprintf (msgBuf, msgTmpl, k, nToPage);
pFrame->setStatusMessage ( msgBuf );
pFrame->nullUpdate();
- // NB we will need a better way to calc
+ // NB we will need a better way to calc
// pGraphics->m_iRasterPosition when
// iHeight is allowed to vary page to page
pGraphics->m_iRasterPosition = (k-1)*iHeight;
@@ -5682,8 +5716,8 @@
}
else
{
- for (k=nFromPage; (k <= nToPage); k++)
- for (j=1; (j <= nCopies); j++)
+ for (j=1; (j <= nCopies); j++)
+ for (k=nFromPage; (k <= nToPage); k++)
{
sprintf (msgBuf, msgTmpl, k, nToPage);
pFrame->setStatusMessage ( msgBuf );
@@ -5774,6 +5808,7 @@
UT_uint32 nCopies = pDialog->getNrCopies();
bool bCollate = pDialog->getCollate();
+ bool bReverse = pDialog->getReverse();
// TODO these are here temporarily to make printing work. We'll fix the hack later.
// BUGBUG assumes all pages are same size and orientation
@@ -5782,7 +5817,7 @@
const char *pDocName = ((doc->getFilename()) ? doc->getFilename() : pFrame->getTempNameFromTitle());
- s_actuallyPrint(doc, pGraphics, pPrintView, pDocName, nCopies, bCollate,
+ s_actuallyPrint(doc, pGraphics, pPrintView, pDocName, nCopies, bCollate,bReverse,
iWidth, iHeight, nToPage, nFromPage);
delete pDocLayout;
@@ -5851,6 +5886,7 @@
UT_uint32 nCopies = 1;
bool bCollate = false;
+ bool bReverse = false;
// TODO these are here temporarily to make printing work. We'll fix the hack later.
// BUGBUG assumes all pages are same size and orientation
@@ -5859,7 +5895,7 @@
const char *pDocName = ((doc->getFilename()) ? doc->getFilename() : pFrame->getTempNameFromTitle());
- s_actuallyPrint(doc, pGraphics, pPrintView, pDocName, nCopies, bCollate,
+ s_actuallyPrint(doc, pGraphics, pPrintView, pDocName, nCopies, bCollate,bReverse,
iWidth, iHeight, nToPage, nFromPage);
delete pDocLayout;
Index: src/wp/ap/xp/ap_EditMethods.h
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/xp/ap_EditMethods.h,v
retrieving revision 1.1.10.2
diff -u -r1.1.10.2 ap_EditMethods.h
--- src/wp/ap/xp/ap_EditMethods.h 2 Aug 2002 08:27:55 -0000 1.1.10.2
+++ src/wp/ap/xp/ap_EditMethods.h 5 Feb 2003 19:00:52 -0000
@@ -27,7 +27,7 @@
// defined in ap_editmethods.cpp
bool s_actuallyPrint(PD_Document *doc, GR_Graphics *pGraphics,
FV_View * pPrintView, const char *pDocName,
- UT_uint32 nCopies, bool bCollate,
+ UT_uint32 nCopies, bool bCollate, bool bReverse,
UT_sint32 inWidth, UT_sint32 inHeight,
UT_uint32 nToPage, UT_uint32 nFromPage) ;
This archive was generated by hypermail 2.1.4 : Wed Feb 05 2003 - 16:15:23 EST