ocarina: Show length of song next to progress bar

This makes it easy to tell the total length of the current song.
This commit is contained in:
Bryan Schumaker 2011-11-02 08:11:04 -04:00
parent 90bc64131d
commit 9236dcbb50
6 changed files with 35 additions and 8 deletions

View File

@ -6,6 +6,6 @@
GtkWidget *get_footer();
void put_footer();
void set_footer_track(Track &);
void change_footer(Track &);
#endif /* OCARINA_FOOTER */

View File

@ -38,7 +38,7 @@ void cb_library_refresh()
void cb_track_loaded()
{
println("Ocarina TRACK_LOADED callback!");
libsaria::current_track(set_footer_track);
libsaria::current_track(change_footer);
}
void setup_callbacks()

View File

@ -36,3 +36,9 @@ void put_footer()
if (footer != NULL)
g_object_unref(footer);
}
void change_footer(Track &track)
{
set_now_playing(track);
set_duration(track);
}

View File

@ -1,8 +1,13 @@
#ifndef OCARINA_FOOTER_PRIVATE_H
#define OCARINA_FOOTER_PRIVATE_H
#include <libsaria/track.h>
GtkWidget *get_controls();
GtkWidget *get_nowplaying();
GtkWidget *get_progress();
void set_now_playing(Track &);
void set_duration(Track &);
#endif /* OCARINA_FOOTER_PRIVATE_H */

View File

@ -54,7 +54,7 @@ GtkWidget *get_nowplaying()
return now_playing;
}
void set_footer_track(Track &track)
void set_now_playing(Track &track)
{
set_title(track.get_title());
set_artist("by " + track.get_artist());

View File

@ -4,7 +4,9 @@
#include <libsaria/print.h>
#include "footer.h"
static GtkWidget *progress_box = NULL;
static GtkWidget *progress = NULL;
static GtkWidget *duration = NULL;
static gboolean update_progress(gpointer data)
{
@ -13,18 +15,32 @@ static gboolean update_progress(gpointer data)
return TRUE;
}
static void make_progress()
static void make_scale()
{
progress = gtk_hscale_new_with_range(0, 1, 1);
gtk_scale_set_draw_value(GTK_SCALE(progress), FALSE);
gtk_widget_show(progress);
gtk_timeout_add(100, update_progress, NULL);
}
static void make_progress()
{
progress_box = gtk_hbox_new(FALSE, 0);
duration = gtk_label_new("");
make_scale();
box_pack_start(progress_box, progress, TRUE, TRUE, 0);
box_pack_start(progress_box, duration, FALSE, FALSE, 0);
gtk_widget_show_all(progress_box);
}
GtkWidget *get_progress()
{
if (progress == NULL)
if (progress_box == NULL)
make_progress();
return progress;
return progress_box;
}
void set_duration(Track &track)
{
gtk_label_set_text(GTK_LABEL(duration), track.get_lenstr().c_str());
}