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
3 // found in the LICENSE file.
5 #include "printing/print_settings_initializer.h"
11 #include "base/strings/string_number_conversions.h"
12 #include "base/strings/utf_string_conversions.h"
13 #include "base/time/time.h"
14 #include "base/values.h"
15 #include "printing/page_size_margins.h"
16 #include "printing/print_job_constants.h"
17 #include "printing/print_settings.h"
18 #include "printing/units.h"
22 bool PrintSettingsInitializer::InitSettings(
23 const base::DictionaryValue
& job_settings
,
24 const PageRanges
& ranges
,
25 PrintSettings
* settings
) {
26 bool display_header_footer
= false;
27 if (!job_settings
.GetBoolean(kSettingHeaderFooterEnabled
,
28 &display_header_footer
)) {
31 settings
->set_display_header_footer(display_header_footer
);
33 if (settings
->display_header_footer()) {
36 if (!job_settings
.GetString(kSettingHeaderFooterTitle
, &title
) ||
37 !job_settings
.GetString(kSettingHeaderFooterURL
, &url
)) {
40 settings
->set_title(title
);
41 settings
->set_url(url
);
44 bool backgrounds
= false;
45 bool selection_only
= false;
46 if (!job_settings
.GetBoolean(kSettingShouldPrintBackgrounds
, &backgrounds
) ||
47 !job_settings
.GetBoolean(kSettingShouldPrintSelectionOnly
,
51 settings
->set_should_print_backgrounds(backgrounds
);
52 settings
->set_selection_only(selection_only
);
54 int margin_type
= DEFAULT_MARGINS
;
55 if (!job_settings
.GetInteger(kSettingMarginsType
, &margin_type
) ||
56 (margin_type
!= DEFAULT_MARGINS
&&
57 margin_type
!= NO_MARGINS
&&
58 margin_type
!= CUSTOM_MARGINS
&&
59 margin_type
!= PRINTABLE_AREA_MARGINS
)) {
60 margin_type
= DEFAULT_MARGINS
;
62 settings
->set_margin_type(static_cast<MarginType
>(margin_type
));
64 if (margin_type
== CUSTOM_MARGINS
) {
65 PageSizeMargins page_size_margins
;
66 GetCustomMarginsFromJobSettings(job_settings
, &page_size_margins
);
68 PageMargins margins_in_points
;
69 margins_in_points
.Clear();
70 margins_in_points
.top
= page_size_margins
.margin_top
;
71 margins_in_points
.bottom
= page_size_margins
.margin_bottom
;
72 margins_in_points
.left
= page_size_margins
.margin_left
;
73 margins_in_points
.right
= page_size_margins
.margin_right
;
75 settings
->SetCustomMargins(margins_in_points
);
78 settings
->set_ranges(ranges
);
81 bool landscape
= false;
83 base::string16 device_name
;
87 if (!job_settings
.GetBoolean(kSettingCollate
, &collate
) ||
88 !job_settings
.GetInteger(kSettingCopies
, &copies
) ||
89 !job_settings
.GetInteger(kSettingColor
, &color
) ||
90 !job_settings
.GetInteger(kSettingDuplexMode
, &duplex_mode
) ||
91 !job_settings
.GetBoolean(kSettingLandscape
, &landscape
) ||
92 !job_settings
.GetString(kSettingDeviceName
, &device_name
)) {
96 settings
->set_collate(collate
);
97 settings
->set_copies(copies
);
98 settings
->SetOrientation(landscape
);
99 settings
->set_device_name(device_name
);
100 settings
->set_duplex_mode(static_cast<DuplexMode
>(duplex_mode
));
101 settings
->set_color(static_cast<ColorModel
>(color
));
106 } // namespace printing