This commit is contained in:
2026-05-01 22:05:33 -05:00
parent 5a84a8f294
commit b7bf86aab7
34 changed files with 1224 additions and 574 deletions

View File

@@ -1,11 +1,10 @@
import QtQuick
import QtQuick.Layouts
import Quickshell
import qs.Commons
import qs.Widgets
import qs.Services.UI
import qs.Services.System
import QtQuick
import QtQuick.Layouts
import Quickshell
Item {
id: root
@@ -18,43 +17,65 @@ Item {
property int sectionWidgetIndex: -1
property int sectionWidgetsCount: 0
// ---------- Configuration ----------
// ── Configuration ──
property var cfg: pluginApi?.pluginSettings || ({})
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
property string arrowType: cfg.arrowType || defaults.arrowType || "chevron"
property int minWidth: cfg.minWidth || defaults.minWidth || 0
property string arrowType: cfg.arrowType ?? defaults.arrowType
property bool useCustomColors: cfg.useCustomColors ?? defaults.useCustomColors
property bool showNumbers: cfg.showNumbers ?? defaults.showNumbers
property bool forceMegabytes: cfg.forceMegabytes ?? defaults.forceMegabytes
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 int byteThresholdActive: cfg.byteThresholdActive || defaults.byteThresholdActive || 1024
property real fontSizeModifier: cfg.fontSizeModifier || defaults.fontSizeModifier || 1
property real iconSizeModifier: cfg.iconSizeModifier || defaults.iconSizeModifier || 1
property real spacingInbetween: cfg.spacingInbetween || defaults.spacingInbetween || 0
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 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 horizontalNumbers: cfg.horizontalLayout ?? defaults.horizontalLayout
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
readonly property bool numbersVisible: root.showNumbers && barIsSpacious && !barIsVertical
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 : Math.max(contentRow.implicitWidth, minWidth)
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 ----------
// ── Widget ──
property real txSpeed: SystemStatService.txSpeed
property real rxSpeed: SystemStatService.rxSpeed
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
@@ -62,106 +83,146 @@ Item {
y: Style.pixelAlignCenter(parent.height, height)
width: root.contentWidth
height: root.contentHeight
color: root.useCustomColors && cfg.colorBackground || Style.capsuleColor
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.showNumbers && barIsSpacious && !barIsVertical
visible: root.numbersVisible && !root.horizontalNumbers
spacing: root.spacingInbetween
NText {
visible: true
text: convertBytes(root.txSpeed)
horizontalAlignment: Text.AlignRight
text: root.txSpeed
color: root.colorText
pointSize: Style.barFontSize * 0.75 * root.fontSizeModifier
pointSize: Style.barFontSize * root.fontSizeModifier
font.family: root.resolvedFontFamily
font.weight: root.resolvedFontWeight
font.italic: root.resolvedFontItalic
}
NText {
visible: true
text: convertBytes(root.rxSpeed)
horizontalAlignment: Text.AlignRight
text: root.rxSpeed
color: root.colorText
pointSize: Style.barFontSize * 0.75 * root.fontSizeModifier
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: root.txSpeed > root.byteThresholdActive ? root.colorTx : root.colorSilent
color: SystemStatService.txSpeed >= root.byteThresholdActive ? root.colorTx : root.colorSilent
pointSize: Style.fontSizeL * root.iconSizeModifier
}
NIcon {
icon: arrowType + "-down"
color: root.rxSpeed > root.byteThresholdActive ? root.colorRx : root.colorSilent
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 ----------
// ── 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
anchors.fill: parent
acceptedButtons: Qt.RightButton
onPressed: mouse => {
if (mouse.button == Qt.RightButton)
PanelService.showContextMenu(contextMenu, root, screen);
}
NPopupContextMenu {
id: contextMenu
model: [
{
"label": I18n.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);
}
}
}
}
// ---------- Utilities ----------
function convertBytes(bytesPerSecond) {
const KB = 1024;
const MB = KB * 1024;
let value;
let unit;
if (bytesPerSecond < MB & !root.forceMegabytes) {
value = bytesPerSecond / KB;
unit = "KB";
} else {
value = bytesPerSecond / MB;
unit = "MB";
onPressed: mouse => {
if (mouse.button == Qt.RightButton)
PanelService.showContextMenu(contextMenu, root, screen);
}
const text = value.toFixed(1) + " " + unit;
return text.padStart(10, " ");
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);
}
}
}
}
}

View File

@@ -0,0 +1,103 @@
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
readonly property var geometryPlaceholder: panelContent
readonly property bool allowAttach: true
property var pluginApi: null
property var cfg: pluginApi?.pluginSettings || ({})
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
property string arrowType: cfg.arrowType ?? defaults.arrowType
property real contentPreferredWidth: 440 * Style.uiScaleRatio
property real contentPreferredHeight: panelContent.implicitHeight + Style.marginL * 2
anchors.fill: parent
Component.onCompleted: {
if (pluginApi) {
Logger.i("NetworkIndicator", "Panel initialized");
}
}
ColumnLayout {
id: panelContent
anchors.fill: parent
anchors.margins: Style.marginL
NBox {
Layout.fillWidth: true
Layout.preferredHeight: 90 * Style.uiScaleRatio
ColumnLayout {
anchors.fill: parent
anchors.margins: Style.marginS
anchors.bottomMargin: Style.radiusM * 0.5
spacing: Style.marginXS
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
}
}
}
}
}

View File

@@ -1,13 +1,16 @@
# NetworkIndicator Plugin for Noctalia
A compact Noctalia bar widget that displays current network upload (TX) and download (RX) activity, with optional live throughput values.
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.
## 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.
- **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.
- **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.
@@ -19,25 +22,32 @@ This plugin is part of the `noctalia-plugins` repository.
Access the plugin settings in Noctalia to configure the following options:
- **Icon Type**: Select the icon style used for TX/RX: `arrow`, `arrow-narrow`, `caret`, `chevron`.
- **Minimum Widget Width**: Enforce a minimum width for the widget.
- **Show Active Threshold**: Set the traffic threshold in bytes per second (B/s) above which TX/RX is considered “active”.
- **Show Values**: Display formatted TX/RX speeds as numbers. This option is automatically hidden on vertical bars and when using “mini” density.
- **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 Colors**: When enabled, configure the following colors: TX Active, RX Active, RX/TX Inactive, and Text.
- **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.
## Usage
- Add the widget to your Noctalia bar.
- Hover over the widget to open the network graph panel.
- Right-click the widget to access settings.
- Configure the plugin settings as required.
## Requirements
- Noctalia 3.6.0 or later.
- Noctalia 4.7.6 or later.
## Technical Details
- The widget reads `SystemStatService.txSpeed` and `SystemStatService.rxSpeed`; therefore, the polling interval is determined by that service.
- 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.

View File

@@ -1,7 +1,8 @@
import QtQuick
import QtQuick.Layouts
import qs.Commons
import qs.Widgets
import qs.Services.System
import QtQuick
import QtQuick.Layouts
ColumnLayout {
id: root
@@ -13,294 +14,338 @@ ColumnLayout {
property var cfg: pluginApi?.pluginSettings || ({})
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
property string arrowType: cfg.arrowType || defaults.arrowType
property int minWidth: cfg.minWidth || defaults.minWidth
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
property bool useCustomColors: cfg.useCustomColors ?? defaults.useCustomColors
property bool showNumbers: cfg.showNumbers ?? defaults.showNumbers
property bool forceMegabytes: cfg.forceMegabytes ?? defaults.forceMegabytes
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
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 || Qt.alpha(Color.mOnSurfaceVariant, 0.3)
property color colorBackground: root.useCustomColors && cfg.colorBackground || Style.capsuleColor
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 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
property string barPosition: Settings.data.bar.position || "top"
property string barDensity: Settings.data.bar.density || "compact"
property bool barIsSpacious: root.barDensity != "mini"
property bool barIsVertical: root.barPosition === "left" || barPosition === "right"
spacing: Style.marginL
Component.onCompleted: {
Logger.i("NetworkIndicator", "Settings UI loaded");
}
property bool barIsSpacious: barDensity !== "mini"
property bool barIsVertical: barPosition === "left" || barPosition === "right"
function toIntOr(defaultValue, text) {
const v = parseInt(String(text).trim(), 10);
return isNaN(v) ? defaultValue : v;
}
// ---------- General ----------
RowLayout {
NComboBox {
label: pluginApi?.tr("settings.iconType.label")
description: pluginApi?.tr("settings.iconType.desc")
model: root.iconNames.map(function (n) {
return {
key: n,
name: n
};
})
currentKey: root.arrowType
onSelected: key => root.arrowType = key
function saveSettings() {
if (!pluginApi || !pluginApi.pluginSettings) {
Logger.e("NetworkIndicator", "Cannot save: pluginApi or pluginSettings is null");
return;
}
ColumnLayout {
spacing: -10.0 + root.spacingInbetween
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;
NIcon {
icon: arrowType + "-up"
color: Color.mSecondary
pointSize: Style.fontSizeL * root.iconSizeModifier
}
pluginApi.pluginSettings.useCustomFont = root.editUseCustomFont;
pluginApi.pluginSettings.customFontFamily = root.editCustomFontFamily;
pluginApi.pluginSettings.customFontBold = root.editCustomFontBold;
pluginApi.pluginSettings.customFontItalic = root.editCustomFontItalic;
NIcon {
icon: arrowType + "-down"
color: Color.mPrimary
pointSize: Style.fontSizeL * root.iconSizeModifier
}
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();
}
pluginApi.saveSettings();
Logger.i("NetworkIndicator", "Settings saved");
}
NTextInput {
label: pluginApi?.tr("settings.minWidth.label")
description: pluginApi?.tr("settings.minWidth.desc")
placeholderText: String(root.minWidth)
text: String(root.minWidth)
onTextChanged: root.minWidth = root.toIntOr(0, text)
Layout.rightMargin: Style.marginL
spacing: Style.marginL
// ── Icon ──
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
}))
onSelected: key => root.editArrowType = key
}
NDivider {
Layout.fillWidth: true
}
// ── General ──
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
onToggled: c => root.editShowNumbers = c
}
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
}
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.byteThresholdActive + " bytes"
text: String(root.byteThresholdActive)
onTextChanged: root.byteThresholdActive = root.toIntOr(0, text)
placeholderText: root.editByteThresholdActive + " bytes"
text: String(root.editByteThresholdActive)
onTextChanged: root.editByteThresholdActive = root.toIntOr(0, text)
}
NToggle {
label: pluginApi?.tr("settings.showNumbers.label")
description: pluginApi?.tr("settings.showNumbers.desc")
visible: barIsSpacious && !barIsVertical
checked: root.showNumbers
onToggled: function (checked) {
root.showNumbers = checked;
}
}
NToggle {
label: pluginApi?.tr("settings.forceMegabytes.label")
description: pluginApi?.tr("settings.forceMegabytes.desc")
visible: barIsSpacious && !barIsVertical
checked: root.forceMegabytes
onToggled: function (checked) {
root.forceMegabytes = checked;
}
}
NDivider {
visible: true
Layout.fillWidth: true
Layout.topMargin: Style.marginL
Layout.bottomMargin: Style.marginL
}
// ---------- Slider ----------
ColumnLayout {
spacing: Style.marginXXS
Layout.fillWidth: true
spacing: Style.marginXXS
NLabel {
label: pluginApi?.tr("settings.spacingInbetween.label")
description: pluginApi?.tr("settings.spacingInbetween.desc")
description: root.pluginApi?.tr("settings.spacingInbetween.desc")
label: root.pluginApi?.tr("settings.spacingInbetween.label")
}
NValueSlider {
Layout.fillWidth: true
from: -5
to: 5
stepSize: 1
value: root.spacingInbetween
onMoved: value => root.spacingInbetween = value
text: root.spacingInbetween.toFixed(0)
text: root.editSpacingInbetween.toFixed(0)
to: 5
value: root.editSpacingInbetween
onMoved: value => root.editSpacingInbetween = value
}
}
ColumnLayout {
spacing: Style.marginXXS
Layout.fillWidth: true
spacing: Style.marginXXS
NLabel {
label: pluginApi?.tr("settings.fontSizeModifier.label")
description: pluginApi?.tr("settings.fontSizeModifier.desc")
description: root.pluginApi?.tr("settings.fontSizeModifier.desc")
label: root.pluginApi?.tr("settings.fontSizeModifier.label")
}
NValueSlider {
Layout.fillWidth: true
from: 0.5
to: 1.5
stepSize: 0.05
value: root.fontSizeModifier
onMoved: value => root.fontSizeModifier = value
text: fontSizeModifier.toFixed(2)
text: root.editFontSizeModifier.toFixed(2)
to: 1.5
value: root.editFontSizeModifier
onMoved: value => root.editFontSizeModifier = value
}
}
ColumnLayout {
spacing: Style.marginXXS
Layout.fillWidth: true
spacing: Style.marginXXS
NLabel {
label: pluginApi?.tr("settings.iconSizeModifier.label")
description: pluginApi?.tr("settings.iconSizeModifier.desc")
description: root.pluginApi?.tr("settings.iconSizeModifier.desc")
label: root.pluginApi?.tr("settings.iconSizeModifier.label")
}
NValueSlider {
Layout.fillWidth: true
from: 0.5
to: 1.5
stepSize: 0.05
value: root.iconSizeModifier
onMoved: value => root.iconSizeModifier = value
text: root.iconSizeModifier.toFixed(2)
text: root.editIconSizeModifier.toFixed(2)
to: 1.5
value: root.editIconSizeModifier
onMoved: value => root.editIconSizeModifier = value
}
}
NDivider {
visible: true
Layout.fillWidth: true
Layout.topMargin: Style.marginL
Layout.bottomMargin: Style.marginL
}
// ---------- Colors ----------
// ── Font ──
NToggle {
label: pluginApi?.tr("settings.useCustomColors.label")
description: pluginApi?.tr("settings.useCustomColors.desc")
checked: root.useCustomColors
onToggled: function (checked) {
root.useCustomColors = checked;
}
checked: root.editUseCustomFont
defaultValue: defaults.useCustomFont ?? false
description: root.pluginApi?.tr("settings.useCustomFont.desc")
label: root.pluginApi?.tr("settings.useCustomFont.label")
onToggled: c => root.editUseCustomFont = c
}
ColumnLayout {
visible: root.useCustomColors
visible: root.editUseCustomFont
Layout.fillWidth: true
spacing: Style.marginL
RowLayout {
NLabel {
label: pluginApi?.tr("settings.colorTx.label")
description: pluginApi?.tr("settings.colorTx.desc")
Layout.alignment: Qt.AlignTop
}
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
NColorPicker {
selectedColor: root.colorTx
onColorSelected: color => root.colorTx = color
onSelected: key => {
root.editCustomFontFamily = (key === Qt.application.font.family) ? "" : key;
}
}
RowLayout {
NLabel {
label: pluginApi?.tr("settings.colorRx.label")
description: pluginApi?.tr("settings.colorRx.desc")
}
NToggle {
checked: root.editCustomFontBold
defaultValue: defaults.customFontBold ?? false
description: root.pluginApi?.tr("settings.customFontBold.desc")
label: root.pluginApi?.tr("settings.customFontBold.label")
NColorPicker {
selectedColor: root.colorRx
onColorSelected: color => root.colorRx = color
}
onToggled: c => root.editCustomFontBold = c
}
RowLayout {
NLabel {
label: pluginApi?.tr("settings.colorSilent.label")
description: pluginApi?.tr("settings.colorSilent.desc")
}
NToggle {
checked: root.editCustomFontItalic
defaultValue: defaults.customFontItalic ?? false
description: root.pluginApi?.tr("settings.customFontItalic.desc")
label: root.pluginApi?.tr("settings.customFontItalic.label")
NColorPicker {
selectedColor: root.colorSilent
onColorSelected: color => root.colorSilent = color
}
}
RowLayout {
NLabel {
label: pluginApi?.tr("settings.colorText.label")
description: pluginApi?.tr("settings.colorText.desc")
}
NColorPicker {
selectedColor: root.colorText
onColorSelected: color => root.colorText = color
}
}
RowLayout {
NLabel {
label: pluginApi?.tr("settings.colorBackground.label")
description: pluginApi?.tr("settings.colorBackground.desc")
}
NColorPicker {
selectedColor: root.colorBackground
onColorSelected: color => root.colorBackground = color
}
onToggled: c => root.editCustomFontItalic = c
}
}
// ---------- Saving ----------
NDivider {
Layout.fillWidth: true
}
function saveSettings() {
if (!pluginApi) {
Logger.e("NetworkIndicator", "Cannot save settings: pluginApi is null");
return;
// ── 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
}
}
pluginApi.pluginSettings.useCustomColors = root.useCustomColors;
pluginApi.pluginSettings.showNumbers = root.showNumbers;
pluginApi.pluginSettings.forceMegabytes = root.forceMegabytes;
RowLayout {
NLabel {
Layout.alignment: Qt.AlignTop
description: root.pluginApi?.tr("settings.colorRx.desc")
label: root.pluginApi?.tr("settings.colorRx.label")
}
pluginApi.pluginSettings.arrowType = root.arrowType;
pluginApi.pluginSettings.minWidth = root.minWidth;
pluginApi.pluginSettings.byteThresholdActive = root.byteThresholdActive;
pluginApi.pluginSettings.fontSizeModifier = root.fontSizeModifier;
pluginApi.pluginSettings.iconSizeModifier = root.iconSizeModifier;
pluginApi.pluginSettings.spacingInbetween = root.spacingInbetween;
NColorPicker {
selectedColor: root.editColorRx
if (root.useCustomColors) {
pluginApi.pluginSettings.colorSilent = root.colorSilent.toString();
pluginApi.pluginSettings.colorTx = root.colorTx.toString();
pluginApi.pluginSettings.colorRx = root.colorRx.toString();
pluginApi.pluginSettings.colorText = root.colorText.toString();
pluginApi.pluginSettings.colorBackground = root.colorBackground.toString();
onColorSelected: color => root.editColorRx = color
}
}
pluginApi.saveSettings();
RowLayout {
NLabel {
Layout.alignment: Qt.AlignTop
description: root.pluginApi?.tr("settings.colorSilent.desc")
label: root.pluginApi?.tr("settings.colorSilent.label")
}
Logger.i("NetworkIndicator", "Settings saved successfully");
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
}
}
}
}

View File

@@ -1,13 +1,12 @@
{
"actions": {
"widget-settings": "Widget-Einstellungen"
},
"settings": {
"byteThresholdActive": {
"desc": "Aktivitätsschwellwert in Byte pro Sekunde (B/s) festlegen.",
"label": "Aktivitätsschwellwert anzeigen"
},
"colorBackground": {
"desc": "Hintergrundfarbe festlegen.",
"label": "Hintergrund"
},
"colorRx": {
"desc": "Symbolfarbe für Download (RX), wenn der Schwellwert überschritten ist.",
"label": "RX aktiv"
@@ -24,26 +23,40 @@
"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"
},
"customFontFamily": {
"desc": "Schriftart für die Geschwindigkeitswerte wählen.",
"label": "Schriftart",
"placeholder": "Schriftart auswählen",
"searchPlaceholder": "Schriften suchen…"
},
"customFontItalic": {
"desc": "Geschwindigkeitswerte kursiv darstellen.",
"label": "Kursiv"
},
"fontSizeModifier": {
"desc": "Schriftgröße relativ zum Standard skalieren.",
"label": "Schriftgrößen-Faktor"
},
"forceMegabytes": {
"desc": "Alle Verkehrs­werte in MB anzeigen, statt bei geringer Nutzung auf KB zu wechseln.",
"label": "Immer Megabyte (MB) verwenden"
"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 auswählen",
"desc": "Symbolstil für die TX/RX-Anzeigen auswählen.",
"label": "Symboltyp"
},
"minWidth": {
"desc": "Mindestbreite für das Widget festlegen (in px).",
"label": "Minimale Widget-Breite"
},
"showNumbers": {
"desc": "Aktuelle RX/TX-Geschwindigkeiten als Zahlen anzeigen.",
"label": "Werte anzeigen"
@@ -55,6 +68,10 @@
"useCustomColors": {
"desc": "Eigene Farben statt der Standard-Themefarben verwenden.",
"label": "Eigene Farben"
},
"useCustomFont": {
"desc": "Standardschriftart für Geschwindigkeitswerte überschreiben.",
"label": "Eigene Schriftart"
}
}
}

View File

@@ -1,13 +1,12 @@
{
"actions": {
"widget-settings": "Widget settings"
},
"settings": {
"byteThresholdActive": {
"desc": "Set the activity threshold in bytes per second (B/s).",
"label": "Show Active Threshold"
},
"colorBackground": {
"desc": "Set the background color for the widget.",
"label": "Background"
},
"colorRx": {
"desc": "Set the download (RX) icon color when above the threshold.",
"label": "RX Active"
@@ -24,13 +23,31 @@
"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"
},
"customFontFamily": {
"desc": "Choose a font for the speed values.",
"label": "Font",
"placeholder": "Select a font",
"searchPlaceholder": "Search fonts…"
},
"customFontItalic": {
"desc": "Render speed values in italic.",
"label": "Italic"
},
"fontSizeModifier": {
"desc": "Scale the text size relative to the default.",
"label": "Font Size Modifier"
},
"forceMegabytes": {
"desc": "Show all traffic values in MB instead of switching to KB for low usage.",
"label": "Force megabytes (MB)"
"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.",
@@ -40,10 +57,6 @@
"desc": "Choose the icon style used for the TX/RX indicators.",
"label": "Icon Type"
},
"minWidth": {
"desc": "Set a minimum width for the widget (in px).",
"label": "Minimum Widget Width"
},
"showNumbers": {
"desc": "Display the current RX/TX speeds as numbers.",
"label": "Show Values"
@@ -55,6 +68,10 @@
"useCustomColors": {
"desc": "Enable custom colors instead of theme defaults.",
"label": "Custom Colors"
},
"useCustomFont": {
"desc": "Override the default font for speed values.",
"label": "Custom Font"
}
}
}

View File

@@ -1,13 +1,12 @@
{
"actions": {
"widget-settings": "Configuración del widget"
},
"settings": {
"byteThresholdActive": {
"desc": "Establecer el umbral de actividad en bytes por segundo (B/s).",
"label": "Mostrar umbral activo"
},
"colorBackground": {
"desc": "Establecer el color de fondo para el widget.",
"label": "Antecedentes"
},
"colorRx": {
"desc": "Establecer el color del icono de descarga (RX) cuando esté por encima del umbral.",
"label": "RX Activo"
@@ -24,13 +23,31 @@
"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"
},
"customFontFamily": {
"desc": "Elegir una fuente para los valores de velocidad.",
"label": "Fuente",
"placeholder": "Seleccionar fuente",
"searchPlaceholder": "Buscar fuentes…"
},
"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"
},
"forceMegabytes": {
"desc": "Mostrar todos los valores de tráfico en MB en lugar de cambiar a KB para bajo uso.",
"label": "Forzar megabytes (MB)"
"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.",
@@ -40,10 +57,6 @@
"desc": "Elige el estilo de icono utilizado para los indicadores TX/RX.",
"label": "Tipo de icono"
},
"minWidth": {
"desc": "Establecer un ancho mínimo para el widget (en px).",
"label": "Ancho mínimo del widget"
},
"showNumbers": {
"desc": "Mostrar las velocidades actuales de RX/TX como números.",
"label": "Mostrar valores"
@@ -55,6 +68,10 @@
"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"
}
}
}

View File

@@ -1,13 +1,12 @@
{
"actions": {
"widget-settings": "Paramètres du widget"
},
"settings": {
"byteThresholdActive": {
"desc": "Définir le seuil d'activité en octets par seconde (o/s).",
"label": "Afficher le seuil actif"
},
"colorBackground": {
"desc": "Définir la couleur d'arrière-plan du widget.",
"label": "Contexte"
},
"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"
@@ -18,19 +17,37 @@
},
"colorText": {
"desc": "Définir la couleur du texte utilisée pour les valeurs RX et TX.",
"label": "I am unable to help with that, as there is no text provided to translate. Please provide the text you would like translated."
"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"
},
"customFontFamily": {
"desc": "Choisir une police pour les valeurs de vitesse.",
"label": "Police",
"placeholder": "Sélectionner une police",
"searchPlaceholder": "Rechercher des polices…"
},
"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"
},
"forceMegabytes": {
"desc": "Afficher toutes les valeurs de trafic en Mo au lieu de passer en Ko pour une faible utilisation.",
"label": "Forcer les mégaoctets (Mo)"
"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.",
@@ -40,10 +57,6 @@
"desc": "Choisissez le style d'icône utilisé pour les indicateurs TX/RX.",
"label": "Type d'icône"
},
"minWidth": {
"desc": "Définir une largeur minimale pour le widget (en px).",
"label": "Largeur minimale du widget"
},
"showNumbers": {
"desc": "Afficher les vitesses RX/TX actuelles sous forme de nombres.",
"label": "Afficher les valeurs"
@@ -55,6 +68,10 @@
"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"
}
}
}

View File

@@ -1,13 +1,12 @@
{
"actions": {
"widget-settings": "Widget beállítások"
},
"settings": {
"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"
},
"colorBackground": {
"desc": "Állítsa be a widget háttérszínét.",
"label": "Háttér"
},
"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"
@@ -18,19 +17,37 @@
},
"colorText": {
"desc": "Állítsa be az RX és TX értékekhez használt szövegszínt.",
"label": "Általános"
"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"
},
"customFontFamily": {
"desc": "Válasszon betűtípust a sebességértékekhez.",
"label": "Betűtípus",
"placeholder": "Betűtípus kiválasztása",
"searchPlaceholder": "Betűtípusok keresése…"
},
"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ó"
},
"forceMegabytes": {
"desc": "Az összes forgalmi értéket MB-ban mutassa, ahelyett, hogy alacsony használat esetén KB-ra váltana.",
"label": "Megabájt (MB) kényszerítése"
"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.",
@@ -40,10 +57,6 @@
"desc": "Válaszd ki az TX/RX indikátorokhoz használt ikonkészletet.",
"label": "Ikon típusa"
},
"minWidth": {
"desc": "Állítson be egy minimális szélességet a widget számára (px-ben).",
"label": "Minimum Widget Szélesség"
},
"showNumbers": {
"desc": "A pillanatnyi RX/TX sebességek megjelenítése számként.",
"label": "Értékek megjelenítése"
@@ -55,6 +68,10 @@
"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"
}
}
}

View File

@@ -1,60 +1,77 @@
{
"actions": {
"widget-settings": "Impostazioni widget"
},
"settings": {
"byteThresholdActive": {
"desc": "Imposta la soglia di attività in byte al secondo (B/s).",
"label": "Zeige Aktive Schwelle"
},
"colorBackground": {
"desc": "Imposta il colore di sfondo per il widget.",
"label": "Hintergrund"
"label": "Mostra soglia attiva"
},
"colorRx": {
"desc": "Imposta il colore dell'icona di download (RX) quando è sopra la soglia.",
"label": "RX Aktiv"
"desc": "Imposta il colore dell'icona di download (RX) quando sopra la soglia.",
"label": "RX Attivo"
},
"colorSilent": {
"desc": "Imposta il colore dell'icona quando il traffico è al di sotto della soglia.",
"label": "RX/TX Neaktivan"
"desc": "Imposta il colore dell'icona quando il traffico è sotto la soglia.",
"label": "RX/TX Inattivo"
},
"colorText": {
"desc": "Imposta il colore del testo utilizzato sia per i valori RX che TX.",
"label": "Please provide the English text you would like me to translate. I need the text to be able to provide the translation."
"desc": "Imposta il colore del testo utilizzato per i valori RX e TX.",
"label": "Testo"
},
"colorTx": {
"desc": "Määritä lähetyskuvakkeen (TX) väri, kun raja-arvo ylittyy.",
"label": "TX Aktibo"
"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"
},
"customFontFamily": {
"desc": "Scegli un font per i valori di velocità.",
"label": "Font",
"placeholder": "Seleziona un font",
"searchPlaceholder": "Cerca font…"
},
"customFontItalic": {
"desc": "Visualizza i valori di velocità in corsivo.",
"label": "Corsivo"
},
"fontSizeModifier": {
"desc": "Skala textstorleken relativt standardstorleken.",
"label": "Modifikator veličine fonta"
"desc": "Scala la dimensione del testo rispetto al valore predefinito.",
"label": "Modificatore dimensione font"
},
"forceMegabytes": {
"desc": "Zeigen Sie alle Verkehrswerte in MB an, anstatt bei geringer Nutzung auf KB umzuschalten.",
"label": "Megabajtów siłą (MB)"
"horizontalLayout": {
"desc": "Posiziona i valori TX e RX fianco a fianco invece che impilati.",
"label": "Layout orizzontale"
},
"iconSizeModifier": {
"desc": "Mérje a ikon méretét a alapértelmezetthez képest.",
"label": "Modifikator za veličinu ikone"
"desc": "Scala la dimensione dell'icona rispetto al valore predefinito.",
"label": "Modificatore dimensione icona"
},
"iconType": {
"desc": "Alege stilul pictogramei folosit pentru indicatorii TX/RX.",
"label": "Tip ikonë"
},
"minWidth": {
"desc": "Imposta una larghezza minima per il widget (in px).",
"label": "Breite des minimalen Widgets"
"desc": "Scegli lo stile dell'icona usata per gli indicatori TX/RX.",
"label": "Tipo icona"
},
"showNumbers": {
"desc": "Zeige die aktuellen RX/TX-Geschwindigkeiten als Zahlen an.",
"label": "Ipakita ang mga Halaga"
"desc": "Visualizza le velocità RX/TX attuali come numeri.",
"label": "Mostra valori"
},
"spacingInbetween": {
"desc": "Rregulloje hapësirën midis elementeve RX/TX.",
"label": "Vertikaler Abstand"
"desc": "Regola lo spazio tra gli elementi RX/TX.",
"label": "Spaziatura verticale"
},
"useCustomColors": {
"desc": "Aktiviere benutzerdefinierte Farben anstelle der Standardfarben des Designs.",
"label": "Ngjyra të personalizuara"
"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"
}
}
}

View File

@@ -1,16 +1,15 @@
{
"actions": {
"widget-settings": "ウィジェット設定"
},
"settings": {
"byteThresholdActive": {
"desc": "アクティビティの閾値をバイト毎秒 (B/s) で設定します。",
"label": "アクティブなしきい値を表示"
},
"colorBackground": {
"desc": "ウィジェットの背景色を設定します。",
"label": "背景"
"label": "アクティブ値を表示"
},
"colorRx": {
"desc": "閾値を超えた場合のダウンロード (RX) アイコンの色を設定します。",
"label": "RXアクティブ"
"label": "RX アクティブ"
},
"colorSilent": {
"desc": "トラフィックが閾値を下回った場合に、アイコンの色を設定します。",
@@ -18,19 +17,37 @@
},
"colorText": {
"desc": "RX と TX の両方の値に使用するテキストの色を設定します。",
"label": "申し訳ありませんが、翻訳するテキストが提供されていません。テキストを入力してください。"
"label": "テキスト"
},
"colorTx": {
"desc": "閾値を超えた場合のアップロード (TX) アイコンの色を設定します。",
"label": "TXアクティブ"
"label": "TX アクティブ"
},
"contentMargin": {
"desc": "ウィジェットコンテンツの両サイドの水平パディング。",
"label": "コンテンツマージン"
},
"customFontBold": {
"desc": "速度値を太字で表示。",
"label": "太字"
},
"customFontFamily": {
"desc": "速度値に使用するフォントを選択してください。",
"label": "フォント",
"placeholder": "フォントを選択",
"searchPlaceholder": "フォントを検索…"
},
"customFontItalic": {
"desc": "速度値を斜体で表示。",
"label": "斜体"
},
"fontSizeModifier": {
"desc": "テキストのサイズをデフォルトを基準に調整します。",
"label": "フォントサイズ変更"
},
"forceMegabytes": {
"desc": "低い使用量でもKBに切り替えずに、すべてのトラフィック値をMBで表示する。",
"label": "メガバイトを強制的に実行する"
"horizontalLayout": {
"desc": "TXとRXの値を縦並びではなく横並びで表示。",
"label": "水平レイアウト"
},
"iconSizeModifier": {
"desc": "デフォルトに対するアイコンのサイズを調整します。",
@@ -40,21 +57,21 @@
"desc": "TX/RXインジケーターに使用するアイコンのスタイルを選択してください。",
"label": "アイコンの種類"
},
"minWidth": {
"desc": "ウィジェットの最小幅をpxで設定します。",
"label": "ウィジェットの最小幅"
},
"showNumbers": {
"desc": "現在のRX/TX速度を数値で表示する。",
"desc": "現在のRX/TX速度を数値で表示。",
"label": "値を表示"
},
"spacingInbetween": {
"desc": "RX/TX要素間の間隔を調整してください。",
"label": "垂直方向の間隔"
"label": "垂直間隔"
},
"useCustomColors": {
"desc": "テーマのデフォルトの代わりにカスタムカラーを有効にする。",
"label": "カスタムカラー"
},
"useCustomFont": {
"desc": "速度値のデフォルトフォントを上書き。",
"label": "カスタムフォント"
}
}
}

View File

@@ -1,15 +1,14 @@
{
"actions": {
"widget-settings": "Mîhengên widgetê"
},
"settings": {
"byteThresholdActive": {
"desc": "Sînorê çalakiyê bi bayt di duyemîn de (B/s) destnîşan bike.",
"label": "Derheqê Çalakîyê Nîşan Bide"
},
"colorBackground": {
"desc": "Rengê paşxaneyê ji bo widgetê destnîşan bike.",
"label": "Paşxan"
},
"colorRx": {
"desc": "Dema rengê îkona daxistinê (RX) dema ku ji tixûbê derbas dibe, destnîşan bike.",
"desc": "Rengê îkona daxistinê (RX) dema ku ji tixûbê derbas dibe, destnîşan bike.",
"label": "RX Çalak"
},
"colorSilent": {
@@ -18,19 +17,37 @@
},
"colorText": {
"desc": "Rengê nivîsê yê ku ji bo nirxên RX û TX tê bikaranîn, destnîşan bike.",
"label": "Bar Height"
"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"
},
"customFontFamily": {
"desc": "Ji bo nirxên lezê fontek hilbijêre.",
"label": "Font",
"placeholder": "Fontek hilbijêre",
"searchPlaceholder": "Font lêgerî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"
},
"forceMegabytes": {
"desc": "Hemû nirxên trafîkê bi MB nîşan bide, li şûna ku ji bo bikaranîna kêm veguhere KB.",
"label": "Meqsed mekabyte (MB)"
"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.",
@@ -40,21 +57,21 @@
"desc": "Şêwaza îkonê ya ku ji bo nîşanderên TX/RX tê bikaranîn hilbijêre.",
"label": "Cureyê Îkonê"
},
"minWidth": {
"desc": "Ji bo widget firehiyeke kêmtirin (bi px) diyar bike.",
"label": "Firehiya Herî Kêm a Wîcêtê"
},
"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"
"label": "Valahiya_Rastkirin"
},
"useCustomColors": {
"desc": "Çalak bike rengên xwerû li şûna rengên xwerû yên temayê.",
"label": "Rengên Xweser"
},
"useCustomFont": {
"desc": "Fontê DEFAULT ji bo nirxên lezê binpê kirin.",
"label": "Fontê Xweser"
}
}
}

View File

@@ -1,13 +1,12 @@
{
"actions": {
"widget-settings": "Widget-instellingen"
},
"settings": {
"byteThresholdActive": {
"desc": "Stel de activiteitsdrempel in bytes per seconde (B/s) in.",
"label": "Actieve drempel weergeven"
},
"colorBackground": {
"desc": "Stel de achtergrondkleur voor de widget in.",
"label": "Achtergrond"
},
"colorRx": {
"desc": "Stel de kleur van het download (RX) pictogram in wanneer deze boven de drempelwaarde ligt.",
"label": "RX Actief"
@@ -22,15 +21,33 @@
},
"colorTx": {
"desc": "Stel de kleur van het upload (TX) icoon in wanneer boven de drempelwaarde.",
"label": "TX Active"
"label": "TX Actief"
},
"contentMargin": {
"desc": "Horizontale padding aan beide zijden van de widget-inhoud.",
"label": "Inhoudmarge"
},
"customFontBold": {
"desc": "Geef snelheidswaarden vetgedrukt weer.",
"label": "Vet"
},
"customFontFamily": {
"desc": "Kies een lettertype voor de snelheidswaarden.",
"label": "Lettertype",
"placeholder": "Selecteer lettertype",
"searchPlaceholder": "Lettertypen zoeken…"
},
"customFontItalic": {
"desc": "Geef snelheidswaarden scheefgedrukt weer.",
"label": "Schuin"
},
"fontSizeModifier": {
"desc": "Schaal de tekstgrootte ten opzichte van de standaard.",
"label": "Lettergrootte aanpassing"
},
"forceMegabytes": {
"desc": "Toon alle verkeerswaarden in MB in plaats van over te schakelen naar KB bij laag gebruik.",
"label": "Forceer megabytes (MB)"
"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.",
@@ -40,10 +57,6 @@
"desc": "Kies de pictogramstijl die gebruikt wordt voor de TX/RX-indicatoren.",
"label": "Icoontype"
},
"minWidth": {
"desc": "Stel een minimale breedte in voor de widget (in px).",
"label": "Minimale widgetbreedte"
},
"showNumbers": {
"desc": "Toon de huidige RX/TX snelheden als getallen.",
"label": "Waarden weergeven"
@@ -55,6 +68,10 @@
"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"
}
}
}

View File

@@ -1,13 +1,12 @@
{
"actions": {
"widget-settings": "Ustawienia widgetu"
},
"settings": {
"byteThresholdActive": {
"desc": "Ustaw próg aktywności w bajtach na sekundę (B/s).",
"label": "Pokaż Aktywny Próg"
},
"colorBackground": {
"desc": "Ustaw kolor tła widżetu.",
"label": "Tło"
},
"colorRx": {
"desc": "Ustaw kolor ikony pobierania (RX), gdy wartość przekroczy próg.",
"label": "RX Aktywny"
@@ -18,19 +17,37 @@
},
"colorText": {
"desc": "Ustaw kolor tekstu używany zarówno dla wartości RX, jak i TX.",
"label": "Uptime"
"label": "Tekst"
},
"colorTx": {
"desc": "Ustaw kolor ikony wysyłania (TX), gdy przekroczony zostanie próg.",
"label": "Aktywny TX"
"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"
},
"customFontFamily": {
"desc": "Wybierz czcionkę dla wartości prędkości.",
"label": "Czcionka",
"placeholder": "Wybierz czcionkę",
"searchPlaceholder": "Szukaj czcionek…"
},
"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"
},
"forceMegabytes": {
"desc": "Wyświetlaj wszystkie wartości transferu w MB zamiast przełączać się na KB przy niskim użyciu.",
"label": "Wymuś megabajty (MB)"
"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.",
@@ -40,10 +57,6 @@
"desc": "Wybierz styl ikony używany dla wskaźników TX/RX.",
"label": "Typ Ikony"
},
"minWidth": {
"desc": "Ustaw minimalną szerokość widżetu (w px).",
"label": "Minimalna szerokość widżetu"
},
"showNumbers": {
"desc": "Wyświetlaj aktualne prędkości RX/TX jako liczby.",
"label": "Pokaż wartości"
@@ -55,6 +68,10 @@
"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"
}
}
}

View File

@@ -1,13 +1,12 @@
{
"actions": {
"widget-settings": "Configurações do widget"
},
"settings": {
"byteThresholdActive": {
"desc": "Defina o limite de atividade em bytes por segundo (B/s).",
"label": "Mostrar Limiar Ativo"
},
"colorBackground": {
"desc": "Definir a cor de fundo do widget.",
"label": "Fundo"
},
"colorRx": {
"desc": "Defina a cor do ícone de download (RX) quando acima do limite.",
"label": "RX Ativo"
@@ -24,13 +23,31 @@
"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"
},
"customFontFamily": {
"desc": "Escolha uma fonte para os valores de velocidade.",
"label": "Fonte",
"placeholder": "Selecionar fonte",
"searchPlaceholder": "Pesquisar fontes…"
},
"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"
},
"forceMegabytes": {
"desc": "Mostrar todos os valores de tráfego em MB em vez de mudar para KB para baixo uso.",
"label": "Forçar megabytes (MB)"
"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.",
@@ -40,10 +57,6 @@
"desc": "Escolha o estilo do ícone usado para os indicadores TX/RX.",
"label": "Tipo de Ícone"
},
"minWidth": {
"desc": "Defina uma largura mínima para o widget (em px).",
"label": "Largura Mínima do Widget"
},
"showNumbers": {
"desc": "Exibir as velocidades atuais de RX/TX como números.",
"label": "Mostrar Valores"
@@ -55,6 +68,10 @@
"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"
}
}
}

View File

@@ -1,49 +1,62 @@
{
"actions": {
"widget-settings": "Настройки виджета"
},
"settings": {
"byteThresholdActive": {
"desc": "Установите порог активности в байтах в секунду (Б/с).",
"label": "Показать активный порог"
},
"colorBackground": {
"desc": "Установить цвет фона для виджета.",
"label": "Фон"
},
"colorRx": {
"desc": "Установить цвет значка загрузки (RX), когда он выше порогового значения.",
"label": "RX Active"
"desc": "Установите цвет значка загрузки (RX), когда он выше порогового значения.",
"label": "RX активен"
},
"colorSilent": {
"desc": "Установить цвет значка, когда трафик ниже порогового значения.",
"desc": "Установите цвет значка, когда трафик ниже порогового значения.",
"label": "RX/TX неактивны"
},
"colorText": {
"desc": "Установить цвет текста, используемый для значений RX и TX.",
"desc": "Установите цвет текста для значений RX и TX.",
"label": "Текст"
},
"colorTx": {
"desc": "Установить цвет значка загрузки (TX) при превышении порогового значения.",
"label": "TX Active"
"desc": "Установите цвет значка загрузки (TX) при превышении порогового значения.",
"label": "TX активен"
},
"contentMargin": {
"desc": "Горизонтальный отступ по обеим сторонам содержимого виджета.",
"label": "Отступ содержимого"
},
"customFontBold": {
"desc": "Отображать значения скорости жирным шрифтом.",
"label": "Жирный"
},
"customFontFamily": {
"desc": "Выберите шрифт для значений скорости.",
"label": "Шрифт",
"placeholder": "Выбрать шрифт",
"searchPlaceholder": "Поиск шрифтов…"
},
"customFontItalic": {
"desc": "Отображать значения скорости курсивом.",
"label": "Курсив"
},
"fontSizeModifier": {
"desc": "Изменить размер текста относительно размера по умолчанию.",
"label": "Изменение размера шрифта"
"desc": "Измените размер текста относительно размера по умолчанию.",
"label": "Модификатор размера шрифта"
},
"forceMegabytes": {
"desc": "Показывать все значения трафика в МБ, вместо переключения на КБ при низком использовании.",
"label": "Принудительно мегабайты (МБ)"
"horizontalLayout": {
"desc": "Разместите значения TX и RX рядом друг с другом, а не друг под другом.",
"label": "Горизонтальная раскладка"
},
"iconSizeModifier": {
"desc": "Изменить размер значка относительно размера по умолчанию.",
"label": "Изменение размера значков"
"desc": "Измените размер значка относительно размера по умолчанию.",
"label": "Модификатор размера значка"
},
"iconType": {
"desc": "Выберите стиль значков, используемых для индикаторов TX/RX.",
"desc": "Выберите стиль значков для индикаторов TX/RX.",
"label": "Тип значка"
},
"minWidth": {
"desc": "Установить минимальную ширину для виджета (в px).",
"label": "Минимальная ширина виджета"
},
"showNumbers": {
"desc": "Отображать текущие скорости RX/TX в виде чисел.",
"label": "Показать значения"
@@ -53,8 +66,12 @@
"label": "Вертикальный интервал"
},
"useCustomColors": {
"desc": "Включить пользовательские цвета вместо цветов темы по умолчанию.",
"desc": "Включите пользовательские цвета вместо цветов темы по умолчанию.",
"label": "Пользовательские цвета"
},
"useCustomFont": {
"desc": "Переопределите шрифт по умолчанию для значений скорости.",
"label": "Пользовательский шрифт"
}
}
}

View File

@@ -1,13 +1,12 @@
{
"actions": {
"widget-settings": "Widget Ayarları"
},
"settings": {
"byteThresholdActive": {
"desc": "Etkinlik eşiğini saniye başına bayt (B/s) cinsinden ayarlayın.",
"label": "Aktif Eşiği Göster"
},
"colorBackground": {
"desc": "Araç için arka plan rengini ayarla.",
"label": "Arka plan"
},
"colorRx": {
"desc": "Eşiğin üzerindeyken indirme (RX) simge rengini ayarla.",
"label": "RX Aktif"
@@ -24,13 +23,31 @@
"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"
},
"customFontFamily": {
"desc": "Hız değerleri için bir yazı tipi seçin.",
"label": "Yazı Tipi",
"placeholder": "Yazı tipi seçin",
"searchPlaceholder": "Yazı tipleri ara…"
},
"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"
},
"forceMegabytes": {
"desc": "Düşük kullanımda KB'a geçmek yerine tüm trafik değerlerini MB olarak göster.",
"label": "Megabayt (MB) zorla"
"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.",
@@ -40,10 +57,6 @@
"desc": "TX/RX göstergeleri için kullanılan simge stilini seçin.",
"label": "Simge Türü"
},
"minWidth": {
"desc": "Araç için minimum genişlik (piksel cinsinden) belirleyin.",
"label": "Minimum Widget Genişliği"
},
"showNumbers": {
"desc": "Mevcut RX/TX hızlarını sayı olarak görüntüle.",
"label": "Değerleri Göster"
@@ -55,6 +68,10 @@
"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"
}
}
}

View File

@@ -1,36 +1,53 @@
{
"actions": {
"widget-settings": "Налаштування віджета"
},
"settings": {
"byteThresholdActive": {
"desc": "Встановіть поріг активності в байтах на секунду (Б/с).",
"label": "Показати активний поріг"
},
"colorBackground": {
"desc": "Встановити колір фону для віджета.",
"label": "Тло"
},
"colorRx": {
"desc": "Встановити колір значка завантаження (RX), коли він перевищує поріг.",
"label": "RX Active"
"desc": "Встановіть колір значка завантаження (RX), коли він перевищує поріг.",
"label": "RX активний"
},
"colorSilent": {
"desc": "Встановити колір значка, коли трафік нижче порогового значення.",
"desc": "Встановіть колір значка, коли трафік нижче порогового значення.",
"label": "RX/TX неактивні"
},
"colorText": {
"desc": "Встановити колір тексту, який використовується для значень RX та TX.",
"desc": "Встановіть колір тексту, який використовується для значень RX та TX.",
"label": "Текст"
},
"colorTx": {
"desc": "Встановити колір піктограми завантаження (TX), коли значення перевищує поріг.",
"label": "TX Active"
"desc": "Встановіть колір піктограми завантаження (TX), коли значення перевищує поріг.",
"label": "TX активний"
},
"contentMargin": {
"desc": "Горизонтальний відступ з обох боків вмісту віджета.",
"label": "Відступ вмісту"
},
"customFontBold": {
"desc": "Відображати значення швидкості жирним шрифтом.",
"label": "Жирний"
},
"customFontFamily": {
"desc": "Оберіть шрифт для значень швидкості.",
"label": "Шрифт",
"placeholder": "Обрати шрифт",
"searchPlaceholder": "Пошук шрифтів…"
},
"customFontItalic": {
"desc": "Відображати значення швидкості курсивом.",
"label": "Курсив"
},
"fontSizeModifier": {
"desc": "Змінити розмір тексту відносно стандартного.",
"label": "Модифікатор розміру шрифту"
},
"forceMegabytes": {
"desc": "Показувати всі значення трафіку в МБ замість переходу на КБ для низького використання.",
"label": "Примусово мегабайти (МБ)"
"horizontalLayout": {
"desc": "Розмістити значення TX та RX поруч, а не один під одним.",
"label": "Горизонтальне розташування"
},
"iconSizeModifier": {
"desc": "Змінюйте розмір значка відносно стандартного.",
@@ -40,10 +57,6 @@
"desc": "Виберіть стиль іконок, що використовуються для індикаторів TX/RX.",
"label": "Тип іконки"
},
"minWidth": {
"desc": "Встановити мінімальну ширину для віджета (у пікселях).",
"label": "Мінімальна ширина віджета"
},
"showNumbers": {
"desc": "Показувати поточні швидкості RX/TX у вигляді чисел.",
"label": "Показати значення"
@@ -55,6 +68,10 @@
"useCustomColors": {
"desc": "Увімкнути власні кольори замість кольорів теми за замовчуванням.",
"label": "Користувацькі кольори"
},
"useCustomFont": {
"desc": "Перевизначити шрифт за замовчуванням для значень швидкості.",
"label": "Користувацький шрифт"
}
}
}

View File

@@ -1,20 +1,19 @@
{
"actions": {
"widget-settings": "小组件设置"
},
"settings": {
"byteThresholdActive": {
"desc": "设置活动阈值,单位为字节/秒 (B/s)。",
"label": "显示活动阈值"
},
"colorBackground": {
"desc": "设置小部件的背景颜色。",
"label": "背景"
},
"colorRx": {
"desc": "设置高于阈值时的下载RX图标颜色。",
"label": "RX Active"
"label": "RX 活跃"
},
"colorSilent": {
"desc": "当流量低于阈值时,设置图标颜色。",
"label": "RX/TX 无活动"
"label": "RX/TX 非活跃"
},
"colorText": {
"desc": "设置用于RX和TX值的文本颜色。",
@@ -22,28 +21,42 @@
},
"colorTx": {
"desc": "设置上传TX图标颜色当高于阈值时。",
"label": "TX Active"
"label": "TX 活跃"
},
"contentMargin": {
"desc": "小组件内容两侧的水平内边距。",
"label": "内容边距"
},
"customFontBold": {
"desc": "以粗体显示速度值。",
"label": "粗体"
},
"customFontFamily": {
"desc": "为速度值选择字体。",
"label": "字体",
"placeholder": "选择字体",
"searchPlaceholder": "搜索字体…"
},
"customFontItalic": {
"desc": "以斜体显示速度值。",
"label": "斜体"
},
"fontSizeModifier": {
"desc": "相对于默认值缩放文本大小。",
"label": "字体大小调整"
"label": "字体大小调整"
},
"forceMegabytes": {
"desc": "显示所有流量值以MB为单位而不是在低使用量时切换到KB。",
"label": "强制兆字节 (MB)"
"horizontalLayout": {
"desc": "将TX和RX值并排显示而不是堆叠。",
"label": "水平布局"
},
"iconSizeModifier": {
"desc": "相对于默认值缩放图标大小。",
"label": "图标大小修改器"
"label": "图标大小调整"
},
"iconType": {
"desc": "选择用于 TX/RX 指示器的图标样式。",
"label": "图标类型"
},
"minWidth": {
"desc": "设置小部件的最小宽度(以像素为单位)。",
"label": "最小部件宽度"
},
"showNumbers": {
"desc": "以数字形式显示当前的 RX/TX 速度。",
"label": "显示数值"
@@ -55,6 +68,10 @@
"useCustomColors": {
"desc": "启用自定义颜色,而非主题默认颜色。",
"label": "自定义颜色"
},
"useCustomFont": {
"desc": "覆盖速度值的默认字体。",
"label": "自定义字体"
}
}
}

View File

@@ -1,8 +1,8 @@
{
"id": "network-indicator",
"name": "Network Indicator",
"version": "1.0.7",
"minNoctaliaVersion": "3.7.5",
"version": "1.1.0",
"minNoctaliaVersion": "4.7.6",
"author": "tonigineer",
"license": "MIT",
"repository": "https://github.com/noctalia-dev/noctalia-plugins",
@@ -14,6 +14,7 @@
],
"entryPoints": {
"barWidget": "BarWidget.qml",
"panel": "Panel.qml",
"settings": "Settings.qml"
},
"dependencies": {
@@ -22,14 +23,16 @@
"metadata": {
"defaultSettings": {
"arrowType": "caret",
"byteThresholdActive": 1024,
"fontSizeModifier": 1.0,
"forceMegabytes": false,
"byteThresholdActive": 5000,
"fontSizeModifier": 0.75,
"iconSizeModifier": 1.0,
"minWidth": 0,
"showNumbers": true,
"spacingInbetween": 0,
"useCustomColors": false
"useCustomColors": false,
"useCustomFont": false,
"customFontBold": false,
"customFontItalic": false,
"horizontalLayout": false
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 459 KiB

After

Width:  |  Height:  |  Size: 61 KiB

View File

@@ -31,6 +31,7 @@ Item {
property bool enableToast: cfg.enableToast ?? defaults.enableToast ?? true
property string activeColorKey: cfg.activeColor ?? defaults.activeColor ?? "primary"
property string micFilterRegex: cfg.micFilterRegex ?? defaults.micFilterRegex ?? ""
property string camFilterRegex: cfg.camFilterRegex ?? defaults.camFilterRegex ?? ""
PwObjectTracker {
objects: Pipewire.ready ? Pipewire.nodes.values : []
@@ -44,8 +45,25 @@ Item {
onStreamFinished: {
var appsString = this.text.trim();
var apps = appsString.length > 0 ? appsString.split(',') : [];
root.camApps = apps;
root.camActive = apps.length > 0;
var filterRegex = null;
if (root.camFilterRegex && root.camFilterRegex.length > 0) {
try {
filterRegex = new RegExp(root.camFilterRegex);
} catch (e) {
Logger.w("PrivacyIndicator: Invalid camFilterRegex:", root.camFilterRegex);
}
}
var appNames = [];
for (var i = 0; i < apps.length; i++) {
var appName = apps[i];
if (filterRegex && appName && filterRegex.test(appName)) continue;
if (appName && appNames.indexOf(appName) === -1) appNames.push(appName);
}
root.camApps = appNames;
root.camActive = appNames.length > 0;
}
}
}
@@ -265,7 +283,7 @@ Item {
property bool oldMicActive: false
onMicActiveChanged: {
if (enableToast && micActive && !oldMicActive) {
ToastService.showNotice(pluginApi?.tr("toast.mic-on") || "Microphone is active", "", "microphone");
ToastService.showNotice(pluginApi?.tr("toast.mic-on"), "", "microphone");
}
oldMicActive = micActive
}
@@ -273,7 +291,7 @@ Item {
property bool oldCamActive: false
onCamActiveChanged: {
if (enableToast && camActive && !oldCamActive) {
ToastService.showNotice(pluginApi?.tr("toast.cam-on") || "Camera is active", "", "camera");
ToastService.showNotice(pluginApi?.tr("toast.cam-on"), "", "camera");
}
oldCamActive = camActive
}
@@ -285,7 +303,7 @@ Item {
property bool oldScrActive: false
onScrActiveChanged: {
if (enableToast && scrActive && !oldScrActive) {
ToastService.showNotice(pluginApi?.tr("toast.screen-on") || "Screen sharing is active", "", "screen-share");
ToastService.showNotice(pluginApi?.tr("toast.screen-on"), "", "screen-share");
}
oldScrActive = scrActive
}

View File

@@ -16,6 +16,7 @@ Item {
property real contentPreferredHeight: 450 * Style.uiScaleRatio
readonly property var mainInstance: pluginApi?.mainInstance
readonly property bool allowAttach: true
Rectangle {
id: panelContainer
@@ -46,7 +47,7 @@ Item {
NText {
Layout.fillWidth: true
text: pluginApi?.tr("history.title") || "Access History"
text: pluginApi?.tr("history.title")
font.weight: Style.fontWeightBold
pointSize: Style.fontSizeL
color: Color.mOnSurface
@@ -154,7 +155,7 @@ Item {
NText {
Layout.alignment: Qt.AlignHCenter
visible: (!mainInstance || mainInstance.accessHistory.length === 0)
text: pluginApi?.tr("history.empty") || "No recent access"
text: pluginApi?.tr("history.empty")
color: Qt.alpha(Color.mOnSurface, 0.5)
pointSize: Style.fontSizeM
Layout.topMargin: Style.marginL

View File

@@ -18,6 +18,7 @@ ColumnLayout {
property string activeColor: cfg.activeColor ?? defaults.activeColor ?? "primary"
property string inactiveColor: cfg.inactiveColor ?? defaults.inactiveColor ?? "none"
property string micFilterRegex: cfg.micFilterRegex ?? defaults.micFilterRegex
property string camFilterRegex: cfg.camFilterRegex ?? defaults.camFilterRegex
spacing: Style.marginL
@@ -102,12 +103,21 @@ ColumnLayout {
NTextInput {
Layout.fillWidth: true
label: pluginApi?.tr("settings.micFilterRegex.label") || "Microphone filter regex"
description: pluginApi?.tr("settings.micFilterRegex.desc") || "Regex pattern to filter out microphone applications"
label: pluginApi?.tr("settings.micFilterRegex.label")
description: pluginApi?.tr("settings.micFilterRegex.desc")
placeholderText: "effect_input.rnnoise|easyeffects"
text: root.micFilterRegex
onTextChanged: root.micFilterRegex = text
}
NTextInput {
Layout.fillWidth: true
label: pluginApi?.tr("settings.camFilterRegex.label")
description: pluginApi?.tr("settings.camFilterRegex.desc")
placeholderText: "droidcam"
text: root.camFilterRegex
onTextChanged: root.camFilterRegex = text
}
}
function saveSettings() {
@@ -123,6 +133,7 @@ ColumnLayout {
pluginApi.pluginSettings.activeColor = root.activeColor;
pluginApi.pluginSettings.inactiveColor = root.inactiveColor;
pluginApi.pluginSettings.micFilterRegex = root.micFilterRegex;
pluginApi.pluginSettings.camFilterRegex = root.camFilterRegex;
pluginApi.saveSettings();

View File

@@ -1,9 +1,24 @@
{
"menu": {
"settings": "Widget Einstellungen"
},
"settings": {
"activeColor": {
"desc": "Farbe der Symbole, wenn sie aktiv sind.",
"label": "Aktive Farbsymbol"
},
"hideInactive": {
"desc": "Mikrofon-, Kamera- und Bildschirmsymbole ausblenden, wenn sie inaktiv sind.",
"label": "Inaktive Zustände ausblenden"
},
"enableToast": {
"desc": "Zeige Toast Mitteilungen an, wenn sich einer der Zustände ändert.",
"label": "Aktiviere Toast Mitteilungen"
},
"inactiveColor": {
"desc": "Farbe der Symbole, wenn sie inaktiv sind.",
"label": "Inaktive Farbsymbol"
},
"iconSpacing": {
"desc": "Den Abstand zwischen den Symbolen festlegen.",
"label": "Symbolabstand"
@@ -12,13 +27,9 @@
"desc": "Alle äußeren Ränder des Widgets entfernen.",
"label": "Ränder entfernen"
},
"activeColor": {
"desc": "Farbe der Symbole, wenn sie aktiv sind.",
"label": "Aktive Farbsymbol"
},
"inactiveColor": {
"desc": "Farbe der Symbole, wenn sie inaktiv sind.",
"label": "Inaktive Farbsymbol"
"micFilterRegex": {
"desc": "Regex Muster zum Herausfiltern von Mikrofon-Apps. Entsprechende Apps werden vollständig von der Erkennung ausgeschlossen.",
"label": "Regex für Mikrofonfilter"
}
},
"tooltip": {
@@ -31,9 +42,6 @@
"mic-on": "Mikrofon ist aktiv",
"screen-on": "Bildschirmfreigabe ist aktiv"
},
"menu": {
"settings": "Widget-Einstellungen"
},
"history": {
"title": "Zugriffsverlauf",
"empty": "Kein kürzlicher Zugriff",

View File

@@ -30,6 +30,10 @@
"micFilterRegex": {
"desc": "Regex pattern to filter out microphone applications. Matching apps are completely excluded from detection.",
"label": "Microphone filter regex"
},
"camFilterRegex": {
"desc": "Regex pattern to filter out camera applications. Matching apps are completely excluded from detection.",
"label": "Camera filter regex"
}
},
"tooltip": {
@@ -51,4 +55,4 @@
"stopped": "Stopped"
}
}
}
}

View File

@@ -1,9 +1,24 @@
{
"menu": {
"settings": "Paramètres du widget"
},
"settings": {
"activeColor": {
"desc": "Couleur des icônes lorsqu'elles sont actives.",
"label": "Couleur d'icône active"
},
"hideInactive": {
"desc": "Masquer les icônes du micro, de la caméra et de lécran lorsquils sont inactifs.",
"label": "Masquer les états inactifs"
},
"enableToast": {
"desc": "Afficher des messages toast lorsque l'un des états change.",
"label": "Activer les notifications toast"
},
"inactiveColor": {
"desc": "Couleur des icônes lorsqu'elles sont inactives.",
"label": "Couleur d'icône inactive"
},
"iconSpacing": {
"desc": "Définir lespacement entre les icônes.",
"label": "Espacement des icônes"
@@ -12,13 +27,13 @@
"desc": "Supprime toutes les marges extérieures du widget.",
"label": "Supprimer les marges"
},
"activeColor": {
"desc": "Couleur des icônes lorsqu'elles sont actives.",
"label": "Couleur d'icône active"
"micFilterRegex": {
"desc": "Motif Regex pour filtrer les applications de microphone. Les applications correspondantes sont complètement exclues de la détection.",
"label": "Regex de filtrage du microphone"
},
"inactiveColor": {
"desc": "Couleur des icônes lorsqu'elles sont inactives.",
"label": "Couleur d'icône inactive"
"camFilterRegex": {
"desc": "Motif Regex pour filtrer les applications de caméra. Les applications correspondantes sont complètement exclues de la détection.",
"label": "Regex de filtrage de la caméra"
}
},
"tooltip": {
@@ -31,9 +46,6 @@
"mic-on": "Le microphone est actif",
"screen-on": "Le partage d'écran est actif"
},
"menu": {
"settings": "Paramètres du widget"
},
"history": {
"title": "Historique d'accès",
"empty": "Aucun accès récent",
@@ -43,4 +55,4 @@
"stopped": "Arrêté"
}
}
}
}

View File

@@ -0,0 +1,58 @@
{
"menu": {
"settings": "위젯 설정"
},
"settings": {
"activeColor": {
"desc": "활성 상태일 때 아이콘에 적용되는 색상입니다.",
"label": "활성 아이콘 색상"
},
"hideInactive": {
"desc": "비활성화된 상태의 마이크, 카메라, 화면 아이콘을 숨깁니다.",
"label": "비활성 상태 숨기기"
},
"enableToast": {
"desc": "상태가 변경될 때 토스트 알림을 표시합니다.",
"label": "토스트 알림 활성화"
},
"inactiveColor": {
"desc": "비활성 상태일 때 아이콘에 적용되는 색상입니다.",
"label": "비활성 아이콘 색상"
},
"iconSpacing": {
"desc": "아이콘 사이의 간격을 설정합니다.",
"label": "아이콘 간격"
},
"removeMargins": {
"desc": "위젯의 모든 외곽 여백을 제거합니다.",
"label": "여백 제거"
},
"micFilterRegex": {
"desc": "마이크를 사용하는 애플리케이션을 필터링하기 위한 정규식을 지정합니다. 일치하는 애플리케이션은 상태 감지에서 완전히 제외됩니다.",
"label": "마이크 필터 정규식"
},
"camFilterRegex": {
"desc": "카메라를 사용하는 애플리케이션을 필터링하기 위한 정규식을 지정합니다. 일치하는 애플리케이션은 상태 감지에서 완전히 제외됩니다.",
"label": "카메라 필터 정규식"
}
},
"tooltip": {
"cam-on": "카메라: {apps}",
"mic-on": "마이크: {apps}",
"screen-on": "화면 공유: {apps}"
},
"toast": {
"cam-on": "카메라가 활성화되었습니다.",
"mic-on": "마이크가 활성화되었습니다.",
"screen-on": "화면 공유가 활성화되었습니다."
},
"history": {
"title": "접근 기록",
"empty": "최근에 접근한 기록 없음",
"clear": "비우기",
"action": {
"started": "시작됨",
"stopped": "정지됨"
}
}
}

View File

@@ -1,7 +1,7 @@
{
"id": "privacy-indicator",
"name": "Privacy Indicator",
"version": "1.2.7",
"version": "1.2.12",
"minNoctaliaVersion": "3.6.0",
"author": "Noctalia Team",
"official": true,
@@ -30,7 +30,8 @@
"iconSpacing": 4,
"activeColor": "primary",
"inactiveColor": "none",
"micFilterRegex": ""
"micFilterRegex": "",
"camFilterRegex": ""
}
}
}

View File

@@ -1,6 +1,6 @@
{
"updateIntervalMinutes": 30,
"updateTerminalCommand": "alacritty -e",
"updateTerminalCommand": "alacritty --hold -e",
"currentIconName": "world-download",
"hideOnZero": true,
"customCmdGetNumUpdates": "expr $(xbps-install -Mnu 2>&1 | grep -v '^$' | wc -l) + $(flatpak remote-ls --updates | wc -l)",

View File

@@ -56,12 +56,12 @@
"hideOnOverview": false,
"marginHorizontal": 10,
"marginVertical": 5,
"middleClickAction": "none",
"middleClickAction": "launcherPanel",
"middleClickCommand": "",
"middleClickFollowMouse": false,
"monitors": [
],
"mouseWheelAction": "none",
"mouseWheelAction": "content",
"mouseWheelWrap": true,
"outerCorners": true,
"position": "top",
@@ -80,10 +80,11 @@
"center": [
{
"colorizeSystemIcon": "none",
"enableColorization": false,
"colorizeSystemText": "none",
"generalTooltipText": "",
"hideMode": "alwaysExpanded",
"icon": "rocket",
"iconPosition": "left",
"id": "CustomButton",
"ipcIdentifier": "",
"leftClickExec": "qs -c noctalia-shell ipc call launcher toggle",
@@ -170,7 +171,7 @@
},
{
"compactMode": false,
"diskPath": "/",
"diskPath": "/boot/efi",
"iconColor": "none",
"id": "SystemMonitor",
"showCpuCores": false,
@@ -179,7 +180,7 @@
"showCpuUsage": true,
"showDiskAvailable": false,
"showDiskUsage": false,
"showDiskUsageAsPercent": false,
"showDiskUsageAsPercent": true,
"showGpuTemp": false,
"showLoadAverage": false,
"showMemoryAsPercent": false,
@@ -190,6 +191,41 @@
"useMonospaceFont": true,
"usePadding": false
},
{
"colorizeSystemIcon": "none",
"colorizeSystemText": "none",
"generalTooltipText": "",
"hideMode": "alwaysExpanded",
"icon": "database",
"iconPosition": "left",
"id": "CustomButton",
"ipcIdentifier": "",
"leftClickExec": "nemo",
"leftClickUpdateText": false,
"maxTextLength": {
"horizontal": 10,
"vertical": 10
},
"middleClickExec": "",
"middleClickUpdateText": false,
"parseJson": false,
"rightClickExec": "filelight",
"rightClickUpdateText": false,
"showExecTooltip": true,
"showIcon": true,
"showTextTooltip": true,
"textCollapse": "",
"textCommand": "zfs list | grep zroot/ROOT/void | cut -d ' ' -f 15",
"textIntervalMs": 20000,
"textStream": false,
"wheelDownExec": "",
"wheelDownUpdateText": false,
"wheelExec": "",
"wheelMode": "unified",
"wheelUpExec": "",
"wheelUpUpdateText": false,
"wheelUpdateText": false
},
{
"defaultSettings": {
"currentIconName": "world-download",
@@ -203,10 +239,11 @@
"right": [
{
"colorizeSystemIcon": "none",
"enableColorization": false,
"colorizeSystemText": "none",
"generalTooltipText": "",
"hideMode": "alwaysExpanded",
"icon": "eye",
"iconPosition": "left",
"id": "CustomButton",
"ipcIdentifier": "",
"leftClickExec": "/home/aiden/toggle-transparency.sh",
@@ -283,6 +320,7 @@
{
"colorizeDistroLogo": false,
"colorizeSystemIcon": "none",
"colorizeSystemText": "none",
"customIconPath": "/home/aiden/Pictures/Icons/Void_Linux_logo-notext.png",
"enableColorization": false,
"icon": "noctalia",
@@ -552,7 +590,7 @@
"dockType": "floating",
"enabled": false,
"floatingRatio": 1,
"groupApps": false,
"groupApps": true,
"groupClickAction": "cycle",
"groupContextMenuMode": "extended",
"groupIndicatorStyle": "dots",
@@ -573,14 +611,14 @@
"Alacritty",
"Firefox",
"com.discordapp.Discord",
"firefox"
"element-desktop"
],
"pinnedStatic": true,
"position": "top",
"showDockIndicator": false,
"showLauncherIcon": false,
"showLauncherIcon": true,
"sitOnFrame": false,
"size": 0.72
"size": 1
},
"general": {
"allowPanelsOnScreenWithoutBar": true,
@@ -593,12 +631,12 @@
"clockFormat": "hh:mm\\nt",
"clockStyle": "custom",
"compactLockScreen": false,
"dimmerOpacity": 0,
"dimmerOpacity": 0.2,
"enableBlurBehind": true,
"enableLockScreenCountdown": true,
"enableLockScreenMediaControls": true,
"enableShadows": true,
"forceBlackScreenCorners": false,
"forceBlackScreenCorners": true,
"iRadiusRatio": 1,
"keybinds": {
"keyDown": [
@@ -642,7 +680,7 @@
"shadowOffsetY": 3,
"showChangelogOnStartup": true,
"showHibernateOnLockScreen": true,
"showScreenCorners": false,
"showScreenCorners": true,
"showSessionButtonsOnLockScreen": true,
"smoothScrollEnabled": true,
"telemetryEnabled": true
@@ -876,6 +914,10 @@
{
"enabled": true,
"id": "btop"
},
{
"enabled": true,
"id": "steam"
}
],
"enableUserTheming": false
@@ -886,7 +928,7 @@
"fontDefaultScale": 1,
"fontFixed": "monospace",
"fontFixedScale": 1,
"panelBackgroundOpacity": 0.73,
"panelBackgroundOpacity": 0.4,
"panelsAttachedToBar": true,
"scrollbarAlwaysVisible": true,
"settingsPanelMode": "centered",