blob: 263432668c6405a435b0d17c09660b913ff63cb5 [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 LayoutSettings object. This object encapsulates all settings and
* logic related to layout mode (portrait/landscape).
* @param {!print_preview.ticket_items.Landscape} landscapeTicketItem Used to
* get the layout written to the print ticket.
* @constructor
* @extends {print_preview.Component}
*/
function LayoutSettings(landscapeTicketItem) {
print_preview.Component.call(this);
/**
* Used to get the layout written to the print ticket.
* @type {!print_preview.ticket_items.Landscape}
* @private
*/
this.landscapeTicketItem_ = landscapeTicketItem;
};
/**
* CSS classes used by the layout settings.
* @enum {string}
* @private
*/
LayoutSettings.Classes_ = {
LANDSCAPE_RADIO: 'layout-settings-landscape-radio',
PORTRAIT_RADIO: 'layout-settings-portrait-radio'
};
LayoutSettings.prototype = {
__proto__: print_preview.Component.prototype,
/** @param {boolean} isEnabled Whether this component is enabled. */
set isEnabled(isEnabled) {
this.landscapeRadioButton_.disabled = !isEnabled;
this.portraitRadioButton_.disabled = !isEnabled;
},
/** @override */
enterDocument: function() {
print_preview.Component.prototype.enterDocument.call(this);
this.tracker.add(
this.portraitRadioButton_,
'click',
this.onLayoutButtonClick_.bind(this));
this.tracker.add(
this.landscapeRadioButton_,
'click',
this.onLayoutButtonClick_.bind(this));
this.tracker.add(
this.landscapeTicketItem_,
print_preview.ticket_items.TicketItem.EventType.CHANGE,
this.onLandscapeTicketItemChange_.bind(this));
},
/**
* @return {HTMLInputElement} The portrait orientation radio button.
* @private
*/
get portraitRadioButton_() {
return this.getElement().getElementsByClassName(
LayoutSettings.Classes_.PORTRAIT_RADIO)[0];
},
/**
* @return {HTMLInputElement} The landscape orientation radio button.
* @private
*/
get landscapeRadioButton_() {
return this.getElement().getElementsByClassName(
LayoutSettings.Classes_.LANDSCAPE_RADIO)[0];
},
/**
* Called when one of the radio buttons is clicked. Updates the print ticket
* store.
* @private
*/
onLayoutButtonClick_: function() {
this.landscapeTicketItem_.updateValue(this.landscapeRadioButton_.checked);
},
/**
* Called when the print ticket store changes state. Updates the state of
* the radio buttons and hides the setting if necessary.
* @private
*/
onLandscapeTicketItemChange_: function() {
if (this.landscapeTicketItem_.isCapabilityAvailable()) {
var isLandscapeEnabled = this.landscapeTicketItem_.getValue();
this.portraitRadioButton_.checked = !isLandscapeEnabled;
this.landscapeRadioButton_.checked = isLandscapeEnabled;
fadeInOption(this.getElement());
} else {
fadeOutOption(this.getElement());
}
}
};
// Export
return {
LayoutSettings: LayoutSettings
};
});