📄 gui.c
字号:
void add_playlist_to_gui_list(GlurpPl *pl) { GtkTreeIter iter; if( !glurp->gui_playlist_list ) { debug("No playlist list liststore!"); return; } if( !pl ) { debug("pl == NULL, ignoring"); return; } gtk_list_store_append(glurp->gui_playlist_list, &iter); gtk_list_store_set(glurp->gui_playlist_list, &iter, 0, pl->name, -1);}void populate_gui_playlist_list() { GlurpPl *pl; GtkTreeView *tv; GtkTreeModel *tm; GtkTreePath *path; GtkTreeIter iter; gtk_list_store_clear(glurp->gui_playlist_list); if( !glurp->playlists ) return; for( pl = glurp->playlists; pl; pl = pl->next ) { debug("Adding '%s' to gui list", pl->name); add_playlist_to_gui_list(pl); } tv = GTK_TREE_VIEW(glade_xml_get_widget(plxml, "treeview_playlist_list")); tm = gtk_tree_view_get_model(tv); gtk_tree_model_get_iter_first(tm, &iter); path = gtk_tree_model_get_path(tm, &iter); gtk_tree_view_set_cursor(tv, path, gtk_tree_view_get_column(tv, 0), FALSE); gtk_tree_view_columns_autosize(tv);}void playlists_window_destroyed() { if(!plxml && !glurp->gui_playlist_list) return; debug("playlists window destroyed, cleaning up"); plxml = NULL; if( G_IS_OBJECT(glurp->gui_playlist_list) ) g_object_unref(G_OBJECT(glurp->gui_playlist_list)); glurp->gui_playlist_list = NULL;}void gui_playlist_set_cursor(gint pos) { GtkTreeView *tv; GtkTreeModel *tm; GtkTreePath *path; GtkTreeIter iter; debug("Scrolling to row #%d", pos + 1); tv = GTK_TREE_VIEW(glade_xml_get_widget(guixml, "treeview_playlist")); tm = gtk_tree_view_get_model(tv); gtk_tree_model_iter_nth_child(tm, &iter, NULL, pos); path = gtk_tree_model_get_path(tm, &iter); gtk_tree_view_set_cursor(tv, path, gtk_tree_view_get_column(tv, PL_TRACK), FALSE); gtk_tree_path_free(path);}gboolean gui_playlist_scroll_cb(gpointer val) { return gui_playlist_scroll(GPOINTER_TO_INT(val));}gboolean gui_playlist_scroll(gint pos) { GtkTreeView *tv; GtkTreeModel *tm; GtkTreePath *path; GtkTreeIter iter; debug("Scrolling to row #%d", pos + 1); tv = GTK_TREE_VIEW(glade_xml_get_widget(guixml, "treeview_playlist")); tm = gtk_tree_view_get_model(tv); gtk_tree_model_iter_nth_child(tm, &iter, NULL, pos); path = gtk_tree_model_get_path(tm, &iter); gtk_tree_view_scroll_to_cell(tv, path, NULL, TRUE, 0.5, 0); gtk_tree_view_set_cursor(tv, path, gtk_tree_view_get_column(tv, PL_TRACK), FALSE); gtk_tree_path_free(path); return FALSE;}gboolean gui_playlist_hilight_cb(gpointer val) { return gui_playlist_hilight(GPOINTER_TO_INT(val));}gboolean gui_playlist_hilight(gint pos) { GtkTreeView *tv; GtkTreeModel *tm; GtkTreeIter iter; if( pos < -1 ) return FALSE; tv = GTK_TREE_VIEW(glade_xml_get_widget(guixml, "treeview_playlist")); tm = gtk_tree_view_get_model(tv); if(glurp->prev_song_num != -1) { gtk_tree_model_iter_nth_child(tm, &iter, NULL, glurp->prev_song_num); gtk_list_store_set(GTK_LIST_STORE(tm), &iter, PL_BOLD, PANGO_WEIGHT_NORMAL, PL_BOLD_SET, TRUE, -1); } glurp->prev_song_num = pos; if( pos >= 0 ) { gtk_tree_model_iter_nth_child(tm, &iter, NULL, pos); gtk_list_store_set(GTK_LIST_STORE(tm), &iter, PL_BOLD, PANGO_WEIGHT_ULTRABOLD, PL_BOLD_SET, TRUE, -1); } return FALSE;}gboolean gui_trackname_scroll() { GtkEntry *entry = GTK_ENTRY(glade_xml_get_widget(guixml, "entry_trackname")); gint length = g_utf8_strlen(gtk_entry_get_text(entry), -1); if( !CONNECTED || !(PLAYING || PAUSED) || length < TRACKNAME_SCROLL_START ) { debug("Scrolling not started"); return FALSE; } if( glurp->scroll == 1 ) { debug("Scrolling started, glurp->scroll = %d", glurp->scroll); glurp->scroll = TRACKNAME_SCROLL_START; } if( glurp->scroll > 0 ) { if( glurp->scroll <= length ) glurp->scroll++; else glurp->scroll = - TRACKNAME_SCROLL_START; } else { if( -(glurp->scroll) < length ) glurp->scroll--; else glurp->scroll = TRACKNAME_SCROLL_START; } if( glurp->scroll > 0 ) gtk_editable_set_position(GTK_EDITABLE(entry), glurp->scroll); else gtk_editable_set_position(GTK_EDITABLE(entry), length + glurp->scroll); if( gtk_widget_is_focus(GTK_WIDGET(entry)) ) gtk_widget_grab_focus(glade_xml_get_widget(guixml, "treeview_playlist")); return TRUE;}void add_window_destroyed() { if( !addxml ) return; debug("'add' window destroyed, cleaning up"); addxml = NULL;}void create_gui_add_tree() { GtkWidget *tv; GtkTreeViewColumn *column; GtkCellRenderer *rend, *prend; debug("Creating 'add' treeview..."); if( !glurp->gui_addtree ) { glurp->gui_addtree = gtk_tree_store_new(4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, GDK_TYPE_PIXBUF ); debug("'add' treestore created"); } tv = glade_xml_get_widget(addxml, "treeview_add"); rend = gtk_cell_renderer_text_new(); prend = gtk_cell_renderer_pixbuf_new(); column = gtk_tree_view_column_new(); gtk_tree_view_column_pack_end(column, rend, TRUE); gtk_tree_view_column_set_attributes(column, rend, "text", ADD_NAME, NULL); gtk_tree_view_column_pack_start(column, prend, FALSE); gtk_tree_view_column_set_title(column, "Database"); gtk_tree_view_column_add_attribute(column, prend, "pixbuf", ADD_ICON); gtk_tree_view_column_set_resizable(column, FALSE); gtk_tree_view_append_column(GTK_TREE_VIEW(tv), column); column = gtk_tree_view_column_new_with_attributes("", rend, NULL); gtk_tree_view_column_set_resizable(column, FALSE); gtk_tree_view_append_column(GTK_TREE_VIEW(tv), column); gtk_tree_view_column_set_visible(column, FALSE); column = gtk_tree_view_column_new_with_attributes("", rend, NULL); gtk_tree_view_column_set_resizable(column, FALSE); gtk_tree_view_append_column(GTK_TREE_VIEW(tv), column); gtk_tree_view_column_set_visible(column, FALSE); gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(tv)), GTK_SELECTION_MULTIPLE); gtk_widget_show(tv); debug("'add' treeview created");}void populate_gui_add_tree() { if( !glurp->gui_addtree ) return; gtk_tree_store_clear(GTK_TREE_STORE(glurp->gui_addtree)); glurp->num_add_dirs = 0; glurp_add_add_dir("", NULL); if( !glurp->updating_db ) { debug("Setting 'Add' treeview model"); gtk_tree_view_set_model(GTK_TREE_VIEW(glade_xml_get_widget(addxml, "treeview_add")), GTK_TREE_MODEL(glurp->gui_addtree)); }}void populate_gui_add_search_tree() { GtkComboBox* combo_type; GtkEntry* find_entry; GtkTreeIter iter; GtkTreePath *path; gint n, nd; const gchar *what; if (!glurp->gui_addtree) return; /* remove last toplevel item if it's search results */ n = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(glurp->gui_addtree), NULL); gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(glurp->gui_addtree), &iter, NULL, n - 1); gtk_tree_model_get(GTK_TREE_MODEL(glurp->gui_addtree), &iter, ADD_NUM_DIRS, &nd, -1); if( nd == -2 ) { /* last item is search results, let's ixnay it */ debug("Removing previous search results treeview item"); gtk_tree_store_remove(glurp->gui_addtree, &iter); } combo_type = GTK_COMBO_BOX(glade_xml_get_widget(addxml, "combo_add_find_type")); debug("Adding a folder for find results"); find_entry = GTK_ENTRY(glade_xml_get_widget(addxml, "entry_add_find_what")); what = gtk_entry_get_text(find_entry); if( what && g_utf8_strlen(what, -1) ) { gtk_tree_store_append(glurp->gui_addtree, &iter, NULL); gtk_tree_store_set(glurp->gui_addtree, &iter, ADD_ICON, gtk_widget_render_icon(glade_xml_get_widget(addxml, "glurp_window_add"), GTK_STOCK_FIND, GTK_ICON_SIZE_SMALL_TOOLBAR, "icon"), ADD_NAME, "Search results", ADD_NUM_DIRS, -2, -1); path = gtk_tree_model_get_path(GTK_TREE_MODEL(glurp->gui_addtree), &iter); glurp_add_search_result_dir( gtk_entry_get_text(find_entry), gtk_combo_box_get_active(combo_type), path); } if( !glurp->updating_db ) { debug("Setting 'Add' treeview model"); gtk_tree_view_set_model(GTK_TREE_VIEW(glade_xml_get_widget(addxml, "treeview_add")), GTK_TREE_MODEL(glurp->gui_addtree)); } gtk_editable_select_region(GTK_EDITABLE(find_entry), 0, -1);} void gui_load_selected() { GtkTreeIter iter; GtkTreeView *tv = GTK_TREE_VIEW(glade_xml_get_widget(addxml, "treeview_add")); GtkTreeModel *tm; GtkTreeSelection *ts; GList *selected_rows; gint i, num; tm = gtk_tree_view_get_model(tv); if( !(ts = gtk_tree_view_get_selection(tv)) || !(num = gtk_tree_selection_count_selected_rows(ts)) ) { debug("No selection, ignoring"); return; } selected_rows = gtk_tree_selection_get_selected_rows(ts, NULL); for( i = 0; i < num; i++ ) { gtk_tree_model_get_iter(tm, &iter, (GtkTreePath *)g_list_nth_data(selected_rows, i)); gui_load_song(tm, iter); } return;}void gui_load_song(GtkTreeModel *tm, GtkTreeIter iter) { gchar *fname = NULL; GtkTreeIter child; gint i; gui_add_fill_dir(&iter, TRUE); if( gtk_tree_model_iter_has_child(tm, &iter) ) { for( i = 0; i < gtk_tree_model_iter_n_children(tm, &iter); i++ ) { gtk_tree_model_iter_nth_child(tm, &child, &iter, i); gui_load_song(tm, child); } return; } gtk_tree_model_get(tm, &iter, 1, &fname, -1); if( fname && g_utf8_strlen(fname, -1) ) { debug("Adding song '%s'", fname); mpd_sendAddCommand(glurp->conn, fname); mpd_finishCommand(glurp->conn); g_free(fname); if( check_mpd_error() ) { glurp_disconnect(); return; } } else debug("Invalid song filename"); return;}void gui_updating_disable_add_controls() {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -