20 #include <rtl/ustring.hxx>
27 #include <rtl/instance.hxx>
29 #define JOBSET_FILE364_SYSTEM (sal_uInt16(0xFFFF))
30 #define JOBSET_FILE605_SYSTEM (sal_uInt16(0xFFFE))
34 struct ImplOldJobSetupData
36 char cPrinterName[64];
42 struct Impl364JobSetupData
72 mnSystem( rJobSetup.GetSystem() ),
73 maPrinterName( rJobSetup.GetPrinterName() ),
74 maDriver( rJobSetup.GetDriver() ),
75 meOrientation( rJobSetup.GetOrientation() ),
76 meDuplexMode( rJobSetup.GetDuplexMode() ),
77 mnPaperBin( rJobSetup.GetPaperBin() ),
78 mePaperFormat( rJobSetup.GetPaperFormat() ),
79 mnPaperWidth( rJobSetup.GetPaperWidth() ),
80 mnPaperHeight( rJobSetup.GetPaperHeight() ),
81 mnDriverDataLen( rJobSetup.GetDriverDataLen() ),
82 mbPapersizeFromSetup( rJobSetup.GetPapersizeFromSetup() ),
83 meSetupMode( rJobSetup.GetPrinterSetupMode() ),
84 maValueMap( rJobSetup.GetValueMap() )
193 struct theGlobalDefault :
194 public rtl::Static< JobSetup::ImplType, theGlobalDefault > {};
238 sal_uInt16 nSystem = 0;
240 size_t nRead = nLen -
sizeof(nLen) -
sizeof(nSystem);
244 " max possible entries, but " << nRead <<
" claimed, truncating");
247 sal_uInt64
const nFirstPos = rIStream.
Tell();
248 std::unique_ptr<char[]> pTempBuf(
new char[nRead]);
249 nRead = rIStream.
ReadBytes(pTempBuf.get(), nRead);
250 if (nRead >=
sizeof(ImplOldJobSetupData))
252 ImplOldJobSetupData*
pData =
reinterpret_cast<ImplOldJobSetupData*
>(pTempBuf.get());
254 rtl_TextEncoding aStreamEncoding = RTL_TEXTENCODING_UTF8;
261 rJobData.
SetPrinterName( OStringToOUString(pData->cPrinterName, aStreamEncoding) );
263 rJobData.
SetDriver( OStringToOUString(pData->cDriverName, aStreamEncoding) );
269 if (nRead <
sizeof(ImplOldJobSetupData) +
sizeof(Impl364JobSetupData))
271 SAL_WARN(
"vcl",
"Parsing error: " <<
sizeof(ImplOldJobSetupData) +
sizeof(Impl364JobSetupData) <<
272 " required, but " << nRead <<
" available");
276 Impl364JobSetupData* pOldJobData =
reinterpret_cast<Impl364JobSetupData*
>(pTempBuf.get() +
sizeof( ImplOldJobSetupData ));
277 sal_uInt16 nOldJobDataSize = SVBT16ToUInt16( pOldJobData->nSize );
278 rJobData.
SetSystem( SVBT16ToUInt16( pOldJobData->nSystem ) );
280 rJobData.
SetOrientation( static_cast<Orientation>(SVBT16ToUInt16( pOldJobData->nOrientation )) );
282 rJobData.
SetPaperBin( SVBT16ToUInt16( pOldJobData->nPaperBin ) );
283 sal_uInt16 nPaperFormat = SVBT16ToUInt16(pOldJobData->nPaperFormat);
288 SAL_WARN(
"vcl",
"Parsing error: " << nPaperFormat <<
291 rJobData.
SetPaperWidth( static_cast<tools::Long>(SVBT32ToUInt32( pOldJobData->nPaperWidth )) );
292 rJobData.
SetPaperHeight( static_cast<tools::Long>(SVBT32ToUInt32( pOldJobData->nPaperHeight )) );
295 const char* pDriverData =
reinterpret_cast<const char*
>(pOldJobData) + nOldJobDataSize;
297 if (pDriverDataEnd > pTempBuf.get() + nRead)
299 SAL_WARN(
"vcl",
"corrupted job setup");
311 rIStream.
Seek( nFirstPos +
sizeof( ImplOldJobSetupData ) +
313 while( rIStream.
Tell() < nFirstPos + nRead )
317 if( aKey ==
"COMPAT_DUPLEX_MODE" )
319 if( aValue ==
"DuplexMode::Unknown" )
321 else if( aValue ==
"DuplexMode::Off" )
323 else if( aValue ==
"DuplexMode::ShortEdge" )
325 else if( aValue ==
"DuplexMode::LongEdge" )
331 SAL_WARN_IF( rIStream.
Tell() != nFirstPos+nRead,
"vcl",
"corrupted job setup" );
333 rIStream.
Seek(nFirstPos + nRead);
351 Impl364JobSetupData aOldJobData;
352 sal_uInt16 nOldJobDataSize =
sizeof( aOldJobData );
353 ShortToSVBT16( nOldJobDataSize, aOldJobData.nSize );
354 ShortToSVBT16( rJobData.
GetSystem(), aOldJobData.nSystem );
356 ShortToSVBT16( static_cast<sal_uInt16>(rJobData.
GetOrientation()), aOldJobData.nOrientation );
357 ShortToSVBT16( rJobData.
GetPaperBin(), aOldJobData.nPaperBin );
358 ShortToSVBT16( static_cast<sal_uInt16>(rJobData.
GetPaperFormat()), aOldJobData.nPaperFormat );
359 UInt32ToSVBT32( static_cast<sal_uLong>(rJobData.
GetPaperWidth()), aOldJobData.nPaperWidth );
360 UInt32ToSVBT32( static_cast<sal_uLong>(rJobData.
GetPaperHeight()), aOldJobData.nPaperHeight );
362 ImplOldJobSetupData aOldData = {};
364 strncpy(aOldData.cPrinterName, aPrnByteName.getStr(),
SAL_N_ELEMENTS(aOldData.cPrinterName) - 1);
366 strncpy(aOldData.cDriverName, aDriverByteName.getStr(),
SAL_N_ELEMENTS(aOldData.cDriverName) - 1);
370 rOStream.
WriteBytes( &aOldData,
sizeof( aOldData ) );
371 rOStream.
WriteBytes( &aOldJobData, nOldJobDataSize );
374 const std::unordered_map< OUString, OUString >& rValueMap(
377 for (
auto const&
value : rValueMap)
398 nLen = sal::static_int_cast<sal_uInt16>(rOStream.
Tell() - nPos);
399 rOStream.
Seek( nPos );
401 rOStream.
Seek( nPos + nLen );
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
sal_uInt32 mnDriverDataLen
void SetPrinterSetupMode(PrinterSetupMode eMode)
SvStream & WriteUInt16(sal_uInt16 nUInt16)
SvStream & WriteJobSetup(SvStream &rOStream, const JobSetup &rJobSetup)
SvStream & ReadUInt16(sal_uInt16 &rUInt16)
bool operator==(const ImplJobSetup &rImplJobSetup) const
std::unique_ptr< ContentProperties > pData
void SetValueMap(const OUString &rKey, const OUString &rValue)
sal_uInt64 Seek(sal_uInt64 nPos)
const OUString & GetDriver() const
SAL_DLLPRIVATE const ImplJobSetup & ImplGetConstData() const
void SetDriverDataLen(sal_uInt32 nDriverDataLen)
DuplexMode GetDuplexMode() const
void SetPaperHeight(tools::Long nHeight)
std::size_t write_uInt16_lenPrefixed_uInt8s_FromOUString(SvStream &rStrm, std::u16string_view rStr, rtl_TextEncoding eEnc)
void SetSystem(sal_uInt16 nSystem)
void SetDuplexMode(DuplexMode eDuplexMode)
Orientation meOrientation
void SetDriverData(sal_uInt8 *pDriverData)
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
SAL_DLLPRIVATE ImplJobSetup & ImplGetData()
sal_uInt64 remainingSize()
#define SAL_N_ELEMENTS(arr)
void SetPaperWidth(tools::Long nWidth)
OUString read_uInt16_lenPrefixed_uInt8s_ToOUString(SvStream &rStrm, rtl_TextEncoding eEnc)
void SetOrientation(Orientation eOrientation)
const OUString & GetPrinterName() const
PrinterSetupMode meSetupMode
bool same_object(const cow_wrapper &rOther) const
const sal_uInt8 * GetDriverData() const
std::size_t WriteBytes(const void *pData, std::size_t nSize)
sal_uInt16 GetSystem() const
void SetPapersizeFromSetup(bool bPapersizeFromSetup)
Orientation GetOrientation() const
std::unordered_map< OUString, OUString > maValueMap
std::size_t write_uInt16_lenPrefixed_uInt8s_FromOString(SvStream &rStrm, const OString &rStr)
std::size_t ReadBytes(void *pData, std::size_t nSize)
sal_uInt16 GetPaperBin() const
OUString const & GetPrinterName() const
void SetPaperBin(sal_uInt16 nPaperBin)
#define SAL_WARN_IF(condition, area, stream)
tools::Long GetPaperWidth() const
sal_uInt32 GetDriverDataLen() const
rtl_TextEncoding GetStreamCharSet() const
tools::Long mnPaperHeight
void SetPrinterName(const OUString &rPrinterName)
Paper GetPaperFormat() const
bool operator==(const JobSetup &rJobSetup) const
void SetDriver(const OUString &rDriver)
tools::Long GetPaperHeight() const
SvStream & ReadJobSetup(SvStream &rIStream, JobSetup &rJobSetup)
#define SAL_WARN(area, stream)
void SetPaperFormat(Paper ePaperFormat)
JobSetup & operator=(const JobSetup &rJob)
#define NUM_PAPER_ENTRIES
#define JOBSET_FILE364_SYSTEM
#define JOBSET_FILE605_SYSTEM
const std::unordered_map< OUString, OUString > & GetValueMap() const
bool mbPapersizeFromSetup