]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/printdlg.cpp
render scrollbar's thumb as stippled bar to distinguish it from controls
[wxWidgets.git] / src / msw / printdlg.cpp
index 378044bb5e681182fc5cc2ae39e2a9b4ad0115bc..e692c3104b0aa7c8f8cbeb2194f232b1515d568d 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        printdlg.cpp
+// Name:        src/msw/printdlg.cpp
 // Purpose:     wxPrintDialog, wxPageSetupDialog
 // Author:      Julian Smart
 // Modified by:
 // headers
 // ---------------------------------------------------------------------------
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-    #pragma implementation "printdlg.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #if wxUSE_PRINTING_ARCHITECTURE && (!defined(__WXUNIVERSAL__) || !wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW)
 
 #ifndef WX_PRECOMP
+    #include "wx/msw/wrapcdlg.h"
     #include "wx/app.h"
+    #include "wx/dcprint.h"
+    #include "wx/cmndata.h"
 #endif
 
-#include "wx/cmndata.h"
 #include "wx/printdlg.h"
 #include "wx/msw/printdlg.h"
-#include "wx/dcprint.h"
 #include "wx/paper.h"
 
 #include <stdlib.h>
 
-#include "wx/msw/wrapcdlg.h"
-
 #ifndef __WIN32__
     #include <print.h>
 #endif
@@ -99,19 +94,19 @@ static HGLOBAL wxCreateDevNames(const wxString& driverName, const wxString& prin
     else
     {
         hDev = GlobalAlloc(GPTR, 4*sizeof(WORD)+
-                           ( driverName.Length() + 1 +
-            printerName.Length() + 1 +
-                             portName.Length()+1 ) * sizeof(wxChar) );
+                           ( driverName.length() + 1 +
+            printerName.length() + 1 +
+                             portName.length()+1 ) * sizeof(wxChar) );
         LPDEVNAMES lpDev = (LPDEVNAMES)GlobalLock(hDev);
         lpDev->wDriverOffset = sizeof(WORD) * 4 / sizeof(wxChar);
         wxStrcpy((wxChar*)lpDev + lpDev->wDriverOffset, driverName);
 
         lpDev->wDeviceOffset = (WORD)( lpDev->wDriverOffset +
-                                       driverName.Length() + 1 );
+                                       driverName.length() + 1 );
         wxStrcpy((wxChar*)lpDev + lpDev->wDeviceOffset, printerName);
 
         lpDev->wOutputOffset = (WORD)( lpDev->wDeviceOffset +
-                                       printerName.Length() + 1 );
+                                       printerName.length() + 1 );
         wxStrcpy((wxChar*)lpDev + lpDev->wOutputOffset, portName);
 
         lpDev->wDefault = 0;
@@ -141,7 +136,7 @@ wxWindowsPrintNativeData::~wxWindowsPrintNativeData()
         GlobalFree(hDevNames);
 }
 
-bool wxWindowsPrintNativeData::Ok() const
+bool wxWindowsPrintNativeData::IsOk() const
 {
     return (m_devMode != NULL) ;
 }
@@ -176,12 +171,42 @@ bool wxWindowsPrintNativeData::TransferTo( wxPrintData &data )
         if (devMode->dmFields & DM_COPIES)
             data.SetNoCopies( devMode->dmCopies );
 
-        if (devMode->dmFields & DM_DEFAULTSOURCE)
-            data.SetBin( (wxPrintBin)devMode->dmDefaultSource );
-
+        //// Bin
+        if (devMode->dmFields & DM_DEFAULTSOURCE) {
+            switch (devMode->dmDefaultSource) {
+                case DMBIN_ONLYONE        : data.SetBin(wxPRINTBIN_ONLYONE       ); break;
+                case DMBIN_LOWER          : data.SetBin(wxPRINTBIN_LOWER         ); break;
+                case DMBIN_MIDDLE         : data.SetBin(wxPRINTBIN_MIDDLE        ); break;
+                case DMBIN_MANUAL         : data.SetBin(wxPRINTBIN_MANUAL        ); break;
+                case DMBIN_ENVELOPE       : data.SetBin(wxPRINTBIN_ENVELOPE      ); break;
+                case DMBIN_ENVMANUAL      : data.SetBin(wxPRINTBIN_ENVMANUAL     ); break;
+                case DMBIN_AUTO           : data.SetBin(wxPRINTBIN_AUTO          ); break;
+                case DMBIN_TRACTOR        : data.SetBin(wxPRINTBIN_TRACTOR       ); break;
+                case DMBIN_SMALLFMT       : data.SetBin(wxPRINTBIN_SMALLFMT      ); break;
+                case DMBIN_LARGEFMT       : data.SetBin(wxPRINTBIN_LARGEFMT      ); break;
+                case DMBIN_LARGECAPACITY  : data.SetBin(wxPRINTBIN_LARGECAPACITY ); break;
+                case DMBIN_CASSETTE       : data.SetBin(wxPRINTBIN_CASSETTE      ); break;
+                case DMBIN_FORMSOURCE     : data.SetBin(wxPRINTBIN_FORMSOURCE    ); break;
+                default:
+                    if (devMode->dmDefaultSource>=DMBIN_USER) {
+                        data.SetBin((wxPrintBin)((devMode->dmDefaultSource)-DMBIN_USER+(int)wxPRINTBIN_USER));
+                    } else {
+                        data.SetBin(wxPRINTBIN_DEFAULT);
+                    }
+                    break;
+            }
+        } else {
+            data.SetBin(wxPRINTBIN_DEFAULT);
+        }
+        if (devMode->dmFields & DM_MEDIATYPE)
+        {
+            wxASSERT(devMode->dmMediaType != wxPRINTMEDIA_DEFAULT);
+            data.SetMedia(devMode->dmMediaType);
+        }
         //// Printer name
         if (devMode->dmDeviceName[0] != 0)
-            data.SetPrinterName( devMode->dmDeviceName );
+            // This syntax fixes a crash when using VS 7.1
+            data.SetPrinterName( wxString(devMode->dmDeviceName, CCHDEVICENAME) );
 
         //// Colour
         if (devMode->dmFields & DM_COLOR)
@@ -228,22 +253,24 @@ bool wxWindowsPrintNativeData::TransferTo( wxPrintData &data )
             }
         }
 
-        if (!foundPaperSize && (devMode->dmFields & DM_PAPERWIDTH) && (devMode->dmFields & DM_PAPERLENGTH))
-        {
-            // DEVMODE is in tenths of a milimeter
-            data.SetPaperSize( wxSize(devMode->dmPaperWidth / 10, devMode->dmPaperLength / 10) );
-            data.SetPaperId( wxPAPER_NONE );
-            m_customWindowsPaperId = devMode->dmPaperSize;
-        }
-        else
-        {
-            // Often will reach this for non-standard paper sizes (sizes which
-            // wouldn't be in wxWidget's paper database). Setting
-            // m_customWindowsPaperId to devMode->dmPaperSize should be enough
-            // to get this paper size working.
-            data.SetPaperSize( wxSize(0,0) );
-            data.SetPaperId( wxPAPER_NONE );
-            m_customWindowsPaperId = devMode->dmPaperSize;
+        if (!foundPaperSize) {
+            if ((devMode->dmFields & DM_PAPERWIDTH) && (devMode->dmFields & DM_PAPERLENGTH))
+            {
+                // DEVMODE is in tenths of a millimeter
+                data.SetPaperSize( wxSize(devMode->dmPaperWidth / 10, devMode->dmPaperLength / 10) );
+                data.SetPaperId( wxPAPER_NONE );
+                m_customWindowsPaperId = devMode->dmPaperSize;
+            }
+            else
+            {
+                // Often will reach this for non-standard paper sizes (sizes which
+                // wouldn't be in wxWidget's paper database). Setting
+                // m_customWindowsPaperId to devMode->dmPaperSize should be enough
+                // to get this paper size working.
+                data.SetPaperSize( wxSize(0,0) );
+                data.SetPaperId( wxPAPER_NONE );
+                m_customWindowsPaperId = devMode->dmPaperSize;
+            }
         }
 
         //// Duplex
@@ -518,13 +545,17 @@ bool wxWindowsPrintNativeData::TransferFrom( const wxPrintData &data )
                 case wxPRINTBIN_FORMSOURCE:     devMode->dmDefaultSource = DMBIN_FORMSOURCE;    break;
 
                 default:
-                    devMode->dmDefaultSource = (short)(DMBIN_USER + data.GetBin() - wxPRINTBIN_USER);
+                    devMode->dmDefaultSource = (short)(DMBIN_USER + data.GetBin() - wxPRINTBIN_USER); // 256 + data.GetBin() - 14 = 242 + data.GetBin()
                     break;
             }
 
             devMode->dmFields |= DM_DEFAULTSOURCE;
         }
-
+        if (data.GetMedia() != wxPRINTMEDIA_DEFAULT)
+        {
+            devMode->dmMediaType = data.GetMedia();
+            devMode->dmFields |= DM_MEDIATYPE;
+        }
         GlobalUnlock(hDevMode);
     }
 
@@ -603,7 +634,7 @@ int wxWindowsPrintDialog::ShowModal()
 
     pd->hwndOwner = 0;
 
-    if ( ret != false && (pd->hDC) )
+    if ( ret && (pd->hDC) )
     {
         wxPrinterDC *pdc = new wxPrinterDC( (WXHDC) pd->hDC );
         m_printerDC = pdc;
@@ -624,7 +655,7 @@ wxDC *wxWindowsPrintDialog::GetPrintDC()
         return m_printerDC;
     }
     else
-        return (wxDC*) NULL;
+        return (wxPrinterDC*) NULL;
 }
 
 bool wxWindowsPrintDialog::ConvertToNative( wxPrintDialogData &data )