📄 music_browser.c
字号:
while (gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter)) { n++; } } if ((n) && (name[0] != '\0')) { gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter); if (!(*strings = calloc(n + 1, sizeof(char *)))) { fprintf(stderr, "add_record_dialog(): calloc error\n"); exit(1); } for (i = 0; i < n; i++) { char * locale; gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &str, -1); gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); locale = g_locale_from_utf8(str, -1, NULL, NULL, NULL); if (!((*strings)[i] = calloc(strlen(locale)+1, sizeof(char)))) { fprintf(stderr, "add_record_dialog(): calloc error\n"); exit(1); } strcpy((*strings)[i], locale); g_free(str); g_free(locale); } (*strings)[i] = NULL; } 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'; sort_name[0] = '\0'; comment[0] = '\0'; ret = 0; } gtk_widget_destroy(dialog); return ret;}intedit_record_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(_("Edit Record"), 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); 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'; sort_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))); strcpy(sort_name, gtk_entry_get_text(GTK_ENTRY(sort_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'; sort_name[0] = '\0'; comment[0] = '\0'; ret = 0; } gtk_widget_destroy(dialog); return ret;}intbrowse_button_track_clicked(GtkWidget * widget, gpointer * data) { GtkWidget * dialog; const gchar * selected_filename = gtk_entry_get_text(GTK_ENTRY(data)); dialog = gtk_file_chooser_dialog_new(_("Please select the audio file for this track."), GTK_WINDOW(browser_window), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL); 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); assign_audio_fc_filters(GTK_FILE_CHOOSER(dialog)); if (options.show_hidden) { gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog), TRUE); } if (aqualung_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { char * utf8; selected_filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); utf8 = g_locale_to_utf8(selected_filename, -1, NULL, NULL, NULL); if (utf8 == NULL) { gtk_widget_destroy(dialog); return 0; } gtk_entry_set_text(GTK_ENTRY(data), utf8); strncpy(options.currdir, selected_filename, MAXLEN-1); g_free(utf8); } gtk_widget_destroy(dialog); return 0;}intadd_track_dialog(char * name, char * sort_name, char * file, char * comment) { 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; int ret; dialog = gtk_dialog_new_with_buttons(_("Add 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, 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(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); gtk_entry_set_text(GTK_ENTRY(file_entry), file); 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); 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 ((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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -