diff --git a/hostsoftware/src/outputsettings.rs b/hostsoftware/src/outputsettings.rs index 13e5a69..f7cb548 100644 --- a/hostsoftware/src/outputsettings.rs +++ b/hostsoftware/src/outputsettings.rs @@ -1,9 +1,16 @@ +use eframe::egui::Color32; use eframe::egui::{self}; use crate::serial; use crate::widgets; use crate::CheapsdoControl; +const PLL_MIN_FREQ: u32 = 600_000_000; +const PLL_MAX_FREQ: u32 = 900_000_000; + +const OUT_MIN_FREQ: u32 = 500_000; +const OUT_MAX_FREQ: u32 = 225_000_000; + impl CheapsdoControl { pub fn output_control(&mut self, ui: &mut egui::Ui, ctx: &egui::Context) { ui.vertical(|ui| { @@ -16,6 +23,8 @@ impl CheapsdoControl { widgets::frequency_input( self.ms1_frequency_id, &mut self.pll_settings.ms1_frequency, + PLL_MIN_FREQ, + PLL_MAX_FREQ, &ctx, ui, ); @@ -25,6 +34,8 @@ impl CheapsdoControl { widgets::frequency_input( self.ms2_frequency_id, &mut self.pll_settings.ms2_frequency, + PLL_MIN_FREQ, + PLL_MAX_FREQ, &ctx, ui, ); @@ -45,6 +56,8 @@ impl CheapsdoControl { widgets::frequency_input( self.output_frequency_id[i], &mut self.pll_settings.outputs[i].frequency, + OUT_MIN_FREQ, + OUT_MAX_FREQ, &ctx, ui, ); diff --git a/hostsoftware/src/widgets.rs b/hostsoftware/src/widgets.rs index 99352d5..8f8c0f9 100644 --- a/hostsoftware/src/widgets.rs +++ b/hostsoftware/src/widgets.rs @@ -1,11 +1,13 @@ use cheapsdo_protocol::Multisynth; -use eframe::egui::{self, RichText}; +use eframe::egui::{self, Color32, RichText}; use crate::formatters; pub fn frequency_input( id: egui::Id, freq: &mut u32, + min_freq: u32, + max_freq: u32, ctx: &egui::Context, ui: &mut egui::Ui, ) -> egui::Response { @@ -16,10 +18,18 @@ pub fn frequency_input( } else { formatters::format_frequency(*freq as f64) }; + + let color = if !has_focus && (*freq <= min_freq || *freq >= max_freq) { + Some(Color32::DARK_RED) + } else { + None + }; + let resp = ui.add_sized( [100.0, 20.0], egui::TextEdit::singleline(&mut tmp) .id(id) + .text_color_opt(color) .horizontal_align(egui::Align::Max), ); if has_focus {