📄 music_browser.c
字号:
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 + -