blob: f2561386caa7c6ce81f1a0609ea58b9cb9d604ff [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';
/**
* UI component that renders checkboxes for various print options.
* @param {!print_preview.ticket_items.Duplex} duplex Duplex ticket item.
* @param {!print_preview.ticket_items.FitToPage} fitToPage Fit-to-page ticket
* item.
* @param {!print_preview.ticket_items.CssBackground} cssBackground CSS
* background ticket item.
* @param {!print_preview.ticket_items.SelectionOnly} selectionOnly Selection
* only ticket item.
* @param {!print_preview.ticket_items.HeaderFooter} headerFooter Header
* footer ticket item.
* @constructor
* @extends {print_preview.Component}
*/
function OtherOptionsSettings(
duplex, fitToPage, cssBackground, selectionOnly, headerFooter) {
print_preview.Component.call(this);
/**
* Duplex ticket item, used to read/write the duplex selection.
* @type {!print_preview.ticket_items.Duplex}
* @private
*/
this.duplexTicketItem_ = duplex;
/**
* Fit-to-page ticket item, used to read/write the fit-to-page selection.
* @type {!print_preview.ticket_items.FitToPage}
* @private
*/
this.fitToPageTicketItem_ = fitToPage;
/**
* Enable CSS backgrounds ticket item, used to read/write.
* @type {!print_preview.ticket_items.CssBackground}
* @private
*/
this.cssBackgroundTicketItem_ = cssBackground;
/**
* Print selection only ticket item, used to read/write.
* @type {!print_preview.ticket_items.SelectionOnly}
* @private
*/
this.selectionOnlyTicketItem_ = selectionOnly;
/**
* Header-footer ticket item, used to read/write.
* @type {!print_preview.ticket_items.HeaderFooter}
* @private
*/
this.headerFooterTicketItem_ = headerFooter;
/**
* Header footer container element.
* @type {HTMLElement}
* @private
*/
this.headerFooterContainer_ = null;
/**
* Header footer checkbox.
* @type {HTMLInputElement}
* @private
*/
this.headerFooterCheckbox_ = null;
/**
* Fit-to-page container element.
* @type {HTMLElement}
* @private
*/
this.fitToPageContainer_ = null;
/**
* Fit-to-page checkbox.
* @type {HTMLInputElement}
* @private
*/
this.fitToPageCheckbox_ = null;
/**
* Duplex container element.
* @type {HTMLElement}
* @private
*/
this.duplexContainer_ = null;
/**
* Duplex checkbox.
* @type {HTMLInputElement}
* @private
*/
this.duplexCheckbox_ = null;
/**
* Print CSS backgrounds container element.
* @type {HTMLElement}
* @private
*/
this.cssBackgroundContainer_ = null;
/**
* Print CSS backgrounds checkbox.
* @type {HTMLInputElement}
* @private
*/
this.cssBackgroundCheckbox_ = null;
/**
* Print selection only container element.
* @type {HTMLElement}
* @private
*/
this.selectionOnlyContainer_ = null;
/**
* Print selection only checkbox.
* @type {HTMLInputElement}
* @private
*/
this.selectionOnlyCheckbox_ = null;
};
OtherOptionsSettings.prototype = {
__proto__: print_preview.Component.prototype,
/** @param {boolean} isEnabled Whether the settings is enabled. */
set isEnabled(isEnabled) {
this.headerFooterCheckbox_.disabled = !isEnabled;
this.fitToPageCheckbox_.disabled = !isEnabled;
this.duplexCheckbox_.disabled = !isEnabled;
this.cssBackgroundCheckbox_.disabled = !isEnabled;
},
/** @override */
enterDocument: function() {
print_preview.Component.prototype.enterDocument.call(this);
this.tracker.add(
this.headerFooterCheckbox_,
'click',
this.onHeaderFooterCheckboxClick_.bind(this));
this.tracker.add(
this.fitToPageCheckbox_,
'click',
this.onFitToPageCheckboxClick_.bind(this));
this.tracker.add(
this.duplexCheckbox_,
'click',
this.onDuplexCheckboxClick_.bind(this));
this.tracker.add(
this.cssBackgroundCheckbox_,
'click',
this.onCssBackgroundCheckboxClick_.bind(this));
this.tracker.add(
this.selectionOnlyCheckbox_,
'click',
this.onSelectionOnlyCheckboxClick_.bind(this));
this.tracker.add(
this.duplexTicketItem_,
print_preview.ticket_items.TicketItem.EventType.CHANGE,
this.onDuplexChange_.bind(this));
this.tracker.add(
this.fitToPageTicketItem_,
print_preview.ticket_items.TicketItem.EventType.CHANGE,
this.onFitToPageChange_.bind(this));
this.tracker.add(
this.cssBackgroundTicketItem_,
print_preview.ticket_items.TicketItem.EventType.CHANGE,
this.onCssBackgroundChange_.bind(this));
this.tracker.add(
this.selectionOnlyTicketItem_,
print_preview.ticket_items.TicketItem.EventType.CHANGE,
this.onSelectionOnlyChange_.bind(this));
this.tracker.add(
this.headerFooterTicketItem_,
print_preview.ticket_items.TicketItem.EventType.CHANGE,
this.onHeaderFooterChange_.bind(this));
},
/** @override */
exitDocument: function() {
print_preview.Component.prototype.exitDocument.call(this);
this.headerFooterContainer_ = null;
this.headerFooterCheckbox_ = null;
this.fitToPageContainer_ = null;
this.fitToPageCheckbox_ = null;
this.duplexContainer_ = null;
this.duplexCheckbox_ = null;
this.cssBackgroundContainer_ = null;
this.cssBackgroundCheckbox_ = null;
this.selectionOnlyContainer_ = null;
this.selectionOnlyCheckbox_ = null;
},
/** @override */
decorateInternal: function() {
this.headerFooterContainer_ = this.getElement().querySelector(
'.header-footer-container');
this.headerFooterCheckbox_ = this.headerFooterContainer_.querySelector(
'.header-footer-checkbox');
this.fitToPageContainer_ = this.getElement().querySelector(
'.fit-to-page-container');
this.fitToPageCheckbox_ = this.fitToPageContainer_.querySelector(
'.fit-to-page-checkbox');
this.duplexContainer_ = this.getElement().querySelector(
'.duplex-container');
this.duplexCheckbox_ = this.duplexContainer_.querySelector(
'.duplex-checkbox');
this.cssBackgroundContainer_ = this.getElement().querySelector(
'.css-background-container');
this.cssBackgroundCheckbox_ = this.cssBackgroundContainer_.querySelector(
'.css-background-checkbox');
this.selectionOnlyContainer_ = this.getElement().querySelector(
'.selection-only-container');
this.selectionOnlyCheckbox_ = this.selectionOnlyContainer_.querySelector(
'.selection-only-checkbox');
},
/**
* Updates the state of the entire other options settings area.
* @private
*/
updateContainerState_: function() {
if (this.headerFooterTicketItem_.isCapabilityAvailable() ||
this.fitToPageTicketItem_.isCapabilityAvailable() ||
this.duplexTicketItem_.isCapabilityAvailable() ||
this.cssBackgroundTicketItem_.isCapabilityAvailable() ||
this.selectionOnlyTicketItem_.isCapabilityAvailable()) {
fadeInOption(this.getElement());
} else {
fadeOutOption(this.getElement());
}
},
/**
* Called when the header-footer checkbox is clicked. Updates the print
* ticket.
* @private
*/
onHeaderFooterCheckboxClick_: function() {
this.headerFooterTicketItem_.updateValue(
this.headerFooterCheckbox_.checked);
},
/**
* Called when the fit-to-page checkbox is clicked. Updates the print
* ticket.
* @private
*/
onFitToPageCheckboxClick_: function() {
this.fitToPageTicketItem_.updateValue(this.fitToPageCheckbox_.checked);
},
/**
* Called when the duplex checkbox is clicked. Updates the print ticket.
* @private
*/
onDuplexCheckboxClick_: function() {
this.duplexTicketItem_.updateValue(this.duplexCheckbox_.checked);
},
/**
* Called when the print CSS backgrounds checkbox is clicked. Updates the
* print ticket store.
* @private
*/
onCssBackgroundCheckboxClick_: function() {
this.cssBackgroundTicketItem_.updateValue(
this.cssBackgroundCheckbox_.checked);
},
/**
* Called when the print selection only is clicked. Updates the
* print ticket store.
* @private
*/
onSelectionOnlyCheckboxClick_: function() {
this.selectionOnlyTicketItem_.updateValue(
this.selectionOnlyCheckbox_.checked);
},
/**
* Called when the duplex ticket item has changed. Updates the duplex
* checkbox.
* @private
*/
onDuplexChange_: function() {
setIsVisible(this.duplexContainer_,
this.duplexTicketItem_.isCapabilityAvailable());
this.duplexCheckbox_.checked = this.duplexTicketItem_.getValue();
this.updateContainerState_();
},
/**
* Called when the fit-to-page ticket item has changed. Updates the
* fit-to-page checkbox.
* @private
*/
onFitToPageChange_: function() {
setIsVisible(this.fitToPageContainer_,
this.fitToPageTicketItem_.isCapabilityAvailable());
this.fitToPageCheckbox_.checked = this.fitToPageTicketItem_.getValue();
this.updateContainerState_();
},
/**
* Called when the CSS background ticket item has changed. Updates the
* CSS background checkbox.
* @private
*/
onCssBackgroundChange_: function() {
setIsVisible(this.cssBackgroundContainer_,
this.cssBackgroundTicketItem_.isCapabilityAvailable());
this.cssBackgroundCheckbox_.checked =
this.cssBackgroundTicketItem_.getValue();
this.updateContainerState_();
},
/**
* Called when the print selection only ticket item has changed. Updates the
* CSS background checkbox.
* @private
*/
onSelectionOnlyChange_: function() {
setIsVisible(this.selectionOnlyContainer_,
this.selectionOnlyTicketItem_.isCapabilityAvailable());
this.selectionOnlyCheckbox_.checked =
this.selectionOnlyTicketItem_.getValue();
this.updateContainerState_();
},
/**
* Called when the header-footer ticket item has changed. Updates the
* header-footer checkbox.
* @private
*/
onHeaderFooterChange_: function() {
setIsVisible(this.headerFooterContainer_,
this.headerFooterTicketItem_.isCapabilityAvailable());
this.headerFooterCheckbox_.checked =
this.headerFooterTicketItem_.getValue();
this.updateContainerState_();
}
};
// Export
return {
OtherOptionsSettings: OtherOptionsSettings
};
});