Warning, /plasma/plasma-systemmonitor/src/faces/processtable/contents/ui/ProcessTableView.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.0-or-later 0005 */ 0006 0007 import QtQuick 0008 import QtQuick.Layouts 0009 import QtQuick.Controls 0010 0011 import Qt.labs.qmlmodels 0012 0013 import org.kde.kitemmodels as KItemModels 0014 import org.kde.quickcharts as Charts 0015 0016 import org.kde.ksysguard.formatter as Formatter 0017 import org.kde.ksysguard.process as Process 0018 import org.kde.ksysguard.table as Table 0019 0020 Table.BaseTableView { 0021 id: view 0022 0023 property alias nameFilterString: rowFilter.filterString 0024 property alias processModel: processModel 0025 property alias viewMode: rowFilter.viewMode 0026 property bool flatList 0027 0028 readonly property bool treeModeSupported: processModel.hasOwnProperty("flatList") 0029 0030 property alias columnDisplay: displayModel.columnDisplay 0031 property var enabledColumns 0032 onEnabledColumnsChanged: processModel.updateEnabledAttributes() 0033 0034 readonly property var selectedProcesses: { 0035 var result = [] 0036 var rows = {} 0037 0038 for (var i of selection.selectedIndexes) { 0039 if (rows[i.row] != undefined) { 0040 continue 0041 } 0042 0043 rows[i.row] = true 0044 0045 var index = rowFilter.mapToSource(i) 0046 0047 var item = {} 0048 0049 item.name = processModel.data(processModel.index(index.row, processModel.nameColumn, index.parent), Process.ProcessDataModel.ValueRole) 0050 item.pid = processModel.data(processModel.index(index.row, processModel.pidColumn, index.parent), Process.ProcessDataModel.ValueRole) 0051 item.username = processModel.data(processModel.index(index.row, processModel.usernameColumn, index.parent), Process.ProcessDataModel.ValueRole) 0052 0053 result.push(item) 0054 } 0055 0056 return result 0057 } 0058 0059 idRole: "Attribute" 0060 0061 onSort: (column, order) => rowFilter.sort(column, order) 0062 0063 model: Table.ProcessSortFilterModel { 0064 id: rowFilter 0065 sourceModel: cacheModel 0066 hiddenAttributes: processModel.hiddenSensors 0067 } 0068 0069 Table.ComponentCacheProxyModel { 0070 id: cacheModel 0071 sourceModel: displayModel 0072 0073 component: Charts.HistoryProxySource { 0074 id: history 0075 source: Charts.ModelSource { 0076 model: history.Table.ComponentCacheProxyModel.model 0077 column: history.Table.ComponentCacheProxyModel.column 0078 roleName: "Value" 0079 } 0080 item: Table.ComponentCacheProxyModel.row 0081 maximumHistory: 10 0082 interval: 2000 0083 fillMode: Charts.HistoryProxySource.FillFromEnd 0084 } 0085 } 0086 0087 Table.ColumnDisplayModel { 0088 id: displayModel 0089 sourceModel: processModel 0090 idRole: "Attribute" 0091 } 0092 0093 // Temporary workaround to be able to run against Plasma 5.20, 0094 // which lacks the "flatList" property on ProcessDataModel. If 0095 // we assign it directly, the face will fail to load because 0096 // the property is missing. However, when using a Binding here 0097 // it will only produce a runtime warning. 0098 Binding { 0099 target: processModel 0100 property: "flatList" 0101 value: view.flatList 0102 } 0103 0104 Process.ProcessDataModel { 0105 id: processModel 0106 onFlatListChanged: Qt.callLater(view.view.expandRecursively, -1, -1) 0107 0108 property int nameColumn 0109 property int pidColumn 0110 property int uidColumn 0111 property int usernameColumn 0112 0113 property var requiredSensors: [ 0114 "name", 0115 "pid", 0116 "uid", 0117 "username" 0118 ] 0119 property var hiddenSensors: [] 0120 0121 enabled: view.visible 0122 0123 function updateEnabledAttributes() { 0124 var result = [] 0125 for (let i of view.enabledColumns) { 0126 if (processModel.availableAttributes.includes(i)) { 0127 result.push(i) 0128 } 0129 } 0130 0131 var hidden = [] 0132 for (let i of requiredSensors) { 0133 if (result.indexOf(i) == -1 && processModel.availableAttributes.includes(i)) { 0134 result.push(i) 0135 hidden.push(i) 0136 } 0137 } 0138 0139 processModel.nameColumn = result.indexOf("name") 0140 processModel.pidColumn = result.indexOf("pid") 0141 processModel.uidColumn = result.indexOf("uid") 0142 processModel.usernameColumn = result.indexOf("username") 0143 processModel.hiddenSensors = hidden 0144 processModel.enabledAttributes = result 0145 } 0146 } 0147 0148 delegate: DelegateChooser { 0149 role: "displayStyle" 0150 DelegateChoice { 0151 column: view.LayoutMirroring.enabled ? view.model.columnCount() - 1 : 0 0152 Table.FirstCellDelegate { 0153 id: delegate 0154 treeDecorationVisible: !view.flatList 0155 iconName: { 0156 var index = treeView.index(model.row, 0); 0157 index = rowFilter.mapToSource(index) 0158 index = cacheModel.mapToSource(index); 0159 index = displayModel.mapToSource(index); 0160 index = processModel.index(index.row, processModel.nameColumn, index.parent); 0161 return processModel.data(index).split(" ")[0].toLowerCase(); 0162 } 0163 } 0164 } 0165 DelegateChoice { 0166 roleValue: "line" 0167 Table.LineChartCellDelegate { 0168 valueSources: model.cachedComponent != undefined ? model.cachedComponent : [] 0169 maximum: rowFilter.data(treeView.index(model.row, model.column), Process.ProcessDataModel.Maximum) 0170 } 0171 0172 } 0173 DelegateChoice { 0174 roleValue: "lineScaled" 0175 Table.LineChartCellDelegate { 0176 valueSources: model.cachedComponent != undefined ? model.cachedComponent : [] 0177 maximum: rowFilter.data(treeView.index(model.row, model.column), Process.ProcessDataModel.Maximum) 0178 text: Formatter.Formatter.formatValue(parseInt(model.Value) / model.Maximum * 100, model.Unit) 0179 } 0180 0181 } 0182 DelegateChoice { 0183 roleValue: "textScaled" 0184 Table.TextCellDelegate { 0185 text: Formatter.Formatter.formatValue(parseInt(model.Value) / model.Maximum * 100, model.Unit) 0186 } 0187 } 0188 DelegateChoice { Table.TextCellDelegate{} } 0189 } 0190 }