added the base for the settings page

This commit is contained in:
ALEZ-DEV 2025-03-14 19:49:13 +01:00
parent ce50bf00e4
commit 1a6bb86cb5
3 changed files with 61 additions and 1 deletions

View File

@ -38,6 +38,7 @@ struct MainWindow {
game_state: GameState, game_state: GameState,
setup_page: AsyncController<pages::steps::SetupPage>, setup_page: AsyncController<pages::steps::SetupPage>,
game_page: AsyncController<pages::game::GamePage>, game_page: AsyncController<pages::game::GamePage>,
settings_page: AsyncConnector<pages::settings::SettingsPage>,
about_page: AsyncConnector<pages::about::AboutPage>, about_page: AsyncConnector<pages::about::AboutPage>,
current_page: Pages, current_page: Pages,
is_menu_visible: bool, is_menu_visible: bool,
@ -55,10 +56,13 @@ impl MainWindow {
let about_page = pages::about::AboutPage::builder().launch(()); let about_page = pages::about::AboutPage::builder().launch(());
let settings_page = pages::settings::SettingsPage::builder().launch(());
MainWindow { MainWindow {
game_state, game_state,
setup_page, setup_page,
game_page, game_page,
settings_page,
about_page, about_page,
current_page: Pages::GamePage, current_page: Pages::GamePage,
is_menu_visible: false, is_menu_visible: false,
@ -69,6 +73,7 @@ impl MainWindow {
#[derive(Debug, PartialEq, Eq)] #[derive(Debug, PartialEq, Eq)]
enum Pages { enum Pages {
GamePage, GamePage,
SettingsPage,
AboutPage, AboutPage,
} }
@ -129,6 +134,16 @@ impl SimpleAsyncComponent for MainWindow {
model.game_page.widget(), model.game_page.widget(),
}, },
gtk::Box {
set_orientation: gtk::Orientation::Vertical,
set_vexpand: true,
#[watch]
set_visible: model.current_page == Pages::SettingsPage,
model.settings_page.widget(),
},
gtk::Box { gtk::Box {
set_orientation: gtk::Orientation::Vertical, set_orientation: gtk::Orientation::Vertical,
set_vexpand: true, set_vexpand: true,
@ -183,7 +198,7 @@ impl SimpleAsyncComponent for MainWindow {
set_margin_vertical: 5, set_margin_vertical: 5,
set_label: "Settings", set_label: "Settings",
connect_clicked => MainWindowMsg::SelectPage(Pages::GamePage), connect_clicked => MainWindowMsg::SelectPage(Pages::SettingsPage),
}, },
gtk::Button { gtk::Button {

View File

@ -1,3 +1,4 @@
pub mod about; pub mod about;
pub mod game; pub mod game;
pub mod settings;
pub mod steps; pub mod steps;

View File

@ -0,0 +1,44 @@
use relm4::{
gtk::prelude::{OrientableExt, WidgetExt},
prelude::{gtk, AsyncComponentParts, SimpleAsyncComponent},
};
pub struct SettingsPage;
#[relm4::component(pub, async)]
impl SimpleAsyncComponent for SettingsPage {
type Input = ();
type Output = ();
type Init = ();
view! {
gtk::Box {
set_orientation: gtk::Orientation::Vertical,
gtk::Label {
set_label: "This page is under construction!",
add_css_class: "title-1",
},
gtk::Label {
set_margin_top: 24,
set_label: "Please wait patiently :)",
add_css_class: "title-4",
},
}
}
async fn init(
_: Self::Init,
root: Self::Root,
sender: relm4::AsyncComponentSender<Self>,
) -> relm4::prelude::AsyncComponentParts<Self> {
let model = SettingsPage {};
let widgets = view_output!();
AsyncComponentParts { model, widgets }
}
}