diff --git a/Splits.xcodeproj/project.pbxproj b/Splits.xcodeproj/project.pbxproj index efeffc0..732d6ee 100644 --- a/Splits.xcodeproj/project.pbxproj +++ b/Splits.xcodeproj/project.pbxproj @@ -9,6 +9,9 @@ /* Begin PBXBuildFile section */ 850062C92802328F0095F121 /* TabViewData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850062C82802328F0095F121 /* TabViewData.swift */; }; 8502250E27FA5D0800FE8E95 /* ChangeLogData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8502250D27FA5D0800FE8E95 /* ChangeLogData.swift */; }; + 850F8014284A7F6A0094580D /* DocsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850F8013284A7F6A0094580D /* DocsView.swift */; }; + 850F8016284A815C0094580D /* KnownIssues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850F8015284A815C0094580D /* KnownIssues.swift */; }; + 850F8018284A83400094580D /* FeaturesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850F8017284A83400094580D /* FeaturesView.swift */; }; 85AAA0D627FA2DD600F4B9A1 /* SplitsApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85AAA0D527FA2DD600F4B9A1 /* SplitsApp.swift */; }; 85AAA0D827FA2DD600F4B9A1 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85AAA0D727FA2DD600F4B9A1 /* ContentView.swift */; }; 85AAA0DA27FA2DDA00F4B9A1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 85AAA0D927FA2DDA00F4B9A1 /* Assets.xcassets */; }; @@ -21,6 +24,9 @@ /* Begin PBXFileReference section */ 850062C82802328F0095F121 /* TabViewData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabViewData.swift; sourceTree = ""; }; 8502250D27FA5D0800FE8E95 /* ChangeLogData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeLogData.swift; sourceTree = ""; }; + 850F8013284A7F6A0094580D /* DocsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocsView.swift; sourceTree = ""; }; + 850F8015284A815C0094580D /* KnownIssues.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KnownIssues.swift; sourceTree = ""; }; + 850F8017284A83400094580D /* FeaturesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeaturesView.swift; sourceTree = ""; }; 85AAA0D227FA2DD600F4B9A1 /* Splits.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Splits.app; sourceTree = BUILT_PRODUCTS_DIR; }; 85AAA0D527FA2DD600F4B9A1 /* SplitsApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplitsApp.swift; sourceTree = ""; }; 85AAA0D727FA2DD600F4B9A1 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; @@ -65,6 +71,9 @@ 8502250D27FA5D0800FE8E95 /* ChangeLogData.swift */, 85AAA0D727FA2DD600F4B9A1 /* ContentView.swift */, 850062C82802328F0095F121 /* TabViewData.swift */, + 850F8017284A83400094580D /* FeaturesView.swift */, + 850F8013284A7F6A0094580D /* DocsView.swift */, + 850F8015284A815C0094580D /* KnownIssues.swift */, 85AAA0E727FA2F1600F4B9A1 /* ChangeLogView.swift */, 85AAA0E527FA2EB100F4B9A1 /* ModalView.swift */, 85AAA0D927FA2DDA00F4B9A1 /* Assets.xcassets */, @@ -161,8 +170,11 @@ 85AAA0D627FA2DD600F4B9A1 /* SplitsApp.swift in Sources */, 850062C92802328F0095F121 /* TabViewData.swift in Sources */, 8502250E27FA5D0800FE8E95 /* ChangeLogData.swift in Sources */, + 850F8014284A7F6A0094580D /* DocsView.swift in Sources */, + 850F8016284A815C0094580D /* KnownIssues.swift in Sources */, 85AAA0E827FA2F1600F4B9A1 /* ChangeLogView.swift in Sources */, 85AAA0E627FA2EB100F4B9A1 /* ModalView.swift in Sources */, + 850F8018284A83400094580D /* FeaturesView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Splits/ChangeLogData.swift b/Splits/ChangeLogData.swift index d83135b..e7e69d7 100644 --- a/Splits/ChangeLogData.swift +++ b/Splits/ChangeLogData.swift @@ -10,6 +10,32 @@ import SwiftUI struct June2022: View { var body: some View { ScrollView { + //2022-06-04 + HStack { + VStack (alignment: .leading) { + Text("2022-06-04") + .font(.title2) + Text("Version Prerelease Build LVSXT10d.2\n") + .font(.footnote) + Text("\u{2022} Reformatted some tabs, and added the Recently Resolved issues tab\n\u{2022} Moved the Help tab into Docs") + } + Spacer() + } + .padding(30) + + //2022-06-03 + HStack { + VStack (alignment: .leading) { + Text("2022-06-03") + .font(.title2) + Text("Version Prerelease Build LVSXT10d\n") + .font(.footnote) + Text("\u{2022} Finished hours input.\n\u{2022} Moved some things around and the \"Change log\" tab is now \"Docs\" which holds info on features, the change log, and known issues, with a few other things.") + } + Spacer() + } + .padding(30) + //2022-06-01 //gay HStack { diff --git a/Splits/ChangeLogView.swift b/Splits/ChangeLogView.swift index 4098280..0174370 100644 --- a/Splits/ChangeLogView.swift +++ b/Splits/ChangeLogView.swift @@ -9,16 +9,23 @@ import SwiftUI struct ChangeLog: View { var body: some View { - NavigationView { - List { - Section(header: Text("2022")) { - NavigationLink("May", destination: May2022()) - NavigationLink("April", destination: April2022()) - } - } - .listStyle(.insetGrouped) - .navigationTitle("Change log") + HStack { + VStack (alignment: .leading) { + Text("Change Log") + .font(.largeTitle) + .bold() + } + Spacer() } + .padding() + List { + Section(header: Text("2022")) { + NavigationLink("June", destination: June2022()) + NavigationLink("May", destination: May2022()) + NavigationLink("April", destination: April2022()) + } + } + .listStyle(.insetGrouped) } } struct ChangeLog_Previews: PreviewProvider { diff --git a/Splits/ContentView.swift b/Splits/ContentView.swift index 7c73ade..c298ac7 100644 --- a/Splits/ContentView.swift +++ b/Splits/ContentView.swift @@ -37,25 +37,26 @@ struct ContentView: View { .frame(minWidth: 60, maxWidth: 300) HStack { VStack { - Text("Total hours") + Text("Hours") TextField("Enter hours here", text: $timeHours) .keyboardType(.numberPad) .textFieldStyle(.roundedBorder) } .frame(minWidth: 100) - .padding(.leading, -15) + .padding(.trailing, -15) .padding() VStack { - Text("Total Minutes") + Text("Minutes") TextField("Enter minutes here", text: $timeMinutes) .keyboardType(.numberPad) .textFieldStyle(.roundedBorder) } .frame(minWidth: 100) .padding(.trailing, -15) + .padding(.leading, -15) .padding() VStack { - Text("Total Seconds") + Text("Seconds") TextField("Enter seconds here", text: $timeSeconds) .keyboardType(.numberPad) .textFieldStyle(.roundedBorder) @@ -96,13 +97,14 @@ struct PaceResults: View { let leadingZeros:String = String(format: "%02d:%02d", timeMinutesUnderSixty, timeSecondsUnderSixty) - let actualTime:Double = timeMinutesDouble + (convertedSeconds / 100) + (totalHours * 60) + let actualTime:Double = timeMinutesDouble + (convertedSeconds / 100) + ((Double(timeHours) ?? 0) * 60) let pace:Double = actualTime / distanceDub let paceString:String = String(format: "%.2f", pace) + let hoursFormatted:String = String(format: "%.0f", totalHours) VStack { Text("Distance: \(distance)\(selectedSystem)") - Text("Total time: \(totalHours):\(leadingZeros)") + Text("Total time: \(hoursFormatted):\(leadingZeros)") Text("\(paceString) minutes per \(selectedSystem)") } } @@ -113,3 +115,36 @@ struct ContentView_Previews: PreviewProvider { ContentView() } } + +/* +struct AllTheMath { + @Binding var timeHours: String + @Binding var timeMinutes: String + @Binding var timeSeconds: String + @Binding var selectedSystem: String + @Binding var distance: String + + let distanceDub = Double(distance) ?? 1.0 + + let convertedSeconds:Double = (Double(timeSeconds) ?? 0) * (1.666666666666666666666666) + let timeSecondsInt:Int = Int(timeSeconds) ?? 0 + let timeSecondsUnderSixty:Int = (timeSecondsInt % 60) + + let timeSecondsToMinutes:Int = (timeSecondsInt - timeSecondsUnderSixty) / 60 + + let timeMinutesDouble:Double = Double(timeMinutes) ?? 0.0 + + let timeMinutesInt:Int = (Int(timeMinutes) ?? 0) + (timeSecondsToMinutes) + let timeMinutesUnderSixty:Int = timeMinutesInt % 60 + let timeMinutesToHours:Int = (timeMinutesInt - timeMinutesUnderSixty) / 60 + + let totalHours:Double = Double(timeMinutesToHours) + (Double(timeHours) ?? 0) + + let leadingZeros:String = String(format: "%02d:%02d", timeMinutesUnderSixty, timeSecondsUnderSixty) + + let actualTime:Double = timeMinutesDouble + (convertedSeconds / 100) + ((Double(timeHours) ?? 0) * 60) + let pace:Double = actualTime / distanceDub + let paceString:String = String(format: "%.2f", pace) + let hoursFormatted:String = String(format: "%.0f", totalHours) +} +*/ diff --git a/Splits/DocsView.swift b/Splits/DocsView.swift new file mode 100644 index 0000000..f7a5c25 --- /dev/null +++ b/Splits/DocsView.swift @@ -0,0 +1,44 @@ +// +// DocsView.swift +// Splits +// +// Created by Isaac Greene on 6/3/22. +// + +import SwiftUI + +struct DocsView: View { + var body: some View { + NavigationView { + List { + NavigationLink("Help", destination: HelpView()) + NavigationLink("Change Log", destination: ChangeLog()) + + Section(header: Text("Features")) { + NavigationLink("New", destination: NewFeatures()) + NavigationLink("In Progress", destination: InProgressFeatures()) + NavigationLink("Deprecated", destination: DeprecatedFeatures()) + } + Section(header: Text("Known Issues")) { + NavigationLink("Recently Resolved", destination: RecentlyResolved()) + NavigationLink("High Priority", destination: HighPriority()) + NavigationLink("Medium Priority", destination: MediumPriority()) + NavigationLink("Low Priority", destination: LowPriority()) + } + Section(header: Text("App Information")) { + Text("Version: Prerelease LVSXT10d.2") + Text("Release date: 2022-06-04") + Text("Start date: 2022-03-25") + Text("App files: 9") + } + } + .navigationTitle("Docs") + } + } +} + +struct DocsView_Previews: PreviewProvider { + static var previews: some View { + DocsView() + } +} diff --git a/Splits/FeaturesView.swift b/Splits/FeaturesView.swift new file mode 100644 index 0000000..fb25b46 --- /dev/null +++ b/Splits/FeaturesView.swift @@ -0,0 +1,76 @@ +// +// FeaturesView.swift +// Splits +// +// Created by Isaac Greene on 6/3/22. +// + +import SwiftUI + +struct NewFeatures: View { + var body: some View { + ScrollView { + Text("New Features\n") + .font(.largeTitle) + .bold() + .padding(.top, 40) + VStack(alignment: .leading) { + Text("\u{2022} Reformatted the Docs tabs and made the common things up at the top") + Text("Implemented in Version Prerelease LVSXT10d.2 (current version)\n") + .font(.footnote) + .italic() + Text("\u{2022} Added the Features, Known Issues, and moved the Change Log for better navigation") + Text("Implemented in Version Prerelease LVSXT10d\n") + .font(.footnote) + .italic() + Text("\u{2022} Total time now shows the time in a way we humans can understand") + Text("Implemented in Version Prerelease LVSXT10k\n") + .font(.footnote) + .italic() + } + .padding(30) + } + } +} + +struct InProgressFeatures: View { + var body: some View { + ScrollView { + Text("Features In Progress") + .font(.largeTitle) + .bold() + .padding(.top, 40) + Text("Note: this does not include things I have to fix\n") + .font(.footnote) + .italic() + VStack(alignment: .leading) { + Text("\u{2022} Working on a conversion between measurements for pace and distance\n") + } + .padding(30) + } + } +} + +struct DeprecatedFeatures: View { + var body: some View { + ScrollView { + Text("Deprecated Features") + .font(.largeTitle) + .bold() + .padding(.top, 40) + VStack(alignment: .leading) { + Text("\n\u{2022} Removed the picker wheel to enter total time (a truly horrible system)") + Text("Stricken before recorded history\n") + .font(.footnote) + .italic() + } + .padding(30) + } + } +} + +struct FeaturesView_Previews: PreviewProvider { + static var previews: some View { + NewFeatures() + } +} diff --git a/Splits/KnownIssues.swift b/Splits/KnownIssues.swift new file mode 100644 index 0000000..8c69ac1 --- /dev/null +++ b/Splits/KnownIssues.swift @@ -0,0 +1,75 @@ +// +// KnownIssues.swift +// Splits +// +// Created by Isaac Greene on 6/3/22. +// + +import SwiftUI + +struct RecentlyResolved: View { + var body: some View { + ScrollView { + Text("Recently Resolved Issues") + .font(.largeTitle) + .bold() + .padding(.top, 40) + VStack(alignment: .leading) { + Text("\n\u{2022} None since the addition of this tab") + } + .padding(30) + } + } +} + +struct HighPriority: View { + var body: some View { + ScrollView { + Text("High Priority Issues") + .font(.largeTitle) + .bold() + .padding(.top, 40) + VStack(alignment: .leading) { + Text("\n\u{2022} You can not dismiss the keyboard on iPhone\n\t\u{2022} This hides the tab bar at the bottom so you can't navigate the app after bringing it up") + } + .padding(30) + } + } +} + +struct MediumPriority: View { + var body: some View { + ScrollView { + Text("Medium Priority Issues") + .font(.largeTitle) + .bold() + .padding(.top, 40) + VStack(alignment: .leading) { + Text("Wow. Such Empty.") + .italic() + } + .padding(30) + } + } +} + +struct LowPriority: View { + var body: some View { + ScrollView { + Text("Low Priority Issues") + .font(.largeTitle) + .bold() + .padding(.top, 40) + VStack(alignment: .leading) { + Text("\n\u{2022} Space between the equation and explanation in the \"Help\" tab is too large\n\u{2022} App has no custom icon") + } + .padding(30) + } + } +} + +struct KnownIssues_Previews: PreviewProvider { + static var previews: some View { + HighPriority() + } +} diff --git a/Splits/ModalView.swift b/Splits/ModalView.swift index da8b7f9..57fb45e 100644 --- a/Splits/ModalView.swift +++ b/Splits/ModalView.swift @@ -8,7 +8,7 @@ import SwiftUI import RichTextView -struct ModalView: View { +struct HelpView: View { @State var mathSheet = false @State var problemSheet = false @@ -19,7 +19,7 @@ struct ModalView: View { .bold() .padding(.top, 40) - Text("Due to limitations in our system, you can only use kilometers and miles at this time. \nSmaller units like meters and feet are not supported. \nYou can, however, use decimals, such as .2km or .8mi.\n\nWe apologize for any inconvenience. In the future, we hope to make our app easier to use.") + Text("Due to limitations in the system, you can only use kilometers and miles at this time. \nSmaller units like meters and feet are not supported. \nYou can, however, use decimals, such as .2km or .8mi.\n\nI apologize for any inconvenience. In the future, I hope to make our app easier to use.\n\nI'm currently looking to add help articles about running to this page and it'll have loads of stuff about running and pace and all that stuff to actually help you with running. If I do, the purpose of this app might change.") .padding() Button("See our math", action: { @@ -29,15 +29,6 @@ struct ModalView: View { .sheet(isPresented: self.$mathSheet, content: { algorithmView() }) - - Button("Known issues", action: { - self.problemSheet.toggle() - }) - .padding(30) - .padding(.top, -30) - .sheet(isPresented: self.$problemSheet, content: { - problemView() - }) } } } @@ -109,16 +100,3 @@ struct mathLaTeX_inator: UIViewRepresentable { ) } } - -struct problemView: View { - var body: some View { - VStack { - Text("Known issues") - .font(.largeTitle) - .bold() - .padding(.top, 40) - Text("\n\u{2022} You can not dismiss the keyboard\n\t\u{2022} This hides the tab bar at the bottom so you can't navigate the app") - .padding() - } - } -} diff --git a/Splits/TabViewData.swift b/Splits/TabViewData.swift index 70d1047..252cdd9 100644 --- a/Splits/TabViewData.swift +++ b/Splits/TabViewData.swift @@ -14,13 +14,9 @@ struct TabViewData: View { .tabItem { Label("Calculator", systemImage: "candybarphone") } - ModalView() + DocsView() .tabItem { - Label("Help", systemImage: "info.circle") - } - ChangeLog() - .tabItem { - Label("Change log", systemImage: "doc.text.fill") + Label("Docs", systemImage: "doc.text.fill") } } }