Chromium Code Reviews| 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..9986f82bfd40d1fa2f893e340546fe1282c191aa 100644 |
| --- a/chrome/browser/resources/print_preview/margin_settings.js |
| +++ b/chrome/browser/resources/print_preview/margin_settings.js |
| @@ -48,15 +48,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 +89,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 +119,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 +197,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 +218,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 +310,12 @@ cr.define('print_preview', function() { |
| requestPreviewIfNeeded_: function() { |
| if (!this.areMarginSettingsValid()) |
| return; |
| - if (this.customMargins_.isEqual(this.previousCustomMargins_)) |
| + |
| + if (this.previousCustomMargins_ && |
|
vandebo (ex-Chrome)
2011/11/10 18:39:14
Can you incorporate this check into the isEqual fu
dpapad
2011/11/10 20:04:01
Done.
|
| + this.customMargins_.isEqual(this.previousCustomMargins_)) |
| return; |
| - this.previousCustomMargins_.copy(this.customMargins_); |
| + |
| + this.previousCustomMargins_ = this.customMargins_.clone(); |
| setDefaultValuesAndRegeneratePreview(false); |
| }, |
| @@ -302,6 +325,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 +337,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 +395,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 +501,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 +561,6 @@ cr.define('print_preview', function() { |
| this.onDefaultMinimumNoMarginsSelected_(); |
| else if (this.isCustomMarginsSelected()) |
| this.onCustomMarginsSelected_(); |
| - |
| - this.lastSelectedOption_ = this.selectedMarginsValue; |
| }, |
| /** |
| @@ -543,6 +570,7 @@ cr.define('print_preview', function() { |
| onDefaultMinimumNoMarginsSelected_: function() { |
| this.removeCustomMarginEventListeners_(); |
| this.forceDisplayingMarginLines_ = true; |
| + this.previousCustomMargins_ = null; |
| setDefaultValuesAndRegeneratePreview(false); |
| }, |
| @@ -551,20 +579,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 +653,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 +663,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, |
| }; |
| }); |