diff options
author | kmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-17 00:44:37 +0000 |
---|---|---|
committer | kmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-17 00:44:37 +0000 |
commit | 97c29575ab1cc3b1bcb53449c3d9627ee1382d04 (patch) | |
tree | 1633e14bbcc4cdb0c451a93c1982ddcd3b03ecad /chrome/browser | |
parent | 1bf1b92d64df4e58c7f9b17285fc67ad4025feb2 (diff) | |
download | chromium_src-97c29575ab1cc3b1bcb53449c3d9627ee1382d04.zip chromium_src-97c29575ab1cc3b1bcb53449c3d9627ee1382d04.tar.gz chromium_src-97c29575ab1cc3b1bcb53449c3d9627ee1382d04.tar.bz2 |
PrintPreview:[MAC] Added "Open PDF In Preview" option to open the pdf in native preview app.
BUG=101724
TEST=Preview a webpage. Click "Open PDF In Preview" option Observe that the pdf is displayed in native preview app. Complete the printing workflow by clicking "Print" or
"Cancel" button at the bottom of the preview app.
Review URL: http://codereview.chromium.org/8425008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@110398 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
6 files changed, 95 insertions, 12 deletions
diff --git a/chrome/browser/resources/print_preview/preview_area.js b/chrome/browser/resources/print_preview/preview_area.js index 3a86cef..37d665c 100644 --- a/chrome/browser/resources/print_preview/preview_area.js +++ b/chrome/browser/resources/print_preview/preview_area.js @@ -195,6 +195,14 @@ cr.define('print_preview', function() { }, /** + * Clears the custom message with dots animation. + */ + clearCustomMessageWithDots: function() { + this.customMessageWithDots_.innerHTML = ''; + this.customMessageWithDots_.hidden = true; + }, + + /** * Display an error message in the center of the preview area. * @param {string} errorMessage The error message to be displayed. */ @@ -227,6 +235,8 @@ cr.define('print_preview', function() { this.errorButton.hidden = false; $('system-dialog-throbber').hidden = true; $('native-print-dialog-throbber').hidden = true; + if (cr.isMac) + $('open-preview-app-throbber').hidden = true; this.displayErrorMessageAndNotify(errorMessage); } }; diff --git a/chrome/browser/resources/print_preview/print_preview.css b/chrome/browser/resources/print_preview/print_preview.css index 11a455e..e0acd94 100644 --- a/chrome/browser/resources/print_preview/print_preview.css +++ b/chrome/browser/resources/print_preview/print_preview.css @@ -102,7 +102,7 @@ h1 { font-weight: 300; } -#system-dialog-link { +.preview-link-button { -webkit-padding-start: 16px; outline: 0; padding-top: 10px; @@ -110,11 +110,11 @@ h1 { text-align: start; } -#system-dialog-link:hover:not(:disabled) { +.preview-link-button:hover:not(:disabled) { text-decoration: underline; } -#system-dialog-link:disabled { +.preview-link-button:disabled { color: rgba(0, 0, 0, .5); cursor: default; text-shadow: none; diff --git a/chrome/browser/resources/print_preview/print_preview.html b/chrome/browser/resources/print_preview/print_preview.html index b7bea96..3416cec 100644 --- a/chrome/browser/resources/print_preview/print_preview.html +++ b/chrome/browser/resources/print_preview/print_preview.html @@ -49,15 +49,25 @@ <include src="header_footer_settings.html"></include> <div> <if expr="pp_ifdef('chromeos')"> - <button id="system-dialog-link" class="link-button" + <button id="system-dialog-link" + class="link-button preview-link-button" i18n-content="cloudPrintDialogOption"></button> </if> <if expr="not pp_ifdef('chromeos')"> - <button id="system-dialog-link" class="link-button" + <button id="system-dialog-link" + class="link-button preview-link-button" i18n-content="systemDialogOption"></button> </if> <div id="system-dialog-throbber" class="throbber" hidden></div> </div> + <if expr="os == 'darwin'"> + <div> + <button id="open-pdf-in-preview-link" + class="link-button preview-link-button" + i18n-content="openPdfInPreviewOption"></button> + <div id="open-preview-app-throbber" class="throbber" hidden></div> + </div> + </if> </div> </div> <div id="mainview"> diff --git a/chrome/browser/resources/print_preview/print_preview.js b/chrome/browser/resources/print_preview/print_preview.js index dc7d77f..824b5dc 100644 --- a/chrome/browser/resources/print_preview/print_preview.js +++ b/chrome/browser/resources/print_preview/print_preview.js @@ -83,6 +83,9 @@ var previewArea; // dialog. var showingSystemDialog = false; +// True if the user has clicked 'Open PDF in Preview' option. +var previewAppRequested = false; + // The range of options in the printer dropdown controlled by cloud print. var firstCloudPrintOptionPos = 0; var lastCloudPrintOptionPos = firstCloudPrintOptionPos; @@ -151,6 +154,10 @@ function onLoad() { } $('system-dialog-link').addEventListener('click', onSystemDialogLinkClicked); + if (cr.isMac) { + $('open-pdf-in-preview-link').addEventListener( + 'click', onOpenPdfInPreviewLinkClicked); + } $('mainview').parentElement.removeChild($('dummy-viewer')); $('printer-list').disabled = true; @@ -198,6 +205,15 @@ function disableInputElementsInSidebar() { } /** + * Enables the input elements in the sidebar. + */ +function enableInputElementsInSidebar() { + var els = $('navbar-container').querySelectorAll('input, button, select'); + for (var i = 0; i < els.length; i++) + els[i].disabled = false; +} + +/** * Disables the controls in the sidebar, shows the throbber and instructs the * backend to open the native print dialog. */ @@ -212,6 +228,20 @@ function onSystemDialogLinkClicked() { } /** + * Disables the controls in the sidebar, shows the throbber and instructs the + * backend to open the pdf in native preview app. This is only for Mac. + */ +function onOpenPdfInPreviewLinkClicked() { + if (previewAppRequested) + return; + previewAppRequested = true; + disableInputElementsInSidebar(); + $('open-preview-app-throbber').hidden = false; + printHeader.disableCancelButton(); + requestToPrintDocument(); +} + +/** * Similar to onSystemDialogLinkClicked(), but specific to the * 'Launch native print dialog' UI. */ @@ -233,6 +263,9 @@ function updateControlsWithSelectedPrinterCapabilities() { var selectedIndex = printerList.selectedIndex; if (selectedIndex < 0) return; + if (cr.isMac) + $('open-pdf-in-preview-link').disabled = false; + var skip_refresh = false; var selectedValue = printerList.options[selectedIndex].value; if (cloudprint.isCloudPrint(printerList.options[selectedIndex])) { @@ -461,7 +494,10 @@ function requestToPrintDocument() { var printToPDF = selectedPrinterName == PRINT_TO_PDF; var printWithCloudPrint = selectedPrinterName == PRINT_WITH_CLOUD_PRINT; if (hasPendingPrintDocumentRequest) { - if (printToPDF) { + if (previewAppRequested) { + previewArea.showCustomMessage( + localStrings.getString('openingPDFInPreview')); + } else if (printToPDF) { sendPrintDocumentRequest(); } else if (printWithCloudPrint) { previewArea.showCustomMessage( @@ -474,7 +510,7 @@ function requestToPrintDocument() { return; } - if (printToPDF) { + if (printToPDF || previewAppRequested) { sendPrintDocumentRequest(); } else { window.setTimeout(function() { sendPrintDocumentRequest(); }, 1000); @@ -496,7 +532,12 @@ function sendPrintDocumentRequest() { var printerList = $('printer-list'); var printer = printerList[printerList.selectedIndex]; chrome.send('saveLastPrinter', [printer.value, cloudprint.getData(printer)]); - chrome.send('print', [JSON.stringify(getSettings()), + + var settings = getSettings(); + if (cr.isMac && previewAppRequested) + settings.OpenPDFInPreview = true; + + chrome.send('print', [JSON.stringify(settings), cloudprint.getPrintTicketJSON(printer)]); } @@ -744,6 +785,16 @@ function printPreviewFailed() { * Called from PrintPreviewMessageHandler::OnInvalidPrinterSettings(). */ function invalidPrinterSettings() { + if (cr.isMac) { + if (previewAppRequested) { + $('open-preview-app-throbber').hidden = true; + previewArea.clearCustomMessageWithDots(); + previewAppRequested = false; + hasPendingPrintDocumentRequest = false; + enableInputElementsInSidebar(); + } + $('open-pdf-in-preview-link').disabled = true; + } previewArea.displayErrorMessageAndNotify( localStrings.getString('invalidPrinterSettings')); } diff --git a/chrome/browser/ui/webui/print_preview_data_source.cc b/chrome/browser/ui/webui/print_preview_data_source.cc index b3a45d6..5071e0d 100644 --- a/chrome/browser/ui/webui/print_preview_data_source.cc +++ b/chrome/browser/ui/webui/print_preview_data_source.cc @@ -56,7 +56,10 @@ PrintPreviewDataSource::PrintPreviewDataSource() AddLocalizedString("printing", IDS_PRINT_PREVIEW_PRINTING); AddLocalizedString("printingToPDFInProgress", IDS_PRINT_PREVIEW_PRINTING_TO_PDF_IN_PROGRESS); - +#if defined(OS_MACOSX) + AddLocalizedString("openingPDFInPreview", + IDS_PRINT_PREVIEW_OPENING_PDF_IN_PREVIEW); +#endif AddLocalizedString("destinationLabel", IDS_PRINT_PREVIEW_DESTINATION_LABEL); AddLocalizedString("copiesLabel", IDS_PRINT_PREVIEW_COPIES_LABEL); AddLocalizedString("examplePageRangeText", @@ -100,6 +103,10 @@ PrintPreviewDataSource::PrintPreviewDataSource() AddLocalizedString("printWithCloudPrint", IDS_PRINT_PREVIEW_PRINT_WITH_CLOUD_PRINT); #endif +#if defined(OS_MACOSX) + AddLocalizedString("openPdfInPreviewOption", + IDS_PRINT_PREVIEW_OPEN_PDF_IN_PREVIEW_APP); +#endif AddLocalizedString("pageRangeInstruction", IDS_PRINT_PREVIEW_PAGE_RANGE_INSTRUCTION); AddLocalizedString("copiesInstruction", IDS_PRINT_PREVIEW_COPIES_INSTRUCTION); diff --git a/chrome/browser/ui/webui/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview_handler.cc index f3fb0df..0f04e4a 100644 --- a/chrome/browser/ui/webui/print_preview_handler.cc +++ b/chrome/browser/ui/webui/print_preview_handler.cc @@ -401,18 +401,23 @@ void PrintPreviewHandler::HandlePrint(const ListValue* args) { bool print_to_pdf = false; settings->GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf); + bool open_pdf_in_preview = false; +#if defined(OS_MACOSX) + open_pdf_in_preview = settings->HasKey(printing::kSettingOpenPDFInPreview); +#endif + settings->SetBoolean(printing::kSettingHeaderFooterEnabled, false); bool is_cloud_printer = settings->HasKey(printing::kSettingCloudPrintId); bool is_cloud_dialog = false; settings->GetBoolean(printing::kSettingCloudPrintDialog, &is_cloud_dialog); - if (is_cloud_printer) { + if (is_cloud_printer && !open_pdf_in_preview) { std::string print_ticket; args->GetString(1, &print_ticket); SendCloudPrintJob(*settings, print_ticket); - } else if (print_to_pdf) { + } else if (print_to_pdf && !open_pdf_in_preview) { HandlePrintToPdf(*settings); - } else if (is_cloud_dialog) { + } else if (is_cloud_dialog && !open_pdf_in_preview) { HandlePrintWithCloudPrint(); } else { ReportPrintSettingsStats(*settings); |