summaryrefslogtreecommitdiffstats
path: root/chrome/browser/resources/print_preview
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/resources/print_preview')
-rw-r--r--chrome/browser/resources/print_preview/margin_settings.js130
-rw-r--r--chrome/browser/resources/print_preview/print_preview.js49
2 files changed, 119 insertions, 60 deletions
diff --git a/chrome/browser/resources/print_preview/margin_settings.js b/chrome/browser/resources/print_preview/margin_settings.js
index 28092a3..8d8e67c 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,
};
});
diff --git a/chrome/browser/resources/print_preview/print_preview.js b/chrome/browser/resources/print_preview/print_preview.js
index 2491944..036f549 100644
--- a/chrome/browser/resources/print_preview/print_preview.js
+++ b/chrome/browser/resources/print_preview/print_preview.js
@@ -164,9 +164,25 @@ function onLoad() {
$('printer-list').onchange = updateControlsWithSelectedPrinterCapabilities;
previewArea.showLoadingAnimation();
- chrome.send('getInitiatorTabTitle');
- chrome.send('getDefaultPrinter');
- chrome.send('getNumberFormatAndMeasurementSystem');
+ chrome.send('getInitialSettings');
+}
+
+/**
+ * @param {string} initiatorTabTitle The title of the initiator tab.
+ * @param {object} initialSettings An object containing all the initial
+ * settings.
+ */
+function setInitialSettings(initialSettings) {
+ setInitiatorTabTitle(initialSettings['initiatorTabTitle']);
+ previewModifiable = initialSettings['previewModifiable'];
+ if (previewModifiable) {
+ print_preview.MarginSettings.setNumberFormatAndMeasurementSystem(
+ initialSettings['numberFormat'],
+ initialSettings['measurementSystem']);
+ marginSettings.setLastUsedMargins(initialSettings);
+ }
+ setDefaultPrinter(initialSettings['printerName'],
+ initialSettings['cloudPrintData']);
}
/**
@@ -284,7 +300,9 @@ function updateControlsWithSelectedPrinterCapabilities() {
lastSelectedPrinterIndex = selectedIndex;
// Regenerate the preview data based on selected printer settings.
- setDefaultValuesAndRegeneratePreview(true);
+ // Do not reset the margins if no preview request has been made.
+ var resetMargins = lastPreviewRequestID != initialPreviewRequestID;
+ setDefaultValuesAndRegeneratePreview(resetMargins);
}
}
@@ -304,7 +322,9 @@ function doUpdateCloudPrinterCapabilities(printer) {
lastSelectedPrinterIndex = selectedIndex;
// Regenerate the preview data based on selected printer settings.
- setDefaultValuesAndRegeneratePreview(true);
+ // Do not reset the margins if no preview request has been made.
+ var resetMargins = lastPreviewRequestID != initialPreviewRequestID;
+ setDefaultValuesAndRegeneratePreview(resetMargins);
}
/**
@@ -578,18 +598,14 @@ function fileSelectionCompleted() {
* @param {string} printer Name of the default printer. Empty if none.
* @param {string} cloudPrintData Cloud print related data to restore if
* the default printer is a cloud printer.
- * @param {number} lastUsedMarginsType Indicates the last used margins type
- * (matches enum MarginType in printing/print_job_constants.h.
*/
-function setDefaultPrinter(printer_name, cloudPrintData, lastUsedMarginsType) {
- // Setting the margin selection to the last used one.
- marginSettings.setLastUsedMarginsType(lastUsedMarginsType);
+function setDefaultPrinter(printerName, cloudPrintData) {
// Add a placeholder value so the printer list looks valid.
addDestinationListOption('', '', true, true, true);
- if (printer_name) {
- defaultOrLastUsedPrinterName = printer_name;
+ if (printerName) {
+ defaultOrLastUsedPrinterName = printerName;
if (cloudPrintData) {
- cloudprint.setDefaultPrinter(printer_name,
+ cloudprint.setDefaultPrinter(printerName,
cloudPrintData,
addDestinationListOptionAtPosition,
doUpdateCloudPrinterCapabilities);
@@ -779,16 +795,13 @@ function setPluginPreviewPageCount() {
* Update the page count and check the page range.
* Called from PrintPreviewUI::OnDidGetPreviewPageCount().
* @param {number} pageCount The number of pages.
- * @param {boolean} isModifiable Indicates whether the previewed document can be
- * modified.
* @param {number} previewResponseId The preview request id that resulted in
* this response.
*/
-function onDidGetPreviewPageCount(pageCount, isModifiable, previewResponseId) {
+function onDidGetPreviewPageCount(pageCount, previewResponseId) {
if (!isExpectedPreviewResponse(previewResponseId))
return;
pageSettings.updateState(pageCount);
- previewModifiable = isModifiable;
if (!previewModifiable && pageSettings.requestPrintPreviewIfNeeded())
return;
@@ -1058,8 +1071,6 @@ PrintSettings.prototype.save = function() {
/**
* Updates the title of the print preview tab according to |initiatorTabTitle|.
- * Called from PrintPreviewUI::OnGetInitiatorTabTitle as a result of sending a
- * 'getInitiatorTabTitle' message.
* @param {string} initiatorTabTitle The title of the initiator tab.
*/
function setInitiatorTabTitle(initiatorTabTitle) {