nice error message now

This commit is contained in:
Josh Jeppson 2024-11-15 11:20:00 -07:00
parent 03d7286eca
commit c728c54c29
2 changed files with 68 additions and 26 deletions

View file

@ -9,3 +9,4 @@ eframe = "0.29.1"
egui = "0.29.1" egui = "0.29.1"
egui_flex = "0.1.1" egui_flex = "0.1.1"
jack = "0.13.0" jack = "0.13.0"
native-dialog = "0.7.0"

View file

@ -6,7 +6,7 @@ use eframe::egui::*;
const PEAK_HOLD_TIME: usize = 4000; const PEAK_HOLD_TIME: usize = 4000;
const DECAY_FACTOR: f32 = 0.9999; const DECAY_FACTOR: f32 = 0.9999;
use std::sync::{Arc, Mutex}; use std::{process::exit, sync::{Arc, Mutex}};
fn main() -> eframe::Result { fn main() -> eframe::Result {
let args = Args::parse(); let args = Args::parse();
@ -14,32 +14,54 @@ fn main() -> eframe::Result {
let app = MixApp { let app = MixApp {
mix : shared_mix.clone(), mix : shared_mix.clone(),
}; };
let options = eframe::NativeOptions { if let Ok((client, _status)) = jack::Client::new("fslcmix", jack::ClientOptions::default()) {
viewport: egui::ViewportBuilder::default() let options = eframe::NativeOptions {
.with_inner_size([500.0, 350.0]) viewport: egui::ViewportBuilder::default()
.with_min_inner_size([300.0, 350.0]) .with_inner_size([500.0, 350.0])
.with_max_inner_size([5000.0, 350.0]), .with_min_inner_size([300.0, 350.0])
..Default::default() .with_max_inner_size([5000.0, 350.0]),
}; ..Default::default()
let (client, _status) = jack::Client::new("fslcmix", jack::ClientOptions::default()).unwrap(); };
let process_callback = register_jack_callback(&client, shared_mix);
// Create process and activate the client let process_callback = register_jack_callback(&client, shared_mix);
let process = jack::contrib::ClosureProcessHandler::new(process_callback); // Create process and activate the client
let active_client = client.activate_async((), process).unwrap(); let process = jack::contrib::ClosureProcessHandler::new(process_callback);
let result = eframe::run_native( let active_client = client.activate_async((), process).unwrap();
"FSLCMix", let result = eframe::run_native(
options, "FSLCMix",
Box::new(|cc| { options,
// Dark theme Box::new(|cc| {
cc.egui_ctx.set_theme(egui::Theme::Dark); // Dark theme
// egui_extras::install_image_loaders(&cc.egui_ctx); cc.egui_ctx.set_theme(egui::Theme::Dark);
Ok(Box::new(app)) // egui_extras::install_image_loaders(&cc.egui_ctx);
}), Ok(Box::new(app))
); }),
if let Err(err) = active_client.deactivate() { );
eprintln!("JACK exited with error: {err}"); if let Err(err) = active_client.deactivate() {
eprintln!("JACK exited with error: {err}");
}
result
}
else {
eprintln!("Could not connect to JACK Audio Server.");
let options = eframe::NativeOptions {
viewport: egui::ViewportBuilder::default()
.with_inner_size([150.0, 80.0])
.with_min_inner_size([150.0, 80.0])
.with_max_inner_size([150.0, 80.0]),
..Default::default()
};
let result = eframe::run_native(
"Error - FSLCMix",
options,
Box::new(|cc| {
cc.egui_ctx.set_theme(egui::Theme::Dark);
Ok(Box::new(ErrorBox { text: "Could not connect to JACK Audio Server".to_owned(), }))
}),
);
result
} }
result
} }
fn register_jack_callback(client: &jack::Client, mixer: Arc<Mutex<FslcMix>>) -> impl FnMut(&jack::Client, &jack::ProcessScope) -> jack::Control { fn register_jack_callback(client: &jack::Client, mixer: Arc<Mutex<FslcMix>>) -> impl FnMut(&jack::Client, &jack::ProcessScope) -> jack::Control {
@ -71,6 +93,25 @@ fn db_rms(val : f32) -> f32 {
10.0 * val.log10() 10.0 * val.log10()
} }
struct ErrorBox {
text: String,
}
impl eframe::App for ErrorBox {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
egui::CentralPanel::default().show(ctx, |ui| {
ui.vertical(|ui| {
ui.label(&self.text);
ui.horizontal(|ui| {
if ui.button("Okay").clicked() {
exit(1);
}
});
});
});
}
}
struct MixApp { struct MixApp {
mix: Arc<Mutex<FslcMix>>, mix: Arc<Mutex<FslcMix>>,
} }