Warning, /network/angelfish/lib/contents/ui/PrintPreview.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2023 Michael Lang <criticaltemp@protonmail.com>
0002 //
0003 // SPDX-License-Identifier: GPL-2.0-or-later
0004
0005 import QtQuick 2.15
0006 import QtQuick.Controls 2.15 as QQC2
0007 import QtQuick.Layouts 1.15
0008 import QtWebEngine 1.10
0009
0010 import org.kde.kirigami 2.19 as Kirigami
0011 import org.kde.kirigamiaddons.formcard 1.0 as FormCard
0012
0013 import org.kde.angelfish 1.0
0014
0015 Kirigami.OverlaySheet {
0016 id: printPreview
0017 parent: webEngineView
0018 topPadding: 0
0019 bottomPadding: 0
0020 leftPadding: 0
0021 rightPadding: 0
0022
0023 header: Kirigami.Heading {
0024 text: i18n("Print")
0025 }
0026
0027 contentItem: Loader {
0028 active: printPreview.opened
0029 sourceComponent: RowLayout {
0030 height: webEngineView.height - printPreview.header.height - Kirigami.Units.largeSpacing * 4
0031 spacing: 1
0032
0033 Item {
0034 Layout.preferredWidth: webEngineView.width / 2
0035 Layout.fillHeight: true
0036
0037 WebEngineView {
0038 id: webEnginePreview
0039 visible: !webEngineView.generatingPdf
0040 anchors.fill: parent
0041 url: webEngineView.printPreviewUrl
0042 settings.pluginsEnabled: true
0043 settings.pdfViewerEnabled: true
0044 settings.javascriptEnabled: false
0045 onContextMenuRequested: request.accepted = true // disable context menu
0046 onPdfPrintingFinished: printPreview.close()
0047 }
0048
0049 QQC2.BusyIndicator {
0050 visible: webEngineView.generatingPdf
0051 anchors.centerIn: parent
0052 }
0053 }
0054
0055 ColumnLayout {
0056 Layout.preferredWidth: Kirigami.Units.gridUnit * 12
0057 Layout.fillHeight: true
0058 Layout.alignment: Qt.AlignTop
0059
0060 FormCard.FormCard {
0061 Layout.fillWidth: true
0062
0063 FormCard.FormHeader {
0064 title: i18n("Destination")
0065 }
0066
0067 FormCard.FormTextDelegate {
0068 text: i18n("Save to PDF")
0069 }
0070
0071 FormCard.FormDelegateSeparator {}
0072
0073 FormCard.FormHeader {
0074 title: i18n("Orientation")
0075 }
0076
0077 ColumnLayout {
0078 FormCard.FormRadioDelegate {
0079 text: "Portrait"
0080 checked: webEngineView.printedPageOrientation === WebEngineView.Portrait
0081 onClicked: {
0082 webEngineView.printedPageOrientation = WebEngineView.Portrait;
0083 webEngineView.printRequested();
0084 }
0085 }
0086 FormCard.FormRadioDelegate {
0087 text: "Landscape"
0088 checked: webEngineView.printedPageOrientation === WebEngineView.Landscape
0089 onClicked: {
0090 webEngineView.printedPageOrientation = WebEngineView.Landscape;
0091 webEngineView.printRequested();
0092 }
0093 }
0094 }
0095
0096 FormCard.FormDelegateSeparator {}
0097
0098 FormCard.FormHeader {
0099 title: i18n("Paper size")
0100 }
0101
0102 FormCard.FormComboBoxDelegate {
0103 textRole: "text"
0104 valueRole: "value"
0105 model: ListModel {
0106 ListElement { text: "Executive"; value: WebEngineView.Executive }
0107 ListElement { text: "Folio"; value: WebEngineView.Folio }
0108 ListElement { text: "Ledger"; value: WebEngineView.Ledger }
0109 ListElement { text: "Legal"; value: WebEngineView.Legal }
0110 ListElement { text: "Letter"; value: WebEngineView.Letter }
0111 ListElement { text: "Tabloid"; value: WebEngineView.Tabloid }
0112 ListElement { text: "A0"; value: WebEngineView.A0 }
0113 ListElement { text: "A1"; value: WebEngineView.A1 }
0114 ListElement { text: "A2"; value: WebEngineView.A2 }
0115 ListElement { text: "A3"; value: WebEngineView.A3 }
0116 ListElement { text: "A4"; value: WebEngineView.A4 }
0117 ListElement { text: "A5"; value: WebEngineView.A5 }
0118 ListElement { text: "A6"; value: WebEngineView.A6 }
0119 ListElement { text: "A7"; value: WebEngineView.A7 }
0120 ListElement { text: "A8"; value: WebEngineView.A8 }
0121 ListElement { text: "A9"; value: WebEngineView.A9 }
0122 ListElement { text: "B0"; value: WebEngineView.B0 }
0123 ListElement { text: "B1"; value: WebEngineView.B1 }
0124 ListElement { text: "B2"; value: WebEngineView.B2 }
0125 ListElement { text: "B3"; value: WebEngineView.B3 }
0126 ListElement { text: "B4"; value: WebEngineView.B4 }
0127 ListElement { text: "B5"; value: WebEngineView.B5 }
0128 ListElement { text: "B6"; value: WebEngineView.B6 }
0129 ListElement { text: "B7"; value: WebEngineView.B7 }
0130 ListElement { text: "B8"; value: WebEngineView.B8 }
0131 ListElement { text: "B9"; value: WebEngineView.B9 }
0132 ListElement { text: "B10"; value: WebEngineView.B10 }
0133 }
0134 onActivated: {
0135 webEngineView.printedPageSizeId = currentValue;
0136 webEngineView.printRequested();
0137 }
0138
0139 Component.onCompleted: currentIndex = indexOfValue(webEngineView.printedPageSizeId)
0140 }
0141
0142 FormCard.FormDelegateSeparator {}
0143
0144 FormCard.FormHeader {
0145 title: i18n("Options")
0146 }
0147
0148 FormCard.FormCheckDelegate {
0149 text: i18n("Print backgrounds")
0150 checked: webEngineView.settings.printElementBackgrounds
0151 onClicked: {
0152 webEngineView.settings.printElementBackgrounds = checked;
0153 webEngineView.printRequested();
0154 }
0155 }
0156 }
0157
0158 Item { Layout.fillHeight: true }
0159
0160 Row {
0161 spacing: Kirigami.Units.largeSpacing
0162 QQC2.Button {
0163 text: i18n("Cancel")
0164 onClicked: printPreview.close()
0165 }
0166
0167 QQC2.Button {
0168 text: i18n("Save")
0169 onClicked: {
0170 const filePath = BrowserManager.downloadDirectory() + "/" + webEngineView.title + ".pdf";
0171 webEnginePreview.printToPdf(filePath, webEnginePreview.printedPageSizeId, webEnginePreview.printedPageOrientation);
0172 }
0173 }
0174 }
0175 }
0176 }
0177 }
0178 }