From 7aa867680ada363acd704bce409a201d1e1e75de Mon Sep 17 00:00:00 2001 From: Jonni Liljamo Date: Mon, 13 Feb 2023 13:44:32 +0200 Subject: [PATCH] feat(sdbclient): tabbed browse page --- sdbclient/src/plugins/menu/play/ui.rs | 76 ++++++++++++++++++--------- sdbclient/src/runtime/menu/mod.rs | 9 ++++ 2 files changed, 60 insertions(+), 25 deletions(-) diff --git a/sdbclient/src/plugins/menu/play/ui.rs b/sdbclient/src/plugins/menu/play/ui.rs index 3cd49a0..fc170dd 100644 --- a/sdbclient/src/plugins/menu/play/ui.rs +++ b/sdbclient/src/plugins/menu/play/ui.rs @@ -11,8 +11,9 @@ use bevy_inspector_egui::bevy_egui::{egui, EguiContext}; use iyes_loopless::prelude::*; use crate::{ + cfg::CfgUser, plugins::menu::MenuState, - runtime::menu::{PlayMenuUIState, RTDMenu}, cfg::CfgUser, + runtime::menu::{BrowseMenuTab, PlayMenuUIState, RTDMenu}, }; use super::{AllFormingEvent, CreateGameEvent, JoinGameEvent, PlayMenuState}; @@ -69,12 +70,6 @@ pub(super) fn show( rtdmenu.play_menu_ui_state = PlayMenuUIState::CreateGame } - ui.add_enabled_ui(!rtdmenu.waiting_for_all_forming_call, |ui| { - if ui.button("Refresh Browse").clicked() { - allforming_ev_w.send(AllFormingEvent); - } - }); - if ui.button("Back").clicked() { commands.insert_resource(NextState(PlayMenuState::None)); commands.insert_resource(NextState(MenuState::Main)); @@ -82,21 +77,46 @@ pub(super) fn show( }); }); - match rtdmenu.waiting_for_all_forming_call { - true => { - ui.horizontal(|ui| { - ui.spinner(); - ui.label("loading..."); - }); - } - false => { - ui.vertical_centered(|ui| { - egui::ScrollArea::vertical().show(ui, |ui| { - match rtdmenu.all_forming_games.is_empty() { - true => { - ui.label("No games found."); + egui::TopBottomPanel::top("play_top_panel").resizable(false).show_inside(ui, |ui| { + ui.horizontal(|ui| { + ui.label(egui::RichText::new("Browse: ").size(24.)); + + ui.selectable_value(&mut rtdmenu.browse_tab, BrowseMenuTab::Forming, "Forming"); + ui.selectable_value(&mut rtdmenu.browse_tab, BrowseMenuTab::InProgress, "In Progress"); + ui.selectable_value(&mut rtdmenu.browse_tab, BrowseMenuTab::Finished, "Finished"); + + ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { + if ui.button("Refresh").clicked() { + // refresh the current tab + // oh and also, if the tab content in rtdmenu is empty, should + // fetch when switching to it + match rtdmenu.browse_tab { + BrowseMenuTab::Forming => { + if !rtdmenu.waiting_for_all_forming_call { + allforming_ev_w.send(AllFormingEvent); + } } - false => { + BrowseMenuTab::InProgress => todo!(), + BrowseMenuTab::Finished => todo!(), + } + } + }); + }); + }); + + ui.vertical_centered(|ui| { + egui::ScrollArea::vertical().show(ui, |ui| { + match rtdmenu.browse_tab { + BrowseMenuTab::Forming => { + if rtdmenu.waiting_for_all_forming_call { + ui.horizontal(|ui| { + ui.spinner(); + ui.label("loading..."); + }); + } else { + if rtdmenu.all_forming_games.is_empty() { + ui.label("No forming games found."); + } else { for game in rtdmenu.all_forming_games.clone() { egui::Frame::none() .fill(egui::Color32::BLACK) @@ -139,10 +159,16 @@ pub(super) fn show( } } } - }); - }); - } - } + } + BrowseMenuTab::InProgress => { + + } + BrowseMenuTab::Finished => { + + } + } + }); + }); } PlayMenuUIState::CreateGame => { ui.vertical_centered(|ui| { diff --git a/sdbclient/src/runtime/menu/mod.rs b/sdbclient/src/runtime/menu/mod.rs index dd1115b..67a631f 100644 --- a/sdbclient/src/runtime/menu/mod.rs +++ b/sdbclient/src/runtime/menu/mod.rs @@ -14,6 +14,7 @@ use crate::api::game::types::Game; #[derive(Resource)] pub(crate) struct RTDMenu { pub play_menu_ui_state: PlayMenuUIState, + pub browse_tab: BrowseMenuTab, pub waiting_for_create_game_call: bool, /// Current game pub cur_game: Option, @@ -27,6 +28,7 @@ impl Default for RTDMenu { fn default() -> Self { Self { play_menu_ui_state: PlayMenuUIState::Main, + browse_tab: BrowseMenuTab::Forming, waiting_for_create_game_call: false, cur_game: None, all_forming_games: vec![], @@ -53,3 +55,10 @@ impl PlayMenuUIState { } } } + +#[derive(PartialEq)] +pub(crate) enum BrowseMenuTab { + Forming, + InProgress, + Finished, +} -- 2.44.1