blob: c09c0d5197d25d5514d86915bc3546dbd57e4dd6 [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.define('print_preview', function() {
'use strict';
/**
* 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
*/
function Margins(top, right, bottom, left) {
/**
* Backing store for the margin values in points.
* @type {!Object<
* !print_preview.ticket_items.CustomMargins.Orientation, number>}
* @private
*/
this.value_ = {};
this.value_[print_preview.ticket_items.CustomMargins.Orientation.TOP] = top;
this.value_[print_preview.ticket_items.CustomMargins.Orientation.RIGHT] =
right;
this.value_[print_preview.ticket_items.CustomMargins.Orientation.BOTTOM] =
bottom;
this.value_[print_preview.ticket_items.CustomMargins.Orientation.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.
*/
Margins.parse = function(state) {
return new print_preview.Margins(
state[print_preview.ticket_items.CustomMargins.Orientation.TOP] || 0,
state[print_preview.ticket_items.CustomMargins.Orientation.RIGHT] || 0,
state[print_preview.ticket_items.CustomMargins.Orientation.BOTTOM] || 0,
state[print_preview.ticket_items.CustomMargins.Orientation.LEFT] || 0);
};
Margins.prototype = {
/**
* @param {!print_preview.ticket_items.CustomMargins.Orientation}
* orientation Specifies the margin value to get.
* @return {number} Value of the margin of the given orientation.
*/
get: function(orientation) {
return this.value_[orientation];
},
/**
* @param {!print_preview.ticket_items.CustomMargins.Orientation}
* 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: function(orientation, value) {
var newValue = this.clone_();
newValue[orientation] = value;
return new Margins(
newValue[print_preview.ticket_items.CustomMargins.Orientation.TOP],
newValue[print_preview.ticket_items.CustomMargins.Orientation.RIGHT],
newValue[print_preview.ticket_items.CustomMargins.Orientation.BOTTOM],
newValue[print_preview.ticket_items.CustomMargins.Orientation.LEFT]);
},
/**
* @param {print_preview.Margins} other The other margins object to compare
* against.
* @return {boolean} Whether this margins object is equal to another.
*/
equals: function(other) {
if (other == null) {
return false;
}
for (var orientation in this.value_) {
if (this.value_[orientation] != other.value_[orientation]) {
return false;
}
}
return true;
},
/** @return {Object} A serialized representation of the margins. */
serialize: function() {
return this.clone_();
},
/**
* @return {Object} Cloned state of the margins.
* @private
*/
clone_: function() {
var clone = {};
for (var o in this.value_) {
clone[o] = this.value_[o];
}
return clone;
}
};
// Export
return {
Margins: Margins
};
});