Files
RouterOS/RouterOSAssistant/Features/Wizard/Steps/Setup/WifiStepView.swift
T
KayandClaude Sonnet 5 221b914b05 M29: App-Einstellungen (Settings-Fenster ⌘,)
Neues natives macOS-Settings-Fenster mit Sprache, Auto-Update-Check,
Farbschema (Standard/Kontrastreich), echter Textgrößen-Skalierung,
Bedienelement-Größe und LAN-Scanner-Refreshraten/Sparkline-Einstellungen.

- AppPreferences.swift: zentrale AppStorage-Keys, ColorTheme/AppTextSize/
  UIDensity
- SettingsView.swift: 3-Tab-Settings-Scene
- .environment(\.dynamicTypeSize) erwies sich auf macOS als wirkungslos
  (per ImageRenderer-Snapshot bewiesen) — durch eigenen appFontScale-
  Mechanismus ersetzt, ~110 .font(...)-Aufrufe app-weit umgestellt
- Farbschema auf Wunsch auch auf Experte-Tab-Sidebar ausgeweitet
- Docs aktualisiert: README/HANDOFF/CHATLOG/Manual.md+PDF, found.md

Live bestätigt nach mehreren Nachbesserungsrunden ("passt, lassen wir so").

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-17 13:38:22 +02:00

60 lines
2.7 KiB
Swift

import SwiftUI
struct WifiStepView: View {
@ObservedObject var viewModel: SetupViewModel
@AppStorage("appLanguage") private var appLanguage: String = "de"
var body: some View {
Form {
if viewModel.wifiNetworks.isEmpty && viewModel.unsupportedWifiInterfaces.isEmpty {
Section {
Text(L10n.t("An diesem Gerät wurde kein WLAN erkannt. Dieser Schritt wird übersprungen.", appLanguage))
.foregroundStyle(.secondary)
}
}
if !viewModel.unsupportedWifiInterfaces.isEmpty {
Section {
Text(
L10n.t("Dein Gerät nutzt den neueren RouterOS-WiFi-Treiber (", appLanguage)
+ "\(viewModel.unsupportedWifiInterfaces.map(\.name).joined(separator: ", "))"
+ L10n.t("), den diese App noch nicht unterstützt. WLAN muss dafür vorerst manuell über Winbox eingerichtet werden.", appLanguage)
)
.appFont(.caption)
.foregroundStyle(.secondary)
}
}
ForEach($viewModel.wifiNetworks) { $network in
Section(L10n.t("WLAN auf", appLanguage) + " \(network.interfaceName)") {
Toggle(L10n.t("Aktivieren", appLanguage), isOn: $network.enabled)
.help(L10n.t("Schaltet WLAN auf diesem Funkmodul ein und vergibt Netzwerkname und Passwort.", appLanguage))
if network.enabled {
TextField(L10n.t("Netzwerkname (SSID)", appLanguage), text: $network.ssid)
.help(L10n.t("Der Name, den Geräte in ihrer WLAN-Liste sehen und mit dem sie sich verbinden.", appLanguage))
SecureField(L10n.t("Passwort (mind. 8 Zeichen)", appLanguage), text: $network.password)
.help(L10n.t("Das WLAN-Passwort (WPA2). Muss mindestens 8 Zeichen lang sein.", appLanguage))
}
}
}
Section {
HStack {
Button(L10n.t("Zurück", appLanguage)) { viewModel.goBack() }
Spacer()
Button(L10n.t("Weiter", appLanguage)) { viewModel.goNext() }
.disabled(!isStepValid)
}
}
}
.formStyle(.grouped)
.navigationTitle(LocalizedStringKey(L10n.t("WLAN (falls vorhanden)", appLanguage)))
}
private var isStepValid: Bool {
viewModel.wifiNetworks.allSatisfy { network in
!network.enabled || (!network.ssid.isEmpty && network.password.count >= 8)
}
}
}