PreferencesEditorRootView.swift 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import SwiftUI
  2. struct DescriptionString: Identifiable {
  3. var id: String { name }
  4. let name: String
  5. let nameOfVariable: 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: DescriptionString?
  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 = DescriptionString(name: field.infoText, nameOfVariable: field.displayName)
  40. })
  41. Toggle(field.displayName, isOn: self.$viewModel.boolFields[index].value)
  42. }
  43. }
  44. .alert(item: $infoButtonPressed) { iButton in
  45. Alert(
  46. title: Text(iButton.nameOfVariable),
  47. message: Text(iButton.name),
  48. dismissButton: .default(Text("OK"))
  49. )
  50. }
  51. ForEach(viewModel.decimalFields.indexed(), id: \.1.id) { index, field in
  52. HStack {
  53. Button("", action: {
  54. infoButtonPressed = DescriptionString(name: field.infoText, nameOfVariable: field.displayName)
  55. })
  56. Text(field.displayName)
  57. DecimalTextField("0", value: self.$viewModel.decimalFields[index].value, formatter: formatter)
  58. }
  59. }
  60. .alert(item: $infoButtonPressed) { iButton in
  61. Alert(
  62. title: Text(iButton.nameOfVariable),
  63. message: Text(iButton.name),
  64. dismissButton: .default(Text("OK"))
  65. )
  66. }
  67. }
  68. Section {
  69. Text("Edit settings json").chevronCell()
  70. .navigationLink(to: .configEditor(file: OpenAPS.FreeAPS.settings), from: self)
  71. }
  72. }
  73. .navigationTitle("Preferences")
  74. .navigationBarTitleDisplayMode(.automatic)
  75. }
  76. }
  77. }