| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |  | 
| 2 // Use of this source code is governed by a BSD-style license that can be |  | 
| 3 // found in the LICENSE file. |  | 
| 4 |  | 
| 5 #ifndef CHROME_BROWSER_PRINTING_WIN_PRINTING_CONTEXT_H__ |  | 
| 6 #define CHROME_BROWSER_PRINTING_WIN_PRINTING_CONTEXT_H__ |  | 
| 7 |  | 
| 8 #include <ocidl.h> |  | 
| 9 #include <commdlg.h> |  | 
| 10 #include <string> |  | 
| 11 |  | 
| 12 #include "base/basictypes.h" |  | 
| 13 #include "chrome/browser/printing/print_settings.h" |  | 
| 14 |  | 
| 15 namespace printing { |  | 
| 16 |  | 
| 17 // Describe the user selected printing context for Windows. This includes the |  | 
| 18 // OS-dependent UI to ask the user about the print settings. This class directly |  | 
| 19 // talk to the printer and manages the document and pages breaks. |  | 
| 20 class PrintingContext { |  | 
| 21  public: |  | 
| 22   // Tri-state result for user behavior-dependent functions. |  | 
| 23   enum Result { |  | 
| 24     OK, |  | 
| 25     CANCEL, |  | 
| 26     FAILED, |  | 
| 27   }; |  | 
| 28 |  | 
| 29   PrintingContext(); |  | 
| 30   ~PrintingContext(); |  | 
| 31 |  | 
| 32   // Asks the user what printer and format should be used to print. Updates the |  | 
| 33   // context with the select device settings. |  | 
| 34   Result AskUserForSettings(HWND window, int max_pages, bool has_selection); |  | 
| 35 |  | 
| 36   // Selects the user's default printer and format. Updates the context with the |  | 
| 37   // default device settings. |  | 
| 38   Result UseDefaultSettings(); |  | 
| 39 |  | 
| 40   // Initializes with predefined settings. |  | 
| 41   Result InitWithSettings(const PrintSettings& settings); |  | 
| 42 |  | 
| 43   // Reinitializes the settings to uninitialized for object reuse. |  | 
| 44   void ResetSettings(); |  | 
| 45 |  | 
| 46   // Does platform specific setup of the printer before the printing. Signal the |  | 
| 47   // printer that a document is about to be spooled. |  | 
| 48   // Warning: This function enters a message loop. That may cause side effects |  | 
| 49   // like IPC message processing! Some printers have side-effects on this call |  | 
| 50   // like virtual printers that ask the user for the path of the saved document; |  | 
| 51   // for example a PDF printer. |  | 
| 52   Result NewDocument(const std::wstring& document_name); |  | 
| 53 |  | 
| 54   // Starts a new page. |  | 
| 55   Result NewPage(); |  | 
| 56 |  | 
| 57   // Closes the printed page. |  | 
| 58   Result PageDone(); |  | 
| 59 |  | 
| 60   // Closes the printing job. After this call the object is ready to start a new |  | 
| 61   // document. |  | 
| 62   Result DocumentDone(); |  | 
| 63 |  | 
| 64   // Cancels printing. Can be used in a multithreaded context. Takes effect |  | 
| 65   // immediately. |  | 
| 66   void Cancel(); |  | 
| 67 |  | 
| 68   // Dismiss the Print... dialog box if shown. |  | 
| 69   void DismissDialog(); |  | 
| 70 |  | 
| 71   HDC context() { |  | 
| 72     return hdc_; |  | 
| 73   } |  | 
| 74 |  | 
| 75   const PrintSettings& settings() const { |  | 
| 76     return settings_; |  | 
| 77   } |  | 
| 78 |  | 
| 79  private: |  | 
| 80   // Class that manages the PrintDlgEx() callbacks. This is meant to be a |  | 
| 81   // temporary object used during the Print... dialog display. |  | 
| 82   class CallbackHandler; |  | 
| 83 |  | 
| 84   // Does bookkeeping when an error occurs. |  | 
| 85   PrintingContext::Result OnError(); |  | 
| 86 |  | 
| 87   // Used in response to the user canceling the printing. |  | 
| 88   static BOOL CALLBACK AbortProc(HDC hdc, int nCode); |  | 
| 89 |  | 
| 90   // Reads the settings from the selected device context. Updates settings_ and |  | 
| 91   // its margins. |  | 
| 92   bool InitializeSettings(const DEVMODE& dev_mode, |  | 
| 93                           const std::wstring& new_device_name, |  | 
| 94                           const PRINTPAGERANGE* ranges, |  | 
| 95                           int number_ranges, |  | 
| 96                           bool selection_only); |  | 
| 97 |  | 
| 98   // Retrieves the printer's default low-level settings. hdc_ is allocated with |  | 
| 99   // this call. |  | 
| 100   bool GetPrinterSettings(HANDLE printer, |  | 
| 101                           const std::wstring& device_name); |  | 
| 102 |  | 
| 103   // Allocates the HDC for a specific DEVMODE. |  | 
| 104   bool AllocateContext(const std::wstring& printer_name, |  | 
| 105                        const DEVMODE* dev_mode); |  | 
| 106 |  | 
| 107   // Parses the result of a PRINTDLGEX result. |  | 
| 108   Result ParseDialogResultEx(const PRINTDLGEX& dialog_options); |  | 
| 109   Result ParseDialogResult(const PRINTDLG& dialog_options); |  | 
| 110 |  | 
| 111   // The selected printer context. |  | 
| 112   HDC hdc_; |  | 
| 113 |  | 
| 114   // Complete print context settings. |  | 
| 115   PrintSettings settings_; |  | 
| 116 |  | 
| 117 #ifndef NDEBUG |  | 
| 118   // Current page number in the print job. |  | 
| 119   int page_number_; |  | 
| 120 #endif |  | 
| 121 |  | 
| 122   // The dialog box for the time it is shown. |  | 
| 123   volatile HWND dialog_box_; |  | 
| 124 |  | 
| 125   // The dialog box has been dismissed. |  | 
| 126   volatile bool dialog_box_dismissed_; |  | 
| 127 |  | 
| 128   // Is a print job being done. |  | 
| 129   volatile bool in_print_job_; |  | 
| 130 |  | 
| 131   // Did the user cancel the print job. |  | 
| 132   volatile bool abort_printing_; |  | 
| 133 |  | 
| 134   DISALLOW_EVIL_CONSTRUCTORS(PrintingContext); |  | 
| 135 }; |  | 
| 136 |  | 
| 137 }  // namespace printing |  | 
| 138 |  | 
| 139 #endif  // CHROME_BROWSER_PRINTING_WIN_PRINTING_CONTEXT_H__ |  | 
| OLD | NEW | 
|---|