diff --git a/gui/ocarina.cpp b/gui/ocarina.cpp index d0a7684b..73a4921b 100644 --- a/gui/ocarina.cpp +++ b/gui/ocarina.cpp @@ -11,6 +11,7 @@ extern "C" { #include #include #include +#include #include #include } diff --git a/gui/sidebar.c b/gui/sidebar.c index b0f17ebc..2eccb35b 100644 --- a/gui/sidebar.c +++ b/gui/sidebar.c @@ -89,7 +89,6 @@ bool __sidebar_keypress(GtkTreeView *treeview, GdkEventKey *event, gpointer data goto out; tempq_free(queue->gq_queue); - gtk_list_store_remove(sb_store, &iter); gtk_notebook_remove_page(notebook, page); out: @@ -184,6 +183,7 @@ void gui_sidebar_add(struct gui_queue *queue) SB_IMAGE_SZ, GTK_ICON_SIZE_BUTTON, SB_TEXT, text, SB_QUEUE, queue, -1); + __sidebar_set_size(&iter, queue->gq_text, queue_size(queue->gq_queue)); } void gui_sidebar_remove(struct gui_queue *queue) diff --git a/gui/tabs.cpp b/gui/tabs.cpp index 173a2d63..e252936b 100644 --- a/gui/tabs.cpp +++ b/gui/tabs.cpp @@ -18,50 +18,6 @@ extern "C" { static std::map queue_mapping; -static void *tempq_init(struct queue *queue) -{ - struct gui_queue *gq = gui_queue_alloc(queue, "Queued Tracks", - GQ_CAN_RANDOM | GQ_CAN_REPEAT | GQ_CAN_DISABLE); - queue->q_private = gq; - on_pq_created(queue, tempq_index(queue)); - gui_sidebar_add(gq); - return gq; -} - -static void tempq_added(struct queue *queue, unsigned int pos) -{ - Tab *tab = find_tab(queue); - if (tab) { - tab->on_track_added(pos); - tempq_save(queue, Q_ENABLED); - } - gui_queue_added(queue, pos); -} - -static bool tempq_erase(struct queue *queue, struct track *track) -{ - return true; -} - -static void tempq_removed(struct queue *queue, unsigned int pos) -{ - find_tab(queue)->on_track_removed(pos); - tempq_save(queue, Q_ENABLED); - gui_queue_removed(queue, pos); -} - -struct queue_ops tempq_ops = { - tempq_init, - gui_queue_free, - tempq_added, - tempq_erase, - tempq_removed, - gui_queue_cleared, - tempq_save, - gui_queue_updated, -}; - - /** * * Tab class basics diff --git a/gui/tempq.c b/gui/tempq.c new file mode 100644 index 00000000..6b107bd4 --- /dev/null +++ b/gui/tempq.c @@ -0,0 +1,60 @@ +/* + * Copyright 2016 (c) Anna Schumaker. + */ +#include +#include +#include + +#define TEMPQ_FLAGS (GQ_CAN_RANDOM | GQ_CAN_REPEAT | GQ_CAN_DISABLE) + +static void *__tempq_init(struct queue *queue) +{ + struct gui_queue *gq; + + gq = gui_queue_alloc(queue, "Queued Tracks", TEMPQ_FLAGS); + gui_sidebar_add(gq); + return gq; +} + +static void __tempq_deinit(struct queue *queue) +{ + gui_sidebar_remove(gui_queue(queue)); + gui_queue_free(queue); +} + +static void __tempq_added(struct queue *queue, unsigned int pos) +{ + gui_queue_added(queue, pos); + gui_sidebar_set_size(gui_queue(queue)); + tempq_save(queue, Q_ENABLED); +} + +static bool __tempq_erase(struct queue *queue, struct track *track) +{ + return true; +} + +static void __tempq_removed(struct queue *queue, unsigned int pos) +{ + gui_queue_removed(queue, pos); + gui_sidebar_set_size(gui_queue(queue)); + tempq_save(queue, Q_ENABLED); +} + +static void __tempq_cleared(struct queue *queue, unsigned int n) +{ + gui_queue_cleared(queue, n); + gui_sidebar_set_size(gui_queue(queue)); + tempq_save(queue, Q_ENABLED); +} + +struct queue_ops tempq_ops = { + .qop_init = __tempq_init, + .qop_deinit = __tempq_deinit, + .qop_added = __tempq_added, + .qop_erase = __tempq_erase, + .qop_removed = __tempq_removed, + .qop_cleared = __tempq_cleared, + .qop_save = tempq_save, + .qop_updated = gui_queue_updated, +}; diff --git a/include/gui/ocarina.h b/include/gui/ocarina.h index 23737629..5abc9e16 100644 --- a/include/gui/ocarina.h +++ b/include/gui/ocarina.h @@ -14,8 +14,6 @@ namespace gui const std::string share_file(const std::string &); } -extern struct queue_ops tempq_ops; - void on_pq_created(queue *, unsigned int); void post_init_queue_tabs(); diff --git a/include/gui/tempq.h b/include/gui/tempq.h new file mode 100644 index 00000000..6675e11d --- /dev/null +++ b/include/gui/tempq.h @@ -0,0 +1,10 @@ +/* + * Copyright 2016 (c) Anna Schumaker. + */ +#ifndef OCARINA_GUI_TEMPQ_H +#define OCARINA_GUI_TEMPQ_H + +/* Temporary queue operations passed to core_init() */ +extern struct queue_ops tempq_ops; + +#endif /* OCARINA_GUI_TEMPQ_H */