diff options
Diffstat (limited to 'src/subtitle_view.rs')
| -rw-r--r-- | src/subtitle_view.rs | 57 |
1 files changed, 43 insertions, 14 deletions
diff --git a/src/subtitle_view.rs b/src/subtitle_view.rs index fd98c60..4de73dd 100644 --- a/src/subtitle_view.rs +++ b/src/subtitle_view.rs @@ -1,17 +1,22 @@ use crate::cue_view::{CueView, CueViewMsg, CueViewOutput}; -use crate::util::Tracker; +use crate::subtitle_selection_dialog::SubtitleSettings; +use crate::subtitles::state::CueAddress; use gtk::prelude::*; use relm4::prelude::*; pub struct SubtitleView { primary_cue: Controller<CueView>, - secondary_cue: Tracker<Option<String>>, + secondary_cue: Option<String>, + machine_translation: Option<String>, + show_secondary: bool, + show_machine_translation: bool, } #[derive(Debug)] pub enum SubtitleViewMsg { - SetPrimaryCue(Option<String>), - SetSecondaryCue(Option<String>), + SetPrimaryCue(Option<CueAddress>), + SetSecondaryCue(Option<CueAddress>), + ApplySubtitleSettings(SubtitleSettings), } #[derive(Debug)] @@ -39,12 +44,30 @@ impl SimpleComponent for SubtitleView { model.primary_cue.widget(), gtk::Box { + #[watch] + set_visible: model.show_secondary, set_vexpand: true, }, gtk::Label { - #[track = "model.secondary_cue.is_dirty()"] - set_text: model.secondary_cue.get().as_ref().map(|val| val.as_str()).unwrap_or(""), + #[watch] + set_text: model.secondary_cue.as_ref().map(|val| val.as_str()).unwrap_or(""), + #[watch] + set_visible: model.show_secondary, + set_justify: gtk::Justification::Center, + }, + + gtk::Box { + #[watch] + set_visible: model.show_machine_translation, + set_vexpand: true, + }, + + gtk::Label { + #[watch] + set_text: model.machine_translation.as_ref().map(|val| val.as_str()).unwrap_or(""), + #[watch] + set_visible: model.show_machine_translation, set_justify: gtk::Justification::Center, }, @@ -67,7 +90,10 @@ impl SimpleComponent for SubtitleView { CueViewOutput::MouseEnter => SubtitleViewOutput::SetHoveringCue(true), CueViewOutput::MouseLeave => SubtitleViewOutput::SetHoveringCue(false), }), - secondary_cue: Tracker::new(None), + secondary_cue: None, + machine_translation: None, + show_secondary: false, + show_machine_translation: false, }; let widgets = view_output!(); @@ -76,18 +102,21 @@ impl SimpleComponent for SubtitleView { } fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) { - // Reset trackers - self.secondary_cue.reset(); - match msg { - SubtitleViewMsg::SetPrimaryCue(value) => { + SubtitleViewMsg::SetPrimaryCue(addr) => { self.primary_cue .sender() - .send(CueViewMsg::SetText(value)) + .send(CueViewMsg::SetCue(addr)) .unwrap(); + self.machine_translation = addr.and_then(|a| a.resolve_translation()) + } + SubtitleViewMsg::SetSecondaryCue(addr) => { + let text = addr.map(|addr| addr.resolve_text()); + self.secondary_cue = text; } - SubtitleViewMsg::SetSecondaryCue(value) => { - self.secondary_cue.set(value); + SubtitleViewMsg::ApplySubtitleSettings(settings) => { + self.show_secondary = settings.show_secondary; + self.show_machine_translation = settings.show_machine_translation; } } } |