From c663f287d4370d48ed343dff972f98f52c341bc9 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Thu, 7 Jan 2016 09:37:00 -0500 Subject: [PATCH] gui/sidebar: Add sizes to Collection and History entries Signed-off-by: Anna Schumaker --- gui/queue/label.cpp | 5 ++++ gui/sidebar.c | 50 +++++++++++++++++++++++++++++++++++- include/gui/sidebar.h | 5 ++++ share/ocarina/ocarina6.glade | 10 ++++---- 4 files changed, 64 insertions(+), 6 deletions(-) diff --git a/gui/queue/label.cpp b/gui/queue/label.cpp index 86de543c..732f6c4c 100644 --- a/gui/queue/label.cpp +++ b/gui/queue/label.cpp @@ -1,7 +1,10 @@ /* * Copyright 2015 (c) Anna Schumaker. */ +extern "C" { #include +#include +} #include @@ -35,6 +38,7 @@ void CollectionLabel :: set_size() { gchar *size = g_strdup_printf("%u", queue_size(_queue)); collection_size->set_text(size); + gui_sidebar_set_size(_queue); g_free(size); } @@ -51,6 +55,7 @@ void HistoryLabel :: set_size() { gchar *size = g_strdup_printf("%u", queue_size(_queue)); history_size->set_text(size); + gui_sidebar_set_size(_queue); g_free(size); } diff --git a/gui/sidebar.c b/gui/sidebar.c index 2ca2a26e..9effb23e 100644 --- a/gui/sidebar.c +++ b/gui/sidebar.c @@ -9,6 +9,9 @@ #include const gchar *SIDEBAR_SETTING = "gui.sidebar.pos"; +const gchar *COLLECTION_FMT = "Collection\n%d track%s"; +const gchar *HISTORY_FMT = "History\n%d track%s"; + static GtkListStore *sb_store; enum sidebar_columns { @@ -18,11 +21,42 @@ enum sidebar_columns { SB_QUEUE, }; -void __sidebar_set_queue(GtkTreeIter *iter, struct queue *queue) +static void __sidebar_set_size(GtkTreeIter *iter, const gchar *name, + unsigned int size) +{ + const gchar *fmt = "%s\n%d track%s"; + gchar *text; + + text = g_strdup_printf(fmt, name, size, (size == 1) ? "" : "s"); + gtk_list_store_set(sb_store, iter, SB_TEXT, text, -1); + g_free(text); +} + +static void __sidebar_set_queue(GtkTreeIter *iter, struct queue *queue) { gtk_list_store_set(sb_store, iter, SB_QUEUE, queue, -1); } +static struct queue *__sidebar_get_queue(GtkTreeIter *iter) +{ + struct queue *queue; + + gtk_tree_model_get(GTK_TREE_MODEL(sb_store), iter, SB_QUEUE, &queue, -1); + return queue; +} + +static bool __sidebar_find_queue(struct queue *queue, GtkTreeIter *iter) +{ + gtk_tree_model_get_iter_first(GTK_TREE_MODEL(sb_store), iter); + + do { + if (__sidebar_get_queue(iter) == queue) + return true; + } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(sb_store), iter)); + + return false; +} + void __sidebar_resize(GtkPaned *pane, GParamSpec *pspec, gpointer data) { gui_settings_set(SIDEBAR_SETTING, gtk_paned_get_position(pane)); @@ -89,3 +123,17 @@ void gui_sidebar_selected(enum sidebar_selection_t selected) if (selected != SB_SIDEBAR) __sidebar_deselect("o_sidebar_view"); } + +void gui_sidebar_set_size(struct queue *queue) +{ + const gchar *name = "Collection"; + GtkTreeIter iter; + + if (!__sidebar_find_queue(queue, &iter)) + return; + + if (queue == history_get_queue()) + name = "History"; + + __sidebar_set_size(&iter, name, queue_size(queue)); +} diff --git a/include/gui/sidebar.h b/include/gui/sidebar.h index 5f68180e..6be64528 100644 --- a/include/gui/sidebar.h +++ b/include/gui/sidebar.h @@ -4,6 +4,8 @@ #ifndef OCARINA_GUI_SIDEBAR_H #define OCARINA_GUI_SIDEBAR_H +#include + enum sidebar_selection_t { SB_COLLECTION, SB_PLAYLIST, @@ -20,4 +22,7 @@ gboolean gui_sidebar_on_select(GtkTreeSelection *, GtkTreeModel *, /* Called to tell the sidebar that the selection has changed. */ void gui_sidebar_selected(enum sidebar_selection_t); +/* Called to set the size of sidebar entries. */ +void gui_sidebar_set_size(struct queue *); + #endif /* OCARINA_GUI_SIDEBAR_H */ diff --git a/share/ocarina/ocarina6.glade b/share/ocarina/ocarina6.glade index 7c627793..d67f5d70 100644 --- a/share/ocarina/ocarina6.glade +++ b/share/ocarina/ocarina6.glade @@ -321,8 +321,8 @@ media-skip-backward - + False @@ -356,8 +356,8 @@ 5 - + False @@ -390,8 +390,8 @@ 5 - + False @@ -424,8 +424,8 @@ media-playback-stop - + False @@ -458,8 +458,8 @@ media-skip-forward - + False