ocarina: Show and hide the play / pause buttons

Based on the current gstreamer state.

Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
Bryan Schumaker 2012-03-22 20:22:49 -04:00
parent fe76a8d30a
commit 4f68e6b26d
3 changed files with 41 additions and 6 deletions

View File

@ -22,6 +22,7 @@ namespace ocarina
void hide_idle_progress();
void set_now_playing();
void update_controls();
GtkWidget *playlist_init();
GtkWidget *footer_init();

View File

@ -1,9 +1,15 @@
// Copyright (c) 2012 Bryan Schumaker
#include <ocarina/ocarina.h>
#include <ocarina/button.h>
#include <ocarina/body.h>
#include <libsaria/audio.h>
static GtkWidget *notebook;
static GtkWidget *idle_progress;
static GtkWidget *play_button;
static GtkWidget *pause_button;
static GstState last_state;
static void add_page(string text, GtkWidget *page)
{
@ -15,16 +21,28 @@ static void add_page(string text, GtkWidget *page)
gtk_widget_show(label);
}
static GtkWidget *make_toes()
static void on_click_play(GtkWidget *b, GdkEvent *e, gpointer d)
{
libsaria::audio::play();
}
static void on_click_pause(GtkWidget *b, GdkEvent *e, gpointer d)
{
libsaria::audio::pause();
}
static GtkWidget *make_controls()
{
GtkWidget *box = gtk_hbox_new(FALSE, 0);
GtkWidget *label = gtk_label_new("Controls go here (buttons, progress bar, ...)");
play_button = make_button(GTK_STOCK_MEDIA_PLAY, on_click_play, true);
pause_button = make_button(GTK_STOCK_MEDIA_PAUSE, on_click_pause, false);
idle_progress = gtk_progress_bar_new();
gtk_box_pack_start(GTK_BOX(box), idle_progress, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(box), play_button, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), pause_button, FALSE, FALSE, 0);
gtk_widget_show(box);
gtk_widget_show(label);
return box;
}
@ -34,14 +52,14 @@ namespace ocarina
GtkWidget *body::footer_init()
{
GtkWidget *footer = gtk_vbox_new(FALSE, 0);
GtkWidget *toes = make_toes();
GtkWidget *controls = make_controls();
notebook = gtk_notebook_new();
gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP);
g_object_set(notebook, "tab-border", 0, NULL);
gtk_box_pack_start(GTK_BOX(footer), notebook, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(footer), toes, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(footer), controls, FALSE, FALSE, 0);
add_page("Now Playing", now_playing_page());
add_page("Library", library_page());
@ -63,4 +81,19 @@ namespace ocarina
gtk_widget_hide(idle_progress);
}
void body::update_controls()
{
GstState cur_state = libsaria::audio::get_state();
if (cur_state == last_state)
return;
last_state = cur_state;
if (cur_state == GST_STATE_PLAYING) {
gtk_widget_show(pause_button);
gtk_widget_hide(play_button);
} else {
gtk_widget_show(play_button);
gtk_widget_hide(pause_button);
}
}
}; /* Namespace: ocarina */

View File

@ -87,6 +87,7 @@ static gboolean timeout_poll(gpointer data)
{
idle_add();
ocarina::body::set_now_playing();
ocarina::body::update_controls();
return TRUE;
}