// Qt framework headers.
#include <QAction>
+#include <QPrintDialog>
+#include <QPrintPreviewDialog>
+#include <QPrinter>
// Initialize the public static variables.
QString BrowserView::webEngineDefaultUserAgent = QStringLiteral("");
emit linkHovered(linkUrl);
}
+void BrowserView::print() const
+{
+ // Create a printer.
+ QPrinter printer;
+
+ // Set the resolution to be 300 dpi.
+ printer.setResolution(300);
+
+ // Create a printer dialog.
+ QPrintDialog printDialog(&printer, webEngineViewPointer);
+
+ // Display the dialog and print the page if instructed.
+ if (printDialog.exec() == QDialog::Accepted)
+ printWebpage(&printer);
+}
+
+void BrowserView::printPreview() const
+{
+ // Create a printer.
+ QPrinter printer;
+
+ // Set the resolution to be 300 dpi.
+ printer.setResolution(300);
+
+ // Create a print preview dialog.
+ QPrintPreviewDialog printPreviewDialog(&printer, webEngineViewPointer);
+
+ // Generate the print preview.
+ connect(&printPreviewDialog, SIGNAL(paintRequested(QPrinter *)), this, SLOT(printWebpage(QPrinter *)));
+
+ // Display the dialog.
+ printPreviewDialog.exec();
+}
+
+void BrowserView::printWebpage(QPrinter *printerPointer) const
+{
+ // Create an event loop. For some reason, the print preview doesn't produce any output unless it is run inside an event loop.
+ QEventLoop eventLoop;
+
+ // Print the webpage, converting the callback above into a `QWebEngineCallback<bool>`.
+ // Printing requires that the printer be a pointer, not a reference, or it will crash with much cursing.
+ webEnginePagePointer->print(printerPointer, [&eventLoop](bool printSuccess)
+ {
+ // Instruct the compiler to ignore the unused parameter.
+ (void) printSuccess;
+
+ // Quit the loop.
+ eventLoop.quit();
+ });
+
+ // Execute the loop.
+ eventLoop.exec();
+}
+
void BrowserView::refresh() const
{
// Reload the website.
void loadUrlFromLineEdit(QString url) const;
void mouseBack() const;
void mouseForward() const;
+ void print() const;
+ void printPreview() const;
void refresh() const;
private Q_SLOTS:
void loadProgress(const int &progress) const;
void loadStarted() const;
void pageLinkHovered(const QString &linkUrl) const;
+ void printWebpage(QPrinter *printerPointer) const;
void updateUrl(const QUrl &url) const;
private:
// Add the standard actions.
KStandardAction::openNew(this, SLOT(fileNew()), actionCollectionPointer);
+ KStandardAction::print(browserViewPointer, SLOT(print()), actionCollectionPointer);
+ KStandardAction::printPreview(browserViewPointer, SLOT(printPreview()), actionCollectionPointer);
KStandardAction::quit(qApp, SLOT(closeAllWindows()), actionCollectionPointer);
KStandardAction::redisplay(this, SLOT(refresh()), actionCollectionPointer);
fullScreenActionPointer = KStandardAction::fullScreen(this, SLOT(toggleFullScreen()), this, actionCollectionPointer);