Warning, /pim/merkuro/src/contacts/applet/package/contents/ui/ContactPage.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2022 Carl Schwan <car@carlschwan.eu> 0002 // SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0003 0004 import QtQuick 2.15 0005 import QtQml 2.15 0006 import QtQuick.Layouts 1.15 0007 import org.kde.kirigami 2.19 as Kirigami 0008 import org.kde.plasma.core 2.0 as PlasmaCore 0009 import org.kde.plasma.extras 2.0 as PlasmaExtras 0010 import org.kde.plasma.components 3.0 as PlasmaComponents3 0011 import org.kde.merkuro.contact 1.0 0012 0013 PlasmaComponents3.ScrollView { 0014 id: root 0015 0016 property int itemId 0017 topPadding: 0 0018 0019 property string title: addressee.formattedName 0020 0021 property AddresseeWrapper addressee: AddresseeWrapper { 0022 addresseeItem: ContactManager.getItem(root.itemId) 0023 } 0024 PlasmaComponents3.ScrollBar.horizontal.policy: PlasmaComponents3.ScrollBar.AlwaysOff 0025 0026 function callNumber(number) { 0027 Qt.openUrlExternally("tel:" + number) 0028 } 0029 0030 function sendSms(number) { 0031 Qt.openUrlExternally("sms:" + number) 0032 } 0033 0034 Keys.onPressed: if (event.key === Qt.Key_Escape) { 0035 stack.pop() 0036 event.accepted = true; 0037 } 0038 0039 property var header: PlasmaExtras.PlasmoidHeading { 0040 Component { 0041 id: menuItemComponent 0042 PlasmaComponents3.MenuItem { } 0043 } 0044 RowLayout { 0045 width: parent.width 0046 0047 PlasmaComponents3.Button { 0048 icon.name: "go-previous-view" 0049 text: i18n("Return to Contact List") 0050 onClicked: stack.pop() 0051 Layout.fillWidth: true 0052 } 0053 0054 PlasmaComponents3.ToolButton { 0055 id: configureButtonCall 0056 Accessible.name: i18n("Call") 0057 PlasmaComponents3.ToolTip { text: i18n("Call") } 0058 icon.name: "call-start" 0059 visible: addressee.phoneNumbers.length > 0 0060 onClicked: { 0061 const model = addressee.phoneNumbers; 0062 0063 if (model.length === 1) { 0064 page.callNumber(model[0].normalizedNumber); 0065 } else { 0066 if (menuCall.count == 0) { 0067 model.forEach((item) => { 0068 let menuItem = menuItemComponent.createObject(menuCall, { 0069 text: i18n("%1 (%2)", item.typeLabel, item.number) 0070 }); 0071 menuItem.clicked.connect(() => { 0072 callNumber(item.number); 0073 }); 0074 menuCall.addItem(menuItem); 0075 }); 0076 } 0077 menuCall.open(); 0078 } 0079 } 0080 PlasmaComponents3.Menu { 0081 id: menuCall 0082 y: configureButtonCall.height 0083 } 0084 } 0085 0086 PlasmaComponents3.ToolButton { 0087 id: configureButtonSms 0088 Accessible.name: i18n("Send SMS") 0089 PlasmaComponents3.ToolTip { text: i18n("Send SMS") } 0090 icon.name: "mail-message" 0091 visible: addressee.phoneNumbers.length > 0 0092 onClicked: { 0093 const model = addressee.phoneNumbers; 0094 0095 if (addressee.phoneNumbers.length === 1) { 0096 sendSms(model[0].normalizedNumber); 0097 } else { 0098 if (menuSms.count == 0) { 0099 model.forEach((item) => { 0100 let menuItem = menuItemComponent.createObject(menuSms, { 0101 text: i18n("%1 (%2)", item.typeLabel, item.number) 0102 }); 0103 menuItem.clicked.connect(() => { 0104 sendSms(item.number); 0105 }); 0106 menuSms.addItem(menuItem); 0107 }); 0108 } 0109 menuSms.open(); 0110 } 0111 } 0112 PlasmaComponents3.Menu { 0113 id: menuSms 0114 y: configureButtonSms.height 0115 } 0116 } 0117 0118 PlasmaComponents3.ToolButton { 0119 Accessible.name: i18n("Send Email") 0120 PlasmaComponents3.ToolTip { text: i18n("Send Email") } 0121 icon.name: "mail-message" 0122 visible: addressee.preferredEmail.length > 0 0123 onClicked: Qt.openUrlExternally(`mailto:${addressee.preferredEmail}`) 0124 } 0125 0126 PlasmaComponents3.ToolButton { 0127 icon.name: 'view-barcode-qr' 0128 Accessible.name: i18n("Show QR Code") 0129 PlasmaComponents3.ToolTip { text: i18n("Show QR Code") } 0130 onClicked: stack.push(Qt.resolvedUrl('./QrCodePage.qml'), { 0131 qrCodeData: addressee.qrCodeData(), 0132 }) 0133 } 0134 } 0135 } 0136 0137 contentItem: Flickable { 0138 contentHeight: layout.implicitHeight 0139 ColumnLayout { 0140 id: layout 0141 width: parent.width 0142 spacing: 0 0143 Header { 0144 Layout.fillWidth: true 0145 Layout.preferredHeight: Kirigami.Units.gridUnit * 8 0146 0147 source: addressee.photo.isIntern ? addressee.photo.data : addressee.photo.url 0148 backgroundSource: Qt.resolvedUrl("../resources/fallbackBackground.png") 0149 0150 contentItems: PlasmaExtras.Heading { 0151 text: addressee.formattedName 0152 color: "#fcfcfc" 0153 level: 2 0154 } 0155 } 0156 0157 PlasmaComponents3.Label { 0158 visible: addressee.nickName !== "" 0159 text: i18n("Nickname: %1", addressee.nickName) 0160 Layout.leftMargin: PlasmaCore.Units.smallSpacing 0161 Layout.rightMargin: PlasmaCore.Units.smallSpacing 0162 Layout.topMargin: PlasmaCore.Units.smallSpacing 0163 } 0164 0165 PlasmaComponents3.Label { 0166 Layout.leftMargin: PlasmaCore.Units.smallSpacing 0167 Layout.rightMargin: PlasmaCore.Units.smallSpacing 0168 Layout.topMargin: PlasmaCore.Units.smallSpacing 0169 visible: text !== i18n("Birthday:") + ' ' 0170 text: if (addressee.birthday.getFullYear() === 0) { 0171 return Qt.formatDate(addressee.birthday, i18nc("Day month format", "dd.MM.")) 0172 } else { 0173 return i18n("Birthday:") + ' ' + addressee.birthday.toLocaleDateString() 0174 } 0175 } 0176 0177 PlasmaExtras.Heading { 0178 Layout.leftMargin: PlasmaCore.Units.smallSpacing 0179 Layout.rightMargin: PlasmaCore.Units.smallSpacing 0180 Layout.topMargin: PlasmaCore.Units.smallSpacing 0181 visible: addressesRepeater.count > 0 0182 text: i18np("Address", "Addresses", addressesRepeater.count) 0183 level: 4 0184 } 0185 0186 Repeater { 0187 id: addressesRepeater 0188 model: addressee.addressesModel 0189 PlasmaComponents3.Label { 0190 Layout.leftMargin: PlasmaCore.Units.smallSpacing 0191 Layout.rightMargin: PlasmaCore.Units.smallSpacing 0192 visible: text.lenght !== 0 0193 text: (model.typeLabel ? i18nc("%1 is the type of the address, e.g. home, work, ...", "%1:", model.typeLabel) : '') + ' ' + model.formattedAddress 0194 } 0195 } 0196 0197 PlasmaExtras.Heading { 0198 Layout.topMargin: PlasmaCore.Units.smallSpacing 0199 Layout.leftMargin: PlasmaCore.Units.smallSpacing 0200 Layout.rightMargin: PlasmaCore.Units.smallSpacing 0201 visible: emailRepeater.count > 0 0202 text: i18np("Email Address", "Email Addresses", emailRepeater.count) 0203 level: 4 0204 } 0205 0206 Repeater { 0207 id: emailRepeater 0208 model: addressee.emailModel 0209 PlasmaComponents3.Label { 0210 visible: text !== "" 0211 text: `${model.type} <a href="mailto:${model.display}">${model.display}</a>` 0212 Layout.leftMargin: PlasmaCore.Units.smallSpacing 0213 Layout.rightMargin: PlasmaCore.Units.smallSpacing 0214 PlasmaComponents3.ToolTip { text: i18n("Send Email") } 0215 onLinkActivated: Qt.openUrlExternally(link) 0216 MouseArea { 0217 id: area 0218 anchors.fill: parent 0219 hoverEnabled: true 0220 cursorShape: Qt.PointingHandCursor 0221 onClicked: Qt.openUrlExternally(`mailto:${model.display}`) 0222 } 0223 } 0224 } 0225 0226 PlasmaExtras.Heading { 0227 Layout.topMargin: PlasmaCore.Units.smallSpacing 0228 Layout.leftMargin: PlasmaCore.Units.smallSpacing 0229 Layout.rightMargin: PlasmaCore.Units.smallSpacing 0230 visible: phoneRepeater.count > 0 0231 text: i18np("Phone number", "Phone numbers", phoneRepeater.count) 0232 level: 4 0233 } 0234 0235 Repeater { 0236 id: phoneRepeater 0237 model: addressee.phoneModel 0238 PlasmaComponents3.Label { 0239 visible: text !== "" 0240 text: i18n("%1:", model.type) + ` <a href="tel:${model.display}">${model.display}</a>` 0241 Layout.leftMargin: PlasmaCore.Units.smallSpacing 0242 Layout.rightMargin: PlasmaCore.Units.smallSpacing 0243 PlasmaComponents3.ToolTip { text: i18n("Call") } 0244 onLinkActivated: Qt.openUrlExternally(link) 0245 MouseArea { 0246 id: area 0247 anchors.fill: parent 0248 hoverEnabled: true 0249 cursorShape: Qt.PointingHandCursor 0250 onClicked: Qt.openUrlExternally(`tel:${model.display}`) 0251 } 0252 } 0253 } 0254 } 0255 } 0256 }