]> git.saurik.com Git - wxWidgets.git/commitdiff
Add PrivData() field to wxPrintData since MSW's printer
authorRobert Roebling <robert@roebling.de>
Mon, 28 Feb 2005 01:51:59 +0000 (01:51 +0000)
committerRobert Roebling <robert@roebling.de>
Mon, 28 Feb 2005 01:51:59 +0000 (01:51 +0000)
    sometimes seem to save data in an extra field. The
    original author of the patch chose to save it in char*
    so I kept that, although void* would probably be correct.
    The patch is against 2.4.2 and the code has been reshuffled
    since then so that the patch had to be redone entirely.

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

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

index 4dc71933cc58c09057044e9d5254296d078efaf0..35cee4ff505baee15427da67ef751d55c84129ae 100644 (file)
@@ -217,6 +217,11 @@ public:
     
     void operator=(const wxPrintData& data);
 
+    char* GetPrivData() const { return m_privData; }
+    int GetPrivDataLen() const { return m_privDataLen; }
+    void SetPrivData( char *privData, int len );
+   
+
 #if WXWIN_COMPATIBILITY_2_4
     // PostScript-specific data
     wxString GetPrinterCommand() const;
@@ -268,6 +273,9 @@ private:
     
     wxString        m_filename;
     
+    char* m_privData;
+    int   m_privDataLen;
+    
     wxPrintNativeDataBase  *m_nativeData;
 
 private:
index dba9a454129d61e0b9fb32c50677d47c45637436..3f76a0b2074420401c205a10b800e596c1f909fb 100644 (file)
@@ -44,7 +44,7 @@ public:
     void SetDevMode(void* data) { m_devMode = data; }
     void* GetDevNames() const { return m_devNames; }
     void SetDevNames(void* data) { m_devNames = data; }
-    
+   
 private:
     void* m_devMode;
     void* m_devNames;
index 171f85d13009034170a1148e5b00952f3b524ef7..9c34396f4f53073fa0a23e2f09010d492366682a 100644 (file)
@@ -185,6 +185,9 @@ wxPrintData::wxPrintData()
     m_paperId = wxPAPER_A4;
     m_paperSize = wxSize(210, 297);
 
+    m_privData = NULL;
+    m_privDataLen = 0;
+    
     m_nativeData = wxPrintFactory::GetFactory()->CreatePrintNativeData();
 }
 
@@ -195,11 +198,29 @@ wxPrintData::wxPrintData(const wxPrintData& printData)
     (*this) = printData;
 }
 
+void wxPrintData::SetPrivData( char *privData, int len )
+{
+    if (m_privData)
+    {
+        delete [] m_privData;
+        m_privData = NULL;
+    }
+    m_privDataLen = len;
+    if (m_privDataLen > 0)
+    {
+        m_privData = new char[m_privDataLen];
+        memcpy( m_privData, privData, m_privDataLen );
+    }
+}
+
 wxPrintData::~wxPrintData()
 {
     m_nativeData->m_ref--;
     if (m_nativeData->m_ref == 0)
         delete m_nativeData;
+        
+    if (m_privData)
+        delete [] m_privData;
 
 #ifdef __WXMAC__
     delete m_nativePrintData ;
@@ -250,6 +271,18 @@ void wxPrintData::operator=(const wxPrintData& data)
     m_nativeData = data.GetNativeData();
     m_nativeData->m_ref++;
 
+    if (m_privData)
+    {
+        delete [] m_privData;
+        m_privData = NULL;
+    }
+    m_privDataLen = data.GetPrivDataLen();
+    if (m_privDataLen > 0)
+    {
+        m_privData = new char[m_privDataLen];
+        memcpy( m_privData, data.GetPrivData(), m_privDataLen );
+    }
+
 #ifdef __WXMAC__
     m_nativePrintData->CopyFrom( data.m_nativePrintData ) ;
 #endif
index 56e9af2adb0e32b1be4501addf556e2d6f74306a..abe7e64ad4927453650ce4c904af8848b8443b5c 100644 (file)
@@ -279,6 +279,11 @@ bool wxWindowsPrintNativeData::TransferTo( wxPrintData &data )
         else
             data.SetQuality( wxPRINT_QUALITY_HIGH );
 
+        if (devMode->dmDriverExtra > 0)
+            data.SetPrivData( (char *)devMode+devMode->dmSize, devMode->dmDriverExtra );
+        else
+            data.SetPrivData( NULL, 0 );
+
         GlobalUnlock(hDevMode);
     }
 
@@ -469,6 +474,12 @@ bool wxWindowsPrintNativeData::TransferFrom( const wxPrintData &data )
         }
         devMode->dmPrintQuality = quality;
         devMode->dmFields |= DM_PRINTQUALITY;
+        
+        if (data.GetPrivDataLen() > 0)
+        {
+            memcpy( (char *)devMode+devMode->dmSize, data.GetPrivData(), data.GetPrivDataLen() );
+            devMode->dmDriverExtra = data.GetPrivDataLen();
+        }
 
         if (data.GetBin() != wxPRINTBIN_DEFAULT)
         {