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

Side by Side Diff: chrome/browser/printing/print_dialog_gtk.cc

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 | « chrome/browser/printing/print_dialog_gtk.h ('k') | chrome/browser/printing/print_job_worker.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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/printing/print_dialog_gtk.h" 5 #include "chrome/browser/printing/print_dialog_gtk.h"
6 6
7 #include <gtk/gtkunixprint.h> 7 #include <gtk/gtkunixprint.h>
8 8
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 155
156 void PrintDialogGtk::UseDefaultSettings() { 156 void PrintDialogGtk::UseDefaultSettings() {
157 DCHECK(!page_setup_); 157 DCHECK(!page_setup_);
158 DCHECK(!printer_); 158 DCHECK(!printer_);
159 159
160 // |gtk_settings_| is a new copy. 160 // |gtk_settings_| is a new copy.
161 gtk_settings_ = 161 gtk_settings_ =
162 gtk_print_settings_copy(g_last_used_settings.Get().settings()); 162 gtk_print_settings_copy(g_last_used_settings.Get().settings());
163 page_setup_ = gtk_page_setup_new(); 163 page_setup_ = gtk_page_setup_new();
164 164
165 // No page range to initialize for default settings.
166 PageRanges ranges_vector;
167 PrintSettings settings; 165 PrintSettings settings;
168 InitPrintSettings(ranges_vector, &settings); 166 InitPrintSettings(&settings);
169 } 167 }
170 168
171 bool PrintDialogGtk::UpdateSettings(const base::DictionaryValue& job_settings, 169 bool PrintDialogGtk::UpdateSettings(bool target_is_pdf,
172 const printing::PageRanges& ranges,
173 printing::PrintSettings* settings) { 170 printing::PrintSettings* settings) {
174 bool collate;
175 int color;
176 bool landscape;
177 bool print_to_pdf;
178 int copies;
179 int duplex_mode;
180 std::string device_name;
181
182 if (!job_settings.GetBoolean(printing::kSettingLandscape, &landscape) ||
183 !job_settings.GetBoolean(printing::kSettingCollate, &collate) ||
184 !job_settings.GetInteger(printing::kSettingColor, &color) ||
185 !job_settings.GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf) ||
186 !job_settings.GetInteger(printing::kSettingDuplexMode, &duplex_mode) ||
187 !job_settings.GetInteger(printing::kSettingCopies, &copies) ||
188 !job_settings.GetString(printing::kSettingDeviceName, &device_name)) {
189 return false;
190 }
191
192 bool is_cloud_print = job_settings.HasKey(printing::kSettingCloudPrintId);
193
194 if (!gtk_settings_) { 171 if (!gtk_settings_) {
195 gtk_settings_ = 172 gtk_settings_ =
196 gtk_print_settings_copy(g_last_used_settings.Get().settings()); 173 gtk_print_settings_copy(g_last_used_settings.Get().settings());
197 } 174 }
198 175
199 if (!print_to_pdf && !is_cloud_print) { 176 if (!target_is_pdf) {
200 scoped_ptr<GtkPrinterList> printer_list(new GtkPrinterList); 177 scoped_ptr<GtkPrinterList> printer_list(new GtkPrinterList);
201 printer_ = printer_list->GetPrinterWithName(device_name); 178 printer_ = printer_list->GetPrinterWithName(
179 UTF16ToUTF8(settings->device_name()));
202 if (printer_) { 180 if (printer_) {
203 g_object_ref(printer_); 181 g_object_ref(printer_);
204 gtk_print_settings_set_printer(gtk_settings_, 182 gtk_print_settings_set_printer(gtk_settings_,
205 gtk_printer_get_name(printer_)); 183 gtk_printer_get_name(printer_));
206 if (!page_setup_) { 184 if (!page_setup_) {
207 page_setup_ = gtk_printer_get_default_page_size(printer_); 185 page_setup_ = gtk_printer_get_default_page_size(printer_);
208 } 186 }
209 } 187 }
210 188
211 gtk_print_settings_set_n_copies(gtk_settings_, copies); 189 gtk_print_settings_set_n_copies(gtk_settings_, settings->copies());
212 gtk_print_settings_set_collate(gtk_settings_, collate); 190 gtk_print_settings_set_collate(gtk_settings_, settings->collate());
213 191
214 #if defined(USE_CUPS) 192 #if defined(USE_CUPS)
215 std::string color_value; 193 std::string color_value;
216 std::string color_setting_name; 194 std::string color_setting_name;
217 printing::GetColorModelForMode(color, &color_setting_name, &color_value); 195 printing::GetColorModelForMode(settings->color(), &color_setting_name,
196 &color_value);
218 gtk_print_settings_set(gtk_settings_, color_setting_name.c_str(), 197 gtk_print_settings_set(gtk_settings_, color_setting_name.c_str(),
219 color_value.c_str()); 198 color_value.c_str());
220 199
221 if (duplex_mode != printing::UNKNOWN_DUPLEX_MODE) { 200 if (settings->duplex_mode() != printing::UNKNOWN_DUPLEX_MODE) {
222 const char* cups_duplex_mode = NULL; 201 const char* cups_duplex_mode = NULL;
223 switch (duplex_mode) { 202 switch (settings->duplex_mode()) {
224 case printing::LONG_EDGE: 203 case printing::LONG_EDGE:
225 cups_duplex_mode = kDuplexNoTumble; 204 cups_duplex_mode = kDuplexNoTumble;
226 break; 205 break;
227 case printing::SHORT_EDGE: 206 case printing::SHORT_EDGE:
228 cups_duplex_mode = kDuplexTumble; 207 cups_duplex_mode = kDuplexTumble;
229 break; 208 break;
230 case printing::SIMPLEX: 209 case printing::SIMPLEX:
231 cups_duplex_mode = kDuplexNone; 210 cups_duplex_mode = kDuplexNone;
232 break; 211 break;
233 default: // UNKNOWN_DUPLEX_MODE 212 default: // UNKNOWN_DUPLEX_MODE
234 NOTREACHED(); 213 NOTREACHED();
235 break; 214 break;
236 } 215 }
237 gtk_print_settings_set(gtk_settings_, kCUPSDuplex, cups_duplex_mode); 216 gtk_print_settings_set(gtk_settings_, kCUPSDuplex, cups_duplex_mode);
238 } 217 }
239 #endif 218 #endif
240 } 219 }
241 if (!page_setup_) 220 if (!page_setup_)
242 page_setup_ = gtk_page_setup_new(); 221 page_setup_ = gtk_page_setup_new();
243 222
244 gtk_print_settings_set_orientation( 223 gtk_print_settings_set_orientation(
245 gtk_settings_, 224 gtk_settings_,
246 landscape ? GTK_PAGE_ORIENTATION_LANDSCAPE : 225 settings->landscape() ? GTK_PAGE_ORIENTATION_LANDSCAPE :
247 GTK_PAGE_ORIENTATION_PORTRAIT); 226 GTK_PAGE_ORIENTATION_PORTRAIT);
248 227
249 InitPrintSettings(ranges, settings); 228 InitPrintSettings(settings);
250 return true; 229 return true;
251 } 230 }
252 231
253 void PrintDialogGtk::ShowDialog( 232 void PrintDialogGtk::ShowDialog(
254 gfx::NativeView parent_view, 233 gfx::NativeView parent_view,
255 bool has_selection, 234 bool has_selection,
256 const PrintingContextGtk::PrintSettingsCallback& callback) { 235 const PrintingContextGtk::PrintSettingsCallback& callback) {
257 callback_ = callback; 236 callback_ = callback;
258 237
259 GtkWindow* parent = GTK_WINDOW(gtk_widget_get_toplevel(parent_view)); 238 GtkWindow* parent = GTK_WINDOW(gtk_widget_get_toplevel(parent_view));
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 case GTK_PRINT_PAGES_ALL: 359 case GTK_PRINT_PAGES_ALL:
381 // Leave |ranges_vector| empty to indicate print all pages. 360 // Leave |ranges_vector| empty to indicate print all pages.
382 break; 361 break;
383 case GTK_PRINT_PAGES_CURRENT: 362 case GTK_PRINT_PAGES_CURRENT:
384 default: 363 default:
385 NOTREACHED(); 364 NOTREACHED();
386 break; 365 break;
387 } 366 }
388 367
389 PrintSettings settings; 368 PrintSettings settings;
369 settings.set_ranges(ranges_vector);
370 settings.set_selection_only(print_selection_only);
390 printing::PrintSettingsInitializerGtk::InitPrintSettings( 371 printing::PrintSettingsInitializerGtk::InitPrintSettings(
391 gtk_settings_, page_setup_, ranges_vector, print_selection_only, 372 gtk_settings_, page_setup_, &settings);
392 &settings);
393 context_->InitWithSettings(settings); 373 context_->InitWithSettings(settings);
394 callback_.Run(PrintingContextGtk::OK); 374 callback_.Run(PrintingContextGtk::OK);
395 callback_.Reset(); 375 callback_.Reset();
396 return; 376 return;
397 } 377 }
398 case GTK_RESPONSE_DELETE_EVENT: // Fall through. 378 case GTK_RESPONSE_DELETE_EVENT: // Fall through.
399 case GTK_RESPONSE_CANCEL: { 379 case GTK_RESPONSE_CANCEL: {
400 callback_.Run(PrintingContextGtk::CANCEL); 380 callback_.Run(PrintingContextGtk::CANCEL);
401 callback_.Reset(); 381 callback_.Reset();
402 return; 382 return;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 g_object_unref(print_job); 425 g_object_unref(print_job);
446 base::FileUtilProxy::DeleteFile( 426 base::FileUtilProxy::DeleteFile(
447 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE).get(), 427 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE).get(),
448 path_to_pdf_, 428 path_to_pdf_,
449 false, 429 false,
450 base::FileUtilProxy::StatusCallback()); 430 base::FileUtilProxy::StatusCallback());
451 // Printing finished. Matches AddRef() in PrintDocument(); 431 // Printing finished. Matches AddRef() in PrintDocument();
452 Release(); 432 Release();
453 } 433 }
454 434
455 void PrintDialogGtk::InitPrintSettings(const PageRanges& page_ranges, 435 void PrintDialogGtk::InitPrintSettings(PrintSettings* settings) {
456 PrintSettings* settings) {
457 printing::PrintSettingsInitializerGtk::InitPrintSettings( 436 printing::PrintSettingsInitializerGtk::InitPrintSettings(
458 gtk_settings_, page_setup_, page_ranges, false, settings); 437 gtk_settings_, page_setup_, settings);
459 context_->InitWithSettings(*settings); 438 context_->InitWithSettings(*settings);
460 } 439 }
OLDNEW
« no previous file with comments | « chrome/browser/printing/print_dialog_gtk.h ('k') | chrome/browser/printing/print_job_worker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698