blob: 389e4e05961b536ccf1df2c9d7aa2cadad2b4572 [file] [log] [blame]
// Copyright (c) 2012 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.ticket_items');
/**
* Enumeration of the orientations of margins.
* @enum {string}
*/
print_preview.ticket_items.CustomMarginsOrientation = {
TOP: 'top',
RIGHT: 'right',
BOTTOM: 'bottom',
LEFT: 'left'
};
/**
* Must be kept in sync with the C++ MarginType enum in
* printing/print_job_constants.h.
* @enum {number}
*/
print_preview.ticket_items.MarginsTypeValue = {
DEFAULT: 0,
NO_MARGINS: 1,
MINIMUM: 2,
CUSTOM: 3
};
/**
* Keep in sync with the C++ kSettingMargin... values in
* printing/print_job_constants.h.
* @typedef {{
* marginTop: number,
* marginRight: number,
* marginBottom: number,
* marginLeft: number,
* }}
*/
print_preview.MarginsSetting;
cr.define('print_preview', function() {
'use strict';
class Margins {
/**
* Creates a Margins object that holds four margin values in points.
* @param {number} top The top margin in pts.
* @param {number} right The right margin in pts.
* @param {number} bottom The bottom margin in pts.
* @param {number} left The left margin in pts.
*/
constructor(top, right, bottom, left) {
/**
* Backing store for the margin values in points.
* @type {!Object<
* !print_preview.ticket_items.CustomMarginsOrientation, number>}
* @private
*/
this.value_ = {};
this.value_[print_preview.ticket_items.CustomMarginsOrientation.TOP] =
top;
this.value_[print_preview.ticket_items.CustomMarginsOrientation.RIGHT] =
right;
this.value_[print_preview.ticket_items.CustomMarginsOrientation.BOTTOM] =
bottom;
this.value_[print_preview.ticket_items.CustomMarginsOrientation.LEFT] =
left;
}
/**
* Parses a margins object from the given serialized state.
* @param {Object} state Serialized representation of the margins created by
* the {@code serialize} method.
* @return {!print_preview.Margins} New margins instance.
*/
static parse(state) {
return new print_preview.Margins(
state[print_preview.ticket_items.CustomMarginsOrientation.TOP] || 0,
state[print_preview.ticket_items.CustomMarginsOrientation.RIGHT] || 0,
state[print_preview.ticket_items.CustomMarginsOrientation.BOTTOM] ||
0,
state[print_preview.ticket_items.CustomMarginsOrientation.LEFT] || 0);
}
/**
* @param {!print_preview.ticket_items.CustomMarginsOrientation}
* orientation Specifies the margin value to get.
* @return {number} Value of the margin of the given orientation.
*/
get(orientation) {
return this.value_[orientation];
}
/**
* @param {!print_preview.ticket_items.CustomMarginsOrientation}
* orientation Specifies the margin to set.
* @param {number} value Updated value of the margin in points to modify.
* @return {!print_preview.Margins} A new copy of |this| with the
* modification made to the specified margin.
*/
set(orientation, value) {
const newValue = this.clone_();
newValue[orientation] = value;
return new Margins(
newValue[print_preview.ticket_items.CustomMarginsOrientation.TOP],
newValue[print_preview.ticket_items.CustomMarginsOrientation.RIGHT],
newValue[print_preview.ticket_items.CustomMarginsOrientation.BOTTOM],
newValue[print_preview.ticket_items.CustomMarginsOrientation.LEFT]);
}
/**
* @param {print_preview.Margins} other The other margins object to compare
* against.
* @return {boolean} Whether this margins object is equal to another.
*/
equals(other) {
if (other == null) {
return false;
}
for (const orientation in this.value_) {
if (this.value_[orientation] != other.value_[orientation]) {
return false;
}
}
return true;
}
/** @return {Object} A serialized representation of the margins. */
serialize() {
return this.clone_();
}
/**
* @return {Object} Cloned state of the margins.
* @private
*/
clone_() {
const clone = {};
for (const o in this.value_) {
clone[o] = this.value_[o];
}
return clone;
}
}
// Export
return {Margins: Margins};
});