diff options
Diffstat (limited to 'plugins/gtkui/trkproperties.c')
-rw-r--r-- | plugins/gtkui/trkproperties.c | 59 |
1 files changed, 58 insertions, 1 deletions
diff --git a/plugins/gtkui/trkproperties.c b/plugins/gtkui/trkproperties.c index 9f196671..2d3f59f5 100644 --- a/plugins/gtkui/trkproperties.c +++ b/plugins/gtkui/trkproperties.c @@ -25,7 +25,9 @@ #include "../../deadbeef.h" #include "gtkui.h" -GtkWidget *trackproperties; +#pragma GCC optimize("O0") + +static GtkWidget *trackproperties; gboolean on_trackproperties_delete_event (GtkWidget *widget, @@ -49,6 +51,16 @@ on_trackproperties_key_press_event (GtkWidget *widget, } void +on_metadata_edited (GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer user_data) { + GtkListStore *store = GTK_LIST_STORE (user_data); + GtkTreePath *treepath = gtk_tree_path_new_from_string (path); + GtkTreeIter iter; + gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, treepath); + gtk_tree_path_free (treepath); + gtk_list_store_set (store, &iter, 1, new_text, -1); +} + +void show_track_properties_dlg (DB_playItem_t *it) { if (!trackproperties) { trackproperties = create_trackproperties (); @@ -121,6 +133,51 @@ show_track_properties_dlg (DB_playItem_t *it) { gtk_text_view_set_buffer (GTK_TEXT_VIEW (w), buffer); g_object_unref (buffer); + // full metadata + const char *types[] = { + "artist", "Artist", + "band", "Band / Album Artist", + "title", "Track Title", + "track", "Track Number", + "album", "Album", + "genre", "Genre", + "year", "Date", + "performer", "Performer", + "composer", "Composer", + "numtracks", "Total Tracks", + "disc", "Disc Number", + "comment", "Comment", + NULL + }; + + GtkTreeView *tree = GTK_TREE_VIEW (lookup_widget (widget, "metalist")); + GtkListStore *store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); + GtkCellRenderer *rend_text = gtk_cell_renderer_text_new (); + GtkCellRenderer *rend_text2 = gtk_cell_renderer_text_new (); + g_object_set (G_OBJECT (rend_text2), "editable", TRUE, NULL); + g_signal_connect ((gpointer)rend_text2, "edited", + G_CALLBACK (on_metadata_edited), + store); + GtkTreeViewColumn *col1 = gtk_tree_view_column_new_with_attributes ("Key", rend_text, "text", 0, NULL); + GtkTreeViewColumn *col2 = gtk_tree_view_column_new_with_attributes ("Value", rend_text2, "text", 1, NULL); + gtk_tree_view_append_column (tree, col1); + gtk_tree_view_append_column (tree, col2); + + deadbeef->pl_lock (); + int i = 0; + while (types[i]) { + GtkTreeIter iter; + gtk_list_store_append (store, &iter); + const char *value = deadbeef->pl_find_meta (it, types[i]); + if (!value) { + value = ""; + } + gtk_list_store_set (store, &iter, 0, types[i+1], 1, value, -1); + gtk_tree_view_set_model (tree, GTK_TREE_MODEL (store)); + i += 2; + } + deadbeef->pl_unlock (); + gtk_widget_show (widget); gtk_window_present (GTK_WINDOW (widget)); } |