static int create_playlist (void) { int list = aud_playlist_get_blank (); aud_playlist_set_title (list, _("Library")); aud_playlist_set_active (list); playlist_id = aud_playlist_get_unique_id (list); return list; }
void ui_playlist_notebook_create_tab(gint playlist) { GtkWidget *scrollwin, *treeview; GtkWidget *label, *entry, *ebox, *hbox; GtkAdjustment *vscroll; gint position = aud_playlist_get_position (playlist); scrollwin = gtk_scrolled_window_new(NULL, NULL); vscroll = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(scrollwin)); treeview = ui_playlist_widget_new(playlist); g_object_set_data(G_OBJECT(scrollwin), "treeview", treeview); gtk_container_add(GTK_CONTAINER(scrollwin), treeview); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_widget_show_all(scrollwin); ebox = gtk_event_box_new(); gtk_event_box_set_visible_window ((GtkEventBox *) ebox, FALSE); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); label = gtk_label_new (""); set_tab_label (playlist, (GtkLabel *) label); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0); gtk_container_add(GTK_CONTAINER(ebox), hbox); gtk_widget_show_all(ebox); gtk_widget_hide(entry); gtk_box_pack_end ((GtkBox *) hbox, make_close_button (playlist), FALSE, FALSE, 0); g_object_set_data(G_OBJECT(ebox), "label", label); g_object_set_data(G_OBJECT(ebox), "entry", entry); g_object_set_data(G_OBJECT(ebox), "page", scrollwin); gtk_notebook_insert_page (UI_PLAYLIST_NOTEBOOK, scrollwin, ebox, playlist); gtk_notebook_set_tab_reorderable(UI_PLAYLIST_NOTEBOOK, scrollwin, TRUE); g_object_set_data ((GObject *) treeview, "playlist-id", GINT_TO_POINTER (aud_playlist_get_unique_id (playlist))); if (position >= 0) { aud_playlist_select_all (playlist, FALSE); aud_playlist_entry_set_selected (playlist, position, TRUE); audgui_list_set_highlight (treeview, position); audgui_list_set_focus (treeview, position); } g_signal_connect(ebox, "button-press-event", G_CALLBACK(tab_button_press_cb), NULL); g_signal_connect(ebox, "key-press-event", G_CALLBACK(tab_key_press_cb), NULL); g_signal_connect(entry, "activate", G_CALLBACK(tab_title_save), ebox); g_signal_connect_swapped (vscroll, "value-changed", G_CALLBACK(ui_playlist_widget_scroll), treeview); }
void playlist_set_focus (gint list, gint row) { g_queue_push_tail (& follow_queue, GINT_TO_POINTER (aud_playlist_get_unique_id (list))); g_queue_push_tail (& follow_queue, GINT_TO_POINTER (row)); if (! aud_playlist_update_pending ()) do_follow (); }
static void find_playlist (void) { playlist_id = -1; for (int p = 0; playlist_id < 0 && p < aud_playlist_count (); p ++) { char * title = aud_playlist_get_title (p); if (! strcmp (title, _("Library"))) playlist_id = aud_playlist_get_unique_id (p); str_unref (title); } }
EXPORT void audgui_import_playlist (void) { int list = aud_playlist_get_active (); int id = aud_playlist_get_unique_id (list); char * filename = select_file (FALSE, NULL); if (! filename) return; if ((list = aud_playlist_by_unique_id (id)) < 0) return; aud_playlist_entry_delete (list, 0, aud_playlist_entry_count (list)); aud_playlist_entry_insert (list, 0, filename, NULL, FALSE); aud_playlist_set_filename (list, filename); g_free (filename); }
EXPORT void audgui_export_playlist (void) { int list = aud_playlist_get_active (); int id = aud_playlist_get_unique_id (list); char * def = aud_playlist_get_filename (list); char * filename = select_file (TRUE, def); str_unref (def); if (! filename || (vfs_file_test (filename, G_FILE_TEST_EXISTS) && ! confirm_overwrite (filename))) return; if ((list = aud_playlist_by_unique_id (id)) < 0) return; aud_playlist_save (list, filename); g_free (filename); }
static GtkWidget * start_job (bool_t save) { int list = aud_playlist_get_active (); char * filename = aud_playlist_get_filename (list); char * folder = aud_get_str ("audgui", "playlist_path"); ImportExportJob * job = g_slice_new0 (ImportExportJob); job->save = save; job->list_id = aud_playlist_get_unique_id (list); create_selector (job, filename, folder[0] ? folder : NULL); str_unref (filename); str_unref (folder); return job->selector; }
void ui_playlist_notebook_populate(void) { gint playlists = aud_playlist_count(); gint count; for (count = 0; count < playlists; count++) ui_playlist_notebook_create_tab(count); gtk_notebook_set_current_page (UI_PLAYLIST_NOTEBOOK, aud_playlist_get_active ()); highlighted = aud_playlist_get_unique_id (aud_playlist_get_playing ()); if (! switch_handler) switch_handler = g_signal_connect (notebook, "switch-page", (GCallback) tab_changed, NULL); if (! reorder_handler) reorder_handler = g_signal_connect (notebook, "page-reordered", (GCallback) tab_reordered, NULL); gtk_widget_grab_focus (playlist_get_treeview (aud_playlist_get_active ())); }
static GtkWidget * make_close_button (gint list) { GtkWidget * button = gtk_button_new (); gtk_button_set_relief ((GtkButton *) button, GTK_RELIEF_NONE); gtk_button_set_focus_on_click ((GtkButton *) button, FALSE); gtk_widget_set_name (button, "gtkui-tab-close-button"); gtk_widget_set_tooltip_text (button, _("Close")); g_signal_connect (button, "clicked", (GCallback) close_button_cb, GINT_TO_POINTER (aud_playlist_get_unique_id (list))); GtkCssProvider * provider = gtk_css_provider_new (); gtk_css_provider_load_from_data (provider, "#gtkui-tab-close-button {" " -GtkButton-default-border: 0;" " -GtkButton-default-outside-border: 0;" " -GtkButton-inner-border: 0;" " -GtkWidget-focus-padding: 0;" " -GtkWidget-focus-line-width: 0;" " margin: 0;" " padding: 0; }", -1, NULL); gtk_style_context_add_provider (gtk_widget_get_style_context (button), GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); g_object_unref (provider); GtkWidget * icon = gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU); gtk_container_add ((GtkContainer *) button, icon); GtkWidget * align = gtk_alignment_new (1.0, 0.5, 0.0, 0.0); gtk_container_add ((GtkContainer *) align, button); gtk_widget_show_all (align); return align; }
void popup_menu_tab (guint button, guint32 time, int playlist) { menu_tab_playlist_id = aud_playlist_get_unique_id (playlist); gtk_menu_popup ((GtkMenu *) menu_tab, NULL, NULL, NULL, NULL, button, time); }
EXPORT void audgui_confirm_playlist_delete (int playlist) { GtkWidget * window, * vbox, * hbox, * label, * button; char * message; if (aud_get_bool ("audgui", "no_confirm_playlist_delete")) { aud_playlist_delete (playlist); if (playlist > 0) aud_playlist_set_active (playlist - 1); return; } window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_type_hint ((GtkWindow *) window, GDK_WINDOW_TYPE_HINT_DIALOG); gtk_window_set_title ((GtkWindow *) window, _("Close Playlist")); gtk_window_set_resizable ((GtkWindow *) window, FALSE); gtk_container_set_border_width ((GtkContainer *) window, 6); audgui_destroy_on_escape (window); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_container_add ((GtkContainer *) window, vbox); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_start ((GtkBox *) vbox, hbox, FALSE, FALSE, 0); gtk_box_pack_start ((GtkBox *) hbox, gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG), FALSE, FALSE, 0); char * title = aud_playlist_get_title (playlist); message = g_strdup_printf (_("Are you sure you want to close %s? If you " "do, any changes made since the playlist was exported will be lost."), title); str_unref (title); label = gtk_label_new (message); g_free (message); gtk_label_set_line_wrap ((GtkLabel *) label, TRUE); gtk_widget_set_size_request (label, 320, -1); gtk_box_pack_start ((GtkBox *) hbox, label, TRUE, FALSE, 0); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_start ((GtkBox *) vbox, hbox, FALSE, FALSE, 0); button = gtk_check_button_new_with_mnemonic (_("_Don't show this message again")); gtk_box_pack_start ((GtkBox *) hbox, button, FALSE, FALSE, 0); g_signal_connect (button, "toggled", (GCallback) no_confirm_cb, NULL); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_start ((GtkBox *) vbox, hbox, FALSE, FALSE, 0); button = gtk_button_new_from_stock (GTK_STOCK_NO); gtk_box_pack_end ((GtkBox *) hbox, button, FALSE, FALSE, 0); g_signal_connect_swapped (button, "clicked", (GCallback) gtk_widget_destroy, window); button = gtk_button_new_from_stock (GTK_STOCK_YES); gtk_box_pack_end ((GtkBox *) hbox, button, FALSE, FALSE, 0); gtk_widget_set_can_default (button, TRUE); gtk_widget_grab_default (button); gtk_widget_grab_focus (button); g_signal_connect ((GObject *) button, "clicked", (GCallback) confirm_delete_cb, GINT_TO_POINTER (aud_playlist_get_unique_id (playlist))); g_signal_connect_swapped ((GObject *) button, "clicked", (GCallback) gtk_widget_destroy, window); gtk_widget_show_all (window); }
static void add_remove_pages (void) { gint lists = aud_playlist_count (); gint pages = gtk_notebook_get_n_pages ((GtkNotebook *) notebook); /* scan through existing treeviews */ for (gint i = 0; i < pages; ) { GtkWidget * page = gtk_notebook_get_nth_page ((GtkNotebook *) notebook, i); GtkWidget * tree = g_object_get_data ((GObject *) page, "treeview"); gint tree_id = GPOINTER_TO_INT (g_object_get_data ((GObject *) tree, "playlist-id")); /* do we have an orphaned treeview? */ if (aud_playlist_by_unique_id (tree_id) < 0) { g_signal_handlers_block_by_func (notebook, (void *) tab_changed, NULL); gtk_notebook_remove_page ((GtkNotebook *) notebook, i); g_signal_handlers_unblock_by_func (notebook, (void *) tab_changed, NULL); pages --; continue; } /* do we have the right treeview? */ gint list_id = aud_playlist_get_unique_id (i); if (tree_id == list_id) { ui_playlist_widget_set_playlist (tree, i); i ++; continue; } /* look for the right treeview */ gint found = FALSE; for (gint j = i + 1; j < pages; j ++) { page = gtk_notebook_get_nth_page ((GtkNotebook *) notebook, j); tree = g_object_get_data ((GObject *) page, "treeview"); tree_id = GPOINTER_TO_INT (g_object_get_data ((GObject *) tree, "playlist-id")); /* found it? move it to the right place */ if (tree_id == list_id) { g_signal_handlers_block_by_func (notebook, (void *) tab_reordered, NULL); gtk_notebook_reorder_child ((GtkNotebook *) notebook, page, i); g_signal_handlers_unblock_by_func (notebook, (void *) tab_reordered, NULL); found = TRUE; break; } } /* didn't find it? create it */ if (! found) { ui_playlist_notebook_create_tab (i); pages ++; continue; } } /* create new treeviews */ while (pages < lists) { ui_playlist_notebook_create_tab (pages); pages ++; } }