]> git.saurik.com Git - wxWidgets.git/commitdiff
Moved print dialog data conversion code
authorRobert Roebling <robert@roebling.de>
Sun, 31 Oct 2004 16:34:02 +0000 (16:34 +0000)
committerRobert Roebling <robert@roebling.de>
Sun, 31 Oct 2004 16:34:02 +0000 (16:34 +0000)
    from cmndata to its msw place.

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

include/wx/cmndata.h
include/wx/msw/printdlg.h
src/common/cmndata.cpp
src/msw/printdlg.cpp

index d495c8d63c3bbc7ef5deaeeaac397bc0a9857ebf..e18a0c797a3beef8e208a1597c15ac827bb0d62b 100644 (file)
@@ -307,21 +307,11 @@ public:
     void operator=(const wxPrintDialogData& data);
     void operator=(const wxPrintData& data); // Sets internal m_printData member
 
-#ifdef __WXMSW__
-    // Convert to/from the PRINTDLG structure
-    void ConvertToNative();
-    void ConvertFromNative();
-    void SetOwnerWindow(wxWindow* win);
-    void* GetNativeData() const { return m_printDlgData; }
-#elif defined(__WXMAC__)
+#if defined(__WXMAC__)
     void ConvertToNative();
     void ConvertFromNative();
 #endif
 
-#ifdef __WXMSW__
-    void*           m_printDlgData;
-#endif
-
 private:
     int             m_printFromPage;
     int             m_printToPage;
index 681878516cc59a7d09248013ba24bb7c300cf401..e675dcec06ecd1f1e3a6bec0507c9deb048cf754 100644 (file)
@@ -71,10 +71,18 @@ public:
     wxPrintData& GetPrintData() { return m_printDialogData.GetPrintData(); }
     virtual wxDC *GetPrintDC();
 
+private:
     wxPrintDialogData m_printDialogData;
     wxDC*             m_printerDC;
     bool              m_destroyDC;
     wxWindow*         m_dialogParent;
+    
+private:
+    bool ConvertToNative( wxPrintDialogData &data );
+    bool ConvertFromNative( wxPrintDialogData &data );
+    
+    // holds MSW handle
+    void*             m_printDlg;
 
 private:
     DECLARE_NO_COPY_CLASS(wxWindowsPrintDialog)
index ae0caedd0c2b11f4a261cbcab28384400abdcc79..c864ac3f845efc340907a500d77610ae55c82ae7 100644 (file)
@@ -260,9 +260,6 @@ bool wxPrintData::Ok() const
 
 wxPrintDialogData::wxPrintDialogData()
 {
-#ifdef __WXMSW__
-    m_printDlgData = NULL;
-#endif
     m_printFromPage = 0;
     m_printToPage = 0;
     m_printMinPage = 0;
@@ -285,17 +282,11 @@ wxPrintDialogData::wxPrintDialogData()
 wxPrintDialogData::wxPrintDialogData(const wxPrintDialogData& dialogData)
     : wxObject()
 {
-#ifdef __WXMSW__
-    m_printDlgData = NULL;
-#endif
     (*this) = dialogData;
 }
 
 wxPrintDialogData::wxPrintDialogData(const wxPrintData& printData)
 {
-#ifdef __WXMSW__
-    m_printDlgData = NULL;
-#endif
     m_printFromPage = 1;
     m_printToPage = 0;
     m_printMinPage = 1;
@@ -316,198 +307,7 @@ wxPrintDialogData::wxPrintDialogData(const wxPrintData& printData)
 
 wxPrintDialogData::~wxPrintDialogData()
 {
-#ifdef __WXMSW__
-    PRINTDLG *pd = (PRINTDLG *) m_printDlgData;
-    if ( pd && pd->hDevMode )
-        GlobalFree(pd->hDevMode);
-    if ( pd )
-        delete pd;
-#endif
-}
-
-#ifdef __WXMSW__
-void wxPrintDialogData::ConvertToNative()
-{
-    wxWindowsPrintNativeData *data =
-        (wxWindowsPrintNativeData *) m_printData.GetNativeData();
-    data->TransferFrom( m_printData );
-
-    PRINTDLG *pd = (PRINTDLG*) m_printDlgData;
-
-    if (!pd)
-    {
-        pd = new PRINTDLG;
-        memset( pd, 0, sizeof(PRINTDLG) );
-        m_printDlgData = (void*) pd;
-
-        // GNU-WIN32 has the wrong size PRINTDLG - can't work out why.
-#ifdef __GNUWIN32__
-        pd->lStructSize    = 66;
-#else
-        pd->lStructSize    = sizeof(PRINTDLG);
-#endif
-        pd->hwndOwner      = (HWND)NULL;
-        pd->hDevMode       = NULL; // Will be created by PrintDlg
-        pd->hDevNames      = NULL; // Ditto
-
-        pd->Flags          = PD_RETURNDEFAULT;
-        pd->nCopies        = 1;
-    }
-
-    // Pass the devmode data to the PRINTDLG structure, since it'll
-    // be needed when PrintDlg is called.
-    if (pd->hDevMode)
-    {
-        GlobalFree(pd->hDevMode);
-    }
-
-    // Pass the devnames data to the PRINTDLG structure, since it'll
-    // be needed when PrintDlg is called.
-    if (pd->hDevNames)
-    {
-        GlobalFree(pd->hDevNames);
-    }
-
-    pd->hDevMode = (HGLOBAL)(DWORD) data->GetDevMode();
-
-    data->SetDevMode( (void*) NULL);
-
-    // Shouldn't assert; we should be able to test Ok-ness at a higher level
-    //wxASSERT_MSG( (pd->hDevMode), wxT("hDevMode must be non-NULL in ConvertToNative!"));
-
-    pd->hDevNames = (HGLOBAL)(DWORD) data->GetDevNames();
-
-    data->SetDevNames( (void*) NULL);
-
-    pd->hDC = (HDC) NULL;
-    pd->nFromPage = (WORD)m_printFromPage;
-    pd->nToPage = (WORD)m_printToPage;
-    pd->nMinPage = (WORD)m_printMinPage;
-    pd->nMaxPage = (WORD)m_printMaxPage;
-    pd->nCopies = (WORD)m_printNoCopies;
-
-    pd->Flags = PD_RETURNDC;
-
-#ifdef __GNUWIN32__
-    pd->lStructSize = 66;
-#else
-    pd->lStructSize = sizeof( PRINTDLG );
-#endif
-
-    pd->hwndOwner=(HWND)NULL;
-//    pd->hDevNames=(HANDLE)NULL;
-    pd->hInstance=(HINSTANCE)NULL;
-    pd->lCustData = (LPARAM) NULL;
-    pd->lpfnPrintHook = NULL;
-    pd->lpfnSetupHook = NULL;
-    pd->lpPrintTemplateName = NULL;
-    pd->lpSetupTemplateName = NULL;
-    pd->hPrintTemplate = (HGLOBAL) NULL;
-    pd->hSetupTemplate = (HGLOBAL) NULL;
-
-    if ( m_printAllPages )
-        pd->Flags |= PD_ALLPAGES;
-    if ( m_printSelection )
-        pd->Flags |= PD_SELECTION;
-    if ( m_printCollate )
-        pd->Flags |= PD_COLLATE;
-    if ( m_printToFile )
-        pd->Flags |= PD_PRINTTOFILE;
-    if ( !m_printEnablePrintToFile )
-        pd->Flags |= PD_DISABLEPRINTTOFILE;
-    if ( !m_printEnableSelection )
-        pd->Flags |= PD_NOSELECTION;
-    if ( !m_printEnablePageNumbers )
-        pd->Flags |= PD_NOPAGENUMS;
-    else if ( (!m_printAllPages) && (!m_printSelection) && (m_printFromPage != 0) && (m_printToPage != 0))
-        pd->Flags |= PD_PAGENUMS;
-    if ( m_printEnableHelp )
-        pd->Flags |= PD_SHOWHELP;
-    if ( m_printSetupDialog )
-        pd->Flags |= PD_PRINTSETUP;
-}
-
-void wxPrintDialogData::ConvertFromNative()
-{
-    PRINTDLG *pd = (PRINTDLG*) m_printDlgData;
-    if ( pd == NULL )
-        return;
-
-    wxWindowsPrintNativeData *data =
-        (wxWindowsPrintNativeData *) m_printData.GetNativeData();
-    
-    // Pass the devmode data back to the wxPrintData structure where it really belongs.
-    if (pd->hDevMode)
-    {
-        if (data->GetDevMode())
-        {
-            // Make sure we don't leak memory
-            GlobalFree( (HGLOBAL)(DWORD) data->GetDevMode() );
-        }
-        data->SetDevMode( (void*)(long) pd->hDevMode );
-        pd->hDevMode = NULL;
-    }
-
-    // Pass the devnames data back to the wxPrintData structure where it really belongs.
-    if (pd->hDevNames)
-    {
-        if (data->GetDevNames())
-        {
-            // Make sure we don't leak memory
-            GlobalFree((HGLOBAL)(DWORD) data->GetDevNames());
-        }
-        data->SetDevNames((void*)(long) pd->hDevNames);
-        pd->hDevNames = NULL;
-    }
-
-    // Now convert the DEVMODE object, passed down from the PRINTDLG object,
-    // into wxWidgets form.
-    data->TransferTo( m_printData );
-
-    m_printFromPage = pd->nFromPage;
-    m_printToPage = pd->nToPage;
-    m_printMinPage = pd->nMinPage;
-    m_printMaxPage = pd->nMaxPage;
-    m_printNoCopies = pd->nCopies;
-
-    m_printAllPages = (((pd->Flags & PD_PAGENUMS) != PD_PAGENUMS) && ((pd->Flags & PD_SELECTION) != PD_SELECTION));
-    m_printSelection = ((pd->Flags & PD_SELECTION) == PD_SELECTION);
-    m_printCollate = ((pd->Flags & PD_COLLATE) == PD_COLLATE);
-    m_printToFile = ((pd->Flags & PD_PRINTTOFILE) == PD_PRINTTOFILE);
-    m_printEnablePrintToFile = ((pd->Flags & PD_DISABLEPRINTTOFILE) != PD_DISABLEPRINTTOFILE);
-    m_printEnableSelection = ((pd->Flags & PD_NOSELECTION) != PD_NOSELECTION);
-    m_printEnablePageNumbers = ((pd->Flags & PD_NOPAGENUMS) != PD_NOPAGENUMS);
-    m_printEnableHelp = ((pd->Flags & PD_SHOWHELP) == PD_SHOWHELP);
-    m_printSetupDialog = ((pd->Flags & PD_PRINTSETUP) == PD_PRINTSETUP);
-
-/* port is obsolete in WIN32
-    // Get the port name
-    if (pd->hDevNames)
-    {
-        LPDEVNAMES lpDevNames = (LPDEVNAMES)GlobalLock(pd->hDevNames);
-        if (lpDevNames) {
-            m_printData.SetPortName((LPSTR)lpDevNames + lpDevNames->wDriverOffset);
-            wxString devName = (LPSTR)lpDevNames + lpDevNames->wDeviceOffset;
-            GlobalUnlock(pd->hDevNames);
-
-//            wxASSERT_MSG( (m_printerName == "" || (devName == m_printerName)), "Printer name obtained from DEVMODE and DEVNAMES were different!");
-        }
-    }
-*/
-}
-
-void wxPrintDialogData::SetOwnerWindow(wxWindow* win)
-{
-    if ( m_printDlgData == NULL )
-        ConvertToNative();
-
-    if ( m_printDlgData != NULL && win != NULL)
-    {
-        PRINTDLG *pd = (PRINTDLG *) m_printDlgData;
-        pd->hwndOwner=(HWND) win->GetHWND();
-    }
 }
-#endif // MSW
 
 #ifdef __WXMAC__
 
index 86598e7ca159b248d490205ed0125cc0ebb345e2..2327f9d04f247b7f8bd6b72e5163706184b0be81 100644 (file)
@@ -535,41 +535,49 @@ bool wxWindowsPrintDialog::Create(wxWindow *p, wxPrintDialogData* data)
     m_printerDC = NULL;
     m_destroyDC = true;
 
+    // MSW handle
+    m_printDlg = NULL;
+    
     if ( data )
         m_printDialogData = *data;
 
-    m_printDialogData.SetOwnerWindow(p);
-
     return true;
 }
 
 wxWindowsPrintDialog::~wxWindowsPrintDialog()
 {
+    PRINTDLG *pd = (PRINTDLG *) m_printDlg;
+    if (pd && pd->hDevMode)
+        GlobalFree(pd->hDevMode);
+    if ( pd )
+        delete pd;
+
     if (m_destroyDC && m_printerDC)
         delete m_printerDC;
 }
 
 int wxWindowsPrintDialog::ShowModal()
 {
-    m_printDialogData.ConvertToNative();
+    ConvertToNative( m_printDialogData );
 
-    PRINTDLG* p = (PRINTDLG *)m_printDialogData.GetNativeData() ;
+    PRINTDLG *pd = (PRINTDLG*) m_printDlg;
+    
     if (m_dialogParent)
-        p->hwndOwner = (HWND) m_dialogParent->GetHWND();
+        pd->hwndOwner = (HWND) m_dialogParent->GetHWND();
     else if (wxTheApp->GetTopWindow())
-        p->hwndOwner = (HWND) wxTheApp->GetTopWindow()->GetHWND();
+        pd->hwndOwner = (HWND) wxTheApp->GetTopWindow()->GetHWND();
     else
-        p->hwndOwner = 0;
+        pd->hwndOwner = 0;
 
-    bool ret = (PrintDlg( p ) != 0);
+    bool ret = (PrintDlg( pd ) != 0);
 
-    p->hwndOwner = 0;
+    pd->hwndOwner = 0;
 
-    if ( ret != false && ((PRINTDLG *)m_printDialogData.GetNativeData())->hDC)
+    if ( ret != false && (pd->hDC) )
     {
-        wxPrinterDC *pdc = new wxPrinterDC((WXHDC) ((PRINTDLG *)m_printDialogData.GetNativeData())->hDC);
+        wxPrinterDC *pdc = new wxPrinterDC( (WXHDC) pd->hDC );
         m_printerDC = pdc;
-        m_printDialogData.ConvertFromNative();
+        ConvertFromNative( m_printDialogData );
         return wxID_OK;
     }
     else
@@ -589,6 +597,161 @@ wxDC *wxWindowsPrintDialog::GetPrintDC()
         return (wxDC*) NULL;
 }
 
+bool wxWindowsPrintDialog::ConvertToNative( wxPrintDialogData &data )
+{
+    wxWindowsPrintNativeData *native_data =
+        (wxWindowsPrintNativeData *) data.GetPrintData().GetNativeData();
+    data.GetPrintData().ConvertToNative();
+    
+    PRINTDLG *pd = (PRINTDLG*) m_printDlg;
+
+    // Shouldn't have been defined anywhere
+    if (pd)
+        return false;
+    
+    pd = new PRINTDLG;
+    memset( pd, 0, sizeof(PRINTDLG) );
+    m_printDlg = (void*) pd;
+
+    // GNU-WIN32 has the wrong size PRINTDLG - can't work out why.
+#ifdef __GNUWIN32__
+    pd->lStructSize    = 66;
+#else
+    pd->lStructSize    = sizeof(PRINTDLG);
+#endif
+    pd->hwndOwner      = (HWND)NULL;
+    pd->hDevMode       = NULL; // Will be created by PrintDlg
+    pd->hDevNames      = NULL; // Ditto
+
+    pd->Flags          = PD_RETURNDEFAULT;
+    pd->nCopies        = 1;
+    
+    // Pass the devmode data to the PRINTDLG structure, since it'll
+    // be needed when PrintDlg is called.
+    if (pd->hDevMode)
+        GlobalFree(pd->hDevMode);
+
+    // Pass the devnames data to the PRINTDLG structure, since it'll
+    // be needed when PrintDlg is called.
+    if (pd->hDevNames)
+        GlobalFree(pd->hDevNames);
+
+    pd->hDevMode = (HGLOBAL)(DWORD) native_data->GetDevMode();
+    native_data->SetDevMode( (void*) NULL);
+
+    // Shouldn't assert; we should be able to test Ok-ness at a higher level
+    //wxASSERT_MSG( (pd->hDevMode), wxT("hDevMode must be non-NULL in ConvertToNative!"));
+
+    pd->hDevNames = (HGLOBAL)(DWORD) native_data->GetDevNames();
+    native_data->SetDevNames( (void*) NULL);
+
+
+    pd->hDC = (HDC) NULL;
+    pd->nFromPage = (WORD)data.GetFromPage();
+    pd->nToPage = (WORD)data.GetToPage();
+    pd->nMinPage = (WORD)data.GetMinPage();
+    pd->nMaxPage = (WORD)data.GetMaxPage();
+    pd->nCopies = (WORD)data.GetNoCopies();
+
+    pd->Flags = PD_RETURNDC;
+
+#ifdef __GNUWIN32__
+    pd->lStructSize = 66;
+#else
+    pd->lStructSize = sizeof( PRINTDLG );
+#endif
+
+    pd->hwndOwner=(HWND)NULL;
+//    pd->hDevNames=(HANDLE)NULL;
+    pd->hInstance=(HINSTANCE)NULL;
+    pd->lCustData = (LPARAM) NULL;
+    pd->lpfnPrintHook = NULL;
+    pd->lpfnSetupHook = NULL;
+    pd->lpPrintTemplateName = NULL;
+    pd->lpSetupTemplateName = NULL;
+    pd->hPrintTemplate = (HGLOBAL) NULL;
+    pd->hSetupTemplate = (HGLOBAL) NULL;
+
+    if ( data.GetAllPages() )
+        pd->Flags |= PD_ALLPAGES;
+    if ( data.GetSelection() )
+        pd->Flags |= PD_SELECTION;
+    if ( data.GetCollate() )
+        pd->Flags |= PD_COLLATE;
+    if ( data.GetPrintToFile() )
+        pd->Flags |= PD_PRINTTOFILE;
+    if ( !data.GetEnablePrintToFile() )
+        pd->Flags |= PD_DISABLEPRINTTOFILE;
+    if ( !data.GetEnableSelection() )
+        pd->Flags |= PD_NOSELECTION;
+    if ( !data.GetEnablePageNumbers() )
+        pd->Flags |= PD_NOPAGENUMS;
+    else if ( (!data.GetAllPages()) && (!data.GetSelection()) && (data.GetFromPage() != 0) && (data.GetToPage() != 0))
+        pd->Flags |= PD_PAGENUMS;
+    if ( data.GetEnableHelp() )
+        pd->Flags |= PD_SHOWHELP;
+    if ( data.GetSetupDialog() )
+        pd->Flags |= PD_PRINTSETUP;
+    
+    return true;
+}
+
+bool wxWindowsPrintDialog::ConvertFromNative( wxPrintDialogData &data )
+{
+    PRINTDLG *pd = (PRINTDLG*) m_printDlg;
+    if ( pd == NULL )
+        return false;
+
+    wxWindowsPrintNativeData *native_data =
+        (wxWindowsPrintNativeData *) data.GetPrintData().GetNativeData();
+    
+    // Pass the devmode data back to the wxPrintData structure where it really belongs.
+    if (pd->hDevMode)
+    {
+        if (native_data->GetDevMode())
+        {
+            // Make sure we don't leak memory
+            GlobalFree( (HGLOBAL)(DWORD) native_data->GetDevMode() );
+        }
+        native_data->SetDevMode( (void*)(long) pd->hDevMode );
+        pd->hDevMode = NULL;
+    }
+
+    // Pass the devnames data back to the wxPrintData structure where it really belongs.
+    if (pd->hDevNames)
+    {
+        if (native_data->GetDevNames())
+        {
+            // Make sure we don't leak memory
+            GlobalFree((HGLOBAL)(DWORD) native_data->GetDevNames());
+        }
+        native_data->SetDevNames((void*)(long) pd->hDevNames);
+        pd->hDevNames = NULL;
+    }
+
+    // Now convert the DEVMODE object, passed down from the PRINTDLG object,
+    // into wxWidgets form.
+    native_data->TransferTo( data.GetPrintData() );
+
+    data.SetFromPage( pd->nFromPage );
+    data.SetToPage( pd->nToPage );
+    data.SetMinPage( pd->nMinPage );
+    data.SetMaxPage( pd->nMaxPage );
+    data.SetNoCopies( pd->nCopies );
+
+    data.SetAllPages( (((pd->Flags & PD_PAGENUMS) != PD_PAGENUMS) && ((pd->Flags & PD_SELECTION) != PD_SELECTION)) );
+    data.SetSelection( ((pd->Flags & PD_SELECTION) == PD_SELECTION) );
+    data.SetCollate( ((pd->Flags & PD_COLLATE) == PD_COLLATE) );
+    data.SetPrintToFile( ((pd->Flags & PD_PRINTTOFILE) == PD_PRINTTOFILE) );
+    data.EnablePrintToFile( ((pd->Flags & PD_DISABLEPRINTTOFILE) != PD_DISABLEPRINTTOFILE) );
+    data.EnableSelection( ((pd->Flags & PD_NOSELECTION) != PD_NOSELECTION) );
+    data.EnablePageNumbers( ((pd->Flags & PD_NOPAGENUMS) != PD_NOPAGENUMS) );
+    data.EnableHelp( ((pd->Flags & PD_SHOWHELP) == PD_SHOWHELP) );
+    data.SetSetupDialog( ((pd->Flags & PD_PRINTSETUP) == PD_PRINTSETUP) );
+    
+    return true;
+}
+
 // ---------------------------------------------------------------------------
 // wxPageSetupDialog
 // ---------------------------------------------------------------------------