ConnectionSettingsView.swift 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import SwiftUI
  2. struct ConnectionSettingsView: View {
  3. @ObservedObject var networkService: NetworkService
  4. @Binding var customHost: String
  5. @Binding var customPort: String
  6. @Environment(\.dismiss) private var dismiss
  7. var body: some View {
  8. NavigationView {
  9. Form {
  10. Section(header: Text("Raspberry Pi Connection")) {
  11. HStack {
  12. Text("IP Address:")
  13. Spacer()
  14. TextField("192.168.1.100", text: $customHost)
  15. .textFieldStyle(RoundedBorderTextFieldStyle())
  16. .keyboardType(.decimalPad)
  17. }
  18. HStack {
  19. Text("Port:")
  20. Spacer()
  21. TextField("8080", text: $customPort)
  22. .textFieldStyle(RoundedBorderTextFieldStyle())
  23. .keyboardType(.numberPad)
  24. }
  25. }
  26. Section(header: Text("Connection Info")) {
  27. HStack {
  28. Text("Status:")
  29. Spacer()
  30. Text(networkService.connectionStatus)
  31. .foregroundColor(networkService.isConnected ? .green : .red)
  32. }
  33. }
  34. Section(header: Text("Quick Actions")) {
  35. Button("Test Connection") {
  36. testConnection()
  37. }
  38. .disabled(customHost.isEmpty)
  39. Button("Send Status Request") {
  40. networkService.sendCommand(.status())
  41. }
  42. .disabled(!networkService.isConnected)
  43. }
  44. }
  45. .navigationTitle("Connection Settings")
  46. .navigationBarTitleDisplayMode(.inline)
  47. .toolbar {
  48. ToolbarItem(placement: .navigationBarLeading) {
  49. Button("Cancel") { dismiss() }
  50. }
  51. ToolbarItem(placement: .navigationBarTrailing) {
  52. Button("Done") { dismiss() }
  53. }
  54. }
  55. }
  56. }
  57. private func testConnection() {
  58. let host = customHost.isEmpty ? "192.168.1.100" : customHost
  59. let port = UInt16(customPort) ?? 8080
  60. networkService.connect(host: host, port: port)
  61. }
  62. }
  63. struct ConnectionSettingsView_Previews: PreviewProvider {
  64. static var previews: some View {
  65. ConnectionSettingsView(
  66. networkService: NetworkService(),
  67. customHost: .constant("192.168.1.100"),
  68. customPort: .constant("8080")
  69. )
  70. }
  71. }