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

📄 gui.c

📁 Glurp is a GTK+-2.x based graphical client for the Music Player Daemon !
💻 C
📖 第 1 页 / 共 4 页
字号:
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 + -