script/dom/audio/
audiotrack.rs1use std::cell::Cell;
6
7use dom_struct::dom_struct;
8
9use crate::dom::audio::audiotracklist::AudioTrackList;
10use crate::dom::bindings::cell::DomRefCell;
11use crate::dom::bindings::codegen::Bindings::AudioTrackBinding::AudioTrackMethods;
12use crate::dom::bindings::reflector::{Reflector, reflect_dom_object};
13use crate::dom::bindings::root::{Dom, DomRoot};
14use crate::dom::bindings::str::DOMString;
15use crate::dom::window::Window;
16use crate::script_runtime::CanGc;
17
18#[dom_struct]
19pub(crate) struct AudioTrack {
20 reflector_: Reflector,
21 id: DOMString,
22 kind: DOMString,
23 label: DOMString,
24 language: DOMString,
25 enabled: Cell<bool>,
26 track_list: DomRefCell<Option<Dom<AudioTrackList>>>,
27}
28
29impl AudioTrack {
30 pub(crate) fn new_inherited(
31 id: DOMString,
32 kind: DOMString,
33 label: DOMString,
34 language: DOMString,
35 track_list: Option<&AudioTrackList>,
36 ) -> AudioTrack {
37 AudioTrack {
38 reflector_: Reflector::new(),
39 id,
40 kind,
41 label,
42 language,
43 enabled: Cell::new(false),
44 track_list: DomRefCell::new(track_list.map(Dom::from_ref)),
45 }
46 }
47
48 pub(crate) fn new(
49 window: &Window,
50 id: DOMString,
51 kind: DOMString,
52 label: DOMString,
53 language: DOMString,
54 track_list: Option<&AudioTrackList>,
55 can_gc: CanGc,
56 ) -> DomRoot<AudioTrack> {
57 reflect_dom_object(
58 Box::new(AudioTrack::new_inherited(
59 id, kind, label, language, track_list,
60 )),
61 window,
62 can_gc,
63 )
64 }
65
66 pub(crate) fn id(&self) -> DOMString {
67 self.id.clone()
68 }
69
70 pub(crate) fn kind(&self) -> DOMString {
71 self.kind.clone()
72 }
73
74 pub(crate) fn enabled(&self) -> bool {
75 self.enabled.get()
76 }
77
78 pub(crate) fn set_enabled(&self, value: bool) {
79 self.enabled.set(value);
80 }
81
82 pub(crate) fn add_track_list(&self, track_list: &AudioTrackList) {
83 *self.track_list.borrow_mut() = Some(Dom::from_ref(track_list));
84 }
85
86 pub(crate) fn remove_track_list(&self) {
87 *self.track_list.borrow_mut() = None;
88 }
89}
90
91impl AudioTrackMethods<crate::DomTypeHolder> for AudioTrack {
92 fn Id(&self) -> DOMString {
94 self.id()
95 }
96
97 fn Kind(&self) -> DOMString {
99 self.kind()
100 }
101
102 fn Label(&self) -> DOMString {
104 self.label.clone()
105 }
106
107 fn Language(&self) -> DOMString {
109 self.language.clone()
110 }
111
112 fn Enabled(&self) -> bool {
114 self.enabled()
115 }
116
117 fn SetEnabled(&self, value: bool) {
119 if let Some(list) = self.track_list.borrow().as_ref() {
120 if let Some(idx) = list.find(self) {
121 list.set_enabled(idx, value);
122 }
123 }
124 self.set_enabled(value);
125 }
126}