This commit is contained in:
2026-02-09 09:17:08 -06:00
parent 9d18d477d5
commit 112ff5c88e
39 changed files with 1660 additions and 88 deletions

View File

@@ -7,6 +7,10 @@
}
],
"states": {
"network-indicator": {
"enabled": true,
"sourceUrl": "https://github.com/noctalia-dev/noctalia-plugins"
},
"privacy-indicator": {
"enabled": true,
"sourceUrl": "https://github.com/noctalia-dev/noctalia-plugins"

View File

@@ -0,0 +1,130 @@
import QtQuick
import QtQuick.Layouts
import Quickshell
import qs.Commons
import qs.Widgets
import qs.Services.System
Item {
id: root
property var pluginApi: null
property ShellScreen screen
property string widgetId: ""
property string section: ""
// ---------- 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 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 || Qt.alpha(Color.mOnSurfaceVariant, 0.3)
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 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 contentHeight: barIsVertical ? Math.round(contentRow.implicitHeight + Style.marginM * 2) : Style.capsuleHeight
implicitWidth: contentWidth
implicitHeight: contentHeight
// ---------- Widget ----------
property real txSpeed: SystemStatService.txSpeed
property real rxSpeed: SystemStatService.rxSpeed
Rectangle {
id: visualCapsule
x: Style.pixelAlignCenter(parent.width, width)
y: Style.pixelAlignCenter(parent.height, height)
width: root.contentWidth
height: root.contentHeight
color: root.useCustomColors && cfg.colorBackground || Style.capsuleColor
radius: Style.radiusM
border.color: Style.capsuleBorderColor
border.width: Style.capsuleBorderWidth
RowLayout {
id: contentRow
anchors.centerIn: parent
spacing: Style.marginS
Column {
visible: root.showNumbers && barIsSpacious && !barIsVertical
spacing: root.spacingInbetween
NText {
visible: true
text: convertBytes(root.txSpeed)
color: root.colorText
pointSize: Style.barFontSize * 0.75 * root.fontSizeModifier
}
NText {
visible: true
text: convertBytes(root.rxSpeed)
color: root.colorText
pointSize: Style.barFontSize * 0.75 * root.fontSizeModifier
}
}
Column {
spacing: -10.0 + root.spacingInbetween
NIcon {
icon: arrowType + "-up"
color: root.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
pointSize: Style.fontSizeL * root.iconSizeModifier
}
}
}
}
// ---------- 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";
}
const text = value.toFixed(1) + " " + unit;
return text.padStart(10, " ");
}
}

View File

@@ -0,0 +1,43 @@
# NetworkIndicator Plugin for Noctalia
A compact Noctalia bar widget that displays current network upload (TX) and download (RX) activity, with optional live throughput values.
## 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).
- **Unit Formatting**: Automatically switches between KB/s and MB/s, or can be configured to always display MB/s.
- **Theme Support**: Uses Noctalia theme colors by default, with optional custom colors.
- **Configurable Settings**: Provides a comprehensive set of user-adjustable options.
## Installation
This plugin is part of the `noctalia-plugins` repository.
## Configuration
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.
- **Force Megabytes**: Always display values in MB/s instead of switching to KB/s at low traffic levels.
- **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.
## Usage
- Add the widget to your Noctalia bar.
- Configure the plugin settings as required.
## Requirements
- Noctalia 3.6.0 or later.
## Technical Details
- The widget reads `SystemStatService.txSpeed` and `SystemStatService.rxSpeed`; therefore, the polling interval is determined by that service.

View File

@@ -0,0 +1,306 @@
import QtQuick
import QtQuick.Layouts
import qs.Commons
import qs.Widgets
ColumnLayout {
id: root
readonly property var iconNames: ["arrow", "arrow-bar", "arrow-big", "arrow-narrow", "caret", "chevron", "chevron-compact", "fold"]
property var pluginApi: null
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 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 || 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 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");
}
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
}
ColumnLayout {
spacing: -10.0 + root.spacingInbetween
NIcon {
icon: arrowType + "-up"
color: Color.mSecondary
pointSize: Style.fontSizeL * root.iconSizeModifier
}
NIcon {
icon: arrowType + "-down"
color: Color.mPrimary
pointSize: Style.fontSizeL * root.iconSizeModifier
}
}
}
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)
}
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)
}
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
NLabel {
label: pluginApi?.tr("settings.spacingInbetween.label")
description: pluginApi?.tr("settings.spacingInbetween.desc")
}
NValueSlider {
Layout.fillWidth: true
from: -5
to: 5
stepSize: 1
value: root.spacingInbetween
onMoved: value => root.spacingInbetween = value
text: root.spacingInbetween.toFixed(0)
}
}
ColumnLayout {
spacing: Style.marginXXS
Layout.fillWidth: true
NLabel {
label: pluginApi?.tr("settings.fontSizeModifier.label")
description: pluginApi?.tr("settings.fontSizeModifier.desc")
}
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)
}
}
ColumnLayout {
spacing: Style.marginXXS
Layout.fillWidth: true
NLabel {
label: pluginApi?.tr("settings.iconSizeModifier.label")
description: pluginApi?.tr("settings.iconSizeModifier.desc")
}
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)
}
}
NDivider {
visible: true
Layout.fillWidth: true
Layout.topMargin: Style.marginL
Layout.bottomMargin: Style.marginL
}
// ---------- Colors ----------
NToggle {
label: pluginApi?.tr("settings.useCustomColors.label")
description: pluginApi?.tr("settings.useCustomColors.desc")
checked: root.useCustomColors
onToggled: function (checked) {
root.useCustomColors = checked;
}
}
ColumnLayout {
visible: root.useCustomColors
RowLayout {
NLabel {
label: pluginApi?.tr("settings.colorTx.label")
description: pluginApi?.tr("settings.colorTx.desc")
Layout.alignment: Qt.AlignTop
}
NColorPicker {
selectedColor: root.colorTx
onColorSelected: color => root.colorTx = color
}
}
RowLayout {
NLabel {
label: pluginApi?.tr("settings.colorRx.label")
description: pluginApi?.tr("settings.colorRx.desc")
}
NColorPicker {
selectedColor: root.colorRx
onColorSelected: color => root.colorRx = color
}
}
RowLayout {
NLabel {
label: pluginApi?.tr("settings.colorSilent.label")
description: pluginApi?.tr("settings.colorSilent.desc")
}
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
}
}
}
// ---------- Saving ----------
function saveSettings() {
if (!pluginApi) {
Logger.e("NetworkIndicator", "Cannot save settings: pluginApi is null");
return;
}
pluginApi.pluginSettings.useCustomColors = root.useCustomColors;
pluginApi.pluginSettings.showNumbers = root.showNumbers;
pluginApi.pluginSettings.forceMegabytes = root.forceMegabytes;
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;
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();
}
pluginApi.saveSettings();
Logger.i("NetworkIndicator", "Settings saved successfully");
}
}

View File

@@ -0,0 +1,60 @@
{
"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"
},
"colorSilent": {
"desc": "Symbolfarbe, wenn der Datenverkehr unter dem Schwellwert liegt.",
"label": "RX/TX inaktiv"
},
"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"
},
"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"
},
"iconSizeModifier": {
"desc": "Symbolgröße relativ zum Standard skalieren.",
"label": "Symbolgrößen-Faktor"
},
"iconType": {
"desc": "Symbolstil 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"
},
"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"
}
}
}

View File

@@ -0,0 +1,60 @@
{
"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"
},
"colorSilent": {
"desc": "Set the icon color when traffic is below the threshold.",
"label": "RX/TX Inactive"
},
"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"
},
"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)"
},
"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"
},
"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"
},
"spacingInbetween": {
"desc": "Adjust the spacing between RX/TX elements.",
"label": "Vertical Spacing"
},
"useCustomColors": {
"desc": "Enable custom colors instead of theme defaults.",
"label": "Custom Colors"
}
}
}

View File

@@ -0,0 +1,60 @@
{
"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"
},
"colorSilent": {
"desc": "Establecer el color del icono cuando el tráfico esté por debajo del umbral.",
"label": "RX/TX Inactivo"
},
"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"
},
"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)"
},
"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"
},
"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"
},
"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"
}
}
}

View File

@@ -0,0 +1,60 @@
{
"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"
},
"colorSilent": {
"desc": "Définir la couleur de l'icône lorsque le trafic est inférieur au seuil.",
"label": "RX/TX Inactif"
},
"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."
},
"colorTx": {
"desc": "Définir la couleur de l'icône de téléversement (TX) lorsque le seuil est dépassé.",
"label": "TX Active"
},
"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)"
},
"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"
},
"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"
},
"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"
}
}
}

View File

@@ -0,0 +1,60 @@
{
"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"
},
"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"
},
"colorText": {
"desc": "Állítsa be az RX és TX értékekhez használt szövegszínt.",
"label": "Általános"
},
"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"
},
"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"
},
"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"
},
"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"
},
"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"
}
}
}

View File

@@ -0,0 +1,60 @@
{
"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"
},
"colorRx": {
"desc": "Imposta il colore dell'icona di download (RX) quando è sopra la soglia.",
"label": "RX Aktiv"
},
"colorSilent": {
"desc": "Imposta il colore dell'icona quando il traffico è al di sotto della soglia.",
"label": "RX/TX Neaktivan"
},
"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."
},
"colorTx": {
"desc": "Määritä lähetyskuvakkeen (TX) väri, kun raja-arvo ylittyy.",
"label": "TX Aktibo"
},
"fontSizeModifier": {
"desc": "Skala textstorleken relativt standardstorleken.",
"label": "Modifikator veličine fonta"
},
"forceMegabytes": {
"desc": "Zeigen Sie alle Verkehrswerte in MB an, anstatt bei geringer Nutzung auf KB umzuschalten.",
"label": "Megabajtów siłą (MB)"
},
"iconSizeModifier": {
"desc": "Mérje a ikon méretét a alapértelmezetthez képest.",
"label": "Modifikator za veličinu ikone"
},
"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"
},
"showNumbers": {
"desc": "Zeige die aktuellen RX/TX-Geschwindigkeiten als Zahlen an.",
"label": "Ipakita ang mga Halaga"
},
"spacingInbetween": {
"desc": "Rregulloje hapësirën midis elementeve RX/TX.",
"label": "Vertikaler Abstand"
},
"useCustomColors": {
"desc": "Aktiviere benutzerdefinierte Farben anstelle der Standardfarben des Designs.",
"label": "Ngjyra të personalizuara"
}
}
}

View File

@@ -0,0 +1,60 @@
{
"settings": {
"byteThresholdActive": {
"desc": "アクティビティの閾値をバイト毎秒 (B/s) で設定します。",
"label": "アクティブなしきい値を表示"
},
"colorBackground": {
"desc": "ウィジェットの背景色を設定します。",
"label": "背景"
},
"colorRx": {
"desc": "閾値を超えた場合のダウンロード (RX) アイコンの色を設定します。",
"label": "RXアクティブ"
},
"colorSilent": {
"desc": "トラフィックが閾値を下回った場合に、アイコンの色を設定します。",
"label": "RX/TX 非アクティブ"
},
"colorText": {
"desc": "RX と TX の両方の値に使用するテキストの色を設定します。",
"label": "申し訳ありませんが、翻訳するテキストが提供されていません。テキストを入力してください。"
},
"colorTx": {
"desc": "閾値を超えた場合のアップロード (TX) アイコンの色を設定します。",
"label": "TXアクティブ"
},
"fontSizeModifier": {
"desc": "テキストのサイズをデフォルトを基準に調整します。",
"label": "フォントサイズ変更"
},
"forceMegabytes": {
"desc": "低い使用量でもKBに切り替えずに、すべてのトラフィック値をMBで表示する。",
"label": "メガバイトを強制的に実行する"
},
"iconSizeModifier": {
"desc": "デフォルトに対するアイコンのサイズを調整します。",
"label": "アイコンサイズ変更"
},
"iconType": {
"desc": "TX/RXインジケーターに使用するアイコンのスタイルを選択してください。",
"label": "アイコンの種類"
},
"minWidth": {
"desc": "ウィジェットの最小幅をpxで設定します。",
"label": "ウィジェットの最小幅"
},
"showNumbers": {
"desc": "現在のRX/TX速度を数値で表示する。",
"label": "値を表示"
},
"spacingInbetween": {
"desc": "RX/TX要素間の間隔を調整してください。",
"label": "垂直方向の間隔"
},
"useCustomColors": {
"desc": "テーマのデフォルトの代わりにカスタムカラーを有効にする。",
"label": "カスタムカラー"
}
}
}

View File

@@ -0,0 +1,60 @@
{
"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.",
"label": "RX Çalak"
},
"colorSilent": {
"desc": "Îkon rengê dema trafîk ji binê tixûbê be, saz bike.",
"label": "RX/TX Neçalak"
},
"colorText": {
"desc": "Rengê nivîsê yê ku ji bo nirxên RX û TX tê bikaranîn, destnîşan bike.",
"label": "Bar Height"
},
"colorTx": {
"desc": "Rengê îkona barkirinê (TX) dema ku ji tixûbê derbas dibe, destnîşan bike.",
"label": "TX Çalak"
},
"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)"
},
"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ê"
},
"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"
},
"useCustomColors": {
"desc": "Çalak bike rengên xwerû li şûna rengên xwerû yên temayê.",
"label": "Rengên Xweser"
}
}
}

View File

@@ -0,0 +1,60 @@
{
"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"
},
"colorSilent": {
"desc": "Stel de pictogramkleur in wanneer het verkeer onder de drempelwaarde is.",
"label": "RX/TX Inactief"
},
"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 Active"
},
"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)"
},
"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"
},
"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"
},
"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"
}
}
}

View File

@@ -0,0 +1,60 @@
{
"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"
},
"colorSilent": {
"desc": "Ustaw kolor ikony, gdy ruch jest poniżej progu.",
"label": "RX/TX Nieaktywne"
},
"colorText": {
"desc": "Ustaw kolor tekstu używany zarówno dla wartości RX, jak i TX.",
"label": "Uptime"
},
"colorTx": {
"desc": "Ustaw kolor ikony wysyłania (TX), gdy przekroczony zostanie próg.",
"label": "Aktywny TX"
},
"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)"
},
"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"
},
"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"
},
"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"
}
}
}

View File

@@ -0,0 +1,60 @@
{
"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"
},
"colorSilent": {
"desc": "Definir a cor do ícone quando o tráfego estiver abaixo do limite.",
"label": "RX/TX Inativo"
},
"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"
},
"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)"
},
"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"
},
"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"
},
"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"
}
}
}

View File

@@ -0,0 +1,60 @@
{
"settings": {
"byteThresholdActive": {
"desc": "Установите порог активности в байтах в секунду (Б/с).",
"label": "Показать активный порог"
},
"colorBackground": {
"desc": "Установить цвет фона для виджета.",
"label": "Фон"
},
"colorRx": {
"desc": "Установить цвет значка загрузки (RX), когда он выше порогового значения.",
"label": "RX Active"
},
"colorSilent": {
"desc": "Установить цвет значка, когда трафик ниже порогового значения.",
"label": "RX/TX неактивны"
},
"colorText": {
"desc": "Установить цвет текста, используемый для значений RX и TX.",
"label": "Текст"
},
"colorTx": {
"desc": "Установить цвет значка загрузки (TX) при превышении порогового значения.",
"label": "TX Active"
},
"fontSizeModifier": {
"desc": "Изменить размер текста относительно размера по умолчанию.",
"label": "Изменение размера шрифта"
},
"forceMegabytes": {
"desc": "Показывать все значения трафика в МБ, вместо переключения на КБ при низком использовании.",
"label": "Принудительно мегабайты (МБ)"
},
"iconSizeModifier": {
"desc": "Изменить размер значка относительно размера по умолчанию.",
"label": "Изменение размера значков"
},
"iconType": {
"desc": "Выберите стиль значков, используемых для индикаторов TX/RX.",
"label": "Тип значка"
},
"minWidth": {
"desc": "Установить минимальную ширину для виджета (в px).",
"label": "Минимальная ширина виджета"
},
"showNumbers": {
"desc": "Отображать текущие скорости RX/TX в виде чисел.",
"label": "Показать значения"
},
"spacingInbetween": {
"desc": "Отрегулируйте интервал между элементами RX/TX.",
"label": "Вертикальный интервал"
},
"useCustomColors": {
"desc": "Включить пользовательские цвета вместо цветов темы по умолчанию.",
"label": "Пользовательские цвета"
}
}
}

View File

@@ -0,0 +1,60 @@
{
"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"
},
"colorSilent": {
"desc": "Trafiğin eşiğin altında olduğu durumlarda simge rengini ayarla.",
"label": "RX/TX Etkin Değil"
},
"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"
},
"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"
},
"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ü"
},
"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"
},
"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"
}
}
}

View File

@@ -0,0 +1,60 @@
{
"settings": {
"byteThresholdActive": {
"desc": "Встановіть поріг активності в байтах на секунду (Б/с).",
"label": "Показати активний поріг"
},
"colorBackground": {
"desc": "Встановити колір фону для віджета.",
"label": "Тло"
},
"colorRx": {
"desc": "Встановити колір значка завантаження (RX), коли він перевищує поріг.",
"label": "RX Active"
},
"colorSilent": {
"desc": "Встановити колір значка, коли трафік нижче порогового значення.",
"label": "RX/TX неактивні"
},
"colorText": {
"desc": "Встановити колір тексту, який використовується для значень RX та TX.",
"label": "Текст"
},
"colorTx": {
"desc": "Встановити колір піктограми завантаження (TX), коли значення перевищує поріг.",
"label": "TX Active"
},
"fontSizeModifier": {
"desc": "Змінити розмір тексту відносно стандартного.",
"label": "Модифікатор розміру шрифту"
},
"forceMegabytes": {
"desc": "Показувати всі значення трафіку в МБ замість переходу на КБ для низького використання.",
"label": "Примусово мегабайти (МБ)"
},
"iconSizeModifier": {
"desc": "Змінюйте розмір значка відносно стандартного.",
"label": "Модифікатор розміру значка"
},
"iconType": {
"desc": "Виберіть стиль іконок, що використовуються для індикаторів TX/RX.",
"label": "Тип іконки"
},
"minWidth": {
"desc": "Встановити мінімальну ширину для віджета (у пікселях).",
"label": "Мінімальна ширина віджета"
},
"showNumbers": {
"desc": "Показувати поточні швидкості RX/TX у вигляді чисел.",
"label": "Показати значення"
},
"spacingInbetween": {
"desc": "Відрегулюйте інтервал між елементами RX/TX.",
"label": "Вертикальний інтервал"
},
"useCustomColors": {
"desc": "Увімкнути власні кольори замість кольорів теми за замовчуванням.",
"label": "Користувацькі кольори"
}
}
}

View File

@@ -0,0 +1,60 @@
{
"settings": {
"byteThresholdActive": {
"desc": "设置活动阈值,单位为字节/秒 (B/s)。",
"label": "显示活动阈值"
},
"colorBackground": {
"desc": "设置小部件的背景颜色。",
"label": "背景"
},
"colorRx": {
"desc": "设置高于阈值时的下载RX图标颜色。",
"label": "RX Active"
},
"colorSilent": {
"desc": "当流量低于阈值时,设置图标颜色。",
"label": "RX/TX 无活动"
},
"colorText": {
"desc": "设置用于RX和TX值的文本颜色。",
"label": "文本"
},
"colorTx": {
"desc": "设置上传TX图标颜色当高于阈值时。",
"label": "TX Active"
},
"fontSizeModifier": {
"desc": "相对于默认值缩放文本大小。",
"label": "字体大小调整器"
},
"forceMegabytes": {
"desc": "显示所有流量值以MB为单位而不是在低使用量时切换到KB。",
"label": "强制兆字节 (MB)"
},
"iconSizeModifier": {
"desc": "相对于默认值缩放图标大小。",
"label": "图标大小修改器"
},
"iconType": {
"desc": "选择用于 TX/RX 指示器的图标样式。",
"label": "图标类型"
},
"minWidth": {
"desc": "设置小部件的最小宽度(以像素为单位)。",
"label": "最小部件宽度"
},
"showNumbers": {
"desc": "以数字形式显示当前的 RX/TX 速度。",
"label": "显示数值"
},
"spacingInbetween": {
"desc": "调整RX/TX元素之间的间距。",
"label": "垂直间距"
},
"useCustomColors": {
"desc": "启用自定义颜色,而非主题默认颜色。",
"label": "自定义颜色"
}
}
}

View File

@@ -0,0 +1,31 @@
{
"id": "network-indicator",
"name": "Network Indicator",
"version": "1.0.5",
"minNoctaliaVersion": "3.7.5",
"author": "tonigineer",
"license": "MIT",
"repository": "https://github.com/noctalia-dev/noctalia-plugins",
"description": "A `lively` network traffic indicator.",
"tags": ["Bar", "Network", "Indicator"],
"entryPoints": {
"barWidget": "BarWidget.qml",
"settings": "Settings.qml"
},
"dependencies": {
"plugins": []
},
"metadata": {
"defaultSettings": {
"arrowType": "caret",
"byteThresholdActive": 1024,
"fontSizeModifier": 1.0,
"forceMegabytes": false,
"iconSizeModifier": 1.0,
"minWidth": 0,
"showNumbers": true,
"spacingInbetween": 0,
"useCustomColors": false
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 459 KiB

View File

@@ -0,0 +1,11 @@
{
"useCustomColors": false,
"showNumbers": true,
"forceMegabytes": false,
"arrowType": "caret",
"minWidth": 0,
"byteThresholdActive": 512,
"fontSizeModifier": 1.1,
"iconSizeModifier": 1.1,
"spacingInbetween": 1
}

View File

@@ -40,8 +40,11 @@ Item {
property bool removeMargins: cfg.removeMargins ?? defaults.removeMargins
property int iconSpacing: cfg.iconSpacing || Style.marginXS
readonly property color activeColor: Color.mPrimary
readonly property color inactiveColor: Qt.alpha(Color.mOnSurfaceVariant, 0.3)
property string activeColorKey: cfg.activeColor ?? defaults.activeColor
property string inactiveColorKey: cfg.inactiveColor ?? defaults.inactiveColor
readonly property color activeColor: Color.resolveColorKey(activeColorKey)
readonly property color inactiveColor: inactiveColorKey === "none" ? Qt.alpha(Color.mOnSurfaceVariant, 0.3) : Color.resolveColorKey(inactiveColorKey)
readonly property color micColor: micActive ? activeColor : inactiveColor
readonly property color camColor: camActive ? activeColor : inactiveColor
readonly property color scrColor: scrActive ? activeColor : inactiveColor
@@ -276,11 +279,37 @@ Item {
}
}
NPopupContextMenu {
id: contextMenu
model: [
{
"label": pluginApi?.tr("menu.settings"),
"action": "settings",
"icon": "settings"
},
]
onTriggered: function (action) {
contextMenu.close();
PanelService.closeContextMenu(screen);
if (action === "settings") {
BarService.openPluginSettings(root.screen, pluginApi.manifest);
}
}
}
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.RightButton
hoverEnabled: true
onClicked: function (mouse) {
if (mouse.button === Qt.RightButton) {
PanelService.showContextMenu(contextMenu, root, screen);
}
}
onEntered: {
var tooltipText = buildTooltip();
if (tooltipText) {

View File

@@ -14,6 +14,8 @@ ColumnLayout {
property bool hideInactive: cfg.hideInactive ?? defaults.hideInactive
property bool removeMargins: cfg.removeMargins ?? defaults.removeMargins
property int iconSpacing: cfg.iconSpacing || Style.marginXS
property string activeColor: cfg.activeColor ?? defaults.activeColor
property string inactiveColor: cfg.inactiveColor ?? defaults.inactiveColor
spacing: Style.marginL
@@ -45,6 +47,22 @@ ColumnLayout {
}
}
NComboBox {
label: pluginApi?.tr("settings.activeColor.label")
description: pluginApi?.tr("settings.activeColor.desc")
model: Color.colorKeyModel
currentKey: root.activeColor
onSelected: key => root.activeColor = key
}
NComboBox {
label: pluginApi?.tr("settings.inactiveColor.label")
description: pluginApi?.tr("settings.inactiveColor.desc")
model: Color.colorKeyModel
currentKey: root.inactiveColor
onSelected: key => root.inactiveColor = key
}
NComboBox {
label: pluginApi?.tr("settings.iconSpacing.label")
description: pluginApi?.tr("settings.iconSpacing.desc")
@@ -80,6 +98,8 @@ ColumnLayout {
pluginApi.pluginSettings.hideInactive = root.hideInactive;
pluginApi.pluginSettings.iconSpacing = root.iconSpacing;
pluginApi.pluginSettings.removeMargins = root.removeMargins;
pluginApi.pluginSettings.activeColor = root.activeColor;
pluginApi.pluginSettings.inactiveColor = root.inactiveColor;
pluginApi.saveSettings();

View File

@@ -1,9 +1,20 @@
{
"menu": {
"settings": "Widget settings"
},
"settings": {
"activeColor": {
"desc": "Color of the icons when active.",
"label": "Active icon color"
},
"hideInactive": {
"desc": "Hide microphone, camera, and screen icons when there are inactive.",
"label": "Hide inactive states"
},
"inactiveColor": {
"desc": "Color of the icons when inactive.",
"label": "Inactive icon color"
},
"iconSpacing": {
"desc": "Set the spacing between the icons.",
"label": "Icon spacing"

View File

@@ -1,7 +1,7 @@
{
"id": "privacy-indicator",
"name": "Privacy Indicator",
"version": "1.0.13",
"version": "1.1.0",
"minNoctaliaVersion": "3.6.0",
"author": "Noctalia Team",
"official": true,
@@ -19,7 +19,9 @@
"metadata": {
"defaultSettings": {
"hideInactive": false,
"removeMargins": false
"removeMargins": false,
"activeColor": "primary",
"inactiveColor": "none"
}
}
}

View File

@@ -14,12 +14,25 @@ NIconButton {
property string widgetId: ""
property string section: ""
// Bar positioning properties
readonly property string screenName: screen ? screen.name : ""
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
readonly property bool isVertical: barPosition === "left" || barPosition === "right"
readonly property real barHeight: Style.getBarHeightForScreen(screenName)
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screenName)
readonly property real barFontSize: Style.getBarFontSizeForScreen(screenName)
readonly property var mainInstance: pluginApi?.mainInstance
readonly property bool hideInactive:
pluginApi?.pluginSettings?.hideInactive ??
pluginApi?.manifest?.metadata?.defaultSettings?.hideInactive ??
readonly property bool hideInactive:
pluginApi?.pluginSettings?.hideInactive ??
pluginApi?.manifest?.metadata?.defaultSettings?.hideInactive ??
false
property var cfg: pluginApi?.pluginSettings || ({})
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
readonly property string iconColorKey: cfg.iconColor ?? defaults.iconColor ?? "none"
readonly property color iconColor: Color.resolveColorKey(iconColorKey)
readonly property bool shouldShow: !hideInactive || (mainInstance?.isRecording ?? false) || (mainInstance?.isPending ?? false)
visible: true
@@ -43,11 +56,11 @@ NIconButton {
icon: "camera-video"
tooltipText: mainInstance?.buildTooltip()
tooltipDirection: BarService.getTooltipDirection()
baseSize: Style.capsuleHeight
baseSize: root.capsuleHeight
applyUiScale: false
customRadius: Style.radiusL
colorBg: mainInstance?.isRecording ? Color.mPrimary : Style.capsuleColor
colorFg: mainInstance?.isRecording ? Color.mOnPrimary : Color.mOnSurface
colorBg: (mainInstance?.isRecording || mainInstance?.isPending) ? Color.mPrimary : Style.capsuleColor
colorFg: (mainInstance?.isRecording || mainInstance?.isPending) ? Color.mOnPrimary : root.iconColor
colorBorder: "transparent"
colorBorderHover: "transparent"
border.color: Style.capsuleBorderColor

View File

@@ -16,6 +16,11 @@ ColumnLayout {
pluginApi?.manifest?.metadata?.defaultSettings?.hideInactive ??
false
property string editIconColor:
pluginApi?.pluginSettings?.iconColor ??
pluginApi?.manifest?.metadata?.defaultSettings?.iconColor ??
"none"
property string editDirectory:
pluginApi?.pluginSettings?.directory ||
pluginApi?.manifest?.metadata?.defaultSettings?.directory ||
@@ -83,6 +88,7 @@ ColumnLayout {
}
pluginApi.pluginSettings.hideInactive = root.editHideInactive
pluginApi.pluginSettings.iconColor = root.editIconColor
pluginApi.pluginSettings.directory = root.editDirectory
pluginApi.pluginSettings.filenamePattern = root.editFilenamePattern
pluginApi.pluginSettings.frameRate = root.editFrameRate
@@ -100,6 +106,16 @@ ColumnLayout {
Logger.i("ScreenRecorder", "Settings saved successfully")
}
// Icon Color
NComboBox {
label: I18n.tr("common.select-icon-color")
description: I18n.tr("common.select-color-description")
model: Color.colorKeyModel
currentKey: root.editIconColor
onSelected: key => root.editIconColor = key
minimumWidth: 200
}
NTextInputButton {
label: pluginApi.tr("settings.general.output-folder")
description: pluginApi.tr("settings.general.output-folder-description")

View File

@@ -12,7 +12,8 @@
"start-recording": "Bildschirmaufnahme (Aufnahme starten)",
"started": "Aufnahme gestartet.",
"stop-recording": "Bildschirmaufnahme (Aufnahme stoppen)",
"stopping": "Aufnahme stoppen…"
"stopping": "Aufnahme stoppen…",
"open-file": "Datei öffnen"
},
"name": "Bildschirmrekorder",
"settings": {

View File

@@ -9,9 +9,9 @@
"not-installed": "gpu-screen-recorder not installed.",
"not-installed-desc": "Please install gpu-screen-recorder to use screen recording features.",
"saved": "Recording saved.",
"start-recording": "Screen recorder (start recording)",
"start-recording": "Screen Recorder (start recording)",
"started": "Recording started.",
"stop-recording": "Screen recorder (stop recording)",
"stop-recording": "Screen Recorder (stop recording)",
"stopping": "Stopping recording…",
"open-file": "Open file"
},

View File

@@ -1,5 +1,5 @@
{
"description": "カスタマイズ可能なビデオおよびオーディオ設定を備えたハードウェアアクセラレーション画面録画",
"description": "カスタマイズ可能なビデオおよびオーディオ設定を備えたハードウェアアクセラレーション対応の画面録画",
"messages": {
"failed-general": "レコーダーがエラーで終了しました。",
"failed-gpu": "gpu-screen-recorder が予期せず終了しました。",
@@ -8,36 +8,39 @@
"no-portals-desc": "xdg-desktop-portalとコンポジターポータル (wlr/hyprland/gnome/kde) を起動します。",
"not-installed": "gpu-screen-recorder がインストールされていません。",
"not-installed-desc": "画面録画機能を使用するには、gpu-screen-recorderをインストールしてください。",
"saved": "録を保存しました。",
"start-recording": "画面録画(録画開始)",
"started": "録を開始しました。",
"stop-recording": "画面録画(録画停止)",
"stopping": "録画を停止しています…"
"saved": "録を保存しました。",
"start-recording": "画面録画(開始)",
"started": "録を開始しました。",
"stop-recording": "画面録画(停止)",
"stopping": "録画を停止しています…",
"open-file": "ファイルを開く"
},
"name": "画面レコーダー",
"settings": {
"audio": {
"audio-sources-both": "システム出力 + マイク入力",
"audio-sources-both": "システム出力 マイク入力",
"audio-sources-microphone-input": "マイク入力",
"audio-sources-none": "音声なし",
"audio-sources-system-output": "システム出力",
"codec": "オーディオコーデック",
"codec-desc": "最高のパフォーマンスと最小のオーディオサイズにはOpusが推奨されます",
"source": "オーディオソース",
"source-desc": "録画中にキャプチャるオーディオソース",
"source-desc": "録画中にキャプチャされるオーディオソース",
"title": "オーディオ設定"
},
"filename-pattern": {
"description": "日付/時刻コードを使用したファイル名パターンrecording_yyyyMMdd_HHmmss",
"description": "日付/時刻コードを使用したファイル名パターンrecording_yyyyMMdd_HHmmss",
"label": "ファイル名のパターン"
},
"general": {
"copy-to-clipboard": "クリップボードにコピー",
"copy-to-clipboard-description": "録画終了後、ファイルをクリップボードにコピーします。",
"copy-to-clipboard-description": "録画終了後、ファイルをクリップボードにコピーする",
"hide-when-inactive": "非アクティブ時に非表示",
"hide-when-inactive-description": "録画していないときはウィジェットを隠す",
"output-folder": "出力フォルダー",
"output-folder-description": "画面録画が保存されるフォルダー",
"show-cursor": "カーソルを表示",
"show-cursor-description": "ビデオにマウスカーソルを記録する",
"show-cursor-description": "録画にマウスカーソルを記録する",
"title": "全般"
},
"title": "画面レコーダー設定",
@@ -45,22 +48,22 @@
"codec": "ビデオコーデック",
"codec-desc": "h264は最も一般的なコーデックです",
"color-range": "色範囲",
"color-range-desc": "互換性向上のため制限付きが推奨されます",
"color-range-desc": "互換性を高めるため、限定が推奨されます",
"color-range-full": "フル",
"color-range-limited": "限定",
"frame-rate": "フレームレート",
"frame-rate-desc": "画面録画の目標フレームレート",
"quality": "ビデオ品質",
"quality-desc": "品質が高いほどファイルサイズが大きくなります",
"quality-high": "高",
"quality-medium": "ミディアム",
"quality-ultra": "ウルトラ",
"quality-very-high": "非常に高い",
"resolution": "Resolution",
"resolution-desc": "Limit output resolution. Default uses original screen resolution",
"resolution-original": "Default",
"quality-desc": "品質が高いほどファイルサイズが大きくなります",
"quality-high": "高",
"quality-medium": "",
"quality-ultra": "最高",
"quality-very-high": "超高",
"resolution": "解像度",
"resolution-desc": "出力解像度を制限します。デフォルトでは元の画面解像度が使用されます",
"resolution-original": "デフォルト",
"source": "ビデオソース",
"source-desc": "Portalが推奨されます。アーティファクトが発生する場合は画面を試してください",
"source-desc": "ポータルが推奨されます。アーティファクトが発生する場合は「スクリーン」を試してください",
"sources-portal": "ポータル",
"sources-screen": "スクリーン",
"title": "ビデオ設定"

View File

@@ -39,6 +39,8 @@
"output-folder-description": "屏幕录制将保存到的文件夹",
"show-cursor": "显示光标",
"show-cursor-description": "在视频中录制鼠标光标",
"hide-when-inactive": "非活动时隐藏",
"hide-when-inactive-description": "未录制时隐藏栏指示器",
"title": "常规"
},
"title": "屏幕录制器设置",

View File

@@ -1,7 +1,7 @@
{
"id": "screen-recorder",
"name": "Screen Recorder",
"version": "1.1.2",
"version": "1.1.6",
"minNoctaliaVersion": "3.6.0",
"author": "Noctalia Team",
"official": true,
@@ -24,6 +24,7 @@
"metadata": {
"defaultSettings": {
"hideInactive": false,
"iconColor": "none",
"directory": "",
"filenamePattern": "recording_yyyyMMdd_HHmmss",
"frameRate": "60",

View File

@@ -15,8 +15,13 @@ Item {
property string section: ""
property bool hovered: false
readonly property string barPosition: Settings.data.bar.position
// Bar positioning properties
readonly property string screenName: screen ? screen.name : ""
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
readonly property bool isVertical: barPosition === "left" || barPosition === "right"
readonly property real barHeight: Style.getBarHeightForScreen(screenName)
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screenName)
readonly property real barFontSize: Style.getBarFontSizeForScreen(screenName)
property string currentIconName: pluginApi?.pluginSettings?.currentIconName || pluginApi?.manifest?.metadata?.defaultSettings?.currentIconName
property bool hideOnZero: pluginApi?.pluginSettings.hideOnZero || pluginApi?.manifest?.metadata.defaultSettings?.hideOnZero
@@ -25,8 +30,8 @@ Item {
// also set opacity to zero when invisible as we use opacity to hide the barWidgetLoader
opacity: root.isVisible ? 1.0 : 0.0
readonly property real contentWidth: isVertical ? Style.capsuleHeight : layout.implicitWidth + Style.marginS * 2
readonly property real contentHeight: isVertical ? layout.implicitHeight + Style.marginS * 2 : Style.capsuleHeight
readonly property real contentWidth: isVertical ? root.capsuleHeight : layout.implicitWidth + Style.marginS * 2
readonly property real contentHeight: isVertical ? layout.implicitHeight + Style.marginS * 2 : root.capsuleHeight
implicitWidth: contentWidth
implicitHeight: contentHeight
@@ -68,7 +73,7 @@ Item {
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
text: root.pluginApi?.mainInstance?.updateCount.toString()
color: root.hovered ? Color.mOnHover : Color.mOnSurface
pointSize: Style.barFontSize
pointSize: root.barFontSize
}
}
}

View File

@@ -1,7 +1,7 @@
{
"id": "update-count",
"name": "Update Count",
"version": "1.0.11",
"version": "1.0.12",
"minNoctaliaVersion": "3.6.0",
"author": "BukoMoon",
"license": "GPLv3",

View File

@@ -9,6 +9,7 @@
"enableClipPreview": true,
"enableClipboardHistory": true,
"enableSettingsSearch": true,
"enableWindowsSearch": true,
"iconMode": "tabler",
"ignoreMouseInput": false,
"pinnedApps": [
@@ -33,11 +34,14 @@
"volumeStep": 5
},
"bar": {
"autoHideDelay": 500,
"autoShowDelay": 150,
"backgroundOpacity": 0.93,
"barType": "simple",
"capsuleColorKey": "none",
"capsuleOpacity": 1,
"density": "comfortable",
"exclusive": true,
"displayMode": "always_visible",
"floating": false,
"frameRadius": 12,
"frameThickness": 8,
@@ -70,6 +74,7 @@
"showArtistFirst": true,
"showProgressRing": true,
"showVisualizer": true,
"textColor": "none",
"useFixedWidth": false,
"visualizerType": "linear"
}
@@ -119,6 +124,7 @@
"id": "Workspace",
"labelMode": "name",
"occupiedColor": "secondary",
"pillSize": 0.6,
"reverseScroll": false,
"showApplications": false,
"showBadge": true,
@@ -126,13 +132,13 @@
"unfocusedIconsOpacity": 1
},
{
"clockColor": "none",
"customFont": "",
"formatHorizontal": "HH:mm ddd, MMM dd",
"formatVertical": "HH mm - dd MM",
"id": "Clock",
"tooltipFormat": "HH:mm ddd, MMM dd",
"useCustomFont": false,
"usePrimaryColor": false
"useCustomFont": false
},
{
"defaultSettings": {
@@ -146,18 +152,36 @@
{
"compactMode": false,
"diskPath": "/",
"iconColor": "none",
"id": "SystemMonitor",
"showCpuFreq": false,
"showCpuTemp": true,
"showCpuUsage": true,
"showDiskAvailable": false,
"showDiskUsage": false,
"showDiskUsageAsPercent": false,
"showGpuTemp": false,
"showLoadAverage": false,
"showMemoryAsPercent": false,
"showMemoryUsage": true,
"showNetworkStats": true,
"showNetworkStats": false,
"showSwapUsage": false,
"useMonospaceFont": true,
"usePrimaryColor": true
"textColor": "none",
"useMonospaceFont": true
},
{
"defaultSettings": {
"arrowType": "caret",
"byteThresholdActive": 1024,
"fontSizeModifier": 1,
"forceMegabytes": false,
"iconSizeModifier": 1,
"minWidth": 0,
"showNumbers": true,
"spacingInbetween": 0,
"useCustomColors": false
},
"id": "plugin:network-indicator"
},
{
"colorizeIcons": true,
@@ -174,25 +198,10 @@
}
],
"right": [
{
"defaultSettings": {
"audioCodec": "opus",
"audioSource": "default_output",
"colorRange": "limited",
"copyToClipboard": false,
"directory": "",
"filenamePattern": "recording_yyyyMMdd_HHmmss",
"frameRate": "60",
"quality": "very_high",
"showCursor": true,
"videoCodec": "h264",
"videoSource": "portal"
},
"id": "plugin:screen-recorder"
},
{
"blacklist": [
],
"chevronColor": "none",
"colorizeIcons": false,
"drawerEnabled": true,
"hidePassive": false,
@@ -233,12 +242,16 @@
},
{
"displayMode": "alwaysShow",
"iconColor": "none",
"id": "Volume",
"middleClickCommand": "pwvucontrol || pavucontrol"
"middleClickCommand": "pwvucontrol || pavucontrol",
"textColor": "none"
},
{
"displayMode": "onhover",
"id": "Brightness"
"iconColor": "none",
"id": "Brightness",
"textColor": "none"
},
{
"defaultSettings": {
@@ -254,18 +267,21 @@
"hideIfNotDetected": true,
"id": "Battery",
"showNoctaliaPerformance": false,
"showPowerProfiles": true,
"warningThreshold": 30
"showPowerProfiles": true
},
{
"displayMode": "alwaysShow",
"id": "VPN"
"iconColor": "none",
"id": "VPN",
"textColor": "none"
},
{
"hideWhenZero": true,
"hideWhenZeroUnread": false,
"iconColor": "none",
"id": "NotificationHistory",
"showUnreadBadge": true
"showUnreadBadge": true,
"unreadBadgeColor": "primary"
},
{
"colorizeDistroLogo": false,
@@ -382,18 +398,20 @@
"backgroundOpacity": 1,
"colorizeIcons": true,
"deadOpacity": 0.6,
"displayMode": "always_visible",
"displayMode": "exclusive",
"enabled": false,
"floatingRatio": 1,
"inactiveIndicators": false,
"monitors": [
"DP-5"
],
"onlySameOutput": false,
"pinnedApps": [
"firefox"
],
"pinnedStatic": false,
"pinnedStatic": true,
"position": "bottom",
"size": 1
"size": 0.77
},
"general": {
"allowPanelsOnScreenWithoutBar": true,
@@ -403,6 +421,8 @@
"autoStartAuth": false,
"avatarImage": "/home/aiden/.face",
"boxRadiusRatio": 1,
"clockFormat": "hh\\nmm",
"clockStyle": "custom",
"compactLockScreen": false,
"dimmerOpacity": 0,
"enableLockScreenCountdown": true,
@@ -469,6 +489,7 @@
"notifications": {
"backgroundOpacity": 1,
"criticalUrgencyDuration": 15,
"enableBatteryToast": true,
"enableKeyboardLayoutToast": true,
"enableMediaToast": false,
"enabled": true,
@@ -509,6 +530,9 @@
],
"overlayLayer": true
},
"plugins": {
"autoUpdate": false
},
"sessionMenu": {
"countdownDuration": 10000,
"enableCountdown": true,
@@ -556,12 +580,16 @@
"showHeader": true,
"showNumberLabels": true
},
"settingsVersion": 46,
"settingsVersion": 49,
"systemMonitor": {
"batteryCriticalThreshold": 5,
"batteryWarningThreshold": 20,
"cpuCriticalThreshold": 90,
"cpuPollingInterval": 3000,
"cpuPollingInterval": 1000,
"cpuWarningThreshold": 80,
"criticalColor": "",
"diskAvailCriticalThreshold": 10,
"diskAvailWarningThreshold": 20,
"diskCriticalThreshold": 90,
"diskPollingInterval": 3000,
"diskWarningThreshold": 80,
@@ -572,13 +600,12 @@
"gpuWarningThreshold": 80,
"loadAvgPollingInterval": 3000,
"memCriticalThreshold": 90,
"memPollingInterval": 3000,
"memPollingInterval": 1000,
"memWarningThreshold": 80,
"networkPollingInterval": 3000,
"networkPollingInterval": 1000,
"swapCriticalThreshold": 90,
"swapWarningThreshold": 80,
"tempCriticalThreshold": 90,
"tempPollingInterval": 3000,
"tempWarningThreshold": 80,
"useCustomColors": false,
"warningColor": ""
@@ -644,6 +671,7 @@
"setWallpaperOnAllMonitors": false,
"showHiddenFiles": false,
"solidColor": "#1a1a2e",
"sortOrder": "name",
"transitionDuration": 1500,
"transitionEdgeSmoothness": 0.05,
"transitionType": "random",