extending printing code (backport of 2.5 is not possible)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@20698 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2003-05-22 21:12:31 +00:00
parent 5fc42941db
commit d6c8f96094

View File

@@ -196,38 +196,7 @@ wxPrintData::wxPrintData()
m_macPageFormat = kPMNoPageFormat;
m_macPrintSettings = kPMNoPrintSettings;
m_macPrintSession = kPMNoReference ;
#if PM_USE_SESSION_APIS
OSStatus err;
err = PMCreateSession((PMPrintSession *)&m_macPrintSession) ;
if ( err == noErr )
{
err = PMCreatePageFormat((PMPageFormat *)&m_macPageFormat);
// Note that PMPageFormat is not session-specific, but calling
// PMSessionDefaultPageFormat assigns values specific to the printer
// associated with the current printing session.
if ((err == noErr) && (m_macPageFormat != kPMNoPageFormat))
{
err = PMSessionDefaultPageFormat((PMPrintSession)m_macPrintSession,
(PMPageFormat)m_macPageFormat);
}
err = PMCreatePrintSettings((PMPrintSettings *)&m_macPrintSettings);
// Note that PMPrintSettings is not session-specific, but calling
// PMSessionDefaultPrintSettings assigns values specific to the printer
// associated with the current printing session.
if ((err == noErr) && (m_macPrintSettings != kPMNoPrintSettings))
{
err = PMSessionDefaultPrintSettings((PMPrintSession)m_macPrintSession,
(PMPrintSettings)m_macPrintSettings);
}
}
#endif
ValidateOrCreate() ;
#else
m_macPrintSettings = (THPrint) NewHandleClear( sizeof( TPrint ) );
(**(THPrint)m_macPrintSettings).iPrVersion = 0; // something invalid
@@ -797,9 +766,32 @@ void wxPrintData::ConvertFromNative()
#endif
#ifdef __WXMAC__
void wxPrintData::ConvertToNative()
{
ValidateOrCreate() ;
#if TARGET_CARBON
PMSetCopies( (PMPrintSettings) m_macPrintSettings , m_printNoCopies , false ) ;
PMSetOrientation( (PMPageFormat) m_macPageFormat , ( m_printOrientation == wxLANDSCAPE ) ?
kPMLandscape : kPMPortrait , false ) ;
// collate cannot be set
#if 0 // not yet tested
if ( m_printerName.Length() > 0 )
PMSessionSetCurrentPrinter( (PMPrintSession) m_macPrintSession , wxMacCFStringHolder( m_printerName ) ) ;
#endif
PMColorMode color ;
PMGetColorMode( (PMPrintSettings) m_macPrintSettings, &color ) ;
if (m_colour)
{
if ( color == kPMBlackAndWhite )
PMSetColorMode( (PMPrintSettings) m_macPrintSettings, kPMColor ) ;
}
else
PMSetColorMode( (PMPrintSettings) m_macPrintSettings, kPMBlackAndWhite ) ;
// PMDuplexMode not yet accessible via API
// PMQualityMode not yet accessible via API
// todo paperSize
#else
(**(THPrint)m_macPrintSettings).prJob.iCopies = m_printNoCopies;
#endif
@@ -808,36 +800,148 @@ void wxPrintData::ConvertToNative()
void wxPrintData::ConvertFromNative()
{
#if TARGET_CARBON
OSStatus err = noErr ;
UInt32 copies ;
err = PMGetCopies( (PMPrintSettings) m_macPrintSettings , &copies ) ;
if ( err == noErr )
m_printNoCopies = copies ;
PMOrientation orientation ;
err = PMGetOrientation( (PMPageFormat) m_macPageFormat , &orientation ) ;
if ( err == noErr )
{
if ( orientation == kPMPortrait || orientation == kPMReversePortrait )
m_printOrientation = wxPORTRAIT ;
else
m_printOrientation = wxLANDSCAPE ;
}
// collate cannot be set
#if 0
{
wxMacCFStringHolder name ;
PMPrinter printer ;
PMSessionGetCurrentPrinter( (PMPrintSession) m_macPrintSession ,
&printer ) ;
m_printerName = name.AsString() ;
}
#endif
PMColorMode color ;
err = PMGetColorMode( (PMPrintSettings) m_macPrintSettings, &color ) ;
if ( err == noErr )
m_colour = !(color == kPMBlackAndWhite) ;
// PMDuplexMode not yet accessible via API
// PMQualityMode not yet accessible via API
// todo paperSize
PMRect rPaper;
err = PMGetUnadjustedPaperRect((PMPageFormat) m_macPageFormat, &rPaper);
if ( err == noErr )
{
m_paperSize.x = (int)(( rPaper.right - rPaper.left ) * pt2mm + 0.5 );
m_paperSize.y = (int)(( rPaper.bottom - rPaper.top ) * pt2mm + 0.5 );
}
#else
m_printNoCopies = (**(THPrint)m_macPrintSettings).prJob.iCopies;
// paper size
m_paperSize.x = ((double) (**(THPrint)m_macPrintSettings).rPaper.right - (**(THPrint)m_macPrintSettings).rPaper.left ) * pt2mm;
m_paperSize.y = ((double) (**(THPrint)m_macPrintSettings).rPaper.bottom - (**(THPrint)m_macPrintSettings).rPaper.top ) * pt2mm;
#endif
}
void wxPrintData::ValidateOrCreate()
{
#if TARGET_CARBON
OSStatus err = noErr ;
if ( m_macPrintSession == kPMNoReference )
{
err = PMCreateSession( (PMPrintSession *) &m_macPrintSession ) ;
}
// Set up a valid PageFormat object.
if ( m_macPageFormat == kPMNoPageFormat)
{
err = PMCreatePageFormat((PMPageFormat *) &m_macPageFormat);
// Note that PMPageFormat is not session-specific, but calling
// PMSessionDefaultPageFormat assigns values specific to the printer
// associated with the current printing session.
if ((err == noErr) &&
( m_macPageFormat != kPMNoPageFormat))
{
err = PMSessionDefaultPageFormat((PMPrintSession) m_macPrintSession,
(PMPageFormat) m_macPageFormat);
}
}
else
{
err = PMSessionValidatePageFormat((PMPrintSession) m_macPrintSession,
(PMPageFormat) m_macPageFormat,
kPMDontWantBoolean);
}
// Set up a valid PrintSettings object.
if ( m_macPrintSettings == kPMNoPrintSettings)
{
err = PMCreatePrintSettings((PMPrintSettings *) &m_macPrintSettings);
// Note that PMPrintSettings is not session-specific, but calling
// PMSessionDefaultPrintSettings assigns values specific to the printer
// associated with the current printing session.
if ((err == noErr) &&
( m_macPrintSettings != kPMNoPrintSettings))
{
err = PMSessionDefaultPrintSettings((PMPrintSession) m_macPrintSession,
(PMPrintSettings) m_macPrintSettings);
}
}
else
{
err = PMSessionValidatePrintSettings((PMPrintSession) m_macPrintSession,
(PMPrintSettings) m_macPrintSettings,
kPMDontWantBoolean);
}
#else
#endif
}
#endif
void wxPrintData::operator=(const wxPrintData& data)
{
#ifdef __WXMAC__
#if TARGET_CARBON
if ( data.m_macPrintSession != kPMNoPrintSettings )
PMRetain( data.m_macPrintSession ) ;
if ( m_macPrintSession != kPMNoPrintSettings )
{
PMRelease( m_macPrintSession ) ;
m_macPrintSession = kPMNoPrintSettings ;
}
if ( data.m_macPrintSession != kPMNoPrintSettings )
m_macPrintSession = data.m_macPrintSession ;
if ( data.m_macPrintSettings != kPMNoPrintSettings )
PMRetain( data.m_macPrintSettings ) ;
if ( m_macPrintSettings != kPMNoPrintSettings )
{
PMRelease( m_macPrintSettings ) ;
m_macPrintSettings = kPMNoPrintSettings ;
}
if ( data.m_macPrintSettings != kPMNoPrintSettings )
{
m_macPrintSettings = data.m_macPrintSettings ;
PMRetain( m_macPrintSettings ) ;
}
if ( data.m_macPageFormat != kPMNoPageFormat )
PMRetain( data.m_macPageFormat ) ;
if ( m_macPageFormat != kPMNoPageFormat )
{
PMRelease( m_macPageFormat ) ;
m_macPageFormat = kPMNoPageFormat ;
}
if ( data.m_macPageFormat != kPMNoPageFormat )
{
m_macPageFormat = data.m_macPageFormat ;
PMRetain( m_macPageFormat ) ;
}
#else
m_macPrintSettings = data.m_macPrintSettings;
HandToHand( (Handle*) &m_macPrintSettings );
@@ -1123,25 +1227,43 @@ void wxPrintDialogData::SetOwnerWindow(wxWindow* win)
#endif // MSW
#ifdef __WXMAC__
void wxPrintDialogData::ConvertToNative()
{
m_printData.ConvertToNative();
#if TARGET_CARBON
PMSetPageRange( (PMPrintSettings) m_printData.m_macPrintSettings , m_printMinPage , m_printMaxPage ) ;
PMSetCopies( (PMPrintSettings) m_printData.m_macPrintSettings , m_printNoCopies , false ) ;
PMSetFirstPage( (PMPrintSettings) m_printData.m_macPrintSettings , m_printFromPage , false ) ;
PMSetLastPage( (PMPrintSettings) m_printData.m_macPrintSettings , m_printToPage , false ) ;
#else
(**(THPrint)m_printData.m_macPrintSettings).prJob.iFstPage = m_printFromPage;
(**(THPrint)m_printData.m_macPrintSettings).prJob.iLstPage = m_printToPage;
m_printData.ConvertToNative();
#endif
}
void wxPrintDialogData::ConvertFromNative()
{
#if TARGET_CARBON
#else
m_printData.ConvertFromNative();
#if TARGET_CARBON
UInt32 minPage , maxPage ;
PMGetPageRange( (PMPrintSettings) m_printData.m_macPrintSettings , &minPage , &maxPage ) ;
m_printMinPage = minPage ;
m_printMaxPage = maxPage ;
UInt32 copies ;
PMGetCopies( (PMPrintSettings) m_printData.m_macPrintSettings , &copies ) ;
m_printNoCopies = copies ;
UInt32 from , to ;
PMGetFirstPage((PMPrintSettings) m_printData.m_macPrintSettings , &from ) ;
PMGetLastPage((PMPrintSettings) m_printData.m_macPrintSettings , &to ) ;
m_printFromPage = from ;
m_printToPage = to ;
#else
m_printFromPage = (**(THPrint)m_printData.m_macPrintSettings).prJob.iFstPage;
m_printToPage = (**(THPrint)m_printData.m_macPrintSettings).prJob.iLstPage;
#endif
}
#endif
@@ -1474,29 +1596,26 @@ void wxPageSetupDialogData::ConvertToNative()
void wxPageSetupDialogData::ConvertFromNative()
{
m_printData.ConvertFromNative ();
m_paperSize = m_printData.GetPaperSize() ;
CalculateIdFromPaperSize();
#if TARGET_CARBON
PMRect rPaper;
OSStatus err = PMGetAdjustedPaperRect((PMPageFormat)m_printData.m_macPageFormat, &rPaper);
OSStatus err = PMGetUnadjustedPaperRect((PMPageFormat) m_printData.m_macPageFormat, &rPaper);
if ( err == noErr )
{
m_paperSize.x = int(( rPaper.right - rPaper.left ) * pt2mm);
m_paperSize.y = int(( rPaper.bottom - rPaper.top ) * pt2mm);
m_minMarginTopLeft.x = int( ( - rPaper.left ) * pt2mm );
m_minMarginTopLeft.y = int( ( - rPaper.top ) * pt2mm );
// m_minMarginBottomRight.x = ((double) rPaper.right - (**(THPrint)m_printData.m_macPrintSettings).prInfo.rPage.right ) * pt2mm;
// m_minMarginBottomRight.y = ((double)(**(THPrint)m_printData.m_macPrintSettings).rPaper.bottom - (**(THPrint)m_printData.m_macPrintSettings).prInfo.rPage.bottom ) * pt2mm;
}
PMRect rPage ;
err = PMGetUnadjustedPageRect((PMPageFormat) m_printData.m_macPageFormat , &rPage ) ;
if ( err == noErr )
{
m_minMarginTopLeft.x = (int)(((double) rPage.left - rPaper.left ) * pt2mm);
m_minMarginTopLeft.y = (int)(((double) rPage.top - rPaper.top ) * pt2mm);
m_minMarginBottomRight.x = ((double) rPaper.right - rPage.right ) * pt2mm;
m_minMarginBottomRight.y = ((double) rPaper.bottom - rPage.bottom ) * pt2mm;
}
}
#else
m_paperSize.x = ((double) (**(THPrint)m_printData.m_macPrintSettings).rPaper.right - (**(THPrint)m_printData.m_macPrintSettings).rPaper.left ) * pt2mm;
m_paperSize.y = ((double) (**(THPrint)m_printData.m_macPrintSettings).rPaper.bottom - (**(THPrint)m_printData.m_macPrintSettings).rPaper.top ) * pt2mm;
m_minMarginTopLeft.x = ((double) -(**(THPrint)m_printData.m_macPrintSettings).rPaper.left ) * pt2mm;
m_minMarginTopLeft.y = ((double) -(**(THPrint)m_printData.m_macPrintSettings).rPaper.top ) * pt2mm;
m_minMarginTopLeft.x = ((double) (**(THPrint)m_printData.m_macPrintSettings).prInfo.rPage.left -(**(THPrint)m_printData.m_macPrintSettings).rPaper.left ) * pt2mm;
m_minMarginTopLeft.y = ((double) (**(THPrint)m_printData.m_macPrintSettings).prInfo.rPage.top -(**(THPrint)m_printData.m_macPrintSettings).rPaper.top ) * pt2mm;
m_minMarginBottomRight.x = ((double) (**(THPrint)m_printData.m_macPrintSettings).rPaper.right - (**(THPrint)m_printData.m_macPrintSettings).prInfo.rPage.right ) * pt2mm;
m_minMarginBottomRight.y = ((double)(**(THPrint)m_printData.m_macPrintSettings).rPaper.bottom - (**(THPrint)m_printData.m_macPrintSettings).prInfo.rPage.bottom ) * pt2mm;
#endif