Warning, /pim/merkuro/src/contacts/applet/package/contents/ui/ContactsPage.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 
0008 import org.kde.kirigami as Kirigami
0009 import org.kde.plasma.core 2.0 as PlasmaCore
0010 import org.kde.plasma.extras 2.0 as PlasmaExtras
0011 import org.kde.plasma.components 3.0 as PlasmaComponents3
0012 import org.kde.merkuro.contact 1.0
0013 import org.kde.kitemmodels 1.0
0014 
0015 PlasmaComponents3.ScrollView {
0016     id: scrollView
0017     anchors.fill: parent
0018     property string title: i18n("Contacts")
0019 
0020     property var header: PlasmaExtras.PlasmoidHeading {
0021         focus: true
0022         RowLayout {
0023             width: parent.width
0024             PlasmaExtras.SearchField {
0025                 id: searchField
0026                 Layout.fillWidth: true
0027                 onTextChanged: contactsList.model.setFilterFixedString(text)
0028             }
0029         }
0030     }
0031 
0032     Keys.onPressed: {
0033         function goToCurrent() {
0034             contactsList.positionViewAtIndex(contactsList.currentIndex, ListView.Contain);
0035             if (contactsList.currentIndex != -1) {
0036                 contactsList.currentItem.forceActiveFocus();
0037             }
0038         }
0039         if (event.modifiers & Qt.ControlModifier && event.key == Qt.Key_F) {
0040             toolbar.searchField.forceActiveFocus();
0041             toolbar.searchField.selectAll();
0042             event.accepted = true;
0043         } else if (event.key == Qt.Key_Down) {
0044             contactsList.incrementCurrentIndex();
0045             goToCurrent()
0046             event.accepted = true;
0047         } else if (event.key == Qt.Key_Up) {
0048             if (contactsList.currentIndex == 0) {
0049                 contactsList.currentIndex = -1;
0050                 searchField.forceActiveFocus();
0051                 searchField.selectAll();
0052             } else {
0053                 contactsList.decrementCurrentIndex();
0054                 goToCurrent();
0055             }
0056             event.accepted = true;
0057         }
0058     }
0059 
0060 
0061     // HACK: workaround for https://bugreports.qt.io/browse/QTBUG-83890
0062     PlasmaComponents3.ScrollBar.horizontal.policy: PlasmaComponents3.ScrollBar.AlwaysOff
0063 
0064     contentWidth: availableWidth - contentItem.leftMargin - contentItem.rightMargin
0065 
0066     contentItem: ListView {
0067         id: contactsList
0068         model: KSortFilterProxyModel {
0069             filterCaseSensitivity: Qt.CaseInsensitive
0070             sourceModel: ContactsModel {}
0071         }
0072         boundsBehavior: Flickable.StopAtBounds
0073         topMargin: PlasmaCore.Units.smallSpacing * 2
0074         bottomMargin: PlasmaCore.Units.smallSpacing * 2
0075         leftMargin: PlasmaCore.Units.smallSpacing * 2
0076         rightMargin: PlasmaCore.Units.smallSpacing * 2
0077         spacing: PlasmaCore.Units.smallSpacing
0078         activeFocusOnTab: true
0079 
0080         section.property: "display"
0081         section.criteria: ViewSection.FirstCharacter
0082         section.delegate: PlasmaExtras.Heading {level: 4; text: section}
0083         highlight: PlasmaExtras.Highlight { }
0084         highlightMoveDuration: 0
0085         highlightResizeDuration: 0
0086         focus: true
0087         delegate: ContactListItem {
0088             width: contactsList.width - contactsList.leftMargin - contactsList.rightMargin
0089             height: Kirigami.Units.gridUnit * 2
0090             name: model && model.display
0091             avatarIcon: model && model.decoration
0092             onClicked: stack.push(Qt.resolvedUrl('./ContactPage.qml'), {
0093                 itemId: model.itemId,
0094             })
0095             Binding {
0096                 target: contactsList; when: hovered
0097                 property: "currentIndex"; value: index
0098                 restoreMode: Binding.RestoreBinding
0099             }
0100         }
0101     }
0102 }