From 8e865a26752bd9d018f68124ef500ad59f99911b Mon Sep 17 00:00:00 2001 From: Gabriele Musco Date: Thu, 7 Dec 2023 10:22:27 +0000 Subject: [PATCH] feat(stardust): build window --- src/ui/main_view.rs | 4 ++- src/ui/stardust/stardust_view.rs | 42 +++++++++++++++++++++++++------- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/ui/main_view.rs b/src/ui/main_view.rs index 90b1cf6..d01cdbf 100644 --- a/src/ui/main_view.rs +++ b/src/ui/main_view.rs @@ -662,7 +662,9 @@ impl SimpleComponent for MainView { profile_delete_confirm_dialog, root_win: init.root_win.clone(), profile_editor: None, - stardust_view: StardustView::builder().launch(StardustViewInit {}).detach(), + stardust_view: StardustView::builder().launch(StardustViewInit { + root_win: init.root_win.clone() + }).detach(), tracker: 0, }; let widgets = view_output!(); diff --git a/src/ui/stardust/stardust_view.rs b/src/ui/stardust/stardust_view.rs index b93a653..3455139 100644 --- a/src/ui/stardust/stardust_view.rs +++ b/src/ui/stardust/stardust_view.rs @@ -1,6 +1,10 @@ -use crate::{stateless_action, withclones}; -use gtk::prelude::*; +use crate::{ + stateless_action, + ui::build_window::{BuildWindow, BuildWindowMsg, BuildWindowOutMsg}, + withclones, +}; use adw::prelude::*; +use gtk::prelude::*; use relm4::{ actions::{ActionGroupName, RelmAction, RelmActionGroup}, new_action_group, new_stateless_action, @@ -24,17 +28,23 @@ pub enum StardustViewMsg { FlatlandRepoChanged(String), AddClient, + + CancelBuild, } #[derive(Debug)] pub enum StardustViewOutMsg {} #[derive(Debug)] -pub struct StardustViewInit {} +pub struct StardustViewInit { + pub root_win: gtk::Window, +} #[tracker::track] pub struct StardustView { stardust_service_active: bool, + #[tracker::do_not_track] + build_window: Controller, } #[relm4::component(pub)] @@ -231,19 +241,24 @@ impl SimpleComponent for StardustView { match message { Self::Input::BuildStardust => { println!("Build"); - }, + self.build_window.sender().emit(BuildWindowMsg::Present); + } Self::Input::UpdateStardust => { println!("Update"); - }, + self.build_window.sender().emit(BuildWindowMsg::Present); + } + Self::Input::CancelBuild => { + println!("Cancel Build"); + } Self::Input::StartClicked => { println!("Start"); - }, + } Self::Input::StopClicked => { println!("Stop"); - }, + } Self::Input::RestartClicked => { println!("Restart"); - }, + } Self::Input::AutostartChanged(val) => { println!("Autostart: {}", val); } @@ -278,6 +293,12 @@ impl SimpleComponent for StardustView { ) -> ComponentParts { let model = Self { stardust_service_active: false, + build_window: BuildWindow::builder() + .transient_for(init.root_win) + .launch(()) + .forward(sender.input_sender(), |msg| match msg { + BuildWindowOutMsg::CancelBuild => Self::Input::CancelBuild, + }), tracker: 0, }; @@ -298,7 +319,10 @@ impl SimpleComponent for StardustView { }); } - root.insert_action_group(StardustActionGroup::NAME, Some(&actions.into_action_group())); + root.insert_action_group( + StardustActionGroup::NAME, + Some(&actions.into_action_group()), + ); ComponentParts { model, widgets } }