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

📄 gui.c

📁 Glurp is a GTK+-2.x based graphical client for the Music Player Daemon !
💻 C
📖 第 1 页 / 共 4 页
字号:
  debug("Disabling 'add' controls");  gtk_widget_set_sensitive(glade_xml_get_widget(addxml, "scrolledwindow_add"), FALSE);  gtk_widget_set_sensitive(glade_xml_get_widget(addxml, "button_add_update"), FALSE);  gtk_widget_set_sensitive(glade_xml_get_widget(addxml, "button_add_add"), FALSE);  debug("Removing 'Add' treeview model");  gtk_tree_view_set_model(GTK_TREE_VIEW(glade_xml_get_widget(addxml, "treeview_add")), NULL);}void gui_updating_enable_add_controls() {  debug("Enabling 'add' controls");  gtk_widget_set_sensitive(glade_xml_get_widget(addxml, "scrolledwindow_add"), TRUE);  gtk_widget_set_sensitive(glade_xml_get_widget(addxml, "button_add_update"), TRUE);  gtk_widget_set_sensitive(glade_xml_get_widget(addxml, "button_add_add"), TRUE);  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 gui_add_fill_dir(GtkTreeIter *iter, gboolean silent) {  GtkTreeView *tv = GTK_TREE_VIEW(glade_xml_get_widget(addxml, "treeview_add"));  GtkTreeModel *tm = gtk_tree_view_get_model(tv);  GtkTreeIter child;  gint nd;  gchar *filepath;  gtk_tree_model_get(tm, iter, ADD_NUM_DIRS, &nd, ADD_FILENAME, &filepath, -1);  if( gtk_tree_model_iter_n_children(tm, iter) == 1 && nd == -1 ) {    if( !gtk_tree_model_iter_children(tm, &child, iter) ) {      debug("Couldn't get stub child");      return;    }    debug("Filling dir '%s'", filepath);    gtk_tree_store_set(GTK_TREE_STORE(tm), iter, ADD_NUM_DIRS, 0, -1);    glurp_add_add_dir(filepath, gtk_tree_model_get_path(tm, iter));    gtk_tree_store_remove(GTK_TREE_STORE(tm), &child);    if( silent ) gtk_tree_view_collapse_row(tv, gtk_tree_model_get_path(tm, iter));    debug("Filling complete");  }}gboolean gui_get_iter_by_id(GtkTreeIter *iter, gint id) {  GtkTreeModel *tm = GTK_TREE_MODEL(glurp->gui_playlist);  gint cid;  if( !gtk_tree_model_get_iter_first(tm, iter) ) {    debug("Couldn't get first iter");    return FALSE;  }  do {    gtk_tree_model_get(tm, iter, PL_ID, &cid, -1);    if( cid == id ) return TRUE;  } while( gtk_tree_model_iter_next(tm, iter) );  return FALSE;}gboolean gui_get_iter_by_pos(GtkTreeIter *iter, gint pos) {  GtkTreeModel *tm = GTK_TREE_MODEL(glurp->gui_playlist);  gint cpos = 0;  if( !gtk_tree_model_get_iter_first(tm, iter) ) {    debug("Couldn't get first iter");    return FALSE;  }  while( cpos < pos ) {    if( !gtk_tree_model_iter_next(tm, iter) ) return FALSE;;    cpos++;  }  return TRUE;}void gui_update_song(gint id) {  GlurpSong *s = NULL;  GtkListStore *ls = glurp->gui_playlist;  GtkTreeModel *tm = GTK_TREE_MODEL(ls);  GtkTreeIter iter;  gint spos, i;  /* get GlurpSong */  if( !(s = get_song_by_id(id)) ) {    debug("Couldn't get song");    return;  }    /* get song position in internal playlist */  spos = get_song_pos(s);  if( !gui_get_iter_by_pos(&iter, spos) ) {    debug("Couldn't get requested iter, adding song");    add_song_to_gui_playlist(s, spos + 1);    return;  }  /* get GtkTreeIter */  for(i = 0, gtk_tree_model_get_iter_first(tm, &iter); i < spos; i++, gtk_tree_model_iter_next(tm, &iter) ) {}  debug("Modifying playlist row...");  gtk_list_store_set(ls, &iter, PL_FILENAME, s->file, PL_ARTIST, s->artist, PL_TITLE, s->title, PL_ALBUM, s->album, PL_TRACK, s->track, PL_NAME, s->name, PL_POS, s->pos + 1, PL_ID, s->id, -1);}void gui_trim_playlist_end(gint last) {  GtkTreeModel *tm = GTK_TREE_MODEL(glurp->gui_playlist);  GtkTreeIter iter, riter;  GtkTreePath *lpath;  gint i;  if( last == -1 ) {    debug("Clearing GUI playlist");    gtk_list_store_clear(glurp->gui_playlist);    return;  }  /* get the path to last row we want to keep */  for(i = 0, gtk_tree_model_get_iter_first(tm, &iter); i <= last - 1 && &iter; i++, gtk_tree_model_iter_next(tm, &iter) ) {}  lpath = gtk_tree_model_get_path(tm, &iter);  while( gtk_tree_model_get_iter(tm, &riter, lpath) && gtk_tree_model_iter_next(tm, &riter) )    gtk_list_store_remove(glurp->gui_playlist, &riter);}void create_stream_liststore() {  GtkListStore *ls;  GtkWidget *tv;  if(glurp->gui_stream_list) {    debug("Stream liststore exists, returning");    return;  }  debug("Creating stream liststore...");  ls = gtk_list_store_new(1, G_TYPE_STRING);  tv = glade_xml_get_widget(streamxml, "comboboxentry_stream_url");  gtk_entry_set_activates_default(GTK_ENTRY(GTK_BIN(glade_xml_get_widget(streamxml, "comboboxentry_stream_url"))->child), TRUE);  gtk_widget_grab_focus(GTK_WIDGET(GTK_BIN(glade_xml_get_widget(streamxml, "comboboxentry_stream_url"))->child));  gtk_combo_box_set_model(GTK_COMBO_BOX(tv), GTK_TREE_MODEL(ls));  gtk_combo_box_entry_set_text_column(GTK_COMBO_BOX_ENTRY(tv), 0);  glurp->gui_stream_list = ls;  debug("Stream combobox model created");}void populate_stream_liststore() {  GlurpStream *s = NULL;  GtkTreeIter iter;  gtk_list_store_clear(glurp->gui_stream_list);  for( s = glurp->stream_history; s; s = s->next ) {    debug("Adding row '%s'", s->url);    gtk_list_store_append(glurp->gui_stream_list, &iter);    gtk_list_store_set(glurp->gui_stream_list, &iter, 0, g_strdup(s->url), -1);  }  statusbar_print("Stream combobox model populated");}void stream_window_destroyed() {  if(!streamxml && !glurp->gui_stream_list) return;  debug("playlists window destroyed, cleaning up");  streamxml = NULL;  if( G_IS_OBJECT(glurp->gui_stream_list) ) g_object_unref(G_OBJECT(glurp->gui_stream_list));  glurp->gui_stream_list = NULL;}gchar *get_selected_stream() {  gchar *text = NULL;  GtkWidget *cb = NULL;  if( !streamxml || !glurp->gui_stream_list ) {    debug("No combobox");    return NULL;  }  cb = glade_xml_get_widget(streamxml, "comboboxentry_stream_url");  text = (gchar *)gtk_entry_get_text(GTK_ENTRY(GTK_BIN(cb)->child));  return text;}void gui_refresh_playlist_columns() {  GtkTreeViewColumn *col = NULL;  GtkCellRenderer *rend;  GtkTreeView *tv = GTK_TREE_VIEW(glade_xml_get_widget(guixml, "treeview_playlist"));  debug("Starting to update playlist columns");  while( (col = gtk_tree_view_get_column(GTK_TREE_VIEW(tv), 0)) ) {    gtk_tree_view_remove_column(tv, col);  }  rend = gtk_cell_renderer_text_new();  if( glurp->config->playlist_columns[PL_POS] ) {    col = gtk_tree_view_column_new_with_attributes("#", rend, "text", PL_POS, "weight", PL_BOLD, "weight-set", PL_BOLD_SET, NULL);    gtk_tree_view_column_set_resizable(col, TRUE);    gtk_tree_view_append_column(tv, col);  }      if( glurp->config->playlist_columns[PL_ID] ) {    col = gtk_tree_view_column_new_with_attributes("Id", rend, "text", PL_ID, "weight", PL_BOLD, "weight-set", PL_BOLD_SET, NULL);    gtk_tree_view_column_set_resizable(col, TRUE);    gtk_tree_view_append_column(tv, col);  }      if( glurp->config->playlist_columns[PL_TITLE] ) {    col = gtk_tree_view_column_new_with_attributes("Title", rend, "text", PL_TITLE, "weight", PL_BOLD, "weight-set", PL_BOLD_SET, NULL);    gtk_tree_view_column_set_resizable(col, TRUE);    gtk_tree_view_append_column(tv, col);  }      if( glurp->config->playlist_columns[PL_NAME] ) {    col = gtk_tree_view_column_new_with_attributes("Name", rend, "text", PL_TITLE, "weight", PL_BOLD, "weight-set", PL_BOLD_SET, NULL);    gtk_tree_view_column_set_resizable(col, TRUE);    gtk_tree_view_append_column(tv, col);  }      if( glurp->config->playlist_columns[PL_ARTIST] ) {    col = gtk_tree_view_column_new_with_attributes("Artist", rend, "text", PL_ARTIST, "weight", PL_BOLD, "weight-set", PL_BOLD_SET, NULL);    gtk_tree_view_column_set_resizable(col, TRUE);    gtk_tree_view_append_column(tv, col);  }      if( glurp->config->playlist_columns[PL_ALBUM] ) {    col = gtk_tree_view_column_new_with_attributes("Album", rend, "text", PL_ALBUM, "weight", PL_BOLD, "weight-set", PL_BOLD_SET, NULL);    gtk_tree_view_column_set_resizable(col, TRUE);    gtk_tree_view_append_column(tv, col);  }      if( glurp->config->playlist_columns[PL_FILENAME] ) {    col = gtk_tree_view_column_new_with_attributes("Filename", rend, "text", PL_FILENAME, "weight", PL_BOLD, "weight-set", PL_BOLD_SET, NULL);    gtk_tree_view_column_set_resizable(col, TRUE);    gtk_tree_view_append_column(tv, col);  }  debug("Playlist columns updated");}GtkMenu *populate_outputs_menu() {  GtkWidget *menu = gtk_menu_new();  GtkWidget *hbox, *label, *icon;  GtkMenuItem *item = NULL;  mpd_OutputEntity *output;  gint i;  mpd_sendOutputsCommand(glurp->conn);  while( (output = mpd_getNextOutput(glurp->conn)) ) {    debug("%d: %s", output->id, output->name);    hbox = GTK_WIDGET(gtk_hbox_new(FALSE, 0));    gtk_widget_show(hbox);    /* "enabled" icon */    if( output->enabled ) {      icon = gtk_image_new_from_stock(GTK_STOCK_APPLY, GTK_ICON_SIZE_MENU);      i = output->id + 1;    } else {      icon = gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);      i = -(output->id + 1);    }    gtk_widget_show(icon);    gtk_box_pack_start(GTK_BOX(hbox), icon, FALSE, FALSE, 0);    /* label */    label = GTK_WIDGET(gtk_label_new(g_strdup_printf("%d: %s", output->id, output->name)));    gtk_widget_show(label);    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);    item = GTK_MENU_ITEM(gtk_menu_item_new());    gtk_container_add(GTK_CONTAINER(item), hbox);    gtk_menu_shell_append(GTK_MENU_SHELL(menu), GTK_WIDGET(item));    gtk_widget_show(GTK_WIDGET(item));    g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(on_menu_output_activate), (gpointer)i);    g_free(output);  }  mpd_finishCommand(glurp->conn);  if( check_mpd_error() ) {    glurp_disconnect();    return NULL;  }  g_signal_connect(G_OBJECT(menu), "deactivate", G_CALLBACK(on_menu_outputs_deactivate), NULL);  return GTK_MENU(menu);}void gui_add_append(gchar *path, GtkTreePath *gpath, gboolean song) {  GtkTreeModel *tm = GTK_TREE_MODEL(glurp->gui_addtree);  GtkTreeIter iparent, iter, newchild;  gint nd;  debug("Adding '%s'", path);  /* get stored number of dirs in parent dir */  if( gpath ) {    gtk_tree_model_get_iter(tm, &iparent, gpath);    gtk_tree_model_get(tm, &iparent, ADD_NUM_DIRS, &nd, -1);  }  if( song ) {    gtk_tree_store_append(glurp->gui_addtree, &iter, (gpath ? &iparent : NULL));    gtk_tree_store_set(glurp->gui_addtree, &iter, 3, gdk_pixbuf_new_from_file(DATADIR "pixmaps/media-audiofile.png", NULL), -1);  } else {    gtk_tree_store_insert(glurp->gui_addtree, &iter, (gpath ? &iparent : NULL), (gpath ? nd : glurp->num_add_dirs));    if( gpath ) gtk_tree_store_set(glurp->gui_addtree, &iparent, 2, nd+1, -1);    else glurp->num_add_dirs++;    gtk_tree_store_set(glurp->gui_addtree, &iter, 3, gtk_widget_render_icon(glade_xml_get_widget(guixml, "glurp_window_main"), GTK_STOCK_OPEN, GTK_ICON_SIZE_SMALL_TOOLBAR, "icon"), -1);    gtk_tree_store_set(glurp->gui_addtree, &iter, ADD_NUM_DIRS, -1, -1);    gtk_tree_store_insert(glurp->gui_addtree, &newchild, &iter, (gpath ? nd : glurp->num_add_dirs));  }  gtk_tree_store_set(glurp->gui_addtree, &iter, ADD_NAME, glurp_filename(path), ADD_FILENAME, path, -1);  if( gpath )    gtk_tree_view_expand_row(GTK_TREE_VIEW(glade_xml_get_widget(addxml, "treeview_add")), gpath, FALSE);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -