| Index: chrome/browser/resources/print_preview/margin_settings.js
|
| diff --git a/chrome/browser/resources/print_preview/margin_settings.js b/chrome/browser/resources/print_preview/margin_settings.js
|
| index 28092a331dfe89593e91aab2b20f323fc8668378..8d8e67c861302f9fe4d9e9c01fda466b445624bc 100644
|
| --- a/chrome/browser/resources/print_preview/margin_settings.js
|
| +++ b/chrome/browser/resources/print_preview/margin_settings.js
|
| @@ -40,6 +40,8 @@ cr.define('print_preview', function() {
|
| * @return {boolean} true if they are equal.
|
| */
|
| isEqual: function(rhs) {
|
| + if (!rhs)
|
| + return false;
|
| return this[MarginSettings.TOP_GROUP] === rhs[MarginSettings.TOP_GROUP] &&
|
| this[MarginSettings.LEFT_GROUP] === rhs[MarginSettings.LEFT_GROUP] &&
|
| this[MarginSettings.RIGHT_GROUP] ===
|
| @@ -48,15 +50,11 @@ cr.define('print_preview', function() {
|
| rhs[MarginSettings.BOTTOM_GROUP];
|
| },
|
|
|
| - /**
|
| - * Copies the four margin values from |rhs|.
|
| - * @param {Margins} rhs The Margins object values to be used.
|
| - */
|
| - copy: function(rhs) {
|
| - this[MarginSettings.TOP_GROUP] = rhs[MarginSettings.TOP_GROUP];
|
| - this[MarginSettings.LEFT_GROUP] = rhs[MarginSettings.LEFT_GROUP];
|
| - this[MarginSettings.RIGHT_GROUP] = rhs[MarginSettings.RIGHT_GROUP];
|
| - this[MarginSettings.BOTTOM_GROUP] = rhs[MarginSettings.BOTTOM_GROUP];
|
| + clone: function() {
|
| + return new Margins(this[MarginSettings.TOP_GROUP],
|
| + this[MarginSettings.LEFT_GROUP],
|
| + this[MarginSettings.RIGHT_GROUP],
|
| + this[MarginSettings.BOTTOM_GROUP]);
|
| },
|
|
|
| /**
|
| @@ -93,6 +91,7 @@ cr.define('print_preview', function() {
|
| this.contentWidth_ = width;
|
| this.contentHeight_ = height;
|
| this.margins_ = new Margins(left, top, right, bottom);
|
| + this.margins_.roundToLocaleUnits();
|
| }
|
|
|
| PageLayout.prototype = {
|
| @@ -122,21 +121,18 @@ cr.define('print_preview', function() {
|
| this.marginsUI_ = null;
|
|
|
| // Holds the custom margin values in points (if set).
|
| - this.customMargins_ = new Margins(-1, -1, -1, -1);
|
| + this.customMargins_ = null;
|
| // Holds the previous custom margin values in points.
|
| - this.previousCustomMargins_ = new Margins(-1, -1, -1, -1);
|
| + this.previousCustomMargins_ = null;
|
| // Holds the width of the page in points.
|
| this.pageWidth_ = -1;
|
| // Holds the height of the page in points.
|
| this.pageHeight_ = -1;
|
| - // The last selected margin option.
|
| - this.lastSelectedOption_ = MarginSettings.MARGINS_VALUE_DEFAULT;
|
| -
|
| + // @type {boolean} True if the margins UI should be diplayed when the next
|
| + // |customEvents.PDF_LOADED| event occurs.
|
| + this.forceMarginsUIOnPDFLoad_ = false;
|
| // Holds the currently updated default page layout values.
|
| this.currentDefaultPageLayout = null;
|
| - // Holds the default page layout values when the custom margins was last
|
| - // selected.
|
| - this.previousDefaultPageLayout_ = null;
|
|
|
| // True if the margins UI should be shown regardless of mouse position.
|
| this.forceDisplayingMarginLines_ = true;
|
| @@ -203,6 +199,19 @@ cr.define('print_preview', function() {
|
| },
|
|
|
| /**
|
| + * Sets |this.customMargins_| according to |margins|.
|
| + * @param {{marginLeft: number, marginTop: number, marginRight: number,
|
| + * marginBottom: number}} margins An object holding the four margin
|
| + * values.
|
| + */
|
| + set customMargins(margins) {
|
| + this.customMargins_.left = margins.marginLeft;
|
| + this.customMargins_.top = margins.marginTop;
|
| + this.customMargins_.right = margins.marginRight;
|
| + this.customMargins_.bottom = margins.marginBottom;
|
| + },
|
| +
|
| + /**
|
| * @return {number} The value of the selected margin option.
|
| */
|
| get selectedMarginsValue() {
|
| @@ -211,13 +220,26 @@ cr.define('print_preview', function() {
|
| },
|
|
|
| /**
|
| - * Sets the current margin selection to |lastUsedMarginsType|.
|
| - * @param {number} lastUsedMarginsType An integer value identifying a margin
|
| + * Sets the current margin selection to |lastUsedMarginType|.
|
| + * @param {number} lastUsedMarginType An integer value identifying a margin
|
| * type according to MarginType enum in printing/print_job_constants.h.
|
| - */
|
| - setLastUsedMarginsType: function(lastUsedMarginsType) {
|
| + * @param {Object} lastUsedCustomMargins The last used custom margins. If
|
| + * custom margins have not been used before
|
| + * |margin{Top|Bottom|Left|Right}| attributes are missing.
|
| + */
|
| + setLastUsedMargins: function(lastUsedMarginsSettings) {
|
| + var lastUsedMarginsType = lastUsedMarginsSettings['marginsType']
|
| + this.forceMarginsUIOnPDFLoad_ =
|
| + lastUsedMarginsType == MarginSettings.MARGINS_VALUE_CUSTOM;
|
| this.marginList_.selectedIndex =
|
| this.getMarginOptionIndexByValue_(lastUsedMarginsType);
|
| + if (lastUsedMarginsSettings.hasOwnProperty('marginTop') &&
|
| + lastUsedMarginsSettings.hasOwnProperty('marginBottom') &&
|
| + lastUsedMarginsSettings.hasOwnProperty('marginRight') &&
|
| + lastUsedMarginsSettings.hasOwnProperty('marginLeft')) {
|
| + this.customMargins_ = new Margins(-1, -1, -1 , -1);
|
| + this.customMargins = lastUsedMarginsSettings;
|
| + }
|
| },
|
|
|
| /**
|
| @@ -290,9 +312,11 @@ cr.define('print_preview', function() {
|
| requestPreviewIfNeeded_: function() {
|
| if (!this.areMarginSettingsValid())
|
| return;
|
| +
|
| if (this.customMargins_.isEqual(this.previousCustomMargins_))
|
| return;
|
| - this.previousCustomMargins_.copy(this.customMargins_);
|
| +
|
| + this.previousCustomMargins_ = this.customMargins_.clone();
|
| setDefaultValuesAndRegeneratePreview(false);
|
| },
|
|
|
| @@ -302,6 +326,8 @@ cr.define('print_preview', function() {
|
| * @private
|
| */
|
| onSidebarMouseOver_: function(e) {
|
| + $('mainview').onmouseover = this.onMainviewMouseOver_.bind(this);
|
| + $('navbar-container').onmouseover = null;
|
| if (!this.forceDisplayingMarginLines_)
|
| this.marginsUI.hide(false);
|
| },
|
| @@ -312,6 +338,8 @@ cr.define('print_preview', function() {
|
| * @private
|
| */
|
| onMainviewMouseOver_: function() {
|
| + $('mainview').onmouseover = null;
|
| + $('navbar-container').onmouseover = this.onSidebarMouseOver_.bind(this);
|
| this.forceDisplayingMarginLines_ = false;
|
| this.marginsUI.show();
|
| },
|
| @@ -368,7 +396,7 @@ cr.define('print_preview', function() {
|
| * @return {boolean} True if the margin settings are valid.
|
| */
|
| areMarginSettingsValid: function() {
|
| - if (this.marginsUI_ == null)
|
| + if (!this.isCustomMarginsSelected() || !this.marginsUI_)
|
| return true;
|
|
|
| var pairs = this.marginsUI.pairsAsList;
|
| @@ -474,6 +502,8 @@ cr.define('print_preview', function() {
|
| * @private
|
| */
|
| removeCustomMarginEventListeners_: function() {
|
| + if (!this.marginsUI_)
|
| + return;
|
| $('mainview').onmouseover = null;
|
| $('navbar-container').onmouseover = null;
|
| this.eventTracker_.remove(this.marginsUI, customEvents.MARGIN_LINE_DRAG);
|
| @@ -532,8 +562,6 @@ cr.define('print_preview', function() {
|
| this.onDefaultMinimumNoMarginsSelected_();
|
| else if (this.isCustomMarginsSelected())
|
| this.onCustomMarginsSelected_();
|
| -
|
| - this.lastSelectedOption_ = this.selectedMarginsValue;
|
| },
|
|
|
| /**
|
| @@ -543,6 +571,7 @@ cr.define('print_preview', function() {
|
| onDefaultMinimumNoMarginsSelected_: function() {
|
| this.removeCustomMarginEventListeners_();
|
| this.forceDisplayingMarginLines_ = true;
|
| + this.previousCustomMargins_ = null;
|
| setDefaultValuesAndRegeneratePreview(false);
|
| },
|
|
|
| @@ -551,20 +580,18 @@ cr.define('print_preview', function() {
|
| * @private
|
| */
|
| onCustomMarginsSelected_: function() {
|
| - this.addCustomMarginEventListeners_();
|
| + var customMarginsNotSpecified = !this.customMargins_;
|
| + this.updatePageData_();
|
|
|
| - this.customMargins_ = this.currentDefaultPageLayout.margins_;
|
| - this.customMargins_.roundToLocaleUnits();
|
| - this.previousCustomMargins_.copy(this.customMargins_);
|
| -
|
| - if (this.previousDefaultPageLayout_ != this.currentDefaultPageLayout) {
|
| - this.pageWidth_ = this.currentDefaultPageLayout.pageWidth;
|
| - this.pageHeight_ = this.currentDefaultPageLayout.pageHeight;
|
| + if (customMarginsNotSpecified) {
|
| + this.previousCustomMargins_ = this.customMargins_.clone();
|
| + this.drawCustomMarginsUI_();
|
| + this.addCustomMarginEventListeners_();
|
| + this.marginsUI.show();
|
| + } else {
|
| + this.forceMarginsUIOnPDFLoad_ = true;
|
| + this.requestPreviewIfNeeded_();
|
| }
|
| -
|
| - this.previousDefaultPageLayout_ = this.currentDefaultPageLayout;
|
| - this.drawCustomMarginsUI_();
|
| - this.marginsUI.show();
|
| },
|
|
|
| /**
|
| @@ -627,7 +654,8 @@ cr.define('print_preview', function() {
|
| MarginSettings.OPTION_INDEX_DEFAULT].selected = true;
|
| this.removeCustomMarginEventListeners_();
|
| this.forceDisplayingMarginLines_ = true;
|
| - this.lastSelectedOption_ = MarginSettings.MARGINS_VALUE_DEFAULT;
|
| + this.customMargins_ = null;
|
| + this.previousCustomMargins_ = null;
|
| }
|
| },
|
|
|
| @@ -636,15 +664,35 @@ cr.define('print_preview', function() {
|
| * @private
|
| */
|
| onPDFLoaded_: function() {
|
| - if (!previewModifiable)
|
| + if (!previewModifiable) {
|
| fadeOutOption(this.marginsOption_);
|
| + return;
|
| + }
|
| +
|
| + if (this.forceMarginsUIOnPDFLoad_) {
|
| + this.updatePageData_();
|
| + this.drawCustomMarginsUI_();
|
| + this.addCustomMarginEventListeners_();
|
| + this.marginsUI.show();
|
| + this.forceMarginsUIOnPDFLoad_ = false;
|
| + }
|
| + },
|
| +
|
| + /**
|
| + * Updates |this.customMargins_|, |this.pageWidth_|, |this.pageHeight_|.
|
| + * @private
|
| + */
|
| + updatePageData_: function() {
|
| + if (!this.customMargins_)
|
| + this.customMargins_ = this.currentDefaultPageLayout.margins_.clone();
|
| +
|
| + this.pageWidth_ = this.currentDefaultPageLayout.pageWidth;
|
| + this.pageHeight_ = this.currentDefaultPageLayout.pageHeight;
|
| }
|
| };
|
|
|
| return {
|
| MarginSettings: MarginSettings,
|
| PageLayout: PageLayout,
|
| - setNumberFormatAndMeasurementSystem:
|
| - MarginSettings.setNumberFormatAndMeasurementSystem,
|
| };
|
| });
|
|
|