Warning, /pim/itinerary/src/app/BoardingPass.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2018 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 import QtQuick 0008 import QtQuick.Layouts 0009 import QtQuick.Controls as QQC2 0010 import org.kde.kirigami as Kirigami 0011 import org.kde.pkpass as KPkPass 0012 import org.kde.itinerary 0013 0014 Item { 0015 id: root 0016 property var pass: null 0017 property string passId 0018 property int __margin: 10 0019 0020 implicitWidth: Math.max(bodyLayout.implicitWidth, 332) 0021 0022 /** Double tap on the barcode to request scan mode. */ 0023 signal scanModeToggled() 0024 0025 ColumnLayout { 0026 id: topLayout 0027 spacing: 0 0028 width: parent.implicitWidth 0029 // HACK to break binding loop on implicitHeight 0030 onImplicitHeightChanged: root.implicitHeight = implicitHeight 0031 0032 GridLayout { 0033 id: headerLayout 0034 rows: 2 0035 columns: pass.headerFields.length + 2 0036 Layout.fillWidth: true 0037 Layout.margins: __margin 0038 0039 Image { 0040 Layout.rowSpan: 2 0041 Layout.maximumHeight: 60 0042 Layout.maximumWidth: 150 0043 Layout.preferredWidth: paintedWidth 0044 fillMode: Image.PreserveAspectFit 0045 source: passId !== "" ? "image://org.kde.pkpass/" + passId + "/logo" : "" 0046 sourceSize.height: 1 // ??? seems necessary to trigger high dpi scaling... 0047 } 0048 0049 QQC2.Label { 0050 Layout.rowSpan: 2 0051 Layout.fillWidth: pass ? true : false 0052 text: pass ? pass.logoText : "" 0053 color: pass.foregroundColor 0054 } 0055 0056 Repeater { 0057 model: pass.headerFields 0058 delegate: QQC2.Label { 0059 text: modelData.label 0060 color: pass.labelColor 0061 } 0062 } 0063 Repeater { 0064 model: pass.headerFields 0065 delegate: QQC2.Label { 0066 text: modelData.valueDisplayString 0067 color: pass.foregroundColor 0068 } 0069 } 0070 } 0071 0072 ColumnLayout { 0073 id: bodyLayout 0074 Layout.margins: __margin 0075 spacing: __margin 0076 0077 // primary fields 0078 GridLayout { 0079 id: primaryFieldsLayout 0080 rows: 2 0081 columns: 3 0082 flow: GridLayout.TopToBottom 0083 Layout.fillWidth: true 0084 0085 QQC2.Label { 0086 id: primaryLabel 0087 Layout.fillWidth: true 0088 Layout.preferredWidth: primaryFieldsLayout.width/2 - Kirigami.Units.iconSizes.smallMedium 0089 text: pass.primaryFields[0].label 0090 color: pass.labelColor 0091 wrapMode: Text.WordWrap 0092 } 0093 QQC2.Label { 0094 id: primaryValue 0095 text: pass.primaryFields[0].valueDisplayString 0096 color: pass.foregroundColor 0097 font.pointSize: 1.5 * primaryLabel.font.pointSize 0098 } 0099 0100 Kirigami.Icon { 0101 Layout.rowSpan: 2 0102 Layout.alignment: Qt.AlignBottom 0103 source: { 0104 switch (pass.transitType) { 0105 case KPkPass.BoardingPass.Air: return "qrc:///images/flight.svg" 0106 case KPkPass.BoardingPass.Train: return "qrc:///images/train.svg" 0107 } 0108 return "go-next-symbolic"; 0109 } 0110 Layout.preferredWidth: Kirigami.Units.iconSizes.smallMedium 0111 Layout.preferredHeight: Kirigami.Units.iconSizes.smallMedium 0112 color: pass.labelColor 0113 isMask: true 0114 } 0115 0116 QQC2.Label { 0117 Layout.fillWidth: true 0118 Layout.preferredWidth: primaryFieldsLayout.width/2 - Kirigami.Units.iconSizes.smallMedium 0119 horizontalAlignment: Qt.AlignRight 0120 text: pass.primaryFields[1].label 0121 color: pass.labelColor 0122 wrapMode: Text.WordWrap 0123 } 0124 QQC2.Label { 0125 Layout.alignment: Qt.AlignRight 0126 text: pass.primaryFields[1].valueDisplayString 0127 color: pass.foregroundColor 0128 font.pointSize: primaryValue.font.pointSize 0129 } 0130 } 0131 0132 // auxiliary fields 0133 GridLayout { 0134 id: auxFieldsLayout 0135 rows: 2 0136 columns: pass.auxiliaryFields.length 0137 Layout.fillWidth: true 0138 0139 Repeater { 0140 model: pass.auxiliaryFields 0141 delegate: QQC2.Label { 0142 Layout.fillWidth: true 0143 color: pass.labelColor 0144 text: modelData.label 0145 horizontalAlignment: modelData.textAlignment 0146 } 0147 } 0148 Repeater { 0149 model: pass.auxiliaryFields 0150 delegate: QQC2.Label { 0151 Layout.fillWidth: true 0152 color: pass.foregroundColor 0153 text: modelData.valueDisplayString 0154 horizontalAlignment: modelData.textAlignment 0155 } 0156 } 0157 } 0158 0159 // secondary fields 0160 GridLayout { 0161 id: secFieldsLayout 0162 rows: 2 0163 columns: pass.secondaryFields.length 0164 Layout.fillWidth: true 0165 0166 Repeater { 0167 model: pass.secondaryFields 0168 delegate: QQC2.Label { 0169 Layout.fillWidth: true 0170 color: pass.labelColor 0171 text: modelData.label 0172 horizontalAlignment: modelData.textAlignment 0173 } 0174 } 0175 Repeater { 0176 model: pass.secondaryFields 0177 delegate: QQC2.Label { 0178 Layout.fillWidth: true 0179 color: pass.foregroundColor 0180 text: modelData.valueDisplayString 0181 horizontalAlignment: modelData.textAlignment 0182 } 0183 } 0184 } 0185 0186 // footer 0187 Image { 0188 source: passId !== "" ? "image://org.kde.pkpass/" + passId + "/footer" : "" 0189 sourceSize.height: 1 // ??? seems necessary to trigger high dpi scaling... 0190 Layout.alignment: Qt.AlignCenter 0191 } 0192 } 0193 0194 // barcode 0195 PkPassBarcode { 0196 maximumWidth: root.implicitWidth * 0.8 0197 pass: root.pass 0198 TapHandler { 0199 onDoubleTapped: root.scanModeToggled() 0200 } 0201 } 0202 0203 ColumnLayout { 0204 id: backLayout 0205 Layout.margins: __margin 0206 0207 Kirigami.Separator { 0208 visible: pass.backFields.length > 0 0209 Layout.fillWidth: true 0210 } 0211 Repeater { 0212 model: pass.backFields 0213 ColumnLayout { 0214 QQC2.Label { 0215 Layout.fillWidth: true 0216 color: pass.labelColor 0217 text: modelData.label 0218 wrapMode: Text.WordWrap 0219 horizontalAlignment: modelData.textAlignment 0220 } 0221 QQC2.Label { 0222 Layout.fillWidth: true 0223 color: pass.foregroundColor 0224 linkColor: color 0225 text: Util.textToHtml(modelData.valueDisplayString) 0226 textFormat: Util.isRichText(modelData.valueDisplayString) ? Text.StyledText : Text.AutoText 0227 wrapMode: Text.WordWrap 0228 horizontalAlignment: modelData.textAlignment 0229 onLinkActivated: Qt.openUrlExternally(link) 0230 } 0231 } 0232 } 0233 } 0234 } 0235 0236 ColumnLayout { 0237 id: backgroundLayout 0238 anchors.fill: topLayout 0239 spacing: 0 0240 z: -1 0241 0242 Rectangle { 0243 id: headerBackground 0244 radius: __margin 0245 color: pass.backgroundColor 0246 Layout.fillWidth: true 0247 implicitHeight: headerLayout.implicitHeight + 2 * __margin 0248 } 0249 0250 Rectangle { 0251 id: bodyBackground 0252 radius: __margin 0253 color: pass.backgroundColor 0254 Layout.fillWidth: true 0255 Layout.fillHeight: true 0256 } 0257 } 0258 }