mirror of https://github.com/harish2704/dotFiles
33 changed files with 4794 additions and 0 deletions
@ -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' |
||||
|
} |
||||
|
} |
@ -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> |
Binary file not shown.
Binary file not shown.
@ -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 |
||||
|
} |
||||
|
} |
||||
|
} |
@ -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 |
||||
|
} |
||||
|
} |
@ -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; |
||||
|
} |
||||
|
} |
||||
|
} |
@ -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 {} |
||||
|
} |
@ -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 |
||||
|
); |
||||
|
} |
@ -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() |
||||
|
} |
||||
|
} |
@ -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]; |
||||
|
} |
||||
|
} |
@ -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"]; |
||||
|
} |
||||
|
} |
||||
|
} |
@ -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]; |
||||
|
} |
||||
|
} |
||||
|
} |
@ -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]; |
||||
|
} |
||||
|
} |
@ -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); |
||||
|
} |
||||
|
} |
@ -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)); |
||||
|
} |
||||
|
} |
@ -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); |
||||
|
} |
||||
|
} |
@ -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); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -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); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -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(); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -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 |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
@ -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"; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
@ -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; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
@ -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 |
||||
|
} |
||||
|
} |
@ -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"; |
||||
|
} |
||||
|
} |
@ -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 |
||||
|
} |
@ -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; |
||||
|
} |
||||
|
} |
@ -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" |
@ -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 "" |
Loading…
Reference in new issue