📄 music_browser.c
字号:
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;}intedit_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(_("Edit 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); 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_record_clicked(GtkWidget * widget, gpointer * data) { GtkWidget * dialog; const gchar * selected_filename; GtkListStore * model = (GtkListStore *)data; GtkTreeIter iter; GSList *lfiles, *node; dialog = gtk_file_chooser_dialog_new(_("Please select the audio files for this record."), NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL); deflicker(); if (options.show_hidden) { gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dialog), TRUE); } 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); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE); gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), options.currdir); assign_audio_fc_filters(GTK_FILE_CHOOSER(dialog)); if (aqualung_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { strncpy(options.currdir, gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)), MAXLEN-1); lfiles = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog)); node = lfiles; while (node) { selected_filename = (char *) node->data; if (selected_filename[strlen(selected_filename)-1] != '/') { char * utf8 = g_locale_to_utf8(selected_filename, -1, NULL, NULL, NULL); gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, 0, utf8, -1); g_free(utf8); } g_free(node->data); node = node->next; } g_slist_free(lfiles); } gtk_widget_destroy(dialog); return 0;}voidclicked_tracklist_header(GtkWidget * widget, gpointer * data) { GtkListStore * model = (GtkListStore *)data; gtk_list_store_clear(model);}intadd_record_dialog(char * name, char * sort_name, char *** strings, char * comment) { GtkWidget * dialog; GtkWidget * table; GtkWidget * hbox; GtkWidget * name_label; GtkWidget * sort_name_label; GtkWidget * list_label; GtkWidget * viewport1; GtkWidget * scrolled_win; GtkWidget * tracklist_tree; GtkListStore * model; GtkCellRenderer * cell; GtkTreeViewColumn * column; GtkTreeIter iter; gchar * str; GtkWidget * browse_button; GtkWidget * viewport2; GtkWidget * scrolled_window; GtkWidget * comment_label; GtkWidget * comment_view; GtkTextBuffer * buffer; GtkTextIter iter_start; GtkTextIter iter_end; int n, i; int ret; dialog = gtk_dialog_new_with_buttons(_("Add 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), 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(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); list_label = gtk_label_new(_("Auto-create tracks from these files:")); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), list_label, FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, FALSE, TRUE, 2); viewport1 = gtk_viewport_new(NULL, NULL); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), viewport1, TRUE, TRUE, 2); scrolled_win = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(viewport1), scrolled_win); /* setup track list */ model = gtk_list_store_new(1, G_TYPE_STRING); tracklist_tree = gtk_tree_view_new(); gtk_tree_view_set_model(GTK_TREE_VIEW(tracklist_tree), GTK_TREE_MODEL(model)); gtk_container_add(GTK_CONTAINER(scrolled_win), tracklist_tree); gtk_widget_set_size_request(tracklist_tree, 250, 50); cell = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Clear list"), cell, "text", 0, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(tracklist_tree), GTK_TREE_VIEW_COLUMN(column)); gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(tracklist_tree), TRUE); g_signal_connect(G_OBJECT(column->button), "clicked", G_CALLBACK(clicked_tracklist_header), (gpointer *)model); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model), 0, GTK_SORT_ASCENDING); browse_button = gui_stock_label_button(_("_Add files..."), GTK_STOCK_ADD); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), browse_button, FALSE, TRUE, 2); g_signal_connect(G_OBJECT(browse_button), "clicked", G_CALLBACK(browse_button_record_clicked), (gpointer *)model); 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); viewport2 = gtk_viewport_new(NULL, NULL); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), viewport2, 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(viewport2), 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))); n = 0; if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) { /* count the number of list items */ n = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -