1// Copyright 2014 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.
4
5cr.define('print_preview', function() {
6  'use strict';
7
8  /**
9   * Print options section to control printer advanced options.
10   * @param {!print_preview.ticket_item.VendorItems} ticketItem Ticket item to
11   *     check settings availability.
12   * @param {!print_preview.DestinationStore} destinationStore Used to determine
13   *     the selected destination.
14   * @constructor
15   * @extends {print_preview.SettingsSection}
16   */
17  function AdvancedOptionsSettings(ticketItem, destinationStore) {
18    print_preview.SettingsSection.call(this);
19
20    /**
21     * Ticket item to check settings availability.
22     * @private {!print_preview.ticket_items.VendorItems}
23     */
24    this.ticketItem_ = ticketItem;
25
26    /**
27     * Used to determine the selected destination.
28     * @private {!print_preview.DestinationStore}
29     */
30    this.destinationStore_ = destinationStore;
31  };
32
33  /**
34   * Event types dispatched by the component.
35   * @enum {string}
36   */
37  AdvancedOptionsSettings.EventType = {
38    BUTTON_ACTIVATED: 'print_preview.AdvancedOptionsSettings.BUTTON_ACTIVATED'
39  };
40
41  AdvancedOptionsSettings.prototype = {
42    __proto__: print_preview.SettingsSection.prototype,
43
44    /** @override */
45    isAvailable: function() {
46      return this.ticketItem_.isCapabilityAvailable();
47    },
48
49    /** @override */
50    hasCollapsibleContent: function() {
51      return this.isAvailable();
52    },
53
54    /** @param {boolean} isEnabled Whether the component is enabled. */
55    set isEnabled(isEnabled) {
56      this.getButton_().disabled = !isEnabled;
57    },
58
59    /** @override */
60    enterDocument: function() {
61      print_preview.SettingsSection.prototype.enterDocument.call(this);
62
63      this.tracker.add(
64          this.getButton_(), 'click', function() {
65            cr.dispatchSimpleEvent(
66                this, AdvancedOptionsSettings.EventType.BUTTON_ACTIVATED);
67          }.bind(this));
68      this.tracker.add(
69          this.destinationStore_,
70          print_preview.DestinationStore.EventType.DESTINATION_SELECT,
71          this.onDestinationChanged_.bind(this));
72      this.tracker.add(
73          this.destinationStore_,
74          print_preview.DestinationStore.EventType.
75              SELECTED_DESTINATION_CAPABILITIES_READY,
76          this.onDestinationChanged_.bind(this));
77    },
78
79    /**
80     * @return {HTMLElement}
81     * @private
82     */
83    getButton_: function() {
84      return this.getChildElement('.advanced-options-settings-button');
85    },
86
87    /**
88     * Called when the destination selection has changed. Updates UI elements.
89     * @private
90     */
91    onDestinationChanged_: function() {
92      this.updateUiStateInternal();
93    }
94  };
95
96  // Export
97  return {
98    AdvancedOptionsSettings: AdvancedOptionsSettings
99  };
100});
101