X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/83e72d5f10b04e0ddde9c3408c0c3096deb4a0f6..ed7c11abc829a8f7becc92ee438866e36f2216fe:/src/common/cmndata.cpp diff --git a/src/common/cmndata.cpp b/src/common/cmndata.cpp index 523c9841b6..b3d61564b8 100644 --- a/src/common/cmndata.cpp +++ b/src/common/cmndata.cpp @@ -5,7 +5,7 @@ // Modified by: // Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem +// Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -17,7 +17,7 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "cmndata.h" #endif @@ -39,39 +39,32 @@ #include "wx/cmndata.h" #include "wx/log.h" -// For compatibility -#if (defined(__WXMOTIF__) || defined(__WXGTK__) || defined(__WXPM__)) && wxUSE_POSTSCRIPT - #define wxCOMPATIBILITY_WITH_PRINTSETUPDATA 1 -#endif +#if wxUSE_FONTDLG + #include "wx/fontdlg.h" +#endif // wxUSE_FONTDLG #if wxUSE_PRINTING_ARCHITECTURE #include "wx/paper.h" - - #if wxCOMPATIBILITY_WITH_PRINTSETUPDATA - #include "wx/generic/dcpsg.h" - #endif #endif // wxUSE_PRINTING_ARCHITECTURE #ifdef __WXMSW__ - #include + #include #include "wx/msw/private.h" - #if !defined(__WIN32__) - #include - #include - #endif // Win16 - - #ifdef __WXWINE__ - #include + #ifndef __SMARTPHONE__ #include #endif - #if defined(__WATCOMC__) || defined(__SC__) || defined(__SALFORDC__) + #if defined(__WATCOMC__) || defined(__SYMANTEC__) || defined(__SALFORDC__) #include #include #endif #endif // MSW +#ifdef __WXMAC__ + #include "wx/mac/private/print.h" +#endif + #if wxUSE_PRINTING_ARCHITECTURE IMPLEMENT_DYNAMIC_CLASS(wxPrintData, wxObject) IMPLEMENT_DYNAMIC_CLASS(wxPrintDialogData, wxObject) @@ -81,11 +74,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxFontData, wxObject) IMPLEMENT_DYNAMIC_CLASS(wxColourData, wxObject) -#ifdef __WXMAC__ - #define mm2pt 2.83464566929 - #define pt2mm 0.352777777778 -#endif // Mac - #ifndef DMPAPER_USER #define DMPAPER_USER 256 #endif @@ -100,15 +88,13 @@ wxColourData::wxColourData() { - int i; - for (i = 0; i < 16; i++) - custColours[i].Set(255, 255, 255); - - chooseFull = FALSE; - dataColour.Set(0,0,0); + m_chooseFull = false; + m_dataColour.Set(0,0,0); + // m_custColours are wxNullColours initially } wxColourData::wxColourData(const wxColourData& data) + : wxObject() { (*this) = data; } @@ -117,30 +103,29 @@ wxColourData::~wxColourData() { } -void wxColourData::SetCustomColour(int i, wxColour& colour) +void wxColourData::SetCustomColour(int i, const wxColour& colour) { - if (i > 15 || i < 0) - return; + wxCHECK_RET( (i >= 0 && i < 16), _T("custom colour index out of range") ); - custColours[i] = colour; + m_custColours[i] = colour; } wxColour wxColourData::GetCustomColour(int i) { - if (i > 15 || i < 0) - return wxColour(0,0,0); + wxCHECK_MSG( (i >= 0 && i < 16), wxColour(0,0,0), + _T("custom colour index out of range") ); - return custColours[i]; + return m_custColours[i]; } void wxColourData::operator=(const wxColourData& data) { int i; for (i = 0; i < 16; i++) - custColours[i] = data.custColours[i]; + m_custColours[i] = data.m_custColours[i]; - dataColour = (wxColour&)data.dataColour; - chooseFull = data.chooseFull; + m_dataColour = (wxColour&)data.m_dataColour; + m_chooseFull = data.m_chooseFull; } // ---------------------------------------------------------------------------- @@ -150,13 +135,13 @@ void wxColourData::operator=(const wxColourData& data) wxFontData::wxFontData() { // Intialize colour to black. - fontColour.Set(0, 0, 0); + m_fontColour = wxNullColour; - showHelp = FALSE; - allowSymbols = TRUE; - enableEffects = TRUE; - minSize = 0; - maxSize = 0; + m_showHelp = false; + m_allowSymbols = true; + m_enableEffects = true; + m_minSize = 0; + m_maxSize = 0; m_encoding = wxFONTENCODING_SYSTEM; } @@ -165,6 +150,14 @@ wxFontData::~wxFontData() { } +#if wxUSE_FONTDLG + +wxFontDialogBase::~wxFontDialogBase() +{ +} + +#endif // wxUSE_FONTDLG + #if wxUSE_PRINTING_ARCHITECTURE // ---------------------------------------------------------------------------- // Print data @@ -176,61 +169,61 @@ wxPrintData::wxPrintData() m_devMode = (void*) NULL; m_devNames = (void*) NULL; #elif defined( __WXMAC__ ) -#if TARGET_CARBON - m_macPageFormat = kPMNoPageFormat; - m_macPrintSettings = kPMNoPrintSettings; -#else - m_macPrintInfo = (THPrint) NewHandleClear( sizeof( TPrint ) ) ; - (**m_macPrintInfo).iPrVersion = 0; // something invalid - - (**m_macPrintInfo).prInfo.iHRes = 72; - (**m_macPrintInfo).prInfo.iVRes = 72; - Rect r1 = { 0, 0, 8*72 - 2 * 18, 11*72 - 2 * 36 } ; - (**m_macPrintInfo).prInfo.rPage = r1;// must have its top left & (0,0) - - Rect r2 = { -18, -36, 8*72 - 18, 11*72 - 36 } ; - (**m_macPrintInfo).rPaper = r2; - (**m_macPrintInfo).prStl.iPageV = 11 * 120 ; // 11 inches in 120th of an inch - (**m_macPrintInfo).prStl.iPageH = 8 * 120 ; // 8 inches in 120th of an inch -#endif + m_nativePrintData = wxNativePrintData::Create() ; #endif + m_bin = wxPRINTBIN_DEFAULT; m_printOrientation = wxPORTRAIT; m_printNoCopies = 1; - m_printCollate = FALSE; + m_printCollate = false; // New, 24/3/99 - m_printerName = ""; - m_colour = TRUE; + m_printerName = wxT(""); + m_colour = true; m_duplexMode = wxDUPLEX_SIMPLEX; m_printQuality = wxPRINT_QUALITY_HIGH; m_paperId = wxPAPER_A4; m_paperSize = wxSize(210, 297); // PostScript-specific data - m_printerCommand = ""; - m_previewCommand = ""; - m_printerOptions = ""; - m_filename = ""; - m_afmPath = ""; + m_previewCommand = wxT(""); + m_filename = wxT(""); +#ifdef __VMS__ + m_printerCommand = wxT("print"); + m_printerOptions = wxT("/nonotify/queue=psqueue"); + m_afmPath = wxT("sys$ps_font_metrics:"); +#endif + +#ifdef __WXMSW__ + m_printerCommand = wxT("print"); + m_printerOptions = wxT(""); + m_afmPath = wxT("c:\\windows\\system\\"); +#endif + +#if !defined(__VMS__) && !defined(__WXMSW__) + m_printerCommand = wxT("lpr"); + m_printerOptions = wxT(""); + m_afmPath = wxT(""); +#endif + m_printerScaleX = 1.0; m_printerScaleY = 1.0; m_printerTranslateX = 0; m_printerTranslateY = 0; m_printMode = wxPRINT_MODE_FILE; + +#ifdef wxUSE_STREAMS + m_outputstream = NULL; +#endif } wxPrintData::wxPrintData(const wxPrintData& printData) + : wxObject() { #ifdef __WXMSW__ m_devMode = (void*) NULL; m_devNames = (void*) NULL; #elif defined( __WXMAC__ ) -#if TARGET_CARBON - m_macPageFormat = kPMNoPageFormat; - m_macPrintSettings = kPMNoPrintSettings; -#else - m_macPrintInfo = NULL ; -#endif + m_nativePrintData = wxNativePrintData::Create() ; #endif (*this) = printData; } @@ -245,22 +238,7 @@ wxPrintData::~wxPrintData() if ( hDevNames ) GlobalFree(hDevNames); #elif defined(__WXMAC__) -#if TARGET_CARBON - if (m_macPageFormat != kPMNoPageFormat) - { - (void)PMDisposePageFormat(m_macPageFormat); - m_macPageFormat = kPMNoPageFormat; - } - - if (m_macPrintSettings != kPMNoPrintSettings) - { - (void)PMDisposePrintSettings(m_macPrintSettings); - m_macPrintSettings = kPMNoPrintSettings; - } -#else - wxASSERT( m_macPrintInfo ) ; - // we should perhaps delete -#endif + delete m_nativePrintData ; #endif } @@ -303,32 +281,35 @@ static wxString wxGetPrintDlgError() static HGLOBAL wxCreateDevNames(const wxString& driverName, const wxString& printerName, const wxString& portName) { - HGLOBAL hDev = NULL; - // if (!driverName.IsEmpty() && !printerName.IsEmpty() && !portName.IsEmpty()) + HGLOBAL hDev = NULL; + // if (!driverName.IsEmpty() && !printerName.IsEmpty() && !portName.IsEmpty()) if (driverName.IsEmpty() && printerName.IsEmpty() && portName.IsEmpty()) { } else - { - hDev = GlobalAlloc(GPTR, 4*sizeof(WORD)+ - driverName.Length() + 1 + - printerName.Length() + 1 + - portName.Length()+1); - LPDEVNAMES lpDev = (LPDEVNAMES)GlobalLock(hDev); - lpDev->wDriverOffset = sizeof(WORD)*4; - wxStrcpy((wxChar*)lpDev + lpDev->wDriverOffset, driverName); + { + hDev = GlobalAlloc(GPTR, 4*sizeof(WORD)+ + ( driverName.Length() + 1 + + printerName.Length() + 1 + + portName.Length()+1 ) * sizeof(wxChar) ); + LPDEVNAMES lpDev = (LPDEVNAMES)GlobalLock(hDev); + lpDev->wDriverOffset = sizeof(WORD)*4; + wxStrcpy((wxChar*)((char*)lpDev + lpDev->wDriverOffset ), driverName); - lpDev->wDeviceOffset = (WORD)(lpDev->wDriverOffset + driverName.Length()+1); - wxStrcpy((wxChar*)lpDev + lpDev->wDeviceOffset, printerName); + lpDev->wDeviceOffset = (WORD)( lpDev->wDriverOffset + + sizeof(wxChar) * ( driverName.Length() + 1 ) ); + wxStrcpy((wxChar*)((char*)lpDev + lpDev->wDeviceOffset ), printerName); - lpDev->wOutputOffset = (WORD)(lpDev->wDeviceOffset + printerName.Length()+1); - wxStrcpy((wxChar*)lpDev + lpDev->wOutputOffset, portName); + lpDev->wOutputOffset = (WORD)( lpDev->wDeviceOffset + + sizeof(wxChar) * ( printerName.Length() + 1 ) ); + wxStrcpy((wxChar*)((char*) lpDev + lpDev->wOutputOffset ), portName); - lpDev->wDefault = 0; + lpDev->wDefault = 0; GlobalUnlock(hDev); - } - return hDev; + } + + return hDev; } void wxPrintData::ConvertToNative() @@ -338,35 +319,39 @@ void wxPrintData::ConvertToNative() if (!hDevMode) { // Use PRINTDLG as a way of creating a DEVMODE object - PRINTDLG *pd = new PRINTDLG; + PRINTDLG pd; // GNU-WIN32 has the wrong size PRINTDLG - can't work out why. #ifdef __GNUWIN32__ - memset(pd, 0, 66); - pd->lStructSize = 66 ; + memset(&pd, 0, 66); + pd.lStructSize = 66; #else - memset(pd, 0, sizeof(PRINTDLG)); - pd->lStructSize = sizeof(PRINTDLG); + memset(&pd, 0, sizeof(PRINTDLG)); +#ifdef __WXWINCE__ + pd.cbStruct = sizeof(PRINTDLG); +#else + pd.lStructSize = sizeof(PRINTDLG); +#endif #endif - pd->hwndOwner = (HWND)NULL; - pd->hDevMode = NULL; // Will be created by PrintDlg - pd->hDevNames = NULL; // Ditto - pd->hInstance = (HINSTANCE) wxGetInstance(); + pd.hwndOwner = (HWND)NULL; + pd.hDevMode = NULL; // Will be created by PrintDlg + pd.hDevNames = NULL; // Ditto + //pd.hInstance = (HINSTANCE) wxGetInstance(); - pd->Flags = PD_RETURNDEFAULT; - pd->nCopies = 1; + pd.Flags = PD_RETURNDEFAULT; + pd.nCopies = 1; // Fill out the DEVMODE structure // so we can use it as input in the 'real' PrintDlg - if (!PrintDlg(pd)) + if (!PrintDlg(&pd)) { - if ( pd->hDevMode ) - GlobalFree(pd->hDevMode); - if ( pd->hDevNames ) - GlobalFree(pd->hDevNames); - pd->hDevMode = NULL; - pd->hDevNames = NULL; + if ( pd.hDevMode ) + GlobalFree(pd.hDevMode); + if ( pd.hDevNames ) + GlobalFree(pd.hDevNames); + pd.hDevMode = NULL; + pd.hDevNames = NULL; #if defined(__WXDEBUG__) && defined(__WIN32__) wxString str(wxT("Printing error: ")); @@ -376,22 +361,20 @@ void wxPrintData::ConvertToNative() } else { - hDevMode = pd->hDevMode; + hDevMode = pd.hDevMode; m_devMode = (void*)(long) hDevMode; - pd->hDevMode = NULL; + pd.hDevMode = NULL; // We'll create a new DEVNAMEs structure below. - if ( pd->hDevNames ) - GlobalFree(pd->hDevNames); - pd->hDevNames = NULL; + if ( pd.hDevNames ) + GlobalFree(pd.hDevNames); + pd.hDevNames = NULL; // hDevNames = pd->hDevNames; // m_devNames = (void*)(long) hDevNames; // pd->hDevnames = NULL; } - - delete pd; } if ( hDevMode ) @@ -400,17 +383,12 @@ void wxPrintData::ConvertToNative() //// Orientation -#ifndef __WXWINE__ devMode->dmOrientation = m_printOrientation; -#endif - devMode->dmFields = DM_ORIENTATION; //// Collation -#ifndef __WIN16__ devMode->dmCollate = (m_printCollate ? DMCOLLATE_TRUE : DMCOLLATE_FALSE); devMode->dmFields |= DM_COLLATE; -#endif //// Number of copies @@ -421,12 +399,9 @@ void wxPrintData::ConvertToNative() if (m_printerName != wxT("")) { - // TODO: make this Unicode compatible - int len = wxMin(31, m_printerName.Len()); - int i; - for (i = 0; i < len; i++) - devMode->dmDeviceName[i] = m_printerName.GetChar(i); - devMode->dmDeviceName[i] = 0; + //int len = wxMin(31, m_printerName.Len()); + wxStrncpy((wxChar*)devMode->dmDeviceName,m_printerName.c_str(),31); + devMode->dmDeviceName[31] = wxT('\0'); } //// Colour @@ -438,12 +413,11 @@ void wxPrintData::ConvertToNative() devMode->dmFields |= DM_COLOR; -#ifndef __WXWINE__ //// Paper size if (m_paperId == wxPAPER_NONE) { - // DEVMODE is in tenths of a milimeter + // DEVMODE is in tenths of a milimeter devMode->dmPaperWidth = m_paperSize.x * 10; devMode->dmPaperLength = m_paperSize.y * 10; devMode->dmPaperSize = DMPAPER_USER; @@ -462,7 +436,6 @@ void wxPrintData::ConvertToNative() } } } -#endif //// Duplex @@ -507,6 +480,32 @@ void wxPrintData::ConvertToNative() devMode->dmPrintQuality = quality; devMode->dmFields |= DM_PRINTQUALITY; + if ( m_bin != wxPRINTBIN_DEFAULT ) + { + switch ( m_bin ) + { + case wxPRINTBIN_ONLYONE: devMode->dmDefaultSource = DMBIN_ONLYONE; break; + case wxPRINTBIN_LOWER: devMode->dmDefaultSource = DMBIN_LOWER; break; + case wxPRINTBIN_MIDDLE: devMode->dmDefaultSource = DMBIN_MIDDLE; break; + case wxPRINTBIN_MANUAL: devMode->dmDefaultSource = DMBIN_MANUAL; break; + case wxPRINTBIN_ENVELOPE: devMode->dmDefaultSource = DMBIN_ENVELOPE; break; + case wxPRINTBIN_ENVMANUAL: devMode->dmDefaultSource = DMBIN_ENVMANUAL; break; + case wxPRINTBIN_AUTO: devMode->dmDefaultSource = DMBIN_AUTO; break; + case wxPRINTBIN_TRACTOR: devMode->dmDefaultSource = DMBIN_TRACTOR; break; + case wxPRINTBIN_SMALLFMT: devMode->dmDefaultSource = DMBIN_SMALLFMT; break; + case wxPRINTBIN_LARGEFMT: devMode->dmDefaultSource = DMBIN_LARGEFMT; break; + case wxPRINTBIN_LARGECAPACITY: devMode->dmDefaultSource = DMBIN_LARGECAPACITY; break; + case wxPRINTBIN_CASSETTE: devMode->dmDefaultSource = DMBIN_CASSETTE; break; + case wxPRINTBIN_FORMSOURCE: devMode->dmDefaultSource = DMBIN_FORMSOURCE; break; + + default: + devMode->dmDefaultSource = DMBIN_USER + m_bin - wxPRINTBIN_USER; + break; + } + + devMode->dmFields |= DM_DEFAULTSOURCE; + } + GlobalUnlock(hDevMode); } @@ -516,7 +515,7 @@ void wxPrintData::ConvertToNative() } // TODO: I hope it's OK to pass some empty strings to DEVNAMES. - m_devNames = (void*) (long) wxCreateDevNames("", m_printerName, ""); + m_devNames = (void*) (long) wxCreateDevNames(wxT(""), m_printerName, wxT("")); } void wxPrintData::ConvertFromNative() @@ -531,24 +530,20 @@ void wxPrintData::ConvertFromNative() { LPDEVMODE devMode = (LPDEVMODE)GlobalLock(hDevMode); -#ifndef __WXWINE__ //// Orientation if (devMode->dmFields & DM_ORIENTATION) m_printOrientation = devMode->dmOrientation; -#endif //// Collation -#ifndef __WIN16__ if (devMode->dmFields & DM_COLLATE) { if (devMode->dmCollate == DMCOLLATE_TRUE) - m_printCollate = TRUE; + m_printCollate = true; else - m_printCollate = FALSE; + m_printCollate = false; } -#endif //// Number of copies @@ -557,21 +552,16 @@ void wxPrintData::ConvertFromNative() m_printNoCopies = devMode->dmCopies; } + if (devMode->dmFields & DM_DEFAULTSOURCE) + { + m_bin = (wxPrintBin)devMode->dmDefaultSource; + } + //// Printer name if (devMode->dmDeviceName[0] != 0) { - // TODO: make this Unicode compatible - char buf[32]; - int i = 0; - while (devMode->dmDeviceName[i] != 0) - { - buf[i] = devMode->dmDeviceName[i]; - i ++; - } - buf[i] = 0; - - m_printerName = buf; + m_printerName = devMode->dmDeviceName; } //// Colour @@ -579,17 +569,20 @@ void wxPrintData::ConvertFromNative() if (devMode->dmFields & DM_COLOR) { if (devMode->dmColor == DMCOLOR_COLOR) - m_colour = TRUE; + m_colour = true; else - m_colour = FALSE; + m_colour = false; } else - m_colour = TRUE; + m_colour = true; -#ifndef __WXWINE__ //// Paper size - if (devMode->dmFields & DM_PAPERSIZE) + // We don't know size of user defined paper and some buggy drivers + // set both DM_PAPERSIZE and DM_PAPERWIDTH & DM_PAPERLENGTH. Since + // dmPaperSize >= DMPAPER_USER wouldn't be in wxWin's database, this + // code wouldn't set m_paperSize correctly. + if ((devMode->dmFields & DM_PAPERSIZE) && (devMode->dmPaperSize < DMPAPER_USER)) { if (wxThePrintPaperDatabase) { @@ -597,8 +590,8 @@ void wxPrintData::ConvertFromNative() if (paper) { m_paperId = paper->GetId(); - m_paperSize.x = paper->GetWidth() / 10 ; - m_paperSize.y = paper->GetHeight() / 10 ; + m_paperSize.x = paper->GetWidth() / 10; + m_paperSize.y = paper->GetHeight() / 10; } else { @@ -622,7 +615,7 @@ void wxPrintData::ConvertFromNative() } else if ((devMode->dmFields & DM_PAPERWIDTH) && (devMode->dmFields & DM_PAPERLENGTH)) { - // DEVMODE is in tenths of a milimeter + // DEVMODE is in tenths of a milimeter m_paperSize.x = devMode->dmPaperWidth / 10; m_paperSize.y = devMode->dmPaperLength / 10; m_paperId = wxPAPER_NONE; @@ -636,7 +629,6 @@ void wxPrintData::ConvertFromNative() m_paperSize.y = 0; m_paperId = wxPAPER_NONE; } -#endif //// Duplex @@ -705,7 +697,7 @@ void wxPrintData::ConvertFromNative() // m_printData.SetPortName((LPSTR)lpDevNames + lpDevNames->wDriverOffset); // Get the printer name - wxString printerName = (LPSTR)lpDevNames + lpDevNames->wDeviceOffset; + wxString printerName = (LPTSTR)lpDevNames + lpDevNames->wDeviceOffset; // Not sure if we should check for this mismatch // wxASSERT_MSG( (m_printerName == "" || (devName == m_printerName)), "Printer name obtained from DEVMODE and DEVNAMES were different!"); @@ -721,31 +713,23 @@ void wxPrintData::ConvertFromNative() #endif #ifdef __WXMAC__ + void wxPrintData::ConvertToNative() { -#ifdef TARGET_CARBON -#else - (**m_macPrintInfo).prJob.iCopies = m_printNoCopies ; -#endif + m_nativePrintData->TransferFrom( this ) ; } void wxPrintData::ConvertFromNative() { -#ifdef TARGET_CARBON -#else - m_printNoCopies = (**m_macPrintInfo).prJob.iCopies ; -#endif + m_nativePrintData->TransferTo( this ) ; } + #endif void wxPrintData::operator=(const wxPrintData& data) { #ifdef __WXMAC__ -#ifdef TARGET_CARBON -#else - m_macPrintInfo = data.m_macPrintInfo ; - HandToHand( (Handle*) &m_macPrintInfo ) ; -#endif + m_nativePrintData->CopyFrom( data.m_nativePrintData ) ; #endif m_printNoCopies = data.m_printNoCopies; m_printCollate = data.m_printCollate; @@ -756,6 +740,10 @@ void wxPrintData::operator=(const wxPrintData& data) m_printQuality = data.m_printQuality; m_paperId = data.m_paperId; m_paperSize = data.m_paperSize; + m_bin = data.m_bin; +#ifdef wxUSE_STREAMS + m_outputstream = data.m_outputstream; +#endif // PostScript-specific data m_printerCommand = data.m_printerCommand; @@ -770,32 +758,16 @@ void wxPrintData::operator=(const wxPrintData& data) m_printMode = data.m_printMode; } -// For compatibility -#if wxCOMPATIBILITY_WITH_PRINTSETUPDATA -void wxPrintData::operator=(const wxPrintSetupData& setupData) +// Is this data OK for showing the print dialog? +bool wxPrintData::Ok() const { - SetPrinterCommand(setupData.GetPrinterCommand()); - SetPreviewCommand(setupData.GetPrintPreviewCommand()); - SetPrinterOptions(setupData.GetPrinterOptions()); - - long xt, yt; - setupData.GetPrinterTranslation(& xt, & yt); - SetPrinterTranslation(xt, yt); - - double xs, ys; - setupData.GetPrinterScaling(& xs, & ys); - SetPrinterScaling(xs, ys); - - SetOrientation(setupData.GetPrinterOrientation()); - SetPrintMode((wxPrintMode) setupData.GetPrinterMode()); - SetFontMetricPath(setupData.GetAFMPath()); - if (setupData.GetPaperName() != "") - SetPaperId(wxThePrintPaperDatabase->ConvertNameToId(setupData.GetPaperName())); - SetColour(setupData.GetColour()); - SetFilename(setupData.GetPrinterFile()); +#ifdef __WXMSW__ + ((wxPrintData*)this)->ConvertToNative(); + return (m_devMode != NULL) ; +#else + return true; +#endif } -#endif // wxCOMPATIBILITY_WITH_PRINTSETUPDATA - // ---------------------------------------------------------------------------- // Print dialog data @@ -811,18 +783,19 @@ wxPrintDialogData::wxPrintDialogData() m_printMinPage = 0; m_printMaxPage = 0; m_printNoCopies = 1; - m_printAllPages = FALSE; - m_printCollate = FALSE; - m_printToFile = FALSE; - m_printSelection = FALSE; - m_printEnableSelection = FALSE; - m_printEnablePageNumbers = TRUE; - m_printEnablePrintToFile = TRUE; - m_printEnableHelp = FALSE; - m_printSetupDialog = FALSE; + m_printAllPages = false; + m_printCollate = false; + m_printToFile = false; + m_printSelection = false; + m_printEnableSelection = false; + m_printEnablePageNumbers = true; + m_printEnablePrintToFile = true; + m_printEnableHelp = false; + m_printSetupDialog = false; } wxPrintDialogData::wxPrintDialogData(const wxPrintDialogData& dialogData) + : wxObject() { #ifdef __WXMSW__ m_printDlgData = NULL; @@ -835,20 +808,20 @@ wxPrintDialogData::wxPrintDialogData(const wxPrintData& printData) #ifdef __WXMSW__ m_printDlgData = NULL; #endif - m_printFromPage = 0; + m_printFromPage = 1; m_printToPage = 0; - m_printMinPage = 0; - m_printMaxPage = 0; + m_printMinPage = 1; + m_printMaxPage = 9999; m_printNoCopies = 1; - m_printAllPages = FALSE; - m_printCollate = FALSE; - m_printToFile = FALSE; - m_printSelection = FALSE; - m_printEnableSelection = FALSE; - m_printEnablePageNumbers = TRUE; - m_printEnablePrintToFile = TRUE; - m_printEnableHelp = FALSE; - m_printSetupDialog = FALSE; + m_printAllPages = false; + m_printCollate = false; + m_printToFile = false; + m_printSelection = false; + m_printEnableSelection = false; + m_printEnablePageNumbers = true; + m_printEnablePrintToFile = true; + m_printEnableHelp = false; + m_printSetupDialog = false; m_printData = printData; } @@ -874,11 +847,12 @@ void wxPrintDialogData::ConvertToNative() if (!pd) { pd = new PRINTDLG; + memset( pd, 0, sizeof(PRINTDLG) ); m_printDlgData = (void*) pd; // GNU-WIN32 has the wrong size PRINTDLG - can't work out why. #ifdef __GNUWIN32__ - pd->lStructSize = 66 ; + pd->lStructSize = 66; #else pd->lStructSize = sizeof(PRINTDLG); #endif @@ -908,23 +882,24 @@ void wxPrintDialogData::ConvertToNative() m_printData.SetNativeData((void*) NULL); - wxASSERT_MSG( (pd->hDevMode), wxT("hDevMode must be non-NULL in ConvertToNative!")); + // Shouldn't assert; we should be able to test Ok-ness at a higher level + //wxASSERT_MSG( (pd->hDevMode), wxT("hDevMode must be non-NULL in ConvertToNative!")); pd->hDevNames = (HGLOBAL)(DWORD) m_printData.GetNativeDataDevNames(); m_printData.SetNativeDataDevNames((void*) NULL); pd->hDC = (HDC) NULL; - pd->nFromPage = (UINT)m_printFromPage; - pd->nToPage = (UINT)m_printToPage; - pd->nMinPage = (UINT)m_printMinPage; - pd->nMaxPage = (UINT)m_printMaxPage; - pd->nCopies = (UINT)m_printNoCopies; + pd->nFromPage = (WORD)m_printFromPage; + pd->nToPage = (WORD)m_printToPage; + pd->nMinPage = (WORD)m_printMinPage; + pd->nMaxPage = (WORD)m_printMaxPage; + pd->nCopies = (WORD)m_printNoCopies; - pd->Flags = PD_RETURNDC ; + pd->Flags = PD_RETURNDC; #ifdef __GNUWIN32__ - pd->lStructSize = 66 ; + pd->lStructSize = 66; #else pd->lStructSize = sizeof( PRINTDLG ); #endif @@ -942,7 +917,7 @@ void wxPrintDialogData::ConvertToNative() if ( m_printAllPages ) pd->Flags |= PD_ALLPAGES; - if ( m_printAllPages ) + if ( m_printSelection ) pd->Flags |= PD_SELECTION; if ( m_printCollate ) pd->Flags |= PD_COLLATE; @@ -954,6 +929,8 @@ void wxPrintDialogData::ConvertToNative() pd->Flags |= PD_NOSELECTION; if ( !m_printEnablePageNumbers ) pd->Flags |= PD_NOPAGENUMS; + else if ( (!m_printAllPages) && (!m_printSelection) && (m_printFromPage != 0) && (m_printToPage != 0)) + pd->Flags |= PD_PAGENUMS; if ( m_printEnableHelp ) pd->Flags |= PD_SHOWHELP; if ( m_printSetupDialog ) @@ -991,16 +968,16 @@ void wxPrintDialogData::ConvertFromNative() } // Now convert the DEVMODE object, passed down from the PRINTDLG object, - // into wxWindows form. + // into wxWidgets form. m_printData.ConvertFromNative(); - m_printFromPage = pd->nFromPage ; - m_printToPage = pd->nToPage ; - m_printMinPage = pd->nMinPage ; - m_printMaxPage = pd->nMaxPage ; - m_printNoCopies = pd->nCopies ; + m_printFromPage = pd->nFromPage; + m_printToPage = pd->nToPage; + m_printMinPage = pd->nMinPage; + m_printMaxPage = pd->nMaxPage; + m_printNoCopies = pd->nCopies; - m_printAllPages = ((pd->Flags & PD_ALLPAGES) == PD_ALLPAGES); + m_printAllPages = (((pd->Flags & PD_PAGENUMS) != PD_PAGENUMS) && ((pd->Flags & PD_SELECTION) != PD_SELECTION)); m_printSelection = ((pd->Flags & PD_SELECTION) == PD_SELECTION); m_printCollate = ((pd->Flags & PD_COLLATE) == PD_COLLATE); m_printToFile = ((pd->Flags & PD_PRINTTOFILE) == PD_PRINTTOFILE); @@ -1033,32 +1010,26 @@ void wxPrintDialogData::SetOwnerWindow(wxWindow* win) if ( m_printDlgData != NULL && win != NULL) { - PRINTDLG *pd = (PRINTDLG *) m_printDlgData ; + PRINTDLG *pd = (PRINTDLG *) m_printDlgData; pd->hwndOwner=(HWND) win->GetHWND(); } } #endif // MSW #ifdef __WXMAC__ + void wxPrintDialogData::ConvertToNative() { -#ifdef TARGET_CARBON -#else - (**m_printData.m_macPrintInfo).prJob.iFstPage = m_printFromPage ; - (**m_printData.m_macPrintInfo).prJob.iLstPage = m_printToPage ; - m_printData.ConvertToNative() ; -#endif + m_printData.ConvertToNative(); + m_printData.m_nativePrintData->TransferFrom( this ) ; } void wxPrintDialogData::ConvertFromNative() { -#ifdef TARGET_CARBON -#else - m_printData.ConvertFromNative() ; - m_printFromPage = (**m_printData.m_macPrintInfo).prJob.iFstPage ; - m_printToPage = (**m_printData.m_macPrintInfo).prJob.iLstPage ; -#endif + m_printData.ConvertFromNative(); + m_printData.m_nativePrintData->TransferTo( this ) ; } + #endif @@ -1106,16 +1077,17 @@ wxPageSetupDialogData::wxPageSetupDialogData() m_marginBottomRight = wxPoint(0, 0); // Flags - m_defaultMinMargins = FALSE; - m_enableMargins = TRUE; - m_enableOrientation = TRUE; - m_enablePaper = TRUE; - m_enablePrinter = TRUE; - m_enableHelp = FALSE; - m_getDefaultInfo = FALSE; + m_defaultMinMargins = false; + m_enableMargins = true; + m_enableOrientation = true; + m_enablePaper = true; + m_enablePrinter = true; + m_enableHelp = false; + m_getDefaultInfo = false; } wxPageSetupDialogData::wxPageSetupDialogData(const wxPageSetupDialogData& dialogData) + : wxObject() { #if defined(__WIN95__) m_pageSetupData = NULL; @@ -1135,13 +1107,13 @@ wxPageSetupDialogData::wxPageSetupDialogData(const wxPrintData& printData) m_marginBottomRight = wxPoint(0, 0); // Flags - m_defaultMinMargins = FALSE; - m_enableMargins = TRUE; - m_enableOrientation = TRUE; - m_enablePaper = TRUE; - m_enablePrinter = TRUE; - m_enableHelp = FALSE; - m_getDefaultInfo = FALSE; + m_defaultMinMargins = false; + m_enableMargins = true; + m_enableOrientation = true; + m_enablePaper = true; + m_enablePrinter = true; + m_enableHelp = false; + m_getDefaultInfo = false; m_printData = printData; @@ -1163,7 +1135,7 @@ wxPageSetupDialogData::~wxPageSetupDialogData() #endif } -void wxPageSetupDialogData::operator=(const wxPageSetupDialogData& data) +wxPageSetupDialogData& wxPageSetupDialogData::operator=(const wxPageSetupDialogData& data) { m_paperSize = data.m_paperSize; m_minMarginTopLeft = data.m_minMarginTopLeft; @@ -1179,11 +1151,15 @@ void wxPageSetupDialogData::operator=(const wxPageSetupDialogData& data) m_enableHelp = data.m_enableHelp; m_printData = data.m_printData; + + return *this; } -void wxPageSetupDialogData::operator=(const wxPrintData& data) +wxPageSetupDialogData& wxPageSetupDialogData::operator=(const wxPrintData& data) { m_printData = data; + + return *this; } #if defined(__WIN95__) @@ -1215,7 +1191,8 @@ void wxPageSetupDialogData::ConvertToNative() m_printData.SetNativeData((void*) NULL); - wxASSERT_MSG( (pd->hDevMode), wxT("hDevMode must be non-NULL in ConvertToNative!")); + // Shouldn't assert; we should be able to test Ok-ness at a higher level + //wxASSERT_MSG( (pd->hDevMode), wxT("hDevMode must be non-NULL in ConvertToNative!")); // Pass the devnames data (created in m_printData.ConvertToNative) // to the PRINTDLG structure, since it'll @@ -1257,7 +1234,7 @@ void wxPageSetupDialogData::ConvertToNative() pd->hwndOwner=(HWND)NULL; // pd->hDevNames=(HWND)NULL; pd->hInstance=(HINSTANCE)NULL; - // PAGESETUPDLG is in hundreds of a mm + // PAGESETUPDLG is in hundreds of a mm pd->ptPaperSize.x = m_paperSize.x * 100; pd->ptPaperSize.y = m_paperSize.y * 100; @@ -1292,7 +1269,7 @@ void wxPageSetupDialogData::ConvertToNative() void wxPageSetupDialogData::ConvertFromNative() { - PAGESETUPDLG *pd = (PAGESETUPDLG *) m_pageSetupData ; + PAGESETUPDLG *pd = (PAGESETUPDLG *) m_pageSetupData; if ( !pd ) return; @@ -1334,7 +1311,7 @@ void wxPageSetupDialogData::ConvertFromNative() m_getDefaultInfo = ((pd->Flags & PSD_RETURNDEFAULT) == PSD_RETURNDEFAULT); m_enableHelp = ((pd->Flags & PSD_SHOWHELP) == PSD_SHOWHELP); - // PAGESETUPDLG is in hundreds of a mm + // PAGESETUPDLG is in hundreds of a mm m_paperSize.x = pd->ptPaperSize.x / 100; m_paperSize.y = pd->ptPaperSize.y / 100; @@ -1343,10 +1320,10 @@ void wxPageSetupDialogData::ConvertFromNative() m_minMarginBottomRight.x = pd->rtMinMargin.right / 100; m_minMarginBottomRight.y = pd->rtMinMargin.bottom / 100; - m_marginTopLeft.x = pd->rtMargin.left / 100 ; - m_marginTopLeft.y = pd->rtMargin.top / 100 ; - m_marginBottomRight.x = pd->rtMargin.right / 100 ; - m_marginBottomRight.y = pd->rtMargin.bottom / 100 ; + m_marginTopLeft.x = pd->rtMargin.left / 100; + m_marginTopLeft.y = pd->rtMargin.top / 100; + m_marginBottomRight.x = pd->rtMargin.right / 100; + m_marginBottomRight.y = pd->rtMargin.bottom / 100; } void wxPageSetupDialogData::SetOwnerWindow(wxWindow* win) @@ -1356,7 +1333,7 @@ void wxPageSetupDialogData::SetOwnerWindow(wxWindow* win) if ( m_pageSetupData != NULL && win != NULL) { - PAGESETUPDLG *pd = (PAGESETUPDLG *) m_pageSetupData ; + PAGESETUPDLG *pd = (PAGESETUPDLG *) m_pageSetupData; pd->hwndOwner=(HWND) win->GetHWND(); } } @@ -1365,52 +1342,29 @@ void wxPageSetupDialogData::SetOwnerWindow(wxWindow* win) #ifdef __WXMAC__ void wxPageSetupDialogData::ConvertToNative() { - m_printData.ConvertToNative() ; - // on mac the paper rect has a negative top left corner, because the page rect (printable area) is at 0,0 -#ifdef TARGET_CARBON -#else - (**m_printData.m_macPrintInfo).rPaper.left = int( ((double) m_minMarginTopLeft.x)*mm2pt ) ; - (**m_printData.m_macPrintInfo).rPaper.top = int( ((double) m_minMarginTopLeft.y)*mm2pt ) ; - - (**m_printData.m_macPrintInfo).rPaper.right = int( ((double) m_paperSize.x - m_minMarginTopLeft.x)*mm2pt ) ; - (**m_printData.m_macPrintInfo).rPaper.bottom = int( ((double) m_paperSize.y - m_minMarginTopLeft.y)*mm2pt ) ; - - (**m_printData.m_macPrintInfo).prInfo.rPage.left = 0 ; - (**m_printData.m_macPrintInfo).prInfo.rPage.top = 0 ; - (**m_printData.m_macPrintInfo).prInfo.rPage.right = int( ((double) m_paperSize.x - m_minMarginTopLeft.x - m_minMarginBottomRight.x)*mm2pt ) ; - (**m_printData.m_macPrintInfo).prInfo.rPage.bottom = int( ((double) m_paperSize.y - m_minMarginTopLeft.y - m_minMarginBottomRight.y)*mm2pt ) ; -#endif + m_printData.ConvertToNative(); + m_printData.m_nativePrintData->TransferFrom( this ) ; } void wxPageSetupDialogData::ConvertFromNative() { - m_printData.ConvertFromNative () ; + m_printData.ConvertFromNative (); + m_paperSize = m_printData.GetPaperSize() ; + CalculateIdFromPaperSize(); + m_printData.m_nativePrintData->TransferTo( this ) ; + // adjust minimal values -#ifdef TARGET_CARBON -#else - m_paperSize.x = ((double) (**m_printData.m_macPrintInfo).rPaper.right - (**m_printData.m_macPrintInfo).rPaper.left ) * pt2mm ; - m_paperSize.y = ((double) (**m_printData.m_macPrintInfo).rPaper.bottom - (**m_printData.m_macPrintInfo).rPaper.top ) * pt2mm ; - - m_minMarginTopLeft.x = ((double) -(**m_printData.m_macPrintInfo).rPaper.left ) * pt2mm ; - m_minMarginTopLeft.y = ((double) -(**m_printData.m_macPrintInfo).rPaper.top ) * pt2mm ; - - m_minMarginBottomRight.x = ((double) (**m_printData.m_macPrintInfo).rPaper.right - (**m_printData.m_macPrintInfo).prInfo.rPage.right ) * pt2mm ; - m_minMarginBottomRight.y = ((double)(**m_printData.m_macPrintInfo).rPaper.bottom - (**m_printData.m_macPrintInfo).prInfo.rPage.bottom ) * pt2mm ; -#endif - // adjust minimal values - //TODO add custom fields in dialog for margins - - if ( m_marginTopLeft.x < m_minMarginTopLeft.x ) - m_marginTopLeft.x = m_minMarginTopLeft.x ; - - if ( m_marginBottomRight.x < m_minMarginBottomRight.x ) - m_marginBottomRight.x = m_minMarginBottomRight.x ; - - if ( m_marginTopLeft.y < m_minMarginTopLeft.y ) - m_marginTopLeft.y = m_minMarginTopLeft.y ; - - if ( m_marginBottomRight.y < m_minMarginBottomRight.y ) - m_marginBottomRight.y = m_minMarginBottomRight.y ; + if ( m_marginTopLeft.x < m_minMarginTopLeft.x ) + m_marginTopLeft.x = m_minMarginTopLeft.x; + + if ( m_marginBottomRight.x < m_minMarginBottomRight.x ) + m_marginBottomRight.x = m_minMarginBottomRight.x; + + if ( m_marginTopLeft.y < m_minMarginTopLeft.y ) + m_marginTopLeft.y = m_minMarginTopLeft.y; + + if ( m_marginBottomRight.y < m_minMarginBottomRight.y ) + m_marginBottomRight.y = m_minMarginBottomRight.y; } #endif @@ -1456,12 +1410,9 @@ void wxPageSetupDialogData::CalculatePaperSizeFromId() wxSize sz = wxThePrintPaperDatabase->GetSize(m_printData.GetPaperId()); - if (sz.x != 0) - { - // sz is in 10ths of a mm, so multiply by 10. - m_paperSize.x = sz.x * 10; - m_paperSize.y = sz.y * 10; - } + // sz is in 10ths of a mm, while paper size is in mm + m_paperSize.x = sz.x / 10; + m_paperSize.y = sz.y / 10; } #endif // wxUSE_PRINTING_ARCHITECTURE