From 77d09397aa20be4ef6bdba2f796c9898f286db36 Mon Sep 17 00:00:00 2001 From: Hannes Kuchelmeister Date: Sun, 22 May 2022 13:59:41 +0200 Subject: [PATCH] add first hacky implementaion that opens terminal, #4 --- src/ui/app/messages.rs | 1 + src/ui/app/toolbox_list.rs | 5 +++++ src/ui/app/update.rs | 13 +++++++++++++ src/ui/app/workers.rs | 16 ++++++++++++++++ 4 files changed, 35 insertions(+) diff --git a/src/ui/app/messages.rs b/src/ui/app/messages.rs index 2a0ca4d..27f8c9e 100644 --- a/src/ui/app/messages.rs +++ b/src/ui/app/messages.rs @@ -6,5 +6,6 @@ pub enum AppMsg { ShowToolboxSettingsRequest, ShowToolboxAppsRequest, ToolbxContainerToggleStartStop(DynamicIndex), + OpenToolbxTerminal(DynamicIndex), ToolbxContainerChanged(DynamicIndex, ToolbxEntry), } diff --git a/src/ui/app/toolbox_list.rs b/src/ui/app/toolbox_list.rs index 0b192b5..7c9293f 100644 --- a/src/ui/app/toolbox_list.rs +++ b/src/ui/app/toolbox_list.rs @@ -33,6 +33,8 @@ impl FactoryPrototype for ToolbxEntry { type Msg = AppMsg; fn init_view(&self, key: &DynamicIndex, sender: Sender) -> Self::Widgets { + let index = key.clone(); + view! { suffix_box = >k::Box{ append = >k::AspectFrame{ @@ -56,6 +58,9 @@ impl FactoryPrototype for ToolbxEntry { set_margin_bottom: 10, set_tooltip_text: Some(TERMINAL_TOOLTIP), set_css_classes: &["flat"], + connect_clicked(sender) => move |btn| { + send!(sender, AppMsg::OpenToolbxTerminal(index.clone())); + }, } }, append = >k::AspectFrame{ diff --git a/src/ui/app/update.rs b/src/ui/app/update.rs index 5dc2da1..17b16ec 100644 --- a/src/ui/app/update.rs +++ b/src/ui/app/update.rs @@ -59,6 +59,19 @@ impl AppUpdate for AppModel { toolbx_container.update_entry(container); } } + + AppMsg::OpenToolbxTerminal(index) => { + if let Some(toolbx_container) = self.toolboxes.get_mut(index.current_index()) { + components + .async_handler + .sender() + .blocking_send(AsyncHandlerMsg::OpenToolbxTerminal( + index, + toolbx_container.clone(), + )) + .expect("Receiver dropped"); + } + } } true } diff --git a/src/ui/app/workers.rs b/src/ui/app/workers.rs index 2722cb3..15017d4 100644 --- a/src/ui/app/workers.rs +++ b/src/ui/app/workers.rs @@ -1,3 +1,5 @@ +use std::process::Command; + use relm4::factory::DynamicIndex; use relm4::{send, MessageHandler, Sender}; use tokio::runtime::{Builder, Runtime}; @@ -18,6 +20,7 @@ pub struct AsyncHandler { pub enum AsyncHandlerMsg { StopToolbx(DynamicIndex, ToolbxEntry), StartToolbx(DynamicIndex, ToolbxEntry), + OpenToolbxTerminal(DynamicIndex, ToolbxEntry), } impl MessageHandler for AsyncHandler { @@ -49,6 +52,19 @@ impl MessageHandler for AsyncHandler { tbx.changing_status = false; send! {parent_sender, AppMsg::ToolbxContainerChanged(index, tbx)}; } + AsyncHandlerMsg::OpenToolbxTerminal(index, mut tbx) => { + // TODO: support many terminals and check which are installed + let output = Command::new("gnome-terminal") + .arg("--") + .arg("toolbox") + .arg("enter") + .arg(tbx.toolbx_container.name.clone()) + .output(); + + println!("{:?}", output); + + // TODO: update status + } } }); }