⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 music_browser.c

📁 Aqualung is an advanced music player primarily targeted for the GNU/Linux operating system, but als
💻 C
📖 第 1 页 / 共 5 页
字号:
        return ret;}voiduse_rva_check_button_cb(GtkWidget * widget, gpointer data) {	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {		gtk_widget_set_sensitive((GtkWidget *)data, TRUE);    	} else {		gtk_widget_set_sensitive((GtkWidget *)data, FALSE);	}}intedit_track_dialog(char * name, char * sort_name, char * file, char * comment,		  float duration, float volume, float * rva, float * use_rva) {	GtkWidget * dialog;	GtkWidget * table;	GtkWidget * hbox;	GtkWidget * name_label;	GtkWidget * sort_name_label;	GtkWidget * hbox2;	GtkWidget * file_entry;	GtkWidget * file_label;	GtkWidget * browse_button;	GtkWidget * viewport;        GtkWidget * scrolled_window;	GtkWidget * comment_label;	GtkWidget * comment_view;        GtkTextBuffer * buffer;	GtkTextIter iter_start;	GtkTextIter iter_end;	GtkWidget * table2;	GtkWidget * duration_label;	GtkWidget * duration_hbox;	GtkWidget * duration_entry;	GtkWidget * volume_label;	GtkWidget * volume_hbox;	GtkWidget * volume_entry;	GtkWidget * check_button;	GtkObject * adj_manual_rva;	GtkWidget * spin_button;	char str[MAXLEN];	char * utf8;        int ret;        dialog = gtk_dialog_new_with_buttons(_("Edit Track"),					     GTK_WINDOW(browser_window),					     GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,					     GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,					     GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,					     NULL);        gtk_widget_set_size_request(GTK_WIDGET(dialog), 400, 400);	gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);        gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_REJECT);	table = gtk_table_new(3, 2, FALSE);        gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table, FALSE, TRUE, 2);	name_label = gtk_label_new(_("Visible name:"));        hbox = gtk_hbox_new(FALSE, 0);        gtk_box_pack_start(GTK_BOX(hbox), name_label, FALSE, FALSE, 0);	gtk_table_attach(GTK_TABLE(table), hbox, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 5, 5);        name_entry = gtk_entry_new();        gtk_entry_set_max_length(GTK_ENTRY(name_entry), MAXLEN - 1);        gtk_entry_set_text(GTK_ENTRY(name_entry), name);	gtk_table_attach(GTK_TABLE(table), name_entry, 1, 2, 0, 1,			 GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 5);	sort_name_label = gtk_label_new(_("Name to sort by:"));        hbox = gtk_hbox_new(FALSE, 0);        gtk_box_pack_start(GTK_BOX(hbox), sort_name_label, FALSE, FALSE, 0);	gtk_table_attach(GTK_TABLE(table), hbox, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 5, 5);        sort_name_entry = gtk_entry_new();        gtk_entry_set_max_length(GTK_ENTRY(sort_name_entry), MAXLEN - 1);        gtk_entry_set_text(GTK_ENTRY(sort_name_entry), sort_name);	gtk_table_attach(GTK_TABLE(table), sort_name_entry, 1, 2, 1, 2,			 GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 5);	file_label = gtk_label_new(_("Filename:"));        hbox = gtk_hbox_new(FALSE, 0);        gtk_box_pack_start(GTK_BOX(hbox), file_label, FALSE, FALSE, 0);	gtk_table_attach(GTK_TABLE(table), hbox, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 5, 5);	hbox2 = gtk_hbox_new(FALSE, 0);	gtk_table_attach(GTK_TABLE(table), hbox2, 1, 2, 2, 3,			 GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 5);        file_entry = gtk_entry_new();        gtk_entry_set_max_length(GTK_ENTRY(file_entry), MAXLEN - 1);	utf8 = g_locale_to_utf8(file, -1, NULL, NULL, NULL);        gtk_entry_set_text(GTK_ENTRY(file_entry), utf8);	g_free(utf8);        gtk_box_pack_start(GTK_BOX(hbox2), file_entry, TRUE, TRUE, 0);	browse_button = gui_stock_label_button(_("_Browse..."), GTK_STOCK_OPEN);        gtk_box_pack_start(GTK_BOX(hbox2), browse_button, FALSE, TRUE, 2);        g_signal_connect(G_OBJECT(browse_button), "clicked",			 G_CALLBACK(browse_button_track_clicked), (gpointer *)file_entry);		comment_label = gtk_label_new(_("Comments:"));        hbox = gtk_hbox_new(FALSE, 0);        gtk_box_pack_start(GTK_BOX(hbox), comment_label, FALSE, FALSE, 5);        gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, FALSE, TRUE, 2);	viewport = gtk_viewport_new(NULL, NULL);        gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), viewport, TRUE, TRUE, 2);        scrolled_window = gtk_scrolled_window_new(NULL, NULL);        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window),                                       GTK_POLICY_AUTOMATIC,                                       GTK_POLICY_AUTOMATIC);        gtk_container_add(GTK_CONTAINER(viewport), scrolled_window);        comment_view = gtk_text_view_new();	gtk_text_view_set_left_margin(GTK_TEXT_VIEW(comment_view), 3);	gtk_text_view_set_right_margin(GTK_TEXT_VIEW(comment_view), 3);        gtk_text_view_set_editable(GTK_TEXT_VIEW(comment_view), TRUE);	buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(comment_view));        gtk_text_buffer_set_text(GTK_TEXT_BUFFER(buffer), comment, -1);        gtk_text_view_set_buffer(GTK_TEXT_VIEW(comment_view), buffer);        gtk_container_add(GTK_CONTAINER(scrolled_window), comment_view);        table = gtk_table_new(3, 2, FALSE);        gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table, FALSE, FALSE, 4);	duration_label = gtk_label_new(_("Duration:"));        duration_hbox = gtk_hbox_new(FALSE, 3);        gtk_box_pack_start(GTK_BOX(duration_hbox), duration_label, FALSE, FALSE, 0);        gtk_table_attach(GTK_TABLE(table), duration_hbox, 0, 1, 0, 1,                         GTK_FILL, GTK_EXPAND | GTK_FILL, 5, 3);        duration_entry = gtk_entry_new();        gtk_entry_set_max_length(GTK_ENTRY(duration_entry), MAXLEN - 1);	time2time(duration, str);        gtk_entry_set_text(GTK_ENTRY(duration_entry), str);        gtk_editable_set_editable(GTK_EDITABLE(duration_entry), FALSE);        gtk_table_attach(GTK_TABLE(table), duration_entry, 1, 2, 0, 1,                         GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 3);	volume_label = gtk_label_new(_("Volume level:"));        volume_hbox = gtk_hbox_new(FALSE, 3);        gtk_box_pack_start(GTK_BOX(volume_hbox), volume_label, FALSE, FALSE, 0);        gtk_table_attach(GTK_TABLE(table), volume_hbox, 0, 1, 1, 2,                         GTK_FILL, GTK_EXPAND | GTK_FILL, 5, 3);        volume_entry = gtk_entry_new();        gtk_entry_set_max_length(GTK_ENTRY(volume_entry), MAXLEN - 1);	if (volume <= 0.1f) {		snprintf(str, MAXLEN-1, "%.1f dBFS", volume);	} else {		snprintf(str, MAXLEN-1, _("Unmeasured"));	}        gtk_entry_set_text(GTK_ENTRY(volume_entry), str);        gtk_editable_set_editable(GTK_EDITABLE(volume_entry), FALSE);        gtk_table_attach(GTK_TABLE(table), volume_entry, 1, 2, 1, 2,                         GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 3);        table2 = gtk_table_new(1, 2, FALSE);        gtk_table_attach(GTK_TABLE(table), table2, 0, 2, 2, 3,                         GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);	check_button = gtk_check_button_new_with_label(_("Use manual RVA value [dB]"));	gtk_widget_set_name(check_button, "check_on_window");        gtk_table_attach(GTK_TABLE(table2), check_button, 0, 1, 0, 1,                         GTK_FILL, GTK_FILL, 5, 3);	adj_manual_rva = gtk_adjustment_new(*rva, -70.0f, 20.0f, 0.1f, 1.0f, 0.0f);	spin_button = gtk_spin_button_new(GTK_ADJUSTMENT(adj_manual_rva), 0.3, 1);	gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin_button), TRUE);	gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(spin_button), FALSE);        gtk_table_attach(GTK_TABLE(table2), spin_button, 1, 2, 0, 1,                         GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 3);	g_signal_connect(G_OBJECT(check_button), "toggled", G_CALLBACK(use_rva_check_button_cb),			 (gpointer)spin_button);	if (*use_rva >= 0.0f) {		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button), TRUE);	} else {		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button), FALSE);		gtk_widget_set_sensitive(spin_button, FALSE);	}	gtk_widget_grab_focus(name_entry);	gtk_widget_show_all(dialog); display:	name[0] = '\0';	sort_name[0] = '\0';	file[0] = '\0';	comment[0] = '\0';        if (aqualung_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {		char * pfile = g_locale_from_utf8(gtk_entry_get_text(GTK_ENTRY(file_entry)), -1, NULL, NULL, NULL);		if (pfile == NULL) {			gtk_widget_grab_focus(file_entry);			goto display;		}                strcpy(name, gtk_entry_get_text(GTK_ENTRY(name_entry)));                strcpy(sort_name, gtk_entry_get_text(GTK_ENTRY(sort_name_entry)));                strcpy(file, pfile);		g_free(pfile);		buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(comment_view));		gtk_text_buffer_get_iter_at_offset(GTK_TEXT_BUFFER(buffer), &iter_start, 0);		gtk_text_buffer_get_iter_at_offset(GTK_TEXT_BUFFER(buffer), &iter_end, -1);		strcpy(comment, gtk_text_buffer_get_text(GTK_TEXT_BUFFER(buffer),							 &iter_start, &iter_end, TRUE));		if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_button))) {			*use_rva = 1.0f;			*rva = gtk_adjustment_get_value(GTK_ADJUSTMENT(adj_manual_rva));		} else {			*use_rva = -1.0f;			*rva = gtk_adjustment_get_value(GTK_ADJUSTMENT(adj_manual_rva));		}		if ((name[0] == '\0') || (file[0] == '\0')) {			goto display;		}		ret = 1;        } else {                name[0] = '\0';                sort_name[0] = '\0';                file[0] = '\0';                comment[0] = '\0';                ret = 0;        }        gtk_widget_destroy(dialog);        return ret;}intconfirm_dialog(char * title, char * text, GtkResponseType resp) {        int ret;        dialog = gtk_message_dialog_new(GTK_WINDOW(browser_window),                                        GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,                                        GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, text);	gtk_window_set_title(GTK_WINDOW(dialog), title);        gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);        gtk_dialog_set_default_response(GTK_DIALOG(dialog), resp);        gtk_container_set_border_width(GTK_CONTAINER(dialog), 5);        if (aqualung_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_YES) {                ret = 1;        } else {                ret = 0;        }        gtk_widget_destroy(dialog);        return ret;}intis_store_path_readonly(GtkTreePath * p) {	GtkTreeIter iter;        GtkTreePath * path;        float state;	path = gtk_tree_path_copy(p);        while (gtk_tree_path_get_depth(path) > 1) {                gtk_tree_path_up(path);        }        gtk_tree_model_get_iter(GTK_TREE_MODEL(music_store), &iter, path);	gtk_tree_model_get(GTK_TREE_MODEL(music_store), &iter, 7, &state, -1);	gtk_tree_path_free(path);        return state < 0;}intis_store_iter_readonly(GtkTreeIter * i) {        return is_store_path_readonly(gtk_tree_model_get_path(GTK_TREE_MODEL(music_store), i));}voidset_popup_sensitivity(GtkTreePath * path) {	gboolean val = (is_store_path_readonly(path)) ? FALSE : TRUE;	gboolean val2 = (vol_window == NULL) ? val : FALSE;#if defined(HAVE_TAGLIB) && defined(HAVE_METAEDIT)	gboolean val3 = (batch_tag_root == NULL) ? TRUE : FALSE;	gtk_widget_set_sensitive(store__tag, val3);	gtk_widget_set_sensitive(artist__tag, val3);	gtk_widget_set_sensitive(record__tag, val3);	gtk_widget_set_sensitive(track__tag, val3);#endif /* HAVE_TAGLIB && HAVE_METAEDIT */	gtk_widget_set_sensitive(store__build, val);	gtk_widget_set_sensitive(store__edit, val);	gtk_widget_set_sensitive(store__save, val);	gtk_widget_set_sensitive(store__addart, val);	gtk_widget_set_sensitive(store__volume, val2);	gtk_widget_set_sensitive(artist__add, val);	gtk_widget_set_sensitive(artist__build, val);	gtk_widget_set_sensitive(artist__edit, val);	gtk_widget_set_sensitive(artist__remove, val);	gtk_widget_set_sensitive(artist__addrec, val);	gtk_widget_set_sensitive(artist__volume, val2);	gtk_widget_set_sensitive(record__add, val);	gtk_widget_set_sensitive(record__edit, val);	gtk_widget_set_sensitive(record__remove, val);	gtk_widget_set_sensitive(record__addtrk, val);#ifdef HAVE_CDDB	gtk_widget_set_sensitive(record__cddb, val);	gtk_widget_set_sensitive(record__cddb_submit, TRUE);#endif /* HAVE_CDDB */	gtk_widget_set_sensitive(record__volume, val2);	gtk_widget_set_sensitive(track__add, val);	gtk_widget_set_sensitive(track__edit, val);	gtk_widget_set_sensitive(track__remove, val);	gtk_widget_set_sensitive(track__volume, val2);	if (#ifdef HAVE_CDDB	    cddb_thread_state != CDDB_THREAD_FREE ||#endif /* HAVE_CDDB */	    build_thread_state != BUILD_THREAD_FREE) {		gtk_widget_set_sensitive(store__build, FALSE);		gtk_widget_set_sensitive(artist__build, FALSE);#ifdef HAVE_CDDB		gtk_widget_set_sensitive(record__cddb, FALSE);		gtk_widget_set_sensitive(record__cddb_submit, FALSE);#endif /* HAVE_CDDB */	}}gbooleanmusic_tree_event_cb(GtkWidget * widget, GdkEvent * event) {	GtkTreePath * path;	GtkTreeViewColumn * column;	if (event->type == GDK_BUTTON_PRESS) {		GdkEventButton * bevent = (GdkEventButton *) event;		if (bevent->button == 3) {			if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(music_tree), bevent->x, bevent->y,							  &path, &column, NULL, NULL)) {				set_popup_sensitivity(path);								gtk_tree_view_set_cursor(GTK_TREE_VIEW(music_tree), path, NULL, FALSE);				switch (gtk_tree_path_get_depth(path)) {				case 1:				

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -