1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_vcl.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include <tools/debug.hxx> 32*cdf0e10cSrcweir #include <tools/stream.hxx> 33*cdf0e10cSrcweir 34*cdf0e10cSrcweir #include <rtl/alloc.h> 35*cdf0e10cSrcweir 36*cdf0e10cSrcweir #include <vcl/jobset.hxx> 37*cdf0e10cSrcweir 38*cdf0e10cSrcweir #include <jobset.h> 39*cdf0e10cSrcweir 40*cdf0e10cSrcweir // ======================================================================= 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir DBG_NAME( JobSetup ) 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir #define JOBSET_FILEFORMAT2 3780 45*cdf0e10cSrcweir #define JOBSET_FILE364_SYSTEM ((sal_uInt16)0xFFFF) 46*cdf0e10cSrcweir #define JOBSET_FILE605_SYSTEM ((sal_uInt16)0xFFFE) 47*cdf0e10cSrcweir 48*cdf0e10cSrcweir struct ImplOldJobSetupData 49*cdf0e10cSrcweir { 50*cdf0e10cSrcweir char cPrinterName[64]; 51*cdf0e10cSrcweir char cDeviceName[32]; 52*cdf0e10cSrcweir char cPortName[32]; 53*cdf0e10cSrcweir char cDriverName[32]; 54*cdf0e10cSrcweir }; 55*cdf0e10cSrcweir 56*cdf0e10cSrcweir struct Impl364JobSetupData 57*cdf0e10cSrcweir { 58*cdf0e10cSrcweir SVBT16 nSize; 59*cdf0e10cSrcweir SVBT16 nSystem; 60*cdf0e10cSrcweir SVBT32 nDriverDataLen; 61*cdf0e10cSrcweir SVBT16 nOrientation; 62*cdf0e10cSrcweir SVBT16 nPaperBin; 63*cdf0e10cSrcweir SVBT16 nPaperFormat; 64*cdf0e10cSrcweir SVBT32 nPaperWidth; 65*cdf0e10cSrcweir SVBT32 nPaperHeight; 66*cdf0e10cSrcweir }; 67*cdf0e10cSrcweir 68*cdf0e10cSrcweir // ======================================================================= 69*cdf0e10cSrcweir 70*cdf0e10cSrcweir ImplJobSetup::ImplJobSetup() 71*cdf0e10cSrcweir { 72*cdf0e10cSrcweir mnRefCount = 1; 73*cdf0e10cSrcweir mnSystem = 0; 74*cdf0e10cSrcweir meOrientation = ORIENTATION_PORTRAIT; 75*cdf0e10cSrcweir meDuplexMode = DUPLEX_UNKNOWN; 76*cdf0e10cSrcweir mnPaperBin = 0; 77*cdf0e10cSrcweir mePaperFormat = PAPER_USER; 78*cdf0e10cSrcweir mnPaperWidth = 0; 79*cdf0e10cSrcweir mnPaperHeight = 0; 80*cdf0e10cSrcweir mnDriverDataLen = 0; 81*cdf0e10cSrcweir mpDriverData = NULL; 82*cdf0e10cSrcweir } 83*cdf0e10cSrcweir 84*cdf0e10cSrcweir // ----------------------------------------------------------------------- 85*cdf0e10cSrcweir 86*cdf0e10cSrcweir ImplJobSetup::ImplJobSetup( const ImplJobSetup& rJobSetup ) : 87*cdf0e10cSrcweir maPrinterName( rJobSetup.maPrinterName ), 88*cdf0e10cSrcweir maDriver( rJobSetup.maDriver ) 89*cdf0e10cSrcweir { 90*cdf0e10cSrcweir mnRefCount = 1; 91*cdf0e10cSrcweir mnSystem = rJobSetup.mnSystem; 92*cdf0e10cSrcweir meOrientation = rJobSetup.meOrientation; 93*cdf0e10cSrcweir meDuplexMode = rJobSetup.meDuplexMode; 94*cdf0e10cSrcweir mnPaperBin = rJobSetup.mnPaperBin; 95*cdf0e10cSrcweir mePaperFormat = rJobSetup.mePaperFormat; 96*cdf0e10cSrcweir mnPaperWidth = rJobSetup.mnPaperWidth; 97*cdf0e10cSrcweir mnPaperHeight = rJobSetup.mnPaperHeight; 98*cdf0e10cSrcweir mnDriverDataLen = rJobSetup.mnDriverDataLen; 99*cdf0e10cSrcweir if ( rJobSetup.mpDriverData ) 100*cdf0e10cSrcweir { 101*cdf0e10cSrcweir mpDriverData = (sal_uInt8*)rtl_allocateMemory( mnDriverDataLen ); 102*cdf0e10cSrcweir memcpy( mpDriverData, rJobSetup.mpDriverData, mnDriverDataLen ); 103*cdf0e10cSrcweir } 104*cdf0e10cSrcweir else 105*cdf0e10cSrcweir mpDriverData = NULL; 106*cdf0e10cSrcweir maValueMap = rJobSetup.maValueMap; 107*cdf0e10cSrcweir } 108*cdf0e10cSrcweir 109*cdf0e10cSrcweir // ----------------------------------------------------------------------- 110*cdf0e10cSrcweir 111*cdf0e10cSrcweir ImplJobSetup::~ImplJobSetup() 112*cdf0e10cSrcweir { 113*cdf0e10cSrcweir rtl_freeMemory( mpDriverData ); 114*cdf0e10cSrcweir } 115*cdf0e10cSrcweir 116*cdf0e10cSrcweir // ======================================================================= 117*cdf0e10cSrcweir 118*cdf0e10cSrcweir ImplJobSetup* JobSetup::ImplGetData() 119*cdf0e10cSrcweir { 120*cdf0e10cSrcweir if ( !mpData ) 121*cdf0e10cSrcweir mpData = new ImplJobSetup; 122*cdf0e10cSrcweir else if ( mpData->mnRefCount != 1 ) 123*cdf0e10cSrcweir { 124*cdf0e10cSrcweir mpData->mnRefCount--; 125*cdf0e10cSrcweir mpData = new ImplJobSetup( *mpData ); 126*cdf0e10cSrcweir } 127*cdf0e10cSrcweir 128*cdf0e10cSrcweir return mpData; 129*cdf0e10cSrcweir } 130*cdf0e10cSrcweir 131*cdf0e10cSrcweir // ----------------------------------------------------------------------- 132*cdf0e10cSrcweir 133*cdf0e10cSrcweir ImplJobSetup* JobSetup::ImplGetConstData() 134*cdf0e10cSrcweir { 135*cdf0e10cSrcweir if ( !mpData ) 136*cdf0e10cSrcweir mpData = new ImplJobSetup; 137*cdf0e10cSrcweir return mpData; 138*cdf0e10cSrcweir } 139*cdf0e10cSrcweir 140*cdf0e10cSrcweir // ----------------------------------------------------------------------- 141*cdf0e10cSrcweir 142*cdf0e10cSrcweir const ImplJobSetup* JobSetup::ImplGetConstData() const 143*cdf0e10cSrcweir { 144*cdf0e10cSrcweir if ( !mpData ) 145*cdf0e10cSrcweir ((JobSetup*)this)->mpData = new ImplJobSetup; 146*cdf0e10cSrcweir return mpData; 147*cdf0e10cSrcweir } 148*cdf0e10cSrcweir 149*cdf0e10cSrcweir // ======================================================================= 150*cdf0e10cSrcweir 151*cdf0e10cSrcweir JobSetup::JobSetup() 152*cdf0e10cSrcweir { 153*cdf0e10cSrcweir DBG_CTOR( JobSetup, NULL ); 154*cdf0e10cSrcweir 155*cdf0e10cSrcweir mpData = NULL; 156*cdf0e10cSrcweir } 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir // ----------------------------------------------------------------------- 159*cdf0e10cSrcweir 160*cdf0e10cSrcweir JobSetup::JobSetup( const JobSetup& rJobSetup ) 161*cdf0e10cSrcweir { 162*cdf0e10cSrcweir DBG_CTOR( JobSetup, NULL ); 163*cdf0e10cSrcweir DBG_CHKOBJ( &rJobSetup, JobSetup, NULL ); 164*cdf0e10cSrcweir DBG_ASSERT( !rJobSetup.mpData || (rJobSetup.mpData->mnRefCount < 0xFFFE), "JobSetup: RefCount overflow" ); 165*cdf0e10cSrcweir 166*cdf0e10cSrcweir mpData = rJobSetup.mpData; 167*cdf0e10cSrcweir if ( mpData ) 168*cdf0e10cSrcweir mpData->mnRefCount++; 169*cdf0e10cSrcweir } 170*cdf0e10cSrcweir 171*cdf0e10cSrcweir // ----------------------------------------------------------------------- 172*cdf0e10cSrcweir 173*cdf0e10cSrcweir JobSetup::~JobSetup() 174*cdf0e10cSrcweir { 175*cdf0e10cSrcweir DBG_DTOR( JobSetup, NULL ); 176*cdf0e10cSrcweir 177*cdf0e10cSrcweir if ( mpData ) 178*cdf0e10cSrcweir { 179*cdf0e10cSrcweir if ( mpData->mnRefCount == 1 ) 180*cdf0e10cSrcweir delete mpData; 181*cdf0e10cSrcweir else 182*cdf0e10cSrcweir mpData->mnRefCount--; 183*cdf0e10cSrcweir } 184*cdf0e10cSrcweir } 185*cdf0e10cSrcweir 186*cdf0e10cSrcweir // ----------------------------------------------------------------------- 187*cdf0e10cSrcweir 188*cdf0e10cSrcweir XubString JobSetup::GetPrinterName() const 189*cdf0e10cSrcweir { 190*cdf0e10cSrcweir if ( mpData ) 191*cdf0e10cSrcweir return mpData->maPrinterName; 192*cdf0e10cSrcweir else 193*cdf0e10cSrcweir { 194*cdf0e10cSrcweir XubString aName; 195*cdf0e10cSrcweir return aName; 196*cdf0e10cSrcweir } 197*cdf0e10cSrcweir } 198*cdf0e10cSrcweir 199*cdf0e10cSrcweir // ----------------------------------------------------------------------- 200*cdf0e10cSrcweir 201*cdf0e10cSrcweir XubString JobSetup::GetDriverName() const 202*cdf0e10cSrcweir { 203*cdf0e10cSrcweir if ( mpData ) 204*cdf0e10cSrcweir return mpData->maDriver; 205*cdf0e10cSrcweir else 206*cdf0e10cSrcweir { 207*cdf0e10cSrcweir XubString aDriver; 208*cdf0e10cSrcweir return aDriver; 209*cdf0e10cSrcweir } 210*cdf0e10cSrcweir } 211*cdf0e10cSrcweir 212*cdf0e10cSrcweir // ----------------------------------------------------------------------- 213*cdf0e10cSrcweir 214*cdf0e10cSrcweir String JobSetup::GetValue( const String& rKey ) const 215*cdf0e10cSrcweir { 216*cdf0e10cSrcweir if( mpData ) 217*cdf0e10cSrcweir { 218*cdf0e10cSrcweir ::std::hash_map< ::rtl::OUString, ::rtl::OUString, ::rtl::OUStringHash >::const_iterator it; 219*cdf0e10cSrcweir it = mpData->maValueMap.find( rKey ); 220*cdf0e10cSrcweir return it != mpData->maValueMap.end() ? String( it->second ) : String(); 221*cdf0e10cSrcweir } 222*cdf0e10cSrcweir return String(); 223*cdf0e10cSrcweir } 224*cdf0e10cSrcweir 225*cdf0e10cSrcweir // ----------------------------------------------------------------------- 226*cdf0e10cSrcweir 227*cdf0e10cSrcweir void JobSetup::SetValue( const String& rKey, const String& rValue ) 228*cdf0e10cSrcweir { 229*cdf0e10cSrcweir if( ! mpData ) 230*cdf0e10cSrcweir mpData = new ImplJobSetup(); 231*cdf0e10cSrcweir 232*cdf0e10cSrcweir mpData->maValueMap[ rKey ] = rValue; 233*cdf0e10cSrcweir } 234*cdf0e10cSrcweir 235*cdf0e10cSrcweir // ----------------------------------------------------------------------- 236*cdf0e10cSrcweir 237*cdf0e10cSrcweir JobSetup& JobSetup::operator=( const JobSetup& rJobSetup ) 238*cdf0e10cSrcweir { 239*cdf0e10cSrcweir DBG_CHKTHIS( JobSetup, NULL ); 240*cdf0e10cSrcweir DBG_CHKOBJ( &rJobSetup, JobSetup, NULL ); 241*cdf0e10cSrcweir DBG_ASSERT( !rJobSetup.mpData || (rJobSetup.mpData->mnRefCount) < 0xFFFE, "JobSetup: RefCount overflow" ); 242*cdf0e10cSrcweir 243*cdf0e10cSrcweir // Zuerst Referenzcounter erhoehen, damit man sich selbst zuweisen kann 244*cdf0e10cSrcweir if ( rJobSetup.mpData ) 245*cdf0e10cSrcweir rJobSetup.mpData->mnRefCount++; 246*cdf0e10cSrcweir 247*cdf0e10cSrcweir // Wenn es keine statischen ImpDaten sind, dann loeschen, wenn es 248*cdf0e10cSrcweir // die letzte Referenz ist, sonst Referenzcounter decrementieren 249*cdf0e10cSrcweir if ( mpData ) 250*cdf0e10cSrcweir { 251*cdf0e10cSrcweir if ( mpData->mnRefCount == 1 ) 252*cdf0e10cSrcweir delete mpData; 253*cdf0e10cSrcweir else 254*cdf0e10cSrcweir mpData->mnRefCount--; 255*cdf0e10cSrcweir } 256*cdf0e10cSrcweir 257*cdf0e10cSrcweir mpData = rJobSetup.mpData; 258*cdf0e10cSrcweir 259*cdf0e10cSrcweir return *this; 260*cdf0e10cSrcweir } 261*cdf0e10cSrcweir 262*cdf0e10cSrcweir // ----------------------------------------------------------------------- 263*cdf0e10cSrcweir 264*cdf0e10cSrcweir sal_Bool JobSetup::operator==( const JobSetup& rJobSetup ) const 265*cdf0e10cSrcweir { 266*cdf0e10cSrcweir DBG_CHKTHIS( JobSetup, NULL ); 267*cdf0e10cSrcweir DBG_CHKOBJ( &rJobSetup, JobSetup, NULL ); 268*cdf0e10cSrcweir 269*cdf0e10cSrcweir if ( mpData == rJobSetup.mpData ) 270*cdf0e10cSrcweir return sal_True; 271*cdf0e10cSrcweir 272*cdf0e10cSrcweir if ( !mpData || !rJobSetup.mpData ) 273*cdf0e10cSrcweir return sal_False; 274*cdf0e10cSrcweir 275*cdf0e10cSrcweir ImplJobSetup* pData1 = mpData; 276*cdf0e10cSrcweir ImplJobSetup* pData2 = rJobSetup.mpData; 277*cdf0e10cSrcweir if ( (pData1->mnSystem == pData2->mnSystem) && 278*cdf0e10cSrcweir (pData1->maPrinterName == pData2->maPrinterName) && 279*cdf0e10cSrcweir (pData1->maDriver == pData2->maDriver) && 280*cdf0e10cSrcweir (pData1->meOrientation == pData2->meOrientation) && 281*cdf0e10cSrcweir (pData1->meDuplexMode == pData2->meDuplexMode) && 282*cdf0e10cSrcweir (pData1->mnPaperBin == pData2->mnPaperBin) && 283*cdf0e10cSrcweir (pData1->mePaperFormat == pData2->mePaperFormat) && 284*cdf0e10cSrcweir (pData1->mnPaperWidth == pData2->mnPaperWidth) && 285*cdf0e10cSrcweir (pData1->mnPaperHeight == pData2->mnPaperHeight) && 286*cdf0e10cSrcweir (pData1->mnDriverDataLen == pData2->mnDriverDataLen) && 287*cdf0e10cSrcweir (memcmp( pData1->mpDriverData, pData2->mpDriverData, pData1->mnDriverDataLen ) == 0) && 288*cdf0e10cSrcweir (pData1->maValueMap == pData2->maValueMap) 289*cdf0e10cSrcweir ) 290*cdf0e10cSrcweir return sal_True; 291*cdf0e10cSrcweir 292*cdf0e10cSrcweir return sal_False; 293*cdf0e10cSrcweir } 294*cdf0e10cSrcweir 295*cdf0e10cSrcweir // ----------------------------------------------------------------------- 296*cdf0e10cSrcweir 297*cdf0e10cSrcweir SvStream& operator>>( SvStream& rIStream, JobSetup& rJobSetup ) 298*cdf0e10cSrcweir { 299*cdf0e10cSrcweir DBG_ASSERTWARNING( rIStream.GetVersion(), "JobSetup::>> - Solar-Version not set on rOStream" ); 300*cdf0e10cSrcweir 301*cdf0e10cSrcweir // Zur Zeit haben wir noch kein neues FileFormat 302*cdf0e10cSrcweir // if ( rIStream.GetVersion() < JOBSET_FILEFORMAT2 ) 303*cdf0e10cSrcweir { 304*cdf0e10cSrcweir sal_Size nFirstPos = rIStream.Tell(); 305*cdf0e10cSrcweir 306*cdf0e10cSrcweir sal_uInt16 nLen = 0; 307*cdf0e10cSrcweir rIStream >> nLen; 308*cdf0e10cSrcweir if ( !nLen ) 309*cdf0e10cSrcweir return rIStream; 310*cdf0e10cSrcweir 311*cdf0e10cSrcweir sal_uInt16 nSystem = 0; 312*cdf0e10cSrcweir rIStream >> nSystem; 313*cdf0e10cSrcweir 314*cdf0e10cSrcweir char* pTempBuf = new char[nLen]; 315*cdf0e10cSrcweir rIStream.Read( pTempBuf, nLen - sizeof( nLen ) - sizeof( nSystem ) ); 316*cdf0e10cSrcweir if ( nLen >= sizeof(ImplOldJobSetupData)+4 ) 317*cdf0e10cSrcweir { 318*cdf0e10cSrcweir ImplOldJobSetupData* pData = (ImplOldJobSetupData*)pTempBuf; 319*cdf0e10cSrcweir if ( rJobSetup.mpData ) 320*cdf0e10cSrcweir { 321*cdf0e10cSrcweir if ( rJobSetup.mpData->mnRefCount == 1 ) 322*cdf0e10cSrcweir delete rJobSetup.mpData; 323*cdf0e10cSrcweir else 324*cdf0e10cSrcweir rJobSetup.mpData->mnRefCount--; 325*cdf0e10cSrcweir } 326*cdf0e10cSrcweir 327*cdf0e10cSrcweir rtl_TextEncoding aStreamEncoding = RTL_TEXTENCODING_UTF8; 328*cdf0e10cSrcweir if( nSystem == JOBSET_FILE364_SYSTEM ) 329*cdf0e10cSrcweir aStreamEncoding = rIStream.GetStreamCharSet(); 330*cdf0e10cSrcweir 331*cdf0e10cSrcweir rJobSetup.mpData = new ImplJobSetup; 332*cdf0e10cSrcweir ImplJobSetup* pJobData = rJobSetup.mpData; 333*cdf0e10cSrcweir pJobData->maPrinterName = UniString( pData->cPrinterName, aStreamEncoding ); 334*cdf0e10cSrcweir pJobData->maDriver = UniString( pData->cDriverName, aStreamEncoding ); 335*cdf0e10cSrcweir 336*cdf0e10cSrcweir // Sind es unsere neuen JobSetup-Daten? 337*cdf0e10cSrcweir if ( nSystem == JOBSET_FILE364_SYSTEM || 338*cdf0e10cSrcweir nSystem == JOBSET_FILE605_SYSTEM ) 339*cdf0e10cSrcweir { 340*cdf0e10cSrcweir Impl364JobSetupData* pOldJobData = (Impl364JobSetupData*)(pTempBuf + sizeof( ImplOldJobSetupData )); 341*cdf0e10cSrcweir sal_uInt16 nOldJobDataSize = SVBT16ToShort( pOldJobData->nSize ); 342*cdf0e10cSrcweir pJobData->mnSystem = SVBT16ToShort( pOldJobData->nSystem ); 343*cdf0e10cSrcweir pJobData->mnDriverDataLen = SVBT32ToUInt32( pOldJobData->nDriverDataLen ); 344*cdf0e10cSrcweir pJobData->meOrientation = (Orientation)SVBT16ToShort( pOldJobData->nOrientation ); 345*cdf0e10cSrcweir pJobData->meDuplexMode = DUPLEX_UNKNOWN; 346*cdf0e10cSrcweir pJobData->mnPaperBin = SVBT16ToShort( pOldJobData->nPaperBin ); 347*cdf0e10cSrcweir pJobData->mePaperFormat = (Paper)SVBT16ToShort( pOldJobData->nPaperFormat ); 348*cdf0e10cSrcweir pJobData->mnPaperWidth = (long)SVBT32ToUInt32( pOldJobData->nPaperWidth ); 349*cdf0e10cSrcweir pJobData->mnPaperHeight = (long)SVBT32ToUInt32( pOldJobData->nPaperHeight ); 350*cdf0e10cSrcweir if ( pJobData->mnDriverDataLen ) 351*cdf0e10cSrcweir { 352*cdf0e10cSrcweir sal_uInt8* pDriverData = ((sal_uInt8*)pOldJobData) + nOldJobDataSize; 353*cdf0e10cSrcweir pJobData->mpDriverData = (sal_uInt8*)rtl_allocateMemory( pJobData->mnDriverDataLen ); 354*cdf0e10cSrcweir memcpy( pJobData->mpDriverData, pDriverData, pJobData->mnDriverDataLen ); 355*cdf0e10cSrcweir } 356*cdf0e10cSrcweir if( nSystem == JOBSET_FILE605_SYSTEM ) 357*cdf0e10cSrcweir { 358*cdf0e10cSrcweir rIStream.Seek( nFirstPos + sizeof( ImplOldJobSetupData ) + 4 + sizeof( Impl364JobSetupData ) + pJobData->mnDriverDataLen ); 359*cdf0e10cSrcweir while( rIStream.Tell() < nFirstPos + nLen ) 360*cdf0e10cSrcweir { 361*cdf0e10cSrcweir String aKey, aValue; 362*cdf0e10cSrcweir rIStream.ReadByteString( aKey, RTL_TEXTENCODING_UTF8 ); 363*cdf0e10cSrcweir rIStream.ReadByteString( aValue, RTL_TEXTENCODING_UTF8 ); 364*cdf0e10cSrcweir if( aKey.EqualsAscii( "COMPAT_DUPLEX_MODE" ) ) 365*cdf0e10cSrcweir { 366*cdf0e10cSrcweir if( aValue.EqualsAscii( "DUPLEX_UNKNOWN" ) ) 367*cdf0e10cSrcweir pJobData->meDuplexMode = DUPLEX_UNKNOWN; 368*cdf0e10cSrcweir else if( aValue.EqualsAscii( "DUPLEX_OFF" ) ) 369*cdf0e10cSrcweir pJobData->meDuplexMode = DUPLEX_OFF; 370*cdf0e10cSrcweir else if( aValue.EqualsAscii( "DUPLEX_SHORTEDGE" ) ) 371*cdf0e10cSrcweir pJobData->meDuplexMode = DUPLEX_SHORTEDGE; 372*cdf0e10cSrcweir else if( aValue.EqualsAscii( "DUPLEX_LONGEDGE" ) ) 373*cdf0e10cSrcweir pJobData->meDuplexMode = DUPLEX_LONGEDGE; 374*cdf0e10cSrcweir } 375*cdf0e10cSrcweir else 376*cdf0e10cSrcweir pJobData->maValueMap[ aKey ] = aValue; 377*cdf0e10cSrcweir } 378*cdf0e10cSrcweir DBG_ASSERT( rIStream.Tell() == nFirstPos+nLen, "corrupted job setup" ); 379*cdf0e10cSrcweir // ensure correct stream position 380*cdf0e10cSrcweir rIStream.Seek( nFirstPos + nLen ); 381*cdf0e10cSrcweir } 382*cdf0e10cSrcweir } 383*cdf0e10cSrcweir } 384*cdf0e10cSrcweir delete[] pTempBuf; 385*cdf0e10cSrcweir } 386*cdf0e10cSrcweir /* 387*cdf0e10cSrcweir else 388*cdf0e10cSrcweir { 389*cdf0e10cSrcweir } 390*cdf0e10cSrcweir */ 391*cdf0e10cSrcweir 392*cdf0e10cSrcweir return rIStream; 393*cdf0e10cSrcweir } 394*cdf0e10cSrcweir 395*cdf0e10cSrcweir // ----------------------------------------------------------------------- 396*cdf0e10cSrcweir 397*cdf0e10cSrcweir SvStream& operator<<( SvStream& rOStream, const JobSetup& rJobSetup ) 398*cdf0e10cSrcweir { 399*cdf0e10cSrcweir DBG_ASSERTWARNING( rOStream.GetVersion(), "JobSetup::<< - Solar-Version not set on rOStream" ); 400*cdf0e10cSrcweir 401*cdf0e10cSrcweir // Zur Zeit haben wir noch kein neues FileFormat 402*cdf0e10cSrcweir // if ( rOStream.GetVersion() < JOBSET_FILEFORMAT2 ) 403*cdf0e10cSrcweir { 404*cdf0e10cSrcweir sal_uInt16 nLen = 0; 405*cdf0e10cSrcweir if ( !rJobSetup.mpData ) 406*cdf0e10cSrcweir rOStream << nLen; 407*cdf0e10cSrcweir else 408*cdf0e10cSrcweir { 409*cdf0e10cSrcweir sal_uInt16 nSystem = JOBSET_FILE605_SYSTEM; 410*cdf0e10cSrcweir 411*cdf0e10cSrcweir const ImplJobSetup* pJobData = rJobSetup.ImplGetConstData(); 412*cdf0e10cSrcweir Impl364JobSetupData aOldJobData; 413*cdf0e10cSrcweir sal_uInt16 nOldJobDataSize = sizeof( aOldJobData ); 414*cdf0e10cSrcweir ShortToSVBT16( nOldJobDataSize, aOldJobData.nSize ); 415*cdf0e10cSrcweir ShortToSVBT16( pJobData->mnSystem, aOldJobData.nSystem ); 416*cdf0e10cSrcweir UInt32ToSVBT32( pJobData->mnDriverDataLen, aOldJobData.nDriverDataLen ); 417*cdf0e10cSrcweir ShortToSVBT16( (sal_uInt16)(pJobData->meOrientation), aOldJobData.nOrientation ); 418*cdf0e10cSrcweir ShortToSVBT16( pJobData->mnPaperBin, aOldJobData.nPaperBin ); 419*cdf0e10cSrcweir ShortToSVBT16( (sal_uInt16)(pJobData->mePaperFormat), aOldJobData.nPaperFormat ); 420*cdf0e10cSrcweir UInt32ToSVBT32( (sal_uLong)(pJobData->mnPaperWidth), aOldJobData.nPaperWidth ); 421*cdf0e10cSrcweir UInt32ToSVBT32( (sal_uLong)(pJobData->mnPaperHeight), aOldJobData.nPaperHeight ); 422*cdf0e10cSrcweir 423*cdf0e10cSrcweir ImplOldJobSetupData aOldData; 424*cdf0e10cSrcweir memset( &aOldData, 0, sizeof( aOldData ) ); 425*cdf0e10cSrcweir ByteString aPrnByteName( rJobSetup.GetPrinterName(), RTL_TEXTENCODING_UTF8 ); 426*cdf0e10cSrcweir strncpy( aOldData.cPrinterName, aPrnByteName.GetBuffer(), 63 ); 427*cdf0e10cSrcweir ByteString aDriverByteName( rJobSetup.GetDriverName(), RTL_TEXTENCODING_UTF8 ); 428*cdf0e10cSrcweir strncpy( aOldData.cDriverName, aDriverByteName.GetBuffer(), 31 ); 429*cdf0e10cSrcweir // nLen = sizeof( aOldData ) + 4 + nOldJobDataSize + pJobData->mnDriverDataLen; 430*cdf0e10cSrcweir int nPos = rOStream.Tell(); 431*cdf0e10cSrcweir rOStream << nLen; 432*cdf0e10cSrcweir rOStream << nSystem; 433*cdf0e10cSrcweir rOStream.Write( (char*)&aOldData, sizeof( aOldData ) ); 434*cdf0e10cSrcweir rOStream.Write( (char*)&aOldJobData, nOldJobDataSize ); 435*cdf0e10cSrcweir rOStream.Write( (char*)pJobData->mpDriverData, pJobData->mnDriverDataLen ); 436*cdf0e10cSrcweir ::std::hash_map< ::rtl::OUString, ::rtl::OUString, ::rtl::OUStringHash >::const_iterator it; 437*cdf0e10cSrcweir for( it = pJobData->maValueMap.begin(); it != pJobData->maValueMap.end(); ++it ) 438*cdf0e10cSrcweir { 439*cdf0e10cSrcweir rOStream.WriteByteString( it->first, RTL_TEXTENCODING_UTF8 ); 440*cdf0e10cSrcweir rOStream.WriteByteString( it->second, RTL_TEXTENCODING_UTF8 ); 441*cdf0e10cSrcweir } 442*cdf0e10cSrcweir rOStream.WriteByteString( "COMPAT_DUPLEX_MODE" ) ; 443*cdf0e10cSrcweir switch( pJobData->meDuplexMode ) 444*cdf0e10cSrcweir { 445*cdf0e10cSrcweir case DUPLEX_UNKNOWN: rOStream.WriteByteString( "DUPLEX_UNKNOWN" );break; 446*cdf0e10cSrcweir case DUPLEX_OFF: rOStream.WriteByteString( "DUPLEX_OFF" );break; 447*cdf0e10cSrcweir case DUPLEX_SHORTEDGE: rOStream.WriteByteString( "DUPLEX_SHORTEDGE" );break; 448*cdf0e10cSrcweir case DUPLEX_LONGEDGE: rOStream.WriteByteString( "DUPLEX_LONGEDGE" );break; 449*cdf0e10cSrcweir } 450*cdf0e10cSrcweir nLen = sal::static_int_cast<sal_uInt16>(rOStream.Tell() - nPos); 451*cdf0e10cSrcweir rOStream.Seek( nPos ); 452*cdf0e10cSrcweir rOStream << nLen; 453*cdf0e10cSrcweir rOStream.Seek( nPos + nLen ); 454*cdf0e10cSrcweir } 455*cdf0e10cSrcweir } 456*cdf0e10cSrcweir /* 457*cdf0e10cSrcweir else 458*cdf0e10cSrcweir { 459*cdf0e10cSrcweir } 460*cdf0e10cSrcweir */ 461*cdf0e10cSrcweir 462*cdf0e10cSrcweir return rOStream; 463*cdf0e10cSrcweir } 464