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