| // 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 |
| }; |
| }); |