summary refs log tree commit diff
path: root/src/track_selector.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/track_selector.rs')
-rw-r--r--src/track_selector.rs26
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();
+            }
         }
     }
 }