From dc043ebc5c67f8e0078e9254ef9f1e08821cc398 Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Tue, 12 Jun 2018 17:43:21 +0300 Subject: [PATCH] h-gtk: Bind the new player widget to code. --- hammond-gtk/resources/gtk/player_toolbar.ui | 50 +++++---- hammond-gtk/src/widgets/mod.rs | 1 + hammond-gtk/src/widgets/player.rs | 107 ++++++++++++++++++++ 3 files changed, 140 insertions(+), 18 deletions(-) create mode 100644 hammond-gtk/src/widgets/player.rs diff --git a/hammond-gtk/resources/gtk/player_toolbar.ui b/hammond-gtk/resources/gtk/player_toolbar.ui index 87186be..94e0493 100644 --- a/hammond-gtk/resources/gtk/player_toolbar.ui +++ b/hammond-gtk/resources/gtk/player_toolbar.ui @@ -129,26 +129,16 @@ - + True False - 36 - image-x-generic-symbolic - - - 1 - - - - - True - False - vertical + 6 - + True False - Show Title + 42 + image-x-generic-symbolic False @@ -157,10 +147,34 @@ - + True False - Episode Title + vertical + + + True + False + Show Title + + + False + True + 0 + + + + + True + False + Episode Title + + + False + True + 1 + + False @@ -170,7 +184,7 @@ - 2 + 1 diff --git a/hammond-gtk/src/widgets/mod.rs b/hammond-gtk/src/widgets/mod.rs index 6360040..946bb6d 100644 --- a/hammond-gtk/src/widgets/mod.rs +++ b/hammond-gtk/src/widgets/mod.rs @@ -6,6 +6,7 @@ mod home_view; mod show; mod shows_view; mod playback; +mod player; pub use self::aboutdialog::about_dialog; pub use self::empty::EmptyView; diff --git a/hammond-gtk/src/widgets/player.rs b/hammond-gtk/src/widgets/player.rs new file mode 100644 index 0000000..7d6c8d3 --- /dev/null +++ b/hammond-gtk/src/widgets/player.rs @@ -0,0 +1,107 @@ +#![allow(warnings)] + +use gstreamer_player as gst; +use gtk; +use gtk::prelude::*; + +#[derive(Debug, Clone)] +struct PlayerInfo { + container: gtk::Box, + show: gtk::Label, + episode: gtk::Label, + cover: gtk::Image, +} + +#[derive(Debug, Clone)] +struct PlayerTimes { + container: gtk::Box, + progressed: gtk::Label, + duration: gtk::Label, + separator: gtk::Label, + scalebar: gtk::Scale, +} + +#[derive(Debug, Clone)] +// FIXME: This is a mock till stuff get sorted out. +enum PlayerState { + Playing, + Paused, + Ready, +} + +#[derive(Debug, Clone)] +struct PlayerControls { + container: gtk::Box, + play: gtk::Button, + pause: gtk::Button, + forward: gtk::Button, + rewind: gtk::Button, + state: PlayerState, +} + +#[derive(Debug, Clone)] +pub struct PlayerWidget { + player: gst::Player, + revealer: gtk::Revealer, + action_bar: gtk::ActionBar, + controls: PlayerControls, + timer: PlayerTimes, + info: PlayerInfo, +} + +impl Default for PlayerWidget { + fn default() -> Self { + let builder = gtk::Builder::new_from_resource("/org/gnome/Hammond/gtk/player_toolbar.ui"); + let player = gst::Player::new(None, None); + let revealer = builder.get_object("revealer").unwrap(); + let action_bar = builder.get_object("action_bar").unwrap(); + + let buttons = builder.get_object("buttons").unwrap(); + let play = builder.get_object("play_button").unwrap(); + let pause = builder.get_object("pause_button").unwrap(); + let forward = builder.get_object("ff_button").unwrap(); + let rewind = builder.get_object("rewind_button").unwrap(); + + let controls = PlayerControls { + container: buttons, + play, + pause, + forward, + rewind, + state: PlayerState::Ready, + }; + + let timer_container = builder.get_object("timer").unwrap(); + let progressed = builder.get_object("progress_time_label").unwrap(); + let duration = builder.get_object("total_duration").unwrap(); + let separator = builder.get_object("separator").unwrap(); + let scalebar = builder.get_object("seek").unwrap(); + let timer = PlayerTimes { + container: timer_container, + progressed, + duration, + separator, + scalebar, + }; + + let labels = builder.get_object("info").unwrap(); + let show = builder.get_object("show_label").unwrap(); + let episode = builder.get_object("episode_label").unwrap(); + let cover = builder.get_object("show_cover").unwrap(); + let info = PlayerInfo { + container: labels, + show, + episode, + cover, + }; + + PlayerWidget { + player, + revealer, + action_bar, + controls, + timer, + info, + } + } +}