gui/view: Add "New Playlist" menu options

And pop up a dialog mox to ask the user for the name of the new
playlist.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2016-08-16 08:06:48 -04:00
parent 1b9101cf26
commit e2d4dd61fb
2 changed files with 116 additions and 49 deletions

View File

@ -8,6 +8,7 @@
#include <gui/model.h>
#include <gui/queue.h>
#include <gui/view.h>
#include <glib/gi18n.h>
#include <stdlib.h>
static const gchar *QUEUE_SETTINGS[Q_MODEL_N_COLUMNS] = {
@ -174,10 +175,16 @@ void __view_column_clicked(GtkTreeViewColumn *col, gpointer data)
g_timeout_add_seconds(3, __view_dec_sort, NULL);
}
struct view_add_data {
enum playlist_type_t vad_type;
gchar *vad_name;
};
static void __view_add_to_playlist(GtkTreeModel *model, GtkTreePath *path,
GtkTreeIter *iter, gpointer data)
{
playlist_add(PL_SYSTEM, (gchar *)data, __view_filter_get_track(path));
struct view_add_data *vad = (struct view_add_data *)data;
playlist_add(vad->vad_type, vad->vad_name, __view_filter_get_track(path));
}
static void __view_delete_selection(GtkTreeSelection *selection)
@ -194,20 +201,60 @@ static void __view_delete_selection(GtkTreeSelection *selection)
g_list_free_full(rows, (GDestroyNotify) gtk_tree_path_free);
}
static gchar *__view_get_new_playlist_name(void)
{
gchar *text = NULL;
GtkWidget *entry = gtk_entry_new();
GtkWidget *dialog = gtk_dialog_new_with_buttons("New Playlist Name?",
GTK_WINDOW(gui_builder_widget("o_window")),
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
_("_Cancel"), GTK_RESPONSE_CANCEL,
_("_OK"), GTK_RESPONSE_ACCEPT,
NULL);
GtkWidget *content = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
gtk_entry_set_activates_default(GTK_ENTRY(entry), true);
gtk_container_add(GTK_CONTAINER(content), entry);
gtk_widget_show_all(dialog);
if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
text = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
gtk_widget_destroy(dialog);
return text;
}
static void __view_process_selection(GtkTreeView *treeview, unsigned int keyval)
{
GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview);
struct view_add_data vad_data;
gchar *text = NULL;
switch (keyval) {
case GDK_KEY_f:
vad_data.vad_type = PL_SYSTEM;
vad_data.vad_name = "Favorites";
gtk_tree_selection_selected_foreach(selection,
__view_add_to_playlist,
"Favorites");
&vad_data);
break;
case GDK_KEY_p:
text = __view_get_new_playlist_name();
if (!text || !playlist_new(PL_USER, text))
break;
vad_data.vad_type = PL_USER;
vad_data.vad_name = text;
gtk_tree_selection_selected_foreach(selection,
__view_add_to_playlist,
&vad_data);
g_free(text);
break;
case GDK_KEY_q:
vad_data.vad_type = PL_SYSTEM;
vad_data.vad_name = "Queued Tracks";
gtk_tree_selection_selected_foreach(selection,
__view_add_to_playlist,
"Queued Tracks");
__view_add_to_playlist,
&vad_data);
break;
case GDK_KEY_Delete:
__view_delete_selection(selection);
@ -258,6 +305,11 @@ void __view_rc_add_hidden(GtkMenuItem *item, gpointer data)
}
void __view_rc_add_new(GtkMenuItem *item, gpointer data)
{
__view_process_selection(view_treeview, GDK_KEY_p);
}
bool __view_button_press(GtkTreeView *treeview, GdkEventButton *event,
gpointer data)
{

View File

@ -9,12 +9,6 @@
<property name="margin_right">10</property>
<property name="icon_name">media-playlist-repeat</property>
</object>
<object class="GtkImage" id="image18">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">emblem-documents</property>
<property name="icon_size">1</property>
</object>
<object class="GtkImage" id="image19">
<property name="visible">True</property>
<property name="can_focus">False</property>
@ -27,50 +21,16 @@
<property name="icon_name">emblem-favorite</property>
<property name="icon_size">1</property>
</object>
<object class="GtkMenu" id="o_menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="o_add_to_playlist">
<property name="label" translatable="yes">Add to Playlist</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">image18</property>
<property name="use_stock">False</property>
<child type="submenu">
<object class="GtkMenu" id="menu2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="o_add_to_favorites">
<property name="label" translatable="yes">Favorites</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">image20</property>
<property name="use_stock">False</property>
<signal name="activate" handler="__view_rc_add_favorites" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="o_add_to_hidden">
<property name="label" translatable="yes">Hidden</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">image19</property>
<property name="use_stock">False</property>
<signal name="activate" handler="__view_rc_add_hidden" swapped="no"/>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
<object class="GtkImage" id="image21">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">folder-new</property>
</object>
<object class="GtkImage" id="image22">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">document-new</property>
</object>
<object class="GtkMenu" id="menu1">
<property name="visible">True</property>
<property name="can_focus">False</property>
@ -84,6 +44,61 @@
<signal name="activate" handler="__collection_choose" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem">
<property name="label" translatable="yes">Playlist</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">image22</property>
<property name="use_stock">False</property>
<signal name="activate" handler="__view_rc_add_new" swapped="no"/>
</object>
</child>
</object>
<object class="GtkImage" id="image23">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">document-new</property>
</object>
<object class="GtkMenu" id="o_menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem">
<property name="label" translatable="yes">Add to New Playlist</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">image23</property>
<property name="use_stock">False</property>
<signal name="activate" handler="__view_rc_add_new" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="o_add_to_favorites">
<property name="label" translatable="yes">Add to Favorites</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">image20</property>
<property name="use_stock">False</property>
<signal name="activate" handler="__view_rc_add_favorites" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="o_add_to_hidden">
<property name="label" translatable="yes">Add to Hidden</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">image19</property>
<property name="use_stock">False</property>
<signal name="activate" handler="__view_rc_add_hidden" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
</object>
<object class="GtkImage" id="image9">
<property name="visible">True</property>