Index: printing/print_settings_conversion.cc |
diff --git a/printing/print_settings_initializer.cc b/printing/print_settings_conversion.cc |
similarity index 40% |
rename from printing/print_settings_initializer.cc |
rename to printing/print_settings_conversion.cc |
index df6a32e40e5a56575e562637e6e021f1a120d56e..2dbb8d91a30466a758359837201d9a86de5ee12b 100644 |
--- a/printing/print_settings_initializer.cc |
+++ b/printing/print_settings_conversion.cc |
@@ -2,7 +2,7 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "printing/print_settings_initializer.h" |
+#include "printing/print_settings_conversion.h" |
#include <algorithm> |
#include <cmath> |
@@ -19,10 +19,59 @@ |
namespace printing { |
-bool PrintSettingsInitializer::InitSettings( |
- const base::DictionaryValue& job_settings, |
- const PageRanges& ranges, |
- PrintSettings* settings) { |
+namespace { |
+ |
+void GetCustomMarginsFromJobSettings(const base::DictionaryValue& settings, |
+ PageSizeMargins* page_size_margins) { |
+ const base::DictionaryValue* custom_margins; |
+ if (!settings.GetDictionary(kSettingMarginsCustom, &custom_margins) || |
+ !custom_margins->GetDouble(kSettingMarginTop, |
+ &page_size_margins->margin_top) || |
+ !custom_margins->GetDouble(kSettingMarginBottom, |
+ &page_size_margins->margin_bottom) || |
+ !custom_margins->GetDouble(kSettingMarginLeft, |
+ &page_size_margins->margin_left) || |
+ !custom_margins->GetDouble(kSettingMarginRight, |
+ &page_size_margins->margin_right)) { |
+ NOTREACHED(); |
+ } |
+} |
+ |
+void SetMarginsToJobSettings(const std::string& json_path, |
+ const PageMargins& margins, |
+ base::DictionaryValue* job_settings) { |
+ base::DictionaryValue* dict = new base::DictionaryValue; |
+ job_settings->Set(json_path, dict); |
+ dict->SetInteger(kSettingMarginTop, margins.top); |
+ dict->SetInteger(kSettingMarginBottom, margins.bottom); |
+ dict->SetInteger(kSettingMarginLeft, margins.left); |
+ dict->SetInteger(kSettingMarginRight, margins.right); |
+} |
+ |
+void SetSizeToJobSettings(const std::string& json_path, |
+ const gfx::Size& size, |
+ base::DictionaryValue* job_settings) { |
+ base::DictionaryValue* dict = new base::DictionaryValue; |
+ job_settings->Set(json_path, dict); |
+ dict->SetInteger("width", size.width()); |
+ dict->SetInteger("height", size.height()); |
+} |
+ |
+void SetRectToJobSettings(const std::string& json_path, |
+ const gfx::Rect& rect, |
+ base::DictionaryValue* job_settings) { |
+ base::DictionaryValue* dict = new base::DictionaryValue; |
+ job_settings->Set(json_path, dict); |
+ dict->SetInteger("x", rect.x()); |
+ dict->SetInteger("y", rect.y()); |
+ dict->SetInteger("width", rect.width()); |
+ dict->SetInteger("height", rect.height()); |
+} |
+ |
+} // namespace |
+ |
+bool PrintSettingsFromJobSettings(const base::DictionaryValue& job_settings, |
+ PrintSettings* settings) { |
bool display_header_footer = false; |
if (!job_settings.GetBoolean(kSettingHeaderFooterEnabled, |
&display_header_footer)) { |
@@ -94,7 +143,28 @@ bool PrintSettingsInitializer::InitSettings( |
settings->SetCustomMargins(margins_in_points); |
} |
- settings->set_ranges(ranges); |
+ PageRanges new_ranges; |
+ const base::ListValue* page_range_array = NULL; |
+ if (job_settings.GetList(kSettingPageRange, &page_range_array)) { |
+ for (size_t index = 0; index < page_range_array->GetSize(); ++index) { |
+ const base::DictionaryValue* dict; |
+ if (!page_range_array->GetDictionary(index, &dict)) |
+ continue; |
+ |
+ PageRange range; |
+ if (!dict->GetInteger(kSettingPageRangeFrom, &range.from) || |
+ !dict->GetInteger(kSettingPageRangeTo, &range.to)) { |
+ continue; |
+ } |
+ |
+ // Page numbers are 1-based in the dictionary. |
+ // Page numbers are 0-based for the printing context. |
+ range.from--; |
+ range.to--; |
+ new_ranges.push_back(range); |
+ } |
+ } |
+ settings->set_ranges(new_ranges); |
int color = 0; |
bool landscape = false; |
@@ -122,4 +192,58 @@ bool PrintSettingsInitializer::InitSettings( |
return true; |
} |
+void PrintSettingsToJobSettingsDebug(const PrintSettings& settings, |
+ base::DictionaryValue* job_settings) { |
+ job_settings->SetBoolean(kSettingHeaderFooterEnabled, |
+ settings.display_header_footer()); |
+ job_settings->SetString(kSettingHeaderFooterTitle, settings.title()); |
+ job_settings->SetString(kSettingHeaderFooterURL, settings.url()); |
+ job_settings->SetBoolean(kSettingShouldPrintBackgrounds, |
+ settings.should_print_backgrounds()); |
+ job_settings->SetBoolean(kSettingShouldPrintSelectionOnly, |
+ settings.selection_only()); |
+ job_settings->SetInteger(kSettingMarginsType, settings.margin_type()); |
+ if (!settings.ranges().empty()) { |
+ base::ListValue* page_range_array = new base::ListValue; |
+ job_settings->Set(kSettingPageRange, page_range_array); |
+ for (size_t i = 0; i < settings.ranges().size(); ++i) { |
+ base::DictionaryValue* dict = new base::DictionaryValue; |
+ page_range_array->Append(dict); |
+ dict->SetInteger(kSettingPageRangeFrom, settings.ranges()[i].from + 1); |
+ dict->SetInteger(kSettingPageRangeTo, settings.ranges()[i].to + 1); |
+ } |
+ } |
+ |
+ job_settings->SetBoolean(kSettingCollate, settings.collate()); |
+ job_settings->SetInteger(kSettingCopies, settings.copies()); |
+ job_settings->SetInteger(kSettingColor, settings.color()); |
+ job_settings->SetInteger(kSettingDuplexMode, settings.duplex_mode()); |
+ job_settings->SetBoolean(kSettingLandscape, settings.landscape()); |
+ job_settings->SetString(kSettingDeviceName, settings.device_name()); |
+ |
+ // Following values are not read form JSON by InitSettings, so do not have |
+ // common public constants. So just serialize in "debug" section. |
+ base::DictionaryValue* debug = new base::DictionaryValue; |
+ job_settings->Set("debug", debug); |
+ debug->SetDouble("minShrink", settings.min_shrink()); |
+ debug->SetDouble("maxShrink", settings.max_shrink()); |
+ debug->SetInteger("desiredDpi", settings.desired_dpi()); |
+ debug->SetInteger("dpi", settings.dpi()); |
+ debug->SetInteger("deviceUnitsPerInch", settings.device_units_per_inch()); |
+ debug->SetBoolean("support_alpha_blend", settings.should_print_backgrounds()); |
+ debug->SetString("media_vendor_od", settings.requested_media().vendor_id); |
+ SetSizeToJobSettings( |
+ "media_size", settings.requested_media().size_microns, debug); |
+ SetMarginsToJobSettings("requested_custom_margins_in_points", |
+ settings.requested_custom_margins_in_points(), |
+ debug); |
+ const PageSetup& page_setup = settings.page_setup_device_units(); |
+ SetMarginsToJobSettings( |
+ "effective_margins", page_setup.effective_margins(), debug); |
+ SetSizeToJobSettings("physical_size", page_setup.physical_size(), debug); |
+ SetRectToJobSettings("overlay_area", page_setup.overlay_area(), debug); |
+ SetRectToJobSettings("content_area", page_setup.content_area(), debug); |
+ SetRectToJobSettings("printable_area", page_setup.printable_area(), debug); |
+} |
+ |
} // namespace printing |