Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / resources / print_preview / settings / layout_settings.js
blob263432668c6405a435b0d17c09660b913ff63cb5
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 cr.define('print_preview', function() {
6   'use strict';
8   /**
9    * Creates a LayoutSettings object. This object encapsulates all settings and
10    * logic related to layout mode (portrait/landscape).
11    * @param {!print_preview.ticket_items.Landscape} landscapeTicketItem Used to
12    *     get the layout written to the print ticket.
13    * @constructor
14    * @extends {print_preview.Component}
15    */
16   function LayoutSettings(landscapeTicketItem) {
17     print_preview.Component.call(this);
19     /**
20      * Used to get the layout written to the print ticket.
21      * @type {!print_preview.ticket_items.Landscape}
22      * @private
23      */
24     this.landscapeTicketItem_ = landscapeTicketItem;
25   };
27   /**
28    * CSS classes used by the layout settings.
29    * @enum {string}
30    * @private
31    */
32   LayoutSettings.Classes_ = {
33     LANDSCAPE_RADIO: 'layout-settings-landscape-radio',
34     PORTRAIT_RADIO: 'layout-settings-portrait-radio'
35   };
37   LayoutSettings.prototype = {
38     __proto__: print_preview.Component.prototype,
40     /** @param {boolean} isEnabled Whether this component is enabled. */
41     set isEnabled(isEnabled) {
42       this.landscapeRadioButton_.disabled = !isEnabled;
43       this.portraitRadioButton_.disabled = !isEnabled;
44     },
46     /** @override */
47     enterDocument: function() {
48       print_preview.Component.prototype.enterDocument.call(this);
49       this.tracker.add(
50           this.portraitRadioButton_,
51           'click',
52           this.onLayoutButtonClick_.bind(this));
53       this.tracker.add(
54           this.landscapeRadioButton_,
55           'click',
56           this.onLayoutButtonClick_.bind(this));
57       this.tracker.add(
58           this.landscapeTicketItem_,
59           print_preview.ticket_items.TicketItem.EventType.CHANGE,
60           this.onLandscapeTicketItemChange_.bind(this));
61     },
63     /**
64      * @return {HTMLInputElement} The portrait orientation radio button.
65      * @private
66      */
67     get portraitRadioButton_() {
68       return this.getElement().getElementsByClassName(
69           LayoutSettings.Classes_.PORTRAIT_RADIO)[0];
70     },
72     /**
73      * @return {HTMLInputElement} The landscape orientation radio button.
74      * @private
75      */
76     get landscapeRadioButton_() {
77       return this.getElement().getElementsByClassName(
78           LayoutSettings.Classes_.LANDSCAPE_RADIO)[0];
79     },
81     /**
82      * Called when one of the radio buttons is clicked. Updates the print ticket
83      * store.
84      * @private
85      */
86     onLayoutButtonClick_: function() {
87       this.landscapeTicketItem_.updateValue(this.landscapeRadioButton_.checked);
88     },
90     /**
91      * Called when the print ticket store changes state. Updates the state of
92      * the radio buttons and hides the setting if necessary.
93      * @private
94      */
95     onLandscapeTicketItemChange_: function() {
96       if (this.landscapeTicketItem_.isCapabilityAvailable()) {
97         var isLandscapeEnabled = this.landscapeTicketItem_.getValue();
98         this.portraitRadioButton_.checked = !isLandscapeEnabled;
99         this.landscapeRadioButton_.checked = isLandscapeEnabled;
100         fadeInOption(this.getElement());
101       } else {
102         fadeOutOption(this.getElement());
103       }
104     }
105   };
107   // Export
108   return {
109     LayoutSettings: LayoutSettings
110   };