diff --git a/hammond-gtk/src/widgets/player.rs b/hammond-gtk/src/widgets/player.rs index 7d6c8d3..cf519e8 100644 --- a/hammond-gtk/src/widgets/player.rs +++ b/hammond-gtk/src/widgets/player.rs @@ -1,9 +1,22 @@ #![allow(warnings)] use gstreamer_player as gst; +use gstreamer::ClockTime; use gtk; use gtk::prelude::*; +use failure::Error; + +pub trait PlayerExt { + fn play(&self); + fn pause(&self); + fn seek(&self, position: ClockTime); + fn fast_forward(&self); + fn rewind(&self); + // TODO: change playback rate + // fn set_playback_rate(&self); +} + #[derive(Debug, Clone)] struct PlayerInfo { container: gtk::Box, @@ -36,7 +49,7 @@ struct PlayerControls { pause: gtk::Button, forward: gtk::Button, rewind: gtk::Button, - state: PlayerState, + // state: PlayerState, } #[derive(Debug, Clone)] @@ -68,7 +81,7 @@ impl Default for PlayerWidget { pause, forward, rewind, - state: PlayerState::Ready, + // state: PlayerState::Ready, }; let timer_container = builder.get_object("timer").unwrap(); @@ -105,3 +118,48 @@ impl Default for PlayerWidget { } } } + +impl PlayerWidget { + fn reveal(&self) { + self.revealer.show(); + self.revealer.set_reveal_child(true); + } +} + +impl PlayerExt for PlayerWidget { + fn play(&self) { + // assert the state is either ready or paused + // TODO: assert!() + + self.reveal(); + + self.controls.pause.hide(); + self.controls.play.show(); + + self.player.play(); + } + + fn pause(&self) { + // assert the state is paused + // TODO: assert!() + + self.controls.pause.show(); + self.controls.play.hide(); + + self.player.pause(); + } + + fn seek(&self, position: ClockTime) { + self.player.seek(position); + } + + // FIXME + fn rewind(&self) { + // self.seek() + } + + // FIXME + fn fast_forward(&self) { + // self.seek() + } +}