Add mute option

This commit is contained in:
pjht 2024-01-30 12:31:16 -06:00
parent 8b0d96533d
commit cfa3c0da05
Signed by: pjht
GPG Key ID: CA239FC6934E6F3A

View File

@ -32,6 +32,8 @@ fn main() -> Result<(), eframe::Error> {
#[derive(Debug, Copy, Clone, Serialize, Deserialize)] #[derive(Debug, Copy, Clone, Serialize, Deserialize)]
struct Options { struct Options {
#[serde(default = "Options::default_mute")]
mute: bool,
#[serde(default = "Options::default_fan_enabled")] #[serde(default = "Options::default_fan_enabled")]
fan_enabled: bool, fan_enabled: bool,
#[serde(default = "Options::default_volume")] #[serde(default = "Options::default_volume")]
@ -39,6 +41,9 @@ struct Options {
} }
impl Options { impl Options {
fn default_mute() -> bool {
false
}
fn default_fan_enabled() -> bool { fn default_fan_enabled() -> bool {
true true
} }
@ -61,11 +66,15 @@ struct AltairEmulator {
impl AltairEmulator { impl AltairEmulator {
fn new(cc: &eframe::CreationContext<'_>, audio_tx: Sender<AudioMessage>) -> Self { fn new(cc: &eframe::CreationContext<'_>, audio_tx: Sender<AudioMessage>) -> Self {
let options = if cc.storage.unwrap().get_string("options").is_none() { let options = if cc.storage.unwrap().get_string("options").is_none() {
Options { fan_enabled: true, volume: 1.0 } Options { mute: false, fan_enabled: true, volume: 1.0 }
} else { } else {
eframe::get_value(cc.storage.unwrap(), "options").unwrap() eframe::get_value(cc.storage.unwrap(), "options").unwrap()
}; };
if options.mute {
audio_tx.send(AudioMessage::SetVolume(0.0)).unwrap();
} else {
audio_tx.send(AudioMessage::SetVolume(options.volume)).unwrap(); audio_tx.send(AudioMessage::SetVolume(options.volume)).unwrap();
}
let mut mem = [0; 65536]; let mut mem = [0; 65536];
let cpu = I8080::new(); let cpu = I8080::new();
rand::thread_rng().fill_bytes(&mut mem); rand::thread_rng().fill_bytes(&mut mem);
@ -300,8 +309,12 @@ impl eframe::App for AltairEmulator {
if option_window.draw(ctx, &mut self.options) { if option_window.draw(ctx, &mut self.options) {
self.option_window = None; self.option_window = None;
} }
if self.options.mute {
self.audio_tx.send(AudioMessage::SetVolume(0.0)).unwrap();
} else {
self.audio_tx.send(AudioMessage::SetVolume(self.options.volume)).unwrap(); self.audio_tx.send(AudioMessage::SetVolume(self.options.volume)).unwrap();
} }
}
if (old_fan_enabled != self.options.fan_enabled) && self.fp_state.power() { if (old_fan_enabled != self.options.fan_enabled) && self.fp_state.power() {
if self.options.fan_enabled { if self.options.fan_enabled {
self.audio_tx.send(AudioMessage::FanOn).unwrap(); self.audio_tx.send(AudioMessage::FanOn).unwrap();
@ -344,6 +357,7 @@ impl OptionWindow {
}); });
match self.category { match self.category {
OptionsCategory::General => { OptionsCategory::General => {
ui.checkbox(&mut self.options.mute, "Mute");
ui.checkbox(&mut self.options.fan_enabled, "Fan enabled"); ui.checkbox(&mut self.options.fan_enabled, "Fan enabled");
ui.add(Slider::new(&mut self.options.volume, 0.0..=100.0).text("Volume")); ui.add(Slider::new(&mut self.options.volume, 0.0..=100.0).text("Volume"));
} }