PreferencesEditorRootView.swift 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import SwiftUI
  2. struct InfoText: Identifiable {
  3. var id: String { description }
  4. let description: String
  5. let oref0Variable: String
  6. }
  7. extension PreferencesEditor {
  8. struct RootView: BaseView {
  9. @EnvironmentObject var viewModel: ViewModel<Provider>
  10. private var formatter: NumberFormatter {
  11. let formatter = NumberFormatter()
  12. formatter.numberStyle = .decimal
  13. return formatter
  14. }
  15. @State private var infoButtonPressed: InfoText?
  16. var body: some View {
  17. Form {
  18. Section(header: Text("FreeAPS X")) {
  19. Picker("Glucose units", selection: $viewModel.unitsIndex) {
  20. Text("mg/dL").tag(0)
  21. Text("mmol/L").tag(1)
  22. }
  23. Toggle("Remote control", isOn: $viewModel.allowAnnouncements)
  24. HStack {
  25. Text("Recommended Insulin Fraction")
  26. DecimalTextField("", value: $viewModel.insulinReqFraction, formatter: formatter)
  27. }
  28. Toggle("Skip Bolus screen after carbs", isOn: $viewModel.skipBolusScreenAfterCarbs)
  29. }
  30. Section(header: Text("OpenAPS")) {
  31. Picker(selection: $viewModel.insulinCurveField.value, label: Text(viewModel.insulinCurveField.displayName)) {
  32. ForEach(InsulinCurve.allCases) { v in
  33. Text(v.rawValue).tag(v)
  34. }
  35. }
  36. ForEach(viewModel.boolFields.indexed(), id: \.1.id) { index, field in
  37. HStack {
  38. Button("", action: {
  39. infoButtonPressed = InfoText(description: field.infoText, oref0Variable: field.displayName)
  40. })
  41. Toggle(field.displayName, isOn: self.$viewModel.boolFields[index].value)
  42. }
  43. }
  44. ForEach(viewModel.decimalFields.indexed(), id: \.1.id) { index, field in
  45. HStack {
  46. Button("", action: {
  47. infoButtonPressed = InfoText(description: field.infoText, oref0Variable: field.displayName)
  48. })
  49. Text(field.displayName)
  50. DecimalTextField("0", value: self.$viewModel.decimalFields[index].value, formatter: formatter)
  51. }
  52. }
  53. }
  54. Section {
  55. Text("Edit settings json").chevronCell()
  56. .navigationLink(to: .configEditor(file: OpenAPS.FreeAPS.settings), from: self)
  57. }
  58. }
  59. .navigationTitle("Preferences")
  60. .navigationBarTitleDisplayMode(.automatic)
  61. .alert(item: $infoButtonPressed) { infoButton in
  62. Alert(
  63. title: Text("\(infoButton.oref0Variable)"),
  64. message: Text("\(infoButton.description)"),
  65. dismissButton: .default(Text("OK"))
  66. )
  67. }
  68. }
  69. }
  70. }