| // 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'; |
| |
| /** |
| * Data model which contains information related to the document to print. |
| * @constructor |
| * @extends {cr.EventTarget} |
| */ |
| function DocumentInfo() { |
| cr.EventTarget.call(this); |
| |
| /** |
| * Whether the document is styled by CSS media styles. |
| * @type {boolean} |
| * @private |
| */ |
| this.hasCssMediaStyles_ = false; |
| |
| /** |
| * Whether the document has selected content. |
| * @type {boolean} |
| * @private |
| */ |
| this.hasSelection_ = false; |
| |
| /** |
| * Whether the document to print is modifiable (i.e. can be reflowed). |
| * @type {boolean} |
| * @private |
| */ |
| this.isModifiable_ = true; |
| |
| /** |
| * Whether scaling of the document is prohibited. |
| * @type {boolean} |
| * @private |
| */ |
| this.isScalingDisabled_ = false; |
| |
| /** |
| * Margins of the document in points. |
| * @type {print_preview.Margins} |
| * @private |
| */ |
| this.margins_ = null; |
| |
| /** |
| * Number of pages in the document to print. |
| * @type {number} |
| * @private |
| */ |
| this.pageCount_ = 0; |
| |
| // Create the document info with some initial settings. Actual |
| // page-related information won't be set until preview generation occurs, |
| // so we'll use some defaults until then. This way, the print ticket store |
| // will be valid even if no preview can be generated. |
| var initialPageSize = new print_preview.Size(612, 792); // 8.5"x11" |
| |
| /** |
| * Size of the pages of the document in points. |
| * @type {!print_preview.Size} |
| * @private |
| */ |
| this.pageSize_ = initialPageSize; |
| |
| /** |
| * Printable area of the document in points. |
| * @type {!print_preview.PrintableArea} |
| * @private |
| */ |
| this.printableArea_ = new print_preview.PrintableArea( |
| new print_preview.Coordinate2d(0, 0), initialPageSize); |
| |
| /** |
| * Title of document. |
| * @type {string} |
| * @private |
| */ |
| this.title_ = ''; |
| |
| /** |
| * Whether this data model has been initialized. |
| * @type {boolean} |
| * @private |
| */ |
| this.isInitialized_ = false; |
| }; |
| |
| /** |
| * Event types dispatched by this data model. |
| * @enum {string} |
| */ |
| DocumentInfo.EventType = { |
| CHANGE: 'print_preview.DocumentInfo.CHANGE' |
| }; |
| |
| DocumentInfo.prototype = { |
| __proto__: cr.EventTarget.prototype, |
| |
| /** @return {boolean} Whether the document is styled by CSS media styles. */ |
| get hasCssMediaStyles() { |
| return this.hasCssMediaStyles_; |
| }, |
| |
| /** @return {boolean} Whether the document has selected content. */ |
| get hasSelection() { |
| return this.hasSelection_; |
| }, |
| |
| /** |
| * @return {boolean} Whether the document to print is modifiable (i.e. can |
| * be reflowed). |
| */ |
| get isModifiable() { |
| return this.isModifiable_; |
| }, |
| |
| /** @return {boolean} Whether scaling of the document is prohibited. */ |
| get isScalingDisabled() { |
| return this.isScalingDisabled_; |
| }, |
| |
| /** @return {print_preview.Margins} Margins of the document in points. */ |
| get margins() { |
| return this.margins_; |
| }, |
| |
| /** @return {number} Number of pages in the document to print. */ |
| get pageCount() { |
| return this.pageCount_; |
| }, |
| |
| /** |
| * @return {!print_preview.Size} Size of the pages of the document in |
| * points. |
| */ |
| get pageSize() { |
| return this.pageSize_; |
| }, |
| |
| /** |
| * @return {!print_preview.PrintableArea} Printable area of the document in |
| * points. |
| */ |
| get printableArea() { |
| return this.printableArea_; |
| }, |
| |
| /** @return {string} Title of document. */ |
| get title() { |
| return this.title_; |
| }, |
| |
| /** |
| * Initializes the state of the data model and dispatches a CHANGE event. |
| * @param {boolean} isModifiable Whether the document is modifiable. |
| * @param {string} title Title of the document. |
| * @param {boolean} hasSelection Whether the document has user-selected |
| * content. |
| */ |
| init: function(isModifiable, title, hasSelection) { |
| this.isModifiable_ = isModifiable; |
| this.title_ = title; |
| this.hasSelection_ = hasSelection; |
| this.isInitialized_ = true; |
| cr.dispatchSimpleEvent(this, DocumentInfo.EventType.CHANGE); |
| }, |
| |
| /** |
| * Updates whether scaling is disabled for the document and dispatches a |
| * CHANGE event. |
| * @param {boolean} isScalingDisabled Whether scaling of the document is |
| * prohibited. |
| */ |
| updateIsScalingDisabled: function(isScalingDisabled) { |
| if (this.isInitialized_ && this.isScalingDisabled_ != isScalingDisabled) { |
| this.isScalingDisabled_ = isScalingDisabled; |
| cr.dispatchSimpleEvent(this, DocumentInfo.EventType.CHANGE); |
| } |
| }, |
| |
| /** |
| * Updates the total number of pages in the document and dispatches a CHANGE |
| * event. |
| * @param {number} pageCount Number of pages in the document. |
| */ |
| updatePageCount: function(pageCount) { |
| if (this.isInitialized_ && this.pageCount_ != pageCount) { |
| this.pageCount_ = pageCount; |
| cr.dispatchSimpleEvent(this, DocumentInfo.EventType.CHANGE); |
| } |
| }, |
| |
| /** |
| * Updates information about each page and dispatches a CHANGE event. |
| * @param {!print_preview.PrintableArea} printableArea Printable area of the |
| * document in points. |
| * @param {!print_preview.Size} pageSize Size of the pages of the document |
| * in points. |
| * @param {boolean} hasCssMediaStyles Whether the document is styled by CSS |
| * media styles. |
| * @param {print_preview.Margins} margins Margins of the document in points. |
| */ |
| updatePageInfo: function( |
| printableArea, pageSize, hasCssMediaStyles, margins) { |
| if (this.isInitialized_ && |
| (!this.printableArea_.equals(printableArea) || |
| !this.pageSize_.equals(pageSize) || |
| this.hasCssMediaStyles_ != hasCssMediaStyles || |
| this.margins_ == null || !this.margins_.equals(margins))) { |
| this.printableArea_ = printableArea; |
| this.pageSize_ = pageSize; |
| this.hasCssMediaStyles_ = hasCssMediaStyles; |
| this.margins_ = margins; |
| cr.dispatchSimpleEvent(this, DocumentInfo.EventType.CHANGE); |
| } |
| } |
| }; |
| |
| // Export |
| return { |
| DocumentInfo: DocumentInfo |
| }; |
| }); |