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 }