diff --git a/babylonia-terminal-gui/src/ui/mod.rs b/babylonia-terminal-gui/src/ui/mod.rs index 8a8752e..bd31372 100644 --- a/babylonia-terminal-gui/src/ui/mod.rs +++ b/babylonia-terminal-gui/src/ui/mod.rs @@ -38,6 +38,7 @@ struct MainWindow { game_state: GameState, setup_page: AsyncController, game_page: AsyncController, + settings_page: AsyncConnector, about_page: AsyncConnector, current_page: Pages, is_menu_visible: bool, @@ -55,10 +56,13 @@ impl MainWindow { let about_page = pages::about::AboutPage::builder().launch(()); + let settings_page = pages::settings::SettingsPage::builder().launch(()); + MainWindow { game_state, setup_page, game_page, + settings_page, about_page, current_page: Pages::GamePage, is_menu_visible: false, @@ -69,6 +73,7 @@ impl MainWindow { #[derive(Debug, PartialEq, Eq)] enum Pages { GamePage, + SettingsPage, AboutPage, } @@ -129,6 +134,16 @@ impl SimpleAsyncComponent for MainWindow { 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 { set_orientation: gtk::Orientation::Vertical, set_vexpand: true, @@ -183,7 +198,7 @@ impl SimpleAsyncComponent for MainWindow { set_margin_vertical: 5, set_label: "Settings", - connect_clicked => MainWindowMsg::SelectPage(Pages::GamePage), + connect_clicked => MainWindowMsg::SelectPage(Pages::SettingsPage), }, gtk::Button { diff --git a/babylonia-terminal-gui/src/ui/pages/mod.rs b/babylonia-terminal-gui/src/ui/pages/mod.rs index 0bc3b99..0e04382 100644 --- a/babylonia-terminal-gui/src/ui/pages/mod.rs +++ b/babylonia-terminal-gui/src/ui/pages/mod.rs @@ -1,3 +1,4 @@ pub mod about; pub mod game; +pub mod settings; pub mod steps; diff --git a/babylonia-terminal-gui/src/ui/pages/settings.rs b/babylonia-terminal-gui/src/ui/pages/settings.rs new file mode 100644 index 0000000..6fd6535 --- /dev/null +++ b/babylonia-terminal-gui/src/ui/pages/settings.rs @@ -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, + ) -> relm4::prelude::AsyncComponentParts { + let model = SettingsPage {}; + let widgets = view_output!(); + + AsyncComponentParts { model, widgets } + } +}