summaryrefslogtreecommitdiff
path: root/vcl/source
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/source')
-rw-r--r--vcl/source/gdi/jobset.cxx293
-rw-r--r--vcl/source/gdi/print.cxx189
-rw-r--r--vcl/source/gdi/print3.cxx4
-rw-r--r--vcl/source/window/printdlg.cxx2
4 files changed, 251 insertions, 237 deletions
diff --git a/vcl/source/gdi/jobset.cxx b/vcl/source/gdi/jobset.cxx
index 2b795e51aa99..11137c191b69 100644
--- a/vcl/source/gdi/jobset.cxx
+++ b/vcl/source/gdi/jobset.cxx
@@ -22,9 +22,9 @@
#include <tools/debug.hxx>
#include <tools/stream.hxx>
#include <vcl/jobset.hxx>
-
#include <jobset.h>
#include <memory>
+#include <rtl/instance.hxx>
#define JOBSET_FILE364_SYSTEM ((sal_uInt16)0xFFFF)
#define JOBSET_FILE605_SYSTEM ((sal_uInt16)0xFFFE)
@@ -51,7 +51,6 @@ struct Impl364JobSetupData
ImplJobSetup::ImplJobSetup()
{
- mnRefCount = 1;
mnSystem = 0;
meOrientation = ORIENTATION_PORTRAIT;
meDuplexMode = DUPLEX_UNKNOWN;
@@ -65,27 +64,26 @@ ImplJobSetup::ImplJobSetup()
}
ImplJobSetup::ImplJobSetup( const ImplJobSetup& rJobSetup ) :
- maPrinterName( rJobSetup.maPrinterName ),
- maDriver( rJobSetup.maDriver )
-{
- mnRefCount = 1;
- mnSystem = rJobSetup.mnSystem;
- meOrientation = rJobSetup.meOrientation;
- meDuplexMode = rJobSetup.meDuplexMode;
- mnPaperBin = rJobSetup.mnPaperBin;
- mePaperFormat = rJobSetup.mePaperFormat;
- mnPaperWidth = rJobSetup.mnPaperWidth;
- mnPaperHeight = rJobSetup.mnPaperHeight;
- mnDriverDataLen = rJobSetup.mnDriverDataLen;
- if ( rJobSetup.mpDriverData )
+ mnSystem( rJobSetup.GetSystem() ),
+ maPrinterName( rJobSetup.GetPrinterName() ),
+ maDriver( rJobSetup.GetDriver() ),
+ meOrientation( rJobSetup.GetOrientation() ),
+ meDuplexMode( rJobSetup.GetDuplexMode() ),
+ mnPaperBin( rJobSetup.GetPaperBin() ),
+ mePaperFormat( rJobSetup.GetPaperFormat() ),
+ mnPaperWidth( rJobSetup.GetPaperWidth() ),
+ mnPaperHeight( rJobSetup.GetPaperHeight() ),
+ mnDriverDataLen( rJobSetup.GetDriverDataLen() ),
+ mbPapersizeFromSetup( rJobSetup.GetPapersizeFromSetup() ),
+ maValueMap( rJobSetup.GetValueMap() )
+ {
+ if ( rJobSetup.GetDriverData() )
{
mpDriverData = static_cast<sal_uInt8*>(rtl_allocateMemory( mnDriverDataLen ));
- memcpy( mpDriverData, rJobSetup.mpDriverData, mnDriverDataLen );
+ memcpy( mpDriverData, rJobSetup.GetDriverData(), mnDriverDataLen );
}
else
mpDriverData = nullptr;
- mbPapersizeFromSetup = rJobSetup.mbPapersizeFromSetup;
- maValueMap = rJobSetup.maValueMap;
}
ImplJobSetup::~ImplJobSetup()
@@ -93,131 +91,140 @@ ImplJobSetup::~ImplJobSetup()
rtl_freeMemory( mpDriverData );
}
-ImplJobSetup* JobSetup::ImplGetData()
+void ImplJobSetup::SetSystem(sal_uInt16 nSystem)
{
- if ( !mpData )
- mpData = new ImplJobSetup;
- else if ( mpData->mnRefCount != 1 )
- {
- mpData->mnRefCount--;
- mpData = new ImplJobSetup( *mpData );
- }
+ mnSystem = nSystem;
+}
- return mpData;
+void ImplJobSetup::SetPrinterName(const OUString& rPrinterName)
+{
+ maPrinterName = rPrinterName;
}
-ImplJobSetup* JobSetup::ImplGetConstData()
+void ImplJobSetup::SetDriver(const OUString& rDriver)
{
- if ( !mpData )
- mpData = new ImplJobSetup;
- return mpData;
+ maDriver = rDriver;
}
-const ImplJobSetup* JobSetup::ImplGetConstData() const
+void ImplJobSetup::SetOrientation(Orientation eOrientation)
{
- if ( !mpData )
- const_cast<JobSetup*>(this)->mpData = new ImplJobSetup;
- return mpData;
+ meOrientation = eOrientation;
}
-JobSetup::JobSetup()
+void ImplJobSetup::SetDuplexMode(DuplexMode eDuplexMode)
{
+ meDuplexMode = eDuplexMode;
+}
- mpData = nullptr;
+void ImplJobSetup::SetPaperBin(sal_uInt16 nPaperBin)
+{
+ mnPaperBin = nPaperBin;
}
-JobSetup::JobSetup( const JobSetup& rJobSetup )
+void ImplJobSetup::SetPaperFormat(Paper ePaperFormat)
{
- SAL_WARN_IF( rJobSetup.mpData && (rJobSetup.mpData->mnRefCount >= 0xFFFE), "vcl", "JobSetup: RefCount overflow" );
+ mePaperFormat = ePaperFormat;
+}
- mpData = rJobSetup.mpData;
- if ( mpData )
- mpData->mnRefCount++;
+void ImplJobSetup::SetPaperWidth(long nPaperWidth)
+{
+ mnPaperWidth = nPaperWidth;
}
-JobSetup::~JobSetup()
+void ImplJobSetup::SetPaperHeight(long nPaperHeight)
{
+ mnPaperHeight = nPaperHeight;
+}
- if ( mpData )
- {
- if ( mpData->mnRefCount == 1 )
- delete mpData;
- else
- mpData->mnRefCount--;
- }
+void ImplJobSetup::SetDriverDataLen(sal_uInt32 nDriverDataLen)
+{
+ mnDriverDataLen = nDriverDataLen;
}
-OUString JobSetup::GetPrinterName() const
+void ImplJobSetup::SetDriverData(sal_uInt8* pDriverData)
{
- if ( mpData )
- return mpData->maPrinterName;
- else
- return OUString();
+ mpDriverData = pDriverData;
}
-OUString JobSetup::GetDriverName() const
+void ImplJobSetup::SetPapersizeFromSetup(bool bPapersizeFromSetup)
{
- if ( mpData )
- return mpData->maDriver;
- else
- return OUString();
+ mbPapersizeFromSetup = bPapersizeFromSetup;
+}
+
+void ImplJobSetup::SetValueMap( const OUString& rKey, const OUString& rValue )
+{
+ maValueMap [ rKey ] = rValue;
}
JobSetup& JobSetup::operator=( const JobSetup& rJobSetup )
{
- SAL_WARN_IF( rJobSetup.mpData && (rJobSetup.mpData->mnRefCount) >= 0xFFFE, "vcl", "JobSetup: RefCount overflow" );
+ mpData = rJobSetup.mpData;
+ return *this;
+}
- // Increment refcount first, so that we can assign to ourselves
- if ( rJobSetup.mpData )
- rJobSetup.mpData->mnRefCount++;
+bool ImplJobSetup::operator==( const ImplJobSetup& rImplJobSetup ) const
+{
+ if ( mnSystem == rImplJobSetup.mnSystem &&
+ maPrinterName == rImplJobSetup.maPrinterName &&
+ maDriver == rImplJobSetup.maDriver &&
+ meOrientation == rImplJobSetup.meOrientation &&
+ meDuplexMode == rImplJobSetup.meDuplexMode &&
+ mnPaperBin == rImplJobSetup.mnPaperBin &&
+ mePaperFormat == rImplJobSetup.mePaperFormat &&
+ mnPaperWidth == rImplJobSetup.mnPaperWidth &&
+ mnPaperHeight == rImplJobSetup.mnPaperHeight &&
+ mnDriverDataLen == rImplJobSetup.mnDriverDataLen &&
+ maValueMap == rImplJobSetup.maValueMap &&
+ memcmp( mpDriverData, rImplJobSetup.mpDriverData, mnDriverDataLen ) == 0)
+ return true;
+ return false;
+}
- // If it's not static ImpData and the last reference, delete it, else
- // decrement refcount
- if ( mpData )
- {
- if ( mpData->mnRefCount == 1 )
- delete mpData;
- else
- mpData->mnRefCount--;
- }
+namespace
+{
+ struct theGlobalDefault :
+ public rtl::Static< JobSetup::ImplType, theGlobalDefault > {};
+}
- mpData = rJobSetup.mpData;
+JobSetup::JobSetup() : mpData(theGlobalDefault::get())
+{
+}
- return *this;
+JobSetup::JobSetup( const JobSetup& rJobSetup ) : mpData(rJobSetup.mpData)
+{
+}
+
+JobSetup::~JobSetup()
+{
}
bool JobSetup::operator==( const JobSetup& rJobSetup ) const
{
+ return mpData == rJobSetup.mpData;
+}
- if ( mpData == rJobSetup.mpData )
- return true;
+const ImplJobSetup& JobSetup::ImplGetConstData() const
+{
+ return *mpData;
+}
- if ( !mpData || !rJobSetup.mpData )
- return false;
-
- ImplJobSetup* pData1 = mpData;
- ImplJobSetup* pData2 = rJobSetup.mpData;
- if ( (pData1->mnSystem == pData2->mnSystem) &&
- (pData1->maPrinterName == pData2->maPrinterName) &&
- (pData1->maDriver == pData2->maDriver) &&
- (pData1->meOrientation == pData2->meOrientation) &&
- (pData1->meDuplexMode == pData2->meDuplexMode) &&
- (pData1->mnPaperBin == pData2->mnPaperBin) &&
- (pData1->mePaperFormat == pData2->mePaperFormat) &&
- (pData1->mnPaperWidth == pData2->mnPaperWidth) &&
- (pData1->mnPaperHeight == pData2->mnPaperHeight) &&
- (pData1->mnDriverDataLen == pData2->mnDriverDataLen) &&
- (memcmp( pData1->mpDriverData, pData2->mpDriverData, pData1->mnDriverDataLen ) == 0) &&
- (pData1->maValueMap == pData2->maValueMap)
- )
- return true;
+ImplJobSetup& JobSetup::ImplGetData()
+{
+ return *mpData;
+}
- return false;
+OUString JobSetup::GetPrinterName() const
+{
+ return mpData->GetPrinterName();
}
-SvStream& ReadJobSetup( SvStream& rIStream, JobSetup& rJobSetup )
+bool JobSetup::IsDefault() const
{
+ return mpData.same_object(theGlobalDefault::get());
+}
+SvStream& ReadJobSetup( SvStream& rIStream, JobSetup& rJobSetup )
+{
{
sal_uInt16 nLen = 0;
rIStream.ReadUInt16( nLen );
@@ -239,22 +246,15 @@ SvStream& ReadJobSetup( SvStream& rIStream, JobSetup& rJobSetup )
if (nRead >= sizeof(ImplOldJobSetupData))
{
ImplOldJobSetupData* pData = reinterpret_cast<ImplOldJobSetupData*>(pTempBuf.get());
- if ( rJobSetup.mpData )
- {
- if ( rJobSetup.mpData->mnRefCount == 1 )
- delete rJobSetup.mpData;
- else
- rJobSetup.mpData->mnRefCount--;
- }
rtl_TextEncoding aStreamEncoding = RTL_TEXTENCODING_UTF8;
if( nSystem == JOBSET_FILE364_SYSTEM )
aStreamEncoding = rIStream.GetStreamCharSet();
- rJobSetup.mpData = new ImplJobSetup;
- ImplJobSetup* pJobData = rJobSetup.mpData;
- pJobData->maPrinterName = OStringToOUString(pData->cPrinterName, aStreamEncoding);
- pJobData->maDriver = OStringToOUString(pData->cDriverName, aStreamEncoding);
+ ImplJobSetup& rJobData = rJobSetup.ImplGetData();
+
+ rJobData.SetPrinterName( OStringToOUString(pData->cPrinterName, aStreamEncoding) );
+ rJobData.SetDriver( OStringToOUString(pData->cDriverName, aStreamEncoding) );
// Are these our new JobSetup files?
if ( nSystem == JOBSET_FILE364_SYSTEM ||
@@ -262,23 +262,26 @@ SvStream& ReadJobSetup( SvStream& rIStream, JobSetup& rJobSetup )
{
Impl364JobSetupData* pOldJobData = reinterpret_cast<Impl364JobSetupData*>(pTempBuf.get() + sizeof( ImplOldJobSetupData ));
sal_uInt16 nOldJobDataSize = SVBT16ToShort( pOldJobData->nSize );
- pJobData->mnSystem = SVBT16ToShort( pOldJobData->nSystem );
- pJobData->mnDriverDataLen = SVBT32ToUInt32( pOldJobData->nDriverDataLen );
- pJobData->meOrientation = (Orientation)SVBT16ToShort( pOldJobData->nOrientation );
- pJobData->meDuplexMode = DUPLEX_UNKNOWN;
- pJobData->mnPaperBin = SVBT16ToShort( pOldJobData->nPaperBin );
- pJobData->mePaperFormat = (Paper)SVBT16ToShort( pOldJobData->nPaperFormat );
- pJobData->mnPaperWidth = (long)SVBT32ToUInt32( pOldJobData->nPaperWidth );
- pJobData->mnPaperHeight = (long)SVBT32ToUInt32( pOldJobData->nPaperHeight );
- if ( pJobData->mnDriverDataLen )
+ rJobData.SetSystem( SVBT16ToShort( pOldJobData->nSystem ) );
+ rJobData.SetDriverDataLen( SVBT32ToUInt32( pOldJobData->nDriverDataLen ) );
+ rJobData.SetOrientation( (Orientation)SVBT16ToShort( pOldJobData->nOrientation ) );
+ rJobData.SetDuplexMode( DUPLEX_UNKNOWN );
+ rJobData.SetPaperBin( SVBT16ToShort( pOldJobData->nPaperBin ) );
+ rJobData.SetPaperFormat( (Paper)SVBT16ToShort( pOldJobData->nPaperFormat ) );
+ rJobData.SetPaperWidth( (long)SVBT32ToUInt32( pOldJobData->nPaperWidth ) );
+ rJobData.SetPaperHeight( (long)SVBT32ToUInt32( pOldJobData->nPaperHeight ) );
+ if ( rJobData.GetDriverDataLen() )
{
- sal_uInt8* pDriverData = reinterpret_cast<sal_uInt8*>(pOldJobData) + nOldJobDataSize;
- pJobData->mpDriverData = static_cast<sal_uInt8*>(rtl_allocateMemory( pJobData->mnDriverDataLen ));
- memcpy( pJobData->mpDriverData, pDriverData, pJobData->mnDriverDataLen );
+ const sal_uInt8* pDriverData = reinterpret_cast<sal_uInt8*>(pOldJobData) + nOldJobDataSize;
+ sal_uInt8* pNewDriverData = static_cast<sal_uInt8*>(
+ rtl_allocateMemory( rJobData.GetDriverDataLen() ));
+ memcpy( pNewDriverData, pDriverData, rJobData.GetDriverDataLen() );
+ rJobData.SetDriverData( pNewDriverData );
}
if( nSystem == JOBSET_FILE605_SYSTEM )
{
- rIStream.Seek( nFirstPos + sizeof( ImplOldJobSetupData ) + sizeof( Impl364JobSetupData ) + pJobData->mnDriverDataLen );
+ rIStream.Seek( nFirstPos + sizeof( ImplOldJobSetupData ) +
+ sizeof( Impl364JobSetupData ) + rJobData.GetDriverDataLen() );
while( rIStream.Tell() < nFirstPos + nRead )
{
OUString aKey = read_uInt16_lenPrefixed_uInt8s_ToOUString(rIStream, RTL_TEXTENCODING_UTF8);
@@ -286,16 +289,16 @@ SvStream& ReadJobSetup( SvStream& rIStream, JobSetup& rJobSetup )
if( aKey == "COMPAT_DUPLEX_MODE" )
{
if( aValue == "DUPLEX_UNKNOWN" )
- pJobData->meDuplexMode = DUPLEX_UNKNOWN;
+ rJobData.SetDuplexMode( DUPLEX_UNKNOWN );
else if( aValue == "DUPLEX_OFF" )
- pJobData->meDuplexMode = DUPLEX_OFF;
+ rJobData.SetDuplexMode( DUPLEX_OFF );
else if( aValue == "DUPLEX_SHORTEDGE" )
- pJobData->meDuplexMode = DUPLEX_SHORTEDGE;
+ rJobData.SetDuplexMode( DUPLEX_SHORTEDGE );
else if( aValue == "DUPLEX_LONGEDGE" )
- pJobData->meDuplexMode = DUPLEX_LONGEDGE;
+ rJobData.SetDuplexMode( DUPLEX_LONGEDGE );
}
else
- pJobData->maValueMap[ aKey ] = aValue;
+ rJobData.SetValueMap(aKey, aValue);
}
SAL_WARN_IF( rIStream.Tell() != nFirstPos+nRead, "vcl", "corrupted job setup" );
// ensure correct stream position
@@ -310,48 +313,50 @@ SvStream& ReadJobSetup( SvStream& rIStream, JobSetup& rJobSetup )
SvStream& WriteJobSetup( SvStream& rOStream, const JobSetup& rJobSetup )
{
-
{
sal_uInt16 nLen = 0;
- if ( !rJobSetup.mpData )
+ if ( rJobSetup.IsDefault() )
rOStream.WriteUInt16( nLen );
else
{
sal_uInt16 nSystem = JOBSET_FILE605_SYSTEM;
- const ImplJobSetup* pJobData = rJobSetup.ImplGetConstData();
+ const ImplJobSetup& rJobData = rJobSetup.ImplGetConstData();
Impl364JobSetupData aOldJobData;
sal_uInt16 nOldJobDataSize = sizeof( aOldJobData );
ShortToSVBT16( nOldJobDataSize, aOldJobData.nSize );
- ShortToSVBT16( pJobData->mnSystem, aOldJobData.nSystem );
- UInt32ToSVBT32( pJobData->mnDriverDataLen, aOldJobData.nDriverDataLen );
- ShortToSVBT16( (sal_uInt16)(pJobData->meOrientation), aOldJobData.nOrientation );
- ShortToSVBT16( pJobData->mnPaperBin, aOldJobData.nPaperBin );
- ShortToSVBT16( (sal_uInt16)(pJobData->mePaperFormat), aOldJobData.nPaperFormat );
- UInt32ToSVBT32( (sal_uLong)(pJobData->mnPaperWidth), aOldJobData.nPaperWidth );
- UInt32ToSVBT32( (sal_uLong)(pJobData->mnPaperHeight), aOldJobData.nPaperHeight );
+ ShortToSVBT16( rJobData.GetSystem(), aOldJobData.nSystem );
+ UInt32ToSVBT32( rJobData.GetDriverDataLen(), aOldJobData.nDriverDataLen );
+ ShortToSVBT16( (sal_uInt16)(rJobData.GetOrientation()), aOldJobData.nOrientation );
+ ShortToSVBT16( rJobData.GetPaperBin(), aOldJobData.nPaperBin );
+ ShortToSVBT16( (sal_uInt16)(rJobData.GetPaperFormat()), aOldJobData.nPaperFormat );
+ UInt32ToSVBT32( (sal_uLong)(rJobData.GetPaperWidth()), aOldJobData.nPaperWidth );
+ UInt32ToSVBT32( (sal_uLong)(rJobData.GetPaperHeight()), aOldJobData.nPaperHeight );
ImplOldJobSetupData aOldData;
memset( &aOldData, 0, sizeof( aOldData ) );
- OString aPrnByteName(OUStringToOString(rJobSetup.GetPrinterName(), RTL_TEXTENCODING_UTF8));
+ OString aPrnByteName(OUStringToOString(rJobData.GetPrinterName(), RTL_TEXTENCODING_UTF8));
strncpy( aOldData.cPrinterName, aPrnByteName.getStr(), 63 );
- OString aDriverByteName(OUStringToOString(rJobSetup.GetDriverName(), RTL_TEXTENCODING_UTF8));
+ OString aDriverByteName(OUStringToOString(rJobData.GetDriver(), RTL_TEXTENCODING_UTF8));
strncpy( aOldData.cDriverName, aDriverByteName.getStr(), 31 );
-// nLen = sizeof( aOldData ) + 4 + nOldJobDataSize + pJobData->mnDriverDataLen;
int nPos = rOStream.Tell();
- rOStream.WriteUInt16( nLen );
+ rOStream.WriteUInt16( 0 );
rOStream.WriteUInt16( nSystem );
rOStream.WriteBytes( &aOldData, sizeof( aOldData ) );
rOStream.WriteBytes( &aOldJobData, nOldJobDataSize );
- rOStream.WriteBytes( pJobData->mpDriverData, pJobData->mnDriverDataLen );
+ rOStream.WriteBytes( rJobData.GetDriverData(), rJobData.GetDriverDataLen() );
+
std::unordered_map< OUString, OUString, OUStringHash >::const_iterator it;
- for( it = pJobData->maValueMap.begin(); it != pJobData->maValueMap.end(); ++it )
+ const std::unordered_map< OUString, OUString, OUStringHash >& rValueMap(
+ rJobData.GetValueMap());
+
+ for( it = rValueMap.begin(); it != rValueMap.end(); ++it )
{
write_uInt16_lenPrefixed_uInt8s_FromOUString(rOStream, it->first, RTL_TEXTENCODING_UTF8);
write_uInt16_lenPrefixed_uInt8s_FromOUString(rOStream, it->second, RTL_TEXTENCODING_UTF8);
}
write_uInt16_lenPrefixed_uInt8s_FromOString(rOStream, "COMPAT_DUPLEX_MODE");
- switch( pJobData->meDuplexMode )
+ switch( rJobData.GetDuplexMode() )
{
case DUPLEX_UNKNOWN:
write_uInt16_lenPrefixed_uInt8s_FromOString(rOStream, "DUPLEX_UNKNOWN");
diff --git a/vcl/source/gdi/print.cxx b/vcl/source/gdi/print.cxx
index 23c93681df66..43bc44b3e244 100644
--- a/vcl/source/gdi/print.cxx
+++ b/vcl/source/gdi/print.cxx
@@ -65,23 +65,24 @@ namespace
void ImplUpdateJobSetupPaper( JobSetup& rJobSetup )
{
- const ImplJobSetup* pConstData = rJobSetup.ImplGetConstData();
+ const ImplJobSetup& rConstData = rJobSetup.ImplGetConstData();
- if ( !pConstData->mnPaperWidth || !pConstData->mnPaperHeight )
+ if ( !rConstData.GetPaperWidth() || !rConstData.GetPaperHeight() )
{
- if ( pConstData->mePaperFormat != PAPER_USER )
+ if ( rConstData.GetPaperFormat() != PAPER_USER )
{
- ImplJobSetup* pData = rJobSetup.ImplGetData();
- PaperInfo aInfo(pConstData->mePaperFormat);
- pData->mnPaperWidth = aInfo.getWidth();
- pData->mnPaperHeight = aInfo.getHeight();
+ PaperInfo aInfo(rConstData.GetPaperFormat());
+
+ ImplJobSetup& rData = rJobSetup.ImplGetData();
+ rData.SetPaperWidth( aInfo.getWidth() );
+ rData.SetPaperHeight( aInfo.getHeight() );
}
}
- else if ( pConstData->mePaperFormat == PAPER_USER )
+ else if ( rConstData.GetPaperFormat() == PAPER_USER )
{
- Paper ePaper = ImplGetPaperFormat( pConstData->mnPaperWidth, pConstData->mnPaperHeight );
+ Paper ePaper = ImplGetPaperFormat( rConstData.GetPaperWidth(), rConstData.GetPaperHeight() );
if ( ePaper != PAPER_USER )
- rJobSetup.ImplGetData()->mePaperFormat = ePaper;
+ rJobSetup.ImplGetData().SetPaperFormat(ePaper);
}
}
@@ -683,16 +684,15 @@ void Printer::ImplInit( SalPrinterQueueInfo* pInfo )
pSVData->mpDefInst->GetPrinterQueueState( pInfo );
// Test whether the driver actually matches the JobSetup
- ImplJobSetup* pJobSetup = maJobSetup.ImplGetData();
-
- if ( pJobSetup->mpDriverData )
+ ImplJobSetup& rData = maJobSetup.ImplGetData();
+ if ( rData.GetDriverData() )
{
- if ( (pJobSetup->maPrinterName != pInfo->maPrinterName) ||
- (pJobSetup->maDriver != pInfo->maDriver) )
+ if ( rData.GetPrinterName() != pInfo->maPrinterName ||
+ rData.GetDriver() != pInfo->maDriver )
{
- rtl_freeMemory( pJobSetup->mpDriverData );
- pJobSetup->mpDriverData = nullptr;
- pJobSetup->mnDriverDataLen = 0;
+ rtl_freeMemory( const_cast<sal_uInt8*>(rData.GetDriverData()) );
+ rData.SetDriverData(nullptr);
+ rData.SetDriverDataLen(0);
}
}
@@ -701,10 +701,10 @@ void Printer::ImplInit( SalPrinterQueueInfo* pInfo )
maDriver = pInfo->maDriver;
// Add printer name to JobSetup
- pJobSetup->maPrinterName = maPrinterName;
- pJobSetup->maDriver = maDriver;
+ rData.SetPrinterName( maPrinterName );
+ rData.SetDriver( maDriver );
- mpInfoPrinter = pSVData->mpDefInst->CreateInfoPrinter( pInfo, pJobSetup );
+ mpInfoPrinter = pSVData->mpDefInst->CreateInfoPrinter( pInfo, &rData );
mpPrinter = nullptr;
mpJobGraphics = nullptr;
ImplUpdateJobSetupPaper( maJobSetup );
@@ -884,7 +884,7 @@ void Printer::ImplUpdatePageData()
return;
mpGraphics->GetResolution( mnDPIX, mnDPIY );
- mpInfoPrinter->GetPageInfo( maJobSetup.ImplGetConstData(),
+ mpInfoPrinter->GetPageInfo( &maJobSetup.ImplGetConstData(),
mnOutWidth, mnOutHeight,
maPageOffset.X(), maPageOffset.Y(),
maPaperSize.Width(), maPaperSize.Height() );
@@ -921,8 +921,10 @@ Printer::Printer( const JobSetup& rJobSetup ) :
maJobSetup( rJobSetup )
{
ImplInitData();
- SalPrinterQueueInfo* pInfo = ImplGetQueueInfo( rJobSetup.mpData->maPrinterName,
- &rJobSetup.mpData->maDriver );
+ const ImplJobSetup& rConstData = rJobSetup.ImplGetConstData();
+ OUString aDriver = rConstData.GetDriver();
+ SalPrinterQueueInfo* pInfo = ImplGetQueueInfo( rConstData.GetPrinterName(),
+ &aDriver );
if ( pInfo )
{
ImplInit( pInfo );
@@ -1021,7 +1023,7 @@ sal_uInt32 Printer::GetCapabilities( PrinterCapType nType ) const
return 0;
if( mpInfoPrinter )
- return mpInfoPrinter->GetCapabilities( maJobSetup.ImplGetConstData(), nType );
+ return mpInfoPrinter->GetCapabilities( &maJobSetup.ImplGetConstData(), nType );
else
return 0;
}
@@ -1061,7 +1063,7 @@ bool Printer::SetJobSetup( const JobSetup& rSetup )
JobSetup aJobSetup = rSetup;
ReleaseGraphics();
- if ( mpInfoPrinter->SetPrinterData( aJobSetup.ImplGetData() ) )
+ if ( mpInfoPrinter->SetPrinterData( &aJobSetup.ImplGetData() ) )
{
ImplUpdateJobSetupPaper( aJobSetup );
mbNewJobSetup = true;
@@ -1083,8 +1085,8 @@ bool Printer::Setup( vcl::Window* pWindow, bool bPapersizeFromSetup )
return false;
JobSetup aJobSetup = maJobSetup;
- ImplJobSetup* pData = aJobSetup.ImplGetData();
- pData->mbPapersizeFromSetup = bPapersizeFromSetup;
+ ImplJobSetup& rData = aJobSetup.ImplGetData();
+ rData.SetPapersizeFromSetup( bPapersizeFromSetup );
SalFrame* pFrame;
if ( !pWindow )
pWindow = ImplGetDefaultWindow();
@@ -1096,7 +1098,7 @@ bool Printer::Setup( vcl::Window* pWindow, bool bPapersizeFromSetup )
ImplSVData* pSVData = ImplGetSVData();
pSVData->maAppData.mnModalMode++;
nImplSysDialog++;
- bool bSetup = mpInfoPrinter->Setup( pFrame, pData );
+ bool bSetup = mpInfoPrinter->Setup( pFrame, &rData );
pSVData->maAppData.mnModalMode--;
nImplSysDialog--;
if ( bSetup )
@@ -1222,11 +1224,12 @@ bool Printer::SetOrientation( Orientation eOrientation )
if ( mbInPrintPage )
return false;
- if ( maJobSetup.ImplGetConstData()->meOrientation != eOrientation )
+ if ( maJobSetup.ImplGetConstData().GetOrientation() != eOrientation )
{
- JobSetup aJobSetup = maJobSetup;
- ImplJobSetup* pSetupData = aJobSetup.ImplGetData();
- pSetupData->meOrientation = eOrientation;
+ JobSetup aJobSetup = maJobSetup;
+ ImplJobSetup& rData = aJobSetup.ImplGetData();
+
+ rData.SetOrientation(eOrientation);
if ( IsDisplayPrinter() )
{
@@ -1236,7 +1239,7 @@ bool Printer::SetOrientation( Orientation eOrientation )
}
ReleaseGraphics();
- if ( mpInfoPrinter->SetData( JobSetFlags::ORIENTATION, pSetupData ) )
+ if ( mpInfoPrinter->SetData( JobSetFlags::ORIENTATION, &rData ) )
{
ImplUpdateJobSetupPaper( aJobSetup );
mbNewJobSetup = true;
@@ -1254,7 +1257,7 @@ bool Printer::SetOrientation( Orientation eOrientation )
Orientation Printer::GetOrientation() const
{
- return maJobSetup.ImplGetConstData()->meOrientation;
+ return maJobSetup.ImplGetConstData().GetOrientation();
}
bool Printer::SetPaperBin( sal_uInt16 nPaperBin )
@@ -1262,12 +1265,12 @@ bool Printer::SetPaperBin( sal_uInt16 nPaperBin )
if ( mbInPrintPage )
return false;
- if ( (maJobSetup.ImplGetConstData()->mnPaperBin != nPaperBin) &&
- (nPaperBin < GetPaperBinCount()) )
+ if ( maJobSetup.ImplGetConstData().GetPaperBin() != nPaperBin &&
+ nPaperBin < GetPaperBinCount() )
{
- JobSetup aJobSetup = maJobSetup;
- ImplJobSetup* pSetupData = aJobSetup.ImplGetData();
- pSetupData->mnPaperBin = nPaperBin;
+ JobSetup aJobSetup = maJobSetup;
+ ImplJobSetup& rData = aJobSetup.ImplGetData();
+ rData.SetPaperBin(nPaperBin);
if ( IsDisplayPrinter() )
{
@@ -1277,7 +1280,7 @@ bool Printer::SetPaperBin( sal_uInt16 nPaperBin )
}
ReleaseGraphics();
- if ( mpInfoPrinter->SetData( JobSetFlags::PAPERBIN, pSetupData ) )
+ if ( mpInfoPrinter->SetData( JobSetFlags::PAPERBIN, &rData ) )
{
ImplUpdateJobSetupPaper( aJobSetup );
mbNewJobSetup = true;
@@ -1295,19 +1298,19 @@ bool Printer::SetPaperBin( sal_uInt16 nPaperBin )
sal_uInt16 Printer::GetPaperBin() const
{
- return maJobSetup.ImplGetConstData()->mnPaperBin;
+ return maJobSetup.ImplGetConstData().GetPaperBin();
}
// Map user paper format to a available printer paper formats
void Printer::ImplFindPaperFormatForUserSize( JobSetup& aJobSetup, bool bMatchNearest )
{
- ImplJobSetup* pSetupData = aJobSetup.ImplGetData();
+ ImplJobSetup& rData = aJobSetup.ImplGetData();
int nLandscapeAngle = GetLandscapeAngle();
int nPaperCount = GetPaperInfoCount();
bool bFound = false;
- PaperInfo aInfo(pSetupData->mnPaperWidth, pSetupData->mnPaperHeight);
+ PaperInfo aInfo(rData.GetPaperWidth(), rData.GetPaperHeight());
// Compare all paper formats and get the appropriate one
for ( int i = 0; i < nPaperCount; i++ )
@@ -1316,9 +1319,10 @@ void Printer::ImplFindPaperFormatForUserSize( JobSetup& aJobSetup, bool bMatchNe
if ( aInfo.sloppyEqual(rPaperInfo) )
{
- pSetupData->mePaperFormat = ImplGetPaperFormat( rPaperInfo.getWidth(),
- rPaperInfo.getHeight() );
- pSetupData->meOrientation = ORIENTATION_PORTRAIT;
+ rData.SetPaperFormat(
+ ImplGetPaperFormat( rPaperInfo.getWidth(),
+ rPaperInfo.getHeight() ));
+ rData.SetOrientation( ORIENTATION_PORTRAIT );
bFound = true;
break;
}
@@ -1327,12 +1331,12 @@ void Printer::ImplFindPaperFormatForUserSize( JobSetup& aJobSetup, bool bMatchNe
// If the printer supports landscape orientation, check paper sizes again
// with landscape orientation. This is necessary as a printer driver provides
// all paper sizes with portrait orientation only!!
- if ( pSetupData->mePaperFormat == PAPER_USER &&
+ if ( rData.GetPaperFormat() == PAPER_USER &&
nLandscapeAngle != 0 &&
HasSupport( PrinterSupport::SetOrientation ))
{
- const long nRotatedWidth = pSetupData->mnPaperHeight;
- const long nRotatedHeight = pSetupData->mnPaperWidth;
+ const long nRotatedWidth = rData.GetPaperHeight();
+ const long nRotatedHeight = rData.GetPaperWidth();
PaperInfo aRotatedInfo(nRotatedWidth, nRotatedHeight);
for ( int i = 0; i < nPaperCount; i++ )
@@ -1341,9 +1345,10 @@ void Printer::ImplFindPaperFormatForUserSize( JobSetup& aJobSetup, bool bMatchNe
if ( aRotatedInfo.sloppyEqual( rPaperInfo ) )
{
- pSetupData->mePaperFormat = ImplGetPaperFormat( rPaperInfo.getWidth(),
- rPaperInfo.getHeight() );
- pSetupData->meOrientation = ORIENTATION_LANDSCAPE;
+ rData.SetPaperFormat(
+ ImplGetPaperFormat( rPaperInfo.getWidth(),
+ rPaperInfo.getHeight() ));
+ rData.SetOrientation( ORIENTATION_LANDSCAPE );
bFound = true;
break;
}
@@ -1360,8 +1365,8 @@ void Printer::ImplFindPaperFormatForUserSize( JobSetup& aJobSetup, bool bMatchNe
const PaperInfo& rPaperInfo = GetPaperInfo( i );
// check portrait match
- sal_Int64 nDX = pSetupData->mnPaperWidth - rPaperInfo.getWidth();
- sal_Int64 nDY = pSetupData->mnPaperHeight - rPaperInfo.getHeight();
+ sal_Int64 nDX = rData.GetPaperWidth() - rPaperInfo.getWidth();
+ sal_Int64 nDY = rData.GetPaperHeight() - rPaperInfo.getHeight();
sal_Int64 nMatch = nDX*nDX + nDY*nDY;
if( nMatch < nBestMatch )
{
@@ -1371,8 +1376,8 @@ void Printer::ImplFindPaperFormatForUserSize( JobSetup& aJobSetup, bool bMatchNe
}
// check landscape match
- nDX = pSetupData->mnPaperWidth - rPaperInfo.getHeight();
- nDY = pSetupData->mnPaperHeight - rPaperInfo.getWidth();
+ nDX = rData.GetPaperWidth() - rPaperInfo.getHeight();
+ nDY = rData.GetPaperHeight() - rPaperInfo.getWidth();
nMatch = nDX*nDX + nDY*nDY;
if( nMatch < nBestMatch )
{
@@ -1382,9 +1387,10 @@ void Printer::ImplFindPaperFormatForUserSize( JobSetup& aJobSetup, bool bMatchNe
}
}
const PaperInfo& rBestInfo = GetPaperInfo( nBestIndex );
- pSetupData->mePaperFormat = ImplGetPaperFormat( rBestInfo.getWidth(),
- rBestInfo.getHeight() );
- pSetupData->meOrientation = eBestOrientation;
+ rData.SetPaperFormat(
+ ImplGetPaperFormat( rBestInfo.getWidth(),
+ rBestInfo.getHeight() ));
+ rData.SetOrientation(eBestOrientation);
}
}
@@ -1393,16 +1399,17 @@ bool Printer::SetPaper( Paper ePaper )
if ( mbInPrintPage )
return false;
- if ( maJobSetup.ImplGetConstData()->mePaperFormat != ePaper )
+ if ( maJobSetup.ImplGetConstData().GetPaperFormat() != ePaper )
{
- JobSetup aJobSetup = maJobSetup;
- ImplJobSetup* pSetupData = aJobSetup.ImplGetData();
- pSetupData->mePaperFormat = ePaper;
+ JobSetup aJobSetup = maJobSetup;
+ ImplJobSetup& rData = aJobSetup.ImplGetData();
+
+ rData.SetPaperFormat( ePaper );
if ( ePaper != PAPER_USER )
{
PaperInfo aInfo(ePaper);
- pSetupData->mnPaperWidth = aInfo.getWidth();
- pSetupData->mnPaperHeight = aInfo.getHeight();
+ rData.SetPaperWidth( aInfo.getWidth() );
+ rData.SetPaperHeight( aInfo.getHeight() );
}
if ( IsDisplayPrinter() )
@@ -1415,7 +1422,7 @@ bool Printer::SetPaper( Paper ePaper )
ReleaseGraphics();
if ( ePaper == PAPER_USER )
ImplFindPaperFormatForUserSize( aJobSetup, false );
- if ( mpInfoPrinter->SetData( JobSetFlags::PAPERSIZE | JobSetFlags::ORIENTATION, pSetupData ) )
+ if ( mpInfoPrinter->SetData( JobSetFlags::PAPERSIZE | JobSetFlags::ORIENTATION, &rData ))
{
ImplUpdateJobSetupPaper( aJobSetup );
mbNewJobSetup = true;
@@ -1443,29 +1450,29 @@ bool Printer::SetPaperSizeUser( const Size& rSize, bool bMatchNearest )
const Size aPixSize = LogicToPixel( rSize );
const Size aPageSize = PixelToLogic( aPixSize, MAP_100TH_MM );
- bool bNeedToChange(maJobSetup.ImplGetConstData()->mnPaperWidth != aPageSize.Width() ||
- maJobSetup.ImplGetConstData()->mnPaperHeight != aPageSize.Height());
+ bool bNeedToChange(maJobSetup.ImplGetConstData().GetPaperWidth() != aPageSize.Width() ||
+ maJobSetup.ImplGetConstData().GetPaperHeight() != aPageSize.Height());
if(!bNeedToChange)
{
// #i122984# only need to change when Paper is different from PAPER_USER and
// the mapped Paper which will created below in the call to ImplFindPaperFormatForUserSize
- // and will replace maJobSetup.ImplGetConstData()->mePaperFormat. This leads to
+ // and will replace maJobSetup.ImplGetConstData()->GetPaperFormat(). This leads to
// unnecessary JobSetups, e.g. when printing a multi-page fax, but also with
// normal print
const Paper aPaper = ImplGetPaperFormat(aPageSize.Width(), aPageSize.Height());
- bNeedToChange = maJobSetup.ImplGetConstData()->mePaperFormat != PAPER_USER &&
- maJobSetup.ImplGetConstData()->mePaperFormat != aPaper;
+ bNeedToChange = maJobSetup.ImplGetConstData().GetPaperFormat() != PAPER_USER &&
+ maJobSetup.ImplGetConstData().GetPaperFormat() != aPaper;
}
if(bNeedToChange)
{
- JobSetup aJobSetup = maJobSetup;
- ImplJobSetup* pSetupData = aJobSetup.ImplGetData();
- pSetupData->mePaperFormat = PAPER_USER;
- pSetupData->mnPaperWidth = aPageSize.Width();
- pSetupData->mnPaperHeight = aPageSize.Height();
+ JobSetup aJobSetup = maJobSetup;
+ ImplJobSetup& rData = aJobSetup.ImplGetData();
+ rData.SetPaperFormat( PAPER_USER );
+ rData.SetPaperWidth( aPageSize.Width() );
+ rData.SetPaperHeight( aPageSize.Height() );
if ( IsDisplayPrinter() )
{
@@ -1478,7 +1485,7 @@ bool Printer::SetPaperSizeUser( const Size& rSize, bool bMatchNearest )
ImplFindPaperFormatForUserSize( aJobSetup, bMatchNearest );
// Changing the paper size can also change the orientation!
- if ( mpInfoPrinter->SetData( JobSetFlags::PAPERSIZE | JobSetFlags::ORIENTATION, pSetupData ) )
+ if ( mpInfoPrinter->SetData( JobSetFlags::PAPERSIZE | JobSetFlags::ORIENTATION, &rData ))
{
ImplUpdateJobSetupPaper( aJobSetup );
mbNewJobSetup = true;
@@ -1499,7 +1506,7 @@ int Printer::GetPaperInfoCount() const
if( ! mpInfoPrinter )
return 0;
if( ! mpInfoPrinter->m_bPapersInit )
- mpInfoPrinter->InitPaperFormats( maJobSetup.ImplGetConstData() );
+ mpInfoPrinter->InitPaperFormats( &maJobSetup.ImplGetConstData() );
return mpInfoPrinter->m_aPaperFormats.size();
}
@@ -1547,7 +1554,7 @@ const PaperInfo& Printer::GetPaperInfo( int nPaper ) const
if( ! mpInfoPrinter )
return ImplGetEmptyPaper();
if( ! mpInfoPrinter->m_bPapersInit )
- mpInfoPrinter->InitPaperFormats( maJobSetup.ImplGetConstData() );
+ mpInfoPrinter->InitPaperFormats( &maJobSetup.ImplGetConstData() );
if( mpInfoPrinter->m_aPaperFormats.empty() || nPaper < 0 || nPaper >= int(mpInfoPrinter->m_aPaperFormats.size()) )
return ImplGetEmptyPaper();
return mpInfoPrinter->m_aPaperFormats[nPaper];
@@ -1558,11 +1565,12 @@ bool Printer::SetDuplexMode( DuplexMode eDuplex )
if ( mbInPrintPage )
return false;
- if ( maJobSetup.ImplGetConstData()->meDuplexMode != eDuplex )
+ if ( maJobSetup.ImplGetConstData().GetDuplexMode() != eDuplex )
{
- JobSetup aJobSetup = maJobSetup;
- ImplJobSetup* pSetupData = aJobSetup.ImplGetData();
- pSetupData->meDuplexMode = eDuplex;
+ JobSetup aJobSetup = maJobSetup;
+ ImplJobSetup& rData = aJobSetup.ImplGetData();
+
+ rData.SetDuplexMode( eDuplex );
if ( IsDisplayPrinter() )
{
@@ -1572,7 +1580,7 @@ bool Printer::SetDuplexMode( DuplexMode eDuplex )
}
ReleaseGraphics();
- if ( mpInfoPrinter->SetData( JobSetFlags::DUPLEXMODE, pSetupData ) )
+ if ( mpInfoPrinter->SetData( JobSetFlags::DUPLEXMODE, &rData ) )
{
ImplUpdateJobSetupPaper( aJobSetup );
mbNewJobSetup = true;
@@ -1590,12 +1598,12 @@ bool Printer::SetDuplexMode( DuplexMode eDuplex )
int Printer::GetLandscapeAngle() const
{
- return mpInfoPrinter ? mpInfoPrinter->GetLandscapeAngle( maJobSetup.ImplGetConstData() ) : 900;
+ return mpInfoPrinter ? mpInfoPrinter->GetLandscapeAngle( &maJobSetup.ImplGetConstData() ) : 900;
}
Paper Printer::GetPaper() const
{
- return maJobSetup.ImplGetConstData()->mePaperFormat;
+ return maJobSetup.ImplGetConstData().GetPaperFormat();
}
sal_uInt16 Printer::GetPaperBinCount() const
@@ -1603,7 +1611,7 @@ sal_uInt16 Printer::GetPaperBinCount() const
if ( IsDisplayPrinter() )
return 0;
- return (sal_uInt16)mpInfoPrinter->GetPaperBinCount( maJobSetup.ImplGetConstData() );
+ return (sal_uInt16)mpInfoPrinter->GetPaperBinCount( &maJobSetup.ImplGetConstData() );
}
OUString Printer::GetPaperBinName( sal_uInt16 nPaperBin ) const
@@ -1612,7 +1620,7 @@ OUString Printer::GetPaperBinName( sal_uInt16 nPaperBin ) const
return OUString();
if ( nPaperBin < GetPaperBinCount() )
- return mpInfoPrinter->GetPaperBinName( maJobSetup.ImplGetConstData(), nPaperBin );
+ return mpInfoPrinter->GetPaperBinName( &maJobSetup.ImplGetConstData(), nPaperBin );
else
return OUString();
}
@@ -1682,7 +1690,8 @@ void Printer::ImplStartPage()
if ( mpPrinter )
{
- SalGraphics* pGraphics = mpPrinter->StartPage( maJobSetup.ImplGetConstData(), mbNewJobSetup );
+ SalGraphics* pGraphics = mpPrinter->StartPage( &maJobSetup.ImplGetData(),
+ mbNewJobSetup );
if ( pGraphics )
{
ReleaseGraphics();
diff --git a/vcl/source/gdi/print3.cxx b/vcl/source/gdi/print3.cxx
index 3bc2fccad964..f1f24aca4eaa 100644
--- a/vcl/source/gdi/print3.cxx
+++ b/vcl/source/gdi/print3.cxx
@@ -603,7 +603,7 @@ bool Printer::StartJob( const OUString& i_rJobName, std::shared_ptr<vcl::Printer
if( mpPrinter->StartJob( pPrintFile,
i_rJobName,
Application::GetDisplayName(),
- maJobSetup.ImplGetConstData(),
+ &maJobSetup.ImplGetData(),
*i_xController) )
{
EndJob();
@@ -660,7 +660,7 @@ bool Printer::StartJob( const OUString& i_rJobName, std::shared_ptr<vcl::Printer
nCopies,
bCollateCopy,
i_xController->isDirectPrint(),
- maJobSetup.ImplGetConstData() ) )
+ &maJobSetup.ImplGetData() ) )
{
bool bAborted = false;
mbJobActive = true;
diff --git a/vcl/source/window/printdlg.cxx b/vcl/source/window/printdlg.cxx
index 9699a1705734..e61d164a5e43 100644
--- a/vcl/source/window/printdlg.cxx
+++ b/vcl/source/window/printdlg.cxx
@@ -20,7 +20,6 @@
#include "printdlg.hxx"
#include "svdata.hxx"
#include "svids.hrc"
-#include "jobset.h"
#include <vcl/print.hxx>
#include <vcl/dialog.hxx>
@@ -35,6 +34,7 @@
#include <vcl/unohelp.hxx>
#include <vcl/settings.hxx>
#include <vcl/builderfactory.hxx>
+#include "jobset.h"
#include "unotools/localedatawrapper.hxx"