| use egui::{TextEdit, Ui}; | |
| use crate::app_state::AppState; | |
| use crate::settings::PersistentSettings; | |
| use crate::views::render_view::RenderView; | |
| pub struct SettingsViewer; | |
| impl RenderView for SettingsViewer { | |
| fn title(&self) -> String { | |
| "Settings".into() | |
| } | |
| fn render(&self, ui: &mut Ui, state: &mut AppState) -> anyhow::Result<()> { | |
| let settings = &mut state.settings; | |
| egui::ScrollArea::vertical().show(ui, |ui| { | |
| if ui.button("Reset to defaults").clicked() { | |
| settings.persistent = PersistentSettings::default(); | |
| } | |
| ui.label("AVM source root URL:"); | |
| let text_edit = TextEdit::singleline(&mut settings.persistent.avm_source_url).desired_width(800.0); | |
| text_edit.show(ui); | |
| ui.horizontal(|ui| { | |
| let mut apply_cache_strategy = settings.persistent.apply_cache_strategy; | |
| let mut cache_strategy_limit = settings.persistent.cache_strategy_limit; | |
| ui.checkbox(&mut apply_cache_strategy, "Limit number of frames kept in memory"); | |
| ui.add_enabled( | |
| apply_cache_strategy, | |
| egui::Slider::new(&mut cache_strategy_limit, 1..=100), | |
| ); | |
| settings.persistent.apply_cache_strategy = apply_cache_strategy; | |
| settings.persistent.cache_strategy_limit = cache_strategy_limit; | |
| }); | |
| ui.checkbox( | |
| &mut settings.persistent.update_sharable_url, | |
| "Update URL with sharable state", | |
| ); | |
| let style = &mut settings.persistent.style.overlay; | |
| ui.horizontal(|ui| { | |
| ui.label("Highlighted object color:"); | |
| ui.color_edit_button_srgba(&mut style.highlighted_object_stroke.color); | |
| }); | |
| ui.horizontal(|ui| { | |
| ui.label("Selected object color:"); | |
| ui.color_edit_button_srgba(&mut style.selected_object_stroke.color); | |
| }); | |
| ui.horizontal(|ui| { | |
| ui.label("Coding unit color:"); | |
| ui.color_edit_button_srgba(&mut style.coding_unit_stroke.color); | |
| }); | |
| ui.horizontal(|ui| { | |
| ui.label("Transform unit color:"); | |
| ui.color_edit_button_srgba(&mut style.transform_unit_stroke.color); | |
| }); | |
| ui.horizontal(|ui| { | |
| ui.label("Superblock color:"); | |
| ui.color_edit_button_srgba(&mut style.superblock_stroke.color); | |
| }); | |
| ui.horizontal(|ui| { | |
| ui.label("Mode name color:"); | |
| ui.color_edit_button_srgba(&mut style.mode_name_color); | |
| }); | |
| ui.horizontal(|ui| { | |
| ui.label("Pixel / coeffs viewer text color:"); | |
| ui.color_edit_button_srgba(&mut style.pixel_viewer_text_color); | |
| }); | |
| ui.checkbox(&mut style.enable_text_shadows, "Enable text shadows"); | |
| }); | |
| Ok(()) | |
| } | |
| } |