blob: 6120862dc35ed97fe6c0146a105ad714e50ac19a [file] [log] [blame]
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(())
}
}