generated from luke-else/egui-template
Started adding logic to the tab handler
This commit is contained in:
parent
98d2c271ef
commit
bfc34796b2
@ -12,7 +12,7 @@ impl<'a> eframe::App for App<'a> {
|
|||||||
tabs::display_tabs(self, ctx);
|
tabs::display_tabs(self, ctx);
|
||||||
|
|
||||||
match &mut self.tab_state.current_tab {
|
match &mut self.tab_state.current_tab {
|
||||||
tabs::Tabs::METAR(tab) => tab.display_tab(ctx),
|
tabs::TabTypes::METAR(tab) => tab.display_tab(ctx),
|
||||||
_ => (),
|
_ => (),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
pub mod metar_tab;
|
pub mod metar_tab;
|
||||||
|
|
||||||
use std::fmt::Display;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
// Strum Package to make enum Itterable
|
// Strum Package to make enum Itterable
|
||||||
use strum::EnumIter;
|
use strum::EnumIter;
|
||||||
@ -8,28 +8,48 @@ use strum::IntoEnumIterator;
|
|||||||
|
|
||||||
use crate::App;
|
use crate::App;
|
||||||
|
|
||||||
#[derive(Debug, Default, EnumIter, PartialEq, Eq)]
|
#[derive(Debug, Default, EnumIter, PartialEq, Eq, Hash)]
|
||||||
pub enum Tabs {
|
pub enum TabTypes {
|
||||||
#[default]
|
#[default]
|
||||||
Home,
|
Home,
|
||||||
METAR(metar_tab::MetarTab),
|
METAR,
|
||||||
TAF,
|
TAF,
|
||||||
NOTAMS,
|
NOTAMS,
|
||||||
Routing,
|
Routing,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Display for Tabs {
|
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
||||||
match self {
|
|
||||||
Self::METAR(_) => write!(f, "METAR"),
|
|
||||||
_ => write!(f, "{}", format!("{:?}", self)),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct TabState {
|
pub struct TabState {
|
||||||
pub current_tab: Tabs,
|
current_tab: TabTypes,
|
||||||
|
tabs: HashMap<TabTypes, Box<dyn Tab>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TabState {
|
||||||
|
/// Get the Tab based on a given Tab Type
|
||||||
|
pub fn get_tab_state(&self, tab_type: &TabTypes) -> Option<&Box<dyn Tab>> {
|
||||||
|
match self.tabs.get(tab_type) {
|
||||||
|
Some(tab) => Some(tab),
|
||||||
|
None => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Set the state of a given tab
|
||||||
|
pub fn set_tab_state(&mut self, tab_type: &TabTypes) {}
|
||||||
|
|
||||||
|
/// Get the currently selected Tab
|
||||||
|
pub fn get_current_tab(&self) -> Option<&Box<dyn Tab>> {
|
||||||
|
self.get_tab_state(&self.current_tab)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get the type of the current Tab
|
||||||
|
pub fn get_current_tab_type(&self) -> &TabTypes {
|
||||||
|
return &self.current_tab;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Change the current tab to a different tab type, saving the state of the current tab
|
||||||
|
pub fn change_tab(&mut self, new_tab_type: &TabTypes) {
|
||||||
|
self.current_tab = *new_tab_type;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Tab traits that allow tab display on the main application window
|
/// Tab traits that allow tab display on the main application window
|
||||||
@ -44,9 +64,9 @@ pub fn display_tabs(app: &mut App, ctx: &egui::Context) {
|
|||||||
ui.visuals_mut().button_frame = false;
|
ui.visuals_mut().button_frame = false;
|
||||||
|
|
||||||
// Insert Tabs
|
// Insert Tabs
|
||||||
for tab in Tabs::iter() {
|
for tab in TabTypes::iter() {
|
||||||
let tab_label =
|
let tab_label =
|
||||||
ui.selectable_label(tab == app.tab_state.current_tab, format!("{}", tab));
|
ui.selectable_label(tab == app.tab_state.current_tab, format!("{:?}", tab));
|
||||||
|
|
||||||
if tab_label.clicked() {
|
if tab_label.clicked() {
|
||||||
app.tab_state.current_tab = tab
|
app.tab_state.current_tab = tab
|
||||||
|
Loading…
Reference in New Issue
Block a user