]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/dcps.cpp
Clipboard update
[wxWidgets.git] / src / gtk / dcps.cpp
index d54edb3f711869dedf5d69b0de065cda4a69c94a..bb7800ea0d356906ba6e850a25066d081939e46d 100644 (file)
 /////////////////////////////////////////////////////////////////////////////
 
 #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
@@ -292,17 +182,6 @@ static char wxPostScriptHeaderReencodeISO2[] =
 "/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
 //-------------------------------------------------------------------------------
@@ -376,6 +255,11 @@ wxPostScriptDC::~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), 
@@ -421,14 +305,14 @@ bool wxPostScriptDC::PrinterDialog(wxWindow *parent)
       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 );
     
@@ -448,7 +332,7 @@ void wxPostScriptDC::SetClippingRegion( const wxRegion &WXUNUSED(region) )
 
 void wxPostScriptDC::DestroyClippingRegion()
 {
-    if (!m_pstream) return;
+    wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
     
     wxDC::DestroyClippingRegion();
     
@@ -482,7 +366,7 @@ void wxPostScriptDC::CrossHair (long WXUNUSED(x), long WXUNUSED(y))
 
 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;
     
@@ -501,8 +385,8 @@ void wxPostScriptDC::DrawLine (long x1, long y1, long x2, long y2)
 
 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);
@@ -564,8 +448,8 @@ void wxPostScriptDC::DrawArc (long x1, long y1, long x2, long y2, long xc, long
 
 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;
@@ -606,7 +490,7 @@ void wxPostScriptDC::DrawEllipticArc(long x,long y,long w,long h,double sa,doubl
 
 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;
     
@@ -622,8 +506,8 @@ void wxPostScriptDC::DrawPoint (long x, long y)
 
 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)
@@ -672,8 +556,8 @@ void wxPostScriptDC::DrawPolygon (int n, wxPoint points[], long xoffset, long yo
 
 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;
   
@@ -699,7 +583,7 @@ void wxPostScriptDC::DrawLines (int n, wxPoint points[], long xoffset, long yoff
 
 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)
     {
@@ -736,8 +620,8 @@ void wxPostScriptDC::DrawRectangle (long x, long y, long width, long height)
 
 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
@@ -797,8 +681,8 @@ void wxPostScriptDC::DrawRoundedRectangle (long x, long y, long width, long heig
 
 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);
@@ -828,22 +712,67 @@ void wxPostScriptDC::DrawEllipse (long x, long y, long width, long height)
 
 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;
@@ -861,8 +790,8 @@ void wxPostScriptDC::SetFont (const wxFont& 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();
@@ -940,8 +869,8 @@ void wxPostScriptDC::SetPen( const wxPen& pen )
 
 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;
@@ -979,8 +908,8 @@ void wxPostScriptDC::SetBrush( const wxBrush& 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 ())
@@ -1074,7 +1003,7 @@ void wxPostScriptDC::SetLogicalFunction (int WXUNUSED(function))
 
 void wxPostScriptDC::DrawSpline( wxList *points )
 {
-    if (!m_pstream) return;
+    wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
     
     SetPen( m_pen );
 
@@ -1137,6 +1066,8 @@ long wxPostScriptDC::GetCharWidth ()
 
 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);
     
@@ -1145,11 +1076,13 @@ void wxPostScriptDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
 
 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
@@ -1164,18 +1097,20 @@ 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");
@@ -1214,7 +1149,7 @@ bool wxPostScriptDC::StartDoc (const wxString& message)
 
 void wxPostScriptDC::EndDoc ()
 {
-    if (!m_pstream)  return;
+    wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
     
     if (m_clipping)
     {
@@ -1310,6 +1245,7 @@ void wxPostScriptDC::EndDoc ()
     *m_pstream << "%%BeginProlog\n";
     *m_pstream << wxPostScriptHeaderEllipse;
     *m_pstream << wxPostScriptHeaderEllipticArc;
+    *m_pstream << wxPostScriptHeaderColourImage;
     *m_pstream << wxPostScriptHeaderReencodeISO1;
     *m_pstream << wxPostScriptHeaderReencodeISO2;
 
@@ -1371,7 +1307,7 @@ void wxPostScriptDC::EndDoc ()
 
 void wxPostScriptDC::StartPage ()
 {
-    if (!m_pstream)  return;
+    wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
     
     *m_pstream << "%%Page: " << (wxPageNumber++) << "\n";
     
@@ -1407,7 +1343,7 @@ void wxPostScriptDC::StartPage ()
 
 void wxPostScriptDC::EndPage ()
 {
-    if (!m_pstream)  return;
+    wxCHECK_RET( m_ok && m_pstream, "invalid postscript dc" );
     
     *m_pstream << "showpage\n";
 }
@@ -1415,6 +1351,8 @@ void wxPostScriptDC::EndPage ()
 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;
 }
 
@@ -1708,602 +1646,13 @@ void wxPostScriptDC::GetSizeMM(long *width, long *height) const
     
     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