75 lines
2.5 KiB
Swift
75 lines
2.5 KiB
Swift
|
import SwiftUI
|
||
|
|
||
|
struct SettingsView: View {
|
||
|
|
||
|
@EnvironmentObject
|
||
|
var database: Database
|
||
|
|
||
|
@Binding
|
||
|
var isPresented: Bool
|
||
|
|
||
|
var body: some View {
|
||
|
VStack(alignment: .leading, spacing: 3) {
|
||
|
HStack {
|
||
|
Text("Settings")
|
||
|
.font(.title2)
|
||
|
.bold()
|
||
|
Spacer()
|
||
|
Button(action: hide) {
|
||
|
Image(systemSymbol: .xmarkCircleFill)
|
||
|
.foregroundColor(.gray)
|
||
|
.font(.system(size: 26))
|
||
|
}
|
||
|
}
|
||
|
Text("Statistics")
|
||
|
.font(.footnote)
|
||
|
.textCase(.uppercase)
|
||
|
.foregroundColor(.secondary)
|
||
|
.padding(.top)
|
||
|
Group {
|
||
|
SettingsStatisticRow(label: "Caps", value: "\(database.numberOfCaps)")
|
||
|
SettingsStatisticRow(label: "Total images", value: "\(database.numberOfImages)")
|
||
|
SettingsStatisticRow(label: "Images per cap", value: String(format: "%.1f", database.averageImageCount))
|
||
|
}.padding(.horizontal)
|
||
|
Text("Classifier")
|
||
|
.font(.footnote)
|
||
|
.textCase(.uppercase)
|
||
|
.foregroundColor(.secondary)
|
||
|
.padding(.top)
|
||
|
Group {
|
||
|
SettingsStatisticRow(label: "Version", value: "\(database.classifierVersion)")
|
||
|
SettingsStatisticRow(label: "Recognized caps", value: "\(database.classifierClassCount)")
|
||
|
}.padding(.horizontal)
|
||
|
Text("Storage")
|
||
|
.font(.footnote)
|
||
|
.textCase(.uppercase)
|
||
|
.foregroundColor(.secondary)
|
||
|
.padding(.top)
|
||
|
Group {
|
||
|
SettingsStatisticRow(label: "Image cache", value: byteString(database.imageCacheSize))
|
||
|
SettingsStatisticRow(label: "Database", value: byteString(database.databaseSize))
|
||
|
SettingsStatisticRow(label: "Classifier", value: byteString(database.classifierSize))
|
||
|
}.padding(.horizontal)
|
||
|
|
||
|
Spacer()
|
||
|
}
|
||
|
.padding(.horizontal)
|
||
|
}
|
||
|
|
||
|
private func hide() {
|
||
|
isPresented = false
|
||
|
}
|
||
|
|
||
|
private func byteString(_ count: Int) -> String {
|
||
|
ByteCountFormatter.string(fromByteCount: Int64(count), countStyle: .file)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
struct SettingsView_Previews: PreviewProvider {
|
||
|
static var previews: some View {
|
||
|
SettingsView(isPresented: .constant(true))
|
||
|
.environmentObject(Database.mock)
|
||
|
.previewLayout(.fixed(width: 375, height: 330))
|
||
|
}
|
||
|
}
|