gui/sidebar: Add support for removing temporary queues

Either through the delete key or when the queue runs out of tracks.

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2016-01-07 10:14:33 -05:00
parent 839f4c4aa1
commit 16b055f06b
5 changed files with 55 additions and 5 deletions

View File

@ -5,6 +5,7 @@ extern "C" {
#include <core/string.h>
#include <core/tempq.h>
#include <gui/builder.h>
#include <gui/sidebar.h>
}
#include <gui/tabs.h>
#include <gui/queue/label.h>
@ -107,6 +108,7 @@ QueueTab :: ~QueueTab()
{
queue_mapping.erase(&tab_vbox);
tab_unmap();
gui_sidebar_remove(tab_pq);
Glib :: wrap(GTK_NOTEBOOK(gui_builder_widget("o_notebook")), false)->remove_page(tab_vbox);
renumber_queues();
}

View File

@ -63,6 +63,39 @@ void __sidebar_resize(GtkPaned *pane, GParamSpec *pspec, gpointer data)
gui_settings_set(SIDEBAR_SETTING, gtk_paned_get_position(pane));
}
bool __sidebar_keypress(GtkTreeView *treeview, GdkEventKey *event, gpointer data)
{
GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview);
GtkNotebook *notebook = GTK_NOTEBOOK(gui_builder_widget("o_notebook"));
GtkTreeModel *model = GTK_TREE_MODEL(sb_store);
struct queue *queue;
unsigned int page;
GtkTreePath *path;
GtkTreeIter iter;
GList *rows;
if (event->keyval != GDK_KEY_Delete)
return false;
rows = gtk_tree_selection_get_selected_rows(selection, &model);
path = rows->data;
if (gtk_tree_model_get_iter(model, &iter, path))
queue = __sidebar_get_queue(&iter);
page = gtk_tree_path_get_indices(path)[0];
if (!queue || page >= tempq_count())
goto out;
tempq_free(queue);
gtk_list_store_remove(sb_store, &iter);
gtk_notebook_remove_page(notebook, page);
out:
g_list_free_full(rows, (GDestroyNotify)gtk_tree_path_free);
return true;
}
void __sidebar_selection_changed(GtkTreeSelection *selection, gpointer data)
{
GtkNotebook *notebook = GTK_NOTEBOOK(gui_builder_widget("o_notebook"));
@ -143,6 +176,16 @@ void gui_sidebar_add(struct queue *queue)
SB_QUEUE, queue, -1);
}
void gui_sidebar_remove(struct queue *queue)
{
GtkTreeIter iter;
if (!__sidebar_find_queue(queue, &iter))
return;
gtk_list_store_remove(sb_store, &iter);
}
void gui_sidebar_set_size(struct queue *queue)
{
const gchar *name = "Queued Tracks";

View File

@ -25,6 +25,9 @@ void gui_sidebar_selected(enum sidebar_selection_t);
/* Called to add a queue to the sidebar. */
void gui_sidebar_add(struct queue *);
/* Called to remove a queue from the sidebar. */
void gui_sidebar_remove(struct queue *);
/* Called to set the size of sidebar entries. */
void gui_sidebar_set_size(struct queue *);

View File

@ -12,6 +12,7 @@ void __audio_seek() {}
#endif
#ifdef TEST_NEED_SIDEBAR
void __sidebar_keypress() {}
void __sidebar_resize() {}
void __sidebar_selection_changed() {}
#endif /* TEST_NEED_SIDEBAR */

View File

@ -321,8 +321,8 @@
<property name="icon_name">media-skip-backward</property>
</object>
</child>
<accelerator key="n" signal="clicked" modifiers="GDK_SHIFT_MASK"/>
<accelerator key="AudioPrev" signal="clicked"/>
<accelerator key="n" signal="clicked" modifiers="GDK_SHIFT_MASK"/>
</object>
<packing>
<property name="expand">False</property>
@ -356,8 +356,8 @@
<property name="icon_size">5</property>
</object>
</child>
<accelerator key="space" signal="clicked"/>
<accelerator key="AudioPlay" signal="clicked"/>
<accelerator key="space" signal="clicked"/>
</object>
<packing>
<property name="expand">False</property>
@ -390,8 +390,8 @@
<property name="icon_size">5</property>
</object>
</child>
<accelerator key="space" signal="clicked"/>
<accelerator key="AudioPlay" signal="clicked"/>
<accelerator key="space" signal="clicked"/>
</object>
<packing>
<property name="expand">False</property>
@ -424,8 +424,8 @@
<property name="icon_name">media-playback-stop</property>
</object>
</child>
<accelerator key="AudioPlay" signal="clicked" modifiers="GDK_MOD1_MASK"/>
<accelerator key="space" signal="clicked" modifiers="GDK_MOD1_MASK"/>
<accelerator key="AudioPlay" signal="clicked" modifiers="GDK_MOD1_MASK"/>
</object>
<packing>
<property name="expand">False</property>
@ -458,8 +458,8 @@
<property name="icon_name">media-skip-forward</property>
</object>
</child>
<accelerator key="n" signal="clicked"/>
<accelerator key="AudioNext" signal="clicked"/>
<accelerator key="n" signal="clicked"/>
</object>
<packing>
<property name="expand">False</property>
@ -665,6 +665,7 @@
<property name="show_expanders">False</property>
<property name="level_indentation">10</property>
<property name="enable_tree_lines">True</property>
<signal name="key-press-event" handler="__sidebar_keypress" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection4">
<signal name="changed" handler="__sidebar_selection_changed" swapped="no"/>