diff --git a/Assets/Translations/de.json b/Assets/Translations/de.json index 17b325ae1..608b50cab 100644 --- a/Assets/Translations/de.json +++ b/Assets/Translations/de.json @@ -216,7 +216,11 @@ "swap-usage-description": "Swap-Speichernutzung anzeigen.", "swap-usage-label": "Swap-Auslastung", "use-monospace-font-description": "Verwende eine Monospace-Schriftart für eine konsistente Zeichenbreite.", - "use-monospace-font-label": "Schriftart mit fester Breite" + "use-monospace-font-label": "Schriftart mit fester Breite", + "storage-as-percentage-label": "Festplatte in Prozent", + "storage-as-percentage-description": "Zeige den Speicherplatz als Prozentsatz statt als absolute Werte an.", + "storage-available-label": "Verfügbarer Speicherplatz", + "storage-available-description": "Zeigt an, wie viel Speicherplatz verfügbar ist, anstatt wie viel belegt ist." }, "taskbar": { "colorize-icons-description": "Theme-Farben auf Taskbar-Symbole anwenden.", @@ -1350,6 +1354,7 @@ "critical-color-label": "Kritische Farbe", "custom-highlight-colors-title-label": "Benutzerdefinierte Hervorhebungsfarben", "disk-section-label": "Festplattennutzung", + "disk-available-label": "Festplattenspeicher verfügbar", "enable-dgpu-monitoring-description": "Warnung: Dies aktiviert Ihre dedizierte GPU (NVIDIA/AMD), was die Akkulaufzeit von Laptops mit Hybridgrafik erheblich beeinträchtigen kann.", "enable-dgpu-monitoring-label": "Dedizierte GPU-Überwachung aktivieren", "external-monitor-description": "Geben Sie den Befehl oder Anwendungspfad ein, um die externe Systemmonitor-Anwendung zu starten.", diff --git a/Assets/Translations/en.json b/Assets/Translations/en.json index 2c5367ef7..570ada597 100644 --- a/Assets/Translations/en.json +++ b/Assets/Translations/en.json @@ -216,7 +216,11 @@ "swap-usage-description": "Show swap memory usage.", "swap-usage-label": "Swap usage", "use-monospace-font-description": "Use monospace font for consistent character width.", - "use-monospace-font-label": "Monospace font" + "use-monospace-font-label": "Monospace font", + "storage-as-percentage-label": "Disk as percentage", + "storage-as-percentage-description": "Show disk space as percentage instead of absolute values.", + "storage-available-label": "Disk space available", + "storage-available-description": "Shows how much disk space is available instead of how much is used." }, "taskbar": { "colorize-icons-description": "Apply theme colors to taskbar icons.", @@ -1351,6 +1355,7 @@ "critical-color-label": "Critical color", "custom-highlight-colors-title-label": "Custom highlight colors", "disk-section-label": "Disk usage", + "disk-available-label": "Disk available", "enable-dgpu-monitoring-description": "Warning: This will wake up your discrete GPU (NVIDIA/AMD), which may significantly impact battery life on laptops with hybrid graphics.", "enable-dgpu-monitoring-label": "Enable discrete GPU monitoring", "external-monitor-description": "Enter the command or application path to launch when activating the external system monitor application.", diff --git a/Assets/Translations/es.json b/Assets/Translations/es.json index b8c3a0fae..ddcff92e6 100644 --- a/Assets/Translations/es.json +++ b/Assets/Translations/es.json @@ -216,7 +216,11 @@ "swap-usage-description": "Mostrar el uso de la memoria swap.", "swap-usage-label": "Uso de swap", "use-monospace-font-description": "Utilice fuente monoespaciada para un ancho de carácter consistente.", - "use-monospace-font-label": "Fuente monoespaciada" + "use-monospace-font-label": "Fuente monoespaciada", + "storage-as-percentage-label": "Disco como porcentaje", + "storage-as-percentage-description": "Mostrar el espacio en disco como porcentaje en lugar de valores absolutos.", + "storage-available-label": "Espacio disponible en disco", + "storage-available-description": "Muestra cuánto espacio en disco hay disponible en lugar de cuánto se está utilizando." }, "taskbar": { "colorize-icons-description": "Aplicar colores del tema a los iconos de la barra de tareas.", @@ -1350,6 +1354,7 @@ "critical-color-label": "Color crítico", "custom-highlight-colors-title-label": "Colores de resaltado personalizados", "disk-section-label": "Uso de disco", + "disk-available-label": "Disco disponible", "enable-dgpu-monitoring-description": "Advertencia: Esto activará tu GPU dedicada (NVIDIA/AMD), lo que podría afectar significativamente la duración de la batería en portátiles con gráficos híbridos.", "enable-dgpu-monitoring-label": "Habilitar la monitorización de la GPU dedicada", "external-monitor-description": "Ingrese el comando o ruta de la aplicación para ejecutar al activar la aplicación externa del monitor del sistema.", diff --git a/Assets/Translations/fr.json b/Assets/Translations/fr.json index db2824ff3..ad22c23f0 100644 --- a/Assets/Translations/fr.json +++ b/Assets/Translations/fr.json @@ -216,7 +216,11 @@ "swap-usage-description": "Afficher l'utilisation de la mémoire swap.", "swap-usage-label": "Utilisation du swap", "use-monospace-font-description": "Utilisez une police de caractères à chasse fixe pour une largeur de caractère uniforme.", - "use-monospace-font-label": "Police à chasse fixe" + "use-monospace-font-label": "Police à chasse fixe", + "storage-as-percentage-label": "Disque en pourcentage", + "storage-as-percentage-description": "Afficher l'espace disque en pourcentage plutôt qu'en valeurs absolues.", + "storage-available-label": "Espace disque disponible", + "storage-available-description": "Affiche l'espace disque disponible plutôt que l'espace utilisé." }, "taskbar": { "colorize-icons-description": "Appliquer les couleurs du thème aux icônes de la barre des tâches.", @@ -1350,6 +1354,7 @@ "critical-color-label": "Couleur critique", "custom-highlight-colors-title-label": "Couleurs de surbrillance personnalisées", "disk-section-label": "Utilisation disque", + "disk-available-label": "Disque disponible", "enable-dgpu-monitoring-description": "Attention : Ceci va activer votre GPU dédié (NVIDIA/AMD), ce qui peut avoir un impact significatif sur l'autonomie de la batterie des ordinateurs portables dotés de cartes graphiques hybrides.", "enable-dgpu-monitoring-label": "Activer la surveillance du GPU dédié", "external-monitor-description": "Entrez la commande ou le chemin de l'application à lancer lors de l'activation de l'application externe de surveillance du système.", diff --git a/Assets/Translations/hu.json b/Assets/Translations/hu.json index 021cd35e9..10206c4dd 100644 --- a/Assets/Translations/hu.json +++ b/Assets/Translations/hu.json @@ -216,7 +216,11 @@ "swap-usage-description": "Cserehely memória használatának megjelenítése.", "swap-usage-label": "Cserehely használat", "use-monospace-font-description": "Használjon monospace betűtípust az egységes karakter-szélességhez.", - "use-monospace-font-label": "Monospace betűtípus" + "use-monospace-font-label": "Monospace betűtípus", + "storage-as-percentage-label": "Lemez százalékban kifejezve", + "storage-as-percentage-description": "A lemezterületet százalékban jeleníti meg, nem abszolút értékekben.", + "storage-available-label": "Rendelkezésre álló lemezterület", + "storage-available-description": "Megmutatja, hogy mennyi lemezterület áll rendelkezésre, ahelyett, hogy mennyi van használatban." }, "taskbar": { "colorize-icons-description": "Témaszínek alkalmazása a tálca ikonjaira.", @@ -1350,6 +1354,7 @@ "critical-color-label": "Kritikus szín", "custom-highlight-colors-title-label": "Egyéni kiemelőszínek", "disk-section-label": "Lemezhasználat", + "disk-available-label": "Lemez rendelkezésre áll", "enable-dgpu-monitoring-description": "Figyelem: Ez felébreszti a dedikált GPU-t (NVIDIA/AMD), ami jelentősen befolyásolhatja az akkumulátor élettartamát a hibrid grafikával rendelkező laptopokon.", "enable-dgpu-monitoring-label": "Dedikált GPU figyelés engedélyezése", "external-monitor-description": "Adja meg a parancsot vagy alkalmazás elérési útját a külső rendszermonitor alkalmazás indításához.", diff --git a/Assets/Translations/ja.json b/Assets/Translations/ja.json index 9340fe1b3..12b63e052 100644 --- a/Assets/Translations/ja.json +++ b/Assets/Translations/ja.json @@ -216,7 +216,11 @@ "swap-usage-description": "スワップメモリの使用状況を表示します。", "swap-usage-label": "スワップ使用量", "use-monospace-font-description": "タイプライター体で翻訳します。", - "use-monospace-font-label": "等幅フォント" + "use-monospace-font-label": "等幅フォント", + "storage-as-percentage-label": "ディスク使用率(パーセンテージ)", + "storage-as-percentage-description": "ディスク容量を絶対値ではなくパーセンテージで表示する。", + "storage-available-label": "利用可能なディスク容量", + "storage-available-description": "使用済みディスク容量ではなく、空きディスク容量を表示します。" }, "taskbar": { "colorize-icons-description": "タスクバーのアイコンにテーマカラーを適用します。", @@ -1350,6 +1354,7 @@ "critical-color-label": "危険時の色", "custom-highlight-colors-title-label": "カスタムハイライト色", "disk-section-label": "ストレージ使用量", + "disk-available-label": "ディスク空き容量", "enable-dgpu-monitoring-description": "警告: これにより外部GPU (NVIDIA/AMD) が起動状態になるため、ハイブリッドグラフィックス搭載のノート PC ではバッテリー駆動時間に大きな影響を与える可能性があります。", "enable-dgpu-monitoring-label": "外部GPUモニタリングを有効にする", "external-monitor-description": "外部システムモニターアプリケーションを起動する際に実行するコマンドまたはアプリケーションパスを入力してください。", diff --git a/Assets/Translations/ko-KR.json b/Assets/Translations/ko-KR.json index 31132a5c1..55abe00b8 100644 --- a/Assets/Translations/ko-KR.json +++ b/Assets/Translations/ko-KR.json @@ -216,7 +216,11 @@ "swap-usage-description": "스왑 메모리 사용량을 표시합니다.", "swap-usage-label": "스왑 사용량", "use-monospace-font-description": "일관된 문자 너비를 위해 고정폭 글꼴을 사용합니다.", - "use-monospace-font-label": "고정폭 글꼴" + "use-monospace-font-label": "고정폭 글꼴", + "storage-as-percentage-label": "디스크 사용률(퍼센트)", + "storage-as-percentage-description": "디스크 공간을 절대값 대신 백분율로 표시합니다.", + "storage-available-label": "사용 가능한 디스크 공간", + "storage-available-description": "사용된 디스크 공간이 아닌 사용 가능한 디스크 공간을 표시합니다." }, "taskbar": { "colorize-icons-description": "작업 표시줄 아이콘에 테마 색상을 적용합니다.", @@ -1350,6 +1354,7 @@ "critical-color-label": "위험 색상", "custom-highlight-colors-title-label": "사용자 지정 강조 색상", "disk-section-label": "디스크 사용량", + "disk-available-label": "사용 가능한 디스크 공간", "enable-dgpu-monitoring-description": "경고: 이 기능은 외장 GPU(NVIDIA/AMD)를 깨워 하이브리드 그래픽 노트북의 배터리 수명에 상당한 영향을 줄 수 있습니다.", "enable-dgpu-monitoring-label": "외장 GPU 모니터링 활성화", "external-monitor-description": "외부 시스템 모니터 애플리케이션 기능을 활성화할 때 실행할 명령 또는 애플리케이션 경로를 입력하세요.", diff --git a/Assets/Translations/ku.json b/Assets/Translations/ku.json index 74d1cb832..fb1486585 100644 --- a/Assets/Translations/ku.json +++ b/Assets/Translations/ku.json @@ -216,7 +216,11 @@ "swap-usage-description": "Bikaranîna bîra swapê nîşan bide.", "swap-usage-label": "Bikaranîna Swapê", "use-monospace-font-description": "Bi kar tîne fonta monospace ji bo firehiya karakterê ya domdar.", - "use-monospace-font-label": "Tîpa yek-firehî" + "use-monospace-font-label": "Tîpa yek-firehî", + "storage-as-percentage-label": "Dîsk wekî rêje", + "storage-as-percentage-description": "Cihê dîskê li şûna nirxên mutleq, wekî rêjeyê nîşan bide.", + "storage-available-label": "Cihê dîskê yê berdest", + "storage-available-description": "Nîşan dide ka çiqas cihê dîskê berdest e, li şûna ku nîşan bide ka çiqas hatiye bikaranîn." }, "taskbar": { "colorize-icons-description": "Rengên temayê li îkonên taskbarê bicîh bike.", @@ -1350,6 +1354,7 @@ "critical-color-label": "Rengê krîtîk", "custom-highlight-colors-title-label": "Rengên ronîkirina xwerû", "disk-section-label": "Bikaranîna dîskê", + "disk-available-label": "Dîsk berdest e", "enable-dgpu-monitoring-description": "Hişyarî: Ev dê YKG a te ya veqetandî (NVIDIA/AMD) hişyar bike, ku dibe ku bandorek girîng li ser jiyana pîlê li ser laptopên bi grafîkên hîbrîd bike.", "enable-dgpu-monitoring-label": "Çavdêriya YKG veqetandî çalak bike", "external-monitor-description": "Fermanî an rêya sepanê binivîse ku dema sepana monitora pergala derveyî çalak dike were xebitandin.", diff --git a/Assets/Translations/nl.json b/Assets/Translations/nl.json index 701f4bc05..7bafa701e 100644 --- a/Assets/Translations/nl.json +++ b/Assets/Translations/nl.json @@ -216,7 +216,11 @@ "swap-usage-description": "Toon swap geheugengebruik.", "swap-usage-label": "Swapgebruik", "use-monospace-font-description": "Gebruik een monospace lettertype voor een consistente tekenbreedte.", - "use-monospace-font-label": "Lettertype met vaste breedte" + "use-monospace-font-label": "Lettertype met vaste breedte", + "storage-as-percentage-label": "Schijf als percentage", + "storage-as-percentage-description": "Geef schijfruimte weer als percentage in plaats van absolute waarden.", + "storage-available-label": "Beschikbare schijfruimte", + "storage-available-description": "Geeft aan hoeveel schijfruimte beschikbaar is in plaats van hoeveel er in gebruik is." }, "taskbar": { "colorize-icons-description": "Pas themakleuren toe op taakbalkpictogrammen.", @@ -1350,6 +1354,7 @@ "critical-color-label": "Kritische kleur", "custom-highlight-colors-title-label": "Aangepaste markeerkleuren", "disk-section-label": "Schijfgebruik", + "disk-available-label": "Schijf beschikbaar", "enable-dgpu-monitoring-description": "Waarschuwing: Dit zal uw dedicated GPU (NVIDIA/AMD) activeren, wat een aanzienlijke impact kan hebben op de accuduur van laptops met hybride grafische kaarten.", "enable-dgpu-monitoring-label": "Dedicated GPU-monitoring inschakelen", "external-monitor-description": "Voer de opdracht of applicatiepad in om te starten bij het activeren van de externe systeemmonitor applicatie.", diff --git a/Assets/Translations/pl.json b/Assets/Translations/pl.json index 230c1f87e..0291b139e 100644 --- a/Assets/Translations/pl.json +++ b/Assets/Translations/pl.json @@ -216,7 +216,11 @@ "swap-usage-description": "Pokaż użycie pamięci wymiany.", "swap-usage-label": "Użycie pamięci wymiany", "use-monospace-font-description": "Użyj czcionki o stałej szerokości znaków dla zachowania spójnej szerokości znaków.", - "use-monospace-font-label": "Czcionka o stałej szerokości znaków" + "use-monospace-font-label": "Czcionka o stałej szerokości znaków", + "storage-as-percentage-label": "Dysk jako procent", + "storage-as-percentage-description": "Pokaż miejsce na dysku jako wartość procentową zamiast wartości bezwzględnej.", + "storage-available-label": "Dostępna przestrzeń dyskowa", + "storage-available-description": "Pokazuje, ile miejsca na dysku jest dostępne, a nie ile jest zajęte." }, "taskbar": { "colorize-icons-description": "Zastosuj kolory motywu do ikon paska zadań.", @@ -1350,6 +1354,7 @@ "critical-color-label": "Kolor krytyczny", "custom-highlight-colors-title-label": "Własne kolory podświetlenia", "disk-section-label": "Użycie dysku", + "disk-available-label": "Dysk dostępny", "enable-dgpu-monitoring-description": "Ostrzeżenie: To obudzi twoją dedykowaną kartę graficzną (NVIDIA/AMD), co może znacząco wpłynąć na żywotność baterii w laptopach z hybrydową grafiką.", "enable-dgpu-monitoring-label": "Włącz monitorowanie dedykowanej karty graficznej", "external-monitor-description": "Wprowadź polecenie lub ścieżkę aplikacji do uruchomienia przy aktywacji zewnętrznej aplikacji monitora systemu.", diff --git a/Assets/Translations/pt.json b/Assets/Translations/pt.json index 624773d6f..6b40802b2 100644 --- a/Assets/Translations/pt.json +++ b/Assets/Translations/pt.json @@ -216,7 +216,11 @@ "swap-usage-description": "Mostrar o uso da memória swap.", "swap-usage-label": "Utilização de swap", "use-monospace-font-description": "Use fonte monoespaçada para largura de caractere consistente.", - "use-monospace-font-label": "Fonte monoespaçada" + "use-monospace-font-label": "Fonte monoespaçada", + "storage-as-percentage-label": "Disco em percentagem", + "storage-as-percentage-description": "Mostrar o espaço em disco como percentagem em vez de valores absolutos.", + "storage-available-label": "Espaço disponível em disco", + "storage-available-description": "Mostra quanto espaço em disco está disponível, em vez de quanto está a ser utilizado." }, "taskbar": { "colorize-icons-description": "Aplicar cores do tema aos ícones da barra de tarefas.", @@ -1350,6 +1354,7 @@ "critical-color-label": "Cor crítica", "custom-highlight-colors-title-label": "Cores de destaque personalizadas", "disk-section-label": "Uso do disco", + "disk-available-label": "Disco disponível", "enable-dgpu-monitoring-description": "Atenção: Isto irá ativar sua GPU dedicada (NVIDIA/AMD), o que pode impactar significativamente a duração da bateria em laptops com gráficos híbridos.", "enable-dgpu-monitoring-label": "Ativar o monitoramento da GPU dedicada", "external-monitor-description": "Digite o comando ou caminho da aplicação para executar ao ativar a aplicação externa de monitoramento do sistema.", diff --git a/Assets/Translations/ru.json b/Assets/Translations/ru.json index 3a49d457e..3cfc0f7ac 100644 --- a/Assets/Translations/ru.json +++ b/Assets/Translations/ru.json @@ -216,7 +216,11 @@ "swap-usage-description": "Показать использование swap-памяти.", "swap-usage-label": "Использование swap", "use-monospace-font-description": "Используйте моноширинный шрифт для единообразной ширины символов.", - "use-monospace-font-label": "Моноширинный шрифт" + "use-monospace-font-label": "Моноширинный шрифт", + "storage-as-percentage-label": "Диск в процентах", + "storage-as-percentage-description": "Показывать место на диске в процентах, а не в абсолютных значениях.", + "storage-available-label": "Доступное место на диске", + "storage-available-description": "Показывает, сколько дискового пространства доступно, а не сколько используется." }, "taskbar": { "colorize-icons-description": "Применить цвета темы к иконкам панели задач.", @@ -1350,6 +1354,7 @@ "critical-color-label": "Критический цвет", "custom-highlight-colors-title-label": "Пользовательские цвета выделения", "disk-section-label": "Использование диска", + "disk-available-label": "Доступный диск", "enable-dgpu-monitoring-description": "Внимание: Это разбудит ваш дискретный графический процессор (NVIDIA/AMD), что может значительно повлиять на время работы от аккумулятора на ноутбуках с гибридной графикой.", "enable-dgpu-monitoring-label": "Включить мониторинг дискретного GPU", "external-monitor-description": "Введите команду или путь к приложению для запуска при активации внешнего приложения мониторинга системы.", diff --git a/Assets/Translations/sv.json b/Assets/Translations/sv.json index 711de2ad5..2879f1b4b 100644 --- a/Assets/Translations/sv.json +++ b/Assets/Translations/sv.json @@ -216,7 +216,11 @@ "swap-usage-description": "Visa användning av växlingsminne.", "swap-usage-label": "Växlingsanvändning", "use-monospace-font-description": "Använd monospace-teckensnitt för enhetlig teckenbredd. ", - "use-monospace-font-label": "Teckensnitt för fast bredd" + "use-monospace-font-label": "Teckensnitt för fast bredd", + "storage-as-percentage-label": "Disk i procent", + "storage-as-percentage-description": "Visa diskutrymme som procentandel istället för absoluta värden.", + "storage-available-label": "Tillgängligt diskutrymme", + "storage-available-description": "Visar hur mycket diskutrymme som är tillgängligt istället för hur mycket som används." }, "taskbar": { "colorize-icons-description": "Tillämpa temafärger på ikoner i aktivitetsfältet.", @@ -1348,6 +1352,7 @@ "critical-color-label": "Kritisk färg", "custom-highlight-colors-title-label": "Anpassade markeringsfärger", "disk-section-label": "Diskanvändning", + "disk-available-label": "Disk tillgänglig", "enable-dgpu-monitoring-description": "Varning: Detta aktiverar din diskreta GPU (NVIDIA/AMD), vilket kan påverka batteritiden avsevärt på bärbara datorer med hybridgrafik.", "enable-dgpu-monitoring-label": "Aktivera övervakning av diskret GPU", "external-monitor-description": "Ange kommandot eller applikationsvägen som ska startas när den externa systemövervakningsapplikationen aktiveras.", diff --git a/Assets/Translations/tr.json b/Assets/Translations/tr.json index 45ed92496..1f5b5c976 100644 --- a/Assets/Translations/tr.json +++ b/Assets/Translations/tr.json @@ -216,7 +216,11 @@ "swap-usage-description": "Takas belleği kullanımını göster.", "swap-usage-label": "Takas kullanımı", "use-monospace-font-description": "Tekdüze karakter genişliği için tek aralıklı yazı tipini kullanın.", - "use-monospace-font-label": "Tek aralıklı yazı tipi" + "use-monospace-font-label": "Tek aralıklı yazı tipi", + "storage-as-percentage-label": "Disk yüzdesi olarak", + "storage-as-percentage-description": "Disk alanını mutlak değerler yerine yüzde olarak göster.", + "storage-available-label": "Kullanılabilir disk alanı", + "storage-available-description": "Kullanılan disk alanı yerine kullanılabilir disk alanının ne kadar olduğunu gösterir." }, "taskbar": { "colorize-icons-description": "Görev çubuğu simgelerine tema renklerini uygula.", @@ -1350,6 +1354,7 @@ "critical-color-label": "Kritik renk", "custom-highlight-colors-title-label": "Özel vurgulama renkleri", "disk-section-label": "Disk kullanımı", + "disk-available-label": "Disk kullanılabilir", "enable-dgpu-monitoring-description": "Uyarı: Bu, ayrık GPU'nuzu (NVIDIA/AMD) uyandıracak ve bu da hibrit grafiklere sahip dizüstü bilgisayarlarda pil ömrünü önemli ölçüde etkileyebilir.", "enable-dgpu-monitoring-label": "Ayrık GPU izlemeyi etkinleştir", "external-monitor-description": "Harici sistem izleyici uygulamasını etkinleştirirken başlatılacak komut veya uygulama yolunu girin.", diff --git a/Assets/settings-default.json b/Assets/settings-default.json index bca33c3dc..e804cc070 100644 --- a/Assets/settings-default.json +++ b/Assets/settings-default.json @@ -270,6 +270,8 @@ "swapCriticalThreshold": 90, "diskWarningThreshold": 80, "diskCriticalThreshold": 90, + "diskAvailWarningThreshold": 20, + "diskAvailCriticalThreshold": 10, "cpuPollingInterval": 1000, "gpuPollingInterval": 3000, "enableDgpuMonitoring": false, diff --git a/Assets/settings-widgets-default.json b/Assets/settings-widgets-default.json index 27bacb6dd..35f84a98c 100644 --- a/Assets/settings-widgets-default.json +++ b/Assets/settings-widgets-default.json @@ -138,7 +138,8 @@ "showSwapUsage": false, "showNetworkStats": false, "showDiskUsage": false, - "showDiskAsFree": false, + "showDiskUsageAsPercent": false, + "showDiskAvailable": false, "diskPath": "/" }, "Taskbar": { diff --git a/Commons/Settings.qml b/Commons/Settings.qml index 9e02f549b..c7271282b 100644 --- a/Commons/Settings.qml +++ b/Commons/Settings.qml @@ -482,6 +482,8 @@ Singleton { property int swapCriticalThreshold: 90 property int diskWarningThreshold: 80 property int diskCriticalThreshold: 90 + property int diskAvailWarningThreshold: 20 + property int diskAvailCriticalThreshold: 10 property int cpuPollingInterval: 1000 property int gpuPollingInterval: 3000 property bool enableDgpuMonitoring: false // Opt-in: reading dGPU sysfs/nvidia-smi wakes it from D3cold, draining battery diff --git a/Modules/Bar/Widgets/SystemMonitor.qml b/Modules/Bar/Widgets/SystemMonitor.qml index 8c08c46ba..2458d526a 100644 --- a/Modules/Bar/Widgets/SystemMonitor.qml +++ b/Modules/Bar/Widgets/SystemMonitor.qml @@ -51,7 +51,8 @@ Item { readonly property bool showSwapUsage: (widgetSettings.showSwapUsage !== undefined) ? widgetSettings.showSwapUsage : widgetMetadata.showSwapUsage readonly property bool showNetworkStats: (widgetSettings.showNetworkStats !== undefined) ? widgetSettings.showNetworkStats : widgetMetadata.showNetworkStats readonly property bool showDiskUsage: (widgetSettings.showDiskUsage !== undefined) ? widgetSettings.showDiskUsage : widgetMetadata.showDiskUsage - readonly property bool showDiskAsFree: (widgetSettings.showDiskAsFree !== undefined) ? widgetSettings.showDiskAsFree : widgetMetadata.showDiskAsFree + readonly property bool showDiskUsageAsPercent: (widgetSettings.showDiskUsageAsPercent !== undefined) ? widgetSettings.showDiskUsageAsPercent : widgetMetadata.showDiskUsageAsPercent + readonly property bool showDiskAvailable: (widgetSettings.showDiskAvailable !== undefined) ? widgetSettings.showDiskAvailable : widgetMetadata.showDiskAvailable readonly property bool showLoadAverage: (widgetSettings.showLoadAverage !== undefined) ? widgetSettings.showLoadAverage : widgetMetadata.showLoadAverage readonly property string diskPath: (widgetSettings.diskPath !== undefined) ? widgetSettings.diskPath : widgetMetadata.diskPath readonly property string fontFamily: useMonospaceFont ? Settings.data.ui.fontFixed : Settings.data.ui.fontDefault @@ -94,11 +95,11 @@ Item { } // Memory - rows.push([I18n.tr("common.memory"), `${Math.round(SystemStatService.memPercent)}% (${SystemStatService.formatMemoryGb(SystemStatService.memGb).replace(/[^0-9.]/g, "") + " GB"})`]); + rows.push([I18n.tr("common.memory"), `${Math.round(SystemStatService.memPercent)}% (${SystemStatService.formatGigabytes(SystemStatService.memGb).replace(/[^0-9.]/g, "") + " GB"})`]); // Swap (if available) if (SystemStatService.swapTotalGb > 0) { - rows.push([I18n.tr("bar.system-monitor.swap-usage-label"), `${Math.round(SystemStatService.swapPercent)}% (${SystemStatService.formatMemoryGb(SystemStatService.swapGb).replace(/[^0-9.]/g, "") + " GB"})`]); + rows.push([I18n.tr("bar.system-monitor.swap-usage-label"), `${Math.round(SystemStatService.swapPercent)}% (${SystemStatService.formatGigabytes(SystemStatService.swapGb).replace(/[^0-9.]/g, "") + " GB"})`]); } // Network @@ -110,7 +111,7 @@ Item { if (diskPercent !== undefined) { const usedGb = SystemStatService.diskUsedGb[diskPath] || 0; const sizeGb = SystemStatService.diskSizeGb[diskPath] || 0; - const availGb = SystemStatService.diskAvailGb[diskPath] || 0; + const availGb = SystemStatService.diskAvailableGb[diskPath] || 0; rows.push([I18n.tr("system-monitor.disk"), `${diskPercent}% (${usedGb.toFixed(1)} / ${sizeGb.toFixed(1)} GB)`]); rows.push([I18n.tr("common.available"), `${availGb.toFixed(1)} GB`]); } @@ -595,7 +596,7 @@ Item { // Text mode NText { visible: !compactMode - text: showMemoryAsPercent ? `${Math.round(SystemStatService.memPercent)}%` : SystemStatService.formatMemoryGb(SystemStatService.memGb) + text: showMemoryAsPercent ? `${Math.round(SystemStatService.memPercent)}%` : SystemStatService.formatGigabytes(SystemStatService.memGb) family: fontFamily pointSize: barFontSize applyUiScale: false @@ -861,14 +862,10 @@ Item { // Text mode NText { visible: !compactMode - text: { - if (showDiskAsFree && !isVertical) { - let avail = SystemStatService.diskAvailGb[diskPath] || 0; - return avail.toFixed(1) + "G"; - } else { - return SystemStatService.diskPercents[diskPath] ? `${SystemStatService.diskPercents[diskPath]}%` : "n/a"; - } - } + text: SystemStatService.formatDiskDisplay(diskPath, { + percent: showDiskUsageAsPercent, + available: showDiskAvailable + }) family: fontFamily pointSize: barFontSize applyUiScale: false @@ -890,8 +887,8 @@ Item { Layout.column: 1 onLoaded: { - item.ratio = Qt.binding(() => (SystemStatService.diskPercents[diskPath] ?? 0) / 100); - item.statColor = Qt.binding(() => SystemStatService.getDiskColor(diskPath)); + item.ratio = Qt.binding(() => (showDiskAvailable ? SystemStatService.diskAvailPercents[diskPath] : SystemStatService.diskPercents[diskPath] ?? 0) / 100); + item.statColor = Qt.binding(() => SystemStatService.getDiskColor(diskPath, showDiskAvailable)); } } } diff --git a/Modules/Panels/Settings/Bar/WidgetSettings/SystemMonitorSettings.qml b/Modules/Panels/Settings/Bar/WidgetSettings/SystemMonitorSettings.qml index 9e55cfba0..775088b4e 100644 --- a/Modules/Panels/Settings/Bar/WidgetSettings/SystemMonitorSettings.qml +++ b/Modules/Panels/Settings/Bar/WidgetSettings/SystemMonitorSettings.qml @@ -29,7 +29,8 @@ ColumnLayout { property bool valueShowSwapUsage: widgetData.showSwapUsage !== undefined ? widgetData.showSwapUsage : widgetMetadata.showSwapUsage property bool valueShowNetworkStats: widgetData.showNetworkStats !== undefined ? widgetData.showNetworkStats : widgetMetadata.showNetworkStats property bool valueShowDiskUsage: widgetData.showDiskUsage !== undefined ? widgetData.showDiskUsage : widgetMetadata.showDiskUsage - property bool valueShowDiskAsFree: widgetData.showDiskAsFree !== undefined ? widgetData.showDiskAsFree : widgetMetadata.showDiskAsFree + property bool valueShowDiskUsageAsPercent: widgetData.showDiskUsageAsPercent !== undefined ? widgetData.showDiskUsageAsPercent : widgetMetadata.showDiskUsageAsPercent + property bool valueShowDiskAvailable: widgetData.showDiskAvailable !== undefined ? widgetData.showDiskAvailable : widgetMetadata.showDiskAvailable property string valueDiskPath: widgetData.diskPath !== undefined ? widgetData.diskPath : widgetMetadata.diskPath function saveSettings() { @@ -47,7 +48,8 @@ ColumnLayout { settings.showSwapUsage = valueShowSwapUsage; settings.showNetworkStats = valueShowNetworkStats; settings.showDiskUsage = valueShowDiskUsage; - settings.showDiskAsFree = valueShowDiskAsFree; + settings.showDiskUsageAsPercent = valueShowDiskUsageAsPercent; + settings.showDiskAvailable = valueShowDiskAvailable; settings.diskPath = valueDiskPath; return settings; @@ -211,16 +213,27 @@ ColumnLayout { } NToggle { - id: showDiskAsFree + id: showDiskUsageAsPercent Layout.fillWidth: true - label: "Show Free Space" // TODO: use I18n.tr - description: "Display available space (GB) instead of percentage" // TODO: use I18n.tr - checked: valueShowDiskAsFree + label: I18n.tr("bar.system-monitor.storage-as-percentage-label") + description: I18n.tr("bar.system-monitor.storage-as-percentage-description") + checked: valueShowDiskUsageAsPercent onToggled: checked => { - valueShowDiskAsFree = checked; + valueShowDiskUsageAsPercent = checked; + settingsChanged(saveSettings()); + } + } + + NToggle { + id: showDiskAvailable + Layout.fillWidth: true + label: I18n.tr("bar.system-monitor.storage-available-label") + description: I18n.tr("bar.system-monitor.storage-available-description") + checked: valueShowDiskAvailable + onToggled: checked => { + valueShowDiskAvailable = checked; settingsChanged(saveSettings()); } - visible: valueShowDiskUsage } NComboBox { diff --git a/Modules/Panels/Settings/Tabs/About/VersionSubTab.qml b/Modules/Panels/Settings/Tabs/About/VersionSubTab.qml index ed6e92cca..8e7267906 100644 --- a/Modules/Panels/Settings/Tabs/About/VersionSubTab.qml +++ b/Modules/Panels/Settings/Tabs/About/VersionSubTab.qml @@ -140,7 +140,7 @@ ColumnLayout { info += "GPU: " + gpu.result.map(g => g.name || "Unknown").join(", ") + "\n"; } if (mem?.result) { - info += "Memory: " + SystemStatService.formatMemoryGb(mem.result.total / root.giga) + "\n"; + info += "Memory: " + SystemStatService.formatGigabytes(mem.result.total / root.giga) + "\n"; } if (wm?.result) { info += "WM: " + (wm.result.prettyName || wm.result.processName || "N/A") + "\n"; @@ -697,8 +697,8 @@ ColumnLayout { const mem = root.getModule("Memory"); if (!mem?.result) return "N/A"; - const used = SystemStatService.formatMemoryGb(mem.result.used / root.giga); - const total = SystemStatService.formatMemoryGb(mem.result.total / root.giga); + const used = SystemStatService.formatGigabytes(mem.result.used / root.giga); + const total = SystemStatService.formatGigabytes(mem.result.total / root.giga); return used + " / " + total; } color: Color.mOnSurface @@ -721,8 +721,8 @@ ColumnLayout { const rootDisk = disk.result.find(d => d.mountpoint === "/"); if (!rootDisk?.bytes) return "N/A"; - const used = SystemStatService.formatMemoryGb(rootDisk.bytes.used / root.giga); - const total = SystemStatService.formatMemoryGb(rootDisk.bytes.total / root.giga); + const used = SystemStatService.formatGigabytes(rootDisk.bytes.used / root.giga); + const total = SystemStatService.formatGigabytes(rootDisk.bytes.total / root.giga); return used + " / " + total + " (" + rootDisk.filesystem + ")"; } color: Color.mOnSurface diff --git a/Modules/Panels/Settings/Tabs/SystemMonitor/ThresholdsSubTab.qml b/Modules/Panels/Settings/Tabs/SystemMonitor/ThresholdsSubTab.qml index 6a727f2a2..fcd74c0fb 100644 --- a/Modules/Panels/Settings/Tabs/SystemMonitor/ThresholdsSubTab.qml +++ b/Modules/Panels/Settings/Tabs/SystemMonitor/ThresholdsSubTab.qml @@ -243,5 +243,38 @@ ColumnLayout { suffix: "%" onValueChanged: Settings.data.systemMonitor.diskCriticalThreshold = value } + + // Disk Available + NText { + text: I18n.tr("panels.system-monitor.disk-available-label") + pointSize: Style.fontSizeM + } + + NSpinBox { + Layout.alignment: Qt.AlignHCenter + from: 0 + to: 100 + stepSize: 5 + value: Settings.data.systemMonitor.diskAvailWarningThreshold + defaultValue: Settings.getDefaultValue("systemMonitor.diskAvailWarningThreshold") + suffix: "%" + onValueChanged: { + Settings.data.systemMonitor.diskAvailWarningThreshold = value; + if (Settings.data.systemMonitor.diskAvailCriticalThreshold > value) { + Settings.data.systemMonitor.diskAvailCriticalThreshold = value; + } + } + } + + NSpinBox { + Layout.alignment: Qt.AlignHCenter + from: 0 + to: 20 + stepSize: 5 + value: Settings.data.systemMonitor.diskAvailCriticalThreshold + defaultValue: Settings.getDefaultValue("systemMonitor.diskAvailCriticalThreshold") + suffix: "%" + onValueChanged: Settings.data.systemMonitor.diskAvailCriticalThreshold = value + } } } diff --git a/Modules/Panels/SystemStats/SystemStatsPanel.qml b/Modules/Panels/SystemStats/SystemStatsPanel.qml index 88e2c3360..0889ca6dc 100644 --- a/Modules/Panels/SystemStats/SystemStatsPanel.qml +++ b/Modules/Panels/SystemStats/SystemStatsPanel.qml @@ -170,7 +170,7 @@ SmartPanel { } NText { - text: `${Math.round(SystemStatService.memPercent)}% • ${SystemStatService.formatMemoryGb(SystemStatService.memGb).replace(/[^0-9.]/g, "")} GB` + text: `${Math.round(SystemStatService.memPercent)}% • ${SystemStatService.formatGigabytes(SystemStatService.memGb).replace(/[^0-9.]/g, "")} GB` pointSize: Style.fontSizeXS color: Color.mPrimary } @@ -398,7 +398,7 @@ SmartPanel { } NText { - text: `${SystemStatService.formatMemoryGb(SystemStatService.swapGb).replace(/[^0-9.]/g, "")} / ${SystemStatService.formatMemoryGb(SystemStatService.swapTotalGb).replace(/[^0-9.]/g, "")} GB` + text: `${SystemStatService.formatGigabytes(SystemStatService.swapGb).replace(/[^0-9.]/g, "")} / ${SystemStatService.formatGigabytes(SystemStatService.swapTotalGb).replace(/[^0-9.]/g, "")} GB` pointSize: Style.fontSizeXS color: Color.mOnSurface Layout.fillWidth: true diff --git a/Services/System/SystemStatService.qml b/Services/System/SystemStatService.qml index b798f22cb..d92cfde8c 100644 --- a/Services/System/SystemStatService.qml +++ b/Services/System/SystemStatService.qml @@ -32,7 +32,9 @@ Singleton { property real swapPercent: 0 property real swapTotalGb: 0 property var diskPercents: ({}) + property var diskAvailPercents: ({}) // available disk space in percent property var diskUsedGb: ({}) // Used space in GB per mount point + property var diskAvailableGb: ({}) // available space in GB per mount point property var diskSizeGb: ({}) // Total size in GB per mount point property var diskAvailGb: ({}) property real rxSpeed: 0 @@ -181,6 +183,8 @@ Singleton { readonly property int swapCriticalThreshold: Settings.data.systemMonitor.swapCriticalThreshold readonly property int diskWarningThreshold: Settings.data.systemMonitor.diskWarningThreshold readonly property int diskCriticalThreshold: Settings.data.systemMonitor.diskCriticalThreshold + readonly property int diskAvailWarningThreshold: Settings.data.systemMonitor.diskAvailWarningThreshold + readonly property int diskAvailCriticalThreshold: Settings.data.systemMonitor.diskAvailCriticalThreshold // Computed warning/critical states (uses >= inclusive comparison) readonly property bool cpuWarning: cpuUsage >= cpuWarningThreshold @@ -195,12 +199,12 @@ Singleton { readonly property bool swapCritical: swapPercent >= swapCriticalThreshold // Helper functions for disk (disk path is dynamic) - function isDiskWarning(diskPath) { - return (diskPercents[diskPath] || 0) >= diskWarningThreshold; + function isDiskWarning(diskPath, available = false) { + return available ? (diskAvailPercents[diskPath] || 0) <= diskAvailWarningThreshold : (diskPercents[diskPath] || 0) >= diskWarningThreshold; } - function isDiskCritical(diskPath) { - return (diskPercents[diskPath] || 0) >= diskCriticalThreshold; + function isDiskCritical(diskPath, available = false) { + return available ? (diskAvailPercents[diskPath] || 0) <= diskAvailCriticalThreshold : (diskPercents[diskPath] || 0) >= diskCriticalThreshold; } // Ready-to-use stat colors (for gauges, panels, icons) @@ -210,8 +214,8 @@ Singleton { readonly property color memColor: memCritical ? criticalColor : (memWarning ? warningColor : Color.mPrimary) readonly property color swapColor: swapCritical ? criticalColor : (swapWarning ? warningColor : Color.mPrimary) - function getDiskColor(diskPath) { - return isDiskCritical(diskPath) ? criticalColor : (isDiskWarning(diskPath) ? warningColor : Color.mPrimary); + function getDiskColor(diskPath, available = false) { + return isDiskCritical(diskPath, available) ? criticalColor : (isDiskWarning(diskPath, available) ? warningColor : Color.mPrimary); } // Helper function for color resolution based on value and thresholds @@ -444,9 +448,10 @@ Singleton { onStreamFinished: { const lines = text.trim().split('\n'); const newPercents = {}; + const newAvailPercents = {}; const newUsedGb = {}; const newSizeGb = {}; - const newAvailGb = {}; + const newAvailableGb = {}; const bytesPerGb = 1024 * 1024 * 1024; // Start from line 1 (skip header) for (var i = 1; i < lines.length; i++) { @@ -457,16 +462,19 @@ Singleton { const usedBytes = parseFloat(parts[2]) || 0; const sizeBytes = parseFloat(parts[3]) || 0; const availBytes = parseFloat(parts[4]) || 0; + const availPercent = sizeBytes > 0 ? (availBytes / sizeBytes) * 100 : 0; newPercents[target] = percent; + newAvailPercents[target] = Math.round(availPercent); newUsedGb[target] = usedBytes / bytesPerGb; newSizeGb[target] = sizeBytes / bytesPerGb; - newAvailGb[target] = availBytes / bytesPerGb; + newAvailableGb[target] = availBytes / bytesPerGb; } } root.diskPercents = newPercents; + root.diskAvailPercents = newAvailPercents; root.diskUsedGb = newUsedGb; root.diskSizeGb = newSizeGb; - root.diskAvailGb = newAvailGb; + root.diskAvailableGb = newAvailableGb; root.pushDiskHistory(); } } @@ -1014,7 +1022,7 @@ Singleton { // ------------------------------------------------------- // Smart formatter for memory values (GB) - max 4 chars // Uses decimal for < 10GB, integer otherwise - function formatMemoryGb(memGb) { + function formatGigabytes(memGb) { const value = parseFloat(memGb); if (isNaN(value)) return "0G"; @@ -1024,6 +1032,22 @@ Singleton { return Math.round(value) + "G"; // "10G" to "999G" } + // ------------------------------------------------------- + // Formatting disk usage + function formatDiskDisplay(diskPath, { + percent = false, + available = false +} = {}) { + if (percent) { + const raw = available ? root.diskAvailPercents[diskPath] : root.diskPercents[diskPath]; + const value = (raw === null) ? 0 : raw; + return `${value}%`; + } else { + const rawGb = available ? root.diskAvailableGb[diskPath] : root.diskUsedGb[diskPath]; + return formatGigabytes(rawGb === null ? 0 : rawGb); + } + } + // ------------------------------------------------------- // Function to start fetching and computing the cpu temperature function updateCpuTemperature() { diff --git a/Services/UI/BarWidgetRegistry.qml b/Services/UI/BarWidgetRegistry.qml index 84fef7fc9..ecc5ce272 100644 --- a/Services/UI/BarWidgetRegistry.qml +++ b/Services/UI/BarWidgetRegistry.qml @@ -208,7 +208,8 @@ Singleton { "showSwapUsage": false, "showNetworkStats": false, "showDiskUsage": false, - "showDiskAsFree": false, + "showDiskUsageAsPercent": false, + "showDiskAvailable": false, "diskPath": "/" }, "Taskbar": {