? abiword.log
? autom4te.cache
? src/Linux_2.2.20-pmac_ppc_OBJ
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	10 Mar 2003 21:55:43 -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	10 Mar 2003 21:55:43 -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	10 Mar 2003 21:55:49 -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	10 Mar 2003 21:55:49 -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	10 Mar 2003 21:55:49 -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	10 Mar 2003 21:57:44 -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	10 Mar 2003 21:57:44 -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) ;