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

📄 music_browser.c

📁 Aqualung is an advanced music player primarily targeted for the GNU/Linux operating system, but als
💻 C
📖 第 1 页 / 共 5 页
字号:
		gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog), TRUE);	}        deflicker();        if (strlen(selected_filename)) {		char * locale = g_locale_from_utf8(selected_filename, -1, NULL, NULL, NULL);		char tmp[MAXLEN];		tmp[0] = '\0';		if (locale == NULL) {			gtk_widget_destroy(dialog);			return 0;		}		if (locale[0] == '~') {			snprintf(tmp, MAXLEN-1, "%s%s", options.home, locale + 1);			gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), tmp);		} else if (locale[0] == '/') {			gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), locale);		} else if (locale[0] != '\0') {			snprintf(tmp, MAXLEN-1, "%s/%s", options.cwd, locale + 1);			gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), tmp);		}		g_free(locale);	} else {                gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), options.currdir);	}        gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER_ON_PARENT);        gtk_window_set_default_size(GTK_WINDOW(dialog), 580, 390);        gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);        if (aqualung_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {		char * locale;                selected_filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));		locale = g_locale_from_utf8(selected_filename, -1, NULL, NULL, NULL);		if (locale == NULL) {			gtk_widget_destroy(dialog);			return 0;		}		gtk_entry_set_text(GTK_ENTRY(data), selected_filename);                strncpy(options.currdir, locale, MAXLEN-1);		g_free(locale);        }        gtk_widget_destroy(dialog);	return 0;}intadd_store_dialog(char * name, char * file, char * comment) {	GtkWidget * dialog;	GtkWidget * table;	GtkWidget * hbox;	GtkWidget * 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;        int ret;        dialog = gtk_dialog_new_with_buttons(_("Create empty store"),					     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, 300);	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(2, 2, FALSE);        gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table, FALSE, TRUE, 2);	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, 0, 1, GTK_FILL, GTK_FILL, 5, 5);	hbox2 = gtk_hbox_new(FALSE, 0);	gtk_table_attach(GTK_TABLE(table), hbox2, 1, 2, 0, 1,			 GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 5);        file_entry = gtk_entry_new();        gtk_entry_set_max_length(GTK_ENTRY(file_entry), MAXLEN - 1);	gtk_entry_set_text(GTK_ENTRY(file_entry), "~/music_store.xml");        gtk_box_pack_start(GTK_BOX(hbox2), file_entry, TRUE, TRUE, 0);	name_label = gtk_label_new(_("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, 1, 2, GTK_FILL, GTK_FILL, 5, 5);        name_entry = gtk_entry_new();        gtk_entry_set_max_length(GTK_ENTRY(name_entry), MAXLEN - 1);	gtk_table_attach(GTK_TABLE(table), name_entry, 1, 2, 1, 2,			 GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 5);	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_store_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);	gtk_widget_grab_focus(file_entry);	gtk_widget_show_all(dialog); display:	name[0] = '\0';	file[0] = '\0';	comment[0] = '\0';        if (aqualung_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {		const 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;		}		if (pfile[0] == '~') {			snprintf(file, MAXLEN-1, "%s%s", options.home, pfile + 1);		} else if (pfile[0] == '/') {			strncpy(file, pfile, MAXLEN-1);		} else if (pfile[0] != '\0') {			snprintf(file, MAXLEN-1, "%s/%s", options.cwd, pfile);		}                strncpy(name, gtk_entry_get_text(GTK_ENTRY(name_entry)), MAXLEN-1);		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 ((name[0] == '\0') || (file[0] == '\0')) {			goto display;		}		ret = 1;        } else {                name[0] = '\0';                file[0] = '\0';                comment[0] = '\0';                ret = 0;        }        gtk_widget_destroy(dialog);        return ret;}intedit_store_dialog(char * name, char * file, char * comment) {	GtkWidget * dialog;	GtkWidget * table;	GtkWidget * hbox;	GtkWidget * name_label;	GtkWidget * file_entry;	GtkWidget * file_label;	GtkWidget * viewport;        GtkWidget * scrolled_window;	GtkWidget * comment_label;	GtkWidget * comment_view;        GtkTextBuffer * buffer;	GtkTextIter iter_start;	GtkTextIter iter_end;	char * utf8;        int ret;        dialog = gtk_dialog_new_with_buttons(_("Edit Store"),					     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), 350, 250);	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(2, 2, FALSE);        gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table, FALSE, TRUE, 2);	name_label = gtk_label_new(_("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);	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, 1, 2, GTK_FILL, GTK_FILL, 5, 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_editable_set_editable(GTK_EDITABLE(file_entry), FALSE);	gtk_table_attach(GTK_TABLE(table), file_entry, 1, 2, 1, 2,			 GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 5);	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);	gtk_widget_grab_focus(name_entry);	gtk_widget_show_all(dialog); display:	name[0] = '\0';	comment[0] = '\0';        if (aqualung_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {                strcpy(name, gtk_entry_get_text(GTK_ENTRY(name_entry)));		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 (name[0] == '\0') {			goto display;		}		ret = 1;        } else {                name[0] = '\0';                comment[0] = '\0';                ret = 0;        }        gtk_widget_destroy(dialog);        return ret;}int add_entry_key_press (GtkWidget *widget, GdkEventKey *event, gpointer data){	if (event->keyval == GDK_Return) {                gtk_entry_set_text(GTK_ENTRY(sort_name_entry), gtk_entry_get_text(GTK_ENTRY(name_entry)));	        gtk_widget_grab_focus(sort_name_entry);        }         	return FALSE;}intadd_artist_dialog(char * name, char * sort_name, char * comment) {	GtkWidget * dialog;	GtkWidget * table;	GtkWidget * hbox;	GtkWidget * name_label;	GtkWidget * sort_name_label;	GtkWidget * viewport;        GtkWidget * scrolled_window;	GtkWidget * comment_label;	GtkWidget * comment_view;        GtkTextBuffer * buffer;	GtkTextIter iter_start;	GtkTextIter iter_end;        int ret;        dialog = gtk_dialog_new_with_buttons(_("Add Artist"),					     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), 350, 250);	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(2, 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();        g_signal_connect (G_OBJECT(name_entry), "key_press_event", G_CALLBACK(add_entry_key_press), NULL);        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);	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);

⌨️ 快捷键说明

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