generated from luke-else/egui-template
	Started adding logic to the tab handler
This commit is contained in:
		@@ -12,7 +12,7 @@ impl<'a> eframe::App for App<'a> {
 | 
			
		||||
        tabs::display_tabs(self, ctx);
 | 
			
		||||
 | 
			
		||||
        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;
 | 
			
		||||
 | 
			
		||||
use std::fmt::Display;
 | 
			
		||||
use std::collections::HashMap;
 | 
			
		||||
 | 
			
		||||
// Strum Package to make enum Itterable
 | 
			
		||||
use strum::EnumIter;
 | 
			
		||||
@@ -8,28 +8,48 @@ use strum::IntoEnumIterator;
 | 
			
		||||
 | 
			
		||||
use crate::App;
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, Default, EnumIter, PartialEq, Eq)]
 | 
			
		||||
pub enum Tabs {
 | 
			
		||||
#[derive(Debug, Default, EnumIter, PartialEq, Eq, Hash)]
 | 
			
		||||
pub enum TabTypes {
 | 
			
		||||
    #[default]
 | 
			
		||||
    Home,
 | 
			
		||||
    METAR(metar_tab::MetarTab),
 | 
			
		||||
    METAR,
 | 
			
		||||
    TAF,
 | 
			
		||||
    NOTAMS,
 | 
			
		||||
    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)]
 | 
			
		||||
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
 | 
			
		||||
@@ -44,9 +64,9 @@ pub fn display_tabs(app: &mut App, ctx: &egui::Context) {
 | 
			
		||||
            ui.visuals_mut().button_frame = false;
 | 
			
		||||
 | 
			
		||||
            // Insert Tabs
 | 
			
		||||
            for tab in Tabs::iter() {
 | 
			
		||||
            for tab in TabTypes::iter() {
 | 
			
		||||
                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() {
 | 
			
		||||
                    app.tab_state.current_tab = tab
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user