15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved.
25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be
35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file.
45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liucr.define('print_preview.ticket_items', function() {
65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  'use strict';
75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  /**
95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu   * Media size ticket item.
105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu   * @param {!print_preview.AppState} appState App state used to persist media
115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu   *     size selection.
125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu   * @param {!print_preview.DestinationStore} destinationStore Destination store
135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu   *     used to determine if a destination has the media size capability.
14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)   * @param {!print_preview.DocumentInfo} documentInfo Information about the
15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)   *     document to print.
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @param {!print_preview.ticket_items.MarginsType} marginsType Reset when
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   *     landscape value changes.
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   * @param {!print_preview.ticket_items.CustomMargins} customMargins Reset when
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   *     landscape value changes.
205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu   * @constructor
215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu   * @extends {print_preview.ticket_items.TicketItem}
225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu   */
23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  function MediaSize(
24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      appState, destinationStore, documentInfo, marginsType, customMargins) {
255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    print_preview.ticket_items.TicketItem.call(
265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        this,
275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        appState,
285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        print_preview.AppState.Field.MEDIA_SIZE,
29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        destinationStore,
30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        documentInfo);
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    /**
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     * Margins ticket item. Reset when this item changes.
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     * @private {!print_preview.ticket_items.MarginsType}
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     */
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    this.marginsType_ = marginsType;
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    /**
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     * Custom margins ticket item. Reset when this item changes.
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     * @private {!print_preview.ticket_items.CustomMargins}
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     */
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    this.customMargins_ = customMargins;
435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  };
445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  MediaSize.prototype = {
465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    __proto__: print_preview.ticket_items.TicketItem.prototype,
475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    /** @override */
495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    wouldValueBeValid: function(value) {
505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      if (!this.isCapabilityAvailable()) {
515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        return false;
525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      }
535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      return this.capability.option.some(function(option) {
545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        return option.width_microns == value.width_microns &&
555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu               option.height_microns == value.height_microns &&
565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu               option.is_continuous_feed == value.is_continuous_feed &&
575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu               option.vendor_id == value.vendor_id;
585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      });
595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    },
605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    /** @override */
625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    isCapabilityAvailable: function() {
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      var knownSizeToSaveAsPdf =
646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          (!this.getDocumentInfoInternal().isModifiable ||
656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)           this.getDocumentInfoInternal().hasCssMediaStyles) &&
66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)          this.getSelectedDestInternal() &&
67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)          this.getSelectedDestInternal().id ==
68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)              print_preview.Destination.GooglePromotedId.SAVE_AS_PDF;
696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      return !knownSizeToSaveAsPdf && !!this.capability;
705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    },
715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    /** @override */
73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    isValueEqual: function(value) {
74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      var myValue = this.getValue();
75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return myValue.width_microns == value.width_microns &&
76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)             myValue.height_microns == value.height_microns &&
77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)             myValue.is_continuous_feed == value.is_continuous_feed &&
78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)             myValue.vendor_id == value.vendor_id;
79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    /** @return {Object} Media size capability of the selected destination. */
825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    get capability() {
835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      var destination = this.getSelectedDestInternal();
845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      return (destination &&
855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu              destination.capabilities &&
865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu              destination.capabilities.printer &&
875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu              destination.capabilities.printer.media_size) ||
885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu             null;
895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    },
905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    /** @override */
925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    getDefaultValueInternal: function() {
935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      var defaultOptions = this.capability.option.filter(function(option) {
945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        return option.is_default;
955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      });
965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      return defaultOptions.length > 0 ? defaultOptions[0] : null;
975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    },
985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    /** @override */
1005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    getCapabilityNotAvailableValueInternal: function() {
1015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      return {};
102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    },
103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    /** @override */
105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    updateValueInternal: function(value) {
106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      var updateMargins = !this.isValueEqual(value);
107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      print_preview.ticket_items.TicketItem.prototype.updateValueInternal.call(
108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          this, value);
109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      if (updateMargins) {
110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        // Reset the user set margins when media size changes.
111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        this.marginsType_.updateValue(
112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            print_preview.ticket_items.MarginsType.Value.DEFAULT);
113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        this.customMargins_.updateValue(null);
114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      }
1155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    }
1165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  };
1175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
1185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Export
1195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  return {
1205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    MediaSize: MediaSize
1215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  };
1225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu});
123