mirror of
https://github.com/harish2704/dotFiles.git
synced 2026-09-10 07:11:09 +00:00
Added system-monitor fork add on
This commit is contained in:
+20
@@ -0,0 +1,20 @@
|
|||||||
|
import QtQuick 2.2
|
||||||
|
import org.kde.plasma.configuration 2.0
|
||||||
|
|
||||||
|
ConfigModel {
|
||||||
|
ConfigCategory {
|
||||||
|
name: i18nc("Config header", "General")
|
||||||
|
icon: 'preferences-desktop-plasma'
|
||||||
|
source: 'config/ConfigGeneral.qml'
|
||||||
|
}
|
||||||
|
ConfigCategory {
|
||||||
|
name: i18nc("Config header", "Data")
|
||||||
|
icon: 'preferences-desktop'
|
||||||
|
source: 'config/ConfigData.qml'
|
||||||
|
}
|
||||||
|
ConfigCategory {
|
||||||
|
name: i18nc("Config header", "Appearance")
|
||||||
|
icon: 'preferences-desktop-color'
|
||||||
|
source: 'config/ConfigAppearance.qml'
|
||||||
|
}
|
||||||
|
}
|
||||||
+220
@@ -0,0 +1,220 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd">
|
||||||
|
<kcfgfile name="" />
|
||||||
|
|
||||||
|
<group name="General">
|
||||||
|
<entry name="updateInterval" type="Double">
|
||||||
|
<default>1.0</default>
|
||||||
|
</entry>
|
||||||
|
|
||||||
|
<entry name="actionService" type="String">
|
||||||
|
<default>org.kde.plasma-systemmonitor</default>
|
||||||
|
</entry>
|
||||||
|
|
||||||
|
<entry name="showCpuMonitor" type="Bool">
|
||||||
|
<default>true</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="cpuUnit" type="String">
|
||||||
|
<default>usage</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="showClock" type="Bool">
|
||||||
|
<default>true</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="clockAgregator" type="String">
|
||||||
|
<default>average</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="showCpuTemperature" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
|
||||||
|
<entry name="showRamMonitor" type="Bool">
|
||||||
|
<default>true</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="memoryUnit" type="String">
|
||||||
|
<default>physical</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="memorySwapGraph" type="Bool">
|
||||||
|
<default>true</default>
|
||||||
|
</entry>
|
||||||
|
|
||||||
|
<entry name="showNetMonitor" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="networkUnit" type="String">
|
||||||
|
<default>kibibyte</default>
|
||||||
|
</entry>
|
||||||
|
|
||||||
|
<entry name="showGpuMonitor" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="gpuMemoryInPercent" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="gpuMemoryGraph" type="Bool">
|
||||||
|
<default>true</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="showGpuTemperature" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
|
||||||
|
<entry name="showDiskMonitor" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
</group>
|
||||||
|
|
||||||
|
<group name="Data">
|
||||||
|
<entry name="ignoredNetworkInterfaces" type="StringList">
|
||||||
|
</entry>
|
||||||
|
<entry name="networkReceivingTotal" type="Double">
|
||||||
|
<default>100000.0</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="networkSendingTotal" type="Double">
|
||||||
|
<default>100000.0</default>
|
||||||
|
</entry>
|
||||||
|
|
||||||
|
<entry name="diskReadTotal" type="Double">
|
||||||
|
<default>200000.0</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="diskWriteTotal" type="Double">
|
||||||
|
<default>200000.0</default>
|
||||||
|
</entry>
|
||||||
|
|
||||||
|
<entry name="gpuIndex" type="String">
|
||||||
|
<default>gpu0</default>
|
||||||
|
</entry>
|
||||||
|
|
||||||
|
<entry name="thresholdWarningCpuTemp" type="Double">
|
||||||
|
<default>85.0</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="thresholdCriticalCpuTemp" type="Double">
|
||||||
|
<default>105.0</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="thresholdWarningMemory" type="Int">
|
||||||
|
<default>70</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="thresholdCriticalMemory" type="Int">
|
||||||
|
<default>90</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="thresholdWarningGpuTemp" type="Int">
|
||||||
|
<default>75</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="thresholdCriticalGpuTemp" type="Int">
|
||||||
|
<default>85</default>
|
||||||
|
</entry>
|
||||||
|
</group>
|
||||||
|
|
||||||
|
<group name="Appearance">
|
||||||
|
<entry name="verticalLayout" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="historyAmount" type="Int">
|
||||||
|
<default>10</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="enableShadows" type="Bool">
|
||||||
|
<default>true</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="fontScale" type="Int">
|
||||||
|
<default>26</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="customGraphWidth" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="graphWidth" type="Int">
|
||||||
|
</entry>
|
||||||
|
<entry name="customGraphHeight" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="graphHeight" type="Int">
|
||||||
|
</entry>
|
||||||
|
<entry name="graphMargin" type="Int">
|
||||||
|
<default>10</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="graphFillOpacity" type="Int">
|
||||||
|
<default>25</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="displayment" type="String">
|
||||||
|
<default>hover-hints</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="placement" type="String">
|
||||||
|
<default>top-right</default>
|
||||||
|
</entry>
|
||||||
|
|
||||||
|
<entry name="graphOrders" type="StringList">
|
||||||
|
<default>cpu,memory,gpu,disks,network</default>
|
||||||
|
</entry>
|
||||||
|
|
||||||
|
<entry name="customCpuColor" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="cpuColor" type="Color">
|
||||||
|
</entry>
|
||||||
|
<entry name="customCpuTemperatureColor" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="cpuTemperatureColor" type="Color">
|
||||||
|
</entry>
|
||||||
|
|
||||||
|
<entry name="customRamColor" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="ramColor" type="Color">
|
||||||
|
</entry>
|
||||||
|
<entry name="customSwapColor" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="swapColor" type="Color">
|
||||||
|
</entry>
|
||||||
|
|
||||||
|
<entry name="customNetDownColor" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="netDownColor" type="Color">
|
||||||
|
</entry>
|
||||||
|
<entry name="customNetUpColor" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="netUpColor" type="Color">
|
||||||
|
</entry>
|
||||||
|
|
||||||
|
<entry name="customGpuColor" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="gpuColor" type="Color">
|
||||||
|
</entry>
|
||||||
|
<entry name="customGpuMemoryColor" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="gpuMemoryColor" type="Color">
|
||||||
|
</entry>
|
||||||
|
<entry name="customGpuTemperatureColor" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="gpuTemperatureColor" type="Color">
|
||||||
|
</entry>
|
||||||
|
|
||||||
|
<entry name="customDiskReadColor" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="diskReadColor" type="Color">
|
||||||
|
</entry>
|
||||||
|
<entry name="customDiskWriteColor" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="diskWriteColor" type="Color">
|
||||||
|
</entry>
|
||||||
|
|
||||||
|
<entry name="customWarningColor" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="warningColor" type="Color">
|
||||||
|
</entry>
|
||||||
|
<entry name="customCriticalColor" type="Bool">
|
||||||
|
<default>false</default>
|
||||||
|
</entry>
|
||||||
|
<entry name="criticalColor" type="Color">
|
||||||
|
</entry>
|
||||||
|
</group>
|
||||||
|
|
||||||
|
</kcfg>
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
+38
@@ -0,0 +1,38 @@
|
|||||||
|
import QtQuick 2.0
|
||||||
|
import QtQuick.Controls 2.12 as QtControls
|
||||||
|
import QtQuick.Layouts 1.1 as QtLayouts
|
||||||
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||||
|
import org.kde.plasma.components 2.0 as PlasmaComponents
|
||||||
|
import org.kde.kirigami 2.6 as Kirigami
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
id: root
|
||||||
|
height: childrenRect.height
|
||||||
|
|
||||||
|
hoverEnabled: true
|
||||||
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
|
||||||
|
property string serviceName: ""
|
||||||
|
property string name: ""
|
||||||
|
property string comment: ""
|
||||||
|
property string iconName: ""
|
||||||
|
property bool selected: false
|
||||||
|
|
||||||
|
QtLayouts.RowLayout {
|
||||||
|
spacing: Kirigami.Units.smallSpacing
|
||||||
|
|
||||||
|
QtControls.ToolTip.text: (comment !== "" ? comment + "\n\n" : "") + "ID: " + serviceName + ".desktop"
|
||||||
|
QtControls.ToolTip.visible: root.containsMouse
|
||||||
|
|
||||||
|
PlasmaCore.IconItem {
|
||||||
|
id: icon
|
||||||
|
|
||||||
|
source: iconName
|
||||||
|
implicitHeight: 16
|
||||||
|
implicitWidth: 16
|
||||||
|
}
|
||||||
|
PlasmaComponents.Label {
|
||||||
|
text: selected ? "<strong>" + name + "</strong>" : name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+31
@@ -0,0 +1,31 @@
|
|||||||
|
import QtQuick 2.0
|
||||||
|
import org.kde.plasma.core 2.1 as PlasmaCore
|
||||||
|
|
||||||
|
PlasmaCore.SortFilterModel {
|
||||||
|
id: appsDetector
|
||||||
|
|
||||||
|
sourceModel: PlasmaCore.DataModel {
|
||||||
|
dataSource: source
|
||||||
|
}
|
||||||
|
|
||||||
|
filterRole: "name"
|
||||||
|
sortColumn: 0
|
||||||
|
sortRole: "name"
|
||||||
|
sortOrder: Qt.AscendingOrder
|
||||||
|
|
||||||
|
property var _dataSource: PlasmaCore.DataSource {
|
||||||
|
id: source
|
||||||
|
engine: "apps"
|
||||||
|
connectedSources: {
|
||||||
|
// Explude folder
|
||||||
|
var result = [];
|
||||||
|
for (var i = 0; i < sources.length; i++) {
|
||||||
|
if (sources[i].indexOf(".desktop") !== -1) {
|
||||||
|
result.push(sources[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
interval: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
+73
@@ -0,0 +1,73 @@
|
|||||||
|
import QtQuick 2.0
|
||||||
|
import org.kde.kitemmodels 1.0 as KItemModels
|
||||||
|
import org.kde.ksysguard.sensors 1.0 as Sensors
|
||||||
|
|
||||||
|
KItemModels.KSortFilterProxyModel {
|
||||||
|
id: detector
|
||||||
|
|
||||||
|
property var model: []
|
||||||
|
property var _privateModel: ListModel {
|
||||||
|
}
|
||||||
|
|
||||||
|
signal ready
|
||||||
|
|
||||||
|
// Find all gpus
|
||||||
|
sourceModel: KItemModels.KDescendantsProxyModel {
|
||||||
|
model: Sensors.SensorTreeModel {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
property var _regex: /gpu\/(gpu\d)\/name/
|
||||||
|
property var _tmpSensors: []
|
||||||
|
filterRowCallback: function (row, parent) {
|
||||||
|
const sensorId = sourceModel.data(sourceModel.index(row, 0), Sensors.SensorTreeModel.SensorId);
|
||||||
|
const found = sensorId.match(_regex);
|
||||||
|
if (found && _tmpSensors.findIndex(item => item === sensorId) === -1) {
|
||||||
|
_tmpSensors.push(sensorId);
|
||||||
|
_privateModel.append({
|
||||||
|
"index": found[1],
|
||||||
|
"name": ""
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find name of GPU
|
||||||
|
property var _nameRegex: /.*\[(.*)\]/
|
||||||
|
property var _sensors: Sensors.SensorDataModel {
|
||||||
|
updateRateLimit: -1
|
||||||
|
property var retrievedData: 0
|
||||||
|
|
||||||
|
onDataChanged: {
|
||||||
|
let name = data(topLeft, Sensors.SensorDataModel.Value);
|
||||||
|
|
||||||
|
// Special case for non NVIDIA graphic card (eg. in AMD the name look like "Navi 21 [Radeon RX 6950 XT]")
|
||||||
|
const found = name.match(_nameRegex);
|
||||||
|
if (found) {
|
||||||
|
if (found[1].startsWith("Radeon")) {
|
||||||
|
name = "AMD ";
|
||||||
|
} else {
|
||||||
|
name = "Intel ";
|
||||||
|
}
|
||||||
|
name += found[1];
|
||||||
|
}
|
||||||
|
_privateModel.setProperty(topLeft.column, "name", name);
|
||||||
|
|
||||||
|
// Stop sensors and update model
|
||||||
|
if (++retrievedData === sensors.length) {
|
||||||
|
enabled = false;
|
||||||
|
detector.model = _privateModel;
|
||||||
|
detector.ready();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
property var _timer: Timer {
|
||||||
|
running: true
|
||||||
|
triggeredOnStart: true
|
||||||
|
|
||||||
|
onTriggered: {
|
||||||
|
running = false;
|
||||||
|
_sensors.sensors = _tmpSensors;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+35
@@ -0,0 +1,35 @@
|
|||||||
|
import QtQuick 2.0
|
||||||
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||||
|
|
||||||
|
QtObject {
|
||||||
|
id: detector
|
||||||
|
|
||||||
|
property var model: []
|
||||||
|
|
||||||
|
property var _dataSource: PlasmaCore.DataSource {
|
||||||
|
id: dataSource
|
||||||
|
engine: "executable"
|
||||||
|
connectedSources: []
|
||||||
|
|
||||||
|
property var excludedInterface: /^(?!lo|bridge|usbus|bond)(.*)$/
|
||||||
|
|
||||||
|
onNewData: {
|
||||||
|
var interfaces = data["stdout"].trim().split('\n');
|
||||||
|
for (var i = 0; i < interfaces.length; i++) {
|
||||||
|
if (excludedInterface.test(interfaces[i])) {
|
||||||
|
_privateModel.append({
|
||||||
|
"name": interfaces[i]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
detector.model = _privateModel;
|
||||||
|
disconnectSource(sourceName); // cmd finished
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
connectSource("ip -o link show | awk -F': ' '{print $2}'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
property var _privateModel: ListModel {}
|
||||||
|
}
|
||||||
+78
@@ -0,0 +1,78 @@
|
|||||||
|
/**
|
||||||
|
* @typedef {object} BinaryUnit
|
||||||
|
* @property {string} name The name
|
||||||
|
* @property {string} suffix The suffix
|
||||||
|
* @property {string} kiloChar The char for "kilo"
|
||||||
|
* @property {number} KiBDiff The difference with `kibibyte`
|
||||||
|
* @property {number} multiplier The multiplier amount (`1000` for metric and `1024` for binary)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the binary unit from they name
|
||||||
|
* @param {string} dialect The binary unit name
|
||||||
|
* @returns {BinaryUnit} The binary unit
|
||||||
|
*/
|
||||||
|
function getNetworkDialectInfo(dialect) {
|
||||||
|
switch (dialect) {
|
||||||
|
case "kilobyte":
|
||||||
|
return {
|
||||||
|
name: "kilobyte",
|
||||||
|
suffix: i18nc("kilobyte suffix", "Bps"),
|
||||||
|
kiloChar: "k",
|
||||||
|
KiBDiff: 1.024,
|
||||||
|
multiplier: 1024,
|
||||||
|
};
|
||||||
|
case "kilobit":
|
||||||
|
return {
|
||||||
|
name: "kilobit",
|
||||||
|
suffix: i18nc("kilobit suffix", "bps"),
|
||||||
|
kiloChar: "k",
|
||||||
|
KiBDiff: 8,
|
||||||
|
multiplier: 1024,
|
||||||
|
};
|
||||||
|
default:
|
||||||
|
return {
|
||||||
|
name: "kibibyte",
|
||||||
|
suffix: i18nc("kibibyte suffix", "iB/s"),
|
||||||
|
kiloChar: "K",
|
||||||
|
KiBDiff: 1,
|
||||||
|
multiplier: 1024,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert value from bytes to the appropriate string representation using the binary unit dialect.
|
||||||
|
*
|
||||||
|
* @param {number} value The value in byte/bit
|
||||||
|
* @param {BinaryUnit} dialect The binary unit standard to use
|
||||||
|
* @param {number} [precision=1] Number of places after the decimal point to use.
|
||||||
|
* @returns Converted value as a translated string including the units.
|
||||||
|
*/
|
||||||
|
function formatByteValue(value, dialect, precision = 1) {
|
||||||
|
if (value === 0 || isNaN(parseInt(value))) {
|
||||||
|
return "0 " + dialect.suffix.replace("i", "");
|
||||||
|
} else if (dialect.name === "kibibyte" && value <= dialect.multiplier) {
|
||||||
|
return "0 " + dialect.suffix.replace("i", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
var sizes = ["", dialect.kiloChar, "M", "G", "T", "P", "Z", "Y"];
|
||||||
|
|
||||||
|
// Search unit conversion
|
||||||
|
var unit = Math.floor(Math.log(value) / Math.log(dialect.multiplier));
|
||||||
|
|
||||||
|
// Bytes/Bits, no rounding
|
||||||
|
precision = precision < 0 ? 0 : precision;
|
||||||
|
if (unit === 0) {
|
||||||
|
precision = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
parseFloat(
|
||||||
|
(value / Math.pow(dialect.multiplier, unit)).toFixed(precision)
|
||||||
|
) +
|
||||||
|
" " +
|
||||||
|
sizes[unit] +
|
||||||
|
dialect.suffix
|
||||||
|
);
|
||||||
|
}
|
||||||
+70
@@ -0,0 +1,70 @@
|
|||||||
|
import QtQuick 2.9
|
||||||
|
import org.kde.plasma.plasmoid 2.0
|
||||||
|
import "./base" as RMBaseGraph
|
||||||
|
import "../sensors" as RMSensors
|
||||||
|
|
||||||
|
RMBaseGraph.SensorGraph {
|
||||||
|
id: root
|
||||||
|
objectName: "CpuGraph"
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: plasmoid.configuration
|
||||||
|
function onCpuUnitChanged() {
|
||||||
|
_updateSensors();
|
||||||
|
}
|
||||||
|
function onClockAgregatorChanged() {
|
||||||
|
if (!manualFrequency.needManual) {
|
||||||
|
_updateSensors();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Config options
|
||||||
|
property color temperatureColor: plasmoid.configuration.customCpuTemperatureColor ? plasmoid.configuration.cpuTemperatureColor : theme.textColor
|
||||||
|
|
||||||
|
// Graph options
|
||||||
|
// NOTE: "sensorsModel.sensors" is set by "_updateSensors"
|
||||||
|
chartColor: plasmoid.configuration.customCpuColor ? plasmoid.configuration.cpuColor : theme.highlightColor
|
||||||
|
|
||||||
|
chart.yRange {
|
||||||
|
from: 0
|
||||||
|
to: 100
|
||||||
|
}
|
||||||
|
|
||||||
|
// Labels options
|
||||||
|
thresholds: [undefined, undefined, [plasmoid.configuration.thresholdWarningCpuTemp, plasmoid.configuration.thresholdCriticalCpuTemp]]
|
||||||
|
|
||||||
|
textContainer {
|
||||||
|
labelColors: [root.chartColor, undefined, temperatureColor]
|
||||||
|
valueColors: [undefined, undefined, temperatureColor]
|
||||||
|
|
||||||
|
labels: ["CPU", (plasmoid.configuration.showClock ? i18nc("Graph label", "Clock") : ""), (plasmoid.configuration.showCpuTemperature ? i18nc("Graph label", "Temp.") : "")]
|
||||||
|
}
|
||||||
|
|
||||||
|
function _updateSensors() {
|
||||||
|
// Manual cpu frequency handle
|
||||||
|
// TODO (3.0): remove this
|
||||||
|
let frequencySensorId = "cpu/all/" + plasmoid.configuration.clockAgregator + "Frequency";
|
||||||
|
if (manualFrequency.needManual) {
|
||||||
|
frequencySensorId = "cpu/cpu0/frequency";
|
||||||
|
}
|
||||||
|
// END Manual cpu frequency handle
|
||||||
|
sensorsModel.sensors = ["cpu/all/" + plasmoid.configuration.cpuUnit, frequencySensorId, "cpu/cpu0/temperature"];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Manual cpu frequency handle
|
||||||
|
// TODO (3.0): remove this
|
||||||
|
_formatValue: (index, data) => {
|
||||||
|
if (index === 1 && manualFrequency.needManual) {
|
||||||
|
return manualFrequency.getFormattedValue();
|
||||||
|
}
|
||||||
|
return _defaultFormatValue(index, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
RMSensors.CpuFrequency {
|
||||||
|
id: manualFrequency
|
||||||
|
agregator: plasmoid.configuration.clockAgregator
|
||||||
|
|
||||||
|
onReady: _updateSensors()
|
||||||
|
}
|
||||||
|
}
|
||||||
+38
@@ -0,0 +1,38 @@
|
|||||||
|
import QtQuick 2.9
|
||||||
|
import org.kde.plasma.plasmoid 2.0
|
||||||
|
import "./base" as RMBaseGraph
|
||||||
|
import "../functions.js" as Functions
|
||||||
|
|
||||||
|
RMBaseGraph.TwoSensorsGraph {
|
||||||
|
id: root
|
||||||
|
objectName: "DisksGraph"
|
||||||
|
|
||||||
|
readonly property var diskIoDialect: Functions.getNetworkDialectInfo("kibibyte")
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: plasmoid.configuration
|
||||||
|
function onDiskReadTotalChanged() {
|
||||||
|
_updateUplimits();
|
||||||
|
}
|
||||||
|
function onDiskWriteTotalChanged() {
|
||||||
|
_updateUplimits();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Component.onCompleted: {
|
||||||
|
_updateUplimits();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Labels
|
||||||
|
textContainer {
|
||||||
|
labelColors: root.colors
|
||||||
|
labels: [i18nc("Graph label", "Read"), i18nc("Graph label", "Write"), ""]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Graph options
|
||||||
|
sensorsModel.sensors: ["disk/all/read", "disk/all/write"]
|
||||||
|
colors: [(plasmoid.configuration.customDiskReadColor ? plasmoid.configuration.diskReadColor : theme.highlightColor), (plasmoid.configuration.customDiskWriteColor ? plasmoid.configuration.diskWriteColor : theme.positiveTextColor)]
|
||||||
|
|
||||||
|
function _updateUplimits() {
|
||||||
|
uplimits = [plasmoid.configuration.diskReadTotal * diskIoDialect.multiplier, plasmoid.configuration.diskWriteTotal * diskIoDialect.multiplier];
|
||||||
|
}
|
||||||
|
}
|
||||||
+85
@@ -0,0 +1,85 @@
|
|||||||
|
import QtQuick 2.9
|
||||||
|
import org.kde.plasma.plasmoid 2.0
|
||||||
|
import org.kde.ksysguard.sensors 1.0 as Sensors
|
||||||
|
import "./base" as RMBaseGraph
|
||||||
|
|
||||||
|
RMBaseGraph.TwoSensorsGraph {
|
||||||
|
id: root
|
||||||
|
objectName: "GpuGraph"
|
||||||
|
|
||||||
|
// Config options
|
||||||
|
property color temperatureColor: plasmoid.configuration.customGpuTemperatureColor ? plasmoid.configuration.gpuTemperatureColor : theme.textColor
|
||||||
|
|
||||||
|
// Bind config changes
|
||||||
|
Connections {
|
||||||
|
target: plasmoid.configuration
|
||||||
|
function onGpuMemoryInPercentChanged() {
|
||||||
|
uplimits = [100, plasmoid.configuration.gpuMemoryInPercent ? 100 : maxQueryModel.maxMemory];
|
||||||
|
_clear();
|
||||||
|
}
|
||||||
|
function onGpuIndexChanged() {
|
||||||
|
maxQueryModel.enabled = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Labels
|
||||||
|
thresholds: [undefined, undefined, [plasmoid.configuration.thresholdWarningGpuTemp, plasmoid.configuration.thresholdCriticalGpuTemp]]
|
||||||
|
|
||||||
|
textContainer {
|
||||||
|
labelColors: [root.colors[0], root.colors[1], temperatureColor]
|
||||||
|
valueColors: [undefined, undefined, temperatureColor]
|
||||||
|
|
||||||
|
labels: ["GPU", (plasmoid.configuration.gpuMemoryGraph ? "VRAM" : ""), (plasmoid.configuration.showGpuTemperature ? i18nc("Graph label", "Temp.") : "")]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Graph options
|
||||||
|
// NOTE: "sensorsModel.sensors" set from "maxQueryModel"
|
||||||
|
colors: [(plasmoid.configuration.customGpuColor ? plasmoid.configuration.gpuColor : theme.highlightColor), (plasmoid.configuration.customGpuMemoryColor ? plasmoid.configuration.gpuMemoryColor : theme.positiveTextColor)]
|
||||||
|
|
||||||
|
// Override methods, for handle memeory in percent
|
||||||
|
_update: () => {
|
||||||
|
for (let i = 0; i < sensorsModel.sensors.length; i++) {
|
||||||
|
let value = sensorsModel.getInfo(i);
|
||||||
|
if (i === 1 && plasmoid.configuration.gpuMemoryInPercent) {
|
||||||
|
value = (value / maxQueryModel.maxMemory) * 100;
|
||||||
|
}
|
||||||
|
root._insertChartData(i, value);
|
||||||
|
|
||||||
|
// Update label
|
||||||
|
if (textContainer.valueVisible) {
|
||||||
|
_updateData(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_formatValue: (index, data) => {
|
||||||
|
if (index === 1 && plasmoid.configuration.gpuMemoryInPercent) {
|
||||||
|
return i18nc("Percent unit", "%1%", Math.round((data.value / maxQueryModel.maxMemory) * 1000) / 10); // This is for round to 1 decimal
|
||||||
|
}
|
||||||
|
return _defaultFormatValue(index, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize limits and threshold
|
||||||
|
Sensors.SensorDataModel {
|
||||||
|
id: maxQueryModel
|
||||||
|
sensors: ["gpu/" + plasmoid.configuration.gpuIndex + "/totalVram"]
|
||||||
|
enabled: true
|
||||||
|
property int maxMemory: -1
|
||||||
|
|
||||||
|
onDataChanged: {
|
||||||
|
// Update values
|
||||||
|
const valueVar = parseInt(data(topLeft, Sensors.SensorDataModel.Value));
|
||||||
|
if (isNaN(valueVar) || valueVar <= 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
enabled = false;
|
||||||
|
maxMemory = valueVar;
|
||||||
|
|
||||||
|
// Update graph Y range
|
||||||
|
root.uplimits = [100, plasmoid.configuration.gpuMemoryInPercent ? 100 : maxMemory];
|
||||||
|
|
||||||
|
// Update sensors
|
||||||
|
const gpu = plasmoid.configuration.gpuIndex
|
||||||
|
root.sensorsModel.sensors = ["gpu/" + gpu + "/usage", "gpu/" + gpu + "/usedVram", "gpu/" + gpu + "/temperature"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+101
@@ -0,0 +1,101 @@
|
|||||||
|
import QtQuick 2.9
|
||||||
|
import org.kde.plasma.plasmoid 2.0
|
||||||
|
import org.kde.ksysguard.sensors 1.0 as Sensors
|
||||||
|
import "./base" as RMBaseGraph
|
||||||
|
|
||||||
|
RMBaseGraph.TwoSensorsGraph {
|
||||||
|
id: root
|
||||||
|
objectName: "MemoryGraph"
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: plasmoid.configuration
|
||||||
|
function onMemoryUnitChanged() { // Values: usage, system, user
|
||||||
|
const oldLimit1 = uplimits[0];
|
||||||
|
if (plasmoid.configuration.memoryUnit.endsWith("-percent")) {
|
||||||
|
uplimits = [100, 100];
|
||||||
|
} else {
|
||||||
|
uplimits = maxQueryModel.maxMemory;
|
||||||
|
}
|
||||||
|
_updateThresholds();
|
||||||
|
_updateSensors();
|
||||||
|
if (oldLimit1 != uplimits[0]) {
|
||||||
|
_clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function onMemorySwapGraphChanged() {
|
||||||
|
_updateSensors();
|
||||||
|
}
|
||||||
|
|
||||||
|
function onThresholdWarningMemoryChanged() {
|
||||||
|
_updateThresholds();
|
||||||
|
}
|
||||||
|
function onThresholdCriticalMemoryChanged() {
|
||||||
|
_updateThresholds();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Component.onCompleted: {
|
||||||
|
_updateThresholds();
|
||||||
|
_updateSensors();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Labels
|
||||||
|
textContainer {
|
||||||
|
labelColors: root.colors
|
||||||
|
valueColors: [undefined, root.colors[1]]
|
||||||
|
labelsVisibleWhenZero: [true, false, true]
|
||||||
|
|
||||||
|
labels: ["RAM", (plasmoid.configuration.memorySwapGraph ? "Swap" : ""), ""]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Graph options
|
||||||
|
// NOTE: "sensorsModel.sensors" is set by "_updateSensors"
|
||||||
|
colors: [(plasmoid.configuration.customRamColor ? plasmoid.configuration.ramColor : theme.highlightColor), (plasmoid.configuration.customSwapColor ? plasmoid.configuration.swapColor : theme.negativeTextColor)]
|
||||||
|
|
||||||
|
// Initialize limits and threshold
|
||||||
|
Sensors.SensorDataModel {
|
||||||
|
id: maxQueryModel
|
||||||
|
sensors: ["memory/physical/total", "memory/swap/total"]
|
||||||
|
enabled: true
|
||||||
|
property var maxMemory: [-1, -1]
|
||||||
|
|
||||||
|
onDataChanged: {
|
||||||
|
// Update values
|
||||||
|
const value = parseInt(data(topLeft, Sensors.SensorDataModel.Value));
|
||||||
|
if (isNaN(value) || (topLeft.column === 0 && value <= 0)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
maxMemory[topLeft.column] = value;
|
||||||
|
|
||||||
|
// Update graph Y range and sensors
|
||||||
|
if (maxMemory[0] > 0 && maxMemory[1] >= 0) {
|
||||||
|
enabled = false;
|
||||||
|
if (!plasmoid.configuration.memoryUnit.endsWith("-percent")) {
|
||||||
|
root.uplimits = maxMemory;
|
||||||
|
}
|
||||||
|
root._updateThresholds();
|
||||||
|
root._updateSensors();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function _updateThresholds() {
|
||||||
|
const thresholdWarningMemory = plasmoid.configuration.thresholdWarningMemory;
|
||||||
|
const thresholdCriticalMemory = plasmoid.configuration.thresholdCriticalMemory;
|
||||||
|
if (!plasmoid.configuration.memoryUnit.endsWith("-percent")) {
|
||||||
|
thresholds[0] = [maxQueryModel.maxMemory[0] * (thresholdWarningMemory / 100.0), maxQueryModel.maxMemory[0] * (thresholdCriticalMemory / 100.0)];
|
||||||
|
} else {
|
||||||
|
thresholds[0] = [thresholdWarningMemory, thresholdCriticalMemory];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function _updateSensors() {
|
||||||
|
const info = plasmoid.configuration.memoryUnit.split("-");
|
||||||
|
const suffix = info[1] === "percent" ? "Percent" : "";
|
||||||
|
const memSensor = "memory/physical/" + (info[0] === "physical" ? "used" : "application") + suffix;
|
||||||
|
if (plasmoid.configuration.memorySwapGraph) {
|
||||||
|
sensorsModel.sensors = [memSensor, "memory/swap/used" + suffix];
|
||||||
|
} else {
|
||||||
|
sensorsModel.sensors = [memSensor];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+113
@@ -0,0 +1,113 @@
|
|||||||
|
import QtQuick 2.9
|
||||||
|
import org.kde.plasma.plasmoid 2.0
|
||||||
|
import "./base" as RMBaseGraph
|
||||||
|
import "../" as RMComponents
|
||||||
|
import "../functions.js" as Functions
|
||||||
|
|
||||||
|
RMBaseGraph.TwoSensorsGraph {
|
||||||
|
id: root
|
||||||
|
objectName: "NetworkGraph"
|
||||||
|
|
||||||
|
property var dialect: Functions.getNetworkDialectInfo(plasmoid.configuration.networkUnit)
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: plasmoid.configuration
|
||||||
|
function onIgnoredNetworkInterfacesChanged() {
|
||||||
|
_updateSensors();
|
||||||
|
}
|
||||||
|
|
||||||
|
function onNetworkReceivingTotalChanged() {
|
||||||
|
_updateUplimits();
|
||||||
|
}
|
||||||
|
function onNetworkSendingTotalChanged() {
|
||||||
|
_updateUplimits();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Component.onCompleted: _updateUplimits()
|
||||||
|
|
||||||
|
// Labels
|
||||||
|
textContainer {
|
||||||
|
labelColors: root.colors
|
||||||
|
labels: [i18nc("Graph label", "Receiving"), i18nc("Graph label", "Sending"), ""]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Graph options
|
||||||
|
colors: [(plasmoid.configuration.customNetDownColor ? plasmoid.configuration.netDownColor : theme.highlightColor), (plasmoid.configuration.customNetUpColor ? plasmoid.configuration.netUpColor : theme.positiveTextColor)]
|
||||||
|
|
||||||
|
// Initialized sensors
|
||||||
|
RMComponents.NetworkInterfaceDetector {
|
||||||
|
id: networkInterfaces
|
||||||
|
onModelChanged: _updateSensors()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Override methods, for commulate sensors and support custom dialect
|
||||||
|
property var _downloadValue
|
||||||
|
property var _uploadValue
|
||||||
|
|
||||||
|
_update: () => {
|
||||||
|
// Cummulate sensors by group
|
||||||
|
let data;
|
||||||
|
let downloadValue = 0, uploadValue = 0;
|
||||||
|
for (let i = 0; i < sensorsModel.sensors.length; i++) {
|
||||||
|
data = sensorsModel.getData(i);
|
||||||
|
if (typeof data === "undefined") {
|
||||||
|
continue;
|
||||||
|
} else if (data.sensorId.indexOf('/download') !== -1) {
|
||||||
|
downloadValue += data.value;
|
||||||
|
} else {
|
||||||
|
uploadValue += data.value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fix dialect AND store it for update label
|
||||||
|
_downloadValue = downloadValue *= dialect.KiBDiff;
|
||||||
|
_uploadValue = uploadValue *= dialect.KiBDiff;
|
||||||
|
|
||||||
|
// Insert datas
|
||||||
|
root._insertChartData(0, downloadValue);
|
||||||
|
root._insertChartData(1, uploadValue);
|
||||||
|
|
||||||
|
// Update label
|
||||||
|
if (textContainer.valueVisible) {
|
||||||
|
_updateData(0);
|
||||||
|
_updateData(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function _updateData(index) {
|
||||||
|
// Cancel update if first data is not here
|
||||||
|
if (!sensorsModel.hasIndex(0, 0)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retrieve label need to update
|
||||||
|
const label = _getLabel(index);
|
||||||
|
if (typeof label === "undefined" || !label.enabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const value = index === 0 ? _downloadValue : _uploadValue;
|
||||||
|
|
||||||
|
// Show value on label
|
||||||
|
label.text = Functions.formatByteValue(value, dialect);
|
||||||
|
label.visible = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _updateSensors() {
|
||||||
|
if (typeof networkInterfaces.model.count === "undefined") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const sensors = [];
|
||||||
|
for (let i = 0; i < networkInterfaces.model.count; i++) {
|
||||||
|
const name = networkInterfaces.model.get(i).name;
|
||||||
|
if (plasmoid.configuration.ignoredNetworkInterfaces.indexOf(name) === -1) {
|
||||||
|
sensors.push("network/" + name + "/download", "network/" + name + "/upload");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sensorsModel.sensors = sensors;
|
||||||
|
_clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
function _updateUplimits() {
|
||||||
|
uplimits = [plasmoid.configuration.networkReceivingTotal * dialect.multiplier, plasmoid.configuration.networkSendingTotal * dialect.multiplier];
|
||||||
|
}
|
||||||
|
}
|
||||||
+39
@@ -0,0 +1,39 @@
|
|||||||
|
import QtQuick 2.9
|
||||||
|
import org.kde.quickcharts 1.0 as Charts
|
||||||
|
|
||||||
|
Charts.ArraySource {
|
||||||
|
property int maximumHistory: -1
|
||||||
|
|
||||||
|
onMaximumHistoryChanged: {
|
||||||
|
if (maximumHistory != -1) {
|
||||||
|
if (array.length === 0) {
|
||||||
|
array = Array(maximumHistory).fill(0);
|
||||||
|
}
|
||||||
|
_update(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function clear() {
|
||||||
|
array = maximumHistory === -1 ? [] : Array(maximumHistory).fill(0);
|
||||||
|
// Emit update
|
||||||
|
dataChanged();
|
||||||
|
}
|
||||||
|
function insertValue(value) {
|
||||||
|
array = [value, ...array];
|
||||||
|
_update();
|
||||||
|
}
|
||||||
|
|
||||||
|
function _update() {
|
||||||
|
// Reorder array
|
||||||
|
while (array.length > 0 && array.length > maximumHistory) {
|
||||||
|
array = array.slice(0, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Emit update
|
||||||
|
dataChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
array = maximumHistory === -1 ? [] : Array(maximumHistory).fill(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
+164
@@ -0,0 +1,164 @@
|
|||||||
|
import QtQuick 2.9
|
||||||
|
import org.kde.plasma.plasmoid 2.0
|
||||||
|
import org.kde.plasma.components 2.0 as PlasmaComponents
|
||||||
|
import org.kde.ksysguard.sensors 1.0 as Sensors
|
||||||
|
import org.kde.ksysguard.formatter 1.0 as Formatter
|
||||||
|
import "./" as RMBaseGraph
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
signal chartDataChanged(int index)
|
||||||
|
signal showValueInLabel
|
||||||
|
signal labelChanged(PlasmaComponents.Label label, var value)
|
||||||
|
|
||||||
|
// Aliases
|
||||||
|
readonly property alias textContainer: textContainer
|
||||||
|
readonly property alias sensorsModel: sensorsModel
|
||||||
|
|
||||||
|
// Thresholds properties
|
||||||
|
property var thresholds: [undefined, undefined, undefined]
|
||||||
|
property color thresholdWarningColor: plasmoid.configuration.customWarningColor ? plasmoid.configuration.warningColor : theme.neutralTextColor
|
||||||
|
property color thresholdCriticalColor: plasmoid.configuration.customCriticalColor ? plasmoid.configuration.criticalColor : theme.negativeTextColor
|
||||||
|
|
||||||
|
// Labels
|
||||||
|
RMBaseGraph.GraphText {
|
||||||
|
id: textContainer
|
||||||
|
anchors.fill: parent
|
||||||
|
z: 1
|
||||||
|
|
||||||
|
onShowValueInLabel: {
|
||||||
|
// Update labels
|
||||||
|
for (let i = 0; i < sensorsModel.sensors.length; i++) {
|
||||||
|
_updateData(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Emit signal
|
||||||
|
root.showValueInLabel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retrieve data from sensors, and update labels
|
||||||
|
Sensors.SensorDataModel {
|
||||||
|
id: sensorsModel
|
||||||
|
updateRateLimit: -1
|
||||||
|
enabled: root.visible
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the data from sensor
|
||||||
|
* @param {number} column The sensors index
|
||||||
|
* @returns The data value, formatted value and sensor id
|
||||||
|
*/
|
||||||
|
function getData(column) {
|
||||||
|
if (!hasIndex(0, column)) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
const indexVar = index(0, column);
|
||||||
|
const value = data(indexVar, Sensors.SensorDataModel.Value);
|
||||||
|
const res = {
|
||||||
|
"sensorId": data(indexVar, Sensors.SensorDataModel.SensorId),
|
||||||
|
"value": value
|
||||||
|
};
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get info from sensor
|
||||||
|
* @param {number} column The sensor index
|
||||||
|
* @param {number} role The role id
|
||||||
|
* @returns The sensor info
|
||||||
|
*/
|
||||||
|
function getInfo(column, role = Sensors.SensorDataModel.Value) {
|
||||||
|
if (!hasIndex(0, column)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return data(index(0, column), role);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: root
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Re assign sensorsModel.sensors when enable visibility for right initialize it.
|
||||||
|
* This is due to an issue when set sensors and model is disabled, the sensors is never initialized
|
||||||
|
* Bug reported at : https://bugs.kde.org/show_bug.cgi?id=469234
|
||||||
|
*/
|
||||||
|
function onVisibleChanged() {
|
||||||
|
if (!root.visible) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const sensors = sensorsModel.sensors;
|
||||||
|
sensorsModel.sensors = [];
|
||||||
|
sensorsModel.sensors = sensors;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process functions
|
||||||
|
property var _insertChartData: (column, value) => {} // NOTE: this is implemented by children
|
||||||
|
property var _clear: () => {
|
||||||
|
for (let i = 0; i < sensorsModel.sensors.length; i++) {
|
||||||
|
_updateData(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
property var _update: () => {
|
||||||
|
for (let i = 0; i < sensorsModel.sensors.length; i++) {
|
||||||
|
root._insertChartData(i, sensorsModel.getInfo(i));
|
||||||
|
|
||||||
|
// Update label
|
||||||
|
if (textContainer.valueVisible) {
|
||||||
|
_updateData(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function _getLabel(index) {
|
||||||
|
if (index === 0) {
|
||||||
|
return textContainer.firstLineLabel;
|
||||||
|
} else if (index === 1) {
|
||||||
|
return textContainer.secondLineLabel;
|
||||||
|
} else if (index === 2) {
|
||||||
|
return textContainer.thirdLineLabel;
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _updateData(index) {
|
||||||
|
// Retrieve label need to update
|
||||||
|
const label = _getLabel(index);
|
||||||
|
if (typeof label === "undefined" || !label.enabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const data = sensorsModel.getData(index);
|
||||||
|
if (typeof data === 'undefined') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hide can't be zero label
|
||||||
|
if (!textContainer.labelsVisibleWhenZero[index] && data.value === 0) {
|
||||||
|
label.text = '';
|
||||||
|
label.visible = false;
|
||||||
|
} else {
|
||||||
|
// Handle threshold value
|
||||||
|
if (typeof thresholds[index] !== 'undefined') {
|
||||||
|
if (data.value >= thresholds[index][1]) {
|
||||||
|
label.color = thresholdCriticalColor;
|
||||||
|
} else if (data.value >= thresholds[index][0]) {
|
||||||
|
label.color = thresholdWarningColor;
|
||||||
|
} else {
|
||||||
|
label.color = textContainer.getTextColor(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Show value on label
|
||||||
|
label.text = _formatValue(index, data);
|
||||||
|
label.visible = label.enabled;
|
||||||
|
}
|
||||||
|
labelChanged(label, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
property var _formatValue: _defaultFormatValue
|
||||||
|
function _defaultFormatValue(index, data) {
|
||||||
|
return Formatter.Formatter.formatValueShowNull(data.value, sensorsModel.getInfo(index, Sensors.SensorDataModel.Unit));
|
||||||
|
}
|
||||||
|
}
|
||||||
+257
@@ -0,0 +1,257 @@
|
|||||||
|
import QtQuick 2.9
|
||||||
|
import QtGraphicalEffects 1.0
|
||||||
|
import org.kde.plasma.plasmoid 2.0
|
||||||
|
import org.kde.plasma.components 2.0 as PlasmaComponents
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: graphText
|
||||||
|
|
||||||
|
signal showValueInLabel
|
||||||
|
|
||||||
|
property bool valueVisible: false
|
||||||
|
|
||||||
|
// Aliases
|
||||||
|
readonly property alias firstLineLabel: firstLineLabel
|
||||||
|
readonly property alias secondLineLabel: secondLineLabel
|
||||||
|
readonly property alias thirdLineLabel: thirdLineLabel
|
||||||
|
|
||||||
|
// Text properties
|
||||||
|
property var labels: ["", "", ""]
|
||||||
|
property var valueColors: [theme.textColor, theme.textColor, theme.textColor]
|
||||||
|
property var labelColors: [theme.highlightColor, theme.textColor, theme.textColor]
|
||||||
|
|
||||||
|
property var labelsVisibleWhenZero: [true, true, true]
|
||||||
|
|
||||||
|
// Config aliases
|
||||||
|
property string displayment: plasmoid.configuration.displayment // Values: always, hover, hover-hints
|
||||||
|
|
||||||
|
// Bind config changes
|
||||||
|
onDisplaymentChanged: {
|
||||||
|
if (displayment === 'hover') {
|
||||||
|
valueVisible = mouseArea.containsMouse;
|
||||||
|
_setLabelsState(valueVisible);
|
||||||
|
if (mouseArea.containsMouse) {
|
||||||
|
showValueInLabel();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_setLabelsState(true);
|
||||||
|
showValueInLabel();
|
||||||
|
valueVisible = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bind properties changes
|
||||||
|
onLabelsChanged: {
|
||||||
|
firstLineLabel.enabled = firstLineLabel.visible = labels[0] != "";
|
||||||
|
secondLineLabel.enabled = secondLineLabel.visible = labels[1] != "";
|
||||||
|
thirdLineLabel.enabled = thirdLineLabel.visible = labels[2] != "";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Labels
|
||||||
|
Flow {
|
||||||
|
id: textContainer
|
||||||
|
width: parent.width
|
||||||
|
state: plasmoid.configuration.placement // Values: top-right, top-left, bottom-right, bottom-left
|
||||||
|
spacing: -2
|
||||||
|
flow: Flow.TopToBottom
|
||||||
|
|
||||||
|
// First line
|
||||||
|
PlasmaComponents.Label {
|
||||||
|
id: firstLineLabel
|
||||||
|
width: parent.width
|
||||||
|
height: contentHeight
|
||||||
|
readonly property int index: 0
|
||||||
|
|
||||||
|
text: "..."
|
||||||
|
color: getTextColor(index)
|
||||||
|
font.pointSize: -1
|
||||||
|
}
|
||||||
|
PlasmaComponents.Label {
|
||||||
|
id: secondLineLabel
|
||||||
|
width: parent.width
|
||||||
|
height: contentHeight
|
||||||
|
readonly property int index: 1
|
||||||
|
|
||||||
|
text: "..."
|
||||||
|
color: getTextColor(index)
|
||||||
|
font.pointSize: -1
|
||||||
|
}
|
||||||
|
PlasmaComponents.Label {
|
||||||
|
id: thirdLineLabel
|
||||||
|
width: parent.width
|
||||||
|
height: contentHeight
|
||||||
|
readonly property int index: 2
|
||||||
|
|
||||||
|
text: "..."
|
||||||
|
color: getTextColor(index)
|
||||||
|
font.pointSize: -1
|
||||||
|
}
|
||||||
|
|
||||||
|
// States
|
||||||
|
states: [
|
||||||
|
State {
|
||||||
|
name: 'top-left'
|
||||||
|
AnchorChanges {
|
||||||
|
target: textContainer
|
||||||
|
anchors.top: parent.top
|
||||||
|
}
|
||||||
|
|
||||||
|
PropertyChanges {
|
||||||
|
target: firstLineLabel
|
||||||
|
horizontalAlignment: Text.AlignLeft
|
||||||
|
}
|
||||||
|
PropertyChanges {
|
||||||
|
target: secondLineLabel
|
||||||
|
horizontalAlignment: Text.AlignLeft
|
||||||
|
}
|
||||||
|
PropertyChanges {
|
||||||
|
target: thirdLineLabel
|
||||||
|
horizontalAlignment: Text.AlignLeft
|
||||||
|
}
|
||||||
|
},
|
||||||
|
State {
|
||||||
|
name: 'top-right'
|
||||||
|
AnchorChanges {
|
||||||
|
target: textContainer
|
||||||
|
anchors.top: parent.top
|
||||||
|
}
|
||||||
|
|
||||||
|
PropertyChanges {
|
||||||
|
target: firstLineLabel
|
||||||
|
horizontalAlignment: Text.AlignRight
|
||||||
|
}
|
||||||
|
PropertyChanges {
|
||||||
|
target: secondLineLabel
|
||||||
|
horizontalAlignment: Text.AlignRight
|
||||||
|
}
|
||||||
|
PropertyChanges {
|
||||||
|
target: thirdLineLabel
|
||||||
|
horizontalAlignment: Text.AlignRight
|
||||||
|
}
|
||||||
|
},
|
||||||
|
State {
|
||||||
|
name: 'bottom-left'
|
||||||
|
AnchorChanges {
|
||||||
|
target: textContainer
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
}
|
||||||
|
|
||||||
|
PropertyChanges {
|
||||||
|
target: firstLineLabel
|
||||||
|
horizontalAlignment: Text.AlignLeft
|
||||||
|
}
|
||||||
|
PropertyChanges {
|
||||||
|
target: secondLineLabel
|
||||||
|
horizontalAlignment: Text.AlignLeft
|
||||||
|
}
|
||||||
|
PropertyChanges {
|
||||||
|
target: thirdLineLabel
|
||||||
|
horizontalAlignment: Text.AlignLeft
|
||||||
|
}
|
||||||
|
},
|
||||||
|
State {
|
||||||
|
name: 'bottom-right'
|
||||||
|
AnchorChanges {
|
||||||
|
target: textContainer
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
}
|
||||||
|
|
||||||
|
PropertyChanges {
|
||||||
|
target: firstLineLabel
|
||||||
|
horizontalAlignment: Text.AlignRight
|
||||||
|
}
|
||||||
|
PropertyChanges {
|
||||||
|
target: secondLineLabel
|
||||||
|
horizontalAlignment: Text.AlignRight
|
||||||
|
}
|
||||||
|
PropertyChanges {
|
||||||
|
target: thirdLineLabel
|
||||||
|
horizontalAlignment: Text.AlignRight
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
DropShadow {
|
||||||
|
visible: plasmoid.configuration.enableShadows
|
||||||
|
anchors.fill: textContainer
|
||||||
|
radius: 1
|
||||||
|
spread: 1
|
||||||
|
fast: true
|
||||||
|
color: theme.backgroundColor
|
||||||
|
source: textContainer
|
||||||
|
}
|
||||||
|
|
||||||
|
// Action
|
||||||
|
MouseArea {
|
||||||
|
id: mouseArea
|
||||||
|
anchors.fill: parent
|
||||||
|
acceptedButtons: Qt.NoButton
|
||||||
|
hoverEnabled: displayment !== 'always'
|
||||||
|
|
||||||
|
property bool _firstHover: true
|
||||||
|
property var _oldLabelsState: []
|
||||||
|
function _saveOldLabelsState() {
|
||||||
|
_oldLabelsState = [[firstLineLabel.text + "", !!firstLineLabel.visible], [secondLineLabel.text + "", !!secondLineLabel.visible], [thirdLineLabel.text + "", !!thirdLineLabel.visible]];
|
||||||
|
}
|
||||||
|
|
||||||
|
onEntered: {
|
||||||
|
if (displayment === 'hover-hints') {
|
||||||
|
valueVisible = false;
|
||||||
|
_saveOldLabelsState();
|
||||||
|
_setLabelsState(true);
|
||||||
|
|
||||||
|
// Show label hints
|
||||||
|
_setTextAndColor(firstLineLabel, labels[firstLineLabel.index], true);
|
||||||
|
_setTextAndColor(secondLineLabel, labels[secondLineLabel.index], true);
|
||||||
|
_setTextAndColor(thirdLineLabel, labels[thirdLineLabel.index], true);
|
||||||
|
} else if (displayment === 'hover') {
|
||||||
|
_setLabelsState(true);
|
||||||
|
showValueInLabel();
|
||||||
|
valueVisible = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onExited: {
|
||||||
|
if (displayment === 'hover-hints') {
|
||||||
|
// Recover old state
|
||||||
|
_setTextAndColor(firstLineLabel, _oldLabelsState[firstLineLabel.index][0]);
|
||||||
|
firstLineLabel.visible = _oldLabelsState[firstLineLabel.index][1];
|
||||||
|
_setTextAndColor(secondLineLabel, _oldLabelsState[secondLineLabel.index][0]);
|
||||||
|
secondLineLabel.visible = _oldLabelsState[secondLineLabel.index][1];
|
||||||
|
_setTextAndColor(thirdLineLabel, _oldLabelsState[thirdLineLabel.index][0]);
|
||||||
|
thirdLineLabel.visible = _oldLabelsState[thirdLineLabel.index][1];
|
||||||
|
|
||||||
|
// Update value
|
||||||
|
showValueInLabel();
|
||||||
|
valueVisible = true;
|
||||||
|
} else if (displayment === 'hover') {
|
||||||
|
valueVisible = false;
|
||||||
|
_setLabelsState(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getTextColor(index, isLabel = false) {
|
||||||
|
if (isLabel) {
|
||||||
|
return labelColors[index] || theme.textColor;
|
||||||
|
}
|
||||||
|
return valueColors[index] || theme.textColor;
|
||||||
|
}
|
||||||
|
function _setLabelsState(state) {
|
||||||
|
if (state) {
|
||||||
|
firstLineLabel.visible = firstLineLabel.enabled;
|
||||||
|
secondLineLabel.visible = secondLineLabel.enabled;
|
||||||
|
thirdLineLabel.visible = thirdLineLabel.enabled;
|
||||||
|
} else {
|
||||||
|
firstLineLabel.visible = secondLineLabel.visible = thirdLineLabel.visible = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function _setTextAndColor(label, value, isLabel = false) {
|
||||||
|
if (!label.enabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
label.text = value;
|
||||||
|
label.color = getTextColor(label.index, isLabel);
|
||||||
|
}
|
||||||
|
}
|
||||||
+47
@@ -0,0 +1,47 @@
|
|||||||
|
import org.kde.plasma.plasmoid 2.0
|
||||||
|
import org.kde.quickcharts 1.0 as Charts
|
||||||
|
import "./" as RMBaseGraph
|
||||||
|
|
||||||
|
RMBaseGraph.BaseSensorGraph {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
// Aliases
|
||||||
|
property alias chart: chart
|
||||||
|
|
||||||
|
// Graph properties
|
||||||
|
property color chartColor: theme.highlightColor
|
||||||
|
|
||||||
|
// Graph
|
||||||
|
Charts.LineChart {
|
||||||
|
id: chart
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
direction: Charts.XYChart.ZeroAtEnd
|
||||||
|
fillOpacity: plasmoid.configuration.graphFillOpacity / 100
|
||||||
|
smooth: true
|
||||||
|
yRange.automatic: false
|
||||||
|
|
||||||
|
colorSource: Charts.SingleValueSource {
|
||||||
|
value: chartColor
|
||||||
|
}
|
||||||
|
valueSources: [
|
||||||
|
RMBaseGraph.ArrayDataSource {
|
||||||
|
id: chartData
|
||||||
|
maximumHistory: plasmoid.configuration.historyAmount
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
_clear: () => {
|
||||||
|
chartData.clear();
|
||||||
|
for (let i = 0; i < sensorsModel.sensors.length; i++) {
|
||||||
|
_updateData(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_insertChartData: (column, value) => {
|
||||||
|
if (column == 0) {
|
||||||
|
chartData.insertValue(value);
|
||||||
|
root.chartDataChanged(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+75
@@ -0,0 +1,75 @@
|
|||||||
|
import org.kde.plasma.plasmoid 2.0
|
||||||
|
import org.kde.quickcharts 1.0 as Charts
|
||||||
|
import "./" as RMBaseGraph
|
||||||
|
|
||||||
|
RMBaseGraph.BaseSensorGraph {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property var uplimits: [100, 100]
|
||||||
|
|
||||||
|
// Graph properties
|
||||||
|
property var colors: [theme.highlightColor, theme.textColor]
|
||||||
|
|
||||||
|
// Bind properties changes
|
||||||
|
onUplimitsChanged: {
|
||||||
|
firstChart.yRange.to = uplimits[0];
|
||||||
|
secondChart.yRange.to = uplimits[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Graphs
|
||||||
|
Charts.LineChart {
|
||||||
|
id: secondChart
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
direction: Charts.XYChart.ZeroAtEnd
|
||||||
|
fillOpacity: plasmoid.configuration.graphFillOpacity / 100
|
||||||
|
smooth: true
|
||||||
|
yRange.automatic: false
|
||||||
|
|
||||||
|
colorSource: Charts.SingleValueSource {
|
||||||
|
value: colors[1]
|
||||||
|
}
|
||||||
|
valueSources: [
|
||||||
|
RMBaseGraph.ArrayDataSource {
|
||||||
|
id: secondChartData
|
||||||
|
maximumHistory: plasmoid.configuration.historyAmount
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
Charts.LineChart {
|
||||||
|
id: firstChart
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
direction: Charts.XYChart.ZeroAtEnd
|
||||||
|
fillOpacity: plasmoid.configuration.graphFillOpacity / 100
|
||||||
|
smooth: true
|
||||||
|
yRange.automatic: false
|
||||||
|
|
||||||
|
colorSource: Charts.SingleValueSource {
|
||||||
|
value: colors[0]
|
||||||
|
}
|
||||||
|
valueSources: [
|
||||||
|
RMBaseGraph.ArrayDataSource {
|
||||||
|
id: firstChartData
|
||||||
|
maximumHistory: plasmoid.configuration.historyAmount
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
_clear: () => {
|
||||||
|
firstChartData.clear()
|
||||||
|
secondChartData.clear()
|
||||||
|
for (let i = 0; i < sensorsModel.sensors.length; i++) {
|
||||||
|
_updateData(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_insertChartData: (column, value) => {
|
||||||
|
if (column == 0) {
|
||||||
|
firstChartData.insertValue(value);
|
||||||
|
root.chartDataChanged(0);
|
||||||
|
} else if (column == 1) {
|
||||||
|
secondChartData.insertValue(value);
|
||||||
|
root.chartDataChanged(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+72
@@ -0,0 +1,72 @@
|
|||||||
|
import QtQuick 2.0
|
||||||
|
import org.kde.ksysguard.sensors 1.0 as Sensors
|
||||||
|
import org.kde.ksysguard.formatter 1.0 as Formatter
|
||||||
|
|
||||||
|
// TODO (3.0): remove this
|
||||||
|
Sensors.SensorDataModel {
|
||||||
|
id: root
|
||||||
|
property int _coreCount
|
||||||
|
|
||||||
|
property string agregator: "average" // Possible value: average, minimum, maximum
|
||||||
|
property bool needManual
|
||||||
|
|
||||||
|
signal ready
|
||||||
|
|
||||||
|
function getFormattedValue() {
|
||||||
|
return Formatter.Formatter.formatValueShowNull(getValue(), 302 /* Formatter.Unit.UnitMegaHertz */);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getValue() {
|
||||||
|
let values = [];
|
||||||
|
for (let i = 0; i < _coreCount; i++) {
|
||||||
|
values[i] = data(index(0, i), Sensors.SensorDataModel.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Agregate values
|
||||||
|
if (agregator === "average") {
|
||||||
|
return values.reduce((a, b) => a + b, 0) / _coreCount;
|
||||||
|
} else if (agregator === "minimum") {
|
||||||
|
return Math.min(...values);
|
||||||
|
} else if (agregator === "maximum") {
|
||||||
|
return Math.max(...values);
|
||||||
|
} else {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
updateRateLimit: -1
|
||||||
|
Component.onCompleted: {
|
||||||
|
sensors = ["cpu/all/coreCount", "cpu/all/" + agregator + "Frequency"];
|
||||||
|
}
|
||||||
|
|
||||||
|
property bool _initialized
|
||||||
|
property Timer _timer: Timer {
|
||||||
|
running: enabled
|
||||||
|
interval: 100 // Wait to be sure all sensors metadata has retrieved
|
||||||
|
|
||||||
|
onTriggered: {
|
||||||
|
/// Prevent running multiple times
|
||||||
|
if (_initialized) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_initialized = true;
|
||||||
|
|
||||||
|
// Do nothing if all frequency is already exist
|
||||||
|
if (hasIndex(0, 1)) {
|
||||||
|
root.enabled = false;
|
||||||
|
root.ready();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fill sensors with all cores
|
||||||
|
_coreCount = data(index(0, 0));
|
||||||
|
const sensors = [];
|
||||||
|
for (let i = 0; i < _coreCount; i++) {
|
||||||
|
sensors[i] = "cpu/cpu" + i + "/frequency";
|
||||||
|
}
|
||||||
|
root.sensors = sensors;
|
||||||
|
root.needManual = true;
|
||||||
|
root.ready();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+510
@@ -0,0 +1,510 @@
|
|||||||
|
import QtQuick 2.2
|
||||||
|
import QtQuick.Controls 2.12 as QtControls
|
||||||
|
import QtQuick.Layouts 1.15 as QtLayouts
|
||||||
|
import org.kde.kirigami 2.6 as Kirigami
|
||||||
|
import org.kde.plasma.plasmoid 2.0
|
||||||
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||||
|
import org.kde.plasma.components 3.0 as PlasmaComponents
|
||||||
|
import org.kde.plasma.extras 2.0 as PlasmaExtras
|
||||||
|
import "../controls" as RMControls
|
||||||
|
import "../components" as RMComponents
|
||||||
|
|
||||||
|
PlasmaExtras.Representation {
|
||||||
|
id: page
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
// Chart
|
||||||
|
property alias cfg_verticalLayout: verticalLayout.checked
|
||||||
|
property alias cfg_historyAmount: historyAmount.value
|
||||||
|
property alias cfg_customGraphWidth: graphWidth.customized
|
||||||
|
property alias cfg_graphWidth: graphWidth.value
|
||||||
|
property alias cfg_customGraphHeight: graphHeight.customized
|
||||||
|
property alias cfg_graphHeight: graphHeight.value
|
||||||
|
property alias cfg_graphMargin: graphMargin.value
|
||||||
|
property alias cfg_graphFillOpacity: graphFillOpacity.value
|
||||||
|
property var cfg_graphOrders
|
||||||
|
|
||||||
|
// Text
|
||||||
|
property alias cfg_enableShadows: enableShadows.checked
|
||||||
|
property alias cfg_fontScale: fontScale.value
|
||||||
|
property string cfg_placement
|
||||||
|
property string cfg_displayment
|
||||||
|
|
||||||
|
// Colors
|
||||||
|
// > CPU
|
||||||
|
property alias cfg_customCpuColor: cpuColor.customized
|
||||||
|
property alias cfg_cpuColor: cpuColor.value
|
||||||
|
property alias cfg_customCpuTemperatureColor: cpuTemperatureColor.customized
|
||||||
|
property alias cfg_cpuTemperatureColor: cpuTemperatureColor.value
|
||||||
|
// > Memory
|
||||||
|
property alias cfg_customRamColor: ramColor.customized
|
||||||
|
property alias cfg_ramColor: ramColor.value
|
||||||
|
property alias cfg_customSwapColor: swapColor.customized
|
||||||
|
property alias cfg_swapColor: swapColor.value
|
||||||
|
// > Network
|
||||||
|
property alias cfg_customNetDownColor: netDownColor.customized
|
||||||
|
property alias cfg_netDownColor: netDownColor.value
|
||||||
|
property alias cfg_customNetUpColor: netUpColor.customized
|
||||||
|
property alias cfg_netUpColor: netUpColor.value
|
||||||
|
// > GPU
|
||||||
|
property alias cfg_customGpuColor: gpuColor.customized
|
||||||
|
property alias cfg_gpuColor: gpuColor.value
|
||||||
|
property alias cfg_customGpuMemoryColor: gpuMemoryColor.customized
|
||||||
|
property alias cfg_gpuMemoryColor: gpuMemoryColor.value
|
||||||
|
property alias cfg_customGpuTemperatureColor: gpuTemperatureColor.customized
|
||||||
|
property alias cfg_gpuTemperatureColor: gpuTemperatureColor.value
|
||||||
|
// > Disk
|
||||||
|
property alias cfg_customDiskReadColor: diskReadColor.customized
|
||||||
|
property alias cfg_diskReadColor: diskReadColor.value
|
||||||
|
property alias cfg_customDiskWriteColor: diskWriteColor.customized
|
||||||
|
property alias cfg_diskWriteColor: diskWriteColor.value
|
||||||
|
// > Threshold
|
||||||
|
property alias cfg_customWarningColor: warningColor.customized
|
||||||
|
property alias cfg_warningColor: warningColor.value
|
||||||
|
property alias cfg_customCriticalColor: criticalColor.customized
|
||||||
|
property alias cfg_criticalColor: criticalColor.value
|
||||||
|
|
||||||
|
property color textColor: theme.textColor
|
||||||
|
property color primaryColor: theme.highlightColor
|
||||||
|
property color positiveColor: theme.positiveTextColor
|
||||||
|
property color neutralColor: theme.neutralTextColor
|
||||||
|
property color negativeColor: theme.negativeTextColor
|
||||||
|
|
||||||
|
property var monitors: {
|
||||||
|
"cpu": {
|
||||||
|
"id": "cpu",
|
||||||
|
"name": i18nc("Chart name", "CPU"),
|
||||||
|
"icon": "cpu-symbolic"
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"id": "memory",
|
||||||
|
"name": i18nc("Chart name", "Memory"),
|
||||||
|
"icon": "memory-symbolic"
|
||||||
|
},
|
||||||
|
"gpu": {
|
||||||
|
"id": "gpu",
|
||||||
|
"name": i18nc("Chart name", "GPU"),
|
||||||
|
"icon": "freon-gpu-temperature-symbolic"
|
||||||
|
},
|
||||||
|
"disks": {
|
||||||
|
"id": "disks",
|
||||||
|
"name": i18nc("Chart name", "Disks I/O"),
|
||||||
|
"icon": "drive-harddisk-symbolic"
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"id": "network",
|
||||||
|
"name": i18nc("Chart name", "Network"),
|
||||||
|
"icon": "network-wired-symbolic"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tab bar
|
||||||
|
header: PlasmaExtras.PlasmoidHeading {
|
||||||
|
location: PlasmaExtras.PlasmoidHeading.Location.Header
|
||||||
|
|
||||||
|
PlasmaComponents.TabBar {
|
||||||
|
id: bar
|
||||||
|
|
||||||
|
position: PlasmaComponents.TabBar.Header
|
||||||
|
anchors.fill: parent
|
||||||
|
implicitHeight: contentHeight
|
||||||
|
|
||||||
|
PlasmaComponents.TabButton {
|
||||||
|
icon.name: "office-chart-line-stacked"
|
||||||
|
icon.height: PlasmaCore.Units.iconSizes.smallMedium
|
||||||
|
text: i18nc("Config header", "Charts")
|
||||||
|
}
|
||||||
|
PlasmaComponents.TabButton {
|
||||||
|
icon.name: "dialog-text-and-font"
|
||||||
|
icon.height: PlasmaCore.Units.iconSizes.smallMedium
|
||||||
|
text: i18nc("Config header", "Text")
|
||||||
|
}
|
||||||
|
PlasmaComponents.TabButton {
|
||||||
|
icon.name: "color-select"
|
||||||
|
icon.height: PlasmaCore.Units.iconSizes.smallMedium
|
||||||
|
text: i18nc("Config header", "Colors")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QtLayouts.StackLayout {
|
||||||
|
id: pageContent
|
||||||
|
anchors.fill: parent
|
||||||
|
currentIndex: bar.currentIndex
|
||||||
|
|
||||||
|
// Charts
|
||||||
|
Kirigami.ScrollablePage {
|
||||||
|
Kirigami.FormLayout {
|
||||||
|
id: graphPage
|
||||||
|
wideMode: true
|
||||||
|
|
||||||
|
QtControls.CheckBox {
|
||||||
|
id: verticalLayout
|
||||||
|
text: i18n("Vertical layout")
|
||||||
|
}
|
||||||
|
|
||||||
|
RMControls.SpinBox {
|
||||||
|
id: historyAmount
|
||||||
|
Kirigami.FormData.label: i18n("History amount:")
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
from: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
RMControls.CustomizableSize {
|
||||||
|
id: graphWidth
|
||||||
|
Kirigami.FormData.label: i18n("Width:")
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
from: 1
|
||||||
|
to: 1000
|
||||||
|
}
|
||||||
|
RMControls.CustomizableSize {
|
||||||
|
id: graphHeight
|
||||||
|
Kirigami.FormData.label: i18n("Height:")
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
from: 1
|
||||||
|
to: 1000
|
||||||
|
}
|
||||||
|
RMControls.SpinBox {
|
||||||
|
id: graphMargin
|
||||||
|
Kirigami.FormData.label: i18n("Margin:")
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
from: 1
|
||||||
|
to: 1000
|
||||||
|
|
||||||
|
textFromValue: function (value, locale) {
|
||||||
|
return valueToText(value, locale) + " px";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RMControls.SpinBox {
|
||||||
|
id: graphFillOpacity
|
||||||
|
Kirigami.FormData.label: i18n("Fill opacity:")
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
from: 1
|
||||||
|
to: 100
|
||||||
|
|
||||||
|
textFromValue: function (value, locale) {
|
||||||
|
return valueToText(value, locale) + "%";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// order
|
||||||
|
Item {
|
||||||
|
Kirigami.FormData.label: i18n("Charts order")
|
||||||
|
Kirigami.FormData.isSection: true
|
||||||
|
}
|
||||||
|
|
||||||
|
ListView {
|
||||||
|
id: graphsList
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
|
||||||
|
clip: true
|
||||||
|
interactive: false
|
||||||
|
|
||||||
|
property int listViewHeight: 0
|
||||||
|
implicitHeight: listViewHeight
|
||||||
|
|
||||||
|
model: ListModel {
|
||||||
|
Component.onCompleted: cfg_graphOrders.map(id => monitors[id]).forEach(item => append(item))
|
||||||
|
|
||||||
|
function toJS() {
|
||||||
|
const result = [];
|
||||||
|
for (let i = 0; i < count; i++) {
|
||||||
|
result.push(get(i));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delegate: Kirigami.DelegateRecycler {
|
||||||
|
width: graphsList.width
|
||||||
|
sourceComponent: delegateComponent
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
graphsList.listViewHeight += height + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
moveDisplaced: Transition {
|
||||||
|
YAnimator {
|
||||||
|
duration: Kirigami.Units.longDuration
|
||||||
|
easing.type: Easing.InOutQuad
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component {
|
||||||
|
id: delegateComponent
|
||||||
|
Kirigami.AbstractListItem {
|
||||||
|
id: listItem
|
||||||
|
|
||||||
|
backgroundColor: theme.headerBackgroundColor
|
||||||
|
separatorVisible: true
|
||||||
|
|
||||||
|
contentItem: QtLayouts.RowLayout {
|
||||||
|
spacing: Kirigami.Units.largeSpacing
|
||||||
|
|
||||||
|
Kirigami.ListItemDragHandle {
|
||||||
|
listView: graphsList
|
||||||
|
listItem: listItem
|
||||||
|
onMoveRequested: graphsList.model.move(oldIndex, newIndex, 1)
|
||||||
|
|
||||||
|
onDropped: {
|
||||||
|
cfg_graphOrders = graphsList.model.toJS().map(item => item.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PlasmaCore.IconItem {
|
||||||
|
source: model.icon
|
||||||
|
width: PlasmaCore.Units.iconSizes.smallMedium
|
||||||
|
height: width
|
||||||
|
}
|
||||||
|
PlasmaComponents.Label {
|
||||||
|
text: model.name
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Text
|
||||||
|
Kirigami.ScrollablePage {
|
||||||
|
Kirigami.FormLayout {
|
||||||
|
id: textPage
|
||||||
|
wideMode: true
|
||||||
|
|
||||||
|
QtControls.CheckBox {
|
||||||
|
id: enableShadows
|
||||||
|
text: i18n("Drop shadows")
|
||||||
|
}
|
||||||
|
|
||||||
|
RMControls.SpinBox {
|
||||||
|
id: fontScale
|
||||||
|
Kirigami.FormData.label: i18n("Font scale:")
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
from: 1
|
||||||
|
to: 100
|
||||||
|
|
||||||
|
textFromValue: function (value, locale) {
|
||||||
|
return valueToText(value, locale) + "%";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QtControls.ComboBox {
|
||||||
|
id: displayment
|
||||||
|
Kirigami.FormData.label: i18n("Text displayment:")
|
||||||
|
|
||||||
|
currentIndex: -1
|
||||||
|
textRole: "label"
|
||||||
|
valueRole: "name"
|
||||||
|
model: [{
|
||||||
|
"label": i18nc("Text displayment", "Always"),
|
||||||
|
"name": "always"
|
||||||
|
}, {
|
||||||
|
"label": i18nc("Text displayment", "On hover"),
|
||||||
|
"name": "hover"
|
||||||
|
}, {
|
||||||
|
"label": i18nc("Text displayment", "Hints when hover"),
|
||||||
|
"name": "hover-hints"
|
||||||
|
}]
|
||||||
|
|
||||||
|
onActivated: cfg_displayment = currentValue
|
||||||
|
Component.onCompleted: currentIndex = indexOfValue(cfg_displayment)
|
||||||
|
}
|
||||||
|
|
||||||
|
QtControls.ComboBox {
|
||||||
|
id: placement
|
||||||
|
Kirigami.FormData.label: i18n("Placement:")
|
||||||
|
|
||||||
|
currentIndex: -1
|
||||||
|
textRole: "label"
|
||||||
|
valueRole: "name"
|
||||||
|
model: [{
|
||||||
|
"label": i18nc("Text placement", "Top left"),
|
||||||
|
"name": "top-left"
|
||||||
|
}, {
|
||||||
|
"label": i18nc("Text placement", "Top right"),
|
||||||
|
"name": "top-right"
|
||||||
|
}, {
|
||||||
|
"label": i18nc("Text placement", "Bottom left"),
|
||||||
|
"name": "bottom-left"
|
||||||
|
}, {
|
||||||
|
"label": i18nc("Text placement", "Bottom right"),
|
||||||
|
"name": "bottom-right"
|
||||||
|
}]
|
||||||
|
|
||||||
|
onActivated: cfg_placement = currentValue
|
||||||
|
Component.onCompleted: currentIndex = indexOfValue(cfg_placement)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Colors
|
||||||
|
Kirigami.ScrollablePage {
|
||||||
|
Kirigami.FormLayout {
|
||||||
|
id: colorsPage
|
||||||
|
|
||||||
|
// Charts
|
||||||
|
Kirigami.Separator {
|
||||||
|
Kirigami.FormData.label: i18n("Charts colors")
|
||||||
|
Kirigami.FormData.isSection: true
|
||||||
|
}
|
||||||
|
|
||||||
|
// > CPU
|
||||||
|
Rectangle {
|
||||||
|
height: Kirigami.Units.largeSpacing
|
||||||
|
color: "transparent"
|
||||||
|
}
|
||||||
|
Item {
|
||||||
|
Kirigami.FormData.label: i18nc("Chart name", "CPU")
|
||||||
|
Kirigami.FormData.isSection: true
|
||||||
|
}
|
||||||
|
|
||||||
|
RMControls.ColorSelector {
|
||||||
|
id: cpuColor
|
||||||
|
Kirigami.FormData.label: i18nc("Chart config", "Usage:")
|
||||||
|
|
||||||
|
dialogTitle: i18nc("Chart color", "Choose series color")
|
||||||
|
defaultColor: primaryColor
|
||||||
|
}
|
||||||
|
RMControls.ColorSelector {
|
||||||
|
id: cpuTemperatureColor
|
||||||
|
Kirigami.FormData.label: i18nc("Chart config", "Temperature:")
|
||||||
|
|
||||||
|
dialogTitle: i18nc("Chart color", "Choose text color")
|
||||||
|
defaultColor: textColor
|
||||||
|
}
|
||||||
|
|
||||||
|
// > Memory
|
||||||
|
Rectangle {
|
||||||
|
height: Kirigami.Units.largeSpacing
|
||||||
|
color: "transparent"
|
||||||
|
}
|
||||||
|
Item {
|
||||||
|
Kirigami.FormData.label: i18nc("Chart name", "Memory")
|
||||||
|
Kirigami.FormData.isSection: true
|
||||||
|
}
|
||||||
|
|
||||||
|
RMControls.ColorSelector {
|
||||||
|
id: ramColor
|
||||||
|
Kirigami.FormData.label: i18nc("Chart config", "Physical:")
|
||||||
|
|
||||||
|
dialogTitle: i18nc("Chart color", "Choose series color")
|
||||||
|
defaultColor: primaryColor
|
||||||
|
}
|
||||||
|
RMControls.ColorSelector {
|
||||||
|
id: swapColor
|
||||||
|
Kirigami.FormData.label: i18nc("Chart config", "Swap:")
|
||||||
|
|
||||||
|
dialogTitle: i18nc("Chart color", "Choose color of series and text")
|
||||||
|
defaultColor: negativeColor
|
||||||
|
}
|
||||||
|
|
||||||
|
// > Network
|
||||||
|
Rectangle {
|
||||||
|
height: Kirigami.Units.largeSpacing
|
||||||
|
color: "transparent"
|
||||||
|
}
|
||||||
|
Item {
|
||||||
|
Kirigami.FormData.label: i18nc("Chart name", "Network")
|
||||||
|
Kirigami.FormData.isSection: true
|
||||||
|
}
|
||||||
|
|
||||||
|
RMControls.ColorSelector {
|
||||||
|
id: netDownColor
|
||||||
|
Kirigami.FormData.label: i18nc("Chart config", "Receiving:")
|
||||||
|
|
||||||
|
dialogTitle: i18nc("Chart color", "Choose series color")
|
||||||
|
defaultColor: primaryColor
|
||||||
|
}
|
||||||
|
RMControls.ColorSelector {
|
||||||
|
id: netUpColor
|
||||||
|
Kirigami.FormData.label: i18nc("Chart config", "Sending:")
|
||||||
|
|
||||||
|
dialogTitle: i18nc("Chart color", "Choose series color")
|
||||||
|
defaultColor: positiveColor
|
||||||
|
}
|
||||||
|
|
||||||
|
// > GPU
|
||||||
|
Rectangle {
|
||||||
|
height: Kirigami.Units.largeSpacing
|
||||||
|
color: "transparent"
|
||||||
|
}
|
||||||
|
Item {
|
||||||
|
Kirigami.FormData.label: i18nc("Chart name", "GPU")
|
||||||
|
Kirigami.FormData.isSection: true
|
||||||
|
}
|
||||||
|
|
||||||
|
RMControls.ColorSelector {
|
||||||
|
id: gpuColor
|
||||||
|
Kirigami.FormData.label: i18nc("Chart config", "Usage:")
|
||||||
|
|
||||||
|
dialogTitle: i18nc("Chart color", "Choose series color")
|
||||||
|
defaultColor: primaryColor
|
||||||
|
}
|
||||||
|
RMControls.ColorSelector {
|
||||||
|
id: gpuMemoryColor
|
||||||
|
Kirigami.FormData.label: i18nc("Chart config", "Memory:")
|
||||||
|
|
||||||
|
dialogTitle: i18nc("Chart color", "Choose series color")
|
||||||
|
defaultColor: positiveColor
|
||||||
|
}
|
||||||
|
RMControls.ColorSelector {
|
||||||
|
id: gpuTemperatureColor
|
||||||
|
Kirigami.FormData.label: i18nc("Chart config", "Temperature:")
|
||||||
|
|
||||||
|
dialogTitle: i18nc("Chart color", "Choose text color")
|
||||||
|
defaultColor: textColor
|
||||||
|
}
|
||||||
|
|
||||||
|
// > Disk I/O
|
||||||
|
Rectangle {
|
||||||
|
height: Kirigami.Units.largeSpacing
|
||||||
|
color: "transparent"
|
||||||
|
}
|
||||||
|
Item {
|
||||||
|
Kirigami.FormData.label: i18nc("Chart name", "Disks I/O")
|
||||||
|
Kirigami.FormData.isSection: true
|
||||||
|
}
|
||||||
|
|
||||||
|
RMControls.ColorSelector {
|
||||||
|
id: diskReadColor
|
||||||
|
Kirigami.FormData.label: i18nc("Chart config", "Read:")
|
||||||
|
|
||||||
|
dialogTitle: i18nc("Chart color", "Choose series color")
|
||||||
|
defaultColor: primaryColor
|
||||||
|
}
|
||||||
|
RMControls.ColorSelector {
|
||||||
|
id: diskWriteColor
|
||||||
|
Kirigami.FormData.label: i18nc("Chart config", "Write:")
|
||||||
|
|
||||||
|
dialogTitle: i18nc("Chart color", "Choose series color")
|
||||||
|
defaultColor: positiveColor
|
||||||
|
}
|
||||||
|
|
||||||
|
// Thresholds
|
||||||
|
Kirigami.Separator {
|
||||||
|
Kirigami.FormData.label: i18n("Threshold text colors")
|
||||||
|
Kirigami.FormData.isSection: true
|
||||||
|
}
|
||||||
|
|
||||||
|
RMControls.ColorSelector {
|
||||||
|
id: warningColor
|
||||||
|
Kirigami.FormData.label: i18n("Warning status:")
|
||||||
|
|
||||||
|
dialogTitle: i18n("Choose text color when the value is in warning status")
|
||||||
|
defaultColor: neutralColor
|
||||||
|
}
|
||||||
|
RMControls.ColorSelector {
|
||||||
|
id: criticalColor
|
||||||
|
Kirigami.FormData.label: i18n("Critical status:")
|
||||||
|
|
||||||
|
dialogTitle: i18n("Choose text color when the value is in critical status")
|
||||||
|
defaultColor: negativeColor
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+451
@@ -0,0 +1,451 @@
|
|||||||
|
import QtQuick 2.2
|
||||||
|
import QtQuick.Controls 2.12 as QtControls
|
||||||
|
import QtQuick.Layouts 1.15 as QtLayouts
|
||||||
|
import org.kde.kirigami 2.6 as Kirigami
|
||||||
|
import org.kde.plasma.plasmoid 2.0
|
||||||
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||||
|
import org.kde.plasma.components 3.0 as PlasmaComponents
|
||||||
|
import org.kde.plasma.extras 2.0 as PlasmaExtras
|
||||||
|
import "../components" as RMComponents
|
||||||
|
import "../controls" as RMControls
|
||||||
|
import "../components/functions.js" as Functions
|
||||||
|
|
||||||
|
PlasmaExtras.Representation {
|
||||||
|
id: dataPage
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
// Network
|
||||||
|
readonly property var networkDialect: Functions.getNetworkDialectInfo(plasmoid.configuration.networkUnit)
|
||||||
|
property var cfg_ignoredNetworkInterfaces
|
||||||
|
property alias cfg_networkReceivingTotal: networkReceiving.realValue
|
||||||
|
property alias cfg_networkSendingTotal: networkSending.realValue
|
||||||
|
|
||||||
|
// Disks I/O
|
||||||
|
property alias cfg_diskReadTotal: diskRead.realValue
|
||||||
|
property alias cfg_diskWriteTotal: diskWrite.realValue
|
||||||
|
|
||||||
|
// GPU
|
||||||
|
property string cfg_gpuIndex
|
||||||
|
|
||||||
|
// Thresholds
|
||||||
|
property alias cfg_thresholdWarningCpuTemp: thresholdWarningCpuTemp.realValue
|
||||||
|
property alias cfg_thresholdCriticalCpuTemp: thresholdCriticalCpuTemp.realValue
|
||||||
|
property alias cfg_thresholdWarningMemory: thresholdWarningMemory.value
|
||||||
|
property alias cfg_thresholdCriticalMemory: thresholdCriticalMemory.value
|
||||||
|
property alias cfg_thresholdWarningGpuTemp: thresholdWarningGpuTemp.realValue
|
||||||
|
property alias cfg_thresholdCriticalGpuTemp: thresholdCriticalGpuTemp.realValue
|
||||||
|
|
||||||
|
readonly property var networkSpeedOptions: [{
|
||||||
|
"label": i18n("Custom"),
|
||||||
|
"value": -1
|
||||||
|
}, {
|
||||||
|
"label": "100 " + networkDialect.kiloChar + networkDialect.suffix,
|
||||||
|
"value": 100.0
|
||||||
|
}, {
|
||||||
|
"label": "1 M" + networkDialect.suffix,
|
||||||
|
"value": 1000.0
|
||||||
|
}, {
|
||||||
|
"label": "10 M" + networkDialect.suffix,
|
||||||
|
"value": 10000.0
|
||||||
|
}, {
|
||||||
|
"label": "100 M" + networkDialect.suffix,
|
||||||
|
"value": 100000.0
|
||||||
|
}, {
|
||||||
|
"label": "1 G" + networkDialect.suffix,
|
||||||
|
"value": 1000000.0
|
||||||
|
}, {
|
||||||
|
"label": "2.5 G" + networkDialect.suffix,
|
||||||
|
"value": 2500000.0
|
||||||
|
}, {
|
||||||
|
"label": "5 G" + networkDialect.suffix,
|
||||||
|
"value": 5000000.0
|
||||||
|
}, {
|
||||||
|
"label": "10 G" + networkDialect.suffix,
|
||||||
|
"value": 10000000.0
|
||||||
|
}]
|
||||||
|
readonly property var diskSpeedOptions: [{
|
||||||
|
"label": i18n("Custom"),
|
||||||
|
"value": -1
|
||||||
|
}, {
|
||||||
|
"label": "10 MiB/s",
|
||||||
|
"value": 10000.0
|
||||||
|
}, {
|
||||||
|
"label": "100 MiB/s",
|
||||||
|
"value": 100000.0
|
||||||
|
}, {
|
||||||
|
"label": "200 MiB/s",
|
||||||
|
"value": 200000.0
|
||||||
|
}, {
|
||||||
|
"label": "500 MiB/s",
|
||||||
|
"value": 500000.0
|
||||||
|
}, {
|
||||||
|
"label": "1 GiB/s",
|
||||||
|
"value": 1000000.0
|
||||||
|
}, {
|
||||||
|
"label": "2 GiB/s",
|
||||||
|
"value": 2000000.0
|
||||||
|
}, {
|
||||||
|
"label": "5 GiB/s",
|
||||||
|
"value": 5000000.0
|
||||||
|
}, {
|
||||||
|
"label": "10 GiB/s",
|
||||||
|
"value": 10000000.0
|
||||||
|
}]
|
||||||
|
|
||||||
|
// Detect network interfaces
|
||||||
|
RMComponents.NetworkInterfaceDetector {
|
||||||
|
id: networkInterfaces
|
||||||
|
}
|
||||||
|
// Detect GPU cards
|
||||||
|
RMComponents.GpuDetector {
|
||||||
|
id: gpuCards
|
||||||
|
|
||||||
|
onReady: gpuCardSelector.select()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tab bar
|
||||||
|
header: PlasmaExtras.PlasmoidHeading {
|
||||||
|
location: PlasmaExtras.PlasmoidHeading.Location.Header
|
||||||
|
|
||||||
|
PlasmaComponents.TabBar {
|
||||||
|
id: bar
|
||||||
|
|
||||||
|
position: PlasmaComponents.TabBar.Header
|
||||||
|
anchors.fill: parent
|
||||||
|
implicitHeight: contentHeight
|
||||||
|
|
||||||
|
PlasmaComponents.TabButton {
|
||||||
|
icon.name: "settings"
|
||||||
|
icon.height: PlasmaCore.Units.iconSizes.smallMedium
|
||||||
|
text: i18nc("Config header", "General")
|
||||||
|
}
|
||||||
|
PlasmaComponents.TabButton {
|
||||||
|
icon.name: "dialog-warning"
|
||||||
|
icon.height: PlasmaCore.Units.iconSizes.smallMedium
|
||||||
|
text: i18nc("Config header", "Thresholds")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QtLayouts.StackLayout {
|
||||||
|
id: pageContent
|
||||||
|
anchors.fill: parent
|
||||||
|
currentIndex: bar.currentIndex
|
||||||
|
|
||||||
|
// General
|
||||||
|
Kirigami.ScrollablePage {
|
||||||
|
Kirigami.FormLayout {
|
||||||
|
wideMode: true
|
||||||
|
|
||||||
|
// Network
|
||||||
|
Kirigami.Separator {
|
||||||
|
Kirigami.FormData.label: i18nc("Chart name", "Network")
|
||||||
|
Kirigami.FormData.isSection: true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Interfaces
|
||||||
|
QtLayouts.GridLayout {
|
||||||
|
Kirigami.FormData.label: i18n("Network interfaces:")
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
|
||||||
|
columns: 2
|
||||||
|
rowSpacing: Kirigami.Units.smallSpacing
|
||||||
|
columnSpacing: Kirigami.Units.largeSpacing
|
||||||
|
|
||||||
|
Repeater {
|
||||||
|
model: networkInterfaces.model
|
||||||
|
QtControls.CheckBox {
|
||||||
|
readonly property string interfaceName: modelData
|
||||||
|
readonly property bool ignoredByDefault: {
|
||||||
|
return /^(docker|tun|tap)(\d+)/.test(interfaceName); // Ignore docker and tun/tap networks
|
||||||
|
}
|
||||||
|
|
||||||
|
text: interfaceName
|
||||||
|
checked: cfg_ignoredNetworkInterfaces.indexOf(interfaceName) == -1 && !ignoredByDefault
|
||||||
|
enabled: !ignoredByDefault
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
var ignoredNetworkInterfaces = cfg_ignoredNetworkInterfaces.slice(0); // copy()
|
||||||
|
if (checked) {
|
||||||
|
// Checking, and thus removing from the ignoredNetworkInterfaces
|
||||||
|
var i = ignoredNetworkInterfaces.indexOf(interfaceName);
|
||||||
|
ignoredNetworkInterfaces.splice(i, 1);
|
||||||
|
} else {
|
||||||
|
// Unchecking, and thus adding to the ignoredNetworkInterfaces
|
||||||
|
ignoredNetworkInterfaces.push(interfaceName);
|
||||||
|
}
|
||||||
|
cfg_ignoredNetworkInterfaces = ignoredNetworkInterfaces;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transfer speed
|
||||||
|
Item {
|
||||||
|
Kirigami.FormData.label: i18n("Maximum transfer speed")
|
||||||
|
Kirigami.FormData.isSection: true
|
||||||
|
}
|
||||||
|
|
||||||
|
RMControls.PredefinedSpinBox {
|
||||||
|
id: networkReceiving
|
||||||
|
Kirigami.FormData.label: i18nc("Chart config", "Receiving:")
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
QtLayouts.Layout.minimumWidth: predefinedChoices.currentIndex == 0 ? 300 : 0
|
||||||
|
factor: 1000
|
||||||
|
|
||||||
|
predefinedChoices {
|
||||||
|
textRole: "label"
|
||||||
|
valueRole: "value"
|
||||||
|
model: networkSpeedOptions
|
||||||
|
}
|
||||||
|
|
||||||
|
spinBox {
|
||||||
|
decimals: 3
|
||||||
|
stepSize: 1
|
||||||
|
minimumValue: 0.001
|
||||||
|
|
||||||
|
textFromValue: function (value, locale) {
|
||||||
|
return spinBox.valueToText(value, locale) + " M" + networkDialect.suffix;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RMControls.PredefinedSpinBox {
|
||||||
|
id: networkSending
|
||||||
|
Kirigami.FormData.label: i18nc("Chart config", "Sending:")
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
QtLayouts.Layout.minimumWidth: predefinedChoices.currentIndex == 0 ? 300 : 0
|
||||||
|
factor: 1000
|
||||||
|
|
||||||
|
predefinedChoices {
|
||||||
|
textRole: "label"
|
||||||
|
valueRole: "value"
|
||||||
|
model: networkSpeedOptions
|
||||||
|
}
|
||||||
|
|
||||||
|
spinBox {
|
||||||
|
decimals: 3
|
||||||
|
stepSize: 1
|
||||||
|
minimumValue: 0.001
|
||||||
|
|
||||||
|
textFromValue: function (value, locale) {
|
||||||
|
return spinBox.valueToText(value, locale) + " M" + networkDialect.suffix;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Disk I/O
|
||||||
|
Kirigami.Separator {
|
||||||
|
Kirigami.FormData.label: i18nc("Chart name", "Disks I/O")
|
||||||
|
Kirigami.FormData.isSection: true
|
||||||
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
Kirigami.FormData.label: i18n("Maximum transfer speed")
|
||||||
|
Kirigami.FormData.isSection: true
|
||||||
|
}
|
||||||
|
|
||||||
|
RMControls.PredefinedSpinBox {
|
||||||
|
id: diskRead
|
||||||
|
Kirigami.FormData.label: i18nc("Chart config", "Read:")
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
QtLayouts.Layout.minimumWidth: predefinedChoices.currentIndex == 0 ? 300 : 0
|
||||||
|
factor: 1000
|
||||||
|
|
||||||
|
predefinedChoices {
|
||||||
|
textRole: "label"
|
||||||
|
valueRole: "value"
|
||||||
|
model: diskSpeedOptions
|
||||||
|
}
|
||||||
|
|
||||||
|
spinBox {
|
||||||
|
decimals: 3
|
||||||
|
stepSize: 1
|
||||||
|
minimumValue: 0.001
|
||||||
|
|
||||||
|
textFromValue: function (value, locale) {
|
||||||
|
return spinBox.valueToText(value, locale) + " M" + networkDialect.suffix;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RMControls.PredefinedSpinBox {
|
||||||
|
id: diskWrite
|
||||||
|
Kirigami.FormData.label: i18nc("Chart config", "Write:")
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
QtLayouts.Layout.minimumWidth: predefinedChoices.currentIndex == 0 ? 300 : 0
|
||||||
|
factor: 1000
|
||||||
|
|
||||||
|
predefinedChoices {
|
||||||
|
textRole: "label"
|
||||||
|
valueRole: "value"
|
||||||
|
model: diskSpeedOptions
|
||||||
|
}
|
||||||
|
|
||||||
|
spinBox {
|
||||||
|
decimals: 3
|
||||||
|
stepSize: 1
|
||||||
|
minimumValue: 0.001
|
||||||
|
|
||||||
|
textFromValue: function (value, locale) {
|
||||||
|
return spinBox.valueToText(value, locale) + " M" + networkDialect.suffix;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GPU
|
||||||
|
Kirigami.Separator {
|
||||||
|
Kirigami.FormData.label: i18nc("Config header", "Graphic card")
|
||||||
|
Kirigami.FormData.isSection: true
|
||||||
|
}
|
||||||
|
|
||||||
|
QtControls.ComboBox {
|
||||||
|
id: gpuCardSelector
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
Kirigami.FormData.label: i18n("Graphic card:")
|
||||||
|
|
||||||
|
currentIndex: -1
|
||||||
|
textRole: "name"
|
||||||
|
valueRole: "index"
|
||||||
|
model: gpuCards.model
|
||||||
|
|
||||||
|
onActivated: cfg_gpuIndex = currentValue
|
||||||
|
function select() {
|
||||||
|
currentIndex = indexOfValue(cfg_gpuIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Thresholds
|
||||||
|
Kirigami.ScrollablePage {
|
||||||
|
Kirigami.FormLayout {
|
||||||
|
id: thresholdsPage
|
||||||
|
wideMode: true
|
||||||
|
|
||||||
|
property double kirigamiWidth: preferredWidth * 2 + Kirigami.Units.largeSpacing
|
||||||
|
property double preferredWidth: {
|
||||||
|
const minimumWidth = Math.max(80, warningHeader.contentWidth, criticalHeader.contentWidth);
|
||||||
|
return Math.max(minimumWidth,
|
||||||
|
// CPU
|
||||||
|
thresholdWarningCpuTemp.implicitWidth, thresholdCriticalCpuTemp.implicitWidth,
|
||||||
|
// Memory
|
||||||
|
thresholdWarningMemory.implicitWidth, thresholdCriticalMemory.implicitWidth,
|
||||||
|
// Memory
|
||||||
|
thresholdWarningMemory.implicitWidth, thresholdCriticalMemory.implicitWidth,
|
||||||
|
// GPU
|
||||||
|
thresholdWarningGpuTemp.implicitWidth, thresholdCriticalGpuTemp.implicitWidth);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Header
|
||||||
|
QtLayouts.RowLayout {
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
spacing: Kirigami.Units.largeSpacing
|
||||||
|
|
||||||
|
PlasmaComponents.Label {
|
||||||
|
id: warningHeader
|
||||||
|
text: i18n("Warning")
|
||||||
|
font.pointSize: PlasmaCore.Theme.defaultFont.pointSize * 1.2
|
||||||
|
QtLayouts.Layout.preferredWidth: thresholdsPage.preferredWidth
|
||||||
|
}
|
||||||
|
|
||||||
|
PlasmaComponents.Label {
|
||||||
|
id: criticalHeader
|
||||||
|
text: i18n("Critical")
|
||||||
|
font.pointSize: PlasmaCore.Theme.defaultFont.pointSize * 1.2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CPU Temperature
|
||||||
|
QtLayouts.RowLayout {
|
||||||
|
Kirigami.FormData.label: i18n("CPU Temperature:")
|
||||||
|
QtLayouts.Layout.preferredWidth: thresholdsPage.kirigamiWidth
|
||||||
|
spacing: Kirigami.Units.largeSpacing
|
||||||
|
|
||||||
|
RMControls.SpinBox {
|
||||||
|
id: thresholdWarningCpuTemp
|
||||||
|
QtLayouts.Layout.preferredWidth: thresholdsPage.preferredWidth
|
||||||
|
decimals: 1
|
||||||
|
stepSize: 1
|
||||||
|
minimumValue: 0.1
|
||||||
|
maximumValue: 120
|
||||||
|
|
||||||
|
textFromValue: function (value, locale) {
|
||||||
|
return valueToText(value, locale) + " °C";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RMControls.SpinBox {
|
||||||
|
id: thresholdCriticalCpuTemp
|
||||||
|
QtLayouts.Layout.preferredWidth: thresholdsPage.preferredWidth
|
||||||
|
decimals: 1
|
||||||
|
stepSize: 1
|
||||||
|
minimumValue: 0.1
|
||||||
|
maximumValue: 120
|
||||||
|
|
||||||
|
textFromValue: function (value, locale) {
|
||||||
|
return valueToText(value, locale) + " °C";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Memory usage
|
||||||
|
QtLayouts.RowLayout {
|
||||||
|
Kirigami.FormData.label: i18n("Physical Memory Usage:")
|
||||||
|
QtLayouts.Layout.preferredWidth: thresholdsPage.kirigamiWidth
|
||||||
|
spacing: Kirigami.Units.largeSpacing
|
||||||
|
|
||||||
|
RMControls.SpinBox {
|
||||||
|
id: thresholdWarningMemory
|
||||||
|
QtLayouts.Layout.preferredWidth: thresholdsPage.preferredWidth
|
||||||
|
|
||||||
|
textFromValue: function (value, locale) {
|
||||||
|
return value + " %";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RMControls.SpinBox {
|
||||||
|
id: thresholdCriticalMemory
|
||||||
|
QtLayouts.Layout.preferredWidth: thresholdsPage.preferredWidth
|
||||||
|
|
||||||
|
textFromValue: function (value, locale) {
|
||||||
|
return value + " %";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GPU Temperature
|
||||||
|
QtLayouts.RowLayout {
|
||||||
|
Kirigami.FormData.label: i18n("GPU Temperature:")
|
||||||
|
QtLayouts.Layout.preferredWidth: thresholdsPage.kirigamiWidth
|
||||||
|
spacing: Kirigami.Units.largeSpacing
|
||||||
|
|
||||||
|
RMControls.SpinBox {
|
||||||
|
id: thresholdWarningGpuTemp
|
||||||
|
QtLayouts.Layout.preferredWidth: thresholdsPage.preferredWidth
|
||||||
|
|
||||||
|
decimals: 1
|
||||||
|
stepSize: 1
|
||||||
|
minimumValue: 0.1
|
||||||
|
maximumValue: 120
|
||||||
|
|
||||||
|
textFromValue: function (value, locale) {
|
||||||
|
return valueToText(value, locale) + " °C";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RMControls.SpinBox {
|
||||||
|
id: thresholdCriticalGpuTemp
|
||||||
|
QtLayouts.Layout.preferredWidth: thresholdsPage.preferredWidth
|
||||||
|
|
||||||
|
decimals: 1
|
||||||
|
stepSize: 1
|
||||||
|
minimumValue: 0.1
|
||||||
|
maximumValue: 120
|
||||||
|
|
||||||
|
textFromValue: function (value, locale) {
|
||||||
|
return valueToText(value, locale) + " °C";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+453
@@ -0,0 +1,453 @@
|
|||||||
|
import QtQuick 2.2
|
||||||
|
import QtQuick.Controls 2.12 as QtControls
|
||||||
|
import QtQuick.Layouts 1.15 as QtLayouts
|
||||||
|
import org.kde.kirigami 2.6 as Kirigami
|
||||||
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||||
|
import org.kde.plasma.plasmoid 2.0
|
||||||
|
import org.kde.plasma.components 2.0 as PC2
|
||||||
|
import org.kde.plasma.components 3.0 as PlasmaComponents
|
||||||
|
import org.kde.plasma.extras 2.0 as PlasmaExtras
|
||||||
|
import "../components" as RMComponents
|
||||||
|
import "../controls" as RMControls
|
||||||
|
|
||||||
|
PlasmaExtras.Representation {
|
||||||
|
id: page
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
// Charts
|
||||||
|
property alias cfg_updateInterval: updateInterval.realValue
|
||||||
|
// > CPU
|
||||||
|
property bool cfg_showCpuMonitor
|
||||||
|
property string cfg_cpuUnit
|
||||||
|
property bool cfg_showClock
|
||||||
|
property string cfg_clockAgregator
|
||||||
|
property alias cfg_showCpuTemperature: showCpuTemperature.checked
|
||||||
|
// > Memory
|
||||||
|
property bool cfg_showRamMonitor
|
||||||
|
property string cfg_memoryUnit
|
||||||
|
property alias cfg_memorySwapGraph: memorySwapGraph.checked
|
||||||
|
// > Network
|
||||||
|
property bool cfg_showNetMonitor
|
||||||
|
property string cfg_networkUnit
|
||||||
|
// > GPU
|
||||||
|
property alias cfg_showGpuMonitor: showGpuMonitor.checked
|
||||||
|
property alias cfg_gpuMemoryInPercent: gpuMemoryInPercent.checked
|
||||||
|
property alias cfg_gpuMemoryGraph: gpuMemoryGraph.checked
|
||||||
|
property alias cfg_showGpuTemperature: showGpuTemperature.checked
|
||||||
|
// > Disks I/O
|
||||||
|
property alias cfg_showDiskMonitor: showDiskMonitor.checked
|
||||||
|
|
||||||
|
// Click action
|
||||||
|
property string cfg_actionService
|
||||||
|
|
||||||
|
// Apps model
|
||||||
|
RMComponents.AppsDetector {
|
||||||
|
id: appsModel
|
||||||
|
|
||||||
|
filterString: appsFilter.text
|
||||||
|
filterCallback: function (index, value) {
|
||||||
|
var search = filterString.toLowerCase();
|
||||||
|
if (search.length === 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (value.toLowerCase().indexOf(search) !== -1) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (sourceModel.get(index).menuId.replace(".desktop", "").toLowerCase().indexOf(search) !== -1) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
onFilterStringChanged: appsList.updateCurrentIndex()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tab bar
|
||||||
|
header: PlasmaExtras.PlasmoidHeading {
|
||||||
|
location: PlasmaExtras.PlasmoidHeading.Location.Header
|
||||||
|
|
||||||
|
PlasmaComponents.TabBar {
|
||||||
|
id: bar
|
||||||
|
|
||||||
|
position: PlasmaComponents.TabBar.Header
|
||||||
|
anchors.fill: parent
|
||||||
|
implicitHeight: contentHeight
|
||||||
|
|
||||||
|
PlasmaComponents.TabButton {
|
||||||
|
icon.name: "settings"
|
||||||
|
icon.height: PlasmaCore.Units.iconSizes.smallMedium
|
||||||
|
text: i18nc("Config header", "General")
|
||||||
|
}
|
||||||
|
PlasmaComponents.TabButton {
|
||||||
|
icon.name: "input-mouse-symbolic"
|
||||||
|
icon.height: PlasmaCore.Units.iconSizes.smallMedium
|
||||||
|
text: i18nc("Config header", "Click action")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QtLayouts.StackLayout {
|
||||||
|
id: pageContent
|
||||||
|
anchors.fill: parent
|
||||||
|
currentIndex: bar.currentIndex
|
||||||
|
|
||||||
|
// General
|
||||||
|
Kirigami.ScrollablePage {
|
||||||
|
Kirigami.FormLayout {
|
||||||
|
wideMode: true
|
||||||
|
|
||||||
|
RMControls.SpinBox {
|
||||||
|
id: updateInterval
|
||||||
|
Kirigami.FormData.label: i18n("Update interval:")
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
|
||||||
|
decimals: 1
|
||||||
|
minimumValue: 0.1
|
||||||
|
maximumValue: 3600.0
|
||||||
|
stepSize: Math.round(0.1 * factor)
|
||||||
|
|
||||||
|
textFromValue: function (value, locale) {
|
||||||
|
return i18n("%1 seconds", valueToText(value, locale));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Charts
|
||||||
|
Kirigami.Separator {
|
||||||
|
Kirigami.FormData.label: i18nc("Config header", "Charts")
|
||||||
|
Kirigami.FormData.isSection: true
|
||||||
|
}
|
||||||
|
|
||||||
|
// CPU
|
||||||
|
Item {
|
||||||
|
Kirigami.FormData.label: i18nc("Chart name", "CPU")
|
||||||
|
Kirigami.FormData.isSection: true
|
||||||
|
}
|
||||||
|
|
||||||
|
QtControls.ComboBox {
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
Kirigami.FormData.label: i18n("Visibility:")
|
||||||
|
|
||||||
|
currentIndex: -1
|
||||||
|
textRole: "label"
|
||||||
|
valueRole: "value"
|
||||||
|
model: [{
|
||||||
|
"label": i18n("Disabled"),
|
||||||
|
"value": "none"
|
||||||
|
}, {
|
||||||
|
"label": i18n("Total usage"),
|
||||||
|
"value": "usage"
|
||||||
|
}, {
|
||||||
|
"label": i18n("System usage"),
|
||||||
|
"value": "system"
|
||||||
|
}, {
|
||||||
|
"label": i18n("User usage"),
|
||||||
|
"value": "user"
|
||||||
|
}]
|
||||||
|
|
||||||
|
onActivated: {
|
||||||
|
if (currentValue === "none") {
|
||||||
|
cfg_showCpuMonitor = false;
|
||||||
|
} else {
|
||||||
|
cfg_showCpuMonitor = true;
|
||||||
|
cfg_cpuUnit = currentValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Component.onCompleted: {
|
||||||
|
// TODO (3.0): Merge "cfg_showCpuMonitor" and "cfg_cpuUnit"
|
||||||
|
currentIndex = cfg_showCpuMonitor ? indexOfValue(cfg_cpuUnit) : 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QtControls.ComboBox {
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
Kirigami.FormData.label: i18n("Clock visibility:")
|
||||||
|
enabled: cfg_showCpuMonitor
|
||||||
|
|
||||||
|
currentIndex: -1
|
||||||
|
textRole: "label"
|
||||||
|
valueRole: "value"
|
||||||
|
model: [{
|
||||||
|
"label": i18n("Disabled"),
|
||||||
|
"value": "none"
|
||||||
|
}, {
|
||||||
|
"label": i18nc("Agregator", "Average"),
|
||||||
|
"value": "average"
|
||||||
|
}, {
|
||||||
|
"label": i18nc("Agregator", "Minimum"),
|
||||||
|
"value": "minimum"
|
||||||
|
}, {
|
||||||
|
"label": i18nc("Agregator", "Maximum"),
|
||||||
|
"value": "maximum"
|
||||||
|
}]
|
||||||
|
|
||||||
|
onActivated: {
|
||||||
|
if (currentValue === "none") {
|
||||||
|
cfg_showClock = false;
|
||||||
|
} else {
|
||||||
|
cfg_showClock = true;
|
||||||
|
cfg_clockAgregator = currentValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Component.onCompleted: {
|
||||||
|
// TODO (3.0): Merge "cfg_showClock" and "cfg_clockAgregator"
|
||||||
|
currentIndex = cfg_showClock ? indexOfValue(cfg_clockAgregator) : 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QtControls.CheckBox {
|
||||||
|
id: showCpuTemperature
|
||||||
|
text: i18n("Show temperature")
|
||||||
|
enabled: cfg_showCpuMonitor
|
||||||
|
}
|
||||||
|
|
||||||
|
// Memory
|
||||||
|
Rectangle {
|
||||||
|
height: Kirigami.Units.largeSpacing
|
||||||
|
color: "transparent"
|
||||||
|
}
|
||||||
|
Item {
|
||||||
|
Kirigami.FormData.label: i18nc("Chart name", "Memory")
|
||||||
|
Kirigami.FormData.isSection: true
|
||||||
|
}
|
||||||
|
|
||||||
|
QtControls.ComboBox {
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
Kirigami.FormData.label: i18n("Visibility:")
|
||||||
|
|
||||||
|
currentIndex: -1
|
||||||
|
textRole: "label"
|
||||||
|
valueRole: "value"
|
||||||
|
model: [{
|
||||||
|
"label": i18n("Disabled"),
|
||||||
|
"value": "none"
|
||||||
|
}, {
|
||||||
|
"label": i18n("Physical memory (in KiB)"),
|
||||||
|
"value": "physical"
|
||||||
|
}, {
|
||||||
|
"label": i18n("Physical memory (in %)"),
|
||||||
|
"value": "physical-percent"
|
||||||
|
}, {
|
||||||
|
"label": i18n("Application memory (in KiB)"),
|
||||||
|
"value": "application"
|
||||||
|
}, {
|
||||||
|
"label": i18n("Application memory (in %)"),
|
||||||
|
"value": "application-percent"
|
||||||
|
}]
|
||||||
|
|
||||||
|
onActivated: {
|
||||||
|
if (currentValue === "none") {
|
||||||
|
cfg_showRamMonitor = false;
|
||||||
|
} else {
|
||||||
|
cfg_showRamMonitor = true;
|
||||||
|
cfg_memoryUnit = currentValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Component.onCompleted: {
|
||||||
|
// TODO (3.0): Merge "cfg_showRamMonitor" and "cfg_memoryUnit"
|
||||||
|
currentIndex = cfg_showRamMonitor ? indexOfValue(cfg_memoryUnit) : 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QtLayouts.GridLayout {
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
columns: 2
|
||||||
|
rowSpacing: Kirigami.Units.smallSpacing
|
||||||
|
columnSpacing: Kirigami.Units.largeSpacing
|
||||||
|
|
||||||
|
QtControls.CheckBox {
|
||||||
|
id: memorySwapGraph
|
||||||
|
text: i18n("Show swap")
|
||||||
|
enabled: cfg_showRamMonitor
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Network
|
||||||
|
Rectangle {
|
||||||
|
height: Kirigami.Units.largeSpacing
|
||||||
|
color: "transparent"
|
||||||
|
}
|
||||||
|
Item {
|
||||||
|
Kirigami.FormData.label: i18nc("Chart name", "Network")
|
||||||
|
Kirigami.FormData.isSection: true
|
||||||
|
}
|
||||||
|
|
||||||
|
QtControls.ComboBox {
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
Kirigami.FormData.label: i18n("Visibility:")
|
||||||
|
|
||||||
|
currentIndex: -1
|
||||||
|
textRole: "label"
|
||||||
|
valueRole: "value"
|
||||||
|
model: [{
|
||||||
|
"label": i18n("Disabled"),
|
||||||
|
"value": "none"
|
||||||
|
}, {
|
||||||
|
"label": i18n("In kibibyte (KiB/s)"),
|
||||||
|
"value": "kibibyte"
|
||||||
|
}, {
|
||||||
|
"label": i18n("In kilobit (Kbps)"),
|
||||||
|
"value": "kilobit"
|
||||||
|
}, {
|
||||||
|
"label": i18n("In kilobyte (KBps)"),
|
||||||
|
"value": "kilobyte"
|
||||||
|
}]
|
||||||
|
|
||||||
|
onActivated: {
|
||||||
|
if (currentValue === "none") {
|
||||||
|
cfg_showNetMonitor = false;
|
||||||
|
} else {
|
||||||
|
cfg_showNetMonitor = true;
|
||||||
|
cfg_networkUnit = currentValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Component.onCompleted: {
|
||||||
|
// TODO (3.0): Merge "cfg_showNetMonitor" and "cfg_networkUnit"
|
||||||
|
currentIndex = cfg_showNetMonitor ? indexOfValue(cfg_networkUnit) : 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GPU
|
||||||
|
Rectangle {
|
||||||
|
height: Kirigami.Units.largeSpacing
|
||||||
|
color: "transparent"
|
||||||
|
}
|
||||||
|
Item {
|
||||||
|
Kirigami.FormData.label: i18nc("Chart name", "GPU")
|
||||||
|
Kirigami.FormData.isSection: true
|
||||||
|
}
|
||||||
|
|
||||||
|
QtLayouts.GridLayout {
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
columns: 2
|
||||||
|
rowSpacing: Kirigami.Units.smallSpacing
|
||||||
|
columnSpacing: Kirigami.Units.largeSpacing
|
||||||
|
|
||||||
|
QtControls.CheckBox {
|
||||||
|
id: showGpuMonitor
|
||||||
|
text: i18n("Enabled?")
|
||||||
|
}
|
||||||
|
QtControls.CheckBox {
|
||||||
|
id: gpuMemoryGraph
|
||||||
|
text: i18n("Show memory")
|
||||||
|
enabled: showGpuMonitor.checked
|
||||||
|
}
|
||||||
|
QtControls.CheckBox {
|
||||||
|
id: gpuMemoryInPercent
|
||||||
|
text: i18n("Memory in percent")
|
||||||
|
enabled: showGpuMonitor.checked
|
||||||
|
}
|
||||||
|
QtControls.CheckBox {
|
||||||
|
id: showGpuTemperature
|
||||||
|
text: i18n("Show temperature")
|
||||||
|
enabled: showGpuMonitor.checked
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Disk I/O
|
||||||
|
Rectangle {
|
||||||
|
height: Kirigami.Units.largeSpacing
|
||||||
|
color: "transparent"
|
||||||
|
}
|
||||||
|
Item {
|
||||||
|
Kirigami.FormData.label: i18nc("Chart name", "Disks I/O")
|
||||||
|
Kirigami.FormData.isSection: true
|
||||||
|
}
|
||||||
|
|
||||||
|
QtLayouts.GridLayout {
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
columns: 2
|
||||||
|
rowSpacing: Kirigami.Units.smallSpacing
|
||||||
|
columnSpacing: Kirigami.Units.largeSpacing
|
||||||
|
|
||||||
|
QtControls.CheckBox {
|
||||||
|
id: showDiskMonitor
|
||||||
|
text: i18n("Enabled?")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Click action
|
||||||
|
QtLayouts.ColumnLayout {
|
||||||
|
id: clickPage
|
||||||
|
spacing: Kirigami.Units.largeSpacing
|
||||||
|
|
||||||
|
Kirigami.FormLayout {
|
||||||
|
wideMode: true
|
||||||
|
|
||||||
|
QtControls.TextField {
|
||||||
|
id: appsFilter
|
||||||
|
Kirigami.FormData.label: i18n("Search an application:")
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
placeholderText: i18n("Application name")
|
||||||
|
inputMethodHints: Qt.ImhNoPredictiveText
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apps list
|
||||||
|
PlasmaComponents.Label {
|
||||||
|
text: i18n("Applications")
|
||||||
|
font.pointSize: PlasmaCore.Theme.defaultFont.pointSize * 1.2
|
||||||
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
QtLayouts.Layout.fillHeight: true
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
color: theme.headerBackgroundColor
|
||||||
|
border.color: theme.complementaryBackgroundColor
|
||||||
|
border.width: 1
|
||||||
|
radius: 4
|
||||||
|
}
|
||||||
|
|
||||||
|
PlasmaComponents.ScrollView {
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: 10
|
||||||
|
anchors.rightMargin: 5
|
||||||
|
|
||||||
|
ListView {
|
||||||
|
id: appsList
|
||||||
|
|
||||||
|
model: appsModel
|
||||||
|
clip: true
|
||||||
|
interactive: true
|
||||||
|
|
||||||
|
highlight: PC2.Highlight {
|
||||||
|
}
|
||||||
|
highlightMoveDuration: 0
|
||||||
|
highlightMoveVelocity: -1
|
||||||
|
|
||||||
|
delegate: RMComponents.ApplicationDelegateItem {
|
||||||
|
width: root.width
|
||||||
|
|
||||||
|
serviceName: model.menuId.replace(".desktop", "")
|
||||||
|
name: model.name
|
||||||
|
comment: model.comment
|
||||||
|
iconName: model.iconName
|
||||||
|
selected: ListView.isCurrentItem
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
appsList.currentIndex = index;
|
||||||
|
cfg_actionService = serviceName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: updateCurrentIndex()
|
||||||
|
|
||||||
|
function updateCurrentIndex() {
|
||||||
|
for (var i = 0; i < model.count; i++) {
|
||||||
|
if (model.get(i).menuId === cfg_actionService + ".desktop") {
|
||||||
|
currentIndex = i;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
currentIndex = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+49
@@ -0,0 +1,49 @@
|
|||||||
|
import QtQuick 2.2
|
||||||
|
import QtQuick.Dialogs 1.0 as QtDialog
|
||||||
|
import org.kde.plasma.components 3.0 as PlasmaComponents
|
||||||
|
import org.kde.kirigami 2.6 as Kirigami
|
||||||
|
|
||||||
|
PlasmaComponents.Button {
|
||||||
|
id: colorSelector
|
||||||
|
|
||||||
|
// Aliases
|
||||||
|
property alias value: colorPicker.currentColor
|
||||||
|
|
||||||
|
// Properties
|
||||||
|
property string label
|
||||||
|
property string dialogTitle
|
||||||
|
property color defaultColor
|
||||||
|
property bool customized
|
||||||
|
|
||||||
|
// Customized checkbox
|
||||||
|
enabled: Kirigami.FormData.checked
|
||||||
|
Kirigami.FormData.checkable: true
|
||||||
|
Kirigami.FormData.checked: customized
|
||||||
|
|
||||||
|
onEnabledChanged: customized = enabled
|
||||||
|
onClicked: colorPicker.open()
|
||||||
|
|
||||||
|
// Size
|
||||||
|
topPadding: 12
|
||||||
|
bottomPadding: topPadding
|
||||||
|
leftPadding: topPadding * 2
|
||||||
|
rightPadding: leftPadding
|
||||||
|
|
||||||
|
// Components
|
||||||
|
QtDialog.ColorDialog {
|
||||||
|
id: colorPicker
|
||||||
|
title: dialogTitle
|
||||||
|
}
|
||||||
|
MouseArea {
|
||||||
|
id: mouseArea
|
||||||
|
anchors.fill: parent
|
||||||
|
onPressed: mouse.accepted = false
|
||||||
|
cursorShape: enabled ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||||
|
}
|
||||||
|
|
||||||
|
background: Rectangle {
|
||||||
|
color: customized ? colorPicker.currentColor : defaultColor
|
||||||
|
opacity: colorPicker.enabled ? 1 : 0.75
|
||||||
|
radius: 2
|
||||||
|
}
|
||||||
|
}
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
import QtQuick 2.2
|
||||||
|
import org.kde.kirigami 2.6 as Kirigami
|
||||||
|
import "./" as RMControls
|
||||||
|
|
||||||
|
RMControls.SpinBox {
|
||||||
|
id: customizableSize
|
||||||
|
|
||||||
|
property bool customized
|
||||||
|
|
||||||
|
// Customized checkbox
|
||||||
|
enabled: Kirigami.FormData.checked
|
||||||
|
Kirigami.FormData.checkable: true
|
||||||
|
Kirigami.FormData.checked: customized
|
||||||
|
onEnabledChanged: customized = enabled
|
||||||
|
|
||||||
|
// Component
|
||||||
|
textFromValue: function (value, locale) {
|
||||||
|
return valueToText(value, locale) + " px";
|
||||||
|
}
|
||||||
|
}
|
||||||
+57
@@ -0,0 +1,57 @@
|
|||||||
|
import QtQuick 2.0
|
||||||
|
import QtQuick.Layouts 1.15 as QtLayouts
|
||||||
|
import QtQuick.Controls 2.0 as QQC2
|
||||||
|
import org.kde.kirigami 2.6 as Kirigami
|
||||||
|
import "./" as RMControls
|
||||||
|
|
||||||
|
QtLayouts.RowLayout {
|
||||||
|
spacing: Kirigami.Units.largeSpacing
|
||||||
|
|
||||||
|
property alias predefinedChoices: predefinedChoices
|
||||||
|
property alias spinBox: spinBox
|
||||||
|
|
||||||
|
property int customValueIndex: 0
|
||||||
|
property real factor: 1 // This is for auto convert from Kilo, Mega, etc
|
||||||
|
|
||||||
|
property real value: Math.round(realValue / factor)
|
||||||
|
property real realValue
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
// Initialize spin real value
|
||||||
|
spinBox.realValue = value;
|
||||||
|
|
||||||
|
// Bind "realValue" to "spinBox.realValue" and "factor"
|
||||||
|
realValue = Qt.binding(() => spinBox.realValue * factor);
|
||||||
|
}
|
||||||
|
|
||||||
|
QQC2.ComboBox {
|
||||||
|
id: predefinedChoices
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
currentIndex: -1
|
||||||
|
|
||||||
|
onActivated: {
|
||||||
|
// Skip update spin box if user select custom option
|
||||||
|
if (currentIndex === customValueIndex) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set value from choice in spin box (for have only one place to manage value)
|
||||||
|
if (currentValue !== -1) {
|
||||||
|
spinBox.realValue = valueFromPredefinedChoice(currentValue, currentIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Auto select predefined choice
|
||||||
|
Component.onCompleted: {
|
||||||
|
const index = indexOfValue(realValue);
|
||||||
|
currentIndex = index !== -1 ? index : customValueIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RMControls.SpinBox {
|
||||||
|
id: spinBox
|
||||||
|
QtLayouts.Layout.fillWidth: true
|
||||||
|
visible: predefinedChoices.currentIndex === customValueIndex
|
||||||
|
}
|
||||||
|
|
||||||
|
property var valueFromPredefinedChoice: (value, index) => value / factor
|
||||||
|
}
|
||||||
+125
@@ -0,0 +1,125 @@
|
|||||||
|
/**
|
||||||
|
* Example:
|
||||||
|
import "./components/controls" as RMControls
|
||||||
|
// Integer
|
||||||
|
RMControls.SpinBox {
|
||||||
|
from: 0
|
||||||
|
to: 1000
|
||||||
|
stepSize: 5
|
||||||
|
|
||||||
|
textFromValue: function(value, locale) {
|
||||||
|
return valueToText(value, locale) + " px"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Double
|
||||||
|
RMControls.SpinBox {
|
||||||
|
decimals: 3
|
||||||
|
minimumValue: 0.0
|
||||||
|
maximumValue: 1000.0
|
||||||
|
stepSize: Math.round(0.5 * factor)
|
||||||
|
|
||||||
|
textFromValue: function(value, locale) {
|
||||||
|
return valueToText(value, locale) + " m"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
import QtQuick 2.0
|
||||||
|
import QtQuick.Controls 2.0 as QQC2
|
||||||
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||||
|
|
||||||
|
QQC2.SpinBox {
|
||||||
|
id: control
|
||||||
|
editable: true
|
||||||
|
|
||||||
|
readonly property real factor: Math.pow(10, decimals)
|
||||||
|
readonly property int spinBox_MININT: Math.ceil(-2147483648 / factor)
|
||||||
|
readonly property int spinBox_MAXINT: Math.floor(2147483647 / factor)
|
||||||
|
|
||||||
|
value: Math.round(realValue * factor)
|
||||||
|
from: Math.round(minimumValue * factor)
|
||||||
|
to: Math.round(maximumValue * factor)
|
||||||
|
|
||||||
|
// Copry from https://doc.qt.io/qt-5/qml-qtquick-controls2-spinbox.html#custom-values
|
||||||
|
property int decimals: 0
|
||||||
|
property real realValue
|
||||||
|
|
||||||
|
property real minimumValue: 0
|
||||||
|
property real maximumValue: spinBox_MAXINT
|
||||||
|
|
||||||
|
// Bind "realValue" to "value" and "factor"
|
||||||
|
Component.onCompleted: {
|
||||||
|
realValue = Qt.binding(() => value / factor);
|
||||||
|
}
|
||||||
|
|
||||||
|
validator: DoubleValidator {
|
||||||
|
locale: control.locale.name
|
||||||
|
bottom: Math.min(control.from, control.to)
|
||||||
|
top: Math.max(control.from, control.to)
|
||||||
|
}
|
||||||
|
|
||||||
|
textFromValue: valueToText
|
||||||
|
valueFromText: (text, locale) => {
|
||||||
|
text = text.replace(/[^\-\.\d]/g, ""); // Remove non digit characters
|
||||||
|
if (text === ".") {
|
||||||
|
text = "0";
|
||||||
|
}
|
||||||
|
return Number.fromLocaleString(locale, text) * factor;
|
||||||
|
}
|
||||||
|
|
||||||
|
property var valueToText: (value, locale) => {
|
||||||
|
// "toLocaleString" has no concept of "the minimum amount of
|
||||||
|
// digits to represent this number", so we need to calculate this
|
||||||
|
// manually. This ensures that things like "0" and "10" will be
|
||||||
|
// displayed without any decimals, while things like "2.2" and
|
||||||
|
// "3.87" will be displayed with the right number of decimals.
|
||||||
|
const realValue = Number(value / factor);
|
||||||
|
return realValue.toLocaleString(locale, 'f', countDecimals(realValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
contentItem: TextInput {
|
||||||
|
opacity: enabled ? 1 : 0.5
|
||||||
|
text: control.displayText
|
||||||
|
font: control.font
|
||||||
|
color: PlasmaCore.Theme.viewTextColor
|
||||||
|
selectionColor: PlasmaCore.Theme.highlightColor
|
||||||
|
selectedTextColor: PlasmaCore.Theme.highlightedTextColor
|
||||||
|
verticalAlignment: Qt.AlignVCenter
|
||||||
|
readOnly: !control.editable
|
||||||
|
validator: control.validator
|
||||||
|
inputMethodHints: control.inputMethodHints
|
||||||
|
selectByMouse: true
|
||||||
|
|
||||||
|
// Accept return/enter key
|
||||||
|
Keys.onReturnPressed: returnPressed = true
|
||||||
|
Keys.onEnterPressed: returnPressed = true
|
||||||
|
|
||||||
|
// Reselect field when validate value with "return"
|
||||||
|
property bool returnPressed
|
||||||
|
onTextChanged: {
|
||||||
|
if (returnPressed) {
|
||||||
|
returnPressed = false;
|
||||||
|
selectAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allow cancel editing
|
||||||
|
Keys.onEscapePressed: {
|
||||||
|
contentItem.text = textFromValue(value, locale.name);
|
||||||
|
focus = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select value on foucs
|
||||||
|
onActiveFocusChanged: {
|
||||||
|
if (activeFocus) {
|
||||||
|
contentItem.selectAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function countDecimals(value) {
|
||||||
|
if (Math.floor(value) === value) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return value.toString().split(".")[1].length || 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
+123
@@ -0,0 +1,123 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015 Martin Kotelnik <clearmartin@seznam.cz>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of
|
||||||
|
* the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http: //www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
import QtQuick 2.9
|
||||||
|
import QtQuick.Layouts 1.1
|
||||||
|
import org.kde.plasma.plasmoid 2.0
|
||||||
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||||
|
import org.kde.kio 1.0 as Kio
|
||||||
|
import "./components/graph" as RMGraph
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
readonly property bool vertical: plasmoid.formFactor === PlasmaCore.Types.Vertical
|
||||||
|
|
||||||
|
// Settings properties
|
||||||
|
property bool verticalLayout: plasmoid.configuration.verticalLayout
|
||||||
|
property double fontScale: (plasmoid.configuration.fontScale / 100)
|
||||||
|
|
||||||
|
// Component properties
|
||||||
|
property int itemMargin: plasmoid.configuration.graphMargin
|
||||||
|
property double parentWidth: parent === null ? 0 : parent.width
|
||||||
|
property double parentHeight: parent === null ? 0 : parent.height
|
||||||
|
property double initWidth: vertical ? (verticalLayout ? parentWidth : (parentWidth - itemMargin) / 2) : (verticalLayout ? (parentHeight - itemMargin) / 2 : parentHeight)
|
||||||
|
property double itemWidth: plasmoid.configuration.customGraphWidth ? plasmoid.configuration.graphWidth : Math.round(initWidth * (verticalLayout ? 1 : 1.5))
|
||||||
|
property double itemHeight: plasmoid.configuration.customGraphHeight ? plasmoid.configuration.graphHeight : Math.round(initWidth)
|
||||||
|
property double fontPixelSize: Math.round(verticalLayout ? (itemHeight / 1.4 * fontScale) : (itemHeight * fontScale))
|
||||||
|
|
||||||
|
Layout.preferredWidth: !verticalLayout ? (itemWidth * graphView.model.length + itemMargin * (graphView.model.length + 1)) : itemWidth
|
||||||
|
Layout.preferredHeight: verticalLayout ? (itemHeight * graphView.model.length + itemMargin * (graphView.model.length + 1)) : itemHeight
|
||||||
|
LayoutMirroring.enabled: !vertical && Qt.application.layoutDirection === Qt.RightToLeft
|
||||||
|
LayoutMirroring.childrenInherit: true
|
||||||
|
|
||||||
|
Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation
|
||||||
|
|
||||||
|
// Click action
|
||||||
|
Kio.KRun {
|
||||||
|
id: kRun
|
||||||
|
}
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
kRun.openService(plasmoid.configuration.actionService);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Global update timer
|
||||||
|
Timer {
|
||||||
|
id: updateTask
|
||||||
|
interval: plasmoid.configuration.updateInterval * 1000
|
||||||
|
|
||||||
|
running: true
|
||||||
|
triggeredOnStart: true
|
||||||
|
repeat: true
|
||||||
|
|
||||||
|
onTriggered: {
|
||||||
|
for (const i in graphView.model) {
|
||||||
|
const graph = graphView.getGraph(i);
|
||||||
|
if (graph !== null) {
|
||||||
|
graph._update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Main Layout
|
||||||
|
ListView {
|
||||||
|
id: graphView
|
||||||
|
anchors.fill: parent
|
||||||
|
spacing: itemMargin
|
||||||
|
orientation: verticalLayout ? ListView.Vertical : ListView.Horizontal
|
||||||
|
interactive: false
|
||||||
|
|
||||||
|
model: plasmoid.configuration.graphOrders.filter(item => {
|
||||||
|
if (item === "cpu") {
|
||||||
|
return plasmoid.configuration.showCpuMonitor;
|
||||||
|
} else if (item === "disks") {
|
||||||
|
return plasmoid.configuration.showDiskMonitor;
|
||||||
|
} else if (item === "gpu") {
|
||||||
|
return plasmoid.configuration.showGpuMonitor;
|
||||||
|
} else if (item === "memory") {
|
||||||
|
return plasmoid.configuration.showRamMonitor;
|
||||||
|
} else if (item === "network") {
|
||||||
|
return plasmoid.configuration.showNetMonitor;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
|
||||||
|
delegate: Loader {
|
||||||
|
source: _graphIdToFilename(modelData)
|
||||||
|
|
||||||
|
width: itemWidth
|
||||||
|
height: itemHeight
|
||||||
|
|
||||||
|
onLoaded: {
|
||||||
|
item.textContainer.firstLineLabel.font.pixelSize = Qt.binding(() => root.fontPixelSize);
|
||||||
|
item.textContainer.secondLineLabel.font.pixelSize = Qt.binding(() => root.fontPixelSize);
|
||||||
|
item.textContainer.thirdLineLabel.font.pixelSize = Qt.binding(() => root.fontPixelSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getGraph(index) {
|
||||||
|
const loaderItem = graphView.itemAtIndex(index);
|
||||||
|
return loaderItem !== null ? loaderItem.item : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function _graphIdToFilename(graphId) {
|
||||||
|
const filename = (graphId.charAt(0).toUpperCase() + graphId.slice(1)) + "Graph";
|
||||||
|
return "./components/graph/" + filename + ".qml";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"KPlugin": {
|
||||||
|
"Authors": [
|
||||||
|
{
|
||||||
|
"Name": "Kotelnik"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "orblazer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Starrah"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Category": "System Information",
|
||||||
|
"Description": "Plasmoid for monitoring CPU, memory, network traffic GPU and disk IO. This is an fork from \"Resources Monitor\" by Kotelnik",
|
||||||
|
"Description[fr]": "Plasmoid pour surveiller l'utilisation du CPU, de la mémoire, du traffic réseau, de la carte graphique et des disque dur. Ceci est un fork de \"Resources Monitor\" de Kotelnik",
|
||||||
|
"Description[nl]": "Een Plasmoid voor het monitoren van CPU, geheugen, netwerkverkeer GPU en disk IO. Dit is een vork uit \"Resources Monitor\" van Kotelnik.",
|
||||||
|
"Icon": "utilities-system-monitor",
|
||||||
|
"Id": "org.kde.resourcesMonitor-fork",
|
||||||
|
"License": "GPL-3.0-only",
|
||||||
|
"Name": "Resources Monitor (fork)",
|
||||||
|
"Name[fr]": "Moniteur des ressources (fork)",
|
||||||
|
"Name[nl]": "Systeembronmonitor (afsplitsing)",
|
||||||
|
"Version": "2.10.2",
|
||||||
|
"Website": "https://github.com/orblazer/plasma-applet-resources-monitor",
|
||||||
|
"BugReportUrl": "https://github.com/orblazer/plasma-applet-resources-monitor/issues"
|
||||||
|
},
|
||||||
|
"X-Plasma-API": "declarativeappletscript",
|
||||||
|
"X-Plasma-MainScript": "ui/main.qml",
|
||||||
|
"KPackageStructure": "Plasma/Applet"
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
# Translations
|
||||||
|
|
||||||
|
You can found found the list of locale code here : [List of country locale code](https://saimana.com/list-of-country-locale-code/)
|
||||||
|
|
||||||
|
## New Translations
|
||||||
|
|
||||||
|
1. Fill out [`template.pot`](template.pot) with your translations then open a [new issue](https://github.com/orblazer/plasma-applet-resources-monitor/issues/new), name the file `spanish.txt`, attach the txt file to the issue (drag and drop).
|
||||||
|
|
||||||
|
Or if you know how to make a pull request
|
||||||
|
|
||||||
|
1. Copy the `template.pot` file and name it your locale's code (Eg: `en`/`de`/`fr`) with the extension `.po`. Then fill out all the `msgstr ""`.
|
||||||
|
2. Add `Name` and `Description` translation to `../metadata.json`
|
||||||
|
3. Build the translation with `npm run i18n:build`
|
||||||
|
4. Test the translation with `LANGUAGE="country_CODE:locale" LANG="country_CODE.UTF-8" npm run dev`
|
||||||
|
|
||||||
|
**Note** : You need install language pack first.
|
||||||
|
|
||||||
|
## Scripts
|
||||||
|
|
||||||
|
- `npm run i18:merge` will parse the `i18n()` calls in the `*.qml` files and write it to the `template.pot` file. Then it will merge any changes into the `*.po` language files.
|
||||||
|
- `npm run i18n:build` will convert the `*.po` files to it's binary `*.mo` version and move it to `contents/locale/...` which will bundle the translations in the `*.plasmoid` without needing the user to manually install them.
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
| Locale | Lines | % Done|
|
||||||
|
|----------|---------|-------|
|
||||||
|
| Template | 95 | |
|
||||||
|
| fr | 95/95 | 100% |
|
||||||
|
| nl | 95/95 | 100% |
|
||||||
@@ -0,0 +1,453 @@
|
|||||||
|
# Translation of resourcesMonitor-fork in french
|
||||||
|
# Copyright (C) 2021
|
||||||
|
# This file is distributed under the same license as the resourcesMonitor-fork package.
|
||||||
|
# orblazer, 2021.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: resourcesMonitor-fork\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://github.com/orblazer/plasma-applet-resources-monitor\n"
|
||||||
|
"POT-Creation-Date: 2023-05-31 18:43+0200\n"
|
||||||
|
"PO-Revision-Date: 2023-05-31 18:43+0200\n"
|
||||||
|
"Last-Translator: orblazer\n"
|
||||||
|
"Language: fr\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: ../contents/config/config.qml:6 ../contents/ui/config/ConfigData.qml:120 ../contents/ui/config/ConfigGeneral.qml:79
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "General"
|
||||||
|
msgstr "Général"
|
||||||
|
|
||||||
|
#: ../contents/config/config.qml:11
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Data"
|
||||||
|
msgstr "Données"
|
||||||
|
|
||||||
|
#: ../contents/config/config.qml:16
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Appearance"
|
||||||
|
msgstr "Apparence"
|
||||||
|
|
||||||
|
#: ../contents/ui/components/functions.js:20
|
||||||
|
msgctxt "kilobyte suffix"
|
||||||
|
msgid "Bps"
|
||||||
|
msgstr "ops"
|
||||||
|
|
||||||
|
#: ../contents/ui/components/functions.js:28
|
||||||
|
msgctxt "kilobit suffix"
|
||||||
|
msgid "bps"
|
||||||
|
msgstr "bps"
|
||||||
|
|
||||||
|
#: ../contents/ui/components/functions.js:36
|
||||||
|
msgctxt "kibibyte suffix"
|
||||||
|
msgid "iB/s"
|
||||||
|
msgstr "io/s"
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/CpuGraph.qml:41
|
||||||
|
msgctxt "Graph label"
|
||||||
|
msgid "Clock"
|
||||||
|
msgstr "Horloge"
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/CpuGraph.qml:41 ../contents/ui/components/graph/GpuGraph.qml:32
|
||||||
|
msgctxt "Graph label"
|
||||||
|
msgid "Temp."
|
||||||
|
msgstr "Temp."
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/DisksGraph.qml:28
|
||||||
|
msgctxt "Graph label"
|
||||||
|
msgid "Read"
|
||||||
|
msgstr "Lecture"
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/DisksGraph.qml:28
|
||||||
|
msgctxt "Graph label"
|
||||||
|
msgid "Write"
|
||||||
|
msgstr "Écriture"
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/GpuGraph.qml:56
|
||||||
|
msgctxt "Percent unit"
|
||||||
|
msgid "%1%"
|
||||||
|
msgstr "%1%"
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/NetworkGraph.qml:31
|
||||||
|
msgctxt "Graph label"
|
||||||
|
msgid "Receiving"
|
||||||
|
msgstr "Réception"
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/NetworkGraph.qml:31
|
||||||
|
msgctxt "Graph label"
|
||||||
|
msgid "Sending"
|
||||||
|
msgstr "Envoi"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:76 ../contents/ui/config/ConfigAppearance.qml:361
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:122
|
||||||
|
msgctxt "Chart name"
|
||||||
|
msgid "CPU"
|
||||||
|
msgstr "CPU"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:81 ../contents/ui/config/ConfigAppearance.qml:386
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:209
|
||||||
|
msgctxt "Chart name"
|
||||||
|
msgid "Memory"
|
||||||
|
msgstr "Mémoire"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:86 ../contents/ui/config/ConfigAppearance.qml:436
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:315
|
||||||
|
msgctxt "Chart name"
|
||||||
|
msgid "GPU"
|
||||||
|
msgstr "GPU"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:91 ../contents/ui/config/ConfigAppearance.qml:468
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:239 ../contents/ui/config/ConfigGeneral.qml:352
|
||||||
|
msgctxt "Chart name"
|
||||||
|
msgid "Disks I/O"
|
||||||
|
msgstr "Disques E/S"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:96 ../contents/ui/config/ConfigAppearance.qml:411
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:142 ../contents/ui/config/ConfigGeneral.qml:270
|
||||||
|
msgctxt "Chart name"
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Réseau"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:115 ../contents/ui/config/ConfigGeneral.qml:116
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Charts"
|
||||||
|
msgstr "Graphiques"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:120
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Text"
|
||||||
|
msgstr "Texte"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:125
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Colors"
|
||||||
|
msgstr "Couleurs"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:143
|
||||||
|
msgid "Vertical layout"
|
||||||
|
msgstr "Disposition verticale"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:148
|
||||||
|
msgid "History amount:"
|
||||||
|
msgstr "Quantité d'histoire :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:155
|
||||||
|
msgid "Width:"
|
||||||
|
msgstr "Largeur :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:162
|
||||||
|
msgid "Height:"
|
||||||
|
msgstr "Hauteur :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:169
|
||||||
|
msgid "Margin:"
|
||||||
|
msgstr "Marge :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:180
|
||||||
|
msgid "Fill opacity:"
|
||||||
|
msgstr "Opacité du remplissage :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:192
|
||||||
|
msgid "Charts order"
|
||||||
|
msgstr "Ordre des graphiques"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:280
|
||||||
|
msgid "Drop shadows"
|
||||||
|
msgstr "Ombres portées"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:285
|
||||||
|
msgid "Font scale:"
|
||||||
|
msgstr "Taille de la police :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:297
|
||||||
|
msgid "Text displayment:"
|
||||||
|
msgstr "Affichage du texte :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:303
|
||||||
|
msgctxt "Text displayment"
|
||||||
|
msgid "Always"
|
||||||
|
msgstr "Toujours"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:306
|
||||||
|
msgctxt "Text displayment"
|
||||||
|
msgid "On hover"
|
||||||
|
msgstr "Au survol"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:309
|
||||||
|
msgctxt "Text displayment"
|
||||||
|
msgid "Hints when hover"
|
||||||
|
msgstr "Indices au survol"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:319
|
||||||
|
msgid "Placement:"
|
||||||
|
msgstr "Placement :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:325
|
||||||
|
msgctxt "Text placement"
|
||||||
|
msgid "Top left"
|
||||||
|
msgstr "En haut à gauche"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:328
|
||||||
|
msgctxt "Text placement"
|
||||||
|
msgid "Top right"
|
||||||
|
msgstr "En haut à droite"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:331
|
||||||
|
msgctxt "Text placement"
|
||||||
|
msgid "Bottom left"
|
||||||
|
msgstr "En bas à gauche"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:334
|
||||||
|
msgctxt "Text placement"
|
||||||
|
msgid "Bottom right"
|
||||||
|
msgstr "En bas à droite"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:351
|
||||||
|
msgid "Charts colors"
|
||||||
|
msgstr "Couleurs des graphiques"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:367 ../contents/ui/config/ConfigAppearance.qml:442
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Usage:"
|
||||||
|
msgstr "Utilisation :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:369 ../contents/ui/config/ConfigAppearance.qml:394
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:419 ../contents/ui/config/ConfigAppearance.qml:426
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:444 ../contents/ui/config/ConfigAppearance.qml:451
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:476 ../contents/ui/config/ConfigAppearance.qml:483
|
||||||
|
msgctxt "Chart color"
|
||||||
|
msgid "Choose series color"
|
||||||
|
msgstr "Choisir la couleur de la série"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:374 ../contents/ui/config/ConfigAppearance.qml:456
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Temperature:"
|
||||||
|
msgstr "Température :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:376 ../contents/ui/config/ConfigAppearance.qml:458
|
||||||
|
msgctxt "Chart color"
|
||||||
|
msgid "Choose text color"
|
||||||
|
msgstr "Choisir la couleur du texte"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:392
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Physical:"
|
||||||
|
msgstr "Physique :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:399
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Swap:"
|
||||||
|
msgstr "Swap :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:401
|
||||||
|
msgctxt "Chart color"
|
||||||
|
msgid "Choose color of series and text"
|
||||||
|
msgstr "Choisir la couleur de la série et du texte"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:417 ../contents/ui/config/ConfigData.qml:191
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Receiving:"
|
||||||
|
msgstr "Réception :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:424 ../contents/ui/config/ConfigData.qml:215
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Sending:"
|
||||||
|
msgstr "Envoi :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:449
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Memory:"
|
||||||
|
msgstr "Mémoire :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:474 ../contents/ui/config/ConfigData.qml:250
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Read:"
|
||||||
|
msgstr "Lecture :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:481 ../contents/ui/config/ConfigData.qml:274
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Write:"
|
||||||
|
msgstr "Écriture :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:489
|
||||||
|
msgid "Threshold text colors"
|
||||||
|
msgstr "Couleurs des seuils d'alerte"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:495
|
||||||
|
msgid "Warning status:"
|
||||||
|
msgstr "État d’avertissement"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:497
|
||||||
|
msgid "Choose text color when the value is in warning status"
|
||||||
|
msgstr "Choisissez la couleur du texte quand le seuil d'avertissement est passé"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:502
|
||||||
|
msgid "Critical status:"
|
||||||
|
msgstr "État critique"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:504
|
||||||
|
msgid "Choose text color when the value is in critical status"
|
||||||
|
msgstr "Choisissez la couleur du texte quand le seul critique est passé"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:39 ../contents/ui/config/ConfigData.qml:67
|
||||||
|
msgid "Custom"
|
||||||
|
msgstr "Personnalisée"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:125
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Thresholds"
|
||||||
|
msgstr "Seuils d'alerte"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:148
|
||||||
|
msgid "Network interfaces:"
|
||||||
|
msgstr "Interfaces réseau :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:185 ../contents/ui/config/ConfigData.qml:244
|
||||||
|
msgid "Maximum transfer speed"
|
||||||
|
msgstr "Vitesse de transfert maximale"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:298
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Graphic card"
|
||||||
|
msgstr "Carte graphique"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:305
|
||||||
|
msgid "Graphic card:"
|
||||||
|
msgstr "Carte graphique :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:347
|
||||||
|
msgid "Warning"
|
||||||
|
msgstr "Avertissement"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:354
|
||||||
|
msgid "Critical"
|
||||||
|
msgstr "Critique"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:361
|
||||||
|
msgid "CPU Temperature:"
|
||||||
|
msgstr "Température du CPU"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:393
|
||||||
|
msgid "Physical Memory Usage:"
|
||||||
|
msgstr "Utilisation de la mémoire"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:417
|
||||||
|
msgid "GPU Temperature:"
|
||||||
|
msgstr "Température du GPU"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:84
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Click action"
|
||||||
|
msgstr "Action du clique"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:101
|
||||||
|
msgid "Update interval:"
|
||||||
|
msgstr "Intervalle d'actualisation :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:110
|
||||||
|
msgid "%1 seconds"
|
||||||
|
msgstr "%1 secondes"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:128 ../contents/ui/config/ConfigGeneral.qml:215
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:276
|
||||||
|
msgid "Visibility:"
|
||||||
|
msgstr "Visibilité"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:134 ../contents/ui/config/ConfigGeneral.qml:170
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:221 ../contents/ui/config/ConfigGeneral.qml:282
|
||||||
|
msgid "Disabled"
|
||||||
|
msgstr "Désactivé"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:137
|
||||||
|
msgid "Total usage"
|
||||||
|
msgstr "Utilisation total"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:140
|
||||||
|
msgid "System usage"
|
||||||
|
msgstr "Utilisation du système"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:143
|
||||||
|
msgid "User usage"
|
||||||
|
msgstr "Utilisation de l'Utilisateur"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:163
|
||||||
|
msgid "Clock visibility:"
|
||||||
|
msgstr "Visibilité de l'horloge :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:173
|
||||||
|
msgctxt "Agregator"
|
||||||
|
msgid "Average"
|
||||||
|
msgstr "Moyenne"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:176
|
||||||
|
msgctxt "Agregator"
|
||||||
|
msgid "Minimum"
|
||||||
|
msgstr "Minimum"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:179
|
||||||
|
msgctxt "Agregator"
|
||||||
|
msgid "Maximum"
|
||||||
|
msgstr "Maximum"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:199 ../contents/ui/config/ConfigGeneral.qml:341
|
||||||
|
msgid "Show temperature"
|
||||||
|
msgstr "Afficher la température"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:224
|
||||||
|
msgid "Physical memory (in KiB)"
|
||||||
|
msgstr "Mémoire Physique (en Kio)"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:227
|
||||||
|
msgid "Physical memory (in %)"
|
||||||
|
msgstr "Mémoire Physique (en %)"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:230
|
||||||
|
msgid "Application memory (in KiB)"
|
||||||
|
msgstr "Mémoire Applicative (en Kio)"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:233
|
||||||
|
msgid "Application memory (in %)"
|
||||||
|
msgstr "Mémoire Applicative (en %)"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:259
|
||||||
|
msgid "Show swap"
|
||||||
|
msgstr "Afficher le swap"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:285
|
||||||
|
msgid "In kibibyte (KiB/s)"
|
||||||
|
msgstr "En kibioctet (Kio/s)"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:288
|
||||||
|
msgid "In kilobit (Kbps)"
|
||||||
|
msgstr "En kilobit (Kbps)"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:291
|
||||||
|
msgid "In kilobyte (KBps)"
|
||||||
|
msgstr "En kilooctet (Kops)"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:327 ../contents/ui/config/ConfigGeneral.qml:364
|
||||||
|
msgid "Enabled?"
|
||||||
|
msgstr "Activé ?"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:331
|
||||||
|
msgid "Show memory"
|
||||||
|
msgstr "Afficher la mémoire"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:336
|
||||||
|
msgid "Memory in percent"
|
||||||
|
msgstr "Mémoire en pourcent"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:380
|
||||||
|
msgid "Search an application:"
|
||||||
|
msgstr "Chercher une application :"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:382
|
||||||
|
msgid "Application name"
|
||||||
|
msgstr "Nom de l'application"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:389
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr "Applications"
|
||||||
@@ -0,0 +1,454 @@
|
|||||||
|
# Translation of resourcesMonitor-fork in nl
|
||||||
|
# Copyright (C) 2021
|
||||||
|
# This file is distributed under the same license as the resourcesMonitor-fork package.
|
||||||
|
# Heimen Stoffels <vistausss@fastmail.com>, 2021.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: resourcesMonitor-fork\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://github.com/orblazer/plasma-applet-resources-monitor\n"
|
||||||
|
"POT-Creation-Date: 2023-05-31 18:43+0200\n"
|
||||||
|
"PO-Revision-Date: 2023-05-31 18:44+0200\n"
|
||||||
|
"Last-Translator: orblazer\n"
|
||||||
|
"Language: nl\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"X-Generator: Poedit 3.0\n"
|
||||||
|
|
||||||
|
#: ../contents/config/config.qml:6 ../contents/ui/config/ConfigData.qml:120 ../contents/ui/config/ConfigGeneral.qml:79
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "General"
|
||||||
|
msgstr "Algemeen"
|
||||||
|
|
||||||
|
#: ../contents/config/config.qml:11
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Data"
|
||||||
|
msgstr "Gegevens"
|
||||||
|
|
||||||
|
#: ../contents/config/config.qml:16
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Appearance"
|
||||||
|
msgstr "Uiterlijk"
|
||||||
|
|
||||||
|
#: ../contents/ui/components/functions.js:20
|
||||||
|
msgctxt "kilobyte suffix"
|
||||||
|
msgid "Bps"
|
||||||
|
msgstr "Bps"
|
||||||
|
|
||||||
|
#: ../contents/ui/components/functions.js:28
|
||||||
|
msgctxt "kilobit suffix"
|
||||||
|
msgid "bps"
|
||||||
|
msgstr "bps"
|
||||||
|
|
||||||
|
#: ../contents/ui/components/functions.js:36
|
||||||
|
msgctxt "kibibyte suffix"
|
||||||
|
msgid "iB/s"
|
||||||
|
msgstr "iB/s"
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/CpuGraph.qml:41
|
||||||
|
msgctxt "Graph label"
|
||||||
|
msgid "Clock"
|
||||||
|
msgstr "Klok"
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/CpuGraph.qml:41 ../contents/ui/components/graph/GpuGraph.qml:32
|
||||||
|
msgctxt "Graph label"
|
||||||
|
msgid "Temp."
|
||||||
|
msgstr "Temp."
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/DisksGraph.qml:28
|
||||||
|
msgctxt "Graph label"
|
||||||
|
msgid "Read"
|
||||||
|
msgstr "Lees"
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/DisksGraph.qml:28
|
||||||
|
msgctxt "Graph label"
|
||||||
|
msgid "Write"
|
||||||
|
msgstr "Schrijf"
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/GpuGraph.qml:56
|
||||||
|
msgctxt "Percent unit"
|
||||||
|
msgid "%1%"
|
||||||
|
msgstr "%1%"
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/NetworkGraph.qml:31
|
||||||
|
msgctxt "Graph label"
|
||||||
|
msgid "Receiving"
|
||||||
|
msgstr "Ontvangst"
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/NetworkGraph.qml:31
|
||||||
|
msgctxt "Graph label"
|
||||||
|
msgid "Sending"
|
||||||
|
msgstr "Verzend."
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:76 ../contents/ui/config/ConfigAppearance.qml:361
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:122
|
||||||
|
msgctxt "Chart name"
|
||||||
|
msgid "CPU"
|
||||||
|
msgstr "CPU"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:81 ../contents/ui/config/ConfigAppearance.qml:386
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:209
|
||||||
|
msgctxt "Chart name"
|
||||||
|
msgid "Memory"
|
||||||
|
msgstr "Geheugen"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:86 ../contents/ui/config/ConfigAppearance.qml:436
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:315
|
||||||
|
msgctxt "Chart name"
|
||||||
|
msgid "GPU"
|
||||||
|
msgstr "GPU"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:91 ../contents/ui/config/ConfigAppearance.qml:468
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:239 ../contents/ui/config/ConfigGeneral.qml:352
|
||||||
|
msgctxt "Chart name"
|
||||||
|
msgid "Disks I/O"
|
||||||
|
msgstr "Schijven I/O"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:96 ../contents/ui/config/ConfigAppearance.qml:411
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:142 ../contents/ui/config/ConfigGeneral.qml:270
|
||||||
|
msgctxt "Chart name"
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Netwerk"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:115 ../contents/ui/config/ConfigGeneral.qml:116
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Charts"
|
||||||
|
msgstr "Grafieken"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:120
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Text"
|
||||||
|
msgstr "Tekst"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:125
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Colors"
|
||||||
|
msgstr "Kleuren"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:143
|
||||||
|
msgid "Vertical layout"
|
||||||
|
msgstr "Verticale indeling"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:148
|
||||||
|
msgid "History amount:"
|
||||||
|
msgstr "Historie bedrag:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:155
|
||||||
|
msgid "Width:"
|
||||||
|
msgstr "Breedte:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:162
|
||||||
|
msgid "Height:"
|
||||||
|
msgstr "Hoogte:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:169
|
||||||
|
msgid "Margin:"
|
||||||
|
msgstr "Marge:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:180
|
||||||
|
msgid "Fill opacity:"
|
||||||
|
msgstr "Ondoorzichtigheid vullen:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:192
|
||||||
|
msgid "Charts order"
|
||||||
|
msgstr "Volgorde grafieken"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:280
|
||||||
|
msgid "Drop shadows"
|
||||||
|
msgstr "Vallende schaduwen"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:285
|
||||||
|
msgid "Font scale:"
|
||||||
|
msgstr "Tekstgrootte:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:297
|
||||||
|
msgid "Text displayment:"
|
||||||
|
msgstr "Tekst tonen:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:303
|
||||||
|
msgctxt "Text displayment"
|
||||||
|
msgid "Always"
|
||||||
|
msgstr "Altijd"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:306
|
||||||
|
msgctxt "Text displayment"
|
||||||
|
msgid "On hover"
|
||||||
|
msgstr "Na aanwijzen"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:309
|
||||||
|
msgctxt "Text displayment"
|
||||||
|
msgid "Hints when hover"
|
||||||
|
msgstr "Tip tonen na aanwijzen"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:319
|
||||||
|
msgid "Placement:"
|
||||||
|
msgstr "Locatie:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:325
|
||||||
|
msgctxt "Text placement"
|
||||||
|
msgid "Top left"
|
||||||
|
msgstr "Linksboven"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:328
|
||||||
|
msgctxt "Text placement"
|
||||||
|
msgid "Top right"
|
||||||
|
msgstr "Rechtboven"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:331
|
||||||
|
msgctxt "Text placement"
|
||||||
|
msgid "Bottom left"
|
||||||
|
msgstr "Linksonder"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:334
|
||||||
|
msgctxt "Text placement"
|
||||||
|
msgid "Bottom right"
|
||||||
|
msgstr "Rechtsonder"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:351
|
||||||
|
msgid "Charts colors"
|
||||||
|
msgstr "Kleuren grafieken"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:367 ../contents/ui/config/ConfigAppearance.qml:442
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Usage:"
|
||||||
|
msgstr "Gebruik:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:369 ../contents/ui/config/ConfigAppearance.qml:394
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:419 ../contents/ui/config/ConfigAppearance.qml:426
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:444 ../contents/ui/config/ConfigAppearance.qml:451
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:476 ../contents/ui/config/ConfigAppearance.qml:483
|
||||||
|
msgctxt "Chart color"
|
||||||
|
msgid "Choose series color"
|
||||||
|
msgstr "Kies seriekleur"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:374 ../contents/ui/config/ConfigAppearance.qml:456
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Temperature:"
|
||||||
|
msgstr "Temperatuur:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:376 ../contents/ui/config/ConfigAppearance.qml:458
|
||||||
|
msgctxt "Chart color"
|
||||||
|
msgid "Choose text color"
|
||||||
|
msgstr "Kies tekstkleur"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:392
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Physical:"
|
||||||
|
msgstr "Fysiek:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:399
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Swap:"
|
||||||
|
msgstr "Swap:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:401
|
||||||
|
msgctxt "Chart color"
|
||||||
|
msgid "Choose color of series and text"
|
||||||
|
msgstr "Kies kleur van serie en tekst"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:417 ../contents/ui/config/ConfigData.qml:191
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Receiving:"
|
||||||
|
msgstr "Ontvangst:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:424 ../contents/ui/config/ConfigData.qml:215
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Sending:"
|
||||||
|
msgstr "Verzending:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:449
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Memory:"
|
||||||
|
msgstr "Geheugen"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:474 ../contents/ui/config/ConfigData.qml:250
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Read:"
|
||||||
|
msgstr "Lees:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:481 ../contents/ui/config/ConfigData.qml:274
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Write:"
|
||||||
|
msgstr "Schrijf:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:489
|
||||||
|
msgid "Threshold text colors"
|
||||||
|
msgstr "Drempelwaarde tekstkleuren"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:495
|
||||||
|
msgid "Warning status:"
|
||||||
|
msgstr "Waarschuwingsstatus:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:497
|
||||||
|
msgid "Choose text color when the value is in warning status"
|
||||||
|
msgstr "Kies de tekstkleur wanneer de waarde in de waarschuwingsstatus staat"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:502
|
||||||
|
msgid "Critical status:"
|
||||||
|
msgstr "Kritieke status:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:504
|
||||||
|
msgid "Choose text color when the value is in critical status"
|
||||||
|
msgstr "Tekstkleur kiezen wanneer de waarde in kritieke status is"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:39 ../contents/ui/config/ConfigData.qml:67
|
||||||
|
msgid "Custom"
|
||||||
|
msgstr "Aangepast"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:125
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Thresholds"
|
||||||
|
msgstr "Drempels"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:148
|
||||||
|
msgid "Network interfaces:"
|
||||||
|
msgstr "Netwerkkaarten:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:185 ../contents/ui/config/ConfigData.qml:244
|
||||||
|
msgid "Maximum transfer speed"
|
||||||
|
msgstr "Maximale overdrachtssnelheid"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:298
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Graphic card"
|
||||||
|
msgstr "Grafische kaart"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:305
|
||||||
|
msgid "Graphic card:"
|
||||||
|
msgstr "Grafische kaart:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:347
|
||||||
|
msgid "Warning"
|
||||||
|
msgstr "Waarschuwing"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:354
|
||||||
|
msgid "Critical"
|
||||||
|
msgstr "Kritisch"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:361
|
||||||
|
msgid "CPU Temperature:"
|
||||||
|
msgstr "CPU-temperatuur:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:393
|
||||||
|
msgid "Physical Memory Usage:"
|
||||||
|
msgstr "Fysiek geheugengebruik:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:417
|
||||||
|
msgid "GPU Temperature:"
|
||||||
|
msgstr "GPU-temperatuur:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:84
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Click action"
|
||||||
|
msgstr "Klik actie"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:101
|
||||||
|
msgid "Update interval:"
|
||||||
|
msgstr "Bijwerktussenpoos:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:110
|
||||||
|
msgid "%1 seconds"
|
||||||
|
msgstr "%1 seconden"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:128 ../contents/ui/config/ConfigGeneral.qml:215
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:276
|
||||||
|
msgid "Visibility:"
|
||||||
|
msgstr "Zichtbaarheid:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:134 ../contents/ui/config/ConfigGeneral.qml:170
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:221 ../contents/ui/config/ConfigGeneral.qml:282
|
||||||
|
msgid "Disabled"
|
||||||
|
msgstr "Uitgeschakeld"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:137
|
||||||
|
msgid "Total usage"
|
||||||
|
msgstr "Totaal gebruik"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:140
|
||||||
|
msgid "System usage"
|
||||||
|
msgstr "Systeemgebruik"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:143
|
||||||
|
msgid "User usage"
|
||||||
|
msgstr "Gebruikersgebruik"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:163
|
||||||
|
msgid "Clock visibility:"
|
||||||
|
msgstr "Klok zichtbaarheid:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:173
|
||||||
|
msgctxt "Agregator"
|
||||||
|
msgid "Average"
|
||||||
|
msgstr "Gemiddeld"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:176
|
||||||
|
msgctxt "Agregator"
|
||||||
|
msgid "Minimum"
|
||||||
|
msgstr "Minimaal"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:179
|
||||||
|
msgctxt "Agregator"
|
||||||
|
msgid "Maximum"
|
||||||
|
msgstr "Maximaal"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:199 ../contents/ui/config/ConfigGeneral.qml:341
|
||||||
|
msgid "Show temperature"
|
||||||
|
msgstr "Toon temperatuur"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:224
|
||||||
|
msgid "Physical memory (in KiB)"
|
||||||
|
msgstr "Fysiek geheugen (in KiB)"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:227
|
||||||
|
msgid "Physical memory (in %)"
|
||||||
|
msgstr "Fysiek geheugen (in %)"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:230
|
||||||
|
msgid "Application memory (in KiB)"
|
||||||
|
msgstr "Toepassingsgeheugen (KiB)"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:233
|
||||||
|
msgid "Application memory (in %)"
|
||||||
|
msgstr "Toepassingsgeheugen (in %)"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:259
|
||||||
|
msgid "Show swap"
|
||||||
|
msgstr "Toon swap"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:285
|
||||||
|
msgid "In kibibyte (KiB/s)"
|
||||||
|
msgstr "In kibibyte (KiB/s)"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:288
|
||||||
|
msgid "In kilobit (Kbps)"
|
||||||
|
msgstr "In kilobit (Kbps)"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:291
|
||||||
|
msgid "In kilobyte (KBps)"
|
||||||
|
msgstr "In kilobyte (KBps)"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:327 ../contents/ui/config/ConfigGeneral.qml:364
|
||||||
|
msgid "Enabled?"
|
||||||
|
msgstr "Ingeschakeld?"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:331
|
||||||
|
msgid "Show memory"
|
||||||
|
msgstr "Toon geheugen"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:336
|
||||||
|
msgid "Memory in percent"
|
||||||
|
msgstr "Geheugen in procent"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:380
|
||||||
|
msgid "Search an application:"
|
||||||
|
msgstr "Een toepassing zoeken:"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:382
|
||||||
|
msgid "Application name"
|
||||||
|
msgstr "Naam toepassing"
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:389
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr "Toepassingen"
|
||||||
+483
@@ -0,0 +1,483 @@
|
|||||||
|
# Translation of resourcesMonitor-fork in LANGUAGE
|
||||||
|
# Copyright (C) 2023
|
||||||
|
# This file is distributed under the same license as the resourcesMonitor-fork package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: resourcesMonitor-fork\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://github.com/orblazer/plasma-applet-resources-monitor\n"
|
||||||
|
"POT-Creation-Date: 2023-05-31 18:43+0200\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"Language: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: ../contents/config/config.qml:6
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:120
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:79
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "General"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/config/config.qml:11
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Data"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/config/config.qml:16
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Appearance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/components/functions.js:20
|
||||||
|
msgctxt "kilobyte suffix"
|
||||||
|
msgid "Bps"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/components/functions.js:28
|
||||||
|
msgctxt "kilobit suffix"
|
||||||
|
msgid "bps"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/components/functions.js:36
|
||||||
|
msgctxt "kibibyte suffix"
|
||||||
|
msgid "iB/s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/CpuGraph.qml:41
|
||||||
|
msgctxt "Graph label"
|
||||||
|
msgid "Clock"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/CpuGraph.qml:41
|
||||||
|
#: ../contents/ui/components/graph/GpuGraph.qml:32
|
||||||
|
msgctxt "Graph label"
|
||||||
|
msgid "Temp."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/DisksGraph.qml:28
|
||||||
|
msgctxt "Graph label"
|
||||||
|
msgid "Read"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/DisksGraph.qml:28
|
||||||
|
msgctxt "Graph label"
|
||||||
|
msgid "Write"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/GpuGraph.qml:56
|
||||||
|
msgctxt "Percent unit"
|
||||||
|
msgid "%1%"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/NetworkGraph.qml:31
|
||||||
|
msgctxt "Graph label"
|
||||||
|
msgid "Receiving"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/components/graph/NetworkGraph.qml:31
|
||||||
|
msgctxt "Graph label"
|
||||||
|
msgid "Sending"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:76
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:361
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:122
|
||||||
|
msgctxt "Chart name"
|
||||||
|
msgid "CPU"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:81
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:386
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:209
|
||||||
|
msgctxt "Chart name"
|
||||||
|
msgid "Memory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:86
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:436
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:315
|
||||||
|
msgctxt "Chart name"
|
||||||
|
msgid "GPU"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:91
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:468
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:239
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:352
|
||||||
|
msgctxt "Chart name"
|
||||||
|
msgid "Disks I/O"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:96
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:411
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:142
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:270
|
||||||
|
msgctxt "Chart name"
|
||||||
|
msgid "Network"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:115
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:116
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Charts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:120
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Text"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:125
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Colors"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:143
|
||||||
|
msgid "Vertical layout"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:148
|
||||||
|
msgid "History amount:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:155
|
||||||
|
msgid "Width:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:162
|
||||||
|
msgid "Height:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:169
|
||||||
|
msgid "Margin:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:180
|
||||||
|
msgid "Fill opacity:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:192
|
||||||
|
msgid "Charts order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:280
|
||||||
|
msgid "Drop shadows"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:285
|
||||||
|
msgid "Font scale:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:297
|
||||||
|
msgid "Text displayment:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:303
|
||||||
|
msgctxt "Text displayment"
|
||||||
|
msgid "Always"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:306
|
||||||
|
msgctxt "Text displayment"
|
||||||
|
msgid "On hover"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:309
|
||||||
|
msgctxt "Text displayment"
|
||||||
|
msgid "Hints when hover"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:319
|
||||||
|
msgid "Placement:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:325
|
||||||
|
msgctxt "Text placement"
|
||||||
|
msgid "Top left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:328
|
||||||
|
msgctxt "Text placement"
|
||||||
|
msgid "Top right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:331
|
||||||
|
msgctxt "Text placement"
|
||||||
|
msgid "Bottom left"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:334
|
||||||
|
msgctxt "Text placement"
|
||||||
|
msgid "Bottom right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:351
|
||||||
|
msgid "Charts colors"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:367
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:442
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Usage:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:369
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:394
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:419
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:426
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:444
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:451
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:476
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:483
|
||||||
|
msgctxt "Chart color"
|
||||||
|
msgid "Choose series color"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:374
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:456
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Temperature:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:376
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:458
|
||||||
|
msgctxt "Chart color"
|
||||||
|
msgid "Choose text color"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:392
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Physical:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:399
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Swap:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:401
|
||||||
|
msgctxt "Chart color"
|
||||||
|
msgid "Choose color of series and text"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:417
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:191
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Receiving:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:424
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:215
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Sending:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:449
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Memory:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:474
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:250
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Read:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:481
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:274
|
||||||
|
msgctxt "Chart config"
|
||||||
|
msgid "Write:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:489
|
||||||
|
msgid "Threshold text colors"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:495
|
||||||
|
msgid "Warning status:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:497
|
||||||
|
msgid "Choose text color when the value is in warning status"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:502
|
||||||
|
msgid "Critical status:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigAppearance.qml:504
|
||||||
|
msgid "Choose text color when the value is in critical status"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:39
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:67
|
||||||
|
msgid "Custom"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:125
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Thresholds"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:148
|
||||||
|
msgid "Network interfaces:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:185
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:244
|
||||||
|
msgid "Maximum transfer speed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:298
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Graphic card"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:305
|
||||||
|
msgid "Graphic card:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:347
|
||||||
|
msgid "Warning"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:354
|
||||||
|
msgid "Critical"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:361
|
||||||
|
msgid "CPU Temperature:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:393
|
||||||
|
msgid "Physical Memory Usage:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigData.qml:417
|
||||||
|
msgid "GPU Temperature:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:84
|
||||||
|
msgctxt "Config header"
|
||||||
|
msgid "Click action"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:101
|
||||||
|
msgid "Update interval:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:110
|
||||||
|
msgid "%1 seconds"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:128
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:215
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:276
|
||||||
|
msgid "Visibility:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:134
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:170
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:221
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:282
|
||||||
|
msgid "Disabled"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:137
|
||||||
|
msgid "Total usage"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:140
|
||||||
|
msgid "System usage"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:143
|
||||||
|
msgid "User usage"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:163
|
||||||
|
msgid "Clock visibility:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:173
|
||||||
|
msgctxt "Agregator"
|
||||||
|
msgid "Average"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:176
|
||||||
|
msgctxt "Agregator"
|
||||||
|
msgid "Minimum"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:179
|
||||||
|
msgctxt "Agregator"
|
||||||
|
msgid "Maximum"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:199
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:341
|
||||||
|
msgid "Show temperature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:224
|
||||||
|
msgid "Physical memory (in KiB)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:227
|
||||||
|
msgid "Physical memory (in %)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:230
|
||||||
|
msgid "Application memory (in KiB)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:233
|
||||||
|
msgid "Application memory (in %)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:259
|
||||||
|
msgid "Show swap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:285
|
||||||
|
msgid "In kibibyte (KiB/s)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:288
|
||||||
|
msgid "In kilobit (Kbps)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:291
|
||||||
|
msgid "In kilobyte (KBps)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:327
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:364
|
||||||
|
msgid "Enabled?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:331
|
||||||
|
msgid "Show memory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:336
|
||||||
|
msgid "Memory in percent"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:380
|
||||||
|
msgid "Search an application:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:382
|
||||||
|
msgid "Application name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../contents/ui/config/ConfigGeneral.qml:389
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr ""
|
||||||
Reference in New Issue
Block a user