diff options
Diffstat (limited to 'src/track_selector.rs')
| -rw-r--r-- | src/track_selector.rs | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src/track_selector.rs b/src/track_selector.rs index 5c56e4d..ce04d07 100644 --- a/src/track_selector.rs +++ b/src/track_selector.rs @@ -2,7 +2,7 @@ use adw::prelude::*; use gtk::{gio, glib}; use relm4::prelude::*; -use crate::tracks::StreamIndex; +use crate::{subtitles::StreamIndex, util::Tracker}; glib::wrapper! { pub struct TrackInfo(ObjectSubclass<imp::TrackInfo>); @@ -65,11 +65,12 @@ pub struct TrackSelectorInit { #[derive(Debug)] pub enum TrackSelectorMsg { SetListModel(gio::ListStore), + Changed(StreamIndex), } #[derive(Debug)] pub enum TrackSelectorOutput { - Changed(Option<StreamIndex>), + Changed(StreamIndex), } #[relm4::component(pub)] @@ -87,11 +88,15 @@ impl SimpleComponent for TrackSelector { set_factory: Some(&track_factory), #[watch] set_model: Some(&model.track_list_model), - #[watch] - set_selected: model.track_ix.map_or(gtk::INVALID_LIST_POSITION, |ix| get_list_ix_from_stream_ix(&model.track_list_model, ix)), + // #[watch] + // set_selected: model.track_ix.map_or(gtk::INVALID_LIST_POSITION, |ix| get_list_ix_from_stream_ix(&model.track_list_model, ix)), connect_selected_notify[sender] => move |combo| { - let stream_index = get_stream_ix_from_combo(combo); - sender.output(TrackSelectorOutput::Changed(stream_index)).unwrap(); + if let Some(stream_ix) = get_stream_ix_from_combo(combo) { + println!("selected {}", stream_ix); + sender.input(TrackSelectorMsg::Changed(stream_ix)); + } else { + println!("selected none"); + } }, }, @@ -155,11 +160,18 @@ impl SimpleComponent for TrackSelector { ComponentParts { model, widgets } } - fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) { + fn update(&mut self, msg: Self::Input, sender: ComponentSender<Self>) { match msg { TrackSelectorMsg::SetListModel(list_model) => { self.track_list_model = list_model; } + TrackSelectorMsg::Changed(track_ix) => { + println!("changed {:?}", track_ix); + self.track_ix = Some(track_ix); + sender + .output(TrackSelectorOutput::Changed(track_ix)) + .unwrap(); + } } } } |