blob: 932335c31576a6a75446fe134ffdd4987f2cfed2 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
cr.exportPath('print_preview');
/**
* @typedef {{
* horizontal_dpi: (number | undefined),
* vertical_dpi: (number | undefined),
* vendor_id: (number | undefined)}}
*/
print_preview.DpiOption;
/**
* @typedef {{
* horizontal_dpi: (number | undefined),
* name: string,
* vertical_dpi: (number | undefined),
* vendor_id: (number | undefined)}}
*/
print_preview.LabelledDpiOption;
Polymer({
is: 'print-preview-dpi-settings',
behaviors: [SettingsBehavior],
properties: {
/** @type {{ option: Array<!print_preview.SelectOption> }} */
capability: Object,
disabled: Boolean,
/** @private {{ option: Array<!print_preview.SelectOption> }} */
capabilityWithLabels_: {
type: Object,
computed: 'computeCapabilityWithLabels_(capability)',
},
},
observers: [
'onDpiSettingChange_(settings.dpi.*, capabilityWithLabels_.option)',
],
/**
* Adds default labels for each option.
* @return {?{option: Array<!print_preview.SelectOption>}}
* @private
*/
computeCapabilityWithLabels_: function() {
if (this.capability === undefined) {
return null;
}
const result =
/** @type {{option: Array<!print_preview.SelectOption>}} */ (
JSON.parse(JSON.stringify(this.capability)));
this.capability.option.forEach((option, index) => {
const dpiOption = /** @type {print_preview.DpiOption} */ (option);
const hDpi = dpiOption.horizontal_dpi || 0;
const vDpi = dpiOption.vertical_dpi || 0;
if (hDpi > 0 && vDpi > 0 && hDpi != vDpi) {
result.option[index].name = loadTimeData.getStringF(
'nonIsotropicDpiItemLabel', hDpi.toLocaleString(),
vDpi.toLocaleString());
} else {
result.option[index].name = loadTimeData.getStringF(
'dpiItemLabel', (hDpi || vDpi).toLocaleString());
}
});
return result;
},
/** @private */
onDpiSettingChange_: function() {
if (this.capabilityWithLabels_ === null ||
this.capabilityWithLabels_ === undefined) {
return;
}
const dpiValue =
/** @type {print_preview.DpiOption} */ (this.getSettingValue('dpi'));
for (const option of assert(this.capabilityWithLabels_.option)) {
const dpiOption =
/** @type {print_preview.LabelledDpiOption} */ (option);
if (dpiValue.horizontal_dpi == dpiOption.horizontal_dpi &&
dpiValue.vertical_dpi == dpiOption.vertical_dpi &&
dpiValue.vendor_id == dpiOption.vendor_id) {
this.$$('print-preview-settings-select')
.selectValue(JSON.stringify(option));
return;
}
}
const defaultOption =
this.capabilityWithLabels_.option.find(o => !!o.is_default) ||
this.capabilityWithLabels_.option[0];
this.setSetting('dpi', defaultOption);
},
});