Warning, /plasma/plasma-systemmonitor/src/table/TableViewHeader.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * SPDX-FileCopyrightText: 2020 Arjen Hiemstra <ahiemstra@heimr.nl> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 import QtQuick 0008 import QtQuick.Controls 0009 import QtQml.Models 0010 0011 import org.kde.kirigami as Kirigami 0012 import org.kde.ksysguard.formatter as Formatter 0013 0014 import org.kde.kitemmodels as KItemModels 0015 0016 HorizontalHeaderView { 0017 id: header 0018 0019 anchors { 0020 top: parent.top 0021 left: parent.left 0022 right: parent.right 0023 } 0024 0025 property alias view: header.syncView 0026 0027 property int sortColumn: 0 0028 property int sortOrder: Qt.AscendingOrder 0029 property string sortName 0030 onSortNameChanged: updateSelectedColumn() 0031 0032 property string idRole: "Attribute" 0033 0034 signal sort(int column, int order) 0035 signal resize(int column, real width) 0036 signal contextMenuRequested(int column, point position) 0037 0038 resizableColumns: true 0039 clip: true 0040 0041 Kirigami.Theme.colorSet: Kirigami.Theme.Button 0042 Kirigami.Theme.inherit: false 0043 0044 onSortColumnChanged: sort(sortColumn, sortOrder) 0045 0046 Component.onCompleted: Qt.callLater(updateSelectedColumn) 0047 0048 function updateSelectedColumn() { 0049 let roleIndex = headerModel.KItemModels.KRoleNames.role(idRole) 0050 for (let i = 0; i < headerModel.rowCount(); ++i) { 0051 let index = headerModel.index(i, 0) 0052 if (headerModel.data(index, roleIndex) == sortName) { 0053 header.sortColumn = i 0054 header.sort(i, header.sortOrder) 0055 break 0056 } 0057 } 0058 } 0059 0060 model: KItemModels.KColumnHeadersModel { 0061 id: headerModel 0062 sourceModel: header.view.model 0063 sortColumn: header.sortColumn 0064 sortOrder: header.sortOrder 0065 } 0066 0067 TapHandler { 0068 acceptedButtons: Qt.LeftButton 0069 0070 onTapped: (eventPoint, button) => { 0071 let cell = header.cellAtPosition(eventPoint.position) 0072 if (cell.x == header.sortColumn) { 0073 header.sortOrder = header.sortOrder == Qt.AscendingOrder ? Qt.DescendingOrder : Qt.AscendingOrder 0074 header.sort(header.sortColumn, header.sortOrder) 0075 } else { 0076 header.sortOrder = model.Unit == Formatter.Units.UnitNone || model.Unit == Formatter.Units.UnitInvalid ? Qt.AscendingOrder : Qt.DescendingOrder 0077 header.sortName = headerModel.data(headerModel.index(cell.x, 0), headerModel.KItemModels.KRoleNames.role(header.idRole)) 0078 header.sortColumn = cell.x 0079 } 0080 } 0081 } 0082 0083 TapHandler { 0084 acceptedButtons: Qt.RightButton 0085 0086 gesturePolicy: TapHandler.ReleaseWithinBounds 0087 0088 onTapped: (eventPoint, button) => { 0089 let cell = header.cellAtPosition(eventPoint.position) 0090 header.contextMenuRequested(cell.x, eventPoint.scenePosition) 0091 } 0092 } 0093 }