mirror of
https://github.com/ALEZ-DEV/Babylonia-terminal.git
synced 2025-12-16 17:38:51 +00:00
add menu
This commit is contained in:
parent
08364f8624
commit
c93454358f
@ -14,8 +14,11 @@ use relm4::{
|
|||||||
prelude::{BoxExt, ButtonExt, GtkWindowExt, OrientableExt, WidgetExt},
|
prelude::{BoxExt, ButtonExt, GtkWindowExt, OrientableExt, WidgetExt},
|
||||||
},
|
},
|
||||||
loading_widgets::LoadingWidgets,
|
loading_widgets::LoadingWidgets,
|
||||||
prelude::{AsyncComponentParts, SimpleAsyncComponent},
|
prelude::{
|
||||||
view, Component, RelmApp, RelmWidgetExt, WorkerController,
|
AsyncComponent, AsyncComponentController, AsyncComponentParts, AsyncController,
|
||||||
|
SimpleAsyncComponent,
|
||||||
|
},
|
||||||
|
view, Component, ComponentController, Controller, RelmApp, RelmWidgetExt, WorkerController,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::APP_RESOURCE_PATH;
|
use crate::APP_RESOURCE_PATH;
|
||||||
@ -26,19 +29,23 @@ pub fn run(app: RelmApp<MainWindowMsg>) {
|
|||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum MainWindowMsg {
|
pub enum MainWindowMsg {
|
||||||
|
ToggleMenuVisibility,
|
||||||
|
SelectPage,
|
||||||
SetIsGameRunning(bool),
|
SetIsGameRunning(bool),
|
||||||
}
|
}
|
||||||
|
|
||||||
struct MainWindow {
|
struct MainWindow {
|
||||||
game_handler: WorkerController<manager::HandleGameProcess>,
|
|
||||||
game_state: GameState,
|
game_state: GameState,
|
||||||
|
game_handler: WorkerController<manager::HandleGameProcess>,
|
||||||
is_game_running: bool,
|
is_game_running: bool,
|
||||||
|
is_menu_visible: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MainWindow {
|
impl MainWindow {
|
||||||
fn new(game_state: GameState, sender: relm4::AsyncComponentSender<Self>) -> Self {
|
fn new(game_state: GameState, sender: &relm4::AsyncComponentSender<Self>) -> Self {
|
||||||
MainWindow {
|
MainWindow {
|
||||||
game_state,
|
game_state,
|
||||||
|
is_menu_visible: false,
|
||||||
is_game_running: false,
|
is_game_running: false,
|
||||||
game_handler: manager::HandleGameProcess::builder()
|
game_handler: manager::HandleGameProcess::builder()
|
||||||
.detach_worker(())
|
.detach_worker(())
|
||||||
@ -61,7 +68,47 @@ impl SimpleAsyncComponent for MainWindow {
|
|||||||
gtk::Box {
|
gtk::Box {
|
||||||
set_orientation: gtk::Orientation::Vertical,
|
set_orientation: gtk::Orientation::Vertical,
|
||||||
|
|
||||||
adw::HeaderBar,
|
adw::Flap {
|
||||||
|
#[watch]
|
||||||
|
set_reveal_flap: model.is_menu_visible,
|
||||||
|
set_margin_all: 0,
|
||||||
|
set_fold_policy: adw::FlapFoldPolicy::Auto,
|
||||||
|
|
||||||
|
#[wrap(Some)]
|
||||||
|
set_flap = >k::Box {
|
||||||
|
set_orientation: gtk::Orientation::Vertical,
|
||||||
|
|
||||||
|
gtk::ListBox {
|
||||||
|
set_width_request: 250,
|
||||||
|
set_margin_all: 10,
|
||||||
|
|
||||||
|
append = >k::Button {
|
||||||
|
set_margin_vertical: 5,
|
||||||
|
set_label: "Item 1",
|
||||||
|
},
|
||||||
|
|
||||||
|
append = >k::Button {
|
||||||
|
set_margin_vertical: 5,
|
||||||
|
set_label: "Item 2"
|
||||||
|
},
|
||||||
|
|
||||||
|
append = >k::Button {
|
||||||
|
set_margin_vertical: 5,
|
||||||
|
set_label: "Item 3",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
#[wrap(Some)]
|
||||||
|
set_content = >k::Box {
|
||||||
|
set_orientation: gtk::Orientation::Vertical,
|
||||||
|
|
||||||
|
adw::HeaderBar {
|
||||||
|
pack_start = >k::Button {
|
||||||
|
set_label: "Menu",
|
||||||
|
connect_clicked => MainWindowMsg::ToggleMenuVisibility,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
gtk::Box {
|
gtk::Box {
|
||||||
set_orientation: gtk::Orientation::Vertical,
|
set_orientation: gtk::Orientation::Vertical,
|
||||||
@ -84,6 +131,8 @@ impl SimpleAsyncComponent for MainWindow {
|
|||||||
},
|
},
|
||||||
|
|
||||||
add = &adw::PreferencesGroup {
|
add = &adw::PreferencesGroup {
|
||||||
|
set_margin_vertical: 48,
|
||||||
|
|
||||||
gtk::Button {
|
gtk::Button {
|
||||||
set_css_classes: &["suggested-action", "pill"],
|
set_css_classes: &["suggested-action", "pill"],
|
||||||
|
|
||||||
@ -97,9 +146,11 @@ impl SimpleAsyncComponent for MainWindow {
|
|||||||
sender.send(manager::HandleGameProcessMsg::RunGame).unwrap();
|
sender.send(manager::HandleGameProcessMsg::RunGame).unwrap();
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -115,10 +166,10 @@ impl SimpleAsyncComponent for MainWindow {
|
|||||||
babylonia_terminal_sdk::game_state::GameState::get_current_state()
|
babylonia_terminal_sdk::game_state::GameState::get_current_state()
|
||||||
.await
|
.await
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
sender,
|
&sender,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
model = MainWindow::new(game_state.unwrap(), sender);
|
model = MainWindow::new(game_state.unwrap(), &sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
let widgets = view_output!();
|
let widgets = view_output!();
|
||||||
@ -147,6 +198,8 @@ impl SimpleAsyncComponent for MainWindow {
|
|||||||
|
|
||||||
async fn update(&mut self, message: Self::Input, _sender: relm4::AsyncComponentSender<Self>) {
|
async fn update(&mut self, message: Self::Input, _sender: relm4::AsyncComponentSender<Self>) {
|
||||||
match message {
|
match message {
|
||||||
|
MainWindowMsg::ToggleMenuVisibility => self.is_menu_visible = !self.is_menu_visible,
|
||||||
|
MainWindowMsg::SelectPage => println!("Tried to select a new page"),
|
||||||
MainWindowMsg::SetIsGameRunning(value) => self.is_game_running = value,
|
MainWindowMsg::SetIsGameRunning(value) => self.is_game_running = value,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user