This commit is contained in:
2026-01-26 00:24:17 +01:00
parent ce98acacd0
commit fcb6adb6af
12 changed files with 862 additions and 614 deletions

View File

@@ -119,22 +119,44 @@ impl ListSelectState {
}
#[derive(Clone, Copy, PartialEq, Eq, Default)]
pub enum AudioFocus {
pub enum EngineSection {
#[default]
Devices,
Settings,
Samples,
}
#[derive(Clone, Copy, PartialEq, Eq, Default)]
pub enum DeviceKind {
#[default]
Output,
Input,
}
#[derive(Clone, Copy, PartialEq, Eq, Default)]
pub enum SettingKind {
#[default]
OutputDevice,
InputDevice,
Channels,
BufferSize,
Polyphony,
RefreshRate,
RuntimeHighlight,
ShowScope,
ShowSpectrum,
ShowCompletion,
SamplePaths,
LinkEnabled,
StartStopSync,
Quantum,
}
impl SettingKind {
pub fn next(self) -> Self {
match self {
Self::Channels => Self::BufferSize,
Self::BufferSize => Self::Polyphony,
Self::Polyphony => Self::Channels,
}
}
pub fn prev(self) -> Self {
match self {
Self::Channels => Self::Polyphony,
Self::BufferSize => Self::Channels,
Self::Polyphony => Self::BufferSize,
}
}
}
pub struct Metrics {
@@ -169,7 +191,9 @@ impl Default for Metrics {
pub struct AudioSettings {
pub config: AudioConfig,
pub focus: AudioFocus,
pub section: EngineSection,
pub device_kind: DeviceKind,
pub setting_kind: SettingKind,
pub output_devices: Vec<AudioDeviceInfo>,
pub input_devices: Vec<AudioDeviceInfo>,
pub output_list: ListSelectState,
@@ -182,7 +206,9 @@ impl Default for AudioSettings {
fn default() -> Self {
Self {
config: AudioConfig::default(),
focus: AudioFocus::default(),
section: EngineSection::default(),
device_kind: DeviceKind::default(),
setting_kind: SettingKind::default(),
output_devices: doux::audio::list_output_devices(),
input_devices: doux::audio::list_input_devices(),
output_list: ListSelectState { cursor: 0, scroll_offset: 0 },
@@ -199,41 +225,19 @@ impl AudioSettings {
self.input_devices = doux::audio::list_input_devices();
}
pub fn next_focus(&mut self) {
self.focus = match self.focus {
AudioFocus::OutputDevice => AudioFocus::InputDevice,
AudioFocus::InputDevice => AudioFocus::Channels,
AudioFocus::Channels => AudioFocus::BufferSize,
AudioFocus::BufferSize => AudioFocus::Polyphony,
AudioFocus::Polyphony => AudioFocus::RefreshRate,
AudioFocus::RefreshRate => AudioFocus::RuntimeHighlight,
AudioFocus::RuntimeHighlight => AudioFocus::ShowScope,
AudioFocus::ShowScope => AudioFocus::ShowSpectrum,
AudioFocus::ShowSpectrum => AudioFocus::ShowCompletion,
AudioFocus::ShowCompletion => AudioFocus::SamplePaths,
AudioFocus::SamplePaths => AudioFocus::LinkEnabled,
AudioFocus::LinkEnabled => AudioFocus::StartStopSync,
AudioFocus::StartStopSync => AudioFocus::Quantum,
AudioFocus::Quantum => AudioFocus::OutputDevice,
pub fn next_section(&mut self) {
self.section = match self.section {
EngineSection::Devices => EngineSection::Settings,
EngineSection::Settings => EngineSection::Samples,
EngineSection::Samples => EngineSection::Devices,
};
}
pub fn prev_focus(&mut self) {
self.focus = match self.focus {
AudioFocus::OutputDevice => AudioFocus::Quantum,
AudioFocus::InputDevice => AudioFocus::OutputDevice,
AudioFocus::Channels => AudioFocus::InputDevice,
AudioFocus::BufferSize => AudioFocus::Channels,
AudioFocus::Polyphony => AudioFocus::BufferSize,
AudioFocus::RefreshRate => AudioFocus::Polyphony,
AudioFocus::RuntimeHighlight => AudioFocus::RefreshRate,
AudioFocus::ShowScope => AudioFocus::RuntimeHighlight,
AudioFocus::ShowSpectrum => AudioFocus::ShowScope,
AudioFocus::ShowCompletion => AudioFocus::ShowSpectrum,
AudioFocus::SamplePaths => AudioFocus::ShowCompletion,
AudioFocus::LinkEnabled => AudioFocus::SamplePaths,
AudioFocus::StartStopSync => AudioFocus::LinkEnabled,
AudioFocus::Quantum => AudioFocus::StartStopSync,
pub fn prev_section(&mut self) {
self.section = match self.section {
EngineSection::Devices => EngineSection::Samples,
EngineSection::Settings => EngineSection::Devices,
EngineSection::Samples => EngineSection::Settings,
};
}