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:
parent
fe76a8d30a
commit
4f68e6b26d
|
@ -22,6 +22,7 @@ namespace ocarina
|
|||
void hide_idle_progress();
|
||||
|
||||
void set_now_playing();
|
||||
void update_controls();
|
||||
|
||||
GtkWidget *playlist_init();
|
||||
GtkWidget *footer_init();
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -87,6 +87,7 @@ static gboolean timeout_poll(gpointer data)
|
|||
{
|
||||
idle_add();
|
||||
ocarina::body::set_now_playing();
|
||||
ocarina::body::update_controls();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue