]> git.saurik.com Git - wxWidgets.git/commitdiff
Next phase of Print Factory code.
authorRobert Roebling <robert@roebling.de>
Tue, 26 Oct 2004 19:49:59 +0000 (19:49 +0000)
committerRobert Roebling <robert@roebling.de>
Tue, 26 Oct 2004 19:49:59 +0000 (19:49 +0000)
    Created a mini interface so that the generic
    wxPrintDialog can show a "printer" and a
    "status" line if the print factory wants
    this to be the case.
    Moved some code (print mode) back from the
    PostScript only print data to the general
    print data since it is sort of general.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30101 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/cmndata.h
include/wx/generic/prntdlgg.h
include/wx/prntbase.h
src/common/cmndata.cpp
src/common/prntbase.cpp
src/generic/dcpsg.cpp
src/generic/prntdlgg.cpp

index 4fc8e8928eb86de56c7afcdfd55dd000b35ff9ec..b108d557ac4f8813e619ce93a15ea846c325c84a 100644 (file)
@@ -197,6 +197,7 @@ public:
                                                                       // in wxPageSetupDialogData
     wxPrintQuality GetQuality() const { return m_printQuality; }
     wxPrintBin GetBin() const { return m_bin; }
+    wxPrintMode GetPrintMode() const { return m_printMode; }
 
     void SetNoCopies(int v) { m_printNoCopies = v; };
     void SetCollate(bool flag) { m_printCollate = flag; };
@@ -209,6 +210,7 @@ public:
     void SetPaperSize(const wxSize& sz) { m_paperSize = sz; }
     void SetQuality(wxPrintQuality quality) { m_printQuality = quality; }
     void SetBin(wxPrintBin bin) { m_bin = bin; }
+    void SetPrintMode(wxPrintMode printMode) { m_printMode = printMode; }
 
     wxString GetFilename() const { return m_filename; }
     void SetFilename( const wxString &filename ) { m_filename = filename; }
@@ -229,6 +231,7 @@ public:
 
 private:
     wxPrintBin      m_bin;
+    wxPrintMode     m_printMode;
 
     int             m_printNoCopies;
     int             m_printOrientation;
index 7793f07367c6093644d3560f0f7802346afbd64a..00848b6e824c7114a33a69a4d6c013138c49fc2b 100644 (file)
@@ -98,7 +98,6 @@ public:
     double GetPrinterScaleY() const { return m_printerScaleY; }
     long GetPrinterTranslateX() const { return m_printerTranslateX; }
     long GetPrinterTranslateY() const { return m_printerTranslateY; }
-    wxPrintMode GetPrintMode() const { return m_printMode; }
 
     void SetPrinterCommand(const wxString& command) { m_printerCommand = command; }
     void SetPrinterOptions(const wxString& options) { m_printerOptions = options; }
@@ -110,7 +109,6 @@ public:
     void SetPrinterTranslateX(long x) { m_printerTranslateX = x; }
     void SetPrinterTranslateY(long y) { m_printerTranslateY = y; }
     void SetPrinterTranslation(long x, long y) { m_printerTranslateX = x; m_printerTranslateY = y; }
-    void SetPrintMode(wxPrintMode printMode) { m_printMode = printMode; }
 
 #if wxUSE_STREAMS
     wxOutputStream *GetOutputStream() { return m_outputStream; }
@@ -126,7 +124,6 @@ private:
     double          m_printerScaleY;
     long            m_printerTranslateX;
     long            m_printerTranslateY;
-    wxPrintMode     m_printMode;
 #if wxUSE_STREAMS
     wxOutputStream *m_outputStream;
 #endif
@@ -201,7 +198,7 @@ public:
     virtual bool TransferDataFromWindow();
     virtual bool TransferDataToWindow();
 
-    wxComboBox *CreatePaperTypeChoice(int* x, int* y);
+    virtual wxComboBox *CreatePaperTypeChoice();
 
 public:
     wxRadioBox*         m_orientationRadioBox;
index 5e65d6119b1a6e98eb6eb523095681b02e0dfa13..95bbc6291636d139ed3d2c2925c24b89c307c3a9 100644 (file)
@@ -62,9 +62,6 @@ public:
     wxPrintFactory() {}
     virtual ~wxPrintFactory() {}
     
-    virtual bool HasPageSetupDialog() = 0;
-    virtual bool HasPrintSetupDialog() = 0;
-    
     virtual wxPrinterBase *CreatePrinter( wxPrintDialogData* data ) = 0;
     
     virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview, 
@@ -79,6 +76,20 @@ public:
     virtual wxPrintDialogBase *CreatePrintDialog( wxWindow *parent, 
                                                   wxPrintData *data ) = 0;
                                                   
+    // What to do and what to show in the wxPrintDialog
+    // a) Use the generic print setup dialog or a native one?
+    virtual bool HasPrintSetupDialog() = 0;
+    virtual wxDialog *CreatePrintSetupDialog( wxWindow *parent, wxPrintData *data ) = 0;
+    // b) Provide the "print to file" option ourselves or via print setup?
+    virtual bool HasOwnPrintToFile() = 0;
+    // c) Show current printer
+    virtual bool HasPrinterLine() = 0;
+    virtual wxString CreatePrinterLine() = 0;
+    // d) Show Status line for current printer?
+    virtual bool HasStatusLine() = 0;
+    virtual wxString CreateStatusLine() = 0;
+
+                                                  
     virtual wxPrintNativeDataBase *CreatePrintNativeData() = 0;
     
     static void SetPrintFactory( wxPrintFactory *factory );
@@ -89,11 +100,6 @@ public:
 class WXDLLEXPORT wxNativePrintFactory: public wxPrintFactory
 {
 public:
-    virtual bool HasPageSetupDialog() 
-        { return true; }
-    virtual bool HasPrintSetupDialog() 
-        { return true; }
-    
     virtual wxPrinterBase *CreatePrinter( wxPrintDialogData *data );
     
     virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview, 
@@ -108,6 +114,14 @@ public:
     virtual wxPrintDialogBase *CreatePrintDialog( wxWindow *parent, 
                                                   wxPrintData *data );
                                                   
+    virtual bool HasPrintSetupDialog();
+    virtual wxDialog *CreatePrintSetupDialog( wxWindow *parent, wxPrintData *data );
+    virtual bool HasOwnPrintToFile();
+    virtual bool HasPrinterLine();
+    virtual wxString CreatePrinterLine();
+    virtual bool HasStatusLine();
+    virtual wxString CreateStatusLine();
+    
     virtual wxPrintNativeDataBase *CreatePrintNativeData();
 };
 
index 2a5523a1c4f79b0f69d8f08b8e0ae4f52f38c08b..4b4941d34537fefaa3939274a15c338ddbabf1c8 100644 (file)
@@ -171,6 +171,7 @@ wxPrintData::wxPrintData()
     m_nativePrintData = wxNativePrintData::Create() ;
 #endif
     m_bin = wxPRINTBIN_DEFAULT;
+    m_printMode = wxPRINT_MODE_PRINTER;
     m_printOrientation = wxPORTRAIT;
     m_printNoCopies = 1;
     m_printCollate = false;
@@ -228,6 +229,7 @@ void wxPrintData::operator=(const wxPrintData& data)
     m_paperId = data.m_paperId;
     m_paperSize = data.m_paperSize;
     m_bin = data.m_bin;
+    m_printMode = data.m_printMode;
     
     m_nativeData = data.GetNativeData();
     m_nativeData->m_ref++;
index 3ff2d387a9c35cc42e35da9d53f68f4425a823c1..e1f655959fc44ec0c1b7051880f9e9430bd80357 100644 (file)
@@ -152,6 +152,74 @@ wxPrintDialogBase *wxNativePrintFactory::CreatePrintDialog( wxWindow *parent,
 #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__)
+    return NULL;
+#elif defined(__WXMAC__)
+    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
+}
+
+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__)
index 545d25a5c54c2a8a8ac61f185fb4f256edac6cb7..2e423e5501557b4f70021b7828eb9b72b01325e3 100644 (file)
@@ -1801,10 +1801,7 @@ bool wxPostScriptDC::StartDoc( const wxString& message )
 {
     wxCHECK_MSG( m_ok, false, wxT("invalid postscript dc") );
     
-    wxPostScriptPrintNativeData *data = 
-        (wxPostScriptPrintNativeData *) m_printData.GetNativeData();
-
-    if (data->GetPrintMode() != wxPRINT_MODE_STREAM )
+    if (m_printData.GetPrintMode() != wxPRINT_MODE_STREAM )
     {
         if (m_printData.GetFilename() == wxEmptyString)
         {
@@ -1971,7 +1968,7 @@ void wxPostScriptDC::EndDoc ()
     wxPostScriptPrintNativeData *data = 
         (wxPostScriptPrintNativeData *) m_printData.GetNativeData();
 
-    if (m_ok && (data->GetPrintMode() == wxPRINT_MODE_PRINTER))
+    if (m_ok && (m_printData.GetPrintMode() == wxPRINT_MODE_PRINTER))
     {
         wxString command;
         command += data->GetPrinterCommand();
@@ -2480,8 +2477,8 @@ void wxPostScriptDC::PsPrint( const char* psdata )
 {
     wxPostScriptPrintNativeData *data = 
         (wxPostScriptPrintNativeData *) m_printData.GetNativeData();
-
-    switch(data->GetPrintMode())
+        
+    switch (m_printData.GetPrintMode())
     {
 #if wxUSE_STREAMS
         // append to output stream
@@ -2505,8 +2502,8 @@ void wxPostScriptDC::PsPrint( int ch )
 {
     wxPostScriptPrintNativeData *data = 
         (wxPostScriptPrintNativeData *) m_printData.GetNativeData();
-
-    switch (data->GetPrintMode())
+        
+    switch (m_printData.GetPrintMode())
     {
 #if wxUSE_STREAMS
         // append to output stream
index 42a2299da47a96f46dd158c9b50fd2bdb6e26be2..eecef2f52664304fd8343fced3fb8a170571760c 100644 (file)
@@ -61,9 +61,6 @@
 #include "wx/paper.h"
 #include "wx/filename.h"
 
-// For print paper things
-#include "wx/prntbase.h"
-
 #include <stdlib.h>
 #include <string.h>
 
@@ -106,7 +103,6 @@ wxPostScriptPrintNativeData::wxPostScriptPrintNativeData()
     m_printerScaleY = 1.0;
     m_printerTranslateX = 0;
     m_printerTranslateY = 0;
-    m_printMode = wxPRINT_MODE_FILE;
 }
 
 wxPostScriptPrintNativeData::~wxPostScriptPrintNativeData()
@@ -167,20 +163,46 @@ void wxGenericPrintDialog::Init(wxWindow * WXUNUSED(parent))
   //                     wxDEFAULT_DIALOG_STYLE | wxTAB_TRAVERSAL);
 
     wxBoxSizer *mainsizer = new wxBoxSizer( wxVERTICAL );
-
+    
     // 1) top row
 
+    wxPrintFactory* factory = wxPrintFactory::GetFactory();
+
     wxStaticBoxSizer *topsizer = new wxStaticBoxSizer(
         new wxStaticBox( this, wxID_ANY, _( "Printer options" ) ), wxHORIZONTAL );
+    wxFlexGridSizer *flex = new wxFlexGridSizer( 2 );
+    flex->AddGrowableCol( 1 );
+    topsizer->Add( flex, 1, wxGROW );
+        
     m_printToFileCheckBox = new wxCheckBox( this, wxPRINTID_PRINTTOFILE, _("Print to File") );
-    topsizer->Add( m_printToFileCheckBox, 0, wxCENTER|wxALL, 5 );
-
-    topsizer->Add( 60,2,1 );
+    flex->Add( m_printToFileCheckBox, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+    
+    if (factory->HasOwnPrintToFile())
+        m_printToFileCheckBox->Enable( false );
 
     m_setupButton = new wxButton(this, wxPRINTID_SETUP, _("Setup...") );
-    topsizer->Add( m_setupButton, 0, wxCENTER|wxALL, 5 );
+    flex->Add( m_setupButton, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
+    
+    if (!factory->HasPrintSetupDialog())
+        m_setupButton->Enable( false );
+        
+    if (factory->HasPrinterLine())
+    {
+        flex->Add( new wxStaticText( this, -1, _("Printer:") ), 
+            0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+        flex->Add( new wxStaticText( this, -1, factory->CreatePrinterLine() ), 
+            0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+    }
+
+    if (factory->HasStatusLine())
+    {
+        flex->Add( new wxStaticText( this, -1, _("Status:") ), 
+            0, wxALIGN_CENTER_VERTICAL|wxALL-wxTOP, 5 );
+        flex->Add( new wxStaticText( this, -1, factory->CreateStatusLine() ), 
+            0, wxALIGN_CENTER_VERTICAL|wxALL-wxTOP, 5 );
+    }
 
-    mainsizer->Add( topsizer, 0, wxLEFT|wxTOP|wxRIGHT, 10 );
+    mainsizer->Add( topsizer, 0, wxLEFT|wxTOP|wxRIGHT|wxGROW, 10 );
 
     // 2) middle row with radio box
 
@@ -246,31 +268,7 @@ void wxGenericPrintDialog::Init(wxWindow * WXUNUSED(parent))
 
 int wxGenericPrintDialog::ShowModal()
 {
-    if ( m_printDialogData.GetSetupDialog() )
-    {
-        // Make sure wxPrintData object reflects the settings now, in case the setup dialog
-        // changes it. In fact there aren't any common settings at
-        // present, but there might be in future.
-        // TransferDataFromWindow();
-
-        wxGenericPrintSetupDialog genericPrintSetupDialog( this, &m_printDialogData.GetPrintData() );
-        int ret = genericPrintSetupDialog.ShowModal();
-        if (ret != wxID_CANCEL)
-        {
-            // Transfer settings to  the print dialog's print data.
-            m_printDialogData.GetPrintData() = genericPrintSetupDialog.GetPrintData();
-        }
-
-        // Restore the wxPrintData settings again (uncomment if any settings become
-        // common to both dialogs)
-        // TransferDataToWindow();
-
-        return ret;
-    }
-    else
-    {
-        return wxDialog::ShowModal();
-    }
+    return wxDialog::ShowModal();
 }
 
 wxGenericPrintDialog::~wxGenericPrintDialog()
@@ -286,16 +284,13 @@ void wxGenericPrintDialog::OnOK(wxCommandEvent& WXUNUSED(event))
     if (m_printDialogData.GetToPage() < 1)
         m_printDialogData.SetToPage(m_printDialogData.GetFromPage());
 
-    wxPostScriptPrintNativeData *data = 
-        (wxPostScriptPrintNativeData *) m_printDialogData.GetPrintData().GetNativeData();
-
     // There are some interactions between the global setup data
     // and the standard print dialog. The global printing 'mode'
     // is determined by whether the user checks Print to file
     // or not.
     if (m_printDialogData.GetPrintToFile())
     {
-        data->SetPrintMode(wxPRINT_MODE_FILE);
+        m_printDialogData.GetPrintData().SetPrintMode(wxPRINT_MODE_FILE);
 
         wxFileName fname( m_printDialogData.GetPrintData().GetFilename() );
 
@@ -307,7 +302,7 @@ void wxGenericPrintDialog::OnOK(wxCommandEvent& WXUNUSED(event))
     }
     else
     {
-        data->SetPrintMode(wxPRINT_MODE_PRINTER);
+        m_printDialogData.GetPrintData().SetPrintMode(wxPRINT_MODE_PRINTER);
     }
 
     EndModal(wxID_OK);
@@ -331,10 +326,15 @@ void wxGenericPrintDialog::OnRange(wxCommandEvent& event)
 
 void wxGenericPrintDialog::OnSetup(wxCommandEvent& WXUNUSED(event))
 {
-    wxGenericPrintSetupDialog dialog( this, &m_printDialogData.GetPrintData() );
-    if (dialog.ShowModal() != wxID_CANCEL)
+    wxPrintFactory* factory = wxPrintFactory::GetFactory();
+
+    if (factory->HasPrintSetupDialog())
     {
-        m_printDialogData = dialog.GetPrintData();
+        // The print setup dialog should change the
+        // print data in-place if not cancelled.
+        wxDialog *dialog = factory->CreatePrintSetupDialog( this, &m_printDialogData.GetPrintData() );
+        dialog->ShowModal();
+        dialog->Destroy();
     }
 }
 
@@ -428,8 +428,7 @@ TODO: collate and noCopies should be duplicated across dialog data and print dat
 
 wxDC *wxGenericPrintDialog::GetPrintDC()
 {
-  //    return new wxPostScriptDC(wxThePrintSetupData->GetPrinterFile(), false, (wxWindow *) NULL);
-  return new wxPostScriptDC(GetPrintDialogData().GetPrintData());
+    return new wxPostScriptDC(GetPrintDialogData().GetPrintData());
 }
 
 // ----------------------------------------------------------------------------
@@ -449,53 +448,94 @@ void wxGenericPrintSetupDialog::Init(wxPrintData* data)
     if ( data )
         m_printData = *data;
 
-    int staticBoxWidth = 300;
 
-    (void) new wxStaticBox(this, wxPRINTID_STATIC, _("Paper size"), wxPoint(10, 10), wxSize(staticBoxWidth, 60) );
+    wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
 
-    int xPos = 20;
-    int yPos = 30;
-    m_paperTypeChoice = CreatePaperTypeChoice(&xPos, &yPos);
+    wxBoxSizer *item1 = new wxBoxSizer( wxHORIZONTAL );
+    main_sizer->Add( item1, 0, wxALL, 5 );
 
-    wxString *choices =  new wxString[2];
-    choices[0] = _("Portrait");
-    choices[1] = _("Landscape");
+    // printer options (on the left)
 
-    m_orientationRadioBox = new wxRadioBox(this, wxPRINTID_ORIENTATION, _("Orientation"),
-        wxPoint(10, 80), wxDefaultSize, 2, choices, 1, wxRA_VERTICAL );
-    m_orientationRadioBox->SetSelection(0);
+    wxBoxSizer *item2 = new wxBoxSizer( wxVERTICAL );
 
-    (void) new wxStaticBox(this, wxPRINTID_STATIC, _("Options"), wxPoint(10, 130), wxSize(staticBoxWidth, 50) );
+    wxStaticBox *item4 = new wxStaticBox( this, wxPRINTID_STATIC, _("Paper size") );
+    wxStaticBoxSizer *item3 = new wxStaticBoxSizer( item4, wxVERTICAL );
 
-    int colourYPos = 145;
+    m_paperTypeChoice = CreatePaperTypeChoice();
+    item3->Add( m_paperTypeChoice, 0, wxALIGN_CENTER|wxALL, 5 );
 
-#ifdef __WXMOTIF__
-    colourYPos = 150;
-#endif
+    item2->Add( item3, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    wxString strs6[] = 
+    {
+        _("Portrait"), 
+        _("Landscape")
+    };
+    m_orientationRadioBox= new wxRadioBox( this, wxPRINTID_ORIENTATION, _("Orientation"), wxDefaultPosition, wxDefaultSize, 2, strs6, 1, wxRA_SPECIFY_ROWS );
+    item2->Add( m_orientationRadioBox, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    wxStaticBox *item8 = new wxStaticBox( this, -1, _("Options") );
+    wxStaticBoxSizer *item7 = new wxStaticBoxSizer( item8, wxHORIZONTAL );
+
+    m_colourCheckBox = new wxCheckBox( this, wxPRINTID_PRINTCOLOUR, _("Print in colour") );
+    item7->Add( m_colourCheckBox, 0, wxALIGN_CENTER|wxALL, 5 );
 
-    m_colourCheckBox = new wxCheckBox(this, wxPRINTID_PRINTCOLOUR, _("Print in colour"), wxPoint(15, colourYPos));
+    item2->Add( item7, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
 
-    (void) new wxStaticBox(this, wxPRINTID_STATIC, _("Print spooling"), wxPoint(330, 10), wxSize(200,170) );
+    item1->Add( item2, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
 
-    (void) new wxStaticText(this, wxPRINTID_STATIC, _("Printer command:"), wxPoint(340, 30));
+    // spooling options (on the right)
 
-    m_printerCommandText = new wxTextCtrl(this, wxPRINTID_COMMAND, wxEmptyString, wxPoint(360, 55), wxSize(150, wxDefaultCoord));
+    wxStaticBox *item11 = new wxStaticBox( this, -1, _("Print spooling") );
+    wxStaticBoxSizer *item10 = new wxStaticBoxSizer( item11, wxVERTICAL );
 
-    (void) new wxStaticText(this, wxPRINTID_STATIC, _("Printer options:"), wxPoint(340, 110));
+    wxStaticText *item12 = new wxStaticText( this, -1, _("Printer command:") );
+    item10->Add( item12, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
 
-    m_printerOptionsText = new wxTextCtrl(this, wxPRINTID_OPTIONS, wxEmptyString, wxPoint(360, 135), wxSize(150, wxDefaultCoord));
+    wxBoxSizer *item13 = new wxBoxSizer( wxHORIZONTAL );
 
-    wxButton *okButton = new wxButton(this, wxID_OK, _("OK"), wxPoint(130, 200), wxSize(80, wxDefaultCoord));
-    (void) new wxButton(this, wxID_CANCEL, _("Cancel"), wxPoint(320, 200), wxSize(80, wxDefaultCoord));
+    item13->Add( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    m_printerCommandText = new wxTextCtrl( this, wxPRINTID_COMMAND, wxT(""), wxDefaultPosition, wxSize(160,-1) );
+    item13->Add( m_printerCommandText, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    item10->Add( item13, 0, wxALIGN_CENTER|wxALL, 0 );
+
+    wxStaticText *item15 = new wxStaticText( this, -1, _("Printer options:") );
+    item10->Add( item15, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    wxBoxSizer *item16 = new wxBoxSizer( wxHORIZONTAL );
+
+    item16->Add( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    m_printerOptionsText = new wxTextCtrl( this, wxPRINTID_OPTIONS, wxT(""), wxDefaultPosition, wxSize(160,-1) );
+    item16->Add( m_printerOptionsText, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    item10->Add( item16, 0, wxALIGN_CENTER|wxALL, 0 );
+
+    item1->Add( item10, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
+
+
+#if wxUSE_STATLINE
+    // static line
+    main_sizer->Add( new wxStaticLine( this, -1 ), 0, wxEXPAND | wxLEFT|wxRIGHT|wxTOP, 10 );
+#endif
+
+    // buttons
+
+    main_sizer->Add( CreateButtonSizer( wxOK|wxCANCEL), 0, wxCENTER|wxALL, 10 );
+
+    SetAutoLayout( true );
+    SetSizer( main_sizer );
+
+    main_sizer->Fit( this );
+    Centre(wxBOTH);
 
-    okButton->SetDefault();
-    okButton->SetFocus();
 
     Fit();
     Centre(wxBOTH);
 
     InitDialog();
-    delete[] choices;
 }
 
 wxGenericPrintSetupDialog::~wxGenericPrintSetupDialog()
@@ -557,18 +597,11 @@ bool wxGenericPrintSetupDialog::TransferDataFromWindow()
     return true;
 }
 
-wxComboBox *wxGenericPrintSetupDialog::CreatePaperTypeChoice(int *x, int *y)
+wxComboBox *wxGenericPrintSetupDialog::CreatePaperTypeChoice()
 {
-/* Should not be necessary
-    if (!wxThePrintPaperDatabase)
-    {
-        wxThePrintPaperDatabase = new wxPrintPaperDatabase;
-        wxThePrintPaperDatabase->CreateDatabase();
-    }
-*/
-    size_t      n = wxThePrintPaperDatabase->GetCount();
-    wxString   *choices = new wxString [n];
-    size_t      sel = 0;
+    size_t n = wxThePrintPaperDatabase->GetCount();
+    wxString *choices = new wxString [n];
+    size_t sel = 0;
 
     for (size_t i = 0; i < n; i++)
     {
@@ -583,17 +616,16 @@ wxComboBox *wxGenericPrintSetupDialog::CreatePaperTypeChoice(int *x, int *y)
     wxComboBox *choice = new wxComboBox( this,
                                          wxPRINTID_PAPERSIZE,
                                          _("Paper Size"),
-                                         wxPoint(*x, *y),
+                                         wxDefaultPosition,
                                          wxSize(width, wxDefaultCoord),
                                          n, choices );
 
-    //    SetFont(thisFont);
-
     delete[] choices;
 
     choice->SetSelection(sel);
     return choice;
 }
+
 #endif // wxUSE_POSTSCRIPT
 
 // ----------------------------------------------------------------------------