Warning, /pim/merkuro/src/contacts/qml/ContactView.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2022 Carl Schwan <carl@carlschwan.eu>
0002 // SPDX-License-Identifier: LGPL-3.0-or-later
0003
0004 import QtQuick 2.15
0005 import QtQuick.Controls 2.15 as QQC2
0006 import QtQuick.Layouts 1.15
0007 import org.kde.kirigami 2.19 as Kirigami
0008 import org.kde.merkuro.contact 1.0
0009 import './private'
0010
0011 Kirigami.ScrollablePage {
0012 id: page
0013 objectName: "contactView"
0014
0015 property var attendeeAkonadiIds
0016
0017 title: i18n("Contacts")
0018
0019 actions: Kirigami.Action {
0020 icon.name: 'contact-new-symbolic'
0021 text: i18nc("@action:inmenu", "Create")
0022 Kirigami.Action {
0023 id: createNewContactAction
0024 text: i18nc("@action:inmenu", "New Contact")
0025 onTriggered: pageStack.pushDialogLayer(Qt.resolvedUrl("./private/contact_editor/ContactEditorPage.qml"), {
0026 mode: ContactEditor.CreateMode,
0027 })
0028 }
0029 Kirigami.Action {
0030 id: createNewContactGroupAction
0031 text: i18nc("@action:inmenu", "New Contact Group")
0032 onTriggered: pageStack.pushDialogLayer(Qt.resolvedUrl("./private/contact_editor/ContactGroupEditorPage.qml"), {
0033 mode: ContactGroupEditor.CreateMode,
0034 })
0035 }
0036 }
0037
0038 Connections {
0039 target: ContactApplication
0040
0041 function onCreateNewContact() {
0042 createNewContactAction.trigger();
0043 }
0044
0045 function onCreateNewContactGroup() {
0046 createNewContactGroupAction.trigger();
0047 }
0048 }
0049
0050 ListView {
0051 id: contactsList
0052 reuseItems: true
0053 section {
0054 property: "display"
0055 criteria: ViewSection.FirstCharacter
0056 delegate: Kirigami.ListSectionHeader {
0057 text: section.trim().length > 0 ? section : i18nc("Placeholder", "No Name")
0058 }
0059 }
0060 clip: true
0061 model: ContactManager.filteredContacts
0062 delegate: ContactListItem {
0063 id: contactListItem
0064 height: Kirigami.Settings.isMobile ? Kirigami.Units.gridUnit * 3 : Kirigami.Units.gridUnit * 2
0065 name: model && model.display && model.display.trim().length > 0 ? model.display : i18nc("Placeholder", "No Name")
0066 avatarIcon: model && model.decoration
0067
0068 onClicked: if (model.mimeType === 'application/x-vnd.kde.contactgroup') {
0069 contactsList.currentIndex = index;
0070 applicationWindow().pageStack.push(Qt.resolvedUrl('./private/ContactGroupPage.qml'), {
0071 itemId: model.itemId,
0072 });
0073 } else {
0074 contactsList.currentIndex = index;
0075 applicationWindow().pageStack.push(Qt.resolvedUrl('./private/ContactPage.qml'), {
0076 itemId: model.itemId,
0077 });
0078 }
0079
0080 onCreateContextMenu: createContactListContextMenu(model.item, model.display)
0081
0082 Component {
0083 id: contactListContextMenu
0084 QQC2.Menu {
0085 id: actionsPopup
0086
0087 property var item: null
0088 property var name: ''
0089
0090 QQC2.MenuItem {
0091 icon.name: "edit-entry"
0092 text: i18nc("@action:inmenu", "Edit contact…")
0093 onClicked: if (model.mimeType === 'application/x-vnd.kde.contactgroup') {
0094 const page = applicationWindow().pageStack.push(Qt.resolvedUrl('./private/ContactGroupPage.qml'), {
0095 itemId: model.itemId,
0096 })
0097 page.openEditor();
0098 } else {
0099 const page = applicationWindow().pageStack.push(Qt.resolvedUrl('./private/ContactPage.qml'), {
0100 itemId: model.itemId,
0101 })
0102 page.openEditor();
0103 }
0104 }
0105 QQC2.MenuItem {
0106 icon.name: "delete"
0107 text: i18nc("@action:inmenu", "Delete contact")
0108 action: DeleteContactAction {
0109 item: actionsPopup.item
0110 name: actionsPopup.name
0111 }
0112 }
0113 }
0114 }
0115 function createContactListContextMenu(item, name: string) {
0116 const menu = contactListContextMenu.createObject(page, {
0117 item: item,
0118 name: name,
0119 })
0120 menu.popup()
0121 }
0122 }
0123 Kirigami.PlaceholderMessage {
0124 anchors.centerIn: parent
0125 text: i18n("No contacts")
0126 visible: contactsList.count === 0
0127 }
0128 }
0129 }