PreferencesEditorRootView.swift 3.4 KB

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