| use egui::{RichText, Ui}; | |
| use crate::app_state::AppState; | |
| use crate::settings::DistortionView; | |
| use crate::views::RenderView; | |
| use crate::views::ViewMode; | |
| pub struct MenuBar; | |
| impl RenderView for MenuBar { | |
| fn title(&self) -> String { | |
| "Menu".into() | |
| } | |
| fn render(&self, ui: &mut Ui, state: &mut AppState) -> anyhow::Result<()> { | |
| egui::menu::bar(ui, |ui| { | |
| ui.menu_button("File", |ui| { | |
| if ui.button("Open Local Stream (.zip)").clicked() { | |
| state.local_stream_manager.prompt_local_stream(); | |
| ui.close_menu(); | |
| } | |
| if state.settings.sharable.show_remote_streams { | |
| if ui.button("Open Remote Stream").clicked() { | |
| state.settings.show_stream_select = true; | |
| ui.close_menu(); | |
| } | |
| if ui.button("Decode Stream on Server").clicked() { | |
| state.settings.show_decode_progress = true; | |
| state.server_decode_manager.prompt_stream(); | |
| ui.close_menu(); | |
| } | |
| } | |
| if ui.button("Open Demo Stream").clicked() { | |
| state.local_stream_manager.load_demo_stream(); | |
| ui.close_menu(); | |
| } | |
| }); | |
| ui.menu_button("View Mode", |ui| { | |
| let current_mode = state.settings.sharable.view_mode; | |
| let mut have_orig_yuv = false; | |
| if let Some(stream) = state.stream.as_ref() { | |
| if stream.have_orig_yuv() { | |
| have_orig_yuv = true; | |
| } | |
| } | |
| for view_mode in [ | |
| ViewMode::CodingFlow, | |
| ViewMode::Prediction, | |
| ViewMode::Transform, | |
| ViewMode::Filters, | |
| ViewMode::Distortion(DistortionView::Distortion), | |
| ViewMode::Motion, | |
| ViewMode::Heatmap, | |
| ] { | |
| let prefix = if current_mode == view_mode { "• " } else { " " }; | |
| let mut text = RichText::new(format!("{}{}", prefix, view_mode)); | |
| if current_mode == view_mode { | |
| text = text.strong(); | |
| } | |
| let enabled = !matches!(view_mode, ViewMode::Distortion(_)) || have_orig_yuv; | |
| if ui.add_enabled(enabled, egui::Button::new(text)).clicked() { | |
| state.settings.sharable.view_mode = view_mode; | |
| ui.close_menu(); | |
| } | |
| } | |
| }); | |
| ui.menu_button("Settings", |ui| { | |
| if ui.button("Edit Settings").clicked() { | |
| state.settings.show_settings_window = true; | |
| ui.close_menu(); | |
| } | |
| }); | |
| ui.menu_button("Window", |ui| { | |
| if ui.button("Decode Progress").clicked() { | |
| state.settings.show_decode_progress = true; | |
| ui.close_menu(); | |
| } | |
| if ui.button("Performance").clicked() { | |
| state.settings.show_performance_window = true; | |
| ui.close_menu(); | |
| } | |
| }); | |
| }); | |
| Ok(()) | |
| } | |
| } |