diff --git a/src/app.rs b/src/app.rs index 8a13118..ac7b065 100644 --- a/src/app.rs +++ b/src/app.rs @@ -13,17 +13,18 @@ use std::collections::HashSet; use std::thread::sleep; use std::time::Duration; +use crate::config::{APP_ID, PROFILE}; +use crate::factories::container_list::Container; +use crate::factories::container_list::ContainerStatus; +use crate::modals::about::AboutDialog; +use crate::modals::unsupported::UnsupportedDialog; +use crate::modals::unsupported::UnsupportedDialogOutput; +use crate::util::toolbox::ToolbxStatus; use gtk::prelude::{ ApplicationExt, ApplicationWindowExt, GtkWindowExt, OrientableExt, SettingsExt, WidgetExt, }; use gtk::{gio, glib}; -use crate::config::{APP_ID, PROFILE}; -use crate::factories::container_list::Container; -use crate::modals::about::AboutDialog; -use crate::modals::unsupported::UnsupportedDialog; -use crate::modals::unsupported::UnsupportedDialogOutput; - pub(super) struct App { unsupported_dialog: Controller, about_dialog: Controller, @@ -223,6 +224,10 @@ impl Component for App { toolbox.id.clone(), ContainerInit { name: toolbox.name.clone(), + status: match toolbox.status { + ToolbxStatus::Running => ContainerStatus::Running, + _ => ContainerStatus::NotRunning, + }, }, ); updated_containers.insert(toolbox.id.clone()); diff --git a/src/factories/container_list.rs b/src/factories/container_list.rs index d3555e6..2902595 100644 --- a/src/factories/container_list.rs +++ b/src/factories/container_list.rs @@ -7,10 +7,17 @@ use relm4::gtk; use relm4::gtk::prelude::WidgetExt; use relm4_icons::icon_names; +#[derive(Debug)] +pub enum ContainerStatus { + Running, + NotRunning, +} + #[derive(Debug)] pub struct Container { hash: String, value: String, + status: ContainerStatus, } #[derive(Debug)] @@ -22,6 +29,7 @@ pub enum ContainerMsg { pub struct ContainerInit { pub name: String, + pub status: ContainerStatus, } #[relm4::factory(pub)] @@ -38,6 +46,7 @@ impl FactoryComponent for Container { root = adw::ActionRow { #[watch] set_title: &self.value, + #[watch] set_subtitle: &self.hash, add_prefix = >k::Box{ @@ -45,8 +54,11 @@ impl FactoryComponent for Container { set_ratio: 1.0, #[name(play_button)] gtk::Button { - // TODO: make component with state that either is waiting, play or pause - set_icon_name: icon_names::PLAY, + #[watch] + set_icon_name: match &self.status { + ContainerStatus::NotRunning => icon_names::PLAY, + ContainerStatus::Running => icon_names::PAUSE, + }, set_margin_top: 10, set_margin_bottom: 10, set_css_classes: &["circular"], @@ -76,6 +88,7 @@ impl FactoryComponent for Container { Self { hash: index.clone(), value: value.name.clone(), + status: value.status, } }