updated config

This commit is contained in:
2026-08-31 12:13:13 -05:00
parent b7bf86aab7
commit d3cbe74a4f
27 changed files with 2087 additions and 1394 deletions
@@ -7,222 +7,241 @@ import QtQuick.Layouts
import Quickshell
Item {
id: root
id: root
property var pluginApi: null
property var pluginApi: null
property ShellScreen screen
property string widgetId: ""
property string section: ""
property int sectionWidgetIndex: -1
property int sectionWidgetsCount: 0
property ShellScreen screen
property string widgetId: ""
property string section: ""
property int sectionWidgetIndex: -1
property int sectionWidgetsCount: 0
// ── Configuration ──
property string txSpeed: (SystemStatService.formatSpeed(SystemStatService.txSpeed).replace(/([0-9.]+)([A-Za-z]+)/, "$1 $2") + "/s").padStart(8, " ")
property string rxSpeed: (SystemStatService.formatSpeed(SystemStatService.rxSpeed).replace(/([0-9.]+)([A-Za-z]+)/, "$1 $2") + "/s").padStart(8, " ")
property var cfg: pluginApi?.pluginSettings || ({})
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
// ── Configuration ──
property string arrowType: cfg.arrowType ?? defaults.arrowType
property var cfg: pluginApi?.pluginSettings || ({})
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
property bool useCustomColors: cfg.useCustomColors ?? defaults.useCustomColors
property bool showNumbers: cfg.showNumbers ?? defaults.showNumbers
property string iconType: cfg.iconType ?? defaults.iconType
property int byteThresholdActive: cfg.byteThresholdActive ?? defaults.byteThresholdActive
property string layout: cfg.layout ?? defaults.layout
property var slots: cfg.slots ?? defaults.slots
property color colorSilent: root.useCustomColors && cfg.colorSilent || Color.mSurfaceVariant
property color colorTx: root.useCustomColors && cfg.colorTx || Color.mSecondary
property color colorRx: root.useCustomColors && cfg.colorRx || Color.mPrimary
property color colorText: root.useCustomColors && cfg.colorText || Color.mOnSurfaceVariant
property real fontSizeModifier: cfg.fontSizeModifier ?? defaults.fontSizeModifier
property real iconSizeModifier: cfg.iconSizeModifier ?? defaults.iconSizeModifier
property int byteThresholdActive: cfg.byteThresholdActive ?? defaults.byteThresholdActive
property real fontSizeModifier: cfg.fontSizeModifier ?? defaults.fontSizeModifier
property real iconSizeModifier: cfg.iconSizeModifier ?? defaults.iconSizeModifier
property real spacingInbetween: cfg.spacingInbetween ?? defaults.spacingInbetween
property real contentMargin: cfg.contentMargin ?? defaults.contentMargin ?? Style.marginS
property real columnSpacing: cfg.columnSpacing ?? defaults.columnSpacing
property real rowSpacing: cfg.rowSpacing ?? defaults.rowSpacing
property real paddingLeft: cfg.paddingLeft ?? defaults.paddingLeft
property real paddingRight: cfg.paddingRight ?? defaults.paddingRight
property bool useCustomFont: cfg.useCustomFont ?? defaults.useCustomFont
property string customFontFamily: cfg.customFontFamily ?? defaults.customFontFamily
property bool customFontBold: cfg.customFontBold ?? defaults.customFontBold
property bool customFontItalic: cfg.customFontItalic ?? defaults.customFontItalic
property bool useCustomColors: cfg.useCustomColors ?? defaults.useCustomColors
property color colorSilent: root.useCustomColors && cfg.colorSilent || Color.mSurfaceVariant
property color colorTx: root.useCustomColors && cfg.colorTx || Color.mSecondary
property color colorRx: root.useCustomColors && cfg.colorRx || Color.mPrimary
property color colorText: root.useCustomColors && cfg.colorText || Color.mOnSurfaceVariant
property bool horizontalNumbers: cfg.horizontalLayout ?? defaults.horizontalLayout
property bool useCustomFont: cfg.useCustomFont ?? defaults.useCustomFont
property string customFontFamily: cfg.customFontFamily ?? defaults.customFontFamily
property bool customFontBold: cfg.customFontBold ?? defaults.customFontBold
property bool customFontItalic: cfg.customFontItalic ?? defaults.customFontItalic
readonly property string resolvedFontFamily: {
if (root.useCustomFont && root.customFontFamily)
return root.customFontFamily;
return Settings.data.ui.fontDefault;
readonly property string resolvedFontFamily: {
if (root.useCustomFont && root.customFontFamily)
return root.customFontFamily;
return Settings.data.ui.fontDefault;
}
readonly property int resolvedFontWeight: {
if (root.useCustomFont && root.customFontBold)
return Font.Bold;
return Style.fontWeightMedium;
}
readonly property bool resolvedFontItalic: root.useCustomFont && root.customFontItalic
// ── Widget ──
property bool txActive: SystemStatService.txSpeed >= root.byteThresholdActive
property bool rxActive: SystemStatService.rxSpeed >= root.byteThresholdActive
property string barPosition: Settings.data.bar.position || "top"
property string barDensity: Settings.data.bar.density || "compact"
property bool barIsSpacious: barDensity != "mini"
property bool barIsVertical: barPosition === "left" || barPosition === "right"
readonly property real contentWidth: barIsVertical ? Style.capsuleHeight : content.implicitWidth + root.paddingLeft + root.paddingRight
readonly property real contentHeight: barIsVertical ? Math.round(content.implicitHeight + Style.marginM * 2) : Style.capsuleHeight
implicitWidth: contentWidth
implicitHeight: contentHeight
NIcon {
id: txIconElement
icon: root.iconType + "-up"
color: root.txActive ? root.colorTx : root.colorSilent
pointSize: Style.fontSizeL * root.iconSizeModifier
}
NIcon {
id: rxIconElement
icon: root.iconType + "-down"
color: root.rxActive ? root.colorRx : root.colorSilent
pointSize: Style.fontSizeL * root.iconSizeModifier
}
NText {
id: txSpeedElement
text: root.txSpeed
color: root.colorText
pointSize: Style.barFontSize * root.fontSizeModifier
font.family: root.resolvedFontFamily
font.weight: root.resolvedFontWeight
font.italic: root.resolvedFontItalic
}
NText {
id: rxSpeedElement
text: root.rxSpeed
color: root.colorText
pointSize: Style.barFontSize * root.fontSizeModifier
font.family: root.resolvedFontFamily
font.weight: root.resolvedFontWeight
font.italic: root.resolvedFontItalic
}
function getElement(name) {
switch (name) {
case "txIcon":
return txIconElement;
case "rxIcon":
return rxIconElement;
case "txSpeed":
return txSpeedElement;
case "rxSpeed":
return rxSpeedElement;
default:
return null;
}
}
readonly property var spacers: [spacer0, spacer1, spacer2, spacer3]
Item {
id: spacer0
}
Item {
id: spacer1
}
Item {
id: spacer2
}
Item {
id: spacer3
}
Rectangle {
id: visualCapsule
x: Style.pixelAlignCenter(parent.width, width)
y: Style.pixelAlignCenter(parent.height, height)
width: root.contentWidth
height: root.contentHeight
color: Style.capsuleColor
radius: Style.radiusM
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth
GridLayout {
id: content
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: root.paddingLeft
anchors.right: parent.right
anchors.rightMargin: root.paddingRight
rows: root.layout === "horizontal" ? 1 : 2
columns: root.layout === "horizontal" ? 4 : 2
columnSpacing: root.columnSpacing
rowSpacing: root.rowSpacing
}
}
function rebuildLayout() {
rxIconElement.parent = root;
rxIconElement.visible = false;
rxSpeedElement.parent = root;
rxSpeedElement.visible = false;
txIconElement.parent = root;
txIconElement.visible = false;
txSpeedElement.parent = root;
txSpeedElement.visible = false;
for (let s of spacers) {
s.parent = root;
s.visible = false;
}
readonly property int resolvedFontWeight: {
if (root.useCustomFont && root.customFontBold)
return Font.Bold;
return Style.fontWeightMedium;
for (let idx = 0; idx < root.slots.length; idx++) {
const elem = root.getElement(root.slots[idx]);
if (elem) {
elem.parent = content;
elem.visible = true;
} else {
const s = spacers[idx];
s.parent = content;
s.visible = true;
}
}
}
onSlotsChanged: rebuildLayout()
onLayoutChanged: rebuildLayout()
Component.onCompleted: rebuildLayout()
// ── Interaction ──
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton | Qt.RightButton
onPressed: mouse => {
if (mouse.button == Qt.LeftButton)
pluginApi.togglePanel(root.screen, root);
if (mouse.button == Qt.RightButton)
PanelService.showContextMenu(contextMenu, root, screen);
}
readonly property bool resolvedFontItalic: root.useCustomFont && root.customFontItalic
NPopupContextMenu {
id: contextMenu
readonly property bool numbersVisible: root.showNumbers && barIsSpacious && !barIsVertical
model: [
{
"label": root.pluginApi?.tr("actions.toggle-panel"),
"action": "toggle-panel",
"icon": "activity"
},
{
"label": root.pluginApi?.tr("actions.widget-settings"),
"action": "widget-settings",
"icon": "settings"
},
]
property string barPosition: Settings.data.bar.position || "top"
property string barDensity: Settings.data.bar.density || "compact"
property bool barIsSpacious: barDensity != "mini"
property bool barIsVertical: barPosition === "left" || barPosition === "right"
onTriggered: action => {
contextMenu.close();
PanelService.closeContextMenu(screen);
readonly property real contentWidth: barIsVertical ? Style.capsuleHeight : contentRow.implicitWidth + root.contentMargin * 2
readonly property real contentHeight: barIsVertical ? Math.round(contentRow.implicitHeight + Style.marginM * 2) : Style.capsuleHeight
implicitWidth: contentWidth
implicitHeight: contentHeight
// ── Widget ──
property string txSpeed: (SystemStatService.formatSpeed(SystemStatService.txSpeed).replace(/([0-9.]+)([A-Za-z]+)/, "$1 $2") + "/s").padStart(8, " ")
property string rxSpeed: (SystemStatService.formatSpeed(SystemStatService.rxSpeed).replace(/([0-9.]+)([A-Za-z]+)/, "$1 $2") + "/s").padStart(8, " ")
Rectangle {
id: visualCapsule
x: Style.pixelAlignCenter(parent.width, width)
y: Style.pixelAlignCenter(parent.height, height)
width: root.contentWidth
height: root.contentHeight
color: Style.capsuleColor
radius: Style.radiusM
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth
RowLayout {
id: contentRow
anchors.centerIn: parent
spacing: Style.marginS
// Vertical layout: stacked values to the left
Column {
visible: root.numbersVisible && !root.horizontalNumbers
spacing: root.spacingInbetween
NText {
horizontalAlignment: Text.AlignRight
text: root.txSpeed
color: root.colorText
pointSize: Style.barFontSize * root.fontSizeModifier
font.family: root.resolvedFontFamily
font.weight: root.resolvedFontWeight
font.italic: root.resolvedFontItalic
}
NText {
horizontalAlignment: Text.AlignRight
text: root.rxSpeed
color: root.colorText
pointSize: Style.barFontSize * root.fontSizeModifier
font.family: root.resolvedFontFamily
font.weight: root.resolvedFontWeight
font.italic: root.resolvedFontItalic
}
}
// Horizontal layout: TX value left
NText {
visible: root.numbersVisible && root.horizontalNumbers
horizontalAlignment: Text.AlignRight
text: root.rxSpeed
color: root.colorText
pointSize: Style.barFontSize * root.fontSizeModifier
font.family: root.resolvedFontFamily
font.weight: root.resolvedFontWeight
font.italic: root.resolvedFontItalic
}
// Icons
Column {
spacing: -10.0 + root.spacingInbetween
NIcon {
icon: arrowType + "-up"
color: SystemStatService.txSpeed >= root.byteThresholdActive ? root.colorTx : root.colorSilent
pointSize: Style.fontSizeL * root.iconSizeModifier
}
NIcon {
icon: arrowType + "-down"
color: SystemStatService.rxSpeed >= root.byteThresholdActive ? root.colorRx : root.colorSilent
pointSize: Style.fontSizeL * root.iconSizeModifier
}
}
// Horizontal layout: RX value right
NText {
visible: root.numbersVisible && root.horizontalNumbers
horizontalAlignment: Text.AlignLeft
text: root.txSpeed
color: root.colorText
pointSize: Style.barFontSize * root.fontSizeModifier
font.family: root.resolvedFontFamily
font.weight: root.resolvedFontWeight
font.italic: root.resolvedFontItalic
}
}
}
// ── Interaction ──
HoverHandler {
id: hoverHandler
onHoveredChanged: {
if (hovered) {
closeTimer.stop();
hoverTimer.start();
} else {
hoverTimer.stop();
closeTimer.start();
}
}
}
Timer {
id: hoverTimer
interval: 500
onTriggered: {
if (hoverHandler.hovered && root.pluginApi && !pluginApi.panelOpenScreen)
pluginApi.openPanel(root.screen, root);
}
}
Timer {
id: closeTimer
interval: 250
onTriggered: {
if (!hoverHandler.hovered && root.pluginApi && pluginApi.panelOpenScreen)
pluginApi.togglePanel(root.screen, root);
}
}
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.RightButton
onPressed: mouse => {
if (mouse.button == Qt.RightButton)
PanelService.showContextMenu(contextMenu, root, screen);
}
NPopupContextMenu {
id: contextMenu
model: [
{
"label": root.pluginApi?.tr("actions.widget-settings"),
"action": "widget-settings",
"icon": "settings"
},
]
onTriggered: action => {
contextMenu.close();
PanelService.closeContextMenu(screen);
if (action === "widget-settings") {
BarService.openPluginSettings(screen, pluginApi.manifest);
}
}
if (action === "toggle-panel")
pluginApi.togglePanel(root.screen, root);
else if (action === "widget-settings") {
BarService.openPluginSettings(screen, pluginApi.manifest);
}
}
}
}
}
@@ -1,103 +1,358 @@
import QtQuick
import QtQuick.Layouts
import qs.Commons
import qs.Modules.MainScreen
import qs.Services.UI
import qs.Services.System
import qs.Widgets
import QtQuick
import QtQuick.Layouts
Item {
id: root
id: root
readonly property var geometryPlaceholder: panelContent
readonly property bool allowAttach: true
property var pluginApi: null
property var pluginApi: null
property var cfg: pluginApi?.pluginSettings || ({})
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
property string arrowType: cfg.arrowType ?? defaults.arrowType
readonly property var geometryPlaceholder: panelContainer
readonly property bool allowAttach: true
property real contentPreferredWidth: 440 * Style.uiScaleRatio
property real contentPreferredHeight: panelContent.implicitHeight + Style.marginL * 2
property var cfg: pluginApi?.pluginSettings || ({})
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
property string iconType: cfg.iconType ?? defaults.iconType ?? "arrow"
property real contentPreferredWidth: 400 * Style.uiScaleRatio
property real contentPreferredHeight: Math.min(contentColumn.implicitHeight + Style.marginL * 2, 600 * Style.uiScaleRatio)
property bool useCustomColors: cfg.useCustomColors ?? defaults.useCustomColors
property color colorTx: root.useCustomColors && cfg.colorTx || Color.mSecondary
property color colorRx: root.useCustomColors && cfg.colorRx || Color.mPrimary
anchors.fill: parent
Component.onCompleted: {
if (pluginApi)
Logger.i("NetworkIndicator", "Panel initialized");
}
Rectangle {
id: panelContainer
anchors.fill: parent
Component.onCompleted: {
if (pluginApi) {
Logger.i("NetworkIndicator", "Panel initialized");
}
}
color: "transparent"
ColumnLayout {
id: panelContent
id: contentColumn
anchors.fill: parent
anchors.margins: Style.marginL
anchors.fill: parent
anchors.margins: Style.marginL
spacing: Style.marginM
NBox {
Layout.fillWidth: true
Layout.preferredHeight: 90 * Style.uiScaleRatio
// ── Header ──
ColumnLayout {
anchors.fill: parent
anchors.margins: Style.marginS
anchors.bottomMargin: Style.radiusM * 0.5
spacing: Style.marginXS
RowLayout {
Layout.fillWidth: true
spacing: Style.marginM
RowLayout {
Layout.fillWidth: true
spacing: Style.marginXS
NIcon {
icon: arrowType + "-down"
pointSize: Style.fontSizeXS
color: Color.mPrimary
}
NText {
text: (SystemStatService.formatSpeed(SystemStatService.rxSpeed).replace(/([0-9.]+)([A-Za-z]+)/, "$1 $2") + "/s").padStart(8, " ")
pointSize: Style.fontSizeXS
color: Color.mPrimary
font.family: Settings.data.ui.fontFixed
Layout.rightMargin: Style.marginS
}
NIcon {
icon: arrowType + "-up"
pointSize: Style.fontSizeXS
color: Color.mSecondary
}
NText {
text: (SystemStatService.formatSpeed(SystemStatService.txSpeed).replace(/([0-9.]+)([A-Za-z]+)/, "$1 $2") + "/s").padStart(8, " ")
pointSize: Style.fontSizeXS
color: Color.mSecondary
font.family: Settings.data.ui.fontFixed
}
Item {
Layout.fillWidth: true
}
}
NGraph {
Layout.fillWidth: true
Layout.fillHeight: true
values: SystemStatService.rxSpeedHistory
values2: SystemStatService.txSpeedHistory
minValue: 0
maxValue: SystemStatService.rxMaxSpeed
minValue2: 0
maxValue2: SystemStatService.txMaxSpeed
color: Color.mPrimary
color2: Color.mSecondary
strokeWidth: Math.max(1, Style.uiScaleRatio)
fill: true
fillOpacity: 0.15
updateInterval: SystemStatService.networkIntervalMs
animateScale: true
}
}
NIcon {
icon: "activity"
pointSize: Style.fontSizeXL
color: Color.mPrimary
Layout.alignment: Qt.AlignVCenter
}
NText {
text: root.pluginApi?.tr("panel.title")
pointSize: Style.fontSizeL
font.weight: Font.Bold
color: Color.mOnSurface
Layout.alignment: Qt.AlignVCenter
}
Item {
Layout.fillWidth: true
}
NText {
text: `Interval ${(SystemStatService.networkIntervalMs / 1000)}s`
pointSize: Style.fontSizeXXS
color: Qt.alpha(Color.mOnSurface, 0.5)
Layout.alignment: Qt.AlignVCenter
}
NIconButton {
icon: "settings"
tooltipText: root.pluginApi?.tr("actions.widget-settings")
onClicked: {
const screen = root.pluginApi?.panelOpenScreen;
if (screen) {
root.pluginApi.closePanel(screen);
Qt.callLater(() => BarService.openPluginSettings(screen, root.pluginApi.manifest));
}
}
Layout.alignment: Qt.AlignVCenter
}
NIconButton {
icon: "close"
tooltipText: root.pluginApi?.tr("panel.close")
onClicked: {
const s = root.pluginApi?.panelOpenScreen;
if (s)
root.pluginApi.closePanel(s);
}
Layout.alignment: Qt.AlignVCenter
}
}
// ── Download (RX) ──
NBox {
Layout.fillWidth: true
Layout.preferredHeight: rxGraph.implicitHeight + Style.marginS * 2
NetworkGraph {
id: rxGraph
anchors.fill: parent
anchors.margins: Style.marginS
label: root.pluginApi?.tr("panel.download")
iconName: root.iconType + "-down"
accentColor: root.colorRx
history: SystemStatService.rxSpeedHistory
maxValue: SystemStatService.rxMaxSpeed
currentSpeed: SystemStatService.rxSpeed
}
}
// ── Upload (TX) ──
NBox {
Layout.fillWidth: true
Layout.preferredHeight: txGraph.implicitHeight + Style.marginS * 2
NetworkGraph {
id: txGraph
anchors.fill: parent
anchors.margins: Style.marginS
label: root.pluginApi?.tr("panel.upload")
iconName: root.iconType + "-up"
accentColor: root.colorTx
history: SystemStatService.txSpeedHistory
maxValue: SystemStatService.txMaxSpeed
currentSpeed: SystemStatService.txSpeed
}
}
}
}
component NetworkGraph: ColumnLayout {
id: graphRoot
required property string label
required property string iconName
required property color accentColor
required property var history
required property real maxValue
required property real currentSpeed
function formatSpeed(bytesPerSec) {
return (SystemStatService.formatSpeed(bytesPerSec).replace(/([0-9.]+)([A-Za-z]+)/, "$1 $2") + "/s");
}
function timeAgo(idx) {
const n = graphRoot.history.length;
if (n < 2 || idx < 0)
return "";
const secsAgo = Math.round((n - 1 - idx) * SystemStatService.networkIntervalMs / 1000);
if (secsAgo < 60)
return secsAgo + "s ago";
const mins = Math.floor(secsAgo / 60);
const secs = secsAgo % 60;
return mins + "m " + secs + "s ago";
}
readonly property real yTickHigh: graphRoot.maxValue > 0 ? graphRoot.maxValue * 0.66 : 0
readonly property real yTickLow: graphRoot.maxValue > 0 ? graphRoot.maxValue * 0.33 : 0
readonly property real yAxisWidth: yAxisSizer.width + Style.marginXL
spacing: Style.marginXS
// Hidden text to measure the widest Y-axis label.
// TODO: find a better way.
NText {
id: yAxisSizer
visible: false
text: graphRoot.formatSpeed(graphRoot.yTickHigh)
pointSize: Style.fontSizeXS * 0.8
}
RowLayout {
Layout.fillWidth: true
spacing: Style.marginXS
NIcon {
icon: graphRoot.iconName
pointSize: Style.fontSizeXS
color: graphRoot.accentColor
}
NText {
text: graphRoot.label
pointSize: Style.fontSizeXS
color: graphRoot.accentColor
font.weight: Font.Medium
}
Item {
Layout.fillWidth: true
}
NText {
text: graphRoot.formatSpeed(graphRoot.currentSpeed)
pointSize: Style.fontSizeXS
color: graphRoot.accentColor
font.family: Settings.data.ui.fontFixed
}
}
Item {
Layout.fillWidth: true
implicitHeight: 120 * Style.uiScaleRatio
Item {
id: graphArea
anchors.fill: parent
NGraph {
id: graph
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
anchors.rightMargin: graphRoot.yAxisWidth
values: graphRoot.history
minValue: 0
maxValue: graphRoot.maxValue
color: graphRoot.accentColor
strokeWidth: Math.max(1, Style.uiScaleRatio)
fill: true
fillOpacity: 0.15
updateInterval: SystemStatService.networkIntervalMs
animateScale: true
}
// ── Y-axis scale ──
Repeater {
model: [
{
value: graphRoot.yTickHigh,
fraction: 0.66
},
{
value: graphRoot.yTickLow,
fraction: 0.33
}
]
delegate: Item {
required property var modelData
anchors.left: parent.left
anchors.right: parent.right
y: graphArea.height * (1.0 - modelData.fraction)
visible: graphRoot.maxValue > 0
Rectangle {
id: horizontalLineYLabel
anchors.left: parent.left
anchors.right: yLabel.left
anchors.rightMargin: Style.marginXS
height: 1
color: Qt.alpha(Color.mOnSurface, 0.08)
}
Rectangle {
id: yLabel
anchors.right: parent.right
y: -height / 2
implicitWidth: yLabelText.implicitWidth + Style.marginXS * 2
implicitHeight: yLabelText.implicitHeight + 2
radius: Style.radiusXS
color: Qt.alpha(graphRoot.accentColor, 0.10)
NText {
id: yLabelText
anchors.centerIn: parent
text: graphRoot.formatSpeed(modelData.value)
pointSize: Style.fontSizeXS * 0.8
color: Qt.alpha(graphRoot.accentColor, 0.7)
}
}
}
}
// ── Hover ──
MouseArea {
id: hover
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
anchors.rightMargin: graphRoot.yAxisWidth
hoverEnabled: true
readonly property int idx: {
const n = graphRoot.history.length;
if (n < 2 || !containsMouse)
return -1;
return Math.max(0, Math.min(n - 1, Math.round(mouseX / width * (n - 1))));
}
readonly property real value: idx >= 0 ? (graphRoot.history[idx] ?? -1) : -1
Rectangle {
visible: hover.idx >= 0
x: {
const n = graphRoot.history.length;
if (hover.idx < 0 || n < 2)
return 0;
return (hover.idx / (n - 1)) * parent.width - width / 2;
}
width: Style.borderS
height: parent.height
color: Qt.alpha(Color.mOnSurface, 0.25)
Rectangle {
readonly property real posX: -implicitWidth / 2
readonly property string _label: {
if (hover.value < 0)
return "";
const speed = graphRoot.formatSpeed(hover.value);
const time = graphRoot.timeAgo(hover.idx);
return speed + (time ? " · " + time : "");
}
x: Math.max(-parent.x, Math.min(hover.width - parent.x - implicitWidth, posX))
y: Style.marginXS
implicitWidth: bubbleText.implicitWidth + Style.marginS * 2
implicitHeight: bubbleText.implicitHeight + Style.marginXS * 2
radius: Style.radiusS
color: Color.mSurfaceVariant
border.color: Qt.alpha(Color.mOnSurface, 0.15)
border.width: Style.borderS
NText {
id: bubbleText
anchors.centerIn: parent
text: parent._label
pointSize: Style.fontSizeXS
color: Color.mOnSurface
}
}
}
}
}
}
}
}
@@ -1,18 +1,14 @@
# NetworkIndicator Plugin for Noctalia
A compact Noctalia bar widget that displays current network upload (TX) and download (RX) activity, with optional live throughput values and a hover-activated graph panel.
A Noctalia bar widget that displays current network upload (TX) and download (RX) activity. Includes optional live throughput values and a hover-activated graph panel.
## Features
- **TX/RX Activity Indicators**: Separate icons for upload (TX) and download (RX).
- **Active/Idle Coloring**: Icons switch between "active" and "silent" colors based on a configurable traffic threshold.
- **Optional Throughput Values**: Displays formatted TX/RX speeds as text (shown only when the bar is spacious and horizontal).
- **Vertical and Horizontal Layouts**: Stack TX/RX values on the left of the arrows, or place them side by side with arrows centered in between.
- **Unit Formatting**: Automatically switches between KB/s and MB/s, or can be configured to always display MB/s.
- **TX/RX Activity Indicators**: Icons for TX and RX with active/idle coloring based on a configurable traffic threshold.
- **Vertical and Horizontal Layouts**: Configurable cell grid: arrange up to four cells (TX icon, RX icon, TX speed, RX speed) in a horizontal row or a 2×2 grid. Cells can be left empty to show only icons or only values.
- **Network Graph Panel**: Click on the widget to open a live graph panel showing recent RX and TX history.
- **Custom Font**: Override the default font for speed values, with optional bold and italic styles.
- **Network Graph Panel**: Hover over the widget to open a live graph showing RX and TX history from the system monitor.
- **Theme Support**: Uses Noctalia theme colors by default, with optional custom colors.
- **Configurable Settings**: Provides a comprehensive set of user-adjustable options.
- **Theme Support**: Uses theme colors by default; all colors can be overridden individually.
## Installation
@@ -20,25 +16,21 @@ This plugin is part of the `noctalia-plugins` repository.
## Configuration
Access the plugin settings in Noctalia to configure the following options:
Access settings through the widget's context menu.
- **Icon Type**: Select the icon style used for TX/RX: `arrow`, `arrow-bar`, `arrow-big`, `arrow-narrow`, `caret`, `chevron`, `chevron-compact`, `fold`.
- **Show Values**: Display formatted TX/RX speeds as numbers. Automatically hidden on vertical bars and when using "mini" density.
- **Force Megabytes**: Always display values in MB/s instead of switching to KB/s at low traffic levels.
- **Horizontal Layout**: Place TX and RX values side by side instead of stacked.
- **Minimum Width**: Set a minimum width for the widget to prevent resizing when values change.
- **Content Margin**: Horizontal padding on both sides of the widget content.
- **Show Active Threshold**: Set the traffic threshold in bytes per second (B/s) above which TX/RX is considered "active".
- **Vertical Spacing**: Adjust the spacing between the TX and RX elements.
- **Font Size Modifier**: Scale the text size.
- **Icon Size Modifier**: Scale the icon size.
- **Custom Font**: Override the default font with any installed font, with bold and italic options.
- **Custom Colors**: When enabled, configure TX Active, RX Active, RX/TX Inactive, Text, Font, and Background colors.
**Layout**: Choose between horizontal (single row) and vertical (2×2 grid) cell arrangement.
**Cell Assignment**: Assign what each cell displays. Duplicates are not allowed. Use empty cells to reduce the widget to just icons or just speed values.
**Icon Type**: Select the icon style for the TX/RX indicators (`arrow`, `arrow-bar`, `arrow-big`, `arrow-narrow`, `caret`, `chevron`, `chevron-compact`, `fold`).
**Activity Threshold**: Traffic below this value (B/s) is treated as inactive, and icons switch to the idle color.
**Font & Icon Size**: Scale text and icon sizes relative to the defaults.
**Custom Font**: Override the default font for speed values, with optional bold and italic.
**Custom Colors**: Override theme colors for TX active, RX active, inactive, and text individually.
**Spacing & Padding**: Adjust left/right padding, column spacing, and row spacing.
## Usage
- Add the widget to your Noctalia bar.
- Hover over the widget to open the network graph panel.
- Left-click the widget to open the network graph panel.
- Right-click the widget to access settings.
- Configure the plugin settings as required.
@@ -50,4 +42,4 @@ Access the plugin settings in Noctalia to configure the following options:
- The widget reads `SystemStatService.txSpeed` and `SystemStatService.rxSpeed`; the polling interval is determined by that service.
- The graph panel uses `SystemStatService.rxSpeedHistory` and `SystemStatService.txSpeedHistory` with `NGraph` from the Noctalia Shell.
- The panel opens on hover with a short delay and closes automatically when the cursor leaves the widget.
- Unfortunately, the update interval `SystemStatService.networkIntervalMs` is currently hardcoded to `3000` by Noctalia.
@@ -5,347 +5,397 @@ import QtQuick
import QtQuick.Layouts
ColumnLayout {
id: root
id: root
readonly property var iconNames: ["arrow", "arrow-bar", "arrow-big", "arrow-narrow", "caret", "chevron", "chevron-compact", "fold"]
property var pluginApi: null
property var pluginApi: null
property var cfg: pluginApi?.pluginSettings || ({})
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
property var cfg: pluginApi?.pluginSettings || ({})
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
// ── Options ──
property string editArrowType: cfg.arrowType ?? defaults.arrowType
property int editByteThresholdActive: cfg.byteThresholdActive ?? defaults.byteThresholdActive
property real editFontSizeModifier: cfg.fontSizeModifier ?? defaults.fontSizeModifier
property bool editHorizontalLayout: cfg.horizontalLayout ?? defaults.horizontalLayout ?? false
property real editIconSizeModifier: cfg.iconSizeModifier ?? defaults.iconSizeModifier
property bool editShowNumbers: cfg.showNumbers ?? defaults.showNumbers
property real editSpacingInbetween: cfg.spacingInbetween ?? defaults.spacingInbetween
property real editContentMargin: cfg.contentMargin ?? defaults.contentMargin ?? Style.marginS
readonly property var slotOptions: [
{
key: "txIcon",
name: pluginApi?.tr("settings.slot.txIcon")
},
{
key: "rxIcon",
name: pluginApi?.tr("settings.slot.rxIcon")
},
{
key: "txSpeed",
name: pluginApi?.tr("settings.slot.txSpeed")
},
{
key: "rxSpeed",
name: pluginApi?.tr("settings.slot.rxSpeed")
},
{
key: "none",
name: pluginApi?.tr("settings.slot.none")
}
]
property bool editUseCustomFont: cfg.useCustomFont ?? defaults.useCustomFont ?? false
property string editCustomFontFamily: cfg.customFontFamily ?? defaults.customFontFamily ?? ""
property bool editCustomFontBold: cfg.customFontBold ?? defaults.customFontBold ?? false
property bool editCustomFontItalic: cfg.customFontItalic ?? defaults.customFontItalic ?? false
readonly property var layoutOptions: [
{
key: "horizontal",
name: pluginApi?.tr("settings.layout.horizontal")
},
{
key: "vertical",
name: pluginApi?.tr("settings.layout.vertical")
}
]
property bool editUseCustomColors: cfg.useCustomColors ?? defaults.useCustomColors ?? false
property color editColorBackground: editUseCustomColors && cfg.colorBackground || Style.capsuleColor
property color editColorFont: editUseCustomColors && cfg.colorFont || Color.mOnSurface
property color editColorRx: editUseCustomColors && cfg.colorRx || Color.mPrimary
property color editColorSilent: editUseCustomColors && cfg.colorSilent || Color.mSurfaceVariant
property color editColorText: editUseCustomColors && cfg.colorText || Qt.alpha(Color.mOnSurfaceVariant, 0.3)
property color editColorTx: editUseCustomColors && cfg.colorTx || Color.mSecondary
readonly property var iconNames: ["arrow", "arrow-bar", "arrow-big", "arrow-narrow", "caret", "chevron", "chevron-compact", "fold"]
property string barPosition: Settings.data.bar.position || "top"
property string barDensity: Settings.data.bar.density || "compact"
property bool barIsSpacious: barDensity !== "mini"
property bool barIsVertical: barPosition === "left" || barPosition === "right"
// ── Edit state ──
function toIntOr(defaultValue, text) {
const v = parseInt(String(text).trim(), 10);
return isNaN(v) ? defaultValue : v;
property string editLayout: cfg.layout ?? defaults.layout
property var editSlots: cfg.slots ?? defaults.slots
property string editIconType: cfg.iconType ?? defaults.iconType
property int editByteThresholdActive: cfg.byteThresholdActive ?? defaults.byteThresholdActive
property real editFontSizeModifier: cfg.fontSizeModifier ?? defaults.fontSizeModifier
property real editIconSizeModifier: cfg.iconSizeModifier ?? defaults.iconSizeModifier
property real editPaddingLeft: cfg.paddingLeft ?? defaults.PaddingLeft
property real editPaddingRight: cfg.paddingRight ?? defaults.paddingRight
property real editColumnSpacing: cfg.columnSpacing ?? defaults.columnSpacing
property real editRowSpacing: cfg.rowSpacing ?? defaults.rowSpacing
property bool editUseCustomFont: cfg.useCustomFont ?? defaults.useCustomFonts
property string editCustomFontFamily: cfg.customFontFamily ?? defaults.customFontFamily
property bool editCustomFontBold: cfg.customFontBold ?? defaults.customFontBold
property bool editCustomFontItalic: cfg.customFontItalic ?? defaults.customFontItalic
property bool editUseCustomColors: cfg.useCustomColors ?? defaults.useCustomColors
property color editColorTx: editUseCustomColors && cfg.colorTx || Color.mSecondary
property color editColorRx: editUseCustomColors && cfg.colorRx || Color.mPrimary
property color editColorSilent: editUseCustomColors && cfg.colorSilent || Color.mSurfaceVariant
property color editColorText: editUseCustomColors && cfg.colorText || Color.mOnSurfaceVariant
// ── Helpers ──
readonly property bool isVerticalLayout: editLayout === "vertical"
function slotLabel(idx) {
if (root.isVerticalLayout) {
return ["Top Left", "Top Right", "Bottom Left", "Bottom Right"][idx];
}
return ["Left", "Center Left", "Center Right", "Right"][idx];
}
function updateSlot(index, value) {
let copy = root.editSlots.slice();
copy[index] = value;
root.editSlots = copy;
}
function toIntOr(defaultValue, text) {
const v = parseInt(String(text).trim(), 10);
return isNaN(v) ? defaultValue : v;
}
// ── Save ──
function saveSettings() {
if (!pluginApi || !pluginApi.pluginSettings) {
Logger.e("NetworkIndicator", "Cannot save: pluginApi or pluginSettings is null");
return;
}
function saveSettings() {
if (!pluginApi || !pluginApi.pluginSettings) {
Logger.e("NetworkIndicator", "Cannot save: pluginApi or pluginSettings is null");
return;
}
const s = pluginApi.pluginSettings;
pluginApi.pluginSettings.arrowType = root.editArrowType;
pluginApi.pluginSettings.byteThresholdActive = root.editByteThresholdActive;
pluginApi.pluginSettings.showNumbers = root.editShowNumbers;
pluginApi.pluginSettings.horizontalLayout = root.editHorizontalLayout;
pluginApi.pluginSettings.fontSizeModifier = root.editFontSizeModifier;
pluginApi.pluginSettings.iconSizeModifier = root.editIconSizeModifier;
pluginApi.pluginSettings.spacingInbetween = root.editSpacingInbetween;
pluginApi.pluginSettings.contentMargin = root.editContentMargin;
s.layout = root.editLayout;
s.slots = root.editSlots;
s.iconType = root.editIconType;
s.byteThresholdActive = root.editByteThresholdActive;
pluginApi.pluginSettings.useCustomFont = root.editUseCustomFont;
pluginApi.pluginSettings.customFontFamily = root.editCustomFontFamily;
pluginApi.pluginSettings.customFontBold = root.editCustomFontBold;
pluginApi.pluginSettings.customFontItalic = root.editCustomFontItalic;
s.fontSizeModifier = root.editFontSizeModifier;
s.iconSizeModifier = root.editIconSizeModifier;
pluginApi.pluginSettings.useCustomColors = root.editUseCustomColors;
if (root.editUseCustomColors) {
pluginApi.pluginSettings.colorSilent = root.editColorSilent.toString();
pluginApi.pluginSettings.colorTx = root.editColorTx.toString();
pluginApi.pluginSettings.colorRx = root.editColorRx.toString();
pluginApi.pluginSettings.colorText = root.editColorText.toString();
pluginApi.pluginSettings.colorFont = root.editColorFont.toString();
pluginApi.pluginSettings.colorBackground = root.editColorBackground.toString();
}
s.paddingLeft = root.editPaddingLeft;
s.paddingRight = root.editPaddingRight;
s.columnSpacing = root.editColumnSpacing;
s.rowSpacing = root.editRowSpacing;
pluginApi.saveSettings();
Logger.i("NetworkIndicator", "Settings saved");
s.useCustomFont = root.editUseCustomFont;
s.customFontFamily = root.editCustomFontFamily;
s.customFontBold = root.editCustomFontBold;
s.customFontItalic = root.editCustomFontItalic;
s.useCustomColors = root.editUseCustomColors;
if (root.editUseCustomColors) {
s.colorTx = root.editColorTx.toString();
s.colorRx = root.editColorRx.toString();
s.colorSilent = root.editColorSilent.toString();
s.colorText = root.editColorText.toString();
}
Layout.rightMargin: Style.marginL
spacing: Style.marginL
pluginApi.saveSettings();
Logger.i("NetworkIndicator", "Settings saved");
}
// ── Icon ──
// ── UI ──
Layout.rightMargin: Style.marginL
spacing: Style.marginL
// ── Layout ──
NComboBox {
Layout.fillWidth: true
label: pluginApi?.tr("settings.layout.label")
description: pluginApi?.tr("settings.layout.desc")
currentKey: root.editLayout
model: root.layoutOptions
onSelected: key => root.editLayout = key
}
NDivider {
Layout.fillWidth: true
}
// ── Slot assignment ──
NLabel {
label: pluginApi?.tr("settings.slots.label")
description: pluginApi?.tr("settings.slots.desc")
}
Repeater {
model: 4
NComboBox {
currentKey: root.editArrowType
description: root.pluginApi?.tr("settings.iconType.desc")
label: root.pluginApi?.tr("settings.iconType.label")
model: root.iconNames.map(n => ({
key: n,
name: n
}))
Layout.fillWidth: true
label: root.slotLabel(index)
currentKey: root.editSlots[index] ?? "none"
model: root.slotOptions
onSelected: key => root.updateSlot(index, key)
}
}
onSelected: key => root.editArrowType = key
NDivider {
Layout.fillWidth: true
}
// ── Icon style ──
NComboBox {
Layout.fillWidth: true
label: pluginApi?.tr("settings.iconType.label")
description: pluginApi?.tr("settings.iconType.desc")
currentKey: root.editIconType
model: root.iconNames.map(n => ({
key: n,
name: n
}))
onSelected: key => root.editIconType = key
}
// ── Activity threshold ──
NTextInput {
label: pluginApi?.tr("settings.byteThresholdActive.label")
description: pluginApi?.tr("settings.byteThresholdActive.desc")
placeholderText: root.editByteThresholdActive + " bytes"
text: String(root.editByteThresholdActive)
onTextChanged: root.editByteThresholdActive = root.toIntOr(0, text)
}
NDivider {
Layout.fillWidth: true
}
// ── Size modifiers ──
ColumnLayout {
Layout.fillWidth: true
spacing: Style.marginXXS
NLabel {
label: pluginApi?.tr("settings.fontSizeModifier.label")
description: pluginApi?.tr("settings.fontSizeModifier.desc")
}
NDivider {
Layout.fillWidth: true
NValueSlider {
Layout.fillWidth: true
from: 0.5
to: 1.5
stepSize: 0.05
text: root.editFontSizeModifier.toFixed(2)
value: root.editFontSizeModifier
onMoved: value => root.editFontSizeModifier = value
}
}
ColumnLayout {
Layout.fillWidth: true
spacing: Style.marginXXS
NLabel {
label: pluginApi?.tr("settings.iconSizeModifier.label")
description: pluginApi?.tr("settings.iconSizeModifier.desc")
}
// ── General ──
NValueSlider {
Layout.fillWidth: true
from: 0.5
to: 1.5
stepSize: 0.05
text: root.editIconSizeModifier.toFixed(2)
value: root.editIconSizeModifier
onMoved: value => root.editIconSizeModifier = value
}
}
NToggle {
checked: root.editShowNumbers
defaultValue: defaults.showNumbers ?? true
description: root.pluginApi?.tr("settings.showNumbers.desc")
label: root.pluginApi?.tr("settings.showNumbers.label")
visible: root.barIsSpacious && !root.barIsVertical
NDivider {
Layout.fillWidth: true
}
onToggled: c => root.editShowNumbers = c
// ── Content padding ──
NTextInput {
label: pluginApi?.tr("settings.rowSpacing.label")
description: pluginApi?.tr("settings.rowSpacing.desc")
placeholderText: root.editRowSpacing + " px"
text: String(root.editRowSpacing)
onTextChanged: root.editRowSpacing = root.toIntOr(0, text)
}
NTextInput {
label: pluginApi?.tr("settings.columnSpacing.label")
description: pluginApi?.tr("settings.columnSpacing.desc")
placeholderText: root.editColumnSpacing + " px"
text: String(root.editColumnSpacing)
onTextChanged: root.editColumnSpacing = root.toIntOr(0, text)
}
NTextInput {
label: pluginApi?.tr("settings.paddingLeft.label")
description: pluginApi?.tr("settings.paddingLeft.desc")
placeholderText: root.editPaddingLeft + " px"
text: String(root.editPaddingLeft)
onTextChanged: root.editPaddingLeft = root.toIntOr(0, text)
}
NTextInput {
label: pluginApi?.tr("settings.paddingRight.label")
description: pluginApi?.tr("settings.paddingRight.desc")
placeholderText: root.editPaddingRight + " px"
text: String(root.editPaddingRight)
onTextChanged: root.editPaddingRight = root.toIntOr(0, text)
}
NDivider {
Layout.fillWidth: true
}
// ── Custom Font ──
NToggle {
checked: root.editUseCustomFont
defaultValue: defaults.useCustomFont ?? false
description: pluginApi?.tr("settings.useCustomFont.desc")
label: pluginApi?.tr("settings.useCustomFont.label")
onToggled: c => root.editUseCustomFont = c
}
ColumnLayout {
visible: root.editUseCustomFont
Layout.fillWidth: true
spacing: Style.marginL
NSearchableComboBox {
label: pluginApi?.tr("settings.customFontFamily.label")
description: pluginApi?.tr("settings.customFontFamily.desc")
model: FontService.availableFonts
currentKey: root.editCustomFontFamily || Qt.application.font.family
placeholder: pluginApi?.tr("settings.customFontFamily.placeholder")
searchPlaceholder: pluginApi?.tr("settings.customFontFamily.searchPlaceholder")
popupHeight: 420
onSelected: key => {
root.editCustomFontFamily = (key === Qt.application.font.family) ? "" : key;
}
}
NToggle {
checked: root.editHorizontalLayout
defaultValue: defaults.horizontalLayout ?? false
description: root.pluginApi?.tr("settings.horizontalLayout.desc")
label: root.pluginApi?.tr("settings.horizontalLayout.label")
visible: root.barIsSpacious && !root.barIsVertical
onToggled: c => root.editHorizontalLayout = c
checked: root.editCustomFontBold
defaultValue: defaults.customFontBold ?? false
description: pluginApi?.tr("settings.customFontBold.desc")
label: pluginApi?.tr("settings.customFontBold.label")
onToggled: c => root.editCustomFontBold = c
}
NDivider {
Layout.fillWidth: true
}
// ── Layout ──
ColumnLayout {
Layout.fillWidth: true
spacing: Style.marginXXS
NLabel {
description: root.pluginApi?.tr("settings.contentMargin.desc")
label: root.pluginApi?.tr("settings.contentMargin.label")
}
NValueSlider {
Layout.fillWidth: true
from: 0
stepSize: 1
text: root.editContentMargin + "px"
to: 20
value: root.editContentMargin
onMoved: value => root.editContentMargin = value
}
}
NTextInput {
label: pluginApi?.tr("settings.byteThresholdActive.label")
description: pluginApi?.tr("settings.byteThresholdActive.desc")
placeholderText: root.editByteThresholdActive + " bytes"
text: String(root.editByteThresholdActive)
onTextChanged: root.editByteThresholdActive = root.toIntOr(0, text)
}
ColumnLayout {
Layout.fillWidth: true
spacing: Style.marginXXS
NLabel {
description: root.pluginApi?.tr("settings.spacingInbetween.desc")
label: root.pluginApi?.tr("settings.spacingInbetween.label")
}
NValueSlider {
Layout.fillWidth: true
from: -5
stepSize: 1
text: root.editSpacingInbetween.toFixed(0)
to: 5
value: root.editSpacingInbetween
onMoved: value => root.editSpacingInbetween = value
}
}
ColumnLayout {
Layout.fillWidth: true
spacing: Style.marginXXS
NLabel {
description: root.pluginApi?.tr("settings.fontSizeModifier.desc")
label: root.pluginApi?.tr("settings.fontSizeModifier.label")
}
NValueSlider {
Layout.fillWidth: true
from: 0.5
stepSize: 0.05
text: root.editFontSizeModifier.toFixed(2)
to: 1.5
value: root.editFontSizeModifier
onMoved: value => root.editFontSizeModifier = value
}
}
ColumnLayout {
Layout.fillWidth: true
spacing: Style.marginXXS
NLabel {
description: root.pluginApi?.tr("settings.iconSizeModifier.desc")
label: root.pluginApi?.tr("settings.iconSizeModifier.label")
}
NValueSlider {
Layout.fillWidth: true
from: 0.5
stepSize: 0.05
text: root.editIconSizeModifier.toFixed(2)
to: 1.5
value: root.editIconSizeModifier
onMoved: value => root.editIconSizeModifier = value
}
}
NDivider {
Layout.fillWidth: true
}
// ── Font ──
NToggle {
checked: root.editUseCustomFont
defaultValue: defaults.useCustomFont ?? false
description: root.pluginApi?.tr("settings.useCustomFont.desc")
label: root.pluginApi?.tr("settings.useCustomFont.label")
checked: root.editCustomFontItalic
defaultValue: defaults.customFontItalic ?? false
description: pluginApi?.tr("settings.customFontItalic.desc")
label: pluginApi?.tr("settings.customFontItalic.label")
onToggled: c => root.editCustomFontItalic = c
}
}
onToggled: c => root.editUseCustomFont = c
// ── Custom Colors ──
NToggle {
checked: root.editUseCustomColors
defaultValue: defaults.useCustomColors ?? false
description: pluginApi?.tr("settings.useCustomColors.desc")
label: pluginApi?.tr("settings.useCustomColors.label")
onToggled: c => root.editUseCustomColors = c
}
ColumnLayout {
visible: root.editUseCustomColors
RowLayout {
NLabel {
Layout.alignment: Qt.AlignTop
label: pluginApi?.tr("settings.colorTx.label")
description: pluginApi?.tr("settings.colorTx.desc")
}
NColorPicker {
selectedColor: root.editColorTx
onColorSelected: color => root.editColorTx = color
}
}
ColumnLayout {
visible: root.editUseCustomFont
Layout.fillWidth: true
spacing: Style.marginL
NSearchableComboBox {
label: root.pluginApi?.tr("settings.customFontFamily.label")
description: root.pluginApi?.tr("settings.customFontFamily.desc")
model: FontService.availableFonts
currentKey: root.editCustomFontFamily || Qt.application.font.family
placeholder: root.pluginApi?.tr("settings.customFontFamily.placeholder")
searchPlaceholder: root.pluginApi?.tr("settings.customFontFamily.searchPlaceholder")
popupHeight: 420
onSelected: key => {
root.editCustomFontFamily = (key === Qt.application.font.family) ? "" : key;
}
}
NToggle {
checked: root.editCustomFontBold
defaultValue: defaults.customFontBold ?? false
description: root.pluginApi?.tr("settings.customFontBold.desc")
label: root.pluginApi?.tr("settings.customFontBold.label")
onToggled: c => root.editCustomFontBold = c
}
NToggle {
checked: root.editCustomFontItalic
defaultValue: defaults.customFontItalic ?? false
description: root.pluginApi?.tr("settings.customFontItalic.desc")
label: root.pluginApi?.tr("settings.customFontItalic.label")
onToggled: c => root.editCustomFontItalic = c
}
RowLayout {
NLabel {
Layout.alignment: Qt.AlignTop
label: pluginApi?.tr("settings.colorRx.label")
description: pluginApi?.tr("settings.colorRx.desc")
}
NColorPicker {
selectedColor: root.editColorRx
onColorSelected: color => root.editColorRx = color
}
}
NDivider {
Layout.fillWidth: true
RowLayout {
NLabel {
Layout.alignment: Qt.AlignTop
label: pluginApi?.tr("settings.colorSilent.label")
description: pluginApi?.tr("settings.colorSilent.desc")
}
NColorPicker {
selectedColor: root.editColorSilent
onColorSelected: color => root.editColorSilent = color
}
}
// ── Colors ──
NToggle {
checked: root.editUseCustomColors
defaultValue: defaults.useCustomColors ?? false
description: root.pluginApi?.tr("settings.useCustomColors.desc")
label: root.pluginApi?.tr("settings.useCustomColors.label")
onToggled: c => root.editUseCustomColors = c
}
ColumnLayout {
visible: root.editUseCustomColors
RowLayout {
NLabel {
Layout.alignment: Qt.AlignTop
description: root.pluginApi?.tr("settings.colorTx.desc")
label: root.pluginApi?.tr("settings.colorTx.label")
}
NColorPicker {
selectedColor: root.editColorTx
onColorSelected: color => root.editColorTx = color
}
}
RowLayout {
NLabel {
Layout.alignment: Qt.AlignTop
description: root.pluginApi?.tr("settings.colorRx.desc")
label: root.pluginApi?.tr("settings.colorRx.label")
}
NColorPicker {
selectedColor: root.editColorRx
onColorSelected: color => root.editColorRx = color
}
}
RowLayout {
NLabel {
Layout.alignment: Qt.AlignTop
description: root.pluginApi?.tr("settings.colorSilent.desc")
label: root.pluginApi?.tr("settings.colorSilent.label")
}
NColorPicker {
selectedColor: root.editColorSilent
onColorSelected: color => root.editColorSilent = color
}
}
RowLayout {
NLabel {
Layout.alignment: Qt.AlignTop
description: root.pluginApi?.tr("settings.colorText.desc")
label: root.pluginApi?.tr("settings.colorText.label")
}
NColorPicker {
selectedColor: root.editColorText
onColorSelected: color => root.editColorText = color
}
}
RowLayout {
NLabel {
Layout.alignment: Qt.AlignTop
label: pluginApi?.tr("settings.colorText.label")
description: pluginApi?.tr("settings.colorText.desc")
}
NColorPicker {
selectedColor: root.editColorText
onColorSelected: color => root.editColorText = color
}
}
}
}
@@ -1,35 +1,51 @@
{
"actions": {
"widget-settings": "Widget-Einstellungen"
"widget-settings": "Widget-Einstellungen",
"toggle-panel": "Monitor umschalten"
},
"panel": {
"title": "Netzwerkaktivität",
"close": "Schließen",
"download": "Download",
"upload": "Upload"
},
"settings": {
"layout": {
"label": "Layout",
"desc": "Zellen in einer Reihe (horizontal) oder in einem 2×2-Raster (vertikal) anordnen.",
"horizontal": "Horizontal",
"vertical": "Vertikal"
},
"slots": {
"label": "Zellenbelegung",
"desc": "Wähle, was jede Zelle anzeigt. Keine Duplikate möglich. Z.\u00a0B. leere Zellen verwenden, um nur Symbole anzuzeigen."
},
"slot": {
"txIcon": "TX-Symbol",
"rxIcon": "RX-Symbol",
"txSpeed": "TX-Geschwindigkeit",
"rxSpeed": "RX-Geschwindigkeit",
"none": "Leer"
},
"iconType": {
"desc": "Symbolstil für die TX/RX-Anzeigen auswählen.",
"label": "Symboltyp"
},
"byteThresholdActive": {
"desc": "Aktivitätsschwellwert in Byte pro Sekunde (B/s) festlegen.",
"label": "Aktivitätsschwellwert anzeigen"
"desc": "Datenverkehr unter diesem Wert (B/s) wird als inaktiv angezeigt.",
"label": "Aktivitätsschwellwert"
},
"colorRx": {
"desc": "Symbolfarbe für Download (RX), wenn der Schwellwert überschritten ist.",
"label": "RX aktiv"
"fontSizeModifier": {
"desc": "Schriftgröße relativ zum Standard skalieren.",
"label": "Schriftgröße"
},
"colorSilent": {
"desc": "Symbolfarbe, wenn der Datenverkehr unter dem Schwellwert liegt.",
"label": "RX/TX inaktiv"
"iconSizeModifier": {
"desc": "Symbolgröße relativ zum Standard skalieren.",
"label": "Symbolgröße"
},
"colorText": {
"desc": "Textfarbe für RX- und TX-Werte festlegen.",
"label": "Text"
},
"colorTx": {
"desc": "Symbolfarbe für Upload (TX), wenn der Schwellwert überschritten ist.",
"label": "TX aktiv"
},
"contentMargin": {
"desc": "Horizontaler Abstand auf beiden Seiten des Widget-Inhalts.",
"label": "Inhaltsrand"
},
"customFontBold": {
"desc": "Geschwindigkeitswerte fett darstellen.",
"label": "Fett"
"useCustomFont": {
"desc": "Standardschriftart für Geschwindigkeitswerte überschreiben.",
"label": "Eigene Schriftart"
},
"customFontFamily": {
"desc": "Schriftart für die Geschwindigkeitswerte wählen.",
@@ -37,41 +53,49 @@
"placeholder": "Schriftart auswählen",
"searchPlaceholder": "Schriften suchen…"
},
"customFontBold": {
"desc": "Geschwindigkeitswerte fett darstellen.",
"label": "Fett"
},
"customFontItalic": {
"desc": "Geschwindigkeitswerte kursiv darstellen.",
"label": "Kursiv"
},
"fontSizeModifier": {
"desc": "Schriftgröße relativ zum Standard skalieren.",
"label": "Schriftgrößen-Faktor"
},
"horizontalLayout": {
"desc": "TX- und RX-Werte nebeneinander statt übereinander anzeigen.",
"label": "Horizontales Layout"
},
"iconSizeModifier": {
"desc": "Symbolgröße relativ zum Standard skalieren.",
"label": "Symbolgrößen-Faktor"
},
"iconType": {
"desc": "Symbolstil für die TX/RX-Anzeigen auswählen.",
"label": "Symboltyp"
},
"showNumbers": {
"desc": "Aktuelle RX/TX-Geschwindigkeiten als Zahlen anzeigen.",
"label": "Werte anzeigen"
},
"spacingInbetween": {
"desc": "Den Abstand zwischen den RX/TX-Elementen anpassen.",
"label": "Vertikaler Abstand"
},
"useCustomColors": {
"desc": "Eigene Farben statt der Standard-Themefarben verwenden.",
"label": "Eigene Farben"
},
"useCustomFont": {
"desc": "Standardschriftart für Geschwindigkeitswerte überschreiben.",
"label": "Eigene Schriftart"
"colorTx": {
"desc": "Symbolfarbe für Upload (TX), wenn der Schwellwert überschritten ist.",
"label": "TX aktiv"
},
"colorRx": {
"desc": "Symbolfarbe für Download (RX), wenn der Schwellwert überschritten ist.",
"label": "RX aktiv"
},
"colorSilent": {
"desc": "Symbolfarbe, wenn der Datenverkehr unter dem Schwellwert liegt.",
"label": "Inaktiv"
},
"colorText": {
"desc": "Textfarbe für Geschwindigkeitswerte.",
"label": "Text"
},
"paddingLeft": {
"label": "Abstand links",
"desc": "Innenabstand des Inhalts auf der linken Seite."
},
"paddingRight": {
"label": "Abstand rechts",
"desc": "Innenabstand des Inhalts auf der rechten Seite."
},
"columnSpacing": {
"label": "Spaltenabstand",
"desc": "Abstand zwischen Spalten im Rasterlayout."
},
"rowSpacing": {
"label": "Zeilenabstand",
"desc": "Abstand zwischen Zeilen im Rasterlayout (hat keine Wirkung im horizontalen Layout)."
}
}
}
@@ -1,77 +1,101 @@
{
"actions": {
"widget-settings": "Widget settings"
"widget-settings": "Widget settings",
"toggle-panel": "Toggle Monitor"
},
"panel": {
"title": "Network Activity",
"close": "Close",
"download": "Download",
"upload": "Upload"
},
"settings": {
"layout": {
"label": "Layout",
"desc": "Arrange cells in a row (horizontal) or a 2×2 grid (vertical).",
"horizontal": "Horizontal",
"vertical": "Vertical"
},
"slots": {
"label": "Cell Assignment",
"desc": "Choose what each cell displays. No duplicates possible. E.g., use empty slots to only show icons."
},
"slot": {
"txIcon": "TX Icon",
"rxIcon": "RX Icon",
"txSpeed": "TX Speed",
"rxSpeed": "RX Speed",
"none": "Empty"
},
"iconType": {
"label": "Icon Type",
"desc": "Choose the icon style used for the TX/RX indicators."
},
"byteThresholdActive": {
"desc": "Set the activity threshold in bytes per second (B/s).",
"label": "Show Active Threshold"
"label": "Activity Threshold",
"desc": "Traffic below this value (B/s) is shown as inactive."
},
"colorRx": {
"desc": "Set the download (RX) icon color when above the threshold.",
"label": "RX Active"
"fontSizeModifier": {
"label": "Font Size",
"desc": "Scale the text size relative to the default."
},
"colorSilent": {
"desc": "Set the icon color when traffic is below the threshold.",
"label": "RX/TX Inactive"
"iconSizeModifier": {
"label": "Icon Size",
"desc": "Scale the icon size relative to the default."
},
"colorText": {
"desc": "Set the text color used for both RX and TX values.",
"label": "Text"
},
"colorTx": {
"desc": "Set the upload (TX) icon color when above the threshold.",
"label": "TX Active"
},
"contentMargin": {
"desc": "Horizontal padding on both sides of the widget content.",
"label": "Content Margin"
},
"customFontBold": {
"desc": "Render speed values in bold.",
"label": "Bold"
"useCustomFont": {
"label": "Custom Font",
"desc": "Override the default font for speed values."
},
"customFontFamily": {
"desc": "Choose a font for the speed values.",
"label": "Font",
"desc": "Choose a font for the speed values.",
"placeholder": "Select a font",
"searchPlaceholder": "Search fonts…"
},
"customFontBold": {
"label": "Bold",
"desc": "Render speed values in bold."
},
"customFontItalic": {
"desc": "Render speed values in italic.",
"label": "Italic"
},
"fontSizeModifier": {
"desc": "Scale the text size relative to the default.",
"label": "Font Size Modifier"
},
"horizontalLayout": {
"desc": "Place TX and RX values side by side instead of stacked.",
"label": "Horizontal Layout"
},
"iconSizeModifier": {
"desc": "Scale the icon size relative to the default.",
"label": "Icon Size Modifier"
},
"iconType": {
"desc": "Choose the icon style used for the TX/RX indicators.",
"label": "Icon Type"
},
"showNumbers": {
"desc": "Display the current RX/TX speeds as numbers.",
"label": "Show Values"
},
"spacingInbetween": {
"desc": "Adjust the spacing between RX/TX elements.",
"label": "Vertical Spacing"
"label": "Italic",
"desc": "Render speed values in italic."
},
"useCustomColors": {
"desc": "Enable custom colors instead of theme defaults.",
"label": "Custom Colors"
"label": "Custom Colors",
"desc": "Enable custom colors instead of theme defaults."
},
"useCustomFont": {
"desc": "Override the default font for speed values.",
"label": "Custom Font"
"colorTx": {
"label": "TX Active",
"desc": "Upload icon color when above the threshold."
},
"colorRx": {
"label": "RX Active",
"desc": "Download icon color when above the threshold."
},
"colorSilent": {
"label": "Inactive",
"desc": "Icon color when traffic is below the threshold."
},
"colorText": {
"label": "Text",
"desc": "Text color for speed values."
},
"paddingLeft": {
"label": "Padding Left",
"desc": "Padding of the content on the left."
},
"paddingRight": {
"label": "Padding Right",
"desc": "Padding of the content on the right."
},
"columnSpacing": {
"label": "Column Spacing",
"desc": "Spacing between columns in grid layout."
},
"rowSpacing": {
"label": "Row Spacing",
"desc": "Spacing between rows in grid layout (has no effect in horizontal layout)."
}
}
}
@@ -1,35 +1,51 @@
{
"actions": {
"widget-settings": "Configuración del widget"
"widget-settings": "Configuración del widget",
"toggle-panel": "Alternar Monitor"
},
"panel": {
"title": "Actividad de Red",
"close": "Cerrar",
"download": "Descarga",
"upload": "Subida"
},
"settings": {
"layout": {
"label": "Diseño",
"desc": "Disponer las celdas en una fila (horizontal) o en una cuadrícula 2×2 (vertical).",
"horizontal": "Horizontal",
"vertical": "Vertical"
},
"slots": {
"label": "Asignación de celdas",
"desc": "Elige qué muestra cada celda. No se permiten duplicados. P. ej., usa celdas vacías para mostrar solo iconos."
},
"slot": {
"txIcon": "Icono TX",
"rxIcon": "Icono RX",
"txSpeed": "Velocidad TX",
"rxSpeed": "Velocidad RX",
"none": "Vacío"
},
"iconType": {
"desc": "Elige el estilo de icono utilizado para los indicadores TX/RX.",
"label": "Tipo de icono"
},
"byteThresholdActive": {
"desc": "Establecer el umbral de actividad en bytes por segundo (B/s).",
"label": "Mostrar umbral activo"
"desc": "El tráfico por debajo de este valor (B/s) se muestra como inactivo.",
"label": "Umbral de actividad"
},
"colorRx": {
"desc": "Establecer el color del icono de descarga (RX) cuando esté por encima del umbral.",
"label": "RX Activo"
"fontSizeModifier": {
"desc": "Escalar el tamaño del texto en relación con el predeterminado.",
"label": "Tamaño de fuente"
},
"colorSilent": {
"desc": "Establecer el color del icono cuando el tráfico esté por debajo del umbral.",
"label": "RX/TX Inactivo"
"iconSizeModifier": {
"desc": "Escalar el tamaño del icono en relación con el tamaño predeterminado.",
"label": "Tamaño del icono"
},
"colorText": {
"desc": "Establecer el color del texto utilizado tanto para los valores RX como TX.",
"label": "Texto"
},
"colorTx": {
"desc": "Establecer el color del icono de carga (TX) cuando esté por encima del umbral.",
"label": "TX Activo"
},
"contentMargin": {
"desc": "Relleno horizontal en ambos lados del contenido del widget.",
"label": "Margen del contenido"
},
"customFontBold": {
"desc": "Mostrar los valores de velocidad en negrita.",
"label": "Negrita"
"useCustomFont": {
"desc": "Reemplazar la fuente predeterminada para los valores de velocidad.",
"label": "Fuente personalizada"
},
"customFontFamily": {
"desc": "Elegir una fuente para los valores de velocidad.",
@@ -37,41 +53,49 @@
"placeholder": "Seleccionar fuente",
"searchPlaceholder": "Buscar fuentes…"
},
"customFontBold": {
"desc": "Mostrar los valores de velocidad en negrita.",
"label": "Negrita"
},
"customFontItalic": {
"desc": "Mostrar los valores de velocidad en cursiva.",
"label": "Cursiva"
},
"fontSizeModifier": {
"desc": "Escalar el tamaño del texto en relación con el predeterminado.",
"label": "Modificador de tamaño de fuente"
},
"horizontalLayout": {
"desc": "Colocar los valores TX y RX uno al lado del otro en lugar de apilados.",
"label": "Diseño horizontal"
},
"iconSizeModifier": {
"desc": "Escalar el tamaño del icono en relación con el tamaño predeterminado.",
"label": "Modificador del tamaño del icono"
},
"iconType": {
"desc": "Elige el estilo de icono utilizado para los indicadores TX/RX.",
"label": "Tipo de icono"
},
"showNumbers": {
"desc": "Mostrar las velocidades actuales de RX/TX como números.",
"label": "Mostrar valores"
},
"spacingInbetween": {
"desc": "Ajustar el espaciado entre los elementos RX/TX.",
"label": "Espaciado vertical"
},
"useCustomColors": {
"desc": "Activar colores personalizados en lugar de los predeterminados del tema.",
"label": "Colores personalizados"
},
"useCustomFont": {
"desc": "Reemplazar la fuente predeterminada para los valores de velocidad.",
"label": "Fuente personalizada"
"colorTx": {
"desc": "Color del icono de subida (TX) cuando esté por encima del umbral.",
"label": "TX Activo"
},
"colorRx": {
"desc": "Color del icono de descarga (RX) cuando esté por encima del umbral.",
"label": "RX Activo"
},
"colorSilent": {
"desc": "Color del icono cuando el tráfico esté por debajo del umbral.",
"label": "Inactivo"
},
"colorText": {
"desc": "Color del texto para los valores de velocidad.",
"label": "Texto"
},
"paddingLeft": {
"label": "Relleno izquierdo",
"desc": "Relleno del contenido a la izquierda."
},
"paddingRight": {
"label": "Relleno derecho",
"desc": "Relleno del contenido a la derecha."
},
"columnSpacing": {
"label": "Espaciado de columnas",
"desc": "Espaciado entre columnas en el diseño de cuadrícula."
},
"rowSpacing": {
"label": "Espaciado de filas",
"desc": "Espaciado entre filas en el diseño de cuadrícula (sin efecto en el diseño horizontal)."
}
}
}
@@ -1,35 +1,51 @@
{
"actions": {
"widget-settings": "Paramètres du widget"
"widget-settings": "Paramètres du widget",
"toggle-panel": "Basculer le moniteur"
},
"panel": {
"title": "Activité réseau",
"close": "Fermer",
"download": "Téléchargement",
"upload": "Téléversement"
},
"settings": {
"layout": {
"label": "Disposition",
"desc": "Disposer les cellules en ligne (horizontal) ou en grille 2×2 (vertical).",
"horizontal": "Horizontal",
"vertical": "Vertical"
},
"slots": {
"label": "Affectation des cellules",
"desc": "Choisir ce que chaque cellule affiche. Pas de doublons possibles. Ex. : utiliser des cellules vides pour n'afficher que les icônes."
},
"slot": {
"txIcon": "Icône TX",
"rxIcon": "Icône RX",
"txSpeed": "Vitesse TX",
"rxSpeed": "Vitesse RX",
"none": "Vide"
},
"iconType": {
"desc": "Choisissez le style d'icône utilisé pour les indicateurs TX/RX.",
"label": "Type d'icône"
},
"byteThresholdActive": {
"desc": "Définir le seuil d'activité en octets par seconde (o/s).",
"label": "Afficher le seuil actif"
"desc": "Le trafic en dessous de cette valeur (o/s) est affiché comme inactif.",
"label": "Seuil d'activité"
},
"colorRx": {
"desc": "Définir la couleur de l'icône de téléchargement (RX) lorsque la valeur est supérieure au seuil.",
"label": "RX Active"
"fontSizeModifier": {
"desc": "Mettre à l'échelle la taille du texte par rapport à la taille par défaut.",
"label": "Taille de police"
},
"colorSilent": {
"desc": "Définir la couleur de l'icône lorsque le trafic est inférieur au seuil.",
"label": "RX/TX Inactif"
"iconSizeModifier": {
"desc": "Ajuster la taille de l'icône par rapport à la taille par défaut.",
"label": "Taille d'icône"
},
"colorText": {
"desc": "Définir la couleur du texte utilisée pour les valeurs RX et TX.",
"label": "Texte"
},
"colorTx": {
"desc": "Définir la couleur de l'icône de téléversement (TX) lorsque le seuil est dépassé.",
"label": "TX Active"
},
"contentMargin": {
"desc": "Marge horizontale des deux côtés du contenu du widget.",
"label": "Marge du contenu"
},
"customFontBold": {
"desc": "Afficher les valeurs de vitesse en gras.",
"label": "Gras"
"useCustomFont": {
"desc": "Remplacer la police par défaut pour les valeurs de vitesse.",
"label": "Police personnalisée"
},
"customFontFamily": {
"desc": "Choisir une police pour les valeurs de vitesse.",
@@ -37,41 +53,49 @@
"placeholder": "Sélectionner une police",
"searchPlaceholder": "Rechercher des polices…"
},
"customFontBold": {
"desc": "Afficher les valeurs de vitesse en gras.",
"label": "Gras"
},
"customFontItalic": {
"desc": "Afficher les valeurs de vitesse en italique.",
"label": "Italique"
},
"fontSizeModifier": {
"desc": "Mettre à l'échelle la taille du texte par rapport à la taille par défaut.",
"label": "Modificateur de taille de police"
},
"horizontalLayout": {
"desc": "Afficher les valeurs TX et RX côte à côte au lieu de les empiler.",
"label": "Disposition horizontale"
},
"iconSizeModifier": {
"desc": "Ajuster la taille de l'icône par rapport à la taille par défaut.",
"label": "Modificateur de taille d'icône"
},
"iconType": {
"desc": "Choisissez le style d'icône utilisé pour les indicateurs TX/RX.",
"label": "Type d'icône"
},
"showNumbers": {
"desc": "Afficher les vitesses RX/TX actuelles sous forme de nombres.",
"label": "Afficher les valeurs"
},
"spacingInbetween": {
"desc": "Ajuster l'espacement entre les éléments RX/TX.",
"label": "Espacement vertical"
},
"useCustomColors": {
"desc": "Activer les couleurs personnalisées au lieu des couleurs par défaut du thème.",
"label": "Couleurs personnalisées"
},
"useCustomFont": {
"desc": "Remplacer la police par défaut pour les valeurs de vitesse.",
"label": "Police personnalisée"
"colorTx": {
"desc": "Couleur de l'icône de téléversement (TX) lorsque le seuil est dépassé.",
"label": "TX Active"
},
"colorRx": {
"desc": "Couleur de l'icône de téléchargement (RX) lorsque la valeur est supérieure au seuil.",
"label": "RX Active"
},
"colorSilent": {
"desc": "Couleur de l'icône lorsque le trafic est inférieur au seuil.",
"label": "Inactif"
},
"colorText": {
"desc": "Couleur du texte pour les valeurs de vitesse.",
"label": "Texte"
},
"paddingLeft": {
"label": "Marge intérieure gauche",
"desc": "Marge intérieure du contenu à gauche."
},
"paddingRight": {
"label": "Marge intérieure droite",
"desc": "Marge intérieure du contenu à droite."
},
"columnSpacing": {
"label": "Espacement des colonnes",
"desc": "Espacement entre les colonnes dans la disposition en grille."
},
"rowSpacing": {
"label": "Espacement des lignes",
"desc": "Espacement entre les lignes dans la disposition en grille (sans effet en disposition horizontale)."
}
}
}
@@ -1,35 +1,51 @@
{
"actions": {
"widget-settings": "Widget beállítások"
"widget-settings": "Widget beállítások",
"toggle-panel": "Monitor váltása"
},
"panel": {
"title": "Hálózati aktivitás",
"close": "Bezárás",
"download": "Letöltés",
"upload": "Feltöltés"
},
"settings": {
"layout": {
"label": "Elrendezés",
"desc": "Cellák elrendezése sorban (vízszintes) vagy 2×2-es rácsban (függőleges).",
"horizontal": "Vízszintes",
"vertical": "Függőleges"
},
"slots": {
"label": "Cellák hozzárendelése",
"desc": "Válaszd ki, mit jelenítsen meg az egyes cellák. Duplikátumok nem lehetségesek. Pl. üres cellákkal csak ikonok jeleníthetők meg."
},
"slot": {
"txIcon": "TX ikon",
"rxIcon": "RX ikon",
"txSpeed": "TX sebesség",
"rxSpeed": "RX sebesség",
"none": "Üres"
},
"iconType": {
"desc": "Válaszd ki az TX/RX indikátorokhoz használt ikonkészletet.",
"label": "Ikon típusa"
},
"byteThresholdActive": {
"desc": "Állítsa be az aktivitási küszöbértéket bájt/másodpercben (B/s).",
"label": "Aktív küszöbérték mutatása"
"desc": "Az e küszöbérték alatti forgalom (B/s) inaktívként jelenik meg.",
"label": "Aktivitási küszöbérték"
},
"colorRx": {
"desc": "Állítsa be a letöltés (RX) ikon színét, ha az meghaladja a küszöbértéket.",
"label": "RX Aktív"
"fontSizeModifier": {
"desc": "A szövegméret skálázása az alapértelmezett mérethez képest.",
"label": "Betűméret"
},
"colorSilent": {
"desc": "Állítsa be az ikon színét, ha a forgalom a küszöbérték alatt van.",
"label": "RX/TX inaktív"
"iconSizeModifier": {
"desc": "Az ikonméret skálázása az alapértelmezett mérethez képest.",
"label": "Ikonméret"
},
"colorText": {
"desc": "Állítsa be az RX és TX értékekhez használt szövegszínt.",
"label": "Szöveg"
},
"colorTx": {
"desc": "Állítsa be a feltöltés (TX) ikon színét, ha a küszöbérték felett van.",
"label": "TX Aktív"
},
"contentMargin": {
"desc": "Vízszetes padding a widget tartalma mindkét oldalán.",
"label": "Tartalom margó"
},
"customFontBold": {
"desc": "Sebességértékek vastag betűvel.",
"label": "Vastag"
"useCustomFont": {
"desc": "Az alapértelmezett betűtípus felülírása a sebességértékekhez.",
"label": "Egyéni betűtípus"
},
"customFontFamily": {
"desc": "Válasszon betűtípust a sebességértékekhez.",
@@ -37,41 +53,49 @@
"placeholder": "Betűtípus kiválasztása",
"searchPlaceholder": "Betűtípusok keresése…"
},
"customFontBold": {
"desc": "Sebességértékek vastag betűvel.",
"label": "Vastag"
},
"customFontItalic": {
"desc": "Sebességértékek dőlt betűvel.",
"label": "Dőlt"
},
"fontSizeModifier": {
"desc": "A szövegméret skálázása az alapértelmezett mérethez képest.",
"label": "Betűméret módosító"
},
"horizontalLayout": {
"desc": "TX és RX értékek egymás mellett, nem egymás alatt.",
"label": "Vízszintes elrendezés"
},
"iconSizeModifier": {
"desc": "Az ikonméret skálázása az alapértelmezett mérethez képest.",
"label": "Ikonméret módosító"
},
"iconType": {
"desc": "Válaszd ki az TX/RX indikátorokhoz használt ikonkészletet.",
"label": "Ikon típusa"
},
"showNumbers": {
"desc": "A pillanatnyi RX/TX sebességek megjelenítése számként.",
"label": "Értékek megjelenítése"
},
"spacingInbetween": {
"desc": "Állítsa be a RX/TX elemek közötti távolságot.",
"label": "Függőleges térköz"
},
"useCustomColors": {
"desc": "Egyéni színek engedélyezése a téma alapértelmezett színei helyett.",
"label": "Egyéni színek"
},
"useCustomFont": {
"desc": "Az alapértelmezett betűtípus felülírása a sebességértékekhez.",
"label": "Egyéni betűtípus"
"colorTx": {
"desc": "Feltöltés (TX) ikon színe, ha a küszöbérték felett van.",
"label": "TX Aktív"
},
"colorRx": {
"desc": "Letöltés (RX) ikon színe, ha az meghaladja a küszöbértéket.",
"label": "RX Aktív"
},
"colorSilent": {
"desc": "Ikon színe, ha a forgalom a küszöbérték alatt van.",
"label": "Inaktív"
},
"colorText": {
"desc": "Szövegszín a sebességértékekhez.",
"label": "Szöveg"
},
"paddingLeft": {
"label": "Bal oldali kitöltés",
"desc": "A tartalom kitöltése a bal oldalon."
},
"paddingRight": {
"label": "Jobb oldali kitöltés",
"desc": "A tartalom kitöltése a jobb oldalon."
},
"columnSpacing": {
"label": "Oszlopköz",
"desc": "Oszlopok közötti távolság a rácsos elrendezésben."
},
"rowSpacing": {
"label": "Sorköz",
"desc": "Sorok közötti távolság a rácsos elrendezésben (nincs hatása vízszintes elrendezésben)."
}
}
}
@@ -1,35 +1,51 @@
{
"actions": {
"widget-settings": "Impostazioni widget"
"widget-settings": "Impostazioni widget",
"toggle-panel": "Mostra/nascondi Monitor"
},
"panel": {
"title": "Attività di rete",
"close": "Chiudi",
"download": "Download",
"upload": "Upload"
},
"settings": {
"layout": {
"label": "Layout",
"desc": "Disporre le celle in una riga (orizzontale) o in una griglia 2×2 (verticale).",
"horizontal": "Orizzontale",
"vertical": "Verticale"
},
"slots": {
"label": "Assegnazione celle",
"desc": "Scegli cosa mostra ogni cella. Non sono possibili duplicati. Es.: usa celle vuote per mostrare solo le icone."
},
"slot": {
"txIcon": "Icona TX",
"rxIcon": "Icona RX",
"txSpeed": "Velocità TX",
"rxSpeed": "Velocità RX",
"none": "Vuoto"
},
"iconType": {
"desc": "Scegli lo stile dell'icona usata per gli indicatori TX/RX.",
"label": "Tipo icona"
},
"byteThresholdActive": {
"desc": "Imposta la soglia di attività in byte al secondo (B/s).",
"label": "Mostra soglia attiva"
"desc": "Il traffico sotto questo valore (B/s) viene mostrato come inattivo.",
"label": "Soglia di attività"
},
"colorRx": {
"desc": "Imposta il colore dell'icona di download (RX) quando sopra la soglia.",
"label": "RX Attivo"
"fontSizeModifier": {
"desc": "Scala la dimensione del testo rispetto al valore predefinito.",
"label": "Dimensione font"
},
"colorSilent": {
"desc": "Imposta il colore dell'icona quando il traffico è sotto la soglia.",
"label": "RX/TX Inattivo"
"iconSizeModifier": {
"desc": "Scala la dimensione dell'icona rispetto al valore predefinito.",
"label": "Dimensione icona"
},
"colorText": {
"desc": "Imposta il colore del testo utilizzato per i valori RX e TX.",
"label": "Testo"
},
"colorTx": {
"desc": "Imposta il colore dell'icona di upload (TX) quando sopra la soglia.",
"label": "TX Attivo"
},
"contentMargin": {
"desc": "Padding orizzontale su entrambi i lati del contenuto del widget.",
"label": "Margine contenuto"
},
"customFontBold": {
"desc": "Visualizza i valori di velocità in grassetto.",
"label": "Grassetto"
"useCustomFont": {
"desc": "Sovrascrivi il font predefinito per i valori di velocità.",
"label": "Font personalizzato"
},
"customFontFamily": {
"desc": "Scegli un font per i valori di velocità.",
@@ -37,41 +53,49 @@
"placeholder": "Seleziona un font",
"searchPlaceholder": "Cerca font…"
},
"customFontBold": {
"desc": "Visualizza i valori di velocità in grassetto.",
"label": "Grassetto"
},
"customFontItalic": {
"desc": "Visualizza i valori di velocità in corsivo.",
"label": "Corsivo"
},
"fontSizeModifier": {
"desc": "Scala la dimensione del testo rispetto al valore predefinito.",
"label": "Modificatore dimensione font"
},
"horizontalLayout": {
"desc": "Posiziona i valori TX e RX fianco a fianco invece che impilati.",
"label": "Layout orizzontale"
},
"iconSizeModifier": {
"desc": "Scala la dimensione dell'icona rispetto al valore predefinito.",
"label": "Modificatore dimensione icona"
},
"iconType": {
"desc": "Scegli lo stile dell'icona usata per gli indicatori TX/RX.",
"label": "Tipo icona"
},
"showNumbers": {
"desc": "Visualizza le velocità RX/TX attuali come numeri.",
"label": "Mostra valori"
},
"spacingInbetween": {
"desc": "Regola lo spazio tra gli elementi RX/TX.",
"label": "Spaziatura verticale"
},
"useCustomColors": {
"desc": "Attiva i colori personalizzati invece dei colori predefiniti del tema.",
"label": "Colori personalizzati"
},
"useCustomFont": {
"desc": "Sovrascrivi il font predefinito per i valori di velocità.",
"label": "Font personalizzato"
"colorTx": {
"desc": "Colore dell'icona di upload (TX) quando sopra la soglia.",
"label": "TX Attivo"
},
"colorRx": {
"desc": "Colore dell'icona di download (RX) quando sopra la soglia.",
"label": "RX Attivo"
},
"colorSilent": {
"desc": "Colore dell'icona quando il traffico è sotto la soglia.",
"label": "Inattivo"
},
"colorText": {
"desc": "Colore del testo per i valori di velocità.",
"label": "Testo"
},
"paddingLeft": {
"label": "Padding sinistro",
"desc": "Padding del contenuto a sinistra."
},
"paddingRight": {
"label": "Padding destro",
"desc": "Padding del contenuto a destra."
},
"columnSpacing": {
"label": "Spaziatura colonne",
"desc": "Spaziatura tra le colonne nel layout a griglia."
},
"rowSpacing": {
"label": "Spaziatura righe",
"desc": "Spaziatura tra le righe nel layout a griglia (senza effetto nel layout orizzontale)."
}
}
}
@@ -1,35 +1,51 @@
{
"actions": {
"widget-settings": "ウィジェット設定"
"widget-settings": "ウィジェット設定",
"toggle-panel": "モニターの切替"
},
"panel": {
"title": "ネットワークアクティビティ",
"close": "閉じる",
"download": "ダウンロード",
"upload": "アップロード"
},
"settings": {
"layout": {
"label": "レイアウト",
"desc": "セルを一列(水平)または2×2グリッド(垂直)に配置します。",
"horizontal": "水平",
"vertical": "垂直"
},
"slots": {
"label": "セルの割り当て",
"desc": "各セルの表示内容を選択します。重複は不可。例:空のセルを使ってアイコンのみ表示。"
},
"slot": {
"txIcon": "TXアイコン",
"rxIcon": "RXアイコン",
"txSpeed": "TX速度",
"rxSpeed": "RX速度",
"none": "空"
},
"iconType": {
"desc": "TX/RXインジケーターに使用するアイコンのスタイルを選択してください。",
"label": "アイコンの種類"
},
"byteThresholdActive": {
"desc": "アクティビティの閾値をバイト毎秒 (B/s) で設定します。",
"label": "アクティブ閾値を表示"
"desc": "この値(B/s)未満のトラフィックは非アクティブとして表示されます。",
"label": "アクティビティ閾値"
},
"colorRx": {
"desc": "閾値を超えた場合のダウンロード (RX) アイコンの色を設定します。",
"label": "RX アクティブ"
"fontSizeModifier": {
"desc": "テキストのサイズをデフォルトを基準に調整します。",
"label": "フォントサイズ"
},
"colorSilent": {
"desc": "トラフィックが閾値を下回った場合に、アイコンの色を設定します。",
"label": "RX/TX 非アクティブ"
"iconSizeModifier": {
"desc": "デフォルトに対するアイコンのサイズを調整します。",
"label": "アイコンサイズ"
},
"colorText": {
"desc": "RX と TX の両方の値に使用するテキストの色を設定します。",
"label": "テキスト"
},
"colorTx": {
"desc": "閾値を超えた場合のアップロード (TX) アイコンの色を設定します。",
"label": "TX アクティブ"
},
"contentMargin": {
"desc": "ウィジェットコンテンツの両サイドの水平パディング。",
"label": "コンテンツマージン"
},
"customFontBold": {
"desc": "速度値を太字で表示。",
"label": "太字"
"useCustomFont": {
"desc": "速度値のデフォルトフォントを上書き。",
"label": "カスタムフォント"
},
"customFontFamily": {
"desc": "速度値に使用するフォントを選択してください。",
@@ -37,41 +53,49 @@
"placeholder": "フォントを選択",
"searchPlaceholder": "フォントを検索…"
},
"customFontBold": {
"desc": "速度値を太字で表示。",
"label": "太字"
},
"customFontItalic": {
"desc": "速度値を斜体で表示。",
"label": "斜体"
},
"fontSizeModifier": {
"desc": "テキストのサイズをデフォルトを基準に調整します。",
"label": "フォントサイズ変更"
},
"horizontalLayout": {
"desc": "TXとRXの値を縦並びではなく横並びで表示。",
"label": "水平レイアウト"
},
"iconSizeModifier": {
"desc": "デフォルトに対するアイコンのサイズを調整します。",
"label": "アイコンサイズ変更"
},
"iconType": {
"desc": "TX/RXインジケーターに使用するアイコンのスタイルを選択してください。",
"label": "アイコンの種類"
},
"showNumbers": {
"desc": "現在のRX/TX速度を数値で表示。",
"label": "値を表示"
},
"spacingInbetween": {
"desc": "RX/TX要素間の間隔を調整してください。",
"label": "垂直間隔"
},
"useCustomColors": {
"desc": "テーマのデフォルトの代わりにカスタムカラーを有効にする。",
"label": "カスタムカラー"
},
"useCustomFont": {
"desc": "速度値のデフォルトフォントを上書き。",
"label": "カスタムフォント"
"colorTx": {
"desc": "閾値を超えた場合のアップロード (TX) アイコンの色。",
"label": "TX アクティブ"
},
"colorRx": {
"desc": "閾値を超えた場合のダウンロード (RX) アイコンの色。",
"label": "RX アクティブ"
},
"colorSilent": {
"desc": "トラフィックが閾値を下回った場合のアイコンの色。",
"label": "非アクティブ"
},
"colorText": {
"desc": "速度値のテキスト色。",
"label": "テキスト"
},
"paddingLeft": {
"label": "左パディング",
"desc": "コンテンツの左側のパディング。"
},
"paddingRight": {
"label": "右パディング",
"desc": "コンテンツの右側のパディング。"
},
"columnSpacing": {
"label": "列間隔",
"desc": "グリッドレイアウトでの列間の間隔。"
},
"rowSpacing": {
"label": "行間隔",
"desc": "グリッドレイアウトでの行間の間隔(水平レイアウトでは効果なし)。"
}
}
}
@@ -1,35 +1,51 @@
{
"actions": {
"widget-settings": "Mîhengên widgetê"
"widget-settings": "Mîhengên widgetê",
"toggle-panel": "Monîtor veke/bigire"
},
"panel": {
"title": "Çalakiya Torê",
"close": "Bigire",
"download": "Daxistin",
"upload": "Barkirin"
},
"settings": {
"layout": {
"label": "Sazmon",
"desc": "Hucreyan di rêzê de (asayî) an di torê 2×2 de (stûnî) bicîh bike.",
"horizontal": "Asayî",
"vertical": "Stûnî"
},
"slots": {
"label": "Danîna Hucreyan",
"desc": "Hilbijêre ku her hucre çi nîşan bide. Dubare ne mumkin e. Mînak: ji bo tenê îkonan nîşan bidin hucreyan vala bihêle."
},
"slot": {
"txIcon": "Îkona TX",
"rxIcon": "Îkona RX",
"txSpeed": "Leza TX",
"rxSpeed": "Leza RX",
"none": "Vala"
},
"iconType": {
"desc": "Şêwaza îkonê ya ku ji bo nîşanderên TX/RX tê bikaranîn hilbijêre.",
"label": "Cureyê Îkonê"
},
"byteThresholdActive": {
"desc": "Sînorê çalakiyê bi bayt di duyemîn de (B/s) destnîşan bike.",
"label": "Derheqê Çalakî Nîşan Bide"
"desc": "Trafîka li binê vê nirxê (B/s) wekî neçalak tê nîşandan.",
"label": "Sînorê Çalakiyê"
},
"colorRx": {
"desc": "Rengê îkona daxistinê (RX) dema ku ji tixûbê derbas dibe, destnîşan bike.",
"label": "RX Çalak"
"fontSizeModifier": {
"desc": "Mezinahiya nivîsê li gorî ya xwerû mezin bike.",
"label": "Mezinahiya Tîpan"
},
"colorSilent": {
"desc": "Îkon rengê dema trafîk ji binê tixûbê be, saz bike.",
"label": "RX/TX Neçalak"
"iconSizeModifier": {
"desc": "Mezinahiya îkonê li gorî ya xwerû mezin bike.",
"label": "Mezinahiya Îkonê"
},
"colorText": {
"desc": "Rengê nivîsê yê ku ji bo nirxên RX û TX tê bikaranîn, destnîşan bike.",
"label": "Nivîs"
},
"colorTx": {
"desc": "Rengê îkona barkirinê (TX) dema ku ji tixûbê derbas dibe, destnîşan bike.",
"label": "TX Çalak"
},
"contentMargin": {
"desc": "Peddinga asayî li her aliyê naveroka widgetê.",
"label": "Berkêşana Naverokê"
},
"customFontBold": {
"desc": "Nirxên lezê bi qalın ve bike.",
"label": "Qalın"
"useCustomFont": {
"desc": "Fontê xwerû ji bo nirxên lezê binpê bike.",
"label": "Fontê Xweser"
},
"customFontFamily": {
"desc": "Ji bo nirxên lezê fontek hilbijêre.",
@@ -37,41 +53,49 @@
"placeholder": "Fontek hilbijêre",
"searchPlaceholder": "Font lêgerîn…"
},
"customFontBold": {
"desc": "Nirxên lezê bi qalın ve bike.",
"label": "Qalın"
},
"customFontItalic": {
"desc": "Nirxên lezê bi xwar ve bike.",
"label": "Xwar"
},
"fontSizeModifier": {
"desc": "Mezinahiya nivîsê li gorî ya xwerû mezin bike.",
"label": "Guherînera Mezinahiya Tîpan"
},
"horizontalLayout": {
"desc": "Nirxên TX û RX li hev re biparêze, ne bi hev ve.",
"label": "Sazmona_ASAYÎ"
},
"iconSizeModifier": {
"desc": "Mezinahiya îkonê li gorî ya xwerû mezin bike.",
"label": "Guherînerê Mezinahiya Îkonê"
},
"iconType": {
"desc": "Şêwaza îkonê ya ku ji bo nîşanderên TX/RX tê bikaranîn hilbijêre.",
"label": "Cureyê Îkonê"
},
"showNumbers": {
"desc": "Leza lezahenên RX/TX yên niha wekî hejmaran.",
"label": "Nîşan bide Nirxan"
},
"spacingInbetween": {
"desc": "Cihêtiya navbera elementên RX/TX eyar bike.",
"label": "Valahiya_Rastkirin"
},
"useCustomColors": {
"desc": "Çalak bike rengên xwerû li şûna rengên xwerû yên temayê.",
"desc": "Rengên xweser li şûna rengên xwerû yên temayê çalak bike.",
"label": "Rengên Xweser"
},
"useCustomFont": {
"desc": "Fontê DEFAULT ji bo nirxên lezê binpê kirin.",
"label": "Fontê Xweser"
"colorTx": {
"desc": "Rengê îkona barkirinê (TX) dema ku ji tixûbê derbas dibe.",
"label": "TX Çalak"
},
"colorRx": {
"desc": "Rengê îkona daxistinê (RX) dema ku ji tixûbê derbas dibe.",
"label": "RX Çalak"
},
"colorSilent": {
"desc": "Rengê îkonê dema trafîk ji binê tixûbê be.",
"label": "Neçalak"
},
"colorText": {
"desc": "Rengê nivîsê ji bo nirxên lezê.",
"label": "Nivîs"
},
"paddingLeft": {
"label": "Peddinga çepê",
"desc": "Peddinga naverokê li aliyê çepê."
},
"paddingRight": {
"label": "Peddinga rastê",
"desc": "Peddinga naverokê li aliyê rastê."
},
"columnSpacing": {
"label": "Valahiya stûnan",
"desc": "Valahiya navbera stûnan di sazmona torê de."
},
"rowSpacing": {
"label": "Valahiya rêzan",
"desc": "Valahiya navbera rêzan di sazmona torê de (di sazmona asayî de bêbandor e)."
}
}
}
@@ -1,35 +1,51 @@
{
"actions": {
"widget-settings": "Widget-instellingen"
"widget-settings": "Widget-instellingen",
"toggle-panel": "Monitor in-/uitschakelen"
},
"panel": {
"title": "Netwerkactiviteit",
"close": "Sluiten",
"download": "Download",
"upload": "Upload"
},
"settings": {
"layout": {
"label": "Lay-out",
"desc": "Cellen in een rij (horizontaal) of in een 2×2-raster (verticaal) rangschikken.",
"horizontal": "Horizontaal",
"vertical": "Verticaal"
},
"slots": {
"label": "Celtoewijzing",
"desc": "Kies wat elke cel weergeeft. Geen duplicaten mogelijk. Gebruik bijv. lege cellen om alleen pictogrammen te tonen."
},
"slot": {
"txIcon": "TX-pictogram",
"rxIcon": "RX-pictogram",
"txSpeed": "TX-snelheid",
"rxSpeed": "RX-snelheid",
"none": "Leeg"
},
"iconType": {
"desc": "Kies de pictogramstijl die gebruikt wordt voor de TX/RX-indicatoren.",
"label": "Icoontype"
},
"byteThresholdActive": {
"desc": "Stel de activiteitsdrempel in bytes per seconde (B/s) in.",
"label": "Actieve drempel weergeven"
"desc": "Verkeer onder deze waarde (B/s) wordt als inactief weergegeven.",
"label": "Activiteitsdrempel"
},
"colorRx": {
"desc": "Stel de kleur van het download (RX) pictogram in wanneer deze boven de drempelwaarde ligt.",
"label": "RX Actief"
"fontSizeModifier": {
"desc": "Schaal de tekstgrootte ten opzichte van de standaard.",
"label": "Lettergrootte"
},
"colorSilent": {
"desc": "Stel de pictogramkleur in wanneer het verkeer onder de drempelwaarde is.",
"label": "RX/TX Inactief"
"iconSizeModifier": {
"desc": "Schaal de pictogramgrootte ten opzichte van de standaard.",
"label": "Icoongrootte"
},
"colorText": {
"desc": "Stel de tekstkleur in die gebruikt wordt voor zowel RX- als TX-waarden.",
"label": "Tekst"
},
"colorTx": {
"desc": "Stel de kleur van het upload (TX) icoon in wanneer boven de drempelwaarde.",
"label": "TX Actief"
},
"contentMargin": {
"desc": "Horizontale padding aan beide zijden van de widget-inhoud.",
"label": "Inhoudmarge"
},
"customFontBold": {
"desc": "Geef snelheidswaarden vetgedrukt weer.",
"label": "Vet"
"useCustomFont": {
"desc": "Overschrijf het standaard lettertype voor snelheidswaarden.",
"label": "Aangepast lettertype"
},
"customFontFamily": {
"desc": "Kies een lettertype voor de snelheidswaarden.",
@@ -37,41 +53,49 @@
"placeholder": "Selecteer lettertype",
"searchPlaceholder": "Lettertypen zoeken…"
},
"customFontBold": {
"desc": "Geef snelheidswaarden vetgedrukt weer.",
"label": "Vet"
},
"customFontItalic": {
"desc": "Geef snelheidswaarden scheefgedrukt weer.",
"label": "Schuin"
},
"fontSizeModifier": {
"desc": "Schaal de tekstgrootte ten opzichte van de standaard.",
"label": "Lettergrootte aanpassing"
},
"horizontalLayout": {
"desc": "Plaats TX en RX waarden naast elkaar in plaats van gestapeld.",
"label": "Horizontale lay-out"
},
"iconSizeModifier": {
"desc": "Schaal de pictogramgrootte ten opzichte van de standaard.",
"label": "Icoongrootte aanpassing"
},
"iconType": {
"desc": "Kies de pictogramstijl die gebruikt wordt voor de TX/RX-indicatoren.",
"label": "Icoontype"
},
"showNumbers": {
"desc": "Toon de huidige RX/TX snelheden als getallen.",
"label": "Waarden weergeven"
},
"spacingInbetween": {
"desc": "Pas de afstand tussen de RX/TX-elementen aan.",
"label": "Verticale afstand"
},
"useCustomColors": {
"desc": "Schakel aangepaste kleuren in in plaats van de standaard themakleuren.",
"label": "Aangepaste kleuren"
},
"useCustomFont": {
"desc": "Overschrijf het standaard lettertype voor snelheidswaarden.",
"label": "Aangepast lettertype"
"colorTx": {
"desc": "Kleur van het upload (TX) pictogram wanneer boven de drempelwaarde.",
"label": "TX Actief"
},
"colorRx": {
"desc": "Kleur van het download (RX) pictogram wanneer boven de drempelwaarde.",
"label": "RX Actief"
},
"colorSilent": {
"desc": "Pictogramkleur wanneer het verkeer onder de drempelwaarde is.",
"label": "Inactief"
},
"colorText": {
"desc": "Tekstkleur voor snelheidswaarden.",
"label": "Tekst"
},
"paddingLeft": {
"label": "Padding links",
"desc": "Padding van de inhoud aan de linkerkant."
},
"paddingRight": {
"label": "Padding rechts",
"desc": "Padding van de inhoud aan de rechterkant."
},
"columnSpacing": {
"label": "Kolomafstand",
"desc": "Afstand tussen kolommen in rasterlay-out."
},
"rowSpacing": {
"label": "Rijafstand",
"desc": "Afstand tussen rijen in rasterlay-out (heeft geen effect in horizontale lay-out)."
}
}
}
@@ -1,35 +1,51 @@
{
"actions": {
"widget-settings": "Ustawienia widgetu"
"widget-settings": "Ustawienia widgetu",
"toggle-panel": "Przełącz Monitor"
},
"panel": {
"title": "Aktywność sieciowa",
"close": "Zamknij",
"download": "Pobieranie",
"upload": "Wysyłanie"
},
"settings": {
"layout": {
"label": "Układ",
"desc": "Rozmieść komórki w rzędzie (poziomo) lub w siatce 2×2 (pionowo).",
"horizontal": "Poziomy",
"vertical": "Pionowy"
},
"slots": {
"label": "Przypisanie komórek",
"desc": "Wybierz, co wyświetla każda komórka. Duplikaty nie są możliwe. Np. użyj pustych komórek, aby wyświetlać tylko ikony."
},
"slot": {
"txIcon": "Ikona TX",
"rxIcon": "Ikona RX",
"txSpeed": "Prędkość TX",
"rxSpeed": "Prędkość RX",
"none": "Pusty"
},
"iconType": {
"desc": "Wybierz styl ikony używany dla wskaźników TX/RX.",
"label": "Typ Ikony"
},
"byteThresholdActive": {
"desc": "Ustaw próg aktywności w bajtach na sekundę (B/s).",
"label": "Pokaż Aktywny Próg"
"desc": "Ruch poniżej tej wartości (B/s) jest wyświetlany jako nieaktywny.",
"label": "Próg aktywności"
},
"colorRx": {
"desc": "Ustaw kolor ikony pobierania (RX), gdy wartość przekroczy próg.",
"label": "RX Aktywny"
"fontSizeModifier": {
"desc": "Skaluj rozmiar tekstu względem domyślnego.",
"label": "Rozmiar czcionki"
},
"colorSilent": {
"desc": "Ustaw kolor ikony, gdy ruch jest poniżej progu.",
"label": "RX/TX Nieaktywne"
"iconSizeModifier": {
"desc": "Skaluj rozmiar ikony względem domyślnego.",
"label": "Rozmiar ikony"
},
"colorText": {
"desc": "Ustaw kolor tekstu używany zarówno dla wartości RX, jak i TX.",
"label": "Tekst"
},
"colorTx": {
"desc": "Ustaw kolor ikony wysyłania (TX), gdy przekroczony zostanie próg.",
"label": "TX Aktywny"
},
"contentMargin": {
"desc": "Poziomy padding po obu stronach treści widgetu.",
"label": "Margines treści"
},
"customFontBold": {
"desc": "Wyświetlaj wartości prędkości pogrubionym tekstem.",
"label": "Pogrubiony"
"useCustomFont": {
"desc": "Zastąp domyślną czcionkę dla wartości prędkości.",
"label": "Własna czcionka"
},
"customFontFamily": {
"desc": "Wybierz czcionkę dla wartości prędkości.",
@@ -37,41 +53,49 @@
"placeholder": "Wybierz czcionkę",
"searchPlaceholder": "Szukaj czcionek…"
},
"customFontBold": {
"desc": "Wyświetlaj wartości prędkości pogrubionym tekstem.",
"label": "Pogrubiony"
},
"customFontItalic": {
"desc": "Wyświetlaj wartości prędkości kursywą.",
"label": "Kursywa"
},
"fontSizeModifier": {
"desc": "Skaluj rozmiar tekstu względem domyślnego.",
"label": "Modyfikator rozmiaru czcionki"
},
"horizontalLayout": {
"desc": "Umieść wartości TX i RX obok siebie zamiast jedna nad drugą.",
"label": "Układ poziomy"
},
"iconSizeModifier": {
"desc": "Skaluj rozmiar ikony względem domyślnego.",
"label": "Modyfikator rozmiaru ikony"
},
"iconType": {
"desc": "Wybierz styl ikony używany dla wskaźników TX/RX.",
"label": "Typ Ikony"
},
"showNumbers": {
"desc": "Wyświetlaj aktualne prędkości RX/TX jako liczby.",
"label": "Pokaż wartości"
},
"spacingInbetween": {
"desc": "Dostosuj odstępy między elementami RX/TX.",
"label": "Odstęp pionowy"
},
"useCustomColors": {
"desc": "Włącz własne kolory zamiast domyślnych motywu.",
"label": "Własne kolory"
},
"useCustomFont": {
"desc": "Zastąp domyślną czcionkę dla wartości prędkości.",
"label": "Własna czcionka"
"colorTx": {
"desc": "Kolor ikony wysyłania (TX), gdy przekroczony jest próg.",
"label": "TX Aktywny"
},
"colorRx": {
"desc": "Kolor ikony pobierania (RX), gdy wartość przekroczy próg.",
"label": "RX Aktywny"
},
"colorSilent": {
"desc": "Kolor ikony, gdy ruch jest poniżej progu.",
"label": "Nieaktywne"
},
"colorText": {
"desc": "Kolor tekstu dla wartości prędkości.",
"label": "Tekst"
},
"paddingLeft": {
"label": "Padding lewy",
"desc": "Padding treści po lewej stronie."
},
"paddingRight": {
"label": "Padding prawy",
"desc": "Padding treści po prawej stronie."
},
"columnSpacing": {
"label": "Odstęp kolumn",
"desc": "Odstęp między kolumnami w układzie siatki."
},
"rowSpacing": {
"label": "Odstęp wierszy",
"desc": "Odstęp między wierszami w układzie siatki (bez efektu w układzie poziomym)."
}
}
}
@@ -1,35 +1,51 @@
{
"actions": {
"widget-settings": "Configurações do widget"
"widget-settings": "Configurações do widget",
"toggle-panel": "Alternar Monitor"
},
"panel": {
"title": "Atividade de Rede",
"close": "Fechar",
"download": "Download",
"upload": "Upload"
},
"settings": {
"layout": {
"label": "Layout",
"desc": "Organizar células em linha (horizontal) ou em grelha 2×2 (vertical).",
"horizontal": "Horizontal",
"vertical": "Vertical"
},
"slots": {
"label": "Atribuição de células",
"desc": "Escolha o que cada célula exibe. Não são possíveis duplicados. Ex.: use células vazias para mostrar apenas ícones."
},
"slot": {
"txIcon": "Ícone TX",
"rxIcon": "Ícone RX",
"txSpeed": "Velocidade TX",
"rxSpeed": "Velocidade RX",
"none": "Vazio"
},
"iconType": {
"desc": "Escolha o estilo do ícone usado para os indicadores TX/RX.",
"label": "Tipo de Ícone"
},
"byteThresholdActive": {
"desc": "Defina o limite de atividade em bytes por segundo (B/s).",
"label": "Mostrar Limiar Ativo"
"desc": "Tráfego abaixo deste valor (B/s) é mostrado como inativo.",
"label": "Limiar de atividade"
},
"colorRx": {
"desc": "Defina a cor do ícone de download (RX) quando acima do limite.",
"label": "RX Ativo"
"fontSizeModifier": {
"desc": "Ajustar o tamanho do texto em relação ao padrão.",
"label": "Tamanho da fonte"
},
"colorSilent": {
"desc": "Definir a cor do ícone quando o tráfego estiver abaixo do limite.",
"label": "RX/TX Inativo"
"iconSizeModifier": {
"desc": "Dimensionar o tamanho do ícone em relação ao padrão.",
"label": "Tamanho do ícone"
},
"colorText": {
"desc": "Definir a cor do texto usada para os valores de RX e TX.",
"label": "Texto"
},
"colorTx": {
"desc": "Definir a cor do ícone de upload (TX) quando acima do limite.",
"label": "TX Ativo"
},
"contentMargin": {
"desc": "Padding horizontal em ambos os lados do conteúdo do widget.",
"label": "Margem do conteúdo"
},
"customFontBold": {
"desc": "Renderizar valores de velocidade em negrito.",
"label": "Negrito"
"useCustomFont": {
"desc": "Substituir a fonte padrão para valores de velocidade.",
"label": "Fonte Personalizada"
},
"customFontFamily": {
"desc": "Escolha uma fonte para os valores de velocidade.",
@@ -37,41 +53,49 @@
"placeholder": "Selecionar fonte",
"searchPlaceholder": "Pesquisar fontes…"
},
"customFontBold": {
"desc": "Renderizar valores de velocidade em negrito.",
"label": "Negrito"
},
"customFontItalic": {
"desc": "Renderizar valores de velocidade em itálico.",
"label": "Itálico"
},
"fontSizeModifier": {
"desc": "Ajustar o tamanho do texto em relação ao padrão.",
"label": "Modificador de Tamanho da Fonte"
},
"horizontalLayout": {
"desc": "Colocar valores TX e RX lado a lado em vez de empilhados.",
"label": "Layout Horizontal"
},
"iconSizeModifier": {
"desc": "Dimensionar o tamanho do ícone em relação ao padrão.",
"label": "Modificador de Tamanho do Ícone"
},
"iconType": {
"desc": "Escolha o estilo do ícone usado para os indicadores TX/RX.",
"label": "Tipo de Ícone"
},
"showNumbers": {
"desc": "Exibir as velocidades atuais de RX/TX como números.",
"label": "Mostrar Valores"
},
"spacingInbetween": {
"desc": "Ajustar o espaçamento entre os elementos RX/TX.",
"label": "Espaçamento vertical"
},
"useCustomColors": {
"desc": "Ativar cores personalizadas em vez das cores padrão do tema.",
"label": "Cores Personalizadas"
},
"useCustomFont": {
"desc": "Substituir a fonte padrão para valores de velocidade.",
"label": "Fonte Personalizada"
"colorTx": {
"desc": "Cor do ícone de upload (TX) quando acima do limite.",
"label": "TX Ativo"
},
"colorRx": {
"desc": "Cor do ícone de download (RX) quando acima do limite.",
"label": "RX Ativo"
},
"colorSilent": {
"desc": "Cor do ícone quando o tráfego estiver abaixo do limite.",
"label": "Inativo"
},
"colorText": {
"desc": "Cor do texto para valores de velocidade.",
"label": "Texto"
},
"paddingLeft": {
"label": "Padding esquerdo",
"desc": "Padding do conteúdo à esquerda."
},
"paddingRight": {
"label": "Padding direito",
"desc": "Padding do conteúdo à direita."
},
"columnSpacing": {
"label": "Espaçamento de colunas",
"desc": "Espaçamento entre colunas no layout de grelha."
},
"rowSpacing": {
"label": "Espaçamento de linhas",
"desc": "Espaçamento entre linhas no layout de grelha (sem efeito no layout horizontal)."
}
}
}
@@ -1,35 +1,51 @@
{
"actions": {
"widget-settings": "Настройки виджета"
"widget-settings": "Настройки виджета",
"toggle-panel": "Переключить монитор"
},
"panel": {
"title": "Сетевая активность",
"close": "Закрыть",
"download": "Загрузка",
"upload": "Отдача"
},
"settings": {
"layout": {
"label": "Раскладка",
"desc": "Расположить ячейки в ряд (горизонтально) или в сетку 2×2 (вертикально).",
"horizontal": "Горизонтальная",
"vertical": "Вертикальная"
},
"slots": {
"label": "Назначение ячеек",
"desc": "Выберите, что отображает каждая ячейка. Дублирование невозможно. Напр., используйте пустые ячейки, чтобы показывать только значки."
},
"slot": {
"txIcon": "Значок TX",
"rxIcon": "Значок RX",
"txSpeed": "Скорость TX",
"rxSpeed": "Скорость RX",
"none": "Пусто"
},
"iconType": {
"desc": "Выберите стиль значков для индикаторов TX/RX.",
"label": "Тип значка"
},
"byteThresholdActive": {
"desc": "Установите порог активности в байтах в секунду (Б/с).",
"label": "Показать активный порог"
"desc": "Трафик ниже этого значения (Б/с) отображается как неактивный.",
"label": "Порог активности"
},
"colorRx": {
"desc": "Установите цвет значка загрузки (RX), когда он выше порогового значения.",
"label": "RX активен"
"fontSizeModifier": {
"desc": "Измените размер текста относительно размера по умолчанию.",
"label": "Размер шрифта"
},
"colorSilent": {
"desc": "Установите цвет значка, когда трафик ниже порогового значения.",
"label": "RX/TX неактивны"
"iconSizeModifier": {
"desc": "Измените размер значка относительно размера по умолчанию.",
"label": "Размер значка"
},
"colorText": {
"desc": "Установите цвет текста для значений RX и TX.",
"label": "Текст"
},
"colorTx": {
"desc": "Установите цвет значка загрузки (TX) при превышении порогового значения.",
"label": "TX активен"
},
"contentMargin": {
"desc": "Горизонтальный отступ по обеим сторонам содержимого виджета.",
"label": "Отступ содержимого"
},
"customFontBold": {
"desc": "Отображать значения скорости жирным шрифтом.",
"label": "Жирный"
"useCustomFont": {
"desc": "Переопределите шрифт по умолчанию для значений скорости.",
"label": "Пользовательский шрифт"
},
"customFontFamily": {
"desc": "Выберите шрифт для значений скорости.",
@@ -37,41 +53,49 @@
"placeholder": "Выбрать шрифт",
"searchPlaceholder": "Поиск шрифтов…"
},
"customFontBold": {
"desc": "Отображать значения скорости жирным шрифтом.",
"label": "Жирный"
},
"customFontItalic": {
"desc": "Отображать значения скорости курсивом.",
"label": "Курсив"
},
"fontSizeModifier": {
"desc": "Измените размер текста относительно размера по умолчанию.",
"label": "Модификатор размера шрифта"
},
"horizontalLayout": {
"desc": "Разместите значения TX и RX рядом друг с другом, а не друг под другом.",
"label": "Горизонтальная раскладка"
},
"iconSizeModifier": {
"desc": "Измените размер значка относительно размера по умолчанию.",
"label": "Модификатор размера значка"
},
"iconType": {
"desc": "Выберите стиль значков для индикаторов TX/RX.",
"label": "Тип значка"
},
"showNumbers": {
"desc": "Отображать текущие скорости RX/TX в виде чисел.",
"label": "Показать значения"
},
"spacingInbetween": {
"desc": "Отрегулируйте интервал между элементами RX/TX.",
"label": "Вертикальный интервал"
},
"useCustomColors": {
"desc": "Включите пользовательские цвета вместо цветов темы по умолчанию.",
"label": "Пользовательские цвета"
},
"useCustomFont": {
"desc": "Переопределите шрифт по умолчанию для значений скорости.",
"label": "Пользовательский шрифт"
"colorTx": {
"desc": "Цвет значка отдачи (TX) при превышении порогового значения.",
"label": "TX активен"
},
"colorRx": {
"desc": "Цвет значка загрузки (RX), когда он выше порогового значения.",
"label": "RX активен"
},
"colorSilent": {
"desc": "Цвет значка, когда трафик ниже порогового значения.",
"label": "Неактивен"
},
"colorText": {
"desc": "Цвет текста для значений скорости.",
"label": "Текст"
},
"paddingLeft": {
"label": "Отступ слева",
"desc": "Отступ содержимого слева."
},
"paddingRight": {
"label": "Отступ справа",
"desc": "Отступ содержимого справа."
},
"columnSpacing": {
"label": "Расстояние между столбцами",
"desc": "Расстояние между столбцами в сеточной раскладке."
},
"rowSpacing": {
"label": "Расстояние между строками",
"desc": "Расстояние между строками в сеточной раскладке (не действует в горизонтальной раскладке)."
}
}
}
@@ -1,35 +1,51 @@
{
"actions": {
"widget-settings": "Widget Ayarları"
"widget-settings": "Widget Ayarları",
"toggle-panel": "Monitörü Aç/Kapat"
},
"panel": {
"title": "Ağ Etkinliği",
"close": "Kapat",
"download": "İndirme",
"upload": "Yükleme"
},
"settings": {
"layout": {
"label": "Düzen",
"desc": "Hücreleri bir satırda (yatay) veya 2×2 ızgarada (dikey) düzenle.",
"horizontal": "Yatay",
"vertical": "Dikey"
},
"slots": {
"label": "Hücre Ataması",
"desc": "Her hücrenin ne göstereceğini seç. Yinelenenlere izin verilmez. Örn. yalnızca simgeleri göstermek için boş hücreler kullan."
},
"slot": {
"txIcon": "TX Simgesi",
"rxIcon": "RX Simgesi",
"txSpeed": "TX Hızı",
"rxSpeed": "RX Hızı",
"none": "Boş"
},
"iconType": {
"desc": "TX/RX göstergeleri için kullanılan simge stilini seçin.",
"label": "Simge Türü"
},
"byteThresholdActive": {
"desc": "Etkinlik eşiğini saniye başına bayt (B/s) cinsinden ayarlayın.",
"label": "Aktif Eşiği Göster"
"desc": "Bu değerin altındaki trafik (B/s) etkin değil olarak gösterilir.",
"label": "Etkinlik Eşiği"
},
"colorRx": {
"desc": "Eşiğin üzerindeyken indirme (RX) simge rengini ayarla.",
"label": "RX Aktif"
"fontSizeModifier": {
"desc": "Metin boyutunu varsayılana göre ölçekle.",
"label": "Yazı Boyutu"
},
"colorSilent": {
"desc": "Trafiğin eşiğin altında olduğu durumlarda simge rengini ayarla.",
"label": "RX/TX Etkin Değil"
"iconSizeModifier": {
"desc": "Simge boyutunu varsayılan değere göre ölçekle.",
"label": "Simge Boyutu"
},
"colorText": {
"desc": "RX ve TX değerleri için kullanılan metin rengini ayarla.",
"label": "Metin"
},
"colorTx": {
"desc": "Eşik değerinin üzerindeyken yükleme (TX) simge rengini ayarla.",
"label": "TX Aktif"
},
"contentMargin": {
"desc": "Widget içeriğinin her iki tarafında yatay dolgu.",
"label": "İçerik Kenar Boşluğu"
},
"customFontBold": {
"desc": "Hız değerlerini kalın olarak oluştur.",
"label": "Kalın"
"useCustomFont": {
"desc": "Hız değerleri için varsayılan yazı tipini geçersiz kıl.",
"label": "Özel Yazı Tipi"
},
"customFontFamily": {
"desc": "Hız değerleri için bir yazı tipi seçin.",
@@ -37,41 +53,49 @@
"placeholder": "Yazı tipi seçin",
"searchPlaceholder": "Yazı tipleri ara…"
},
"customFontBold": {
"desc": "Hız değerlerini kalın olarak oluştur.",
"label": "Kalın"
},
"customFontItalic": {
"desc": "Hız değerlerini italik olarak oluştur.",
"label": "İtalik"
},
"fontSizeModifier": {
"desc": "Metin boyutunu varsayılana göre ölçekle.",
"label": "Yazı Boyutu Değiştirici"
},
"horizontalLayout": {
"desc": "TX ve RX değerlerini üst üste yerine yan yana yerleştir.",
"label": "Yatay Düzen"
},
"iconSizeModifier": {
"desc": "Simge boyutunu varsayılan değere göre ölçekle.",
"label": "Simge Boyutu Değiştirici"
},
"iconType": {
"desc": "TX/RX göstergeleri için kullanılan simge stilini seçin.",
"label": "Simge Türü"
},
"showNumbers": {
"desc": "Mevcut RX/TX hızlarını sayı olarak görüntüle.",
"label": "Değerleri Göster"
},
"spacingInbetween": {
"desc": "RX/TX öğeleri arasındaki boşluğu ayarlayın.",
"label": "Dikey Aralık"
},
"useCustomColors": {
"desc": "Tema varsayılanları yerine özel renkleri etkinleştir.",
"label": "Özel Renkler"
},
"useCustomFont": {
"desc": "Hız değerleri için varsayılan yazı tipini geçersiz kıl.",
"label": "Özel Yazı Tipi"
"colorTx": {
"desc": "Eşiğin üzerindeyken yükleme (TX) simge rengi.",
"label": "TX Aktif"
},
"colorRx": {
"desc": "Eşiğin üzerindeyken indirme (RX) simge rengi.",
"label": "RX Aktif"
},
"colorSilent": {
"desc": "Trafiğin eşiğin altında olduğu durumlarda simge rengi.",
"label": "Etkin Değil"
},
"colorText": {
"desc": "Hız değerleri için metin rengi.",
"label": "Metin"
},
"paddingLeft": {
"label": "Sol Dolgu",
"desc": "İçeriğin sol tarafındaki dolgu."
},
"paddingRight": {
"label": "Sağ Dolgu",
"desc": "İçeriğin sağ tarafındaki dolgu."
},
"columnSpacing": {
"label": "Sütun Aralığı",
"desc": "Izgara düzeninde sütunlar arası boşluk."
},
"rowSpacing": {
"label": "Satır Aralığı",
"desc": "Izgara düzeninde satırlar arası boşluk (yatay düzende etkisizdir)."
}
}
}
@@ -1,35 +1,51 @@
{
"actions": {
"widget-settings": "Налаштування віджета"
"widget-settings": "Налаштування віджета",
"toggle-panel": "Перемкнути монітор"
},
"panel": {
"title": "Мережева активність",
"close": "Закрити",
"download": "Завантаження",
"upload": "Вивантаження"
},
"settings": {
"layout": {
"label": "Розташування",
"desc": "Розмістити комірки в ряд (горизонтально) або у сітку 2×2 (вертикально).",
"horizontal": "Горизонтальне",
"vertical": "Вертикальне"
},
"slots": {
"label": "Призначення комірок",
"desc": "Оберіть, що відображає кожна комірка. Дублікати неможливі. Напр., використовуйте порожні комірки, щоб показувати лише іконки."
},
"slot": {
"txIcon": "Іконка TX",
"rxIcon": "Іконка RX",
"txSpeed": "Швидкість TX",
"rxSpeed": "Швидкість RX",
"none": "Порожньо"
},
"iconType": {
"desc": "Виберіть стиль іконок, що використовуються для індикаторів TX/RX.",
"label": "Тип іконки"
},
"byteThresholdActive": {
"desc": "Встановіть поріг активності в байтах на секунду (Б/с).",
"label": "Показати активний поріг"
"desc": "Трафік нижче цього значення (Б/с) відображається як неактивний.",
"label": "Поріг активності"
},
"colorRx": {
"desc": "Встановіть колір значка завантаження (RX), коли він перевищує поріг.",
"label": "RX активний"
"fontSizeModifier": {
"desc": "Змінити розмір тексту відносно стандартного.",
"label": "Розмір шрифту"
},
"colorSilent": {
"desc": "Встановіть колір значка, коли трафік нижче порогового значення.",
"label": "RX/TX неактивні"
"iconSizeModifier": {
"desc": "Змінюйте розмір значка відносно стандартного.",
"label": "Розмір значка"
},
"colorText": {
"desc": "Встановіть колір тексту, який використовується для значень RX та TX.",
"label": "Текст"
},
"colorTx": {
"desc": "Встановіть колір піктограми завантаження (TX), коли значення перевищує поріг.",
"label": "TX активний"
},
"contentMargin": {
"desc": "Горизонтальний відступ з обох боків вмісту віджета.",
"label": "Відступ вмісту"
},
"customFontBold": {
"desc": "Відображати значення швидкості жирним шрифтом.",
"label": "Жирний"
"useCustomFont": {
"desc": "Перевизначити шрифт за замовчуванням для значень швидкості.",
"label": "Користувацький шрифт"
},
"customFontFamily": {
"desc": "Оберіть шрифт для значень швидкості.",
@@ -37,41 +53,49 @@
"placeholder": "Обрати шрифт",
"searchPlaceholder": "Пошук шрифтів…"
},
"customFontBold": {
"desc": "Відображати значення швидкості жирним шрифтом.",
"label": "Жирний"
},
"customFontItalic": {
"desc": "Відображати значення швидкості курсивом.",
"label": "Курсив"
},
"fontSizeModifier": {
"desc": "Змінити розмір тексту відносно стандартного.",
"label": "Модифікатор розміру шрифту"
},
"horizontalLayout": {
"desc": "Розмістити значення TX та RX поруч, а не один під одним.",
"label": "Горизонтальне розташування"
},
"iconSizeModifier": {
"desc": "Змінюйте розмір значка відносно стандартного.",
"label": "Модифікатор розміру значка"
},
"iconType": {
"desc": "Виберіть стиль іконок, що використовуються для індикаторів TX/RX.",
"label": "Тип іконки"
},
"showNumbers": {
"desc": "Показувати поточні швидкості RX/TX у вигляді чисел.",
"label": "Показати значення"
},
"spacingInbetween": {
"desc": "Відрегулюйте інтервал між елементами RX/TX.",
"label": "Вертикальний інтервал"
},
"useCustomColors": {
"desc": "Увімкнути власні кольори замість кольорів теми за замовчуванням.",
"label": "Користувацькі кольори"
},
"useCustomFont": {
"desc": "Перевизначити шрифт за замовчуванням для значень швидкості.",
"label": "Користувацький шрифт"
"colorTx": {
"desc": "Колір піктограми вивантаження (TX), коли значення перевищує поріг.",
"label": "TX активний"
},
"colorRx": {
"desc": "Колір значка завантаження (RX), коли він перевищує поріг.",
"label": "RX активний"
},
"colorSilent": {
"desc": "Колір значка, коли трафік нижче порогового значення.",
"label": "Неактивний"
},
"colorText": {
"desc": "Колір тексту для значень швидкості.",
"label": "Текст"
},
"paddingLeft": {
"label": "Відступ зліва",
"desc": "Відступ вмісту зліва."
},
"paddingRight": {
"label": "Відступ справа",
"desc": "Відступ вмісту справа."
},
"columnSpacing": {
"label": "Відстань між стовпцями",
"desc": "Відстань між стовпцями у сітковому розташуванні."
},
"rowSpacing": {
"label": "Відстань між рядками",
"desc": "Відстань між рядками у сітковому розташуванні (не діє у горизонтальному розташуванні)."
}
}
}
@@ -1,35 +1,51 @@
{
"actions": {
"widget-settings": "小组件设置"
"widget-settings": "小组件设置",
"toggle-panel": "切换监控面板"
},
"panel": {
"title": "网络活动",
"close": "关闭",
"download": "下载",
"upload": "上传"
},
"settings": {
"layout": {
"label": "布局",
"desc": "将单元格排列为一行(水平)或 2×2 网格(垂直)。",
"horizontal": "水平",
"vertical": "垂直"
},
"slots": {
"label": "单元格分配",
"desc": "选择每个单元格显示的内容。不可重复。例如,使用空单元格仅显示图标。"
},
"slot": {
"txIcon": "TX 图标",
"rxIcon": "RX 图标",
"txSpeed": "TX 速度",
"rxSpeed": "RX 速度",
"none": "空"
},
"iconType": {
"desc": "选择用于 TX/RX 指示器的图标样式。",
"label": "图标类型"
},
"byteThresholdActive": {
"desc": "设置活动阈值,单位为字节/秒 (B/s)。",
"label": "显示活动阈值"
"desc": "低于此值(B/s)的流量显示为非活跃。",
"label": "活动阈值"
},
"colorRx": {
"desc": "设置高于阈值时的下载(RX)图标颜色。",
"label": "RX 活跃"
"fontSizeModifier": {
"desc": "相对于默认值缩放文本大小。",
"label": "字体大小"
},
"colorSilent": {
"desc": "当流量低于阈值时,设置图标颜色。",
"label": "RX/TX 非活跃"
"iconSizeModifier": {
"desc": "相对于默认值缩放图标大小。",
"label": "图标大小"
},
"colorText": {
"desc": "设置用于RX和TX值的文本颜色。",
"label": "文本"
},
"colorTx": {
"desc": "设置上传(TX)图标颜色,当高于阈值时。",
"label": "TX 活跃"
},
"contentMargin": {
"desc": "小组件内容两侧的水平内边距。",
"label": "内容边距"
},
"customFontBold": {
"desc": "以粗体显示速度值。",
"label": "粗体"
"useCustomFont": {
"desc": "覆盖速度值的默认字体。",
"label": "自定义字体"
},
"customFontFamily": {
"desc": "为速度值选择字体。",
@@ -37,41 +53,49 @@
"placeholder": "选择字体",
"searchPlaceholder": "搜索字体…"
},
"customFontBold": {
"desc": "以粗体显示速度值。",
"label": "粗体"
},
"customFontItalic": {
"desc": "以斜体显示速度值。",
"label": "斜体"
},
"fontSizeModifier": {
"desc": "相对于默认值缩放文本大小。",
"label": "字体大小调整"
},
"horizontalLayout": {
"desc": "将TX和RX值并排显示,而不是堆叠。",
"label": "水平布局"
},
"iconSizeModifier": {
"desc": "相对于默认值缩放图标大小。",
"label": "图标大小调整"
},
"iconType": {
"desc": "选择用于 TX/RX 指示器的图标样式。",
"label": "图标类型"
},
"showNumbers": {
"desc": "以数字形式显示当前的 RX/TX 速度。",
"label": "显示数值"
},
"spacingInbetween": {
"desc": "调整RX/TX元素之间的间距。",
"label": "垂直间距"
},
"useCustomColors": {
"desc": "启用自定义颜色,而非主题默认颜色。",
"label": "自定义颜色"
},
"useCustomFont": {
"desc": "覆盖速度值的默认字体。",
"label": "自定义字体"
"colorTx": {
"desc": "超过阈值时的上传(TX)图标颜色。",
"label": "TX 活跃"
},
"colorRx": {
"desc": "超过阈值时的下载(RX)图标颜色。",
"label": "RX 活跃"
},
"colorSilent": {
"desc": "当流量低于阈值时的图标颜色。",
"label": "非活跃"
},
"colorText": {
"desc": "速度值的文本颜色。",
"label": "文本"
},
"paddingLeft": {
"label": "左内边距",
"desc": "内容左侧的内边距。"
},
"paddingRight": {
"label": "右内边距",
"desc": "内容右侧的内边距。"
},
"columnSpacing": {
"label": "列间距",
"desc": "网格布局中列之间的间距。"
},
"rowSpacing": {
"label": "行间距",
"desc": "网格布局中行之间的间距(在水平布局中无效)。"
}
}
}
@@ -1,17 +1,13 @@
{
"id": "network-indicator",
"name": "Network Indicator",
"version": "1.1.0",
"version": "2.0.0",
"minNoctaliaVersion": "4.7.6",
"author": "tonigineer",
"license": "MIT",
"repository": "https://github.com/noctalia-dev/noctalia-plugins",
"description": "A `lively` network traffic indicator.",
"tags": [
"Bar",
"Network",
"Indicator"
],
"tags": ["Bar", "Network", "Indicator"],
"entryPoints": {
"barWidget": "BarWidget.qml",
"panel": "Panel.qml",
@@ -22,17 +18,20 @@
},
"metadata": {
"defaultSettings": {
"arrowType": "caret",
"iconType": "caret",
"byteThresholdActive": 5000,
"fontSizeModifier": 0.75,
"iconSizeModifier": 1.0,
"showNumbers": true,
"spacingInbetween": 0,
"useCustomColors": false,
"useCustomFont": false,
"customFontBold": false,
"customFontItalic": false,
"horizontalLayout": false
"columnSpacing": 0,
"rowSpacing": -8,
"paddingLeft": 5,
"paddingRight": 0,
"layout": "vertical",
"slots": ["txSpeed", "txIcon", "rxSpeed", "rxIcon"]
}
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 75 KiB

@@ -30,6 +30,10 @@
"micFilterRegex": {
"desc": "Regex Muster zum Herausfiltern von Mikrofon-Apps. Entsprechende Apps werden vollständig von der Erkennung ausgeschlossen.",
"label": "Regex für Mikrofonfilter"
},
"camFilterRegex": {
"desc": "Regex-Muster zum Herausfiltern von Kamera-Apps. Entsprechende Apps werden vollständig von der Erkennung ausgeschlossen.",
"label": "Regex für Kamerafilter"
}
},
"tooltip": {
@@ -51,4 +55,4 @@
"stopped": "Beendet"
}
}
}
}
@@ -1,7 +1,7 @@
{
"id": "privacy-indicator",
"name": "Privacy Indicator",
"version": "1.2.12",
"version": "1.2.13",
"minNoctaliaVersion": "3.6.0",
"author": "Noctalia Team",
"official": true,