#include "wx/radiobox.h"
#include "wx/textctrl.h"
#include "wx/prntbase.h"
+#include "wx/paper.h"
#include <math.h>
m_signX = 1; // default x-axis left to right
m_signY = -1; // default y-axis bottom up -> top down
+
+ // Compatibility only
+ m_printData = * wxThePrintSetupData;
}
wxPostScriptDC::wxPostScriptDC (const wxString& file, bool interactive, wxWindow *parent)
m_isInteractive = interactive;
m_title = "";
- m_filename = file;
+ m_printData.SetFilename(file);
#ifdef __WXMSW__
// Can only send to file in Windows
- wxThePrintSetupData->SetPrinterMode(PS_FILE);
+ m_printData.SetPrintMode(wxPRINT_MODE_FILE);
#endif
if (m_isInteractive)
return m_ok;
}
+wxPostScriptDC::wxPostScriptDC (const wxPrintData& printData)
+{
+ m_pstream = (ofstream*) NULL;
+
+ m_currentRed = 0;
+ m_currentGreen = 0;
+ m_currentBlue = 0;
+
+ m_pageNumber = 0;
+
+ m_clipping = FALSE;
+
+ m_underlinePosition = 0.0;
+ m_underlineThickness = 0.0;
+
+ m_signX = 1; // default x-axis left to right
+ m_signY = -1; // default y-axis bottom up -> top down
+
+ m_printData = printData;
+
+ m_ok = TRUE;
+}
+
wxPostScriptDC::~wxPostScriptDC ()
{
if (m_pstream) delete m_pstream;
return m_ok;
}
+// This dialog is deprecated now: use wxGenericPrintDialog or the printing framework
bool wxPostScriptDC::PrinterDialog(wxWindow *parent)
{
wxPostScriptPrintDialog dialog( parent, _("Printer Settings"), wxPoint(150, 150), wxSize(400, 400),
if (!m_ok) return FALSE;
- if ((m_filename == "") &&
- (wxThePrintSetupData->GetPrinterMode() == PS_PREVIEW ||
- wxThePrintSetupData->GetPrinterMode() == PS_PRINTER))
+ if ((m_printData.GetFilename() == "") &&
+ (m_printData.GetPrintMode() == wxPRINT_MODE_PREVIEW ||
+ m_printData.GetPrintMode() == wxPRINT_MODE_PRINTER))
{
// steve, 05.09.94
#ifdef __VMS__
- wxThePrintSetupData->SetPrinterFile("preview");
+ m_printData.SetFilename("preview");
#else
// For PS_PRINTER action this depends on a Unix-style print spooler
// since the wx_printer_file can be destroyed during a session
// @@@ TODO: a Windows-style answer for non-Unix
- char userId[256];
+ wxChar userId[256];
wxGetUserId (userId, sizeof (userId) / sizeof (char));
- char tmp[256];
- strcpy (tmp, "/tmp/preview_");
- strcat (tmp, userId);
- wxThePrintSetupData->SetPrinterFile(tmp);
+ wxChar tmp[256];
+ wxStrcpy (tmp, _T("/tmp/preview_"));
+ wxStrcat (tmp, userId);
+ m_printData.SetFilename(tmp);
#endif
- char tmp2[256];
- strcpy(tmp2, wxThePrintSetupData->GetPrinterFile());
- strcat (tmp2, ".ps");
- wxThePrintSetupData->SetPrinterFile(tmp2);
- m_filename = tmp2;
+ wxChar tmp2[256];
+ wxStrcpy(tmp2, m_printData.GetFilename());
+ wxStrcat (tmp2, _T(".ps"));
+ m_printData.SetFilename(tmp2);
}
- else if ((m_filename == "") && (wxThePrintSetupData->GetPrinterMode() == PS_FILE))
+ else if ((m_printData.GetFilename() == _T("")) && (m_printData.GetPrintMode() == wxPRINT_MODE_FILE))
{
- wxString file = wxSaveFileSelector (_("PostScript"), "ps");
+ wxString file = wxSaveFileSelector (_("PostScript"), _T("ps"));
if ( file.IsEmpty() )
{
m_ok = FALSE;
return FALSE;
}
- wxThePrintSetupData->SetPrinterFile(file);
- m_filename = file;
+ m_printData.SetFilename(file);
m_ok = TRUE;
}
void wxPostScriptDC::SetClippingRegion (long x, long y, long w, long h)
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (m_clipping) return;
void wxPostScriptDC::DestroyClippingRegion()
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
wxDC::DestroyClippingRegion();
void wxPostScriptDC::Clear()
{
- wxFAIL_MSG( "wxPostScriptDC::Clear not implemented." );
+ wxFAIL_MSG( _T("wxPostScriptDC::Clear not implemented.") );
}
-void wxPostScriptDC::FloodFill (long WXUNUSED(x), long WXUNUSED(y), const wxColour &WXUNUSED(col), int WXUNUSED(style))
+void wxPostScriptDC::DoFloodFill (long WXUNUSED(x), long WXUNUSED(y), const wxColour &WXUNUSED(col), int WXUNUSED(style))
{
- wxFAIL_MSG( "wxPostScriptDC::FloodFill not implemented." );
+ wxFAIL_MSG( _T("wxPostScriptDC::FloodFill not implemented.") );
}
-bool wxPostScriptDC::GetPixel (long WXUNUSED(x), long WXUNUSED(y), wxColour * WXUNUSED(col)) const
+bool wxPostScriptDC::DoGetPixel (long WXUNUSED(x), long WXUNUSED(y), wxColour * WXUNUSED(col)) const
{
- wxFAIL_MSG( "wxPostScriptDC::GetPixel not implemented." );
+ wxFAIL_MSG( _T("wxPostScriptDC::GetPixel not implemented.") );
return FALSE;
}
-void wxPostScriptDC::CrossHair (long WXUNUSED(x), long WXUNUSED(y))
+void wxPostScriptDC::DoCrossHair (long WXUNUSED(x), long WXUNUSED(y))
{
- wxFAIL_MSG( "wxPostScriptDC::CrossHair not implemented." );
+ wxFAIL_MSG( _T("wxPostScriptDC::CrossHair not implemented.") );
}
-void wxPostScriptDC::DrawLine (long x1, long y1, long x2, long y2)
+void wxPostScriptDC::DoDrawLine (long x1, long y1, long x2, long y2)
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (m_pen.GetStyle() == wxTRANSPARENT) return;
#define RAD2DEG 57.29577951308
-void wxPostScriptDC::DrawArc (long x1, long y1, long x2, long y2, long xc, long yc)
+void wxPostScriptDC::DoDrawArc (long x1, long y1, long x2, long y2, long xc, long yc)
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
long dx = x1 - xc;
long dy = y1 - yc;
CalcBoundingBox( xc+radius, yc+radius );
}
-void wxPostScriptDC::DrawEllipticArc(long x,long y,long w,long h,double sa,double ea)
+void wxPostScriptDC::DoDrawEllipticArc(long x,long y,long w,long h,double sa,double ea)
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (sa>=360 || sa<=-360) sa=sa-int(sa/360)*360;
if (ea>=360 || ea<=-360) ea=ea-int(ea/360)*360;
}
}
-void wxPostScriptDC::DrawPoint (long x, long y)
+void wxPostScriptDC::DoDrawPoint (long x, long y)
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (m_pen.GetStyle() == wxTRANSPARENT) return;
CalcBoundingBox( x, y );
}
-void wxPostScriptDC::DrawPolygon (int n, wxPoint points[], long xoffset, long yoffset, int WXUNUSED(fillStyle))
+void wxPostScriptDC::DoDrawPolygon (int n, wxPoint points[], long xoffset, long yoffset, int WXUNUSED(fillStyle))
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (n <= 0) return;
}
}
-void wxPostScriptDC::DrawLines (int n, wxPoint points[], long xoffset, long yoffset)
+void wxPostScriptDC::DoDrawLines (int n, wxPoint points[], long xoffset, long yoffset)
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (m_pen.GetStyle() == wxTRANSPARENT)
return;
*m_pstream << "stroke\n";
}
-void wxPostScriptDC::DrawRectangle (long x, long y, long width, long height)
+void wxPostScriptDC::DoDrawRectangle (long x, long y, long width, long height)
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (m_brush.GetStyle () != wxTRANSPARENT)
{
}
}
-void wxPostScriptDC::DrawRoundedRectangle (long x, long y, long width, long height, double radius)
+void wxPostScriptDC::DoDrawRoundedRectangle (long x, long y, long width, long height, double radius)
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (radius < 0.0)
{
}
}
-void wxPostScriptDC::DrawEllipse (long x, long y, long width, long height)
+void wxPostScriptDC::DoDrawEllipse (long x, long y, long width, long height)
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (m_brush.GetStyle () != wxTRANSPARENT)
{
}
}
-void wxPostScriptDC::DrawIcon( const wxIcon& icon, long x, long y )
+void wxPostScriptDC::DoDrawIcon( const wxIcon& icon, long x, long y )
{
DrawBitmap( icon, x, y, TRUE );
}
-void wxPostScriptDC::DrawBitmap( const wxBitmap& bitmap, long x, long y, bool WXUNUSED(useMask) )
+void wxPostScriptDC::DoDrawBitmap( const wxBitmap& bitmap, long x, long y, bool WXUNUSED(useMask) )
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (!bitmap.Ok()) return;
{
for (int i = 0; i < ww; i++)
{
- char buffer[5];
+ wxChar buffer[5];
buffer[2] = 0;
wxDecToHex( image.GetRed(i,j), buffer );
*m_pstream << buffer;
void wxPostScriptDC::SetFont( const wxFont& font )
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (!font.Ok()) return;
void wxPostScriptDC::SetPen( const wxPen& pen )
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (!pen.Ok()) return;
if (!(red == m_currentRed && green == m_currentGreen && blue == m_currentBlue))
{
- long redPS = (long) (((int) red) / 255.0);
- long bluePS = (long) (((int) blue) / 255.0);
- long greenPS = (long) (((int) green) / 255.0);
-
+ float redPS = (float)(red) / 255.0;
+ float bluePS = (float)(blue) / 255.0;
+ float greenPS = (float)(green) / 255.0;
*m_pstream << redPS << " " << greenPS << " " << bluePS << " setrgbcolor\n";
m_currentRed = red;
void wxPostScriptDC::SetBrush( const wxBrush& brush )
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (!brush.Ok()) return;
m_brush = brush;
// Brush colour
- unsigned char red = m_brush.GetColour ().Red ();
- unsigned char blue = m_brush.GetColour ().Blue ();
- unsigned char green = m_brush.GetColour ().Green ();
+ unsigned char red = m_brush.GetColour().Red();
+ unsigned char blue = m_brush.GetColour().Blue();
+ unsigned char green = m_brush.GetColour().Green();
if (!m_colour)
{
if (!(red == m_currentRed && green == m_currentGreen && blue == m_currentBlue))
{
- long redPS = (long) (((int) red) / 255.0);
- long bluePS = (long) (((int) blue) / 255.0);
- long greenPS = (long) (((int) green) / 255.0);
+ float redPS = (float)(red) / 255.0;
+ float bluePS = (float)(blue) / 255.0;
+ float greenPS = (float)(green) / 255.0;
*m_pstream << redPS << " " << greenPS << " " << bluePS << " setrgbcolor\n";
m_currentRed = red;
m_currentBlue = blue;
}
}
-void wxPostScriptDC::DrawText( const wxString& text, long x, long y, bool WXUNUSED(use16bit) )
+void wxPostScriptDC::DoDrawText( const wxString& text, long x, long y )
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
SetFont( m_font );
if (!(red == m_currentRed && green == m_currentGreen && blue == m_currentBlue))
{
- long redPS = (long) (((int) red) / 255.0);
- long bluePS = (long) (((int) blue) / 255.0);
- long greenPS = (long) (((int) green) / 255.0);
+ float redPS = (float)(red) / 255.0;
+ float bluePS = (float)(blue) / 255.0;
+ float greenPS = (float)(green) / 255.0;
*m_pstream << redPS << " " << greenPS << " " << bluePS << " setrgbcolor\n";
m_currentRed = red;
*m_pstream << XLOG2DEV(x) << " " << YLOG2DEV(by) << " moveto\n";
*m_pstream << "(";
- int len = strlen ((char *)(const char *)text);
+ const wxWX2MBbuf textbuf = text.mb_str();
+ int len = strlen (textbuf);
int i;
for (i = 0; i < len; i++)
{
- int c = (unsigned char) text[i];
+ int c = (unsigned char) textbuf[i];
if ( c == ')' || c == '(' || c == '\\')
{
*m_pstream << "\\" << (char) c;
void wxPostScriptDC::SetLogicalFunction (int WXUNUSED(function))
{
- wxFAIL_MSG( "wxPostScriptDC::SetLogicalFunction not implemented." );
+ wxFAIL_MSG( _T("wxPostScriptDC::SetLogicalFunction not implemented.") );
}
-void wxPostScriptDC::DrawSpline( wxList *points )
+void wxPostScriptDC::DoDrawSpline( wxList *points )
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
SetPen( m_pen );
*m_pstream << XLOG2DEV((long)c) << " " << YLOG2DEV((long)d) << " lineto stroke\n";
}
-long wxPostScriptDC::GetCharWidth ()
+long wxPostScriptDC::GetCharWidth() const
{
// Chris Breeze: reasonable approximation using wxMODERN/Courier
return (long) (GetCharHeight() * 72.0 / 120.0);
void wxPostScriptDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
m_signX = (xLeftRight ? 1 : -1);
m_signY = (yBottomUp ? 1 : -1);
void wxPostScriptDC::SetDeviceOrigin( long x, long y )
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
int h = 0;
int w = 0;
wxDC::SetDeviceOrigin( x, h-y );
}
-void wxPostScriptDC::GetSize(int* width, int* height) const
+void wxPostScriptDC::DoGetSize(int* width, int* height) const
{
- const char *paperType = wxThePrintSetupData->GetPaperName();
-
- if (!paperType) paperType = _("A4 210 x 297 mm");
+ wxPaperSize id = m_printData.GetPaperId();
- wxPrintPaperType *paper = wxThePrintPaperDatabase->FindPaperType(paperType);
+ wxPrintPaperType *paper = wxThePrintPaperDatabase->FindPaperType(id);
- if (!paper) paper = wxThePrintPaperDatabase->FindPaperType(_("A4 210 x 297 mm"));
+ if (!paper) paper = wxThePrintPaperDatabase->FindPaperType(wxPAPER_A4);
if (paper)
{
- if (width) *width = paper->widthPixels;
- if (height) *height = paper->heightPixels;
+ if (width) *width = paper->GetSizeDeviceUnits().x;
+ if (height) *height = paper->GetSizeDeviceUnits().y;
}
else
{
}
}
-bool wxPostScriptDC::StartDoc (const wxString& message)
+void wxPostScriptDC::DoGetSizeMM(int *width, int *height) const
{
- wxCHECK_MSG( m_ok, FALSE, "invalid postscript dc" );
+ wxPaperSize id = m_printData.GetPaperId();
+
+ wxPrintPaperType *paper = wxThePrintPaperDatabase->FindPaperType(id);
- if (m_filename == "")
+ if (!paper) paper = wxThePrintPaperDatabase->FindPaperType(wxPAPER_A4);
+
+ if (paper)
{
- m_filename = wxGetTempFileName("ps");
- wxThePrintSetupData->SetPrinterFile((char *)(const char *)m_filename);
- m_ok = TRUE;
+ if (width) *width = paper->GetWidth() / 10;
+ if (height) *height = paper->GetHeight() / 10;
}
else
{
- wxThePrintSetupData->SetPrinterFile((char *)(const char *)m_filename);
+ if (width) *width = 210;
+ if (height) *height = 297;
+ }
+}
+
+// Resolution in pixels per logical inch
+wxSize wxPostScriptDC::GetPPI(void) const
+{
+ return wxSize(72, 72);
+}
+
+
+bool wxPostScriptDC::StartDoc (const wxString& message)
+{
+ wxCHECK_MSG( m_ok, FALSE, _T("invalid postscript dc") );
+
+ if (m_printData.GetFilename() == "")
+ {
+ wxString filename = wxGetTempFileName("ps");
+ m_printData.SetFilename(filename);
+
+ m_ok = TRUE;
}
- m_pstream = new ofstream (wxThePrintSetupData->GetPrinterFile());
+ m_pstream = new ofstream (m_printData.GetFilename().fn_str());
if (!m_pstream || !m_pstream->good())
{
- wxMessageBox (_("Cannot open file!"), _("Error"), wxOK);
- m_ok = FALSE;
- return FALSE;
+ wxMessageBox (_("Cannot open file!"), _("Error"), wxOK);
+ m_ok = FALSE;
+ return FALSE;
}
m_ok = TRUE;
void wxPostScriptDC::EndDoc ()
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
if (m_clipping)
{
m_pstream = (ofstream *) NULL;
}
- char *header_file = wxGetTempFileName("ps");
+ wxChar *header_file = wxGetTempFileName("ps");
- m_pstream = new ofstream( header_file );
+ m_pstream = new ofstream( wxConv_file.cWX2MB(header_file) );
*m_pstream << "%!PS-Adobe-2.0\n"; /* PostScript magic strings */
- *m_pstream << "%%Title: " << (const char *) m_title << "\n";
+ *m_pstream << "%%Title: " << m_title.mb_str() << "\n";
*m_pstream << "%%Creator: " << wxTheApp->argv[0] << "\n";
- *m_pstream << "%%CreationDate: " << wxNow() << "\n";
+ *m_pstream << "%%CreationDate: " << wxNow().mb_str() << "\n";
- char userID[256];
+ wxChar userID[256];
if ( wxGetEmailAddress(userID, sizeof(userID)) )
{
- *m_pstream << "%%For: " << (char *)userID;
- char userName[245];
+ *m_pstream << "%%For: " << MBSTRINGCAST wxConv_libc.cWX2MB(userID);
+ wxChar userName[245];
if (wxGetUserName(userName, sizeof(userName)))
- *m_pstream << " (" << (char *)userName << ")";
+ *m_pstream << " (" << MBSTRINGCAST wxConv_libc.cWX2MB(userName) << ")";
*m_pstream << "\n";
}
else if ( wxGetUserName(userID, sizeof(userID)) )
{
- *m_pstream << "%%For: " << (char *)userID << "\n";
+ *m_pstream << "%%For: " << MBSTRINGCAST wxConv_libc.cWX2MB(userID) << "\n";
}
// THE FOLLOWING HAS BEEN CONTRIBUTED BY Andy Fyfe <andy@hyperparallel.com>
long wx_printer_translate_x, wx_printer_translate_y;
double wx_printer_scale_x, wx_printer_scale_y;
- wxThePrintSetupData->GetPrinterTranslation(&wx_printer_translate_x, &wx_printer_translate_y);
- wxThePrintSetupData->GetPrinterScaling(&wx_printer_scale_x, &wx_printer_scale_y);
- if (wxThePrintSetupData->GetPrinterOrientation() == PS_LANDSCAPE)
+ wx_printer_translate_x = m_printData.GetPrinterTranslateX();
+ wx_printer_translate_y = m_printData.GetPrinterTranslateY();
+
+ wx_printer_scale_x = m_printData.GetPrinterScaleX();
+ wx_printer_scale_y = m_printData.GetPrinterScaleY();
+
+ if (m_printData.GetOrientation() == wxLANDSCAPE)
{
- *m_pstream << "%%Orientation: Landscape\n";
+ *m_pstream << "%%Orientation: Landscape\n";
}
else
{
long ury = (long) ((YLOG2DEV(m_maxY)+wx_printer_translate_y)*wx_printer_scale_y);
// If we're landscape, our sense of "x" and "y" is reversed.
- if (wxThePrintSetupData->GetPrinterOrientation() == PS_LANDSCAPE)
+ if (m_printData.GetOrientation() == wxLANDSCAPE)
{
long tmp;
tmp = llx; llx = lly; lly = tmp;
delete m_pstream;
m_pstream = (ofstream *) NULL;
- char *tmp_file = wxGetTempFileName("ps");
+ wxChar *tmp_file = wxGetTempFileName("ps");
// Paste header Before wx_printer_file
- wxConcatFiles (header_file, wxThePrintSetupData->GetPrinterFile(), tmp_file);
+ wxConcatFiles (header_file, m_printData.GetFilename(), tmp_file);
wxRemoveFile (header_file);
- wxRemoveFile (wxThePrintSetupData->GetPrinterFile());
- wxRenameFile(tmp_file, wxThePrintSetupData->GetPrinterFile());
+ wxRemoveFile (m_printData.GetFilename());
+ wxRenameFile(tmp_file, m_printData.GetFilename());
#if defined(__X__) || defined(__WXGTK__)
if (m_ok)
{
- switch (wxThePrintSetupData->GetPrinterMode()) {
- case PS_PREVIEW:
+ wxString previewCommand(m_printData.GetPreviewCommand());
+ wxString printerCommand(m_printData.GetPrinterCommand());
+ wxString printerOptions(m_printData.GetPrinterOptions());
+ wxString filename(m_printData.GetFilename());
+
+ switch (m_printData.GetPrintMode()) {
+
+ case wxPRINT_MODE_PREVIEW:
{
- char *argv[3];
- argv[0] = wxThePrintSetupData->GetPrintPreviewCommand();
- argv[1] = wxThePrintSetupData->GetPrinterFile();
- argv[2] = (char *) NULL;
- wxExecute (argv, TRUE);
- wxRemoveFile(wxThePrintSetupData->GetPrinterFile());
+ wxChar *argv[3];
+ argv[0] = WXSTRINGCAST previewCommand;
+ argv[1] = WXSTRINGCAST filename;
+ argv[2] = (wxChar*) NULL;
+ wxExecute (argv, TRUE);
+ wxRemoveFile(m_printData.GetFilename());
}
break;
- case PS_PRINTER:
+ case wxPRINT_MODE_PRINTER:
{
- char *argv[4];
+ wxChar *argv[4];
int argc = 0;
- argv[argc++] = wxThePrintSetupData->GetPrinterCommand();
+ argv[argc++] = WXSTRINGCAST printerCommand;
// !SM! If we simply assign to argv[1] here, if printer options
// are blank, we get an annoying and confusing message from lpr.
- char * opts = wxThePrintSetupData->GetPrinterOptions();
+ wxChar * opts = WXSTRINGCAST printerOptions;
if (opts && *opts)
argv[argc++] = opts;
- argv[argc++] = wxThePrintSetupData->GetPrinterFile();
- argv[argc++] = (char *) NULL;
- wxExecute (argv, TRUE);
- wxRemoveFile(wxThePrintSetupData->GetPrinterFile());
+ argv[argc++] = WXSTRINGCAST filename;
+ argv[argc++] = (wxChar *) NULL;
+ wxExecute (argv, TRUE);
+ wxRemoveFile(filename);
}
break;
- case PS_FILE:
+ case wxPRINT_MODE_FILE:
+ case wxPRINT_MODE_NONE:
break;
}
}
void wxPostScriptDC::StartPage ()
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
*m_pstream << "%%Page: " << (wxPageNumber++) << "\n";
// Output scaling
long translate_x, translate_y;
double scale_x, scale_y;
- wxThePrintSetupData->GetPrinterTranslation(&translate_x, &translate_y);
- wxThePrintSetupData->GetPrinterScaling(&scale_x, &scale_y);
- if (wxThePrintSetupData->GetPrinterOrientation() == PS_LANDSCAPE)
+ translate_x = m_printData.GetPrinterTranslateX();
+ translate_y = m_printData.GetPrinterTranslateY();
+
+ scale_x = m_printData.GetPrinterScaleX();
+ scale_y = m_printData.GetPrinterScaleY();
+
+ if (m_printData.GetOrientation() == wxLANDSCAPE)
{
translate_y -= m_maxY;
*m_pstream << "90 rotate\n";
void wxPostScriptDC::EndPage ()
{
- wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+ wxCHECK_RET( m_ok && m_pstream, _T("invalid postscript dc") );
*m_pstream << "showpage\n";
}
-bool wxPostScriptDC::Blit( long xdest, long ydest,
+bool wxPostScriptDC::DoBlit( long xdest, long ydest,
long fwidth, long fheight,
wxDC *source,
long xsrc, long ysrc,
int rop, bool WXUNUSED(useMask) )
{
- wxCHECK_MSG( m_ok && m_pstream, FALSE, "invalid postscript dc" );
+ wxCHECK_MSG( m_ok && m_pstream, FALSE, _T("invalid postscript dc") );
- wxCHECK_MSG( source, FALSE, "invalid source dc" );
+ wxCHECK_MSG( source, FALSE, _T("invalid source dc") );
/* blit into a bitmap */
return TRUE;
}
-long wxPostScriptDC::GetCharHeight()
+long wxPostScriptDC::GetCharHeight() const
{
if (m_font.Ok())
return m_font.GetPointSize();
}
void wxPostScriptDC::GetTextExtent( const wxString& string, long *x, long *y,
- long *descent, long *externalLeading, wxFont *theFont,
- bool WXUNUSED(use16) )
+ long *descent, long *externalLeading, wxFont *theFont ) const
{
wxFont *fontToUse = theFont;
if (!fontToUse) fontToUse = (wxFont*) &m_font;
- wxCHECK_RET( fontToUse, "GetTextExtent: no font defined" );
- wxCHECK_RET( x, "GetTextExtent: x == NULL" );
- wxCHECK_RET( y, "GetTextExtent: y == NULL" );
+ wxCHECK_RET( fontToUse, _T("GetTextExtent: no font defined") );
+ wxCHECK_RET( x, _T("GetTextExtent: x == NULL") );
+ wxCHECK_RET( y, _T("GetTextExtent: y == NULL") );
+
+ const wxWX2MBbuf strbuf = string.mb_str();
#if !USE_AFM_FOR_POSTSCRIPT
/* Provide a VERY rough estimate (avoid using it).
{
height = fontToUse->GetPointSize();
}
- *x = strlen (string) * height * 72 / 120;
+ *x = strlen (strbuf) * height * 72 / 120;
*y = (long) (height * 1.32); /* allow for descender */
if (descent) *descent = 0;
if (externalLeading) *externalLeading = 0;
/* get the directory of the AFM files */
char afmName[256];
afmName[0] = 0;
- if (wxGetAFMPath()) strcpy( afmName, wxGetAFMPath() );
+ wxString fmPath(m_printData.GetFontMetricPath());
+ if (fmPath != "") strcpy( afmName, (const char*) fmPath );
/* 2. open and process the file
/ a short explanation of the AFM format:
long widthSum=0;
long height=Size; /* by default */
unsigned char *p;
- for(p=(unsigned char *)(const char *)string; *p; p++)
+ for(p=(unsigned char *)strbuf; *p; p++)
{
if(lastWidths[*p]== INT_MIN)
{
#endif
}
-void wxPostScriptDC::GetSizeMM(long *width, long *height) const
-{
- const char *paperType = wxThePrintSetupData->GetPaperName();
-
- if (!paperType) paperType = _("A4 210 x 297 mm");
-
- wxPrintPaperType *paper = wxThePrintPaperDatabase->FindPaperType(paperType);
-
- if (!paper) paper = wxThePrintPaperDatabase->FindPaperType(_("A4 210 x 297 mm"));
-
- if (paper)
- {
- if (width) *width = paper->widthMM;
- if (height) *height = paper->heightMM;
- }
- else
- {
- if (width) *width = 210;
- if (height) *height = 297;
- }
-}
-
// Determine the Default Postscript Previewer
// available on the platform
#if defined(__SUN__) && defined(__XVIEW__)
radio0->SetSelection((int)wxThePrintSetupData->GetPrinterOrientation() - 1);
// @@@ Configuration hook
- if (wxThePrintSetupData->GetPrintPreviewCommand() == NULL)
+ if ( !wxThePrintSetupData->GetPrintPreviewCommand() )
wxThePrintSetupData->SetPrintPreviewCommand(PS_VIEWER_PROG);
- wxGetResource ("wxWindows", "PSView", &wxThePrintSetupData->previewCommand);
+ // wxGetResource ("wxWindows", "PSView", &wxThePrintSetupData->m_previewCommand);
features = (wxThePrintSetupData->GetPrintPreviewCommand() &&
*wxThePrintSetupData->GetPrintPreviewCommand()) ? 3 : 2;
wxRadioBox *radio0 = (wxRadioBox *)FindWindow(wxID_PRINTER_ORIENTATION);
wxRadioBox *radio1 = (wxRadioBox *)FindWindow(wxID_PRINTER_MODES);
- StringToDouble (WXSTRINGCAST text1->GetValue (), &wxThePrintSetupData->printerScaleX);
- StringToDouble (WXSTRINGCAST text2->GetValue (), &wxThePrintSetupData->printerScaleY);
- StringToLong (WXSTRINGCAST text3->GetValue (), &wxThePrintSetupData->printerTranslateX);
- StringToLong (WXSTRINGCAST text4->GetValue (), &wxThePrintSetupData->printerTranslateY);
+ StringToDouble (WXSTRINGCAST text1->GetValue (), &wxThePrintSetupData->m_printerScaleX);
+ StringToDouble (WXSTRINGCAST text2->GetValue (), &wxThePrintSetupData->m_printerScaleY);
+ StringToLong (WXSTRINGCAST text3->GetValue (), &wxThePrintSetupData->m_printerTranslateX);
+ StringToLong (WXSTRINGCAST text4->GetValue (), &wxThePrintSetupData->m_printerTranslateY);
#ifdef __X__
// wxThePrintSetupData->SetPrinterOptions(WXSTRINGCAST text0->GetValue ());
// wxThePrintSetupData->SetPrinterCommand(WXSTRINGCAST text_prt->GetValue ());
#endif
- wxThePrintSetupData->SetPrinterOrientation((radio0->GetSelection() == 1 ? PS_LANDSCAPE : PS_PORTRAIT));
+ wxThePrintSetupData->SetPrinterOrientation((radio0->GetSelection() == 1 ? wxLANDSCAPE : wxPORTRAIT));
// C++ wants this
switch ( radio1->GetSelection() ) {
// PostScript printer settings
// RETAINED FOR BACKWARD COMPATIBILITY
-void wxSetPrinterCommand(const char *cmd)
+void wxSetPrinterCommand(const wxString& cmd)
{
wxThePrintSetupData->SetPrinterCommand(cmd);
}
-void wxSetPrintPreviewCommand(const char *cmd)
+void wxSetPrintPreviewCommand(const wxString& cmd)
{
wxThePrintSetupData->SetPrintPreviewCommand(cmd);
}
-void wxSetPrinterOptions(const char *flags)
+void wxSetPrinterOptions(const wxString& flags)
{
wxThePrintSetupData->SetPrinterOptions(flags);
}
-void wxSetPrinterFile(const char *f)
+void wxSetPrinterFile(const wxString& f)
{
wxThePrintSetupData->SetPrinterFile(f);
}
wxThePrintSetupData->SetPrinterMode(mode);
}
-void wxSetAFMPath(const char *f)
+void wxSetAFMPath(const wxString& f)
{
wxThePrintSetupData->SetAFMPath(f);
}
// Get current values
-char *wxGetPrinterCommand()
+wxString wxGetPrinterCommand()
{
return wxThePrintSetupData->GetPrinterCommand();
}
-char *wxGetPrintPreviewCommand()
+wxString wxGetPrintPreviewCommand()
{
return wxThePrintSetupData->GetPrintPreviewCommand();
}
-char *wxGetPrinterOptions()
+wxString wxGetPrinterOptions()
{
return wxThePrintSetupData->GetPrinterOptions();
}
-char *wxGetPrinterFile()
+wxString wxGetPrinterFile()
{
return wxThePrintSetupData->GetPrinterFile();
}
return wxThePrintSetupData->GetPrinterMode();
}
-char *wxGetAFMPath()
+wxString wxGetAFMPath()
{
return wxThePrintSetupData->GetAFMPath();
}
wxPrintSetupData::wxPrintSetupData()
{
- printerCommand = (char *) NULL;
- previewCommand = (char *) NULL;
- printerFlags = (char *) NULL;
- printerOrient = PS_PORTRAIT;
- printerScaleX = (double)1.0;
- printerScaleY = (double)1.0;
- printerTranslateX = 0;
- printerTranslateY = 0;
- // 1 = Preview, 2 = print to file, 3 = send to printer
- printerMode = 3;
- afmPath = (char *) NULL;
- paperName = (char *) NULL;
- printColour = TRUE;
- printerFile = (char *) NULL;
+ m_printerOrient = wxPORTRAIT;
+ m_printerScaleX = (double)1.0;
+ m_printerScaleY = (double)1.0;
+ m_printerTranslateX = 0;
+ m_printerTranslateY = 0;
+ m_printerMode = wxPRINT_MODE_FILE;
+ m_printColour = TRUE;
}
wxPrintSetupData::~wxPrintSetupData()
{
- if (printerCommand)
- delete[] printerCommand;
- if (previewCommand)
- delete[] previewCommand;
- if (printerFlags)
- delete[] printerFlags;
- if (afmPath)
- delete[] afmPath;
- if (paperName)
- delete[] paperName;
- if (printerFile)
- delete[] printerFile;
-}
-
-void wxPrintSetupData::SetPrinterCommand(const char *cmd)
-{
- if (cmd == printerCommand)
- return;
-
- if (printerCommand)
- delete[] printerCommand;
- if (cmd)
- printerCommand = copystring(cmd);
- else
- printerCommand = (char *) NULL;
-}
-
-void wxPrintSetupData::SetPrintPreviewCommand(const char *cmd)
-{
- if (cmd == previewCommand)
- return;
-
- if (previewCommand)
- delete[] previewCommand;
- if (cmd)
- previewCommand = copystring(cmd);
- else
- previewCommand = (char *) NULL;
-}
-
-void wxPrintSetupData::SetPaperName(const char *name)
-{
- if (name == paperName)
- return;
-
- if (paperName)
- delete[] paperName;
- if (name)
- paperName = copystring(name);
- else
- paperName = (char *) NULL;
-}
-
-void wxPrintSetupData::SetPrinterOptions(const char *flags)
-{
- if (printerFlags == flags)
- return;
-
- if (printerFlags)
- delete[] printerFlags;
- if (flags)
- printerFlags = copystring(flags);
- else
- printerFlags = (char *) NULL;
-}
-
-void wxPrintSetupData::SetPrinterFile(const char *f)
-{
- if (f == printerFile)
- return;
-
- if (printerFile)
- delete[] printerFile;
- if (f)
- printerFile = copystring(f);
- else
- printerFile = (char *) NULL;
-}
-
-void wxPrintSetupData::SetPrinterOrientation(int orient)
-{
- printerOrient = orient;
-}
-
-void wxPrintSetupData::SetPrinterScaling(double x, double y)
-{
- printerScaleX = x;
- printerScaleY = y;
-}
-
-void wxPrintSetupData::SetPrinterTranslation(long x, long y)
-{
- printerTranslateX = x;
- printerTranslateY = y;
-}
-
-// 1 = Preview, 2 = print to file, 3 = send to printer
-void wxPrintSetupData::SetPrinterMode(int mode)
-{
- printerMode = mode;
-}
-
-void wxPrintSetupData::SetAFMPath(const char *f)
-{
- if (f == afmPath)
- return;
-
- if (afmPath)
- delete[] afmPath;
- if (f)
- afmPath = copystring(f);
- else
- afmPath = (char *) NULL;
-}
-
-void wxPrintSetupData::SetColour(bool col)
-{
- printColour = col;
-}
-
-// Get current values
-char *wxPrintSetupData::GetPrinterCommand()
-{
- return printerCommand;
-}
-
-char *wxPrintSetupData::GetPrintPreviewCommand()
-{
- return previewCommand;
-}
-
-char *wxPrintSetupData::GetPrinterOptions()
-{
- return printerFlags;
-}
-
-char *wxPrintSetupData::GetPrinterFile()
-{
- return printerFile;
-}
-
-char *wxPrintSetupData::GetPaperName()
-{
- return paperName;
-}
-
-int wxPrintSetupData::GetPrinterOrientation()
-{
- return printerOrient;
-}
-
-void wxPrintSetupData::GetPrinterScaling(double *x, double *y)
-{
- *x = printerScaleX;
- *y = printerScaleY;
-}
-
-void wxPrintSetupData::GetPrinterTranslation(long *x, long *y)
-{
- *x = printerTranslateX;
- *y = printerTranslateY;
-}
-
-int wxPrintSetupData::GetPrinterMode()
-{
- return printerMode;
-}
-
-char *wxPrintSetupData::GetAFMPath()
-{
- return afmPath;
-}
-
-bool wxPrintSetupData::GetColour()
-{
- return printColour;
}
void wxPrintSetupData::operator=(wxPrintSetupData& data)
SetColour(data.GetColour());
}
+// Initialize from a wxPrintData object (wxPrintData should now be used instead of wxPrintSetupData).
+void wxPrintSetupData::operator=(const wxPrintData& data)
+{
+ SetPrinterCommand(data.GetPrinterCommand());
+ SetPrintPreviewCommand(data.GetPreviewCommand());
+ SetPrinterOptions(data.GetPrinterOptions());
+ SetPrinterTranslation(data.GetPrinterTranslateX(), data.GetPrinterTranslateY());
+ SetPrinterScaling(data.GetPrinterScaleX(), data.GetPrinterScaleY());
+ SetPrinterOrientation(data.GetOrientation());
+ SetPrinterMode((int) data.GetPrintMode());
+ SetAFMPath(data.GetFontMetricPath());
+ SetPaperName(wxThePrintPaperDatabase->ConvertIdToName(data.GetPaperId()));
+ SetColour(data.GetColour());
+ SetPrinterFile(data.GetFilename());
+}
+
void wxInitializePrintSetupData(bool init)
{
if (init)
wxThePrintSetupData = new wxPrintSetupData;
wxThePrintSetupData->SetPrintPreviewCommand(PS_VIEWER_PROG);
- wxThePrintSetupData->SetPrinterOrientation(PS_PORTRAIT);
- wxThePrintSetupData->SetPrinterMode(PS_PREVIEW);
- wxThePrintSetupData->SetPaperName(_("A4 210 x 297 mm"));
+ wxThePrintSetupData->SetPrinterOrientation(wxPORTRAIT);
+ wxThePrintSetupData->SetPrinterMode(wxPRINT_MODE_PREVIEW);
+ wxThePrintSetupData->SetPaperName(_("A4 sheet, 210 x 297 mm"));
// Could have a .ini file to read in some defaults
// - and/or use environment variables, e.g. WXWIN
#ifdef __WXMSW__
wxThePrintSetupData->SetPrinterCommand("print");
wxThePrintSetupData->SetAFMPath("c:\\windows\\system\\");
- wxThePrintSetupData->SetPrinterOptions(NULL);
+ wxThePrintSetupData->SetPrinterOptions("");
#endif
#if !defined(__VMS__) && !defined(__WXMSW__)
wxThePrintSetupData->SetPrinterCommand("lpr");
- wxThePrintSetupData->SetPrinterOptions((char *) NULL);
- wxThePrintSetupData->SetAFMPath((char *) NULL);
+ wxThePrintSetupData->SetPrinterOptions("");
+ wxThePrintSetupData->SetAFMPath("");
#endif
}
else