void search_start (void) { ddb_listview_lock_columns (DDB_LISTVIEW (lookup_widget (searchwin, "searchlist")), 1); wingeom_restore (searchwin, "searchwin", -1, -1, 450, 150, 0); gtk_entry_set_text (GTK_ENTRY (lookup_widget (searchwin, "searchentry")), ""); gtk_widget_grab_focus (lookup_widget (searchwin, "searchentry")); gtk_widget_show (searchwin); gtk_window_present (GTK_WINDOW (searchwin)); g_idle_add (unlock_search_columns_cb, NULL); search_refresh (); main_refresh (); }
static void search_process (DdbListview *listview, ddb_playlist_t *plt) { GtkEntry *entry = GTK_ENTRY(lookup_widget(searchwin, "searchentry")); const gchar *text = gtk_entry_get_text(entry); deadbeef->plt_search_process2 (plt, text, 0); ddb_listview_col_sort_update (listview); deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, DDB_PLAYLIST_CHANGE_SEARCHRESULT, 0); int row = deadbeef->pl_get_cursor (PL_SEARCH); if (row >= deadbeef->pl_getcount (PL_SEARCH)) { deadbeef->pl_set_cursor (PL_SEARCH, deadbeef->pl_getcount (PL_SEARCH) - 1); } ddb_listview_list_setup (listview, listview->scrollpos); ddb_listview_refresh (listview, DDB_REFRESH_LIST); char title[1024] = ""; ddb_tf_context_t ctx = { ._size = sizeof (ddb_tf_context_t), .plt = deadbeef->plt_get_curr (), .iter = PL_SEARCH }; deadbeef->tf_eval (&ctx, window_title_bytecode, title, sizeof (title)); gtk_window_set_title (GTK_WINDOW (searchwin), title); } static gboolean search_start_cb (gpointer p) { GtkWidget *entry = lookup_widget (searchwin, "searchentry"); if (!playlist_visible ()) { DdbListview *listview = DDB_LISTVIEW (lookup_widget (searchwin, "searchlist")); refresh_source_id = 0; ddb_listview_clear_sort (listview); ddb_playlist_t *plt = deadbeef->plt_get_curr (); if (plt) { deadbeef->plt_search_reset (plt); deadbeef->plt_deselect_all (plt); deadbeef->plt_unref (plt); } wingeom_restore (searchwin, "searchwin", -1, -1, 450, 150, 0); gtk_widget_show (searchwin); gtk_entry_set_text (GTK_ENTRY (entry), ""); ddb_listview_refresh (listview, DDB_REFRESH_CONFIG); } gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1); gtk_widget_grab_focus (entry); gtk_window_present (GTK_WINDOW (searchwin)); return FALSE; }
void show_track_properties_dlg (int ctx) { last_ctx = ctx; if (tracks) { for (int i = 0; i < numtracks; i++) { deadbeef->pl_item_unref (tracks[i]); } free (tracks); tracks = NULL; numtracks = 0; } deadbeef->pl_lock (); ddb_playlist_t *plt = deadbeef->plt_get_curr (); if (!plt) { deadbeef->pl_unlock (); return; } int num = 0; if (ctx == DDB_ACTION_CTX_SELECTION) { num = deadbeef->plt_getselcount (plt); } else if (ctx == DDB_ACTION_CTX_PLAYLIST) { num = deadbeef->plt_get_item_count (plt, PL_MAIN); } else if (ctx == DDB_ACTION_CTX_NOWPLAYING) { num = 1; } if (num <= 0) { deadbeef->pl_unlock (); return; } tracks = malloc (sizeof (DB_playItem_t *) * num); if (!tracks) { fprintf (stderr, "gtkui: failed to alloc %d bytes to store selected tracks\n", (int)(num * sizeof (void *))); deadbeef->pl_unlock (); return; } if (ctx == DDB_ACTION_CTX_NOWPLAYING) { DB_playItem_t *it = deadbeef->streamer_get_playing_track (); if (!it) { free (tracks); tracks = NULL; deadbeef->pl_unlock (); return; } tracks[0] = it; } else { int n = 0; DB_playItem_t *it = deadbeef->pl_get_first (PL_MAIN); while (it) { if (ctx == DDB_ACTION_CTX_PLAYLIST || deadbeef->pl_is_selected (it)) { assert (n < num); deadbeef->pl_item_ref (it); tracks[n++] = it; } DB_playItem_t *next = deadbeef->pl_get_next (it, PL_MAIN); deadbeef->pl_item_unref (it); it = next; } } numtracks = num; deadbeef->pl_unlock (); GtkTreeView *tree; GtkTreeView *proptree; if (!trackproperties) { trackproperties = create_trackproperties (); gtk_window_set_transient_for (GTK_WINDOW (trackproperties), GTK_WINDOW (mainwin)); wingeom_restore (trackproperties, "trkproperties", -1, -1, 300, 400, 0); // metadata tree tree = GTK_TREE_VIEW (lookup_widget (trackproperties, "metalist")); store = gtk_list_store_new (4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT); gtk_tree_view_set_model (tree, GTK_TREE_MODEL (store)); GtkCellRenderer *rend_text = gtk_cell_renderer_text_new (); rend_text2 = GTK_CELL_RENDERER (ddb_cell_renderer_text_multiline_new ()); 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); // properties tree proptree = GTK_TREE_VIEW (lookup_widget (trackproperties, "properties")); propstore = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model (proptree, GTK_TREE_MODEL (propstore)); GtkCellRenderer *rend_propkey = gtk_cell_renderer_text_new (); GtkCellRenderer *rend_propvalue = gtk_cell_renderer_text_new (); g_object_set (G_OBJECT (rend_propvalue), "editable", TRUE, NULL); col1 = gtk_tree_view_column_new_with_attributes (_("Key"), rend_propkey, "text", 0, NULL); col2 = gtk_tree_view_column_new_with_attributes (_("Value"), rend_propvalue, "text", 1, NULL); gtk_tree_view_append_column (proptree, col1); gtk_tree_view_append_column (proptree, col2); } else { tree = GTK_TREE_VIEW (lookup_widget (trackproperties, "metalist")); store = GTK_LIST_STORE (gtk_tree_view_get_model (tree)); gtk_list_store_clear (store); proptree = GTK_TREE_VIEW (lookup_widget (trackproperties, "properties")); propstore = GTK_LIST_STORE (gtk_tree_view_get_model (proptree)); gtk_list_store_clear (propstore); } if (numtracks == 1) { deadbeef->pl_lock (); gtk_entry_set_text (GTK_ENTRY (lookup_widget (trackproperties, "filename")), deadbeef->pl_find_meta_raw (tracks[0], ":URI")); deadbeef->pl_unlock (); } else { gtk_entry_set_text (GTK_ENTRY (lookup_widget (trackproperties, "filename")), _("[Multiple values]")); } g_object_set (G_OBJECT (rend_text2), "editable", TRUE, NULL); GtkWidget *widget = trackproperties; GtkWidget *w; const char *meta; trkproperties_fill_metadata (); gtk_widget_set_sensitive (lookup_widget (widget, "write_tags"), TRUE); gtk_widget_show (widget); gtk_window_present (GTK_WINDOW (widget)); }
void show_track_properties_dlg (int ctx, ddb_playlist_t *plt) { last_ctx = ctx; deadbeef->plt_ref (plt); if (last_plt) { deadbeef->plt_unref (last_plt); } last_plt = plt; trkproperties_free_track_list (&tracks, &numtracks); trkproperties_build_track_list_for_ctx (plt, ctx, &tracks, &numtracks); GtkTreeView *tree; GtkTreeView *proptree; if (!trackproperties) { trackproperties = create_trackproperties (); gtk_window_set_transient_for (GTK_WINDOW (trackproperties), GTK_WINDOW (mainwin)); wingeom_restore (trackproperties, "trkproperties", -1, -1, 300, 400, 0); // metadata tree tree = GTK_TREE_VIEW (lookup_widget (trackproperties, "metalist")); store = gtk_list_store_new (5, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING); gtk_tree_view_set_model (tree, GTK_TREE_MODEL (store)); GtkCellRenderer *rend_text = gtk_cell_renderer_text_new (); rend_text2 = GTK_CELL_RENDERER (ddb_cell_renderer_text_multiline_new ()); 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_column_set_cell_data_func (col2, rend_text2, meta_value_transform_func, NULL, NULL); gtk_tree_view_append_column (tree, col1); gtk_tree_view_append_column (tree, col2); // properties tree proptree = GTK_TREE_VIEW (lookup_widget (trackproperties, "properties")); propstore = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model (proptree, GTK_TREE_MODEL (propstore)); GtkCellRenderer *rend_propkey = gtk_cell_renderer_text_new (); GtkCellRenderer *rend_propvalue = gtk_cell_renderer_text_new (); g_object_set (G_OBJECT (rend_propvalue), "editable", TRUE, NULL); col1 = gtk_tree_view_column_new_with_attributes (_("Key"), rend_propkey, "text", 0, NULL); col2 = gtk_tree_view_column_new_with_attributes (_("Value"), rend_propvalue, "text", 1, NULL); gtk_tree_view_append_column (proptree, col1); gtk_tree_view_append_column (proptree, col2); } else { tree = GTK_TREE_VIEW (lookup_widget (trackproperties, "metalist")); store = GTK_LIST_STORE (gtk_tree_view_get_model (tree)); gtk_list_store_clear (store); proptree = GTK_TREE_VIEW (lookup_widget (trackproperties, "properties")); propstore = GTK_LIST_STORE (gtk_tree_view_get_model (proptree)); gtk_list_store_clear (propstore); } if (numtracks == 1) { deadbeef->pl_lock (); gtk_entry_set_text (GTK_ENTRY (lookup_widget (trackproperties, "filename")), deadbeef->pl_find_meta_raw (tracks[0], ":URI")); deadbeef->pl_unlock (); } else { gtk_entry_set_text (GTK_ENTRY (lookup_widget (trackproperties, "filename")), _("[Multiple values]")); } g_object_set (G_OBJECT (rend_text2), "editable", TRUE, NULL); GtkWidget *widget = trackproperties; GtkWidget *w; const char *meta; trkproperties_fill_metadata (); gtk_widget_set_sensitive (lookup_widget (widget, "write_tags"), TRUE); gtk_widget_show (widget); gtk_window_present (GTK_WINDOW (widget)); }