aboutsummaryrefslogtreecommitdiff
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();
+ }
}
}
}