polscm32 1 rok temu
rodzic
commit
23ccdca4bf

+ 4 - 0
FreeAPS.xcodeproj/project.pbxproj

@@ -262,6 +262,7 @@
 		58CE8B892C8C6B62007A6A10 /* GradientStops.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58CE8B882C8C6B62007A6A10 /* GradientStops.swift */; };
 		58D08B222C8DAA8E00AA37D3 /* OverrideView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58D08B212C8DAA8E00AA37D3 /* OverrideView.swift */; };
 		58D08B302C8DEA7500AA37D3 /* ForecastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58D08B2F2C8DEA7500AA37D3 /* ForecastView.swift */; };
+		58D08B322C8DF88900AA37D3 /* DummyCharts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58D08B312C8DF88900AA37D3 /* DummyCharts.swift */; };
 		58F107742BD1A4D000B1A680 /* Determination+helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58F107732BD1A4D000B1A680 /* Determination+helper.swift */; };
 		5A2325522BFCBF55003518CA /* NightscoutUploadView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A2325512BFCBF55003518CA /* NightscoutUploadView.swift */; };
 		5A2325542BFCBF66003518CA /* NightscoutFetchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A2325532BFCBF65003518CA /* NightscoutFetchView.swift */; };
@@ -911,6 +912,7 @@
 		58CE8B882C8C6B62007A6A10 /* GradientStops.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GradientStops.swift; sourceTree = "<group>"; };
 		58D08B212C8DAA8E00AA37D3 /* OverrideView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverrideView.swift; sourceTree = "<group>"; };
 		58D08B2F2C8DEA7500AA37D3 /* ForecastView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForecastView.swift; sourceTree = "<group>"; };
+		58D08B312C8DF88900AA37D3 /* DummyCharts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DummyCharts.swift; sourceTree = "<group>"; };
 		58F107732BD1A4D000B1A680 /* Determination+helper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Determination+helper.swift"; sourceTree = "<group>"; };
 		5A2325512BFCBF55003518CA /* NightscoutUploadView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NightscoutUploadView.swift; sourceTree = "<group>"; };
 		5A2325532BFCBF65003518CA /* NightscoutFetchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NightscoutFetchView.swift; sourceTree = "<group>"; };
@@ -1777,6 +1779,7 @@
 				582DF97A2C8CE209001F516D /* CarbView.swift */,
 				58D08B212C8DAA8E00AA37D3 /* OverrideView.swift */,
 				58D08B2F2C8DEA7500AA37D3 /* ForecastView.swift */,
+				58D08B312C8DF88900AA37D3 /* DummyCharts.swift */,
 			);
 			path = Chart;
 			sourceTree = "<group>";
@@ -3156,6 +3159,7 @@
 				CEA4F62329BE10F70011ADF7 /* SavitzkyGolayFilter.swift in Sources */,
 				38B4F3C325E2A20B00E76A18 /* PumpSetupView.swift in Sources */,
 				38E4453C274E411700EC9A94 /* Disk+Codable.swift in Sources */,
+				58D08B322C8DF88900AA37D3 /* DummyCharts.swift in Sources */,
 				19E1F7EF29D08EBA005C8D20 /* IconConfigRootWiew.swift in Sources */,
 				1967DFC229D053D300759F30 /* IconImage.swift in Sources */,
 				382C134B25F14E3700715CE1 /* BGTargets.swift in Sources */,

+ 54 - 0
FreeAPS/Sources/Modules/Home/View/Chart/DummyCharts.swift

@@ -0,0 +1,54 @@
+import Charts
+import Foundation
+import SwiftUI
+
+extension MainChartView {
+    /// empty chart that just shows the Y axis and Y grid lines. Created separately from `mainChart` to allow main chart to scroll horizontally while having a fixed Y axis
+    var staticYAxisChart: some View {
+        Chart {
+            /// high and low threshold lines
+            if thresholdLines {
+                RuleMark(y: .value("High", highGlucose)).foregroundStyle(Color.loopYellow)
+                    .lineStyle(.init(lineWidth: 1, dash: [5]))
+                RuleMark(y: .value("Low", lowGlucose)).foregroundStyle(Color.loopRed)
+                    .lineStyle(.init(lineWidth: 1, dash: [5]))
+            }
+        }
+        .id("DummyMainChart")
+        .frame(minHeight: geo.size.height * 0.28)
+        .frame(width: screenSize.width - 10)
+        .chartXAxis { mainChartXAxis }
+        .chartXScale(domain: startMarker ... endMarker)
+        .chartXAxis(.hidden)
+        .chartYAxis { mainChartYAxis }
+        .chartYScale(domain: units == .mgdL ? minValue ... maxValue : minValue.asMmolL ... maxValue.asMmolL)
+        .chartLegend(.hidden)
+    }
+
+    var dummyBasalChart: some View {
+        Chart {}
+            .id("DummyBasalChart")
+            .frame(minHeight: geo.size.height * 0.05)
+            .frame(width: screenSize.width - 10)
+            .chartXAxis { basalChartXAxis }
+            .chartXAxis(.hidden)
+            .chartYAxis(.hidden)
+            .chartLegend(.hidden)
+    }
+
+    var dummyCobChart: some View {
+        Chart {
+            drawCOB(dummy: true)
+        }
+        .id("DummyCobChart")
+        .frame(minHeight: geo.size.height * 0.12)
+        .frame(width: screenSize.width - 10)
+        .chartXScale(domain: startMarker ... endMarker)
+        .chartXAxis { basalChartXAxis }
+        .chartXAxis(.hidden)
+        .chartYAxis { cobChartYAxis }
+        .chartYAxis(.hidden)
+        .chartYScale(domain: minValueCobChart ... maxValueCobChart)
+        .chartLegend(.hidden)
+    }
+}

+ 16 - 65
FreeAPS/Sources/Modules/Home/View/Chart/MainChartView.swift

@@ -47,17 +47,17 @@ struct MainChartView: View {
     @State private var basalProfiles: [BasalProfile] = []
     @State private var chartTempTargets: [ChartTempTarget] = []
     @State private var count: Decimal = 1
-    @State private var startMarker =
+    @State var startMarker =
         Date(timeIntervalSinceNow: TimeInterval(hours: -24))
-    @State private var endMarker = Date(timeIntervalSinceNow: TimeInterval(hours: 3))
-    @State private var minValue: Decimal = 45
-    @State private var maxValue: Decimal = 270
-    @State private var selection: Date? = nil
-    @State private var minValueCobChart: Decimal = 0
-    @State private var maxValueCobChart: Decimal = 20
-    @State private var minValueIobChart: Decimal = 0
-    @State private var maxValueIobChart: Decimal = 5
-    @State private var mainChartHasInitialized = false
+    @State var endMarker = Date(timeIntervalSinceNow: TimeInterval(hours: 3))
+    @State var minValue: Decimal = 45
+    @State var maxValue: Decimal = 270
+    @State var selection: Date? = nil
+    @State var minValueCobChart: Decimal = 0
+    @State var maxValueCobChart: Decimal = 20
+    @State var minValueIobChart: Decimal = 0
+    @State var maxValueIobChart: Decimal = 5
+    @State var mainChartHasInitialized = false
 
     private let now = Date.now
 
@@ -163,55 +163,6 @@ struct MainChartView: View {
 // MARK: - Components
 
 extension MainChartView {
-    /// empty chart that just shows the Y axis and Y grid lines. Created separately from `mainChart` to allow main chart to scroll horizontally while having a fixed Y axis
-    private var staticYAxisChart: some View {
-        Chart {
-            /// high and low threshold lines
-            if thresholdLines {
-                RuleMark(y: .value("High", highGlucose)).foregroundStyle(Color.loopYellow)
-                    .lineStyle(.init(lineWidth: 1, dash: [5]))
-                RuleMark(y: .value("Low", lowGlucose)).foregroundStyle(Color.loopRed)
-                    .lineStyle(.init(lineWidth: 1, dash: [5]))
-            }
-        }
-        .id("DummyMainChart")
-        .frame(minHeight: geo.size.height * 0.28)
-        .frame(width: screenSize.width - 10)
-        .chartXAxis { mainChartXAxis }
-        .chartXScale(domain: startMarker ... endMarker)
-        .chartXAxis(.hidden)
-        .chartYAxis { mainChartYAxis }
-        .chartYScale(domain: units == .mgdL ? minValue ... maxValue : minValue.asMmolL ... maxValue.asMmolL)
-        .chartLegend(.hidden)
-    }
-
-    private var dummyBasalChart: some View {
-        Chart {}
-            .id("DummyBasalChart")
-            .frame(minHeight: geo.size.height * 0.05)
-            .frame(width: screenSize.width - 10)
-            .chartXAxis { basalChartXAxis }
-            .chartXAxis(.hidden)
-            .chartYAxis(.hidden)
-            .chartLegend(.hidden)
-    }
-
-    private var dummyCobChart: some View {
-        Chart {
-            drawCOB(dummy: true)
-        }
-        .id("DummyCobChart")
-        .frame(minHeight: geo.size.height * 0.12)
-        .frame(width: screenSize.width - 10)
-        .chartXScale(domain: startMarker ... endMarker)
-        .chartXAxis { basalChartXAxis }
-        .chartXAxis(.hidden)
-        .chartYAxis { cobChartYAxis }
-        .chartYAxis(.hidden)
-        .chartYScale(domain: minValueCobChart ... maxValueCobChart)
-        .chartLegend(.hidden)
-    }
-
     private var mainChart: some View {
         VStack {
             Chart {
@@ -577,7 +528,7 @@ extension MainChartView {
         }
     }
 
-    private func drawCOB(dummy: Bool) -> some ChartContent {
+    func drawCOB(dummy: Bool) -> some ChartContent {
         ForEach(state.enactedAndNonEnactedDeterminations) { cob in
             let amount = Int(cob.cob)
             let date: Date = cob.deliverAt ?? Date()
@@ -918,13 +869,13 @@ extension MainChartView {
         maxValueIobChart = maxValue
     }
 
-    private func basalChartPlotStyle(_ plotContent: ChartPlotContent) -> some View {
+    func basalChartPlotStyle(_ plotContent: ChartPlotContent) -> some View {
         plotContent
             .rotationEffect(.degrees(180))
             .scaleEffect(x: -1, y: 1)
     }
 
-    private var mainChartXAxis: some AxisContent {
+    var mainChartXAxis: some AxisContent {
         AxisMarks(values: .stride(by: .hour, count: screenHours > 6 ? (screenHours > 12 ? 4 : 2) : 1)) { _ in
             if displayXgridLines {
                 AxisGridLine(stroke: .init(lineWidth: 0.5, dash: [2, 3]))
@@ -934,7 +885,7 @@ extension MainChartView {
         }
     }
 
-    private var basalChartXAxis: some AxisContent {
+    var basalChartXAxis: some AxisContent {
         AxisMarks(values: .stride(by: .hour, count: screenHours > 6 ? (screenHours > 12 ? 4 : 2) : 1)) { _ in
             if displayXgridLines {
                 AxisGridLine(stroke: .init(lineWidth: 0.5, dash: [2, 3]))
@@ -946,7 +897,7 @@ extension MainChartView {
         }
     }
 
-    private var mainChartYAxis: some AxisContent {
+    var mainChartYAxis: some AxisContent {
         AxisMarks(position: .trailing) { value in
 
             if displayYgridLines {
@@ -965,7 +916,7 @@ extension MainChartView {
         }
     }
 
-    private var cobChartYAxis: some AxisContent {
+    var cobChartYAxis: some AxisContent {
         AxisMarks(position: .trailing) { _ in
             if displayYgridLines {
                 AxisGridLine(stroke: .init(lineWidth: 0.5, dash: [2, 3]))