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

Side by Side Diff: printing/printing_context_mac.mm

Issue 47823002: De-duplicate job_settings parsing code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Noam's comments Created 7 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « printing/printing_context_mac.h ('k') | printing/printing_context_no_system_dialog.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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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_mac.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 #import <iomanip> 10 #import <iomanip>
11 #import <numeric> 11 #import <numeric>
12 12
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/mac/scoped_cftyperef.h" 14 #include "base/mac/scoped_cftyperef.h"
15 #include "base/mac/scoped_nsautorelease_pool.h" 15 #include "base/mac/scoped_nsautorelease_pool.h"
16 #include "base/mac/scoped_nsexception_enabler.h" 16 #include "base/mac/scoped_nsexception_enabler.h"
17 #include "base/strings/sys_string_conversions.h" 17 #include "base/strings/sys_string_conversions.h"
18 #include "base/strings/utf_string_conversions.h"
18 #include "base/values.h" 19 #include "base/values.h"
19 #include "printing/print_settings_initializer_mac.h" 20 #include "printing/print_settings_initializer_mac.h"
20 21
21 namespace printing { 22 namespace printing {
22 23
23 namespace { 24 namespace {
24 25
25 // Return true if PPD name of paper is equal. 26 // Return true if PPD name of paper is equal.
26 bool IsPaperNameEqual(const PMPaper& paper1, const PMPaper& paper2) { 27 bool IsPaperNameEqual(const PMPaper& paper1, const PMPaper& paper2) {
27 CFStringRef name1 = NULL; 28 CFStringRef name1 = NULL;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 PMPrintSettingsSetJobName(printSettings, (CFStringRef)job_title); 91 PMPrintSettingsSetJobName(printSettings, (CFStringRef)job_title);
91 [printInfo updateFromPMPrintSettings]; 92 [printInfo updateFromPMPrintSettings];
92 } 93 }
93 } 94 }
94 95
95 // TODO(stuartmorgan): We really want a tab sheet here, not a modal window. 96 // TODO(stuartmorgan): We really want a tab sheet here, not a modal window.
96 // Will require restructuring the PrintingContext API to use a callback. 97 // Will require restructuring the PrintingContext API to use a callback.
97 NSInteger selection = [panel runModalWithPrintInfo:printInfo]; 98 NSInteger selection = [panel runModalWithPrintInfo:printInfo];
98 if (selection == NSOKButton) { 99 if (selection == NSOKButton) {
99 print_info_.reset([[panel printInfo] retain]); 100 print_info_.reset([[panel printInfo] retain]);
100 InitPrintSettingsFromPrintInfo(GetPageRangesFromPrintInfo()); 101 settings_.set_ranges(GetPageRangesFromPrintInfo());
102 InitPrintSettingsFromPrintInfo();
101 callback.Run(OK); 103 callback.Run(OK);
102 } else { 104 } else {
103 callback.Run(CANCEL); 105 callback.Run(CANCEL);
104 } 106 }
105 } 107 }
106 108
107 PrintingContext::Result PrintingContextMac::UseDefaultSettings() { 109 PrintingContext::Result PrintingContextMac::UseDefaultSettings() {
108 DCHECK(!in_print_job_); 110 DCHECK(!in_print_job_);
109 111
110 print_info_.reset([[NSPrintInfo sharedPrintInfo] copy]); 112 print_info_.reset([[NSPrintInfo sharedPrintInfo] copy]);
111 InitPrintSettingsFromPrintInfo(GetPageRangesFromPrintInfo()); 113 settings_.set_ranges(GetPageRangesFromPrintInfo());
114 InitPrintSettingsFromPrintInfo();
112 115
113 return OK; 116 return OK;
114 } 117 }
115 118
116 PrintingContext::Result PrintingContextMac::UpdatePrinterSettings( 119 PrintingContext::Result PrintingContextMac::UpdatePrinterSettings(
117 const DictionaryValue& job_settings, const PageRanges& ranges) { 120 bool target_is_pdf,
121 bool external_preview) {
118 DCHECK(!in_print_job_); 122 DCHECK(!in_print_job_);
119 123
120 // NOTE: Reset |print_info_| with a copy of |sharedPrintInfo| so as to start 124 // NOTE: Reset |print_info_| with a copy of |sharedPrintInfo| so as to start
121 // with a clean slate. 125 // with a clean slate.
122 print_info_.reset([[NSPrintInfo sharedPrintInfo] copy]); 126 print_info_.reset([[NSPrintInfo sharedPrintInfo] copy]);
123 127
124 bool collate; 128 if (!target_is_pdf) {
125 int color; 129 if (!SetPrinter(UTF16ToUTF8(settings_.device_name())) ||
126 bool landscape; 130 !SetCopiesInPrintSettings(settings_.copies()) ||
127 bool print_to_pdf; 131 !SetCollateInPrintSettings(settings_.collate()) ||
128 bool is_cloud_dialog; 132 !SetDuplexModeInPrintSettings(settings_.duplex_mode()) ||
129 int copies; 133 !SetOutputColor(settings_.color())) {
130 int duplex_mode; 134 return OnError();
131 std::string device_name; 135 }
136 }
132 137
133 if (!job_settings.GetBoolean(kSettingLandscape, &landscape) || 138 if ((external_preview && !SetPrintPreviewJob()) ||
134 !job_settings.GetBoolean(kSettingCollate, &collate) || 139 !UpdatePageFormatWithPaperInfo() ||
135 !job_settings.GetInteger(kSettingColor, &color) || 140 !SetOrientationIsLandscape(settings_.landscape())) {
136 !job_settings.GetBoolean(kSettingPrintToPDF, &print_to_pdf) ||
137 !job_settings.GetInteger(kSettingDuplexMode, &duplex_mode) ||
138 !job_settings.GetInteger(kSettingCopies, &copies) ||
139 !job_settings.GetString(kSettingDeviceName, &device_name) ||
140 !job_settings.GetBoolean(kSettingCloudPrintDialog, &is_cloud_dialog)) {
141 return OnError(); 141 return OnError();
142 } 142 }
143 143
144 bool print_to_cloud = job_settings.HasKey(kSettingCloudPrintId);
145 bool open_pdf_in_preview = job_settings.HasKey(kSettingOpenPDFInPreview);
146
147 if (!print_to_pdf && !print_to_cloud && !is_cloud_dialog) {
148 if (!SetPrinter(device_name))
149 return OnError();
150
151 if (!SetCopiesInPrintSettings(copies))
152 return OnError();
153
154 if (!SetCollateInPrintSettings(collate))
155 return OnError();
156
157 if (!SetDuplexModeInPrintSettings(
158 static_cast<DuplexMode>(duplex_mode))) {
159 return OnError();
160 }
161
162 if (!SetOutputColor(color))
163 return OnError();
164 }
165 if (open_pdf_in_preview) {
166 if (!SetPrintPreviewJob())
167 return OnError();
168 }
169
170 if (!UpdatePageFormatWithPaperInfo())
171 return OnError();
172
173 if (!SetOrientationIsLandscape(landscape))
174 return OnError();
175
176 [print_info_.get() updateFromPMPrintSettings]; 144 [print_info_.get() updateFromPMPrintSettings];
177 145
178 InitPrintSettingsFromPrintInfo(ranges); 146 InitPrintSettingsFromPrintInfo();
179 return OK; 147 return OK;
180 } 148 }
181 149
182 bool PrintingContextMac::SetPrintPreviewJob() { 150 bool PrintingContextMac::SetPrintPreviewJob() {
183 PMPrintSession print_session = 151 PMPrintSession print_session =
184 static_cast<PMPrintSession>([print_info_.get() PMPrintSession]); 152 static_cast<PMPrintSession>([print_info_.get() PMPrintSession]);
185 PMPrintSettings print_settings = 153 PMPrintSettings print_settings =
186 static_cast<PMPrintSettings>([print_info_.get() PMPrintSettings]); 154 static_cast<PMPrintSettings>([print_info_.get() PMPrintSettings]);
187 return PMSessionSetDestination( 155 return PMSessionSetDestination(
188 print_session, print_settings, kPMDestinationPreview, 156 print_session, print_settings, kPMDestinationPreview,
189 NULL, NULL) == noErr; 157 NULL, NULL) == noErr;
190 } 158 }
191 159
192 void PrintingContextMac::InitPrintSettingsFromPrintInfo( 160 void PrintingContextMac::InitPrintSettingsFromPrintInfo() {
193 const PageRanges& ranges) {
194 PMPrintSession print_session = 161 PMPrintSession print_session =
195 static_cast<PMPrintSession>([print_info_.get() PMPrintSession]); 162 static_cast<PMPrintSession>([print_info_.get() PMPrintSession]);
196 PMPageFormat page_format = 163 PMPageFormat page_format =
197 static_cast<PMPageFormat>([print_info_.get() PMPageFormat]); 164 static_cast<PMPageFormat>([print_info_.get() PMPageFormat]);
198 PMPrinter printer; 165 PMPrinter printer;
199 PMSessionGetCurrentPrinter(print_session, &printer); 166 PMSessionGetCurrentPrinter(print_session, &printer);
167 settings_.set_selection_only(false);
200 PrintSettingsInitializerMac::InitPrintSettings( 168 PrintSettingsInitializerMac::InitPrintSettings(
201 printer, page_format, ranges, false, &settings_); 169 printer, page_format, &settings_);
202 } 170 }
203 171
204 bool PrintingContextMac::SetPrinter(const std::string& device_name) { 172 bool PrintingContextMac::SetPrinter(const std::string& device_name) {
205 DCHECK(print_info_.get()); 173 DCHECK(print_info_.get());
206 PMPrintSession print_session = 174 PMPrintSession print_session =
207 static_cast<PMPrintSession>([print_info_.get() PMPrintSession]); 175 static_cast<PMPrintSession>([print_info_.get() PMPrintSession]);
208 176
209 PMPrinter current_printer; 177 PMPrinter current_printer;
210 if (PMSessionGetCurrentPrinter(print_session, &current_printer) != noErr) 178 if (PMSessionGetCurrentPrinter(print_session, &current_printer) != noErr)
211 return false; 179 return false;
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 void PrintingContextMac::ReleaseContext() { 478 void PrintingContextMac::ReleaseContext() {
511 print_info_.reset(); 479 print_info_.reset();
512 context_ = NULL; 480 context_ = NULL;
513 } 481 }
514 482
515 gfx::NativeDrawingContext PrintingContextMac::context() const { 483 gfx::NativeDrawingContext PrintingContextMac::context() const {
516 return context_; 484 return context_;
517 } 485 }
518 486
519 } // namespace printing 487 } // namespace printing
OLDNEW
« no previous file with comments | « printing/printing_context_mac.h ('k') | printing/printing_context_no_system_dialog.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698