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

Side by Side Diff: printing/printing_context_mac.mm

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_context_mac.h ('k') | printing/printing_context_win.h » ('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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 #include "printing/printing_context.h" 5 #include "printing/printing_context_mac.h"
6 6
7 #import <ApplicationServices/ApplicationServices.h> 7 #import <ApplicationServices/ApplicationServices.h>
8 #import <AppKit/AppKit.h> 8 #import <AppKit/AppKit.h>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/scoped_cftyperef.h"
11 #include "base/sys_string_conversions.h" 12 #include "base/sys_string_conversions.h"
12 13
13 namespace printing { 14 namespace printing {
14 15
15 PrintingContext::PrintingContext() 16 // static
16 : context_(NULL), 17 PrintingContext* PrintingContext::Create() {
17 print_info_(nil), 18 return static_cast<PrintingContext*>(new PrintingContextMac);
18 dialog_box_dismissed_(false),
19 in_print_job_(false),
20 abort_printing_(false) {
21 } 19 }
22 20
23 PrintingContext::~PrintingContext() { 21 PrintingContextMac::PrintingContextMac()
24 ResetSettings(); 22 : PrintingContext(),
23 print_info_(NULL),
24 context_(NULL) {
25 } 25 }
26 26
27 PrintingContextMac::~PrintingContextMac() {
28 ReleaseContext();
29 }
27 30
28 void PrintingContext::AskUserForSettings(gfx::NativeView parent_view, 31 void PrintingContextMac::AskUserForSettings(gfx::NativeView parent_view,
29 int max_pages, 32 int max_pages,
30 bool has_selection, 33 bool has_selection,
31 PrintSettingsCallback* callback) { 34 PrintSettingsCallback* callback) {
32 DCHECK([NSThread isMainThread]); 35 DCHECK([NSThread isMainThread]);
33 36
34 // We deliberately don't feed max_pages into the dialog, because setting 37 // We deliberately don't feed max_pages into the dialog, because setting
35 // NSPrintLastPage makes the print dialog pre-select the option to only print 38 // NSPrintLastPage makes the print dialog pre-select the option to only print
36 // a range. 39 // a range.
37 40
38 // TODO(stuartmorgan): implement 'print selection only' (probably requires 41 // TODO(stuartmorgan): implement 'print selection only' (probably requires
39 // adding a new custom view to the panel on 10.5; 10.6 has 42 // adding a new custom view to the panel on 10.5; 10.6 has
40 // NSPrintPanelShowsPrintSelection). 43 // NSPrintPanelShowsPrintSelection).
41 NSPrintPanel* panel = [NSPrintPanel printPanel]; 44 NSPrintPanel* panel = [NSPrintPanel printPanel];
(...skipping 19 matching lines...) Expand all
61 // Will require restructuring the PrintingContext API to use a callback. 64 // Will require restructuring the PrintingContext API to use a callback.
62 NSInteger selection = [panel runModalWithPrintInfo:printInfo]; 65 NSInteger selection = [panel runModalWithPrintInfo:printInfo];
63 if (selection == NSOKButton) { 66 if (selection == NSOKButton) {
64 ParsePrintInfo([panel printInfo]); 67 ParsePrintInfo([panel printInfo]);
65 callback->Run(OK); 68 callback->Run(OK);
66 } else { 69 } else {
67 callback->Run(CANCEL); 70 callback->Run(CANCEL);
68 } 71 }
69 } 72 }
70 73
71 PrintingContext::Result PrintingContext::UseDefaultSettings() { 74 PrintingContext::Result PrintingContextMac::UseDefaultSettings() {
72 DCHECK(!in_print_job_); 75 DCHECK(!in_print_job_);
73 76
74 ParsePrintInfo([NSPrintInfo sharedPrintInfo]); 77 ParsePrintInfo([NSPrintInfo sharedPrintInfo]);
75 78
76 return OK; 79 return OK;
77 } 80 }
78 81
79 void PrintingContext::ParsePrintInfo(NSPrintInfo* print_info) { 82 void PrintingContextMac::ParsePrintInfo(NSPrintInfo* print_info) {
80 ResetSettings(); 83 ResetSettings();
81 print_info_ = [print_info retain]; 84 print_info_ = [print_info retain];
82 PageRanges page_ranges; 85 PageRanges page_ranges;
83 NSDictionary* print_info_dict = [print_info_ dictionary]; 86 NSDictionary* print_info_dict = [print_info_ dictionary];
84 if (![[print_info_dict objectForKey:NSPrintAllPages] boolValue]) { 87 if (![[print_info_dict objectForKey:NSPrintAllPages] boolValue]) {
85 PageRange range; 88 PageRange range;
86 range.from = [[print_info_dict objectForKey:NSPrintFirstPage] intValue] - 1; 89 range.from = [[print_info_dict objectForKey:NSPrintFirstPage] intValue] - 1;
87 range.to = [[print_info_dict objectForKey:NSPrintLastPage] intValue] - 1; 90 range.to = [[print_info_dict objectForKey:NSPrintLastPage] intValue] - 1;
88 page_ranges.push_back(range); 91 page_ranges.push_back(range);
89 } 92 }
90 PMPrintSession print_session = 93 PMPrintSession print_session =
91 static_cast<PMPrintSession>([print_info_ PMPrintSession]); 94 static_cast<PMPrintSession>([print_info_ PMPrintSession]);
92 PMPageFormat page_format = 95 PMPageFormat page_format =
93 static_cast<PMPageFormat>([print_info_ PMPageFormat]); 96 static_cast<PMPageFormat>([print_info_ PMPageFormat]);
94 PMPrinter printer; 97 PMPrinter printer;
95 PMSessionGetCurrentPrinter(print_session, &printer); 98 PMSessionGetCurrentPrinter(print_session, &printer);
96 99
97 settings_.Init(printer, page_format, page_ranges, false); 100 settings_.Init(printer, page_format, page_ranges, false);
98 } 101 }
99 102
100 PrintingContext::Result PrintingContext::InitWithSettings( 103 PrintingContext::Result PrintingContextMac::InitWithSettings(
101 const PrintSettings& settings) { 104 const PrintSettings& settings) {
102 DCHECK(!in_print_job_); 105 DCHECK(!in_print_job_);
103 settings_ = settings; 106 settings_ = settings;
104 107
105 NOTIMPLEMENTED(); 108 NOTIMPLEMENTED();
106 109
107 return FAILED; 110 return FAILED;
108 } 111 }
109 112
110 void PrintingContext::ResetSettings() { 113 PrintingContext::Result PrintingContextMac::NewDocument(
111 [print_info_ autorelease];
112 print_info_ = nil;
113 settings_.Clear();
114 dialog_box_dismissed_ = false;
115 abort_printing_ = false;
116 in_print_job_ = false;
117 context_ = NULL;
118 }
119
120 PrintingContext::Result PrintingContext::NewDocument(
121 const string16& document_name) { 114 const string16& document_name) {
122 DCHECK(!in_print_job_); 115 DCHECK(!in_print_job_);
123 116
124 in_print_job_ = true; 117 in_print_job_ = true;
125 118
126 PMPrintSession print_session = 119 PMPrintSession print_session =
127 static_cast<PMPrintSession>([print_info_ PMPrintSession]); 120 static_cast<PMPrintSession>([print_info_ PMPrintSession]);
128 PMPrintSettings print_settings = 121 PMPrintSettings print_settings =
129 static_cast<PMPrintSettings>([print_info_ PMPrintSettings]); 122 static_cast<PMPrintSettings>([print_info_ PMPrintSettings]);
130 PMPageFormat page_format = 123 PMPageFormat page_format =
131 static_cast<PMPageFormat>([print_info_ PMPageFormat]); 124 static_cast<PMPageFormat>([print_info_ PMPageFormat]);
132 125
133 scoped_cftyperef<CFStringRef> job_title( 126 scoped_cftyperef<CFStringRef> job_title(
134 base::SysUTF16ToCFStringRef(document_name)); 127 base::SysUTF16ToCFStringRef(document_name));
135 PMPrintSettingsSetJobName(print_settings, job_title.get()); 128 PMPrintSettingsSetJobName(print_settings, job_title.get());
136 129
137 OSStatus status = PMSessionBeginCGDocumentNoDialog(print_session, 130 OSStatus status = PMSessionBeginCGDocumentNoDialog(print_session,
138 print_settings, 131 print_settings,
139 page_format); 132 page_format);
140 if (status != noErr) 133 if (status != noErr)
141 return OnError(); 134 return OnError();
142 135
143 return OK; 136 return OK;
144 } 137 }
145 138
146 PrintingContext::Result PrintingContext::NewPage() { 139 PrintingContext::Result PrintingContextMac::NewPage() {
147 if (abort_printing_) 140 if (abort_printing_)
148 return CANCEL; 141 return CANCEL;
149 DCHECK(in_print_job_); 142 DCHECK(in_print_job_);
150 DCHECK(!context_); 143 DCHECK(!context_);
151 144
152 PMPrintSession print_session = 145 PMPrintSession print_session =
153 static_cast<PMPrintSession>([print_info_ PMPrintSession]); 146 static_cast<PMPrintSession>([print_info_ PMPrintSession]);
154 PMPageFormat page_format = 147 PMPageFormat page_format =
155 static_cast<PMPageFormat>([print_info_ PMPageFormat]); 148 static_cast<PMPageFormat>([print_info_ PMPageFormat]);
156 OSStatus status; 149 OSStatus status;
157 status = PMSessionBeginPageNoDialog(print_session, page_format, NULL); 150 status = PMSessionBeginPageNoDialog(print_session, page_format, NULL);
158 if (status != noErr) 151 if (status != noErr)
159 return OnError(); 152 return OnError();
160 status = PMSessionGetCGGraphicsContext(print_session, &context_); 153 status = PMSessionGetCGGraphicsContext(print_session, &context_);
161 if (status != noErr) 154 if (status != noErr)
162 return OnError(); 155 return OnError();
163 156
164 return OK; 157 return OK;
165 } 158 }
166 159
167 PrintingContext::Result PrintingContext::PageDone() { 160 PrintingContext::Result PrintingContextMac::PageDone() {
168 if (abort_printing_) 161 if (abort_printing_)
169 return CANCEL; 162 return CANCEL;
170 DCHECK(in_print_job_); 163 DCHECK(in_print_job_);
171 DCHECK(context_); 164 DCHECK(context_);
172 165
173 PMPrintSession print_session = 166 PMPrintSession print_session =
174 static_cast<PMPrintSession>([print_info_ PMPrintSession]); 167 static_cast<PMPrintSession>([print_info_ PMPrintSession]);
175 OSStatus status = PMSessionEndPageNoDialog(print_session); 168 OSStatus status = PMSessionEndPageNoDialog(print_session);
176 if (status != noErr) 169 if (status != noErr)
177 OnError(); 170 OnError();
178 context_ = NULL; 171 context_ = NULL;
179 172
180 return OK; 173 return OK;
181 } 174 }
182 175
183 PrintingContext::Result PrintingContext::DocumentDone() { 176 PrintingContext::Result PrintingContextMac::DocumentDone() {
184 if (abort_printing_) 177 if (abort_printing_)
185 return CANCEL; 178 return CANCEL;
186 DCHECK(in_print_job_); 179 DCHECK(in_print_job_);
187 180
188 PMPrintSession print_session = 181 PMPrintSession print_session =
189 static_cast<PMPrintSession>([print_info_ PMPrintSession]); 182 static_cast<PMPrintSession>([print_info_ PMPrintSession]);
190 OSStatus status = PMSessionEndDocumentNoDialog(print_session); 183 OSStatus status = PMSessionEndDocumentNoDialog(print_session);
191 if (status != noErr) 184 if (status != noErr)
192 OnError(); 185 OnError();
193 186
194 ResetSettings(); 187 ResetSettings();
195 return OK; 188 return OK;
196 } 189 }
197 190
198 void PrintingContext::Cancel() { 191 void PrintingContextMac::Cancel() {
199 abort_printing_ = true; 192 abort_printing_ = true;
200 in_print_job_ = false; 193 in_print_job_ = false;
201 context_ = NULL; 194 context_ = NULL;
202 195
203 PMPrintSession print_session = 196 PMPrintSession print_session =
204 static_cast<PMPrintSession>([print_info_ PMPrintSession]); 197 static_cast<PMPrintSession>([print_info_ PMPrintSession]);
205 PMSessionEndPageNoDialog(print_session); 198 PMSessionEndPageNoDialog(print_session);
206 } 199 }
207 200
208 void PrintingContext::DismissDialog() { 201 void PrintingContextMac::DismissDialog() {
209 NOTIMPLEMENTED(); 202 NOTIMPLEMENTED();
210 } 203 }
211 204
212 PrintingContext::Result PrintingContext::OnError() { 205 void PrintingContextMac::ReleaseContext() {
213 ResetSettings(); 206 if (print_info_) {
214 return abort_printing_ ? CANCEL : FAILED; 207 [print_info_ autorelease];
208 print_info_ = nil;
209 context_ = NULL;
210 }
211 }
212
213 gfx::NativeDrawingContext PrintingContextMac::context() const {
214 return context_;
215 } 215 }
216 216
217 } // namespace printing 217 } // namespace printing
OLDNEW
« no previous file with comments | « printing/printing_context_mac.h ('k') | printing/printing_context_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698