Warning, /pim/itinerary/src/app/GenericPass.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2018-2022 Volker Krause <vkrause@kde.org> 0003 SPDX-License-Identifier: LGPL-2.0-or-later 0004 */ 0005 0006 import QtQuick 0007 import QtQuick.Layouts 0008 import QtQuick.Controls as QQC2 0009 import org.kde.kirigami as Kirigami 0010 import org.kde.pkpass as KPkPass 0011 import org.kde.itinerary 0012 0013 Rectangle { 0014 id: root 0015 property var pass: null 0016 property string passId 0017 implicitHeight: bodyBackground.implicitHeight 0018 implicitWidth: 332 //Math.max(topLayout.implicitWidth, 332) 0019 0020 color: Util.isValidColor(pass.backgroundColor) ? pass.backgroundColor : Kirigami.Theme.backgroundColor 0021 radius: 10 0022 0023 /** Double tap on the barcode to request scan mode. */ 0024 signal scanModeToggled() 0025 0026 ColumnLayout { 0027 id: topLayout 0028 spacing: 10 0029 anchors.fill: parent 0030 anchors.margins: 6 0031 // HACK to break binding loop on implicitHeight 0032 onImplicitHeightChanged: root.implicitHeight = implicitHeight + 2 * topLayout.anchors.margins 0033 0034 // header 0035 GridLayout { 0036 id: headerLayout 0037 rows: 2 0038 columns: pass.headerFields.length + 2 0039 Layout.fillWidth: true 0040 Layout.maximumWidth: root.implicitWidth - 2 * topLayout.anchors.margins 0041 0042 Image { 0043 Layout.rowSpan: 2 0044 Layout.maximumHeight: 50 0045 Layout.maximumWidth: 160 0046 Layout.preferredWidth: paintedWidth 0047 fillMode: Image.PreserveAspectFit 0048 source: passId !== "" ? "image://org.kde.pkpass/" + passId + "/logo" : "" 0049 sourceSize.height: 1 // ??? seems necessary to trigger high dpi scaling... 0050 } 0051 0052 QQC2.Label { 0053 Layout.rowSpan: 2 0054 Layout.fillWidth: pass ? true : false 0055 text: pass ? pass.logoText : "" 0056 color: Util.isValidColor(pass.foregroundColor) ? pass.foregroundColor : Kirigami.Theme.textColor 0057 } 0058 0059 Repeater { 0060 model: pass.headerFields 0061 delegate: QQC2.Label { 0062 text: modelData.label 0063 color: Util.isValidColor(pass.labelColor) ? pass.labelColor : Kirigami.Theme.textColor 0064 elide: Text.ElideRight 0065 Layout.fillWidth: true 0066 } 0067 } 0068 Repeater { 0069 model: pass.headerFields 0070 delegate: QQC2.Label { 0071 text: modelData.valueDisplayString 0072 color: Util.isValidColor(pass.foregroundColor) ? pass.foregroundColor : Kirigami.Theme.textColor 0073 elide: Text.ElideRight 0074 Layout.fillWidth: true 0075 } 0076 } 0077 } 0078 0079 // primary fields 0080 Kirigami.Separator { 0081 Layout.fillWidth: true 0082 } 0083 GridLayout { 0084 id: primaryFieldLayout 0085 rows: 2 0086 columns: pass.primaryFields.length + 1 0087 Layout.fillWidth: true 0088 0089 Repeater { 0090 model: pass.primaryFields 0091 delegate: QQC2.Label { 0092 Layout.fillWidth: true 0093 color: Util.isValidColor(pass.labelColor) ? pass.labelColor : Kirigami.Theme.textColor 0094 text: modelData.label 0095 horizontalAlignment: modelData.textAlignment 0096 } 0097 } 0098 Image { 0099 id: thumbnailImage 0100 Layout.rowSpan: 2 0101 source: "image://org.kde.pkpass/" + passId + "/thumbnail" 0102 sourceSize.height: 1 // ??? seems necessary to trigger high dpi scaling... 0103 Layout.alignment: Qt.AlignCenter 0104 Layout.preferredWidth: Math.min(90, thumbnailImage.implicitWidth); // 90x90 as per spec 0105 Layout.preferredHeight: (Layout.preferredWidth / thumbnailImage.implicitWidth) * thumbnailImage.implicitHeight 0106 fillMode: Image.PreserveAspectFit 0107 } 0108 Repeater { 0109 model: pass.primaryFields 0110 delegate: QQC2.Label { 0111 Layout.fillWidth: true 0112 color: Util.isValidColor(pass.foregroundColor) ? pass.foregroundColor : Kirigami.Theme.textColor 0113 text: modelData.valueDisplayString 0114 horizontalAlignment: modelData.textAlignment 0115 } 0116 } 0117 } 0118 0119 // secondary fields 0120 GridLayout { 0121 id: secFieldsLayout 0122 rows: 2 0123 columns: pass.secondaryFields.length 0124 Layout.fillWidth: true 0125 0126 Repeater { 0127 model: pass.secondaryFields 0128 delegate: QQC2.Label { 0129 Layout.fillWidth: true 0130 color: Util.isValidColor(pass.labelColor) ? pass.labelColor : Kirigami.Theme.textColor 0131 text: modelData.label 0132 horizontalAlignment: modelData.textAlignment 0133 } 0134 } 0135 Repeater { 0136 model: pass.secondaryFields 0137 delegate: QQC2.Label { 0138 Layout.fillWidth: true 0139 color: Util.isValidColor(pass.foregroundColor) ? pass.foregroundColor : Kirigami.Theme.textColor 0140 text: modelData.valueDisplayString 0141 horizontalAlignment: modelData.textAlignment 0142 } 0143 } 0144 } 0145 0146 // auxiliary fields 0147 GridLayout { 0148 id: auxFieldsLayout 0149 rows: 2 0150 columns: pass.auxiliaryFields.length 0151 Layout.fillWidth: true 0152 0153 Repeater { 0154 model: pass.auxiliaryFields 0155 delegate: QQC2.Label { 0156 Layout.fillWidth: true 0157 color: Util.isValidColor(pass.labelColor) ? pass.labelColor : Kirigami.Theme.textColor 0158 text: modelData.label 0159 horizontalAlignment: modelData.textAlignment 0160 } 0161 } 0162 Repeater { 0163 model: pass.auxiliaryFields 0164 delegate: QQC2.Label { 0165 Layout.fillWidth: true 0166 color: Util.isValidColor(pass.foregroundColor) ? pass.foregroundColor : Kirigami.Theme.textColor 0167 text: modelData.valueDisplayString 0168 horizontalAlignment: modelData.textAlignment 0169 } 0170 } 0171 } 0172 0173 // barcode 0174 PkPassBarcode { 0175 maximumWidth: root.implicitWidth * 0.8 0176 pass: root.pass 0177 TapHandler { 0178 onDoubleTapped: scanModeToggled() 0179 } 0180 } 0181 0182 // back fields 0183 Kirigami.Separator { 0184 Layout.fillWidth: true 0185 } 0186 Repeater { 0187 model: pass.backFields 0188 ColumnLayout { 0189 QQC2.Label { 0190 Layout.fillWidth: true 0191 color: Util.isValidColor(pass.labelColor) ? pass.labelColor : Kirigami.Theme.textColor 0192 text: modelData.label 0193 wrapMode: Text.WordWrap 0194 horizontalAlignment: modelData.textAlignment 0195 } 0196 QQC2.Label { 0197 Layout.fillWidth: true 0198 color: Util.isValidColor(pass.foregroundColor) ? pass.foregroundColor : Kirigami.Theme.textColor 0199 linkColor: color 0200 text: Util.textToHtml(modelData.valueDisplayString) 0201 textFormat: Util.isRichText(modelData.valueDisplayString) ? Text.StyledText : Text.AutoText 0202 wrapMode: Text.WordWrap 0203 horizontalAlignment: modelData.textAlignment 0204 onLinkActivated: Qt.openUrlExternally(link) 0205 } 0206 } 0207 } 0208 } 0209 }