diff options
-rw-r--r-- | include/vcl/jobdata.hxx | 2 | ||||
-rw-r--r-- | vcl/generic/print/genprnpsp.cxx | 13 | ||||
-rw-r--r-- | vcl/unx/generic/printer/cupsmgr.cxx | 2 | ||||
-rw-r--r-- | vcl/unx/generic/printer/jobdata.cxx | 18 |
4 files changed, 25 insertions, 10 deletions
diff --git a/include/vcl/jobdata.hxx b/include/vcl/jobdata.hxx index 974c04998eef..af78db5aaa86 100644 --- a/include/vcl/jobdata.hxx +++ b/include/vcl/jobdata.hxx @@ -34,6 +34,7 @@ enum type { struct VCL_DLLPUBLIC JobData { int m_nCopies; + bool m_bCollate; int m_nLeftMarginAdjust; int m_nRightMarginAdjust; int m_nTopMarginAdjust; @@ -50,6 +51,7 @@ struct VCL_DLLPUBLIC JobData JobData() : m_nCopies( 1 ), + m_bCollate(false), m_nLeftMarginAdjust( 0 ), m_nRightMarginAdjust( 0 ), m_nTopMarginAdjust( 0 ), diff --git a/vcl/generic/print/genprnpsp.cxx b/vcl/generic/print/genprnpsp.cxx index 6b8c8ce62b6d..9d28e7f60fdc 100644 --- a/vcl/generic/print/genprnpsp.cxx +++ b/vcl/generic/print/genprnpsp.cxx @@ -808,16 +808,9 @@ sal_uLong PspSalInfoPrinter::GetCapabilities( const ImplJobSetup* pJobSetup, sal return 0xffff; case PRINTER_CAPABILITIES_COLLATECOPIES: { - // see if the PPD contains a value to set Collate to True - JobData aData; - JobData::constructFromStreamBuffer( pJobSetup->mpDriverData, pJobSetup->mnDriverDataLen, aData ); - - const PPDKey* pKey = aData.m_pParser ? aData.m_pParser->getKey( OUString("Collate") ) : NULL; - const PPDValue* pVal = pKey ? pKey->getValue(OUString("True")) : NULL; - // PPDs don't mention the number of possible collated copies. // so let's guess as many as we want ? - return pVal ? 0xffff : 0; + return 0xffff; } case PRINTER_CAPABILITIES_SETORIENTATION: return 1; @@ -836,7 +829,7 @@ sal_uLong PspSalInfoPrinter::GetCapabilities( const ImplJobSetup* pJobSetup, sal return 1; else { - // see if the PPD contains a value to set Collate to True + // see if the PPD contains a value to set PDF device JobData aData = PrinterInfoManager::get().getPrinterInfo( pJobSetup->maPrinterName ); if( pJobSetup->mpDriverData ) JobData::constructFromStreamBuffer( pJobSetup->mpDriverData, pJobSetup->mnDriverDataLen, aData ); @@ -846,7 +839,7 @@ sal_uLong PspSalInfoPrinter::GetCapabilities( const ImplJobSetup* pJobSetup, sal return PrinterInfoManager::get().checkFeatureToken( pJobSetup->maPrinterName, "external_dialog" ) ? 1 : 0; case PRINTER_CAPABILITIES_USEPULLMODEL: { - // see if the PPD contains a value to set Collate to True + // see if the PPD contains a value to set PDF device JobData aData = PrinterInfoManager::get().getPrinterInfo( pJobSetup->maPrinterName ); if( pJobSetup->mpDriverData ) JobData::constructFromStreamBuffer( pJobSetup->mpDriverData, pJobSetup->mnDriverDataLen, aData ); diff --git a/vcl/unx/generic/printer/cupsmgr.cxx b/vcl/unx/generic/printer/cupsmgr.cxx index 52b6bfbc5509..069df7df581b 100644 --- a/vcl/unx/generic/printer/cupsmgr.cxx +++ b/vcl/unx/generic/printer/cupsmgr.cxx @@ -631,6 +631,8 @@ void CUPSManager::getOptionsFromDocumentSetup( const JobData& rJob, bool bBanner { OString aVal( OString::number( rJob.m_nCopies ) ); rNumOptions = cupsAddOption( "copies", aVal.getStr(), rNumOptions, (cups_option_t**)rOptions ); + aVal = OString::boolean(rJob.m_bCollate); + rNumOptions = cupsAddOption( "collate", aVal.getStr(), rNumOptions, (cups_option_t**)rOptions ); } if( ! bBanner ) { diff --git a/vcl/unx/generic/printer/jobdata.cxx b/vcl/unx/generic/printer/jobdata.cxx index adf9d418bbdf..117f677d6dea 100644 --- a/vcl/unx/generic/printer/jobdata.cxx +++ b/vcl/unx/generic/printer/jobdata.cxx @@ -31,6 +31,7 @@ using namespace psp; JobData& JobData::operator=(const JobData& rRight) { m_nCopies = rRight.m_nCopies; + m_bCollate = rRight.m_bCollate; m_nLeftMarginAdjust = rRight.m_nLeftMarginAdjust; m_nRightMarginAdjust = rRight.m_nRightMarginAdjust; m_nTopMarginAdjust = rRight.m_nTopMarginAdjust; @@ -54,6 +55,11 @@ JobData& JobData::operator=(const JobData& rRight) void JobData::setCollate( bool bCollate ) { + if (m_nPDFDevice > 0) + { + m_bCollate = bCollate; + return; + } const PPDParser* pParser = m_aContext.getParser(); if( pParser ) { @@ -133,6 +139,13 @@ bool JobData::getStreamBuffer( void*& pData, int& bytes ) aLine.append(static_cast<sal_Int32>(m_nCopies)); aStream.WriteLine(aLine.makeStringAndClear()); + if (m_nPDFDevice > 0) + { + aLine.append("collate="); + aLine.append(OString::boolean(m_bCollate)); + aStream.WriteLine(aLine.makeStringAndClear()); + } + aLine.append("margindajustment="); aLine.append(static_cast<sal_Int32>(m_nLeftMarginAdjust)); aLine.append(','); @@ -191,6 +204,7 @@ bool JobData::constructFromStreamBuffer( void* pData, int bytes, JobData& rJobDa const char printerEquals[] = "printer="; const char orientatationEquals[] = "orientation="; const char copiesEquals[] = "copies="; + const char collateEquals[] = "collate="; const char margindajustmentEquals[] = "margindajustment="; const char colordepthEquals[] = "colordepth="; const char colordeviceEquals[] = "colordevice="; @@ -217,6 +231,10 @@ bool JobData::constructFromStreamBuffer( void* pData, int bytes, JobData& rJobDa bCopies = true; rJobData.m_nCopies = aLine.copy(RTL_CONSTASCII_LENGTH(copiesEquals)).toInt32(); } + else if (aLine.startsWith(collateEquals)) + { + rJobData.m_bCollate = aLine.copy(RTL_CONSTASCII_LENGTH(collateEquals)).toInt32(); + } else if (aLine.startsWith(margindajustmentEquals)) { bMargin = true; |