Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1002)

Side by Side Diff: printing/printing_context.h

Issue 3610013: Printing: Convert PrintingContext into an interface implemented by the separate (Closed)
Patch Set: Comment cleanup only. Created 10 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « printing/printing.gyp ('k') | printing/printing_context.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef PRINTING_PRINTING_CONTEXT_H_ 5 #ifndef PRINTING_PRINTING_CONTEXT_H_
6 #define PRINTING_PRINTING_CONTEXT_H_ 6 #define PRINTING_PRINTING_CONTEXT_H_
7 7
8 #include "build/build_config.h"
9
10 #if defined(OS_WIN)
11 #include <ocidl.h>
12 #include <commdlg.h>
13 #endif
14
15 #include <string> 8 #include <string>
16 9
17 #include "base/basictypes.h" 10 #include "base/basictypes.h"
18 #include "base/callback.h" 11 #include "base/callback.h"
19 #if !(defined(OS_WIN) || defined(OS_MACOSX))
20 // TODO(port) Remove after implementing PrintingContext::context()
21 #include "base/logging.h"
22 #endif
23 #include "base/scoped_ptr.h" 12 #include "base/scoped_ptr.h"
24 #include "base/string16.h" 13 #include "base/string16.h"
25 #include "gfx/native_widget_types.h" 14 #include "gfx/native_widget_types.h"
26 #include "printing/print_settings.h" 15 #include "printing/print_settings.h"
27 16
28 #if defined(OS_MACOSX)
29 #include "base/scoped_cftyperef.h"
30 #ifdef __OBJC__
31 @class NSPrintInfo;
32 #else
33 class NSPrintInfo;
34 #endif // __OBJC__
35 #endif // OS_MACOSX
36
37 namespace printing { 17 namespace printing {
38 18
39 // Describe the user selected printing context for Windows. This includes the 19 // An abstraction of a printer context, implemented by objects that describe the
40 // OS-dependent UI to ask the user about the print settings. This class directly 20 // user selected printing context. This includes the OS-dependent UI to ask the
41 // talk to the printer and manages the document and pages breaks. 21 // user about the print settings. Concrete implementations directly talk to the
22 // printer and manage the document and page breaks.
42 class PrintingContext { 23 class PrintingContext {
43 public: 24 public:
44 // Tri-state result for user behavior-dependent functions. 25 // Tri-state result for user behavior-dependent functions.
45 enum Result { 26 enum Result {
46 OK, 27 OK,
47 CANCEL, 28 CANCEL,
48 FAILED, 29 FAILED,
49 }; 30 };
50 31
51 PrintingContext(); 32 virtual ~PrintingContext();
52 ~PrintingContext();
53 33
54 // Callback of AskUserForSettings, used to notify the PrintJobWorker when 34 // Callback of AskUserForSettings, used to notify the PrintJobWorker when
55 // print settings are available. 35 // print settings are available.
56 typedef Callback1<Result>::Type PrintSettingsCallback; 36 typedef Callback1<Result>::Type PrintSettingsCallback;
57 37
58 // Asks the user what printer and format should be used to print. Updates the 38 // Asks the user what printer and format should be used to print. Updates the
59 // context with the select device settings. The result of the call is returned 39 // context with the select device settings. The result of the call is returned
60 // in the callback. This is necessary for Linux, which only has an 40 // in the callback. This is necessary for Linux, which only has an
61 // asynchronous printing API. 41 // asynchronous printing API.
62 void AskUserForSettings(gfx::NativeView parent_view, 42 virtual void AskUserForSettings(gfx::NativeView parent_view,
63 int max_pages, 43 int max_pages,
64 bool has_selection, 44 bool has_selection,
65 PrintSettingsCallback* callback); 45 PrintSettingsCallback* callback) = 0;
66
67 #if defined(OS_WIN) && defined(UNIT_TEST)
68 // Sets a fake PrintDlgEx function pointer in tests.
69 void SetPrintDialog(HRESULT (__stdcall *print_dialog_func)(LPPRINTDLGEX)) {
70 print_dialog_func_ = print_dialog_func;
71 }
72 #endif
73
74 #if defined(OS_WIN)
75 // Allocates the HDC for a specific DEVMODE.
76 static bool AllocateContext(const std::wstring& printer_name,
77 const DEVMODE* dev_mode,
78 gfx::NativeDrawingContext* context);
79
80 // Retrieves the content of a GetPrinter call.
81 static void GetPrinterHelper(HANDLE printer, int level,
82 scoped_array<uint8>* buffer);
83 #endif
84 46
85 // Selects the user's default printer and format. Updates the context with the 47 // Selects the user's default printer and format. Updates the context with the
86 // default device settings. 48 // default device settings.
87 Result UseDefaultSettings(); 49 virtual Result UseDefaultSettings() = 0;
88
89 void SetUseOverlays(bool use_overlays) {
90 settings_.use_overlays = use_overlays;
91 }
92 50
93 // Initializes with predefined settings. 51 // Initializes with predefined settings.
94 Result InitWithSettings(const PrintSettings& settings); 52 virtual Result InitWithSettings(const PrintSettings& settings) = 0;
95
96 // Reinitializes the settings to uninitialized for object reuse.
97 void ResetSettings();
98 53
99 // Does platform specific setup of the printer before the printing. Signal the 54 // Does platform specific setup of the printer before the printing. Signal the
100 // printer that a document is about to be spooled. 55 // printer that a document is about to be spooled.
101 // Warning: This function enters a message loop. That may cause side effects 56 // Warning: This function enters a message loop. That may cause side effects
102 // like IPC message processing! Some printers have side-effects on this call 57 // like IPC message processing! Some printers have side-effects on this call
103 // like virtual printers that ask the user for the path of the saved document; 58 // like virtual printers that ask the user for the path of the saved document;
104 // for example a PDF printer. 59 // for example a PDF printer.
105 Result NewDocument(const string16& document_name); 60 virtual Result NewDocument(const string16& document_name) = 0;
106 61
107 // Starts a new page. 62 // Starts a new page.
108 Result NewPage(); 63 virtual Result NewPage() = 0;
109 64
110 // Closes the printed page. 65 // Closes the printed page.
111 Result PageDone(); 66 virtual Result PageDone() = 0;
112 67
113 // Closes the printing job. After this call the object is ready to start a new 68 // Closes the printing job. After this call the object is ready to start a new
114 // document. 69 // document.
115 Result DocumentDone(); 70 virtual Result DocumentDone() = 0;
116 71
117 // Cancels printing. Can be used in a multi-threaded context. Takes effect 72 // Cancels printing. Can be used in a multi-threaded context. Takes effect
118 // immediately. 73 // immediately.
119 void Cancel(); 74 virtual void Cancel() = 0;
120 75
121 // Dismiss the Print... dialog box if shown. 76 // Dismiss the Print... dialog box if shown.
122 void DismissDialog(); 77 virtual void DismissDialog() = 0;
123 78
124 gfx::NativeDrawingContext context() { 79 // Releases the native printing context.
125 #if defined(OS_WIN) || defined(OS_MACOSX) 80 virtual void ReleaseContext() = 0;
126 return context_; 81
127 #else 82 // Returns the native context used to print.
128 NOTIMPLEMENTED(); 83 virtual gfx::NativeDrawingContext context() const = 0;
129 return NULL; 84
130 #endif 85 // Creates an instance of this object. Implementers of this interface should
86 // implement this method to create an object of their implementation. The
87 // caller owns the returned object.
88 static PrintingContext* Create();
89
90 void set_use_overlays(bool use_overlays) {
91 settings_.use_overlays = use_overlays;
131 } 92 }
132 93
133 const PrintSettings& settings() const { 94 const PrintSettings& settings() const {
134 return settings_; 95 return settings_;
135 } 96 }
136 97
137 private: 98 protected:
138 // Class that manages the PrintDlgEx() callbacks. This is meant to be a 99 PrintingContext();
139 // temporary object used during the Print... dialog display. 100
140 class CallbackHandler; 101 // Reinitializes the settings for object reuse.
102 void ResetSettings();
141 103
142 // Does bookkeeping when an error occurs. 104 // Does bookkeeping when an error occurs.
143 PrintingContext::Result OnError(); 105 PrintingContext::Result OnError();
144 106
145 #if defined(OS_WIN)
146 // Used in response to the user canceling the printing.
147 static BOOL CALLBACK AbortProc(HDC hdc, int nCode);
148
149 // Reads the settings from the selected device context. Updates settings_ and
150 // its margins.
151 bool InitializeSettings(const DEVMODE& dev_mode,
152 const std::wstring& new_device_name,
153 const PRINTPAGERANGE* ranges,
154 int number_ranges,
155 bool selection_only);
156
157 // Retrieves the printer's default low-level settings. On Windows, context_ is
158 // allocated with this call.
159 bool GetPrinterSettings(HANDLE printer,
160 const std::wstring& device_name);
161
162 // Parses the result of a PRINTDLGEX result.
163 Result ParseDialogResultEx(const PRINTDLGEX& dialog_options);
164 Result ParseDialogResult(const PRINTDLG& dialog_options);
165 #elif defined(OS_MACOSX)
166 // Read the settings from the given NSPrintInfo (and cache it for later use).
167 void ParsePrintInfo(NSPrintInfo* print_info);
168 #endif
169
170 // On Windows, the selected printer context.
171 // On Mac, the current page's context; only valid between NewPage and PageDone
172 // call pairs.
173 gfx::NativeDrawingContext context_;
174
175 #if defined(OS_MACOSX)
176 // The native print info object.
177 NSPrintInfo* print_info_;
178 #endif
179
180 // Complete print context settings. 107 // Complete print context settings.
181 PrintSettings settings_; 108 PrintSettings settings_;
182 109
183 #if defined(OS_WIN)
184 // The dialog box for the time it is shown.
185 volatile HWND dialog_box_;
186
187 // Function pointer that defaults to PrintDlgEx. It can be changed using
188 // SetPrintDialog() in tests.
189 HRESULT (__stdcall *print_dialog_func_)(LPPRINTDLGEX);
190 #endif
191
192 // The dialog box has been dismissed. 110 // The dialog box has been dismissed.
193 volatile bool dialog_box_dismissed_; 111 volatile bool dialog_box_dismissed_;
194 112
195 // Is a print job being done. 113 // Is a print job being done.
196 volatile bool in_print_job_; 114 volatile bool in_print_job_;
197 115
198 // Did the user cancel the print job. 116 // Did the user cancel the print job.
199 volatile bool abort_printing_; 117 volatile bool abort_printing_;
200 118
201 DISALLOW_COPY_AND_ASSIGN(PrintingContext); 119 DISALLOW_COPY_AND_ASSIGN(PrintingContext);
202 }; 120 };
203 121
204 } // namespace printing 122 } // namespace printing
205 123
206 #endif // PRINTING_PRINTING_CONTEXT_H_ 124 #endif // PRINTING_PRINTING_CONTEXT_H_
OLDNEW
« no previous file with comments | « printing/printing.gyp ('k') | printing/printing_context.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698