dash-frontend: tabs, other fixes (desc)

- set rustfmt line width to 120 columns by default for wgui
- dashboard tabs
- wgui: `remove_children`
This commit is contained in:
Aleksander
2025-09-15 20:37:55 +02:00
parent f115d2d2cf
commit 54767d75da
30 changed files with 624 additions and 191 deletions

View File

@@ -0,0 +1,31 @@
use wgui::parser::{ParseDocumentParams, ParserState};
use crate::tab::{Tab, TabParams, TabType};
pub struct TabApps {
#[allow(dead_code)]
pub state: ParserState,
}
impl Tab for TabApps {
fn get_type(&self) -> TabType {
TabType::Apps
}
}
impl TabApps {
pub fn new(params: TabParams) -> anyhow::Result<Self> {
let state = wgui::parser::parse_from_assets(
&ParseDocumentParams {
globals: params.globals.clone(),
path: "gui/tab/apps.xml",
extra: Default::default(),
},
params.layout,
params.listeners,
params.parent_id,
)?;
Ok(Self { state })
}
}

View File

@@ -0,0 +1,31 @@
use wgui::parser::{ParseDocumentParams, ParserState};
use crate::tab::{Tab, TabParams, TabType};
pub struct TabGames {
#[allow(dead_code)]
pub state: ParserState,
}
impl Tab for TabGames {
fn get_type(&self) -> TabType {
TabType::Games
}
}
impl TabGames {
pub fn new(params: TabParams) -> anyhow::Result<Self> {
let state = wgui::parser::parse_from_assets(
&ParseDocumentParams {
globals: params.globals.clone(),
path: "gui/tab/games.xml",
extra: Default::default(),
},
params.layout,
params.listeners,
params.parent_id,
)?;
Ok(Self { state })
}
}

View File

@@ -0,0 +1,47 @@
use wgui::{
components::button::ComponentButton,
parser::{ParseDocumentParams, ParserState},
};
use crate::tab::{Tab, TabParams, TabType};
pub struct TabHome {
#[allow(dead_code)]
pub state: ParserState,
}
impl Tab for TabHome {
fn get_type(&self) -> TabType {
TabType::Home
}
}
impl TabHome {
pub fn new(params: TabParams) -> anyhow::Result<Self> {
let state = wgui::parser::parse_from_assets(
&ParseDocumentParams {
globals: params.globals.clone(),
path: "gui/tab/home.xml",
extra: Default::default(),
},
params.layout,
params.listeners,
params.parent_id,
)?;
let btn_apps = state.fetch_component_as::<ComponentButton>("btn_apps")?;
let btn_games = state.fetch_component_as::<ComponentButton>("btn_games")?;
let btn_monado = state.fetch_component_as::<ComponentButton>("btn_monado")?;
let btn_processes = state.fetch_component_as::<ComponentButton>("btn_processes")?;
let btn_settings = state.fetch_component_as::<ComponentButton>("btn_settings")?;
let frontend = params.frontend;
TabType::register_button(frontend.clone(), &btn_apps, TabType::Apps);
TabType::register_button(frontend.clone(), &btn_games, TabType::Games);
TabType::register_button(frontend.clone(), &btn_monado, TabType::Monado);
TabType::register_button(frontend.clone(), &btn_processes, TabType::Processes);
TabType::register_button(frontend.clone(), &btn_settings, TabType::Settings);
Ok(Self { state })
}
}

View File

@@ -0,0 +1,51 @@
use std::rc::Rc;
use wgui::{
components::button::ComponentButton,
event::EventListenerCollection,
globals::WguiGlobals,
layout::{Layout, WidgetID},
};
use crate::{FrontendTask, RcFrontend};
pub mod apps;
pub mod games;
pub mod home;
pub mod monado;
pub mod processes;
pub mod settings;
#[derive(Clone, Copy, Debug)]
pub enum TabType {
Home,
Apps,
Games,
Monado,
Processes,
Settings,
}
pub struct TabParams<'a> {
pub globals: &'a WguiGlobals,
pub layout: &'a mut Layout,
pub parent_id: WidgetID,
pub frontend: &'a RcFrontend,
pub listeners: &'a mut EventListenerCollection<(), ()>,
}
pub trait Tab {
#[allow(dead_code)]
fn get_type(&self) -> TabType;
}
impl TabType {
pub fn register_button(this_rc: RcFrontend, btn: &Rc<ComponentButton>, tab: TabType) {
btn.on_click({
Box::new(move |_evt| {
this_rc.borrow_mut().push_task(FrontendTask::SetTab(tab));
Ok(())
})
});
}
}

View File

@@ -0,0 +1,31 @@
use wgui::parser::{ParseDocumentParams, ParserState};
use crate::tab::{Tab, TabParams, TabType};
pub struct TabMonado {
#[allow(dead_code)]
pub state: ParserState,
}
impl Tab for TabMonado {
fn get_type(&self) -> TabType {
TabType::Games
}
}
impl TabMonado {
pub fn new(params: TabParams) -> anyhow::Result<Self> {
let state = wgui::parser::parse_from_assets(
&ParseDocumentParams {
globals: params.globals.clone(),
path: "gui/tab/monado.xml",
extra: Default::default(),
},
params.layout,
params.listeners,
params.parent_id,
)?;
Ok(Self { state })
}
}

View File

@@ -0,0 +1,31 @@
use wgui::parser::{ParseDocumentParams, ParserState};
use crate::tab::{Tab, TabParams, TabType};
pub struct TabProcesses {
#[allow(dead_code)]
pub state: ParserState,
}
impl Tab for TabProcesses {
fn get_type(&self) -> TabType {
TabType::Games
}
}
impl TabProcesses {
pub fn new(params: TabParams) -> anyhow::Result<Self> {
let state = wgui::parser::parse_from_assets(
&ParseDocumentParams {
globals: params.globals.clone(),
path: "gui/tab/processes.xml",
extra: Default::default(),
},
params.layout,
params.listeners,
params.parent_id,
)?;
Ok(Self { state })
}
}

View File

@@ -0,0 +1,31 @@
use wgui::parser::{ParseDocumentParams, ParserState};
use crate::tab::{Tab, TabParams, TabType};
pub struct TabSettings {
#[allow(dead_code)]
pub state: ParserState,
}
impl Tab for TabSettings {
fn get_type(&self) -> TabType {
TabType::Settings
}
}
impl TabSettings {
pub fn new(params: TabParams) -> anyhow::Result<Self> {
let state = wgui::parser::parse_from_assets(
&ParseDocumentParams {
globals: params.globals.clone(),
path: "gui/tab/settings.xml",
extra: Default::default(),
},
params.layout,
params.listeners,
params.parent_id,
)?;
Ok(Self { state })
}
}