/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
-#pragma implementation "postscrp.h"
#pragma implementation
#pragma interface
#endif
-//-------------------------------------------------------------------------------
-// compiler funnies
-//-------------------------------------------------------------------------------
-
-// For compilers that support precompilation, includes "wx.h".
-#include "wx/wxprec.h"
-
-#ifdef __BORLANDC__
-#pragma hdrstop
-#endif
-
-#include "wx/defs.h"
-
-#if wxUSE_POSTSCRIPT
-
-#ifndef WX_PRECOMP
-#include "wx/intl.h"
-#include "wx/frame.h"
+#include "wx/postscrp.h"
+#include "wx/dcmemory.h"
#include "wx/utils.h"
+#include "wx/intl.h"
#include "wx/filedlg.h"
-#include "wx/msgdlg.h"
#include "wx/app.h"
-#include "wx/button.h"
-#include "wx/radiobox.h"
-#include "wx/textctrl.h"
-#include "wx/stattext.h"
-#include "wx/icon.h"
-#include "wx/list.h"
-#endif
-
-#include "wx/postscrp.h"
-#include "wx/dcmemory.h"
-
-#ifdef __WXMSW__
-#include "wx/msw/private.h"
-#endif
-
-#if wxUSE_IOSTREAMH
-#include <iostream.h>
-#include <fstream.h>
-#else
-#include <iostream>
-#include <fstream>
-# ifdef _MSC_VER
- using namespace std;
-# endif
-#endif
-
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include <assert.h>
-
-#ifdef __WXGTK__
-
-#include "gdk/gdkx.h" // GDK_DISPLAY
-#include "gdk/gdkprivate.h" // XImage
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-
-#endif
-
-#ifdef __WXMOTIF__
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#endif
-
-#ifdef __WXMSW__
-
-#ifdef DrawText
-#undef DrawText
-#endif
-
-#ifdef StartDoc
-#undef StartDoc
-#endif
-
-#ifdef GetCharWidth
-#undef GetCharWidth
-#endif
-
-#ifdef FindWindow
-#undef FindWindow
-#endif
-
-#endif
-
-//-------------------------------------------------------------------------------
-// Postscript viewer
-//-------------------------------------------------------------------------------
-
-// Determine the Default Postscript Previewer
-// available on the platform
-#if defined(__SUN__) && defined(__XVIEW__)
-// OpenWindow/NeWS's Postscript Previewer
-# define PS_VIEWER_PROG "pageview"
-#elif defined(__VMS__)
-#define PS_VIEWER_PROG "view/format=ps/select=x_display"
-#elif defined(__SGI__)
-// SGI's Display Postscript Previewer
-//# define PS_VIEWER_PROG "dps"
-# define PS_VIEWER_PROG "xpsview"
-#elif defined(__X__) || defined(__WXGTK__)
-// Front-end to ghostscript
-# define PS_VIEWER_PROG "ghostview"
-#else
-// Windows ghostscript/ghostview
-# define PS_VIEWER_PROG NULL
-#endif
-
-//-------------------------------------------------------------------------------
-// global data
-//-------------------------------------------------------------------------------
-
-wxPrintSetupData *wxThePrintSetupData = (wxPrintSetupData *) NULL;
+#include "wx/msgdlg.h"
+#include "wx/image.h"
//-----------------------------------------------------------------------------
// start and end of document/page
"/yacute/thorn/ydieresis\n"
"] def\n\n";
-//-------------------------------------------------------------------------------
-// class information
-//-------------------------------------------------------------------------------
-
-#if !USE_SHARED_LIBRARY
-IMPLEMENT_DYNAMIC_CLASS(wxPostScriptModule, wxModule)
-IMPLEMENT_DYNAMIC_CLASS(wxPostScriptDC, wxDC)
-IMPLEMENT_DYNAMIC_CLASS(wxPrintSetupData, wxObject)
-IMPLEMENT_DYNAMIC_CLASS(wxPrintPaperType, wxObject)
-#endif
-
//-------------------------------------------------------------------------------
// wxPostScriptDC
//-------------------------------------------------------------------------------
if (m_pstream) delete m_pstream;
}
+bool wxPostScriptDC::Ok() const
+{
+ return m_ok;
+}
+
bool wxPostScriptDC::PrinterDialog(wxWindow *parent)
{
wxPostScriptPrintDialog dialog( parent, _("Printer Settings"), wxPoint(150, 150), wxSize(400, 400),
m_ok = TRUE;
}
- return m_ok;
+ return m_ok;
}
void wxPostScriptDC::SetClippingRegion (long x, long y, long w, long h)
{
- if (m_clipping) return;
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
- if (!m_pstream) return;
+ if (m_clipping) return;
wxDC::SetClippingRegion( x, y, w, h );
void wxPostScriptDC::DestroyClippingRegion()
{
- if (!m_pstream) return;
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
wxDC::DestroyClippingRegion();
void wxPostScriptDC::DrawLine (long x1, long y1, long x2, long y2)
{
- if (!m_pstream) return;
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
if (m_pen.GetStyle() == wxTRANSPARENT) return;
void wxPostScriptDC::DrawArc (long x1, long y1, long x2, long y2, long xc, long yc)
{
- if (!m_pstream) return;
-
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+
long dx = x1 - xc;
long dy = y1 - yc;
long radius = (long) sqrt(dx*dx+dy*dy);
void wxPostScriptDC::DrawEllipticArc(long x,long y,long w,long h,double sa,double ea)
{
- if (!m_pstream) return;
-
+ wxCHECK_RET( m_ok && m_pstream, "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;
if (sa<0) sa+=360;
void wxPostScriptDC::DrawPoint (long x, long y)
{
- if (!m_pstream) return;
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
if (m_pen.GetStyle() == wxTRANSPARENT) return;
void wxPostScriptDC::DrawPolygon (int n, wxPoint points[], long xoffset, long yoffset, int WXUNUSED(fillStyle))
{
- if (!m_pstream) return;
-
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+
if (n <= 0) return;
if (m_brush.GetStyle () != wxTRANSPARENT)
void wxPostScriptDC::DrawLines (int n, wxPoint points[], long xoffset, long yoffset)
{
- if (!m_pstream) return;
-
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+
if (m_pen.GetStyle() == wxTRANSPARENT) return;
if (n <= 0) return;
void wxPostScriptDC::DrawRectangle (long x, long y, long width, long height)
{
- if (!m_pstream) return;
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
if (m_brush.GetStyle () != wxTRANSPARENT)
{
void wxPostScriptDC::DrawRoundedRectangle (long x, long y, long width, long height, double radius)
{
- if (!m_pstream) return;
-
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+
if (radius < 0.0)
{
// Now, a negative radius is interpreted to mean
void wxPostScriptDC::DrawEllipse (long x, long y, long width, long height)
{
- if (!m_pstream) return;
-
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+
if (m_brush.GetStyle () != wxTRANSPARENT)
{
SetBrush (m_brush);
void wxPostScriptDC::DrawIcon (const wxIcon& icon, long x, long y)
{
- wxMemoryDC memDC;
- memDC.SelectObject( icon );
- Blit(x, y, icon.GetWidth(), icon.GetHeight(), &memDC, 0, 0);
+ DrawBitmap( icon, x, y, TRUE );
}
-void wxPostScriptDC::DrawBitmap( const wxBitmap& bitmap, long x, long y, bool useMask )
+void wxPostScriptDC::DrawBitmap( const wxBitmap& bitmap, long x, long y, bool WXUNUSED(useMask) )
{
- wxMemoryDC memDC;
- memDC.SelectObject( bitmap );
- Blit( x, y, bitmap.GetWidth(), bitmap.GetHeight(), &memDC, 0, 0, useMask );
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+
+ if (!bitmap.Ok()) return;
+
+ wxImage image( bitmap );
+
+ if (!image.Ok()) return;
+
+ int ww = XLOG2DEVREL(image.GetWidth());
+ int hh = YLOG2DEVREL(image.GetHeight());
+
+ image = image.Scale( ww, hh );
+
+ if (!image.Ok()) return;
+
+ int xx = XLOG2DEV(x);
+ int yy = YLOG2DEV(y + bitmap.GetHeight());
+
+ *m_pstream << "/origstate save def\n"
+ << "20 dict begin\n"
+ << "/pix " << ww << " string def\n"
+ << "/grays " << ww << " string def\n"
+ << "/npixels 0 def\n"
+ << "/rgbindx 0 def\n"
+ << xx << " " << yy << " translate\n"
+ << ww << " " << hh << " scale\n"
+ << ww << " " << hh << " 8\n"
+ << "[" << ww << " 0 0 " << (-hh) << " 0 " << hh << "]\n"
+ << "{currentfile pix readhexstring pop}\n"
+ << "false 3 colorimage\n";
+
+ for (int j = 0; j < hh; j++)
+ {
+ for (int i = 0; i < ww; i++)
+ {
+ char buffer[5];
+ buffer[2] = 0;
+ wxDecToHex( image.GetRed(i,j), buffer );
+ *m_pstream << buffer;
+ wxDecToHex( image.GetGreen(i,j), buffer );
+ *m_pstream << buffer;
+ wxDecToHex( image.GetBlue(i,j), buffer );
+ *m_pstream << buffer;
+ }
+ *m_pstream << "\n";
+ }
+
+ *m_pstream << "end\n";
+ *m_pstream << "origstate restore\n";
+
}
void wxPostScriptDC::SetFont (const wxFont& font)
{
- if (!m_pstream) return;
-
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+
if (!font.Ok()) return;
m_font = font;
void wxPostScriptDC::SetPen( const wxPen& pen )
{
- if (!m_pstream) return;
-
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+
if (!pen.Ok()) return;
int oldStyle = m_pen.GetStyle();
void wxPostScriptDC::SetBrush( const wxBrush& brush )
{
- if (!m_pstream) return;
-
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+
if (!brush.Ok()) return;
m_brush = brush;
void wxPostScriptDC::DrawText( const wxString& text, long x, long y, bool WXUNUSED(use16bit) )
{
- if (!m_pstream) return;
-
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+
SetFont( m_font );
if (m_textForegroundColour.Ok ())
void wxPostScriptDC::DrawSpline( wxList *points )
{
- if (!m_pstream) return;
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
SetPen( m_pen );
void wxPostScriptDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
{
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+
m_signX = (xLeftRight ? 1 : -1);
m_signY = (yBottomUp ? 1 : -1);
void wxPostScriptDC::SetDeviceOrigin( long x, long y )
{
- int h = 0;
- int w = 0;
- GetSize( &w, &h );
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
+
+ int h = 0;
+ int w = 0;
+ GetSize( &w, &h );
- wxDC::SetDeviceOrigin( x, h-y );
+ wxDC::SetDeviceOrigin( x, h-y );
}
void wxPostScriptDC::GetSize(int* width, int* height) const
if (paper)
{
- *width = paper->widthPixels;
- *height = paper->heightPixels;
+ if (width) *width = paper->widthPixels;
+ if (height) *height = paper->heightPixels;
}
else
{
- *width = 595;
- *height = 842;
+ if (width) *width = 595;
+ if (height) *height = 842;
}
}
bool wxPostScriptDC::StartDoc (const wxString& message)
{
+ wxCHECK_MSG( m_ok, FALSE, "invalid postscript dc" );
+
if (m_filename == "")
{
m_filename = wxGetTempFileName("ps");
void wxPostScriptDC::EndDoc ()
{
- if (!m_pstream) return;
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
if (m_clipping)
{
*m_pstream << "%%BeginProlog\n";
*m_pstream << wxPostScriptHeaderEllipse;
*m_pstream << wxPostScriptHeaderEllipticArc;
+ *m_pstream << wxPostScriptHeaderColourImage;
*m_pstream << wxPostScriptHeaderReencodeISO1;
*m_pstream << wxPostScriptHeaderReencodeISO2;
void wxPostScriptDC::StartPage ()
{
- if (!m_pstream) return;
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
*m_pstream << "%%Page: " << (wxPageNumber++) << "\n";
void wxPostScriptDC::EndPage ()
{
- if (!m_pstream) return;
+ wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
*m_pstream << "showpage\n";
}
bool wxPostScriptDC::Blit (long xdest, long ydest, long fwidth, long fheight,
wxDC *source, long xsrc, long ysrc, int WXUNUSED(rop), bool WXUNUSED(useMask))
{
+ wxCHECK_MSG( m_ok && m_pstream, FALSE, "invalid postscript dc" );
+
return TRUE;
}
if (paper)
{
- *width = paper->widthMM;
- *height = paper->heightMM;
+ if (width) *width = paper->widthMM;
+ if (height) *height = paper->heightMM;
}
else
{
- *width = 210;
- *height = 297;
+ if (width) *width = 210;
+ if (height) *height = 297;
}
}
-//-------------------------------------------------------------------------------
-// remaining PostScript classes
-//-------------------------------------------------------------------------------
-
-IMPLEMENT_CLASS(wxPostScriptPrintDialog, wxDialog)
-
-wxPostScriptPrintDialog::wxPostScriptPrintDialog (wxWindow *parent, const wxString& title,
- const wxPoint& pos, const wxSize& size, long style):
- wxDialog(parent, -1, title, pos, size, style)
-{
- wxBeginBusyCursor();
-
- char buf[100];
- int yPos = 40;
- wxString
- *orientation = new wxString[2],
- *print_modes = new wxString[3];
- int features;
- long wx_printer_translate_x, wx_printer_translate_y;
- double wx_printer_scale_x, wx_printer_scale_y;
-
- orientation[0] = _("Portrait");
- orientation[1] = _("Landscape");
-
- print_modes[0] = _("Send to Printer");
- print_modes[1] = _("Print to File");
- print_modes[2] = _("Preview Only");
-
-
-
- wxButton *okBut = new wxButton (this, wxID_OK, _("OK"), wxPoint(5, 5));
- (void) new wxButton (this, wxID_CANCEL, _("Cancel"), wxPoint(40, 5));
- okBut->SetDefault();
-
-
-#if defined(__WXGTK__) || defined (__WXMOTIF__)
- (void) new wxStaticText( this, -1, _("Printer Command: "),
- wxPoint(5, yPos) );
- (void) new wxTextCtrl( this, wxID_PRINTER_COMMAND, wxThePrintSetupData->GetPrinterCommand(),
- wxPoint(100, yPos), wxSize(100, -1) );
-
- (void) new wxStaticText( this, -1, _("Printer Options: "),
- wxPoint(210, yPos) );
- (void) new wxTextCtrl( this, wxID_PRINTER_OPTIONS, wxThePrintSetupData->GetPrinterOptions(),
- wxPoint(305, yPos), wxSize(150, -1) );
-
- yPos += 40;
-#endif
-
-
- wxRadioBox *radio0 = new wxRadioBox(this, wxID_PRINTER_ORIENTATION, "Orientation: ", wxPoint(5, yPos), wxSize(-1,-1),
- 2,orientation,2,0);
- radio0->SetSelection((int)wxThePrintSetupData->GetPrinterOrientation() - 1);
-
- // @@@ Configuration hook
- if (wxThePrintSetupData->GetPrintPreviewCommand() == NULL)
- wxThePrintSetupData->SetPrintPreviewCommand(PS_VIEWER_PROG);
-
- wxGetResource ("wxWindows", "PSView", &wxThePrintSetupData->previewCommand);
-
- features = (wxThePrintSetupData->GetPrintPreviewCommand() &&
- *wxThePrintSetupData->GetPrintPreviewCommand()) ? 3 : 2;
-
- wxRadioBox *radio1 = new wxRadioBox(this, wxID_PRINTER_MODES, _("PostScript:"),
- wxPoint(150, yPos),
- wxSize(-1,-1), features,
- print_modes, features, 0);
-
-#ifdef __WXMSW__
- radio1->Enable(0, FALSE);
- if (wxThePrintSetupData->GetPrintPreviewCommand() && *wxThePrintSetupData->GetPrintPreviewCommand())
- radio1->Enable(2, FALSE);
-#endif
-
- radio1->SetSelection((int)wxThePrintSetupData->GetPrinterMode());
- wxThePrintSetupData->GetPrinterTranslation(&wx_printer_translate_x, &wx_printer_translate_y);
- wxThePrintSetupData->GetPrinterScaling(&wx_printer_scale_x, &wx_printer_scale_y);
-
- sprintf (buf, "%.2f", wx_printer_scale_x);
-
- yPos += 90;
- (void) new wxStaticText(this, -1, _("X Scaling"), wxPoint(5, yPos));
- /* wxTextCtrl *text1 = */ (void) new wxTextCtrl(this, wxID_PRINTER_X_SCALE, buf, wxPoint(100, yPos), wxSize(100, -1));
-
- sprintf (buf, "%.2f", wx_printer_scale_y);
- (void) new wxStaticText(this, -1, _("Y Scaling"), wxPoint(220, yPos));
- /* wxTextCtrl *text2 = */ (void) new wxTextCtrl(this, wxID_PRINTER_Y_SCALE, buf, wxPoint(320, yPos), wxSize(100, -1));
-
- yPos += 25;
-
- (void) new wxStaticText(this, -1, _("X Translation"), wxPoint(5, yPos));
- sprintf (buf, "%.2ld", wx_printer_translate_x);
- /* wxTextCtrl *text3 = */ (void) new wxTextCtrl(this, wxID_PRINTER_X_TRANS, buf, wxPoint(100, yPos), wxSize(100, -1));
-
- (void) new wxStaticText(this, -1, _("Y Translation"), wxPoint(220, yPos));
- sprintf (buf, "%.2ld", wx_printer_translate_y);
- /* wxTextCtrl *text4 = */ (void) new wxTextCtrl(this, wxID_PRINTER_Y_TRANS, buf, wxPoint(320, yPos), wxSize(100, -1));
-
- Fit ();
-
- delete[] orientation;
- delete[] print_modes;
-
- wxEndBusyCursor();
-}
-
-int wxPostScriptPrintDialog::ShowModal ()
-{
- if ( wxDialog::ShowModal() == wxID_OK )
- {
-// wxTextCtrl *text0 = (wxTextCtrl *)FindWindow(wxID_PRINTER_OPTIONS);
- wxTextCtrl *text1 = (wxTextCtrl *)FindWindow(wxID_PRINTER_X_SCALE);
- wxTextCtrl *text2 = (wxTextCtrl *)FindWindow(wxID_PRINTER_Y_SCALE);
- wxTextCtrl *text3 = (wxTextCtrl *)FindWindow(wxID_PRINTER_X_TRANS);
- wxTextCtrl *text4 = (wxTextCtrl *)FindWindow(wxID_PRINTER_Y_TRANS);
-// wxTextCtrl *text_prt = (wxTextCtrl *)FindWindow(wxID_PRINTER_COMMAND);
- 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);
-
-#ifdef __X__
- // wxThePrintSetupData->SetPrinterOptions(WXSTRINGCAST text0->GetValue ());
- // wxThePrintSetupData->SetPrinterCommand(WXSTRINGCAST text_prt->GetValue ());
-#endif
-
- wxThePrintSetupData->SetPrinterOrientation((radio0->GetSelection() == 1 ? PS_LANDSCAPE : PS_PORTRAIT));
-
- // C++ wants this
- switch ( radio1->GetSelection() ) {
- case 0: wxThePrintSetupData->SetPrinterMode(PS_PRINTER); break;
- case 1: wxThePrintSetupData->SetPrinterMode(PS_FILE); break;
- case 2: wxThePrintSetupData->SetPrinterMode(PS_PREVIEW); break;
- }
- return wxID_OK;
- }
- return wxID_CANCEL;
-}
-
-// PostScript printer settings
-// RETAINED FOR BACKWARD COMPATIBILITY
-void wxSetPrinterCommand(const char *cmd)
-{
- wxThePrintSetupData->SetPrinterCommand(cmd);
-}
-
-void wxSetPrintPreviewCommand(const char *cmd)
-{
- wxThePrintSetupData->SetPrintPreviewCommand(cmd);
-}
-
-void wxSetPrinterOptions(const char *flags)
-{
- wxThePrintSetupData->SetPrinterOptions(flags);
-}
-
-void wxSetPrinterFile(const char *f)
-{
- wxThePrintSetupData->SetPrinterFile(f);
-}
-
-void wxSetPrinterOrientation(int orient)
-{
- wxThePrintSetupData->SetPrinterOrientation(orient);
-}
-
-void wxSetPrinterScaling(double x, double y)
-{
- wxThePrintSetupData->SetPrinterScaling(x, y);
-}
-
-void wxSetPrinterTranslation(long x, long y)
-{
- wxThePrintSetupData->SetPrinterTranslation(x, y);
-}
-
-// 1 = Preview, 2 = print to file, 3 = send to printer
-void wxSetPrinterMode(int mode)
-{
- wxThePrintSetupData->SetPrinterMode(mode);
-}
-
-void wxSetAFMPath(const char *f)
-{
- wxThePrintSetupData->SetAFMPath(f);
-}
-
-// Get current values
-char *wxGetPrinterCommand()
-{
- return wxThePrintSetupData->GetPrinterCommand();
-}
-
-char *wxGetPrintPreviewCommand()
-{
- return wxThePrintSetupData->GetPrintPreviewCommand();
-}
-
-char *wxGetPrinterOptions()
-{
- return wxThePrintSetupData->GetPrinterOptions();
-}
-
-char *wxGetPrinterFile()
-{
- return wxThePrintSetupData->GetPrinterFile();
-}
-
-int wxGetPrinterOrientation()
-{
- return wxThePrintSetupData->GetPrinterOrientation();
-}
-
-void wxGetPrinterScaling(double* x, double* y)
-{
- wxThePrintSetupData->GetPrinterScaling(x, y);
-}
-
-void wxGetPrinterTranslation(long *x, long *y)
-{
- wxThePrintSetupData->GetPrinterTranslation(x, y);
-}
-
-int wxGetPrinterMode()
-{
- return wxThePrintSetupData->GetPrinterMode();
-}
-
-char *wxGetAFMPath()
-{
- return wxThePrintSetupData->GetAFMPath();
-}
-
-/*
- * Print setup data
- */
-
-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;
-}
-
-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)
-{
- SetPrinterCommand(data.GetPrinterCommand());
- SetPrintPreviewCommand(data.GetPrintPreviewCommand());
- SetPrinterOptions(data.GetPrinterOptions());
- long x, y;
- data.GetPrinterTranslation(&x, &y);
- SetPrinterTranslation(x, y);
-
- double x1, y1;
- data.GetPrinterScaling(&x1, &y1);
- SetPrinterScaling(x1, y1);
-
- SetPrinterOrientation(data.GetPrinterOrientation());
- SetPrinterMode(data.GetPrinterMode());
- SetAFMPath(data.GetAFMPath());
- SetPaperName(data.GetPaperName());
- SetColour(data.GetColour());
-}
-
-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"));
-
- // Could have a .ini file to read in some defaults
- // - and/or use environment variables, e.g. WXWIN
-#ifdef __VMS__
- wxThePrintSetupData->SetPrinterCommand("print");
- wxThePrintSetupData->SetPrinterOptions("/nonotify/queue=psqueue");
- wxThePrintSetupData->SetAFMPath("sys$ps_font_metrics:");
-#endif
-#ifdef __WXMSW__
- wxThePrintSetupData->SetPrinterCommand("print");
- wxThePrintSetupData->SetAFMPath("c:\\windows\\system\\");
- wxThePrintSetupData->SetPrinterOptions(NULL);
-#endif
-#if !defined(__VMS__) && !defined(__WXMSW__)
- wxThePrintSetupData->SetPrinterCommand("lpr");
- wxThePrintSetupData->SetPrinterOptions((char *) NULL);
- wxThePrintSetupData->SetAFMPath((char *) NULL);
-#endif
- }
- else
- {
- if (wxThePrintSetupData)
- delete wxThePrintSetupData;
- wxThePrintSetupData = (wxPrintSetupData *) NULL;
- }
-}
-
-/*
- * Paper size database for PostScript
- */
-
-wxPrintPaperType::wxPrintPaperType(const char *name, int wmm, int hmm, int wp, int hp)
-{
- widthMM = wmm;
- heightMM = hmm;
- widthPixels = wp;
- heightPixels = hp;
- pageName = copystring(name);
-}
-
-wxPrintPaperType::~wxPrintPaperType()
-{
- delete[] pageName;
-}
-
-/*
- * Print paper database for PostScript
- */
-
-#if !USE_SHARED_LIBRARIES
-IMPLEMENT_DYNAMIC_CLASS(wxPrintPaperDatabase, wxList)
-#endif
-
-wxPrintPaperDatabase::wxPrintPaperDatabase():wxList(wxKEY_STRING)
-{
- DeleteContents(TRUE);
-}
-
-wxPrintPaperDatabase::~wxPrintPaperDatabase()
-{
-}
-
-void wxPrintPaperDatabase::CreateDatabase()
-{
- // Need correct values for page size in pixels.
- // Each unit is one 'point' = 1/72 of an inch.
- // NOTE: WE NEED ALSO TO MAKE ADJUSTMENTS WHEN TRANSLATING
- // in wxPostScriptDC code, so we can start from top left.
- // So access this database and translate by appropriate number
- // of points for this paper size. OR IS IT OK ALREADY?
- // Can't remember where the PostScript origin is by default.
- // Heck, someone will know how to make it hunky-dory...
- // JACS 25/5/95
-
- AddPaperType(_("A4 210 x 297 mm"), 210, 297, 595, 842);
- AddPaperType(_("A3 297 x 420 mm"), 297, 420, 842, 1191);
- AddPaperType(_("Letter 8 1/2 x 11 in"), 216, 279, 612, 791);
- AddPaperType(_("Legal 8 1/2 x 14 in"), 216, 356, 612, 1009);
-}
-
-void wxPrintPaperDatabase::ClearDatabase()
-{
- Clear();
-}
-
-void wxPrintPaperDatabase::AddPaperType(const char *name, int wmm, int hmm, int wp, int hp)
-{
- Append(name, new wxPrintPaperType(name, wmm, hmm, wp, hp));
-}
-
-wxPrintPaperType *wxPrintPaperDatabase::FindPaperType(const char *name)
-{
- wxNode *node = Find(name);
- if (node)
- return (wxPrintPaperType *)node->Data();
- else
- return (wxPrintPaperType *) NULL;
-}
-
-/*
- * Initialization/cleanup module
- */
-
-bool wxPostScriptModule::OnInit()
-{
- wxInitializePrintSetupData();
- wxThePrintPaperDatabase = new wxPrintPaperDatabase;
- wxThePrintPaperDatabase->CreateDatabase();
-
- return TRUE;
-}
-
-void wxPostScriptModule::OnExit()
-{
- wxInitializePrintSetupData(FALSE);
- delete wxThePrintPaperDatabase;
- wxThePrintPaperDatabase = NULL;
-}
-
-
-#endif