gui/playlist: Add size information to playlist sidebar
Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
2c18f9e715
commit
e24ab97545
|
@ -13,7 +13,7 @@ enum playlist_sidebar_columns {
|
||||||
};
|
};
|
||||||
|
|
||||||
static GtkTreeStore *p_store;
|
static GtkTreeStore *p_store;
|
||||||
static gchar *p_name;
|
static gchar *p_name = NULL;
|
||||||
|
|
||||||
static void __playlist_set(GtkTreeIter *iter, const gchar *name,
|
static void __playlist_set(GtkTreeIter *iter, const gchar *name,
|
||||||
const gchar *image)
|
const gchar *image)
|
||||||
|
@ -22,12 +22,37 @@ static void __playlist_set(GtkTreeIter *iter, const gchar *name,
|
||||||
P_SB_IMAGE, image, -1);
|
P_SB_IMAGE, image, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __playlist_set_size(GtkTreeIter *iter, const gchar *name)
|
||||||
|
{
|
||||||
|
unsigned int size = playlist_size(name);
|
||||||
|
const gchar *fmt = "%s\n%d track%s";
|
||||||
|
gchar *text;
|
||||||
|
|
||||||
|
text = g_strdup_printf(fmt, name, size, (size == 1) ? "" : "s");
|
||||||
|
gtk_tree_store_set(p_store, iter, P_SB_NAME, text, -1);
|
||||||
|
g_free(text);
|
||||||
|
}
|
||||||
|
|
||||||
static void __playlist_add(GtkTreeIter *parent, const gchar *name,
|
static void __playlist_add(GtkTreeIter *parent, const gchar *name,
|
||||||
const gchar *image)
|
const gchar *image)
|
||||||
{
|
{
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
gtk_tree_store_insert(p_store, &iter, parent, -1);
|
gtk_tree_store_insert(p_store, &iter, parent, -1);
|
||||||
__playlist_set(&iter, name, image);
|
__playlist_set(&iter, name, image);
|
||||||
|
__playlist_set_size(&iter, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gchar *__playlist_name(GtkTreeIter *iter)
|
||||||
|
{
|
||||||
|
GtkTreeModel *model = GTK_TREE_MODEL(p_store);
|
||||||
|
gchar **split, *name;
|
||||||
|
|
||||||
|
gtk_tree_model_get(model, iter, P_SB_NAME, &name, -1);
|
||||||
|
split = g_strsplit(name, "\n", 2);
|
||||||
|
name = g_strdup(split[0]);
|
||||||
|
|
||||||
|
g_strfreev(split);
|
||||||
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
void __playlist_selection_changed(GtkTreeSelection *selection, gpointer data)
|
void __playlist_selection_changed(GtkTreeSelection *selection, gpointer data)
|
||||||
|
@ -37,7 +62,9 @@ void __playlist_selection_changed(GtkTreeSelection *selection, gpointer data)
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
|
|
||||||
if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
|
if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
|
||||||
gtk_tree_model_get(model, &iter, P_SB_NAME, &p_name, -1);
|
if (p_name)
|
||||||
|
g_free(p_name);
|
||||||
|
p_name = __playlist_name(&iter);
|
||||||
|
|
||||||
gtk_stack_set_visible_child_name(stack, "queues");
|
gtk_stack_set_visible_child_name(stack, "queues");
|
||||||
gui_sidebar_selected(SB_PLAYLIST,
|
gui_sidebar_selected(SB_PLAYLIST,
|
||||||
|
@ -45,11 +72,42 @@ void __playlist_selection_changed(GtkTreeSelection *selection, gpointer data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __playlist_update_sizes()
|
||||||
|
{
|
||||||
|
GtkTreeModel *model = GTK_TREE_MODEL(p_store);
|
||||||
|
GtkTreeIter parent, iter;
|
||||||
|
gchar *name;
|
||||||
|
|
||||||
|
if (!gtk_tree_model_get_iter_first(model, &parent))
|
||||||
|
return;
|
||||||
|
gtk_tree_model_iter_next(model, &parent);
|
||||||
|
if (!gtk_tree_model_iter_children(model, &iter, &parent))
|
||||||
|
return;
|
||||||
|
|
||||||
|
do {
|
||||||
|
name = __playlist_name(&iter);
|
||||||
|
__playlist_set_size(&iter, name);
|
||||||
|
g_free(name);
|
||||||
|
} while (gtk_tree_model_iter_next(model, &iter));
|
||||||
|
}
|
||||||
|
|
||||||
static void *__playlist_init(struct queue *queue)
|
static void *__playlist_init(struct queue *queue)
|
||||||
{
|
{
|
||||||
return gui_queue_alloc(queue, "Playlist", 0);
|
return gui_queue_alloc(queue, "Playlist", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __playlist_added(struct queue *queue, unsigned int row)
|
||||||
|
{
|
||||||
|
gui_queue_added(queue, row);
|
||||||
|
__playlist_update_sizes();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __playlist_removed(struct queue *queue, unsigned int row)
|
||||||
|
{
|
||||||
|
gui_queue_removed(queue, row);
|
||||||
|
__playlist_update_sizes();
|
||||||
|
}
|
||||||
|
|
||||||
static bool __playlist_erase(struct queue *queue, struct track *track)
|
static bool __playlist_erase(struct queue *queue, struct track *track)
|
||||||
{
|
{
|
||||||
/* collection_unban() and playlist_remove() handle queue changes */
|
/* collection_unban() and playlist_remove() handle queue changes */
|
||||||
|
@ -74,7 +132,7 @@ void gui_playlist_init()
|
||||||
|
|
||||||
/* Add playlists. */
|
/* Add playlists. */
|
||||||
__playlist_add(&parent, "Favorites", "emblem-favorite");
|
__playlist_add(&parent, "Favorites", "emblem-favorite");
|
||||||
__playlist_add(&parent, "Hidden", "face-sad");
|
__playlist_add(&parent, "Hidden", "window-close");
|
||||||
__playlist_add(&parent, "Most Played", "go-up");
|
__playlist_add(&parent, "Most Played", "go-up");
|
||||||
__playlist_add(&parent, "Least Played", "go-down");
|
__playlist_add(&parent, "Least Played", "go-down");
|
||||||
__playlist_add(&parent, "Unplayed", "audio-x-generic");
|
__playlist_add(&parent, "Unplayed", "audio-x-generic");
|
||||||
|
@ -96,9 +154,9 @@ gchar *gui_playlist_cur()
|
||||||
struct queue_ops playlist_ops = {
|
struct queue_ops playlist_ops = {
|
||||||
.qop_init = __playlist_init,
|
.qop_init = __playlist_init,
|
||||||
.qop_deinit = gui_queue_free,
|
.qop_deinit = gui_queue_free,
|
||||||
.qop_added = gui_queue_added,
|
.qop_added = __playlist_added,
|
||||||
.qop_erase = __playlist_erase,
|
.qop_erase = __playlist_erase,
|
||||||
.qop_removed = gui_queue_removed,
|
.qop_removed = __playlist_removed,
|
||||||
.qop_cleared = gui_queue_cleared,
|
.qop_cleared = gui_queue_cleared,
|
||||||
.qop_updated = gui_queue_updated,
|
.qop_updated = gui_queue_updated,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue