From d98f27229d83cd053aa508b2eea1dd46947aa084 Mon Sep 17 00:00:00 2001 From: Hannes Kuchelmeister Date: Thu, 30 May 2024 18:02:34 +0200 Subject: [PATCH] change to use multiple buttons to make state handling easier --- src/factories/container_list.rs | 37 ++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/src/factories/container_list.rs b/src/factories/container_list.rs index 2902595..b752987 100644 --- a/src/factories/container_list.rs +++ b/src/factories/container_list.rs @@ -7,7 +7,7 @@ use relm4::gtk; use relm4::gtk::prelude::WidgetExt; use relm4_icons::icon_names; -#[derive(Debug)] +#[derive(Debug, PartialEq)] pub enum ContainerStatus { Running, NotRunning, @@ -52,25 +52,38 @@ impl FactoryComponent for Container { add_prefix = >k::Box{ gtk::AspectFrame{ set_ratio: 1.0, - #[name(play_button)] - gtk::Button { - #[watch] - set_icon_name: match &self.status { - ContainerStatus::NotRunning => icon_names::PLAY, - ContainerStatus::Running => icon_names::PAUSE, + gtk::Box{ + gtk::Button { + #[watch] + set_visible: self.status == ContainerStatus::NotRunning, + set_icon_name: icon_names::PLAY, + set_margin_top: 10, + set_margin_bottom: 10, + set_css_classes: &["circular"], + connect_clicked => ContainerMsg::Start, + }, + gtk::Button { + #[watch] + set_visible: self.status == ContainerStatus::Running, + set_icon_name: icon_names::PAUSE, + set_margin_top: 10, + set_margin_bottom: 10, + set_css_classes: &["circular"], + connect_clicked => ContainerMsg::Stop, }, - set_margin_top: 10, - set_margin_bottom: 10, - set_css_classes: &["circular"], - connect_clicked => ContainerMsg::Start, }, }, }, + add_prefix = >k::Box{ + gtk::AspectFrame{ + set_ratio: 1.0, + + }, + }, add_suffix = >k::Box{ gtk::AspectFrame{ set_ratio: 1.0, - #[name(add_button)] gtk::Button { set_icon_name: icon_names::TERMINAL, set_margin_start: 10,