]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/printdlg.cpp
fixed memory allocation code of wxStreamBuffer to not realloc() new[]ed memory any...
[wxWidgets.git] / src / msw / printdlg.cpp
index 143e0f16034c23b4ef699c038eb030848d945478..712b0d374a9466a0045d7040c67b87fe126684fa 100644 (file)
@@ -6,22 +6,32 @@
 // Created:     04/01/98
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart and Markus Holzem
-// Licence:    wxWindows license
+// Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
+// ===========================================================================
+// declarations
+// ===========================================================================
+
+// ---------------------------------------------------------------------------
+// headers
+// ---------------------------------------------------------------------------
+
 #ifdef __GNUG__
-#pragma implementation "printdlg.h"
+    #pragma implementation "printdlg.h"
 #endif
 
 // For compilers that support precompilation, includes "wx.h".
-#define IN_WX_MAIN_CPP
 #include "wx/wxprec.h"
 
-#if defined(__BORLANDC__)
-#pragma hdrstop
+#ifdef __BORLANDC__
+    #pragma hdrstop
 #endif
 
+#if wxUSE_PRINTING_ARCHITECTURE
+
 #ifndef WX_PRECOMP
+    #include "wx/app.h"
 #endif
 
 #include "wx/printdlg.h"
 
 // Have to emulate page setup dialog for Win16
 #if !defined(__WIN95__)
-#include "wx/generic/prntdlgg.h"
+    #include "wx/generic/prntdlgg.h"
 #endif
 
 #include <stdlib.h>
-#include <windows.h>
+
+#include "wx/msw/private.h"
+
 #include <commdlg.h>
 
 #ifndef __WIN32__
-#include <print.h>
+    #include <print.h>
 #endif
 
-// Clash with Windows header files
-#ifdef StartDoc
-#undef StartDoc
-#endif
+// ---------------------------------------------------------------------------
+// wxWin macros
+// ---------------------------------------------------------------------------
 
-#if !USE_SHARED_LIBRARY
-IMPLEMENT_DYNAMIC_CLASS(wxPrintDialog, wxDialog)
-IMPLEMENT_CLASS(wxPageSetupDialog, wxDialog)
-#endif
+    IMPLEMENT_DYNAMIC_CLASS(wxPrintDialog, wxDialog)
+    IMPLEMENT_CLASS(wxPageSetupDialog, wxDialog)
+
+// ===========================================================================
+// implementation
+// ===========================================================================
 
-wxPrintDialog::wxPrintDialog(void):
- wxDialog()
+// ---------------------------------------------------------------------------
+// wxPrintDialog
+// ---------------------------------------------------------------------------
+
+wxPrintDialog::wxPrintDialog()
 {
-  dialogParent = NULL;
-  printerDC = NULL;
-  destroyDC = TRUE;
-  deviceName = NULL;
-  driverName = NULL;
-  portName = NULL;
+    m_dialogParent = NULL;
+    m_printerDC = NULL;
+    m_destroyDC = TRUE;
 }
 
-wxPrintDialog::wxPrintDialog(wxWindow *p, wxPrintData* data):
- wxDialog()
+wxPrintDialog::wxPrintDialog(wxWindow *p, wxPrintDialogData* data)
 {
-  Create(p, data);
+    Create(p, data);
 }
 
-bool wxPrintDialog::Create(wxWindow *p, wxPrintData* data)
+wxPrintDialog::wxPrintDialog(wxWindow *p, wxPrintData* data)
 {
-  dialogParent = p;
-  printerDC = NULL;
-  destroyDC = TRUE;
-  deviceName = NULL;
-  driverName = NULL;
-  portName = NULL;
-
-  if ( data )
-    printData = *data;
-
-#ifdef __WXMSW__
-  printData.SetOwnerWindow(p);
-#endif
+    wxPrintDialogData data2;
+    if ( data )
+        data2 = *data;
 
-  return TRUE;
+    Create(p, &data2);
 }
 
-wxPrintDialog::~wxPrintDialog(void)
+bool wxPrintDialog::Create(wxWindow *p, wxPrintDialogData* data)
 {
-  if (destroyDC && printerDC)
-    delete printerDC;
-  if (deviceName) delete[] deviceName;
-  if (driverName) delete[] driverName;
-  if (portName) delete[] portName;
+    m_dialogParent = p;
+    m_printerDC = NULL;
+    m_destroyDC = TRUE;
+
+    if ( data )
+        m_printDialogData = *data;
+
+    m_printDialogData.SetOwnerWindow(p);
+
+    return TRUE;
 }
 
-int wxPrintDialog::ShowModal(void)
+wxPrintDialog::~wxPrintDialog()
 {
-  printData.ConvertToNative();
-
-  bool ret = (PrintDlg( (PRINTDLG *)printData.printData ) != 0);
-  if ( ret != FALSE && ((PRINTDLG *)printData.printData)->hDC)
-  {
-    wxPrinterDC *pdc = new wxPrinterDC((WXHDC) ((PRINTDLG *)printData.printData)->hDC);
-    printerDC = pdc;
-    printData.ConvertFromNative();
-    return wxID_OK;
-  }
-  else
-  {
-/*
-      char buf[256];
-      DWORD exError = CommDlgExtendedError();
-      sprintf(buf, "ret = %d, ex error = %d", (int) ret, (int) exError);
-      wxMessageBox(buf);
-*/
-      return wxID_CANCEL;
-  }
+    if (m_destroyDC && m_printerDC)
+        delete m_printerDC;
 }
 
-wxDC *wxPrintDialog::GetPrintDC(void)
+int wxPrintDialog::ShowModal()
 {
-  if (printerDC)
-  {
-    destroyDC = FALSE;
-    return printerDC;
-  }
-  else
-    return NULL;
+    m_printDialogData.ConvertToNative();
+
+    PRINTDLG* p = (PRINTDLG *)m_printDialogData.GetNativeData() ;
+    if (m_dialogParent)
+        p->hwndOwner = (HWND) m_dialogParent->GetHWND();
+    else if (wxTheApp->GetTopWindow())
+        p->hwndOwner = (HWND) wxTheApp->GetTopWindow()->GetHWND();
+    else
+        p->hwndOwner = 0;
+
+    bool ret = (PrintDlg( p ) != 0);
+
+    p->hwndOwner = 0;
+
+    if ( ret != FALSE && ((PRINTDLG *)m_printDialogData.GetNativeData())->hDC)
+    {
+        wxPrinterDC *pdc = new wxPrinterDC((WXHDC) ((PRINTDLG *)m_printDialogData.GetNativeData())->hDC);
+        m_printerDC = pdc;
+        m_printDialogData.ConvertFromNative();
+        return wxID_OK;
+    }
+    else
+    {
+        return wxID_CANCEL;
+    }
 }
 
-/*
- * wxPageSetupDialog
- */
+wxDC *wxPrintDialog::GetPrintDC()
+{
+    if (m_printerDC)
+    {
+        m_destroyDC = FALSE;
+        return m_printerDC;
+    }
+    else
+        return (wxDC*) NULL;
+}
 
-wxPageSetupDialog::wxPageSetupDialog(void):
- wxDialog()
+// ---------------------------------------------------------------------------
+// wxPageSetupDialog
+// ---------------------------------------------------------------------------
+
+wxPageSetupDialog::wxPageSetupDialog()
 {
-  m_dialogParent = NULL;
+    m_dialogParent = NULL;
 }
 
-wxPageSetupDialog::wxPageSetupDialog(wxWindow *p, wxPageSetupData *data):
- wxDialog()
+wxPageSetupDialog::wxPageSetupDialog(wxWindow *p, wxPageSetupData *data)
 {
-  Create(p, data);
+    Create(p, data);
 }
 
 bool wxPageSetupDialog::Create(wxWindow *p, wxPageSetupData *data)
 {
-  m_dialogParent = p;
+    m_dialogParent = p;
 
-  if (data)
-    m_pageSetupData = (*data);
+    if (data)
+        m_pageSetupData = (*data);
 
 #if defined(__WIN95__)
-  m_pageSetupData.SetOwnerWindow(p);
+    m_pageSetupData.SetOwnerWindow(p);
 #endif
-  return TRUE;
+    return TRUE;
 }
 
-wxPageSetupDialog::~wxPageSetupDialog(void)
+wxPageSetupDialog::~wxPageSetupDialog()
 {
 }
 
-int wxPageSetupDialog::ShowModal(void)
+int wxPageSetupDialog::ShowModal()
 {
 #ifdef __WIN95__
     m_pageSetupData.ConvertToNative();
-    if (PageSetupDlg( (PAGESETUPDLG *)m_pageSetupData.GetNativeData() ))
+    PAGESETUPDLG *p = (PAGESETUPDLG *)m_pageSetupData.GetNativeData();
+    if (m_dialogParent)
+        p->hwndOwner = (HWND) m_dialogParent->GetHWND();
+    else if (wxTheApp->GetTopWindow())
+        p->hwndOwner = (HWND) wxTheApp->GetTopWindow()->GetHWND();
+    else
+        p->hwndOwner = 0;
+    BOOL retVal = PageSetupDlg( p ) ;
+    p->hwndOwner = 0;
+    if (retVal)
     {
-      m_pageSetupData.ConvertFromNative();
-      return wxID_OK;
+        m_pageSetupData.ConvertFromNative();
+        return wxID_OK;
     }
     else
-      return wxID_CANCEL;
+        return wxID_CANCEL;
 #else
     wxGenericPageSetupDialog *genericPageSetupDialog = new wxGenericPageSetupDialog(GetParent(), & m_pageSetupData);
     int ret = genericPageSetupDialog->ShowModal();
@@ -183,3 +208,5 @@ int wxPageSetupDialog::ShowModal(void)
 #endif
 }
 
+#endif
+    // wxUSE_PRINTING_ARCHITECTURE