Removed all deprecated printing code.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16568 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2002-08-17 16:29:05 +00:00
parent d7ada45299
commit eba330067e
9 changed files with 154 additions and 868 deletions

View File

@@ -21,13 +21,8 @@
#include "wx/colour.h" #include "wx/colour.h"
#include "wx/gdicmn.h" #include "wx/gdicmn.h"
#if (defined(__WXMOTIF__) || defined(__WXMGL__) || defined(__WXX11__) || defined(__WXGTK__) || defined(__WXPM__) || defined(__WXMAC__)) && wxUSE_POSTSCRIPT
class WXDLLEXPORT wxPrintSetupData;
#endif
class WXDLLEXPORT wxColourData: public wxObject class WXDLLEXPORT wxColourData: public wxObject
{ {
DECLARE_DYNAMIC_CLASS(wxColourData)
public: public:
wxColourData(); wxColourData();
wxColourData(const wxColourData& data); wxColourData(const wxColourData& data);
@@ -49,11 +44,13 @@ public:
wxColour dataColour; wxColour dataColour;
wxColour custColours[16]; wxColour custColours[16];
bool chooseFull; bool chooseFull;
private:
DECLARE_DYNAMIC_CLASS(wxColourData)
}; };
class WXDLLEXPORT wxFontData: public wxObject class WXDLLEXPORT wxFontData: public wxObject
{ {
DECLARE_DYNAMIC_CLASS(wxFontData)
public: public:
wxFontData(); wxFontData();
~wxFontData(); ~wxFontData();
@@ -130,6 +127,9 @@ public:
private: private:
wxFontEncoding m_encoding; wxFontEncoding m_encoding;
wxNativeEncodingInfo m_encodingInfo; wxNativeEncodingInfo m_encodingInfo;
private:
DECLARE_DYNAMIC_CLASS(wxFontData)
}; };
#if wxUSE_PRINTING_ARCHITECTURE #if wxUSE_PRINTING_ARCHITECTURE
@@ -140,8 +140,7 @@ private:
class WXDLLEXPORT wxPrintData: public wxObject class WXDLLEXPORT wxPrintData: public wxObject
{ {
DECLARE_DYNAMIC_CLASS(wxPrintData) public:
wxPrintData(); wxPrintData();
wxPrintData(const wxPrintData& printData); wxPrintData(const wxPrintData& printData);
~wxPrintData(); ~wxPrintData();
@@ -199,11 +198,6 @@ class WXDLLEXPORT wxPrintData: public wxObject
void operator=(const wxPrintData& data); void operator=(const wxPrintData& data);
// For compatibility
#if (defined(__WXMOTIF__) || defined(__WXMGL__) || defined(__WXX11__) || defined(__WXGTK__) || defined(__WXPM__) || defined(__WXMAC__)) && wxUSE_POSTSCRIPT
void operator=(const wxPrintSetupData& setupData);
#endif
#if defined(__WXMSW__) #if defined(__WXMSW__)
// Convert to/from the DEVMODE structure // Convert to/from the DEVMODE structure
void ConvertToNative(); void ConvertToNative();
@@ -227,7 +221,6 @@ public:
#endif #endif
private: private:
int m_printNoCopies; int m_printNoCopies;
int m_printOrientation; int m_printOrientation;
bool m_printCollate; bool m_printCollate;
@@ -251,6 +244,9 @@ private:
long m_printerTranslateX; long m_printerTranslateX;
long m_printerTranslateY; long m_printerTranslateY;
wxPrintMode m_printMode; wxPrintMode m_printMode;
private:
DECLARE_DYNAMIC_CLASS(wxPrintData)
}; };
/* /*
@@ -262,8 +258,7 @@ private:
class WXDLLEXPORT wxPrintDialogData: public wxObject class WXDLLEXPORT wxPrintDialogData: public wxObject
{ {
DECLARE_DYNAMIC_CLASS(wxPrintDialogData) public:
wxPrintDialogData(); wxPrintDialogData();
wxPrintDialogData(const wxPrintDialogData& dialogData); wxPrintDialogData(const wxPrintDialogData& dialogData);
wxPrintDialogData(const wxPrintData& printData); wxPrintDialogData(const wxPrintData& printData);
@@ -317,8 +312,8 @@ class WXDLLEXPORT wxPrintDialogData: public wxObject
void SetOwnerWindow(wxWindow* win); void SetOwnerWindow(wxWindow* win);
void* GetNativeData() const { return m_printDlgData; } void* GetNativeData() const { return m_printDlgData; }
#elif defined(__WXMAC__) #elif defined(__WXMAC__)
void ConvertToNative(); void ConvertToNative();
void ConvertFromNative(); void ConvertFromNative();
#endif #endif
#ifdef __WXMSW__ #ifdef __WXMSW__
@@ -326,7 +321,6 @@ class WXDLLEXPORT wxPrintDialogData: public wxObject
#endif #endif
private: private:
int m_printFromPage; int m_printFromPage;
int m_printToPage; int m_printToPage;
int m_printMinPage; int m_printMinPage;
@@ -341,8 +335,10 @@ private:
bool m_printEnableHelp; bool m_printEnableHelp;
bool m_printEnablePrintToFile; bool m_printEnablePrintToFile;
bool m_printSetupDialog; bool m_printSetupDialog;
wxPrintData m_printData; wxPrintData m_printData;
private:
DECLARE_DYNAMIC_CLASS(wxPrintDialogData)
}; };
/* /*
@@ -354,8 +350,6 @@ private:
class WXDLLEXPORT wxPageSetupDialogData: public wxObject class WXDLLEXPORT wxPageSetupDialogData: public wxObject
{ {
DECLARE_DYNAMIC_CLASS(wxPageSetupDialogData)
public: public:
wxPageSetupDialogData(); wxPageSetupDialogData();
wxPageSetupDialogData(const wxPageSetupDialogData& dialogData); wxPageSetupDialogData(const wxPageSetupDialogData& dialogData);
@@ -409,8 +403,8 @@ public:
void SetOwnerWindow(wxWindow* win); void SetOwnerWindow(wxWindow* win);
void* GetNativeData() const { return m_pageSetupData; } void* GetNativeData() const { return m_pageSetupData; }
#elif defined(__WXMAC__) #elif defined(__WXMAC__)
void ConvertToNative(); void ConvertToNative();
void ConvertFromNative(); void ConvertFromNative();
#endif #endif
// Use paper size defined in this object to set the wxPrintData // Use paper size defined in this object to set the wxPrintData
@@ -431,14 +425,11 @@ public:
#endif #endif
private: private:
wxSize m_paperSize; // The dimensions selected by the user (on return, same as in wxPrintData?) wxSize m_paperSize; // The dimensions selected by the user (on return, same as in wxPrintData?)
wxPoint m_minMarginTopLeft; wxPoint m_minMarginTopLeft;
wxPoint m_minMarginBottomRight; wxPoint m_minMarginBottomRight;
wxPoint m_marginTopLeft; wxPoint m_marginTopLeft;
wxPoint m_marginBottomRight; wxPoint m_marginBottomRight;
// Flags
bool m_defaultMinMargins; bool m_defaultMinMargins;
bool m_enableMargins; bool m_enableMargins;
bool m_enableOrientation; bool m_enableOrientation;
@@ -446,8 +437,10 @@ private:
bool m_enablePrinter; bool m_enablePrinter;
bool m_getDefaultInfo; // Equiv. to PSD_RETURNDEFAULT bool m_getDefaultInfo; // Equiv. to PSD_RETURNDEFAULT
bool m_enableHelp; bool m_enableHelp;
wxPrintData m_printData; wxPrintData m_printData;
private:
DECLARE_DYNAMIC_CLASS(wxPageSetupDialogData)
}; };
#endif // wxUSE_PRINTING_ARCHITECTURE #endif // wxUSE_PRINTING_ARCHITECTURE

View File

@@ -37,28 +37,16 @@ class wxPostScriptDC;
class WXDLLEXPORT wxPostScriptDC: public wxDC class WXDLLEXPORT wxPostScriptDC: public wxDC
{ {
DECLARE_DYNAMIC_CLASS(wxPostScriptDC)
public: public:
wxPostScriptDC(); wxPostScriptDC();
// Deprecated constructor
wxPostScriptDC(const wxString& output, bool interactive = TRUE, wxWindow *parent = (wxWindow *) NULL);
// Recommended constructor // Recommended constructor
wxPostScriptDC(const wxPrintData& printData); wxPostScriptDC(const wxPrintData& printData);
~wxPostScriptDC(); ~wxPostScriptDC();
// Deprecated
bool Create(const wxString& output, bool interactive = TRUE, wxWindow *parent = (wxWindow *) NULL);
virtual bool Ok() const; virtual bool Ok() const;
// Deprecated: use wxGenericPrintDialog instead
virtual bool PrinterDialog(wxWindow *parent = (wxWindow *) NULL);
virtual void BeginDrawing() {} virtual void BeginDrawing() {}
virtual void EndDrawing() {} virtual void EndDrawing() {}
@@ -135,157 +123,24 @@ public:
static int GetResolution(); static int GetResolution();
private: private:
static float ms_PSScaleFactor; static float ms_PSScaleFactor;
protected: protected:
FILE* m_pstream; // PostScript output stream
FILE* m_pstream; // PostScript output stream wxString m_title;
wxString m_title; unsigned char m_currentRed;
unsigned char m_currentRed; unsigned char m_currentGreen;
unsigned char m_currentGreen; unsigned char m_currentBlue;
unsigned char m_currentBlue; int m_pageNumber;
int m_pageNumber; bool m_clipping;
bool m_clipping; double m_underlinePosition;
double m_underlinePosition; double m_underlineThickness;
double m_underlineThickness; wxPrintData m_printData;
wxPrintData m_printData;
private:
DECLARE_DYNAMIC_CLASS(wxPostScriptDC)
}; };
// Deprecated: should use wxGenericPrintDialog instead.
#if 1
enum
{
wxID_PRINTER_COMMAND = 1,
wxID_PRINTER_OPTIONS,
wxID_PRINTER_ORIENTATION,
wxID_PRINTER_MODES,
wxID_PRINTER_X_SCALE,
wxID_PRINTER_Y_SCALE,
wxID_PRINTER_X_TRANS,
wxID_PRINTER_Y_TRANS
};
class WXDLLEXPORT wxPostScriptPrintDialog: public wxDialog
{
DECLARE_CLASS(wxPostScriptPrintDialog)
public:
wxPostScriptPrintDialog (wxWindow *parent, const wxString& title,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
wxCoord style = wxDEFAULT_DIALOG_STYLE);
virtual int ShowModal();
};
#endif // 1
// Print Orientation (Should also add Left, Right)
enum
{
PS_PORTRAIT = 1,
PS_LANDSCAPE = 2
};// ps_orientation = PS_PORTRAIT;
// Print Actions
enum
{
PS_NONE,
PS_PREVIEW,
PS_FILE,
PS_PRINTER
};// ps_action = PS_PREVIEW;
// PostScript printer settings
WXDLLEXPORT void wxSetPrinterCommand(const wxString& cmd);
WXDLLEXPORT void wxSetPrintPreviewCommand(const wxString& cmd);
WXDLLEXPORT void wxSetPrinterOptions(const wxString& flags);
WXDLLEXPORT void wxSetPrinterOrientation(int orientation);
WXDLLEXPORT void wxSetPrinterScaling(double x, double y);
WXDLLEXPORT void wxSetPrinterTranslation(wxCoord x, wxCoord y);
WXDLLEXPORT void wxSetPrinterMode(int mode);
WXDLLEXPORT void wxSetPrinterFile(const wxString& f);
WXDLLEXPORT void wxSetAFMPath(const wxString& f);
// Get current values
WXDLLEXPORT wxString wxGetPrinterCommand();
WXDLLEXPORT wxString wxGetPrintPreviewCommand();
WXDLLEXPORT wxString wxGetPrinterOptions();
WXDLLEXPORT int wxGetPrinterOrientation();
WXDLLEXPORT void wxGetPrinterScaling(double* x, double* y);
WXDLLEXPORT void wxGetPrinterTranslation(wxCoord *x, wxCoord *y);
WXDLLEXPORT int wxGetPrinterMode();
WXDLLEXPORT wxString wxGetPrinterFile();
WXDLLEXPORT wxString wxGetAFMPath();
/*
* PostScript print setup information.
* This is now obsolete, but retained for a while for compatibility
*/
class WXDLLEXPORT wxPrintSetupData: public wxObject
{
public:
wxPrintSetupData();
~wxPrintSetupData();
void SetPrinterCommand(const wxString& cmd) { m_printerCommand = cmd; };
void SetPaperName(const wxString& paper) { m_paperName = paper; };
void SetPrintPreviewCommand(const wxString& cmd) { m_previewCommand = cmd; };
void SetPrinterOptions(const wxString& flags) { m_printerFlags = flags; };
void SetPrinterFile(const wxString& f) { m_printerFile = f; };
void SetPrinterOrientation(int orient) { m_printerOrient = orient; };
void SetPrinterScaling(double x, double y) { m_printerScaleX = x; m_printerScaleY = y; };
void SetPrinterTranslation(wxCoord x, wxCoord y) { m_printerTranslateX = x; m_printerTranslateY = y; };
// 1 = Preview, 2 = print to file, 3 = send to printer
void SetPrinterMode(int mode) { m_printerMode = mode; };
void SetAFMPath(const wxString& f) { m_afmPath = f; };
void SetColour(bool col) { m_printColour = col; };
// Get current values
wxString GetPrinterCommand() const { return m_printerCommand; } ;
wxString GetPrintPreviewCommand() const { return m_previewCommand; } ;
wxString GetPrinterOptions() const { return m_printerFlags; };
wxString GetPrinterFile() const { return m_printerFile; };
wxString GetPaperName() const { return m_paperName; }
int GetPrinterOrientation() const { return m_printerOrient; };
void GetPrinterScaling(double* x, double* y) const { *x = m_printerScaleX; *y = m_printerScaleY; };
void GetPrinterTranslation(wxCoord *x, wxCoord *y) const { *x = m_printerTranslateX; *y = m_printerTranslateY; };
int GetPrinterMode() const { return m_printerMode; };
wxString GetAFMPath() const { return m_afmPath; };
bool GetColour() const { return m_printColour; };
void operator=(wxPrintSetupData& data);
// Initialize from a wxPrintData object (wxPrintData should now be used instead of wxPrintSetupData).
// There is also an operator for initializing a wxPrintData from a wxPrintSetupData.
void operator=(const wxPrintData& data);
#ifndef __WIN16__
void GetPrinterTranslation(long *x, long *y) const
{ *x = m_printerTranslateX; *y = m_printerTranslateY; }
#endif // !Win16
public:
wxString m_printerCommand;
wxString m_previewCommand;
wxString m_printerFlags;
wxString m_printerFile;
int m_printerOrient;
double m_printerScaleX;
double m_printerScaleY;
wxCoord m_printerTranslateX;
wxCoord m_printerTranslateY;
// 1 = Preview, 2 = print to file, 3 = send to printer
int m_printerMode;
wxString m_afmPath;
// A name in the paper database (see paper.h)
wxString m_paperName;
bool m_printColour;
DECLARE_DYNAMIC_CLASS(wxPrintSetupData)
};
WXDLLEXPORT_DATA(extern wxPrintSetupData*) wxThePrintSetupData;
WXDLLEXPORT extern void wxInitializePrintSetupData(bool init = TRUE);
#endif #endif
// wxUSE_POSTSCRIPT // wxUSE_POSTSCRIPT

View File

@@ -780,7 +780,7 @@ void MyFrame::OnFindDialog(wxFindDialogEvent& event)
if ( type == wxEVT_COMMAND_FIND || type == wxEVT_COMMAND_FIND_NEXT ) if ( type == wxEVT_COMMAND_FIND || type == wxEVT_COMMAND_FIND_NEXT )
{ {
wxLogMessage(wxT("Find %s'%s' (flags: %s)"), wxLogMessage(wxT("Find %s'%s' (flags: %s)"),
type == wxEVT_COMMAND_FIND_NEXT ? _T("next ") : "", type == wxEVT_COMMAND_FIND_NEXT ? wxT("next ") : wxT(""),
event.GetFindString().c_str(), event.GetFindString().c_str(),
DecodeFindDialogEventFlags(event.GetFlags()).c_str()); DecodeFindDialogEventFlags(event.GetFlags()).c_str());
} }
@@ -788,7 +788,7 @@ void MyFrame::OnFindDialog(wxFindDialogEvent& event)
type == wxEVT_COMMAND_FIND_REPLACE_ALL ) type == wxEVT_COMMAND_FIND_REPLACE_ALL )
{ {
wxLogMessage(wxT("Replace %s'%s' with '%s' (flags: %s)"), wxLogMessage(wxT("Replace %s'%s' with '%s' (flags: %s)"),
type == wxEVT_COMMAND_FIND_REPLACE_ALL ? _T("all ") : "", type == wxEVT_COMMAND_FIND_REPLACE_ALL ? _T("all ") : wxT(""),
event.GetFindString().c_str(), event.GetFindString().c_str(),
event.GetReplaceString().c_str(), event.GetReplaceString().c_str(),
DecodeFindDialogEventFlags(event.GetFlags()).c_str()); DecodeFindDialogEventFlags(event.GetFlags()).c_str());

View File

@@ -79,16 +79,6 @@ bool MyApp::OnInit(void)
g_printData = new wxPrintData; g_printData = new wxPrintData;
g_pageSetupData = new wxPageSetupDialogData; g_pageSetupData = new wxPageSetupDialogData;
// wxGetenv( wxT("HOME") );
// Compatibility with old system. In fact, we might keep wxThePrintSetupData
// just for useful default values which we can optionally assign to our
// own print data object.
#if defined(__WXGTK__) || defined(__WXMOTIF__)
(*g_printData) = * wxThePrintSetupData;
#endif
// Create the main frame window // Create the main frame window
frame = new MyFrame((wxFrame *) NULL, (char *) "wxWindows Printing Demo", wxPoint(0, 0), wxSize(400, 400)); frame = new MyFrame((wxFrame *) NULL, (char *) "wxWindows Printing Demo", wxPoint(0, 0), wxSize(400, 400));
@@ -492,8 +482,6 @@ void MyPrintout::DrawPageTwo(wxDC *dc)
dc->DrawLine(50, 250, (long)(50.0 + logUnits), 250); dc->DrawLine(50, 250, (long)(50.0 + logUnits), 250);
dc->DrawLine(50, 250, 50, (long)(250.0 + logUnits)); dc->DrawLine(50, 250, 50, (long)(250.0 + logUnits));
return;
dc->SetFont(* wxGetApp().m_testFont); dc->SetFont(* wxGetApp().m_testFont);
dc->SetBackgroundMode(wxTRANSPARENT); dc->SetBackgroundMode(wxTRANSPARENT);

View File

@@ -631,7 +631,7 @@ void MyTextCtrl::OnMouseEvent(wxMouseEvent& ev)
void MyTextCtrl::OnSetFocus(wxFocusEvent& event) void MyTextCtrl::OnSetFocus(wxFocusEvent& event)
{ {
if ( ms_logFocus ) if ( ms_logFocus )
wxLogMessage("%p got focus.", this); wxLogMessage( wxT("%p got focus."), this);
event.Skip(); event.Skip();
} }
@@ -639,7 +639,7 @@ void MyTextCtrl::OnSetFocus(wxFocusEvent& event)
void MyTextCtrl::OnKillFocus(wxFocusEvent& event) void MyTextCtrl::OnKillFocus(wxFocusEvent& event)
{ {
if ( ms_logFocus ) if ( ms_logFocus )
wxLogMessage("%p lost focus", this); wxLogMessage( wxT("%p lost focus"), this);
event.Skip(); event.Skip();
} }
@@ -657,6 +657,7 @@ void MyTextCtrl::OnText(wxCommandEvent& event)
} }
else else
{ {
// wxLogMessage( event.GetString() );
wxLogMessage(_T("Text changed in some control")); wxLogMessage(_T("Text changed in some control"));
} }
} }

View File

@@ -43,17 +43,8 @@
#include "wx/fontdlg.h" #include "wx/fontdlg.h"
#endif // wxUSE_FONTDLG #endif // wxUSE_FONTDLG
// For compatibility
#if (defined(__WXMOTIF__) || defined(__WXMGL__) || defined(__WXGTK__) || defined(__WXX11__)|| defined(__WXPM__) || defined(__WXMAC__)) && wxUSE_POSTSCRIPT
#define wxCOMPATIBILITY_WITH_PRINTSETUPDATA 1
#endif
#if wxUSE_PRINTING_ARCHITECTURE #if wxUSE_PRINTING_ARCHITECTURE
#include "wx/paper.h" #include "wx/paper.h"
#if wxCOMPATIBILITY_WITH_PRINTSETUPDATA
#include "wx/generic/dcpsg.h"
#endif
#endif // wxUSE_PRINTING_ARCHITECTURE #endif // wxUSE_PRINTING_ARCHITECTURE
#ifdef __WXMSW__ #ifdef __WXMSW__
@@ -264,11 +255,26 @@ wxPrintData::wxPrintData()
m_paperSize = wxSize(210, 297); m_paperSize = wxSize(210, 297);
// PostScript-specific data // PostScript-specific data
m_printerCommand = ""; m_previewCommand = wxT("");
m_previewCommand = ""; m_filename = wxT("");
m_printerOptions = ""; #ifdef __VMS__
m_filename = ""; m_printerCommand = wxT("print");
m_afmPath = ""; 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_printerScaleX = 1.0;
m_printerScaleY = 1.0; m_printerScaleY = 1.0;
m_printerTranslateX = 0; m_printerTranslateX = 0;
@@ -839,32 +845,6 @@ void wxPrintData::operator=(const wxPrintData& data)
m_printMode = data.m_printMode; m_printMode = data.m_printMode;
} }
// For compatibility
#if wxCOMPATIBILITY_WITH_PRINTSETUPDATA
void wxPrintData::operator=(const wxPrintSetupData& setupData)
{
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());
}
#endif // wxCOMPATIBILITY_WITH_PRINTSETUPDATA
// Is this data OK for showing the print dialog? // Is this data OK for showing the print dialog?
bool wxPrintData::Ok() const bool wxPrintData::Ok() const
{ {

View File

@@ -88,8 +88,6 @@ static const char *wxPostScriptHeaderConicTo = "\
/p2_y p1_y to_y p0_y sub 1 3 div mul add def\n\ /p2_y p1_y to_y p0_y sub 1 3 div mul add def\n\
p1_x p1_y p2_x p2_y to_x to_y curveto\n\ p1_x p1_y p2_x p2_y to_x to_y curveto\n\
} bind def\n\ } bind def\n\
/start_ol { gsave 1.0 72 div dup scale } bind def\n\
/end_ol { closepath fill grestore } bind def\n\
"; ";
static const char *wxPostScriptHeaderEllipse = "\ static const char *wxPostScriptHeaderEllipse = "\
@@ -253,6 +251,8 @@ static char wxPostScriptHeaderReencodeISO2[] =
// wxPostScriptDC // wxPostScriptDC
//------------------------------------------------------------------------------- //-------------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxPostScriptDC, wxDC)
float wxPostScriptDC::ms_PSScaleFactor = 10.0; float wxPostScriptDC::ms_PSScaleFactor = 10.0;
void wxPostScriptDC::SetResolution(int ppi) void wxPostScriptDC::SetResolution(int ppi)
@@ -265,7 +265,7 @@ int wxPostScriptDC::GetResolution()
return (int)(ms_PSScaleFactor * 72.0); return (int)(ms_PSScaleFactor * 72.0);
} }
//-------------------------------------------------------------------------------
wxPostScriptDC::wxPostScriptDC () wxPostScriptDC::wxPostScriptDC ()
{ {
@@ -284,57 +284,6 @@ wxPostScriptDC::wxPostScriptDC ()
m_signX = 1; // default x-axis left to right m_signX = 1; // default x-axis left to right
m_signY = -1; // default y-axis bottom up -> top down m_signY = -1; // default y-axis bottom up -> top down
// Compatibility only
// HH: Doesn't seem to work for wxMSW...
#if !defined(__WXMSW__)
m_printData = * wxThePrintSetupData;
#endif
}
wxPostScriptDC::wxPostScriptDC (const wxString& file, bool interactive, wxWindow *parent)
{
m_pstream = (FILE*) 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
Create(file, interactive, parent);
}
bool wxPostScriptDC::Create(const wxString& file, bool interactive, wxWindow *parent)
{
m_isInteractive = interactive;
m_title = "";
m_printData.SetFilename(file);
#ifdef __WXMSW__
// Can only send to file in Windows
m_printData.SetPrintMode(wxPRINT_MODE_FILE);
#endif
if (m_isInteractive)
{
if ((m_ok = PrinterDialog (parent) ) == FALSE) return FALSE;
}
else
{
m_ok = TRUE;
}
return m_ok;
} }
wxPostScriptDC::wxPostScriptDC (const wxPrintData& printData) wxPostScriptDC::wxPostScriptDC (const wxPrintData& printData)
@@ -374,54 +323,6 @@ bool wxPostScriptDC::Ok() const
return m_ok; 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),
wxDEFAULT_DIALOG_STYLE | wxDIALOG_MODAL );
m_ok = (dialog.ShowModal () == wxID_OK);
if (!m_ok) return FALSE;
if ((m_printData.GetFilename() == "") &&
(m_printData.GetPrintMode() == wxPRINT_MODE_PREVIEW ||
m_printData.GetPrintMode() == wxPRINT_MODE_PRINTER))
{
// steve, 05.09.94
#ifdef __VMS__
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
wxChar userId[256];
wxGetUserId (userId, sizeof (userId) / sizeof (char));
wxChar tmp[256];
wxStrcpy (tmp, wxT("/tmp/preview_"));
wxStrcat (tmp, userId);
m_printData.SetFilename(tmp);
#endif
wxChar tmp2[256];
wxStrcpy(tmp2, m_printData.GetFilename());
wxStrcat (tmp2, wxT(".ps"));
m_printData.SetFilename(tmp2);
}
else if ((m_printData.GetFilename() == wxT("")) && (m_printData.GetPrintMode() == wxPRINT_MODE_FILE))
{
wxString file = wxSaveFileSelector (_("PostScript"), wxT("ps"));
if ( file.IsEmpty() )
{
m_ok = FALSE;
return FALSE;
}
m_printData.SetFilename(file);
m_ok = TRUE;
}
return m_ok;
}
void wxPostScriptDC::DoSetClippingRegion (wxCoord x, wxCoord y, wxCoord w, wxCoord h) void wxPostScriptDC::DoSetClippingRegion (wxCoord x, wxCoord y, wxCoord w, wxCoord h)
{ {
wxCHECK_RET( m_ok && m_pstream, wxT("invalid postscript dc") ); wxCHECK_RET( m_ok && m_pstream, wxT("invalid postscript dc") );
@@ -1193,9 +1094,13 @@ void wxPostScriptDC::SetBrush( const wxBrush& brush )
#ifdef __WXGTK20__ #ifdef __WXGTK20__
#define PANGO_ENABLE_ENGINE
#include "wx/gtk/private.h" #include "wx/gtk/private.h"
#include "wx/fontutil.h" #include "wx/fontutil.h"
#include "gtk/gtk.h" #include "gtk/gtk.h"
//#include "gtk/gdk/gdkx.h"
//#include <pango/pangoxft.h>
#include <pango/pangoft2.h> #include <pango/pangoft2.h>
#include <freetype/ftglyph.h> #include <freetype/ftglyph.h>
@@ -1263,7 +1168,7 @@ static int paps_cubic_to( FT_Vector* control1,
return 0; return 0;
} }
static void draw_bezier_outline(FILE *OUT, void draw_bezier_outline(FILE *OUT,
int dpi, int dpi,
FT_Face face, FT_Face face,
FT_UInt glyph_index, FT_UInt glyph_index,
@@ -1289,19 +1194,17 @@ static void draw_bezier_outline(FILE *OUT,
outline_info.dpi = dpi; outline_info.dpi = dpi;
outline_info.OUT = OUT; outline_info.OUT = OUT;
fprintf(OUT, "gsave %d %d translate 0 0 0 setrgbcolor\n", pos_x, pos_y); fprintf(OUT, "gsave %d %d translate 1.0 72.0 div dup scale 0 0 0 setrgbcolor\n", pos_x, pos_y );
fprintf(OUT, "start_ol\n");
FT_Load_Glyph(face, glyph_index, load_flags); FT_Load_Glyph(face, glyph_index, load_flags);
FT_Get_Glyph (face->glyph, &glyph); FT_Get_Glyph (face->glyph, &glyph);
FT_Outline_Decompose (&(((FT_OutlineGlyph)glyph)->outline), FT_Outline_Decompose (&(((FT_OutlineGlyph)glyph)->outline),
&outlinefunc, &outline_info); &outlinefunc, &outline_info);
fprintf(OUT, "end_ol grestore \n"); fprintf(OUT, "closepath fill grestore \n");
FT_Done_Glyph (glyph); FT_Done_Glyph (glyph);
} }
#endif #endif
void wxPostScriptDC::DoDrawText( const wxString& text, wxCoord x, wxCoord y ) void wxPostScriptDC::DoDrawText( const wxString& text, wxCoord x, wxCoord y )
@@ -1310,11 +1213,9 @@ void wxPostScriptDC::DoDrawText( const wxString& text, wxCoord x, wxCoord y )
#ifdef __WXGTK20__ #ifdef __WXGTK20__
int dpi = GetResolution() * 2; int dpi = GetResolution();
dpi = 300;
PangoContext *context = pango_ft2_get_context ( dpi, dpi ); PangoContext *context = pango_ft2_get_context ( dpi, dpi );
// What are these for? // What are these for?
pango_context_set_language (context, pango_language_from_string ("en_US")); pango_context_set_language (context, pango_language_from_string ("en_US"));
@@ -1324,7 +1225,7 @@ void wxPostScriptDC::DoDrawText( const wxString& text, wxCoord x, wxCoord y )
pango_context_set_font_description (context, m_font.GetNativeFontInfo()->description ); pango_context_set_font_description (context, m_font.GetNativeFontInfo()->description );
// Create layout // Create layout
PangoLayout *layout = layout = pango_layout_new (context); PangoLayout *layout = pango_layout_new (context);
#if wxUSE_UNICODE #if wxUSE_UNICODE
wxCharBuffer buffer = wxConvUTF8.cWC2MB( text ); wxCharBuffer buffer = wxConvUTF8.cWC2MB( text );
#else #else
@@ -1332,9 +1233,12 @@ void wxPostScriptDC::DoDrawText( const wxString& text, wxCoord x, wxCoord y )
#endif #endif
pango_layout_set_text( layout, (const char*) buffer, strlen(buffer) ); pango_layout_set_text( layout, (const char*) buffer, strlen(buffer) );
#if 0 #if 1
double xx = LogicalToDeviceX(x); int xx = LogicalToDeviceX(x);
double yy = LogicalToDeviceY(y /*+ bitmap.GetHeight()*/ ); int yy = LogicalToDeviceY(y /*+ bitmap.GetHeight()*/ );
xx *= PANGO_SCALE;
yy *= PANGO_SCALE;
// Loop over lines in layout // Loop over lines in layout
int num_lines = pango_layout_get_line_count( layout ); int num_lines = pango_layout_get_line_count( layout );
@@ -1357,13 +1261,13 @@ void wxPostScriptDC::DoDrawText( const wxString& text, wxCoord x, wxCoord y )
for (int glyph_idx = 0; glyph_idx < num_glyphs; glyph_idx++) for (int glyph_idx = 0; glyph_idx < num_glyphs; glyph_idx++)
{ {
PangoGlyphGeometry geometry = glyphs->glyphs[glyph_idx].geometry; PangoGlyphGeometry geometry = glyphs->glyphs[glyph_idx].geometry;
double pos_x = xx + 1.0 * geometry.x_offset / PANGO_SCALE; int pos_x = xx + geometry.x_offset;
double pos_y = yy - 1.0 * geometry.y_offset / PANGO_SCALE; int pos_y = yy - geometry.y_offset;
xx += 1.0 * geometry.width / PANGO_SCALE; xx += geometry.width;
draw_bezier_outline( m_pstream, dpi, ft_face, draw_bezier_outline( m_pstream, dpi, ft_face,
(FT_UInt)(glyphs->glyphs[glyph_idx].glyph), (FT_UInt)(glyphs->glyphs[glyph_idx].glyph),
(wxCoord)pos_x, (wxCoord)pos_y ); (wxCoord)(pos_x / PANGO_SCALE), (wxCoord)(pos_y / PANGO_SCALE) );
} }
runs_list = runs_list->next; runs_list = runs_list->next;
} }
@@ -1863,6 +1767,20 @@ bool wxPostScriptDC::StartDoc( const wxString& message )
m_ok = TRUE; m_ok = TRUE;
fprintf( m_pstream, "%%!PS-Adobe-2.0\n" );
fprintf( m_pstream, "%%%%Title: %s\n", (const char *) m_title.ToAscii() );
fprintf( m_pstream, "%%%%Creator: wxWindows PostScript renderer\n" );
fprintf( m_pstream, "%%%%CreationDate: %s\n", (const char *) wxNow().ToAscii() );
if (m_printData.GetOrientation() == wxLANDSCAPE)
fprintf( m_pstream, "%%%%Orientation: Landscape\n" );
else
fprintf( m_pstream, "%%%%Orientation: Portrait\n" );
// wxPaperSize ps = m_printData.GetPaperId();
// if (ps == ...)
fprintf( m_pstream, "%%%%DocumentPaperSizes: %s\n", "A4" );
fprintf( m_pstream, "%%%%EndComments\n\n" );
fprintf( m_pstream, "%%%%BeginProlog\n" ); fprintf( m_pstream, "%%%%BeginProlog\n" );
fprintf( m_pstream, wxPostScriptHeaderConicTo ); fprintf( m_pstream, wxPostScriptHeaderConicTo );
fprintf( m_pstream, wxPostScriptHeaderEllipse ); fprintf( m_pstream, wxPostScriptHeaderEllipse );
@@ -1903,15 +1821,7 @@ void wxPostScriptDC::EndDoc ()
fclose( m_pstream ); fclose( m_pstream );
m_pstream = (FILE *) NULL; m_pstream = (FILE *) NULL;
wxChar *header_file = wxGetTempFileName("ps"); #if 0
m_pstream = wxFopen( header_file, wxT("w+") );
fprintf( m_pstream, "%%!PS-Adobe-2.0\n" ); // PostScript magic strings
fprintf( m_pstream, "%%%%Title: %s\n", (const char *)m_title.mb_str() );
fprintf( m_pstream, "%%%%Creator: wxWindows PostScript renderer\n" );
fprintf( m_pstream, "%%%%CreationDate: %s\n", (const char *)wxNow().mb_str() );
// THE FOLLOWING HAS BEEN CONTRIBUTED BY Andy Fyfe <andy@hyperparallel.com> // THE FOLLOWING HAS BEEN CONTRIBUTED BY Andy Fyfe <andy@hyperparallel.com>
@@ -1924,11 +1834,6 @@ void wxPostScriptDC::EndDoc ()
wx_printer_scale_x = m_printData.GetPrinterScaleX(); wx_printer_scale_x = m_printData.GetPrinterScaleX();
wx_printer_scale_y = m_printData.GetPrinterScaleY(); wx_printer_scale_y = m_printData.GetPrinterScaleY();
if (m_printData.GetOrientation() == wxLANDSCAPE)
fprintf( m_pstream, "%%%%Orientation: Landscape\n" );
else
fprintf( m_pstream, "%%%%Orientation: Portrait\n" );
// Compute the bounding box. Note that it is in the default user // Compute the bounding box. Note that it is in the default user
// coordinate system, thus we have to convert the values. // coordinate system, thus we have to convert the values.
wxCoord minX = (wxCoord) LogicalToDeviceX(m_minX); wxCoord minX = (wxCoord) LogicalToDeviceX(m_minX);
@@ -1972,7 +1877,6 @@ void wxPostScriptDC::EndDoc ()
(wxCoord)floor((double)llx), (wxCoord)floor((double)lly), (wxCoord)floor((double)llx), (wxCoord)floor((double)lly),
(wxCoord)ceil((double)urx), (wxCoord)ceil((double)ury) ); (wxCoord)ceil((double)urx), (wxCoord)ceil((double)ury) );
fprintf( m_pstream, "%%%%Pages: %d\n", (wxPageNumber - 1) ); fprintf( m_pstream, "%%%%Pages: %d\n", (wxPageNumber - 1) );
fprintf( m_pstream, "%%%%EndComments\n\n" );
// To check the correctness of the bounding box, postscript commands // To check the correctness of the bounding box, postscript commands
// to draw a box corresponding to the bounding box are generated below. // to draw a box corresponding to the bounding box are generated below.
@@ -1986,17 +1890,6 @@ void wxPostScriptDC::EndDoc ()
fprintf( m_pstream, "%% %d %d lineto\n", urx, ury ); fprintf( m_pstream, "%% %d %d lineto\n", urx, ury );
fprintf( m_pstream, "%% %d %d lineto closepath stroke\n", llx, ury ); fprintf( m_pstream, "%% %d %d lineto closepath stroke\n", llx, ury );
fclose( m_pstream );
m_pstream = (FILE*) NULL;
wxChar *tmp_file = wxGetTempFileName("ps");
// Paste header Before wx_printer_file
wxConcatFiles (header_file, m_printData.GetFilename(), tmp_file );
wxRemoveFile( header_file );
wxRemoveFile( m_printData.GetFilename() );
wxRenameFile( tmp_file, m_printData.GetFilename() );
#if defined(__X__) || defined(__WXGTK__) #if defined(__X__) || defined(__WXGTK__)
if (m_ok) if (m_ok)
{ {
@@ -2047,6 +1940,8 @@ void wxPostScriptDC::EndDoc ()
} }
} }
#endif #endif
#endif
} }
void wxPostScriptDC::StartPage() void wxPostScriptDC::StartPage()
@@ -2213,16 +2108,16 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
double UnderlinePosition = 0.0; double UnderlinePosition = 0.0;
double UnderlineThickness = 0.0; double UnderlineThickness = 0.0;
/* get actual parameters */ // Get actual parameters
int Family = fontToUse->GetFamily(); int Family = fontToUse->GetFamily();
int Size = fontToUse->GetPointSize(); int Size = fontToUse->GetPointSize();
int Style = fontToUse->GetStyle(); int Style = fontToUse->GetStyle();
int Weight = fontToUse->GetWeight(); int Weight = fontToUse->GetWeight();
/* if we have another font, read the font-metrics */ // If we have another font, read the font-metrics
if (Family!=lastFamily || Size!=lastSize || Style!=lastStyle || Weight!=lastWeight) if (Family!=lastFamily || Size!=lastSize || Style!=lastStyle || Weight!=lastWeight)
{ {
/* store actual values */ // Store actual values
lastFamily = Family; lastFamily = Family;
lastSize = Size; lastSize = Size;
lastStyle = Style; lastStyle = Style;
@@ -2266,13 +2161,32 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
} }
} }
/* get the directory of the AFM files */ FILE *afmFile = NULL;
wxString afmName = wxEmptyString;
// Get the directory of the AFM files
wxString afmName;
if (!m_printData.GetFontMetricPath().IsEmpty()) if (!m_printData.GetFontMetricPath().IsEmpty())
{ {
afmName = m_printData.GetFontMetricPath(); afmName = m_printData.GetFontMetricPath();
afmName << wxFILE_SEP_PATH << name;
afmFile = wxFopen(afmName,wxT("r"));
} }
#if defined(__UNIX__) && !defined(__VMS__)
if (afmFile==NULL)
{
afmName = wxGetDataDir();
afmName << wxFILE_SEP_PATH
#if defined(__LINUX__) || defined(__FREEBSD__)
<< wxT("gs_afm") << wxFILE_SEP_PATH
#else
<< wxT("afm") << wxFILE_SEP_PATH
#endif
<< name;
afmFile = wxFopen(afmName,wxT("r"));
}
#endif
/* 2. open and process the file /* 2. open and process the file
/ a short explanation of the AFM format: / a short explanation of the AFM format:
/ we have for each character a line, which gives its size / we have for each character a line, which gives its size
@@ -2286,37 +2200,6 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
/ /
/ when the font has changed, we read in the right AFM file and store the / when the font has changed, we read in the right AFM file and store the
/ character widths in an array, which is processed below (see point 3.). */ / character widths in an array, which is processed below (see point 3.). */
/* new elements JC Sun Aug 25 23:21:44 MET DST 1996 */
afmName << name;
FILE *afmFile = wxFopen(afmName,wxT("r"));
if (afmFile==NULL)
{
afmName = wxThePrintSetupData->GetAFMPath();
afmName << wxFILE_SEP_PATH << name;
afmFile = wxFopen(afmName,wxT("r"));
}
#if defined(__UNIX__) && !defined(__VMS__)
if (afmFile==NULL)
/* please do NOT change the line above to "else if (afmFile==NULL)" -
- afmFile = fopen() may fail and in that case the next if branch
MUST be executed - and it would not if there was "else" */
{
afmName = wxGetDataDir();
afmName << wxFILE_SEP_PATH
#if defined(__LINUX__) || defined(__FREEBSD__)
<< wxT("gs_afm") << wxFILE_SEP_PATH
#else
<< wxT("afm") << wxFILE_SEP_PATH
#endif
<< name;
afmFile = wxFopen(afmName,wxT("r"));
}
#endif
if (afmFile==NULL) if (afmFile==NULL)
{ {
wxLogDebug( wxT("GetTextExtent: can't open AFM file '%s'"), afmName.c_str() ); wxLogDebug( wxT("GetTextExtent: can't open AFM file '%s'"), afmName.c_str() );
@@ -2484,393 +2367,6 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
#endif #endif
} }
// 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 "gsview"
#endif
wxPrintSetupData *wxThePrintSetupData = (wxPrintSetupData *) NULL;
IMPLEMENT_DYNAMIC_CLASS(wxPostScriptDC, wxDC)
IMPLEMENT_DYNAMIC_CLASS(wxPrintSetupData, wxObject)
// Redundant now I think
#if 1
IMPLEMENT_CLASS(wxPostScriptPrintDialog, wxDialog)
wxPostScriptPrintDialog::wxPostScriptPrintDialog (wxWindow *parent, const wxString& title,
const wxPoint& pos, const wxSize& size, wxCoord 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;
wxCoord 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,wxRA_SPECIFY_ROWS);
radio0->SetSelection((int)wxThePrintSetupData->GetPrinterOrientation() - 1);
// @@@ Configuration hook
if ( !wxThePrintSetupData->GetPrintPreviewCommand() )
wxThePrintSetupData->SetPrintPreviewCommand(PS_VIEWER_PROG);
// wxGetResource ("wxWindows", "PSView", &wxThePrintSetupData->m_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, wxRA_SPECIFY_ROWS);
#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, "%.2d", 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, "%.2d", 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->m_printerScaleX);
StringToDouble (WXSTRINGCAST text2->GetValue (), &wxThePrintSetupData->m_printerScaleY);
long dummy;
StringToLong (WXSTRINGCAST text3->GetValue (), &dummy);
wxThePrintSetupData->m_printerTranslateX = (wxCoord)dummy;
StringToLong (WXSTRINGCAST text4->GetValue (), &dummy);
wxThePrintSetupData->m_printerTranslateY = (wxCoord)dummy;
#ifdef __X__
// wxThePrintSetupData->SetPrinterOptions(WXSTRINGCAST text0->GetValue ());
// wxThePrintSetupData->SetPrinterCommand(WXSTRINGCAST text_prt->GetValue ());
#endif
wxThePrintSetupData->SetPrinterOrientation((radio0->GetSelection() == 1 ? wxLANDSCAPE : wxPORTRAIT));
// 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;
}
#endif
// 0 (redundant)
// PostScript printer settings
// RETAINED FOR BACKWARD COMPATIBILITY
void wxSetPrinterCommand(const wxString& cmd)
{
wxThePrintSetupData->SetPrinterCommand(cmd);
}
void wxSetPrintPreviewCommand(const wxString& cmd)
{
wxThePrintSetupData->SetPrintPreviewCommand(cmd);
}
void wxSetPrinterOptions(const wxString& flags)
{
wxThePrintSetupData->SetPrinterOptions(flags);
}
void wxSetPrinterFile(const wxString& f)
{
wxThePrintSetupData->SetPrinterFile(f);
}
void wxSetPrinterOrientation(int orient)
{
wxThePrintSetupData->SetPrinterOrientation(orient);
}
void wxSetPrinterScaling(double x, double y)
{
wxThePrintSetupData->SetPrinterScaling(x, y);
}
void wxSetPrinterTranslation(wxCoord x, wxCoord 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 wxString& f)
{
wxThePrintSetupData->SetAFMPath(f);
}
// Get current values
wxString wxGetPrinterCommand()
{
return wxThePrintSetupData->GetPrinterCommand();
}
wxString wxGetPrintPreviewCommand()
{
return wxThePrintSetupData->GetPrintPreviewCommand();
}
wxString wxGetPrinterOptions()
{
return wxThePrintSetupData->GetPrinterOptions();
}
wxString wxGetPrinterFile()
{
return wxThePrintSetupData->GetPrinterFile();
}
int wxGetPrinterOrientation()
{
return wxThePrintSetupData->GetPrinterOrientation();
}
void wxGetPrinterScaling(double* x, double* y)
{
wxThePrintSetupData->GetPrinterScaling(x, y);
}
void wxGetPrinterTranslation(wxCoord *x, wxCoord *y)
{
wxThePrintSetupData->GetPrinterTranslation(x, y);
}
int wxGetPrinterMode()
{
return wxThePrintSetupData->GetPrinterMode();
}
wxString wxGetAFMPath()
{
return wxThePrintSetupData->GetAFMPath();
}
/*
* Print setup data
*/
wxPrintSetupData::wxPrintSetupData()
{
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()
{
}
void wxPrintSetupData::operator=(wxPrintSetupData& data)
{
SetPrinterCommand(data.GetPrinterCommand());
SetPrintPreviewCommand(data.GetPrintPreviewCommand());
SetPrinterOptions(data.GetPrinterOptions());
wxCoord 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());
}
// 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((wxCoord)data.GetPrinterTranslateX(),
(wxCoord)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(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 __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("");
#endif
#if !defined(__VMS__) && !defined(__WXMSW__)
wxThePrintSetupData->SetPrinterCommand("lpr");
wxThePrintSetupData->SetPrinterOptions("");
wxThePrintSetupData->SetAFMPath("");
#endif
}
else
{
if (wxThePrintSetupData)
delete wxThePrintSetupData;
wxThePrintSetupData = (wxPrintSetupData *) NULL;
}
}
// A module to allow initialization/cleanup of PostScript-related
// things without calling these functions from app.cpp.
class WXDLLEXPORT wxPostScriptModule: public wxModule
{
DECLARE_DYNAMIC_CLASS(wxPostScriptModule)
public:
wxPostScriptModule() {}
bool OnInit();
void OnExit();
};
IMPLEMENT_DYNAMIC_CLASS(wxPostScriptModule, wxModule)
/*
* Initialization/cleanup module
*/
bool wxPostScriptModule::OnInit()
{
wxInitializePrintSetupData();
return TRUE;
}
void wxPostScriptModule::OnExit()
{
wxInitializePrintSetupData(FALSE);
}
#endif #endif
// wxUSE_POSTSCRIPT // wxUSE_POSTSCRIPT

View File

@@ -61,6 +61,7 @@
#include "wx/printdlg.h" #include "wx/printdlg.h"
#include "wx/paper.h" #include "wx/paper.h"
#include "wx/filename.h"
// For print paper things // For print paper things
#include "wx/prntbase.h" #include "wx/prntbase.h"
@@ -100,10 +101,6 @@ extern wxPrintPaperDatabase *wxThePrintPaperDatabase;
#if wxUSE_POSTSCRIPT #if wxUSE_POSTSCRIPT
// ============================================================================
// implementation
// ============================================================================
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Generic print dialog for non-Windows printing use. // Generic print dialog for non-Windows printing use.
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -175,7 +172,7 @@ void wxGenericPrintDialog::Init(wxWindow * WXUNUSED(parent))
1, wxRA_VERTICAL); 1, wxRA_VERTICAL);
m_rangeRadioBox->SetSelection(1); m_rangeRadioBox->SetSelection(1);
mainsizer->Add( m_rangeRadioBox, 0, wxLEFT|wxTOP|wxRIGHT, 10 ); mainsizer->Add( m_rangeRadioBox, 0, wxLEFT|wxTOP|wxRIGHT, 10 );
} }
// 3) bottom row // 3) bottom row
@@ -186,11 +183,11 @@ void wxGenericPrintDialog::Init(wxWindow * WXUNUSED(parent))
{ {
bottomsizer->Add( new wxStaticText(this, wxPRINTID_STATIC, _("From:") ), 0, wxCENTER|wxALL, 5 ); bottomsizer->Add( new wxStaticText(this, wxPRINTID_STATIC, _("From:") ), 0, wxCENTER|wxALL, 5 );
m_fromText = new wxTextCtrl(this, wxPRINTID_FROM, "", wxDefaultPosition, wxSize(40, -1)); m_fromText = new wxTextCtrl(this, wxPRINTID_FROM, "", wxDefaultPosition, wxSize(40, -1));
bottomsizer->Add( m_fromText, 1, wxCENTER|wxRIGHT, 10 ); bottomsizer->Add( m_fromText, 1, wxCENTER|wxRIGHT, 10 );
bottomsizer->Add( new wxStaticText(this, wxPRINTID_STATIC, _("To:") ), 0, wxCENTER|wxALL, 5); bottomsizer->Add( new wxStaticText(this, wxPRINTID_STATIC, _("To:") ), 0, wxCENTER|wxALL, 5);
m_toText = new wxTextCtrl(this, wxPRINTID_TO, "", wxDefaultPosition, wxSize(40, -1)); m_toText = new wxTextCtrl(this, wxPRINTID_TO, "", wxDefaultPosition, wxSize(40, -1));
bottomsizer->Add( m_toText, 1, wxCENTER|wxRIGHT, 10 ); bottomsizer->Add( m_toText, 1, wxCENTER|wxRIGHT, 10 );
} }
bottomsizer->Add( new wxStaticText(this, wxPRINTID_STATIC, _("Copies:") ), 0, wxCENTER|wxALL, 5 ); bottomsizer->Add( new wxStaticText(this, wxPRINTID_STATIC, _("Copies:") ), 0, wxCENTER|wxALL, 5 );
@@ -233,9 +230,7 @@ int wxGenericPrintDialog::ShowModal()
int ret = genericPrintSetupDialog->ShowModal(); int ret = genericPrintSetupDialog->ShowModal();
if ( ret != wxID_CANCEL ) if ( ret != wxID_CANCEL )
{ {
// Transfer settings to the global object (for compatibility) and to // Transfer settings to the print dialog's print data.
// the print dialog's print data.
*wxThePrintSetupData = genericPrintSetupDialog->GetPrintData();
m_printDialogData.GetPrintData() = genericPrintSetupDialog->GetPrintData(); m_printDialogData.GetPrintData() = genericPrintSetupDialog->GetPrintData();
} }
genericPrintSetupDialog->Destroy(); genericPrintSetupDialog->Destroy();
@@ -267,22 +262,18 @@ void wxGenericPrintDialog::OnOK(wxCommandEvent& WXUNUSED(event))
if (m_printDialogData.GetPrintToFile()) if (m_printDialogData.GetPrintToFile())
{ {
m_printDialogData.GetPrintData().SetPrintMode(wxPRINT_MODE_FILE); m_printDialogData.GetPrintData().SetPrintMode(wxPRINT_MODE_FILE);
wxThePrintSetupData->SetPrinterMode(wxPRINT_MODE_FILE);
wxFileName fname( m_printDialogData.GetPrintData().GetFilename() );
wxFileDialog dialog( this, _("PostScript file"),
fname.GetPath(), fname.GetFullName(), wxT("*.ps"), wxOPEN | wxFILE_MUST_EXIST );
if (dialog.ShowModal() != wxID_OK) return;
wxString f = wxFileSelector(_("PostScript file"), m_printDialogData.GetPrintData().SetFilename( dialog.GetPath() );
wxPathOnly(wxThePrintSetupData->GetPrinterFile()),
wxFileNameFromPath(wxThePrintSetupData->GetPrinterFile()),
wxT("ps"), wxT("*.ps"), 0, this);
if ( f.IsEmpty() )
return;
m_printDialogData.GetPrintData().SetFilename(f);
wxThePrintSetupData->SetPrinterFile(f);
} }
else else
{ {
m_printDialogData.GetPrintData().SetPrintMode(wxPRINT_MODE_PRINTER); m_printDialogData.GetPrintData().SetPrintMode(wxPRINT_MODE_PRINTER);
wxThePrintSetupData->SetPrinterMode(wxPRINT_MODE_PRINTER);
} }
EndModal(wxID_OK); EndModal(wxID_OK);
@@ -306,17 +297,11 @@ void wxGenericPrintDialog::OnRange(wxCommandEvent& event)
void wxGenericPrintDialog::OnSetup(wxCommandEvent& WXUNUSED(event)) void wxGenericPrintDialog::OnSetup(wxCommandEvent& WXUNUSED(event))
{ {
*wxThePrintSetupData = m_printDialogData.GetPrintData(); wxGenericPrintSetupDialog dialog( this, &m_printDialogData.GetPrintData() );
wxGenericPrintSetupDialog *genericPrintSetupDialog = if (dialog.ShowModal() != wxID_CANCEL)
new wxGenericPrintSetupDialog(this, wxThePrintSetupData);
int ret = genericPrintSetupDialog->ShowModal();
if ( ret != wxID_CANCEL )
{ {
*wxThePrintSetupData = genericPrintSetupDialog->GetPrintData(); m_printDialogData = dialog.GetPrintData();
m_printDialogData = genericPrintSetupDialog->GetPrintData();
} }
genericPrintSetupDialog->Close(TRUE);
} }
bool wxGenericPrintDialog::TransferDataToWindow() bool wxGenericPrintDialog::TransferDataToWindow()
@@ -423,19 +408,6 @@ wxDialog(parent, -1, _("Print Setup"), wxPoint(0, 0), wxSize(600, 600), wxDEFAUL
Init(data); Init(data);
} }
// Convert wxPrintSetupData to standard wxPrintData object
wxGenericPrintSetupDialog::wxGenericPrintSetupDialog(wxWindow *parent, wxPrintSetupData* data):
wxDialog(parent, -1, _("Print Setup"), wxPoint(0, 0), wxSize(600, 600), wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL|wxTAB_TRAVERSAL)
{
wxPrintData printData;
if (data)
printData = * data;
else
printData = * wxThePrintSetupData;
Init(& printData);
}
void wxGenericPrintSetupDialog::Init(wxPrintData* data) void wxGenericPrintSetupDialog::Init(wxPrintData* data)
{ {
if ( data ) if ( data )
@@ -482,6 +454,8 @@ void wxGenericPrintSetupDialog::Init(wxPrintData* data)
okButton->SetDefault(); okButton->SetDefault();
okButton->SetFocus(); okButton->SetFocus();
printf( "Hello generic\n" );
Fit(); Fit();
Centre(wxBOTH); Centre(wxBOTH);
@@ -536,8 +510,6 @@ bool wxGenericPrintSetupDialog::TransferDataFromWindow()
m_printData.SetPaperId(wxThePrintPaperDatabase->ConvertNameToId(val)); m_printData.SetPaperId(wxThePrintPaperDatabase->ConvertNameToId(val));
} }
// This is for backward compatibility only
*wxThePrintSetupData = GetPrintData();
return TRUE; return TRUE;
} }
@@ -756,32 +728,35 @@ bool wxGenericPageSetupDialog::TransferDataToWindow()
bool wxGenericPageSetupDialog::TransferDataFromWindow() bool wxGenericPageSetupDialog::TransferDataFromWindow()
{ {
if (m_marginLeftText && m_marginTopText) if (m_marginLeftText && m_marginTopText)
m_pageData.SetMarginTopLeft(wxPoint(wxAtoi((const wxChar *)m_marginLeftText->GetValue()),wxAtoi((const wxChar *)m_marginTopText->GetValue()))); {
int left = wxAtoi( m_marginLeftText->GetValue().c_str() );
int top = wxAtoi( m_marginTopText->GetValue().c_str() );
m_pageData.SetMarginTopLeft( wxPoint(left,top) );
}
if (m_marginRightText && m_marginBottomText) if (m_marginRightText && m_marginBottomText)
m_pageData.SetMarginBottomRight(wxPoint(wxAtoi((const wxChar *)m_marginRightText->GetValue()),wxAtoi((const wxChar *)m_marginBottomText->GetValue()))); {
int right = wxAtoi( m_marginRightText->GetValue().c_str() );
int bottom = wxAtoi( m_marginBottomText->GetValue().c_str() );
m_pageData.SetMarginBottomRight( wxPoint(right,bottom) );
}
if (m_orientationRadioBox) if (m_orientationRadioBox)
{ {
int sel = m_orientationRadioBox->GetSelection(); int sel = m_orientationRadioBox->GetSelection();
if (sel == 0) if (sel == 0)
{ {
#if wxUSE_POSTSCRIPT
wxThePrintSetupData->SetPrinterOrientation(wxPORTRAIT);
#endif
m_pageData.GetPrintData().SetOrientation(wxPORTRAIT); m_pageData.GetPrintData().SetOrientation(wxPORTRAIT);
} }
else else
{ {
#if wxUSE_POSTSCRIPT
wxThePrintSetupData->SetPrinterOrientation(wxLANDSCAPE);
#endif
m_pageData.GetPrintData().SetOrientation(wxLANDSCAPE); m_pageData.GetPrintData().SetOrientation(wxLANDSCAPE);
} }
} }
if (m_paperTypeChoice) if (m_paperTypeChoice)
{ {
wxString val(m_paperTypeChoice->GetStringSelection()); wxString val(m_paperTypeChoice->GetStringSelection());
if (!val.IsNull() && val != "") if (!val.IsEmpty())
{ {
wxPrintPaperType* paper = wxThePrintPaperDatabase->FindPaperType(val); wxPrintPaperType* paper = wxThePrintPaperDatabase->FindPaperType(val);
if ( paper ) if ( paper )
@@ -829,3 +804,4 @@ wxComboBox *wxGenericPageSetupDialog::CreatePaperTypeChoice(int *x, int *y)
} }
#endif #endif

View File

@@ -425,9 +425,6 @@ wxHtmlEasyPrinting::wxHtmlEasyPrinting(const wxString& name, wxFrame *parent_fra
m_Frame = parent_frame; m_Frame = parent_frame;
m_Name = name; m_Name = name;
m_PrintData = new wxPrintData; m_PrintData = new wxPrintData;
#if (defined __WXGTK__) || (defined __WXMOTIF__)
(*m_PrintData) = (*wxThePrintSetupData);
#endif
m_PageSetupData = new wxPageSetupDialogData; m_PageSetupData = new wxPageSetupDialogData;
m_Headers[0] = m_Headers[1] = m_Footers[0] = m_Footers[1] = wxEmptyString; m_Headers[0] = m_Headers[1] = m_Footers[0] = m_Footers[1] = wxEmptyString;