1 contributor
//
// ControlView.swift
// USB Meter
//
// Created by Bogdan Timofte on 09/03/2020.
// Copyright © 2020 Bogdan Timofte. All rights reserved.
//
import SwiftUI
struct ControlView: View {
@EnvironmentObject private var meter: Meter
var body: some View {
VStack(alignment: .leading, spacing: 14) {
HStack {
Text("Controls")
.font(.headline)
Spacer()
Text(meter.reportsCurrentScreenIndex ? "Device Screen" : "Page Controls")
.font(.caption.weight(.semibold))
.foregroundColor(.secondary)
}
HStack(spacing: 12) {
controlButton(
title: "Prev",
symbol: "chevron.left",
tint: .indigo,
action: { meter.previousScreen() }
)
VStack(spacing: 6) {
Text(meter.currentScreenDescription)
.font(.subheadline.weight(.semibold))
.multilineTextAlignment(.center)
if !meter.reportsCurrentScreenIndex {
Text("The protocol allows navigation, but it does not report the active page back to the app.")
.font(.caption)
.foregroundColor(.secondary)
.multilineTextAlignment(.center)
}
}
.frame(maxWidth: .infinity, minHeight: 92)
.padding(.horizontal, 12)
.meterCard(tint: meter.color, fillOpacity: 0.06, strokeOpacity: 0.10)
controlButton(
title: "Next",
symbol: "chevron.right",
tint: .indigo,
action: { meter.nextScreen() }
)
}
controlButton(
title: "Rotate Screen",
symbol: "rotate.right.fill",
tint: .orange,
compact: false,
action: { meter.rotateScreen() }
)
}
}
private func controlButton(
title: String,
symbol: String,
tint: Color,
compact: Bool = true,
action: @escaping () -> Void
) -> some View {
Button(action: action) {
VStack(spacing: 10) {
Image(systemName: symbol)
.font(.system(size: compact ? 18 : 20, weight: .semibold))
Text(title)
.font(.footnote.weight(.semibold))
.multilineTextAlignment(.center)
}
.foregroundColor(tint)
.frame(maxWidth: .infinity, minHeight: compact ? 92 : 68)
.padding(.horizontal, 8)
.meterCard(tint: tint, fillOpacity: 0.10, strokeOpacity: 0.14)
}
.buttonStyle(.plain)
}
}
struct ControlView_Previews: PreviewProvider {
static var previews: some View {
ControlView()
}
}