+ wxPrintFactory::m_factory = factory;
+}
+
+wxPrintFactory *wxPrintFactory::GetFactory()
+{
+ if (!wxPrintFactory::m_factory)
+ wxPrintFactory::m_factory = new wxNativePrintFactory;
+
+ return wxPrintFactory::m_factory;
+}
+
+//----------------------------------------------------------------------------
+// wxNativePrintFactory
+//----------------------------------------------------------------------------
+
+wxPrinterBase *wxNativePrintFactory::CreatePrinter( wxPrintDialogData *data )
+{
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+ return new wxWindowsPrinter( data );
+#elif defined(__WXMAC__)
+ return new wxMacPrinter( data );
+#elif defined(__WXPM__)
+ return new wxOS2Printer( data );
+#else
+ return new wxPostScriptPrinter( data );
+#endif
+}
+
+wxPrintPreviewBase *wxNativePrintFactory::CreatePrintPreview( wxPrintout *preview,
+ wxPrintout *printout, wxPrintDialogData *data )
+{
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+ return new wxWindowsPrintPreview( preview, printout, data );
+#elif defined(__WXMAC__)
+ return new wxMacPrintPreview( preview, printout, data );
+#elif defined(__WXPM__)
+ return new wxOS2PrintPreview( preview, printout, data );
+#else
+ return new wxPostScriptPrintPreview( preview, printout, data );
+#endif
+}
+
+wxPrintPreviewBase *wxNativePrintFactory::CreatePrintPreview( wxPrintout *preview,
+ wxPrintout *printout, wxPrintData *data )
+{
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+ return new wxWindowsPrintPreview( preview, printout, data );
+#elif defined(__WXMAC__)
+ return new wxMacPrintPreview( preview, printout, data );
+#elif defined(__WXPM__)
+ return new wxOS2PrintPreview( preview, printout, data );
+#else
+ return new wxPostScriptPrintPreview( preview, printout, data );
+#endif
+}
+
+wxPrintDialogBase *wxNativePrintFactory::CreatePrintDialog( wxWindow *parent,
+ wxPrintDialogData *data )
+{
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+ return new wxWindowsPrintDialog( parent, data );
+#elif defined(__WXMAC__)
+ return new wxMacPrintDialog( parent, data );
+#else
+ return new wxGenericPrintDialog( parent, data );
+#endif
+}
+
+wxPrintDialogBase *wxNativePrintFactory::CreatePrintDialog( wxWindow *parent,
+ wxPrintData *data )
+{
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+ return new wxWindowsPrintDialog( parent, data );
+#elif defined(__WXMAC__)
+ return new wxMacPrintDialog( parent, data );
+#else
+ return new wxGenericPrintDialog( parent, data );
+#endif
+}
+
+wxPageSetupDialogBase *wxNativePrintFactory::CreatePageSetupDialog( wxWindow *parent,
+ wxPageSetupDialogData *data )
+{
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+ return new wxWindowsPageSetupDialog( parent, data );
+#elif defined(__WXMAC__)
+ return new wxMacPageSetupDialog( parent, data );
+#else
+ return new wxGenericPageSetupDialog( parent, data );
+#endif
+}
+
+bool wxNativePrintFactory::HasPrintSetupDialog()
+{
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+ return false;
+#elif defined(__WXMAC__)
+ return false;
+#else
+ // Only here do we need to provide the print setup
+ // dialog ourselves, the other platforms either have
+ // none, don't make it accessible or let you configure
+ // the printer from the wxPrintDialog anyway.
+ return true;
+#endif
+
+}
+
+wxDialog *wxNativePrintFactory::CreatePrintSetupDialog( wxWindow *parent,
+ wxPrintData *data )
+{
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+ wxUnusedVar(parent);
+ wxUnusedVar(data);
+ return NULL;
+#elif defined(__WXMAC__)
+ wxUnusedVar(parent);
+ wxUnusedVar(data);
+ return NULL;
+#else
+ // Only here do we need to provide the print setup
+ // dialog ourselves, the other platforms either have
+ // none, don't make it accessible or let you configure
+ // the printer from the wxPrintDialog anyway.
+ return new wxGenericPrintSetupDialog( parent, data );
+#endif
+}
+
+wxDCImpl* wxNativePrintFactory::CreatePrinterDCImpl( wxPrinterDC *owner, const wxPrintData& data )
+{
+#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXUNIVERSAL__)
+ return new wxPostScriptDCImpl( owner, data );
+#else
+ return new wxPrinterDCImpl( owner, data );
+#endif
+}
+
+bool wxNativePrintFactory::HasOwnPrintToFile()
+{
+ // Only relevant for PostScript and here the
+ // setup dialog provides no "print to file"
+ // option. In the GNOME setup dialog, the
+ // setup dialog has its own print to file.
+ return false;
+}
+
+bool wxNativePrintFactory::HasPrinterLine()
+{
+ // Only relevant for PostScript for now
+ return true;
+}
+
+wxString wxNativePrintFactory::CreatePrinterLine()
+{
+ // Only relevant for PostScript for now
+
+ // We should query "lpstat -d" here
+ return _("Generic PostScript");
+}
+
+bool wxNativePrintFactory::HasStatusLine()
+{
+ // Only relevant for PostScript for now
+ return true;
+}
+
+wxString wxNativePrintFactory::CreateStatusLine()
+{
+ // Only relevant for PostScript for now
+
+ // We should query "lpstat -r" or "lpstat -p" here
+ return _("Ready");
+}
+
+wxPrintNativeDataBase *wxNativePrintFactory::CreatePrintNativeData()
+{
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+ return new wxWindowsPrintNativeData;
+#elif defined(__WXMAC__)
+ return new wxMacCarbonPrintData;
+#else
+ return new wxPostScriptPrintNativeData;
+#endif
+}
+
+//----------------------------------------------------------------------------
+// wxPrintNativeDataBase
+//----------------------------------------------------------------------------
+
+IMPLEMENT_ABSTRACT_CLASS(wxPrintNativeDataBase, wxObject)
+
+wxPrintNativeDataBase::wxPrintNativeDataBase()
+{
+ m_ref = 1;
+}
+
+//----------------------------------------------------------------------------
+// wxPrintFactoryModule
+//----------------------------------------------------------------------------
+
+class wxPrintFactoryModule: public wxModule
+{
+public:
+ wxPrintFactoryModule() {}
+ bool OnInit() { return true; }
+ void OnExit() { wxPrintFactory::SetPrintFactory( NULL ); }
+
+private:
+ DECLARE_DYNAMIC_CLASS(wxPrintFactoryModule)
+};
+
+IMPLEMENT_DYNAMIC_CLASS(wxPrintFactoryModule, wxModule)
+
+//----------------------------------------------------------------------------
+// wxPrinterBase
+//----------------------------------------------------------------------------
+
+IMPLEMENT_CLASS(wxPrinterBase, wxObject)