portico/Sources/Portico/Extensions/SpinRow+Extras.swift

61 lines
3.1 KiB
Swift

import Adw
public extension SpinRow {
/// Creates a SpinRow with static text and value settings.
///
/// Values are applied once when the widget mounts. The convenience uses climb rate 1 and 0 digits;
/// chain the generated modifiers to choose different settings.
/// - Parameter title: The row title.
/// - Parameter subtitle: The optional row subtitle.
/// - Parameter adjustment: The optional adjustment model.
/// - Parameter value: The optional value.
@_disfavoredOverload
init<S: StringProtocol>(_ title: S, subtitle: String? = nil, adjustment: Adjustment? = nil, value: Double? = nil) {
self.init(adjustment: adjustment, climbRate: 1, digits: 0)
self = self.title(String(title))
if let subtitle { self = self.subtitle(subtitle) }
if let value { self = self.value(value) }
}
/// Creates a SpinRow whose text and value follow bindings.
///
/// Binding modifiers update the widget in place and write widget changes back. The convenience uses climb rate 1 and 0 digits.
/// - Parameter title: The title binding.
/// - Parameter subtitle: The optional subtitle binding.
/// - Parameter adjustment: The optional adjustment model.
/// - Parameter value: The optional value binding.
init(_ title: Portico.Binding<String>, subtitle: Portico.Binding<String>? = nil, adjustment: Adjustment? = nil, value: Portico.Binding<Double>? = nil) {
self.init(adjustment: adjustment, climbRate: 1, digits: 0)
self = self.title(title)
if let subtitle { self = self.subtitle(subtitle) }
if let value { self = self.value(value) }
}
/// Creates a SpinRow with live interpolated text values.
///
/// Interpolated segments are re-evaluated when their dependencies change. The convenience uses climb rate 1 and 0 digits.
/// - Parameter title: The interpolated title.
/// - Parameter subtitle: The optional interpolated subtitle.
/// - Parameter adjustment: The optional adjustment model.
/// - Parameter value: The optional value.
init(_ title: Portico.InterpolatedText, subtitle: Portico.InterpolatedText? = nil, adjustment: Adjustment? = nil, value: Double? = nil) {
self.init(adjustment: adjustment, climbRate: 1, digits: 0)
self = self.title(title)
if let subtitle { self = self.subtitle(subtitle) }
if let value { self = self.value(value) }
}
/// Creates a SpinRow with a static title and bound value.
///
/// The value binding updates the widget in place and receives widget changes. The convenience uses climb rate 1 and 0 digits.
/// - Parameter title: The row title.
/// - Parameter subtitle: The optional row subtitle.
/// - Parameter adjustment: The optional adjustment model.
/// - Parameter value: The required value binding.
init<S: StringProtocol>(_ title: S, subtitle: String? = nil, adjustment: Adjustment? = nil, value: Portico.Binding<Double>) {
self.init(adjustment: adjustment, climbRate: 1, digits: 0)
self = self.title(String(title))
if let subtitle { self = self.subtitle(subtitle) }
self = self.value(value)
}
}