mirror of
https://github.com/yattee/yattee.git
synced 2026-02-20 09:49:46 +00:00
Yattee v2 rewrite
This commit is contained in:
103
Yattee/Models/PlayerControls/ControlButtonConfiguration.swift
Normal file
103
Yattee/Models/PlayerControls/ControlButtonConfiguration.swift
Normal file
@@ -0,0 +1,103 @@
|
||||
//
|
||||
// ControlButtonConfiguration.swift
|
||||
// Yattee
|
||||
//
|
||||
// Configuration for a single control button in the player layout.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
/// Configuration for a single control button, including its type, visibility, and settings.
|
||||
struct ControlButtonConfiguration: Identifiable, Codable, Hashable, Sendable {
|
||||
/// Unique identifier for this button configuration.
|
||||
let id: UUID
|
||||
|
||||
/// The type of control button.
|
||||
let buttonType: ControlButtonType
|
||||
|
||||
/// When this button should be visible based on orientation.
|
||||
var visibilityMode: VisibilityMode
|
||||
|
||||
/// Type-specific settings for this button (if applicable).
|
||||
var settings: ButtonSettings?
|
||||
|
||||
// MARK: - Initialization
|
||||
|
||||
/// Creates a new button configuration.
|
||||
/// - Parameters:
|
||||
/// - id: Unique identifier. Defaults to a new UUID.
|
||||
/// - buttonType: The type of control button.
|
||||
/// - visibilityMode: When to show the button. Defaults to `.both`.
|
||||
/// - settings: Type-specific settings. Defaults to the button type's default settings.
|
||||
init(
|
||||
id: UUID = UUID(),
|
||||
buttonType: ControlButtonType,
|
||||
visibilityMode: VisibilityMode = .both,
|
||||
settings: ButtonSettings? = nil
|
||||
) {
|
||||
self.id = id
|
||||
self.buttonType = buttonType
|
||||
self.visibilityMode = visibilityMode
|
||||
self.settings = settings ?? buttonType.defaultSettings
|
||||
}
|
||||
|
||||
// MARK: - Factory Methods
|
||||
|
||||
/// Creates a default configuration for the given button type.
|
||||
/// - Parameter type: The button type.
|
||||
/// - Returns: A new configuration with default settings.
|
||||
static func defaultConfiguration(for type: ControlButtonType) -> ControlButtonConfiguration {
|
||||
ControlButtonConfiguration(buttonType: type)
|
||||
}
|
||||
|
||||
/// Creates a configuration for a flexible spacer.
|
||||
/// - Returns: A spacer configuration with flexible width.
|
||||
static func flexibleSpacer() -> ControlButtonConfiguration {
|
||||
ControlButtonConfiguration(
|
||||
buttonType: .spacer,
|
||||
settings: .spacer(SpacerSettings(isFlexible: true))
|
||||
)
|
||||
}
|
||||
|
||||
/// Creates a configuration for a fixed-width spacer.
|
||||
/// - Parameter width: The fixed width in points.
|
||||
/// - Returns: A spacer configuration with fixed width.
|
||||
static func fixedSpacer(width: Int) -> ControlButtonConfiguration {
|
||||
ControlButtonConfiguration(
|
||||
buttonType: .spacer,
|
||||
settings: .spacer(SpacerSettings(isFlexible: false, fixedWidth: width))
|
||||
)
|
||||
}
|
||||
|
||||
// MARK: - Convenience Accessors
|
||||
|
||||
/// Returns the spacer settings if this is a spacer button.
|
||||
var spacerSettings: SpacerSettings? {
|
||||
guard case .spacer(let settings) = settings else { return nil }
|
||||
return settings
|
||||
}
|
||||
|
||||
/// Returns the slider settings if this is a slider button.
|
||||
var sliderSettings: SliderSettings? {
|
||||
guard case .slider(let settings) = settings else { return nil }
|
||||
return settings
|
||||
}
|
||||
|
||||
/// Returns the seek settings if this is a seek button.
|
||||
var seekSettings: SeekSettings? {
|
||||
guard case .seek(let settings) = settings else { return nil }
|
||||
return settings
|
||||
}
|
||||
|
||||
/// Returns the time display settings if this is a time display.
|
||||
var timeDisplaySettings: TimeDisplaySettings? {
|
||||
guard case .timeDisplay(let settings) = settings else { return nil }
|
||||
return settings
|
||||
}
|
||||
|
||||
/// Returns the title/author settings if this is a title/author button.
|
||||
var titleAuthorSettings: TitleAuthorSettings? {
|
||||
guard case .titleAuthor(let settings) = settings else { return nil }
|
||||
return settings
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user