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

📄 gui-callbacks.c

📁 Glurp is a GTK+-2.x based graphical client for the Music Player Daemon !
💻 C
📖 第 1 页 / 共 3 页
字号:
  sel = gtk_tree_view_get_selection(tv);  if( !gtk_tree_selection_get_selected(sel, &tm, &iter)) {    debug("No playlist selected");    return FALSE;  }  gtk_tree_model_get(tm, &iter, 0, &name, -1);  mpd_sendRmCommand(glurp->conn, name);  mpd_finishCommand(glurp->conn);  if( check_mpd_error() ) {    glurp_disconnect();    return FALSE;  }  debug("Playlist '%s' deleted", name);  g_free(name);  get_playlist_list();  populate_gui_playlist_list();  return FALSE;}gboolean on_ui_playlist_save(GtkWidget *widget, gpointer user_data) {  GtkEntry *entry = GTK_ENTRY(glade_xml_get_widget(plxml, "entry_playlist_name"));  gchar *name = (gchar *)gtk_entry_get_text(entry);  GlurpPl *pl;  if( !glurp->conn ) {    debug("We're not connected, how can this be? Ignoring");    return FALSE;  }  if( !name || !g_utf8_strlen(name, -1) ) {    debug("Empty playlist name, ignoring");    return FALSE;  }  for( pl = glurp->playlists; pl; pl = pl->next ) {    if( !g_ascii_strcasecmp(pl->name, name) ) {      debug("Not overwriting existing playlist");      return FALSE;    }  }  mpd_sendSaveCommand(glurp->conn, name);  mpd_finishCommand(glurp->conn);  if( check_mpd_error() ) {    glurp_disconnect();    return FALSE;  }  debug("Playlist '%s' saved", name);  get_playlist_list();  populate_gui_playlist_list();  return FALSE;}gboolean on_ui_progress_drag(GtkWidget *widget, gpointer user_data) {  double pos = gtk_range_get_value(GTK_RANGE(widget));  double sec, tt;  gint t_min, t_sec, s_min, s_sec;  if( !glurp->conn || !glurp->current_song ) return FALSE;  if( !glurp->progress_dragging ) return FALSE;  tt = glurp->current_song->time;  t_min = (int)tt/60;  t_sec = (int)tt%60;  sec = (pos / 100)*tt;  s_min = (int)sec/60;  s_sec = (int)sec%60;  statusbar_print("Seek to %02d:%02d/%02d:%02d", s_min, s_sec, t_min, t_sec);  return FALSE;}gboolean on_ui_playlist_list_cursor_changed(GtkWidget *widget, gpointer user_data) {  GtkTreeView *tv;  GtkTreeModel *tm;  GtkTreeSelection *sel;  GtkTreeIter iter;  gchar *name;  if( !glurp->conn ) {    debug("We're not connected, how can this be? Just closing the window");    gtk_widget_destroy(glade_xml_get_widget(configxml, "glurp_window_playlist_list"));    return FALSE;  }  tv = GTK_TREE_VIEW(glade_xml_get_widget(plxml, "treeview_playlist_list"));  tm = gtk_tree_view_get_model(tv);  sel = gtk_tree_view_get_selection(tv);  if( !gtk_tree_selection_get_selected(sel, &tm, &iter)) {    debug("No playlist selected");    return FALSE;  }  gtk_tree_model_get(tm, &iter, 0, &name, -1);  gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(plxml, "entry_playlist_name")), name);  g_free(name);  return FALSE;}gboolean on_ui_qsearch_activate(GtkWidget *widget, gpointer user_data) {  gchar *srch = (gchar *)gtk_entry_get_text(GTK_ENTRY(widget));  gchar *sample = NULL;  gint type = gtk_combo_box_get_active(GTK_COMBO_BOX(glade_xml_get_widget(guixml, "combobox_qsearch_type")));  gint cpos;  GtkTreeIter iter, siter;  GtkTreePath *path;  gboolean found = FALSE;  debug("QSearch string: '%s'", srch);  gtk_tree_view_get_cursor(GTK_TREE_VIEW(glade_xml_get_widget(guixml, "treeview_playlist")), &path, NULL);  if( path ) {    cpos = atoi(gtk_tree_path_to_string(path));    gtk_tree_model_get_iter(GTK_TREE_MODEL(glurp->gui_playlist), &iter, path);    gtk_tree_model_get_iter(GTK_TREE_MODEL(glurp->gui_playlist), &siter, path);    gtk_tree_path_free(path);    if( !gtk_tree_model_iter_next(GTK_TREE_MODEL(glurp->gui_playlist), &iter) ) return FALSE;  } else {    cpos = 0;    if( !gtk_tree_model_get_iter_first(GTK_TREE_MODEL(glurp->gui_playlist), &iter) ) return FALSE;  }      debug("Cursor position: %d", cpos + 1);  cpos++;  do {    switch(type) {      case GLURP_QSEARCH_TITLE:        gtk_tree_model_get(GTK_TREE_MODEL(glurp->gui_playlist), &iter, PL_TITLE, &sample, -1);        if( sample && srch && g_strrstr(g_ascii_strdown(sample, -1), g_ascii_strdown(srch, -1)) ) {          debug("Found suitable haystack: '%s'", sample);          gui_playlist_scroll(cpos);          found = TRUE;        }	break;      case GLURP_QSEARCH_ARTIST:        gtk_tree_model_get(GTK_TREE_MODEL(glurp->gui_playlist), &iter, PL_ARTIST, &sample, -1);        if( sample && srch && g_strrstr(g_ascii_strdown(sample, -1), g_ascii_strdown(srch, -1)) ) {          debug("Found suitable haystack: '%s'", sample);          gui_playlist_scroll(cpos);          found = TRUE;        }	break;      case GLURP_QSEARCH_ALBUM:        gtk_tree_model_get(GTK_TREE_MODEL(glurp->gui_playlist), &iter, PL_ALBUM, &sample, -1);        if( sample && srch && g_strrstr(g_ascii_strdown(sample, -1), g_ascii_strdown(srch, -1)) ) {          debug("Found suitable haystack: '%s'", sample);          gui_playlist_scroll(cpos);          found = TRUE;        }	break;      case GLURP_QSEARCH_FILENAME:        gtk_tree_model_get(GTK_TREE_MODEL(glurp->gui_playlist), &iter, PL_FILENAME, &sample, -1);        if( sample && srch && g_strrstr(g_ascii_strdown(sample, -1), g_ascii_strdown(srch, -1)) ) {          debug("Found suitable haystack: '%s'", sample);          gui_playlist_scroll(cpos);          found = TRUE;        }	break;      case GLURP_QSEARCH_ALL:        gtk_tree_model_get(GTK_TREE_MODEL(glurp->gui_playlist), &iter, PL_TITLE, &sample, -1);        if( sample && srch && g_strrstr(g_ascii_strdown(sample, -1), g_ascii_strdown(srch, -1)) ) {          debug("Found suitable haystack: '%s'", sample);          gui_playlist_scroll(cpos);          found = TRUE;	  break;        }        gtk_tree_model_get(GTK_TREE_MODEL(glurp->gui_playlist), &iter, PL_ARTIST, &sample, -1);        if( sample && srch && g_strrstr(g_ascii_strdown(sample, -1), g_ascii_strdown(srch, -1)) ) {          debug("Found suitable haystack: '%s'", sample);          gui_playlist_scroll(cpos);          found = TRUE;	  break;        }        gtk_tree_model_get(GTK_TREE_MODEL(glurp->gui_playlist), &iter, PL_ALBUM, &sample, -1);        if( sample && srch && g_strrstr(g_ascii_strdown(sample, -1), g_ascii_strdown(srch, -1)) ) {          debug("Found suitable haystack: '%s'", sample);          gui_playlist_scroll(cpos);          found = TRUE;	  break;        }        gtk_tree_model_get(GTK_TREE_MODEL(glurp->gui_playlist), &iter, PL_FILENAME, &sample, -1);        if( sample && srch && g_strrstr(g_ascii_strdown(sample, -1), g_ascii_strdown(srch, -1)) ) {          debug("Found suitable haystack: '%s'", sample);          gui_playlist_scroll(cpos);          found = TRUE;	  break;        }        break;            }  } while( !found && gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(glurp->gui_playlist), &iter, NULL, ++cpos) );  return FALSE;}gboolean on_menu_add_activate(GtkWidget *widget, gpointer data) {  return FALSE;}gboolean on_menu_pl_remove_all_activate(GtkWidget *widget, gpointer data) {  if(!CONNECTED) return FALSE;  mpd_sendClearCommand(glurp->conn);  mpd_finishCommand(glurp->conn);  if( check_mpd_error() ) {    glurp_disconnect();    return FALSE;  }  return FALSE;}gboolean on_menu_pl_remove_selected_activate(GtkWidget *widget, gpointer data) {  GtkWidget *tv;  GtkTreeModel *tm;  GtkTreeSelection *ts;  gint num_sel, i, id;  GtkTreeIter iter;  GList *selected_rows;  if(!CONNECTED) return FALSE;  tv = glade_xml_get_widget(guixml, "treeview_playlist");  tm = gtk_tree_view_get_model(GTK_TREE_VIEW(tv));  ts = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv));  num_sel = gtk_tree_selection_count_selected_rows(ts);  selected_rows = gtk_tree_selection_get_selected_rows(ts, NULL);  debug("Selected %d rows", num_sel);  if( num_sel ) {    mpd_sendCommandListBegin(glurp->conn);    for( i=0; i<num_sel; i++ ) {      gtk_tree_model_get_iter(tm, &iter, (GtkTreePath *)g_list_nth_data(selected_rows, i));      gtk_tree_model_get(tm, &iter, PL_ID, &id, -1);      mpd_sendDeleteIdCommand(glurp->conn, id);    }    mpd_sendCommandListEnd(glurp->conn);    mpd_finishCommand(glurp->conn);    if( check_mpd_error() ) {      glurp_disconnect();      return FALSE;    }  }  return FALSE;}gboolean on_menu_pl_remove_crop_activate(GtkWidget *widget, gpointer data) {  GtkWidget *tv;  GtkTreeModel *tm;  GtkTreeSelection *ts;  GtkTreeIter iter;  gint i = 0;  if(!CONNECTED) return FALSE;  tv = glade_xml_get_widget(guixml, "treeview_playlist");  tm = gtk_tree_view_get_model(GTK_TREE_VIEW(tv));  ts = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv));  if( !gtk_tree_model_get_iter_first(tm, &iter) ) {    debug("Couldn't get first iter, playlist empty?");    return FALSE;  }  mpd_sendCommandListBegin(glurp->conn);  do {    if( !gtk_tree_selection_iter_is_selected(ts, &iter) ) mpd_sendDeleteCommand(glurp->conn, i);    else i++;  } while( gtk_tree_model_iter_next(tm, &iter) );  mpd_sendCommandListEnd(glurp->conn);  mpd_finishCommand(glurp->conn);  if( check_mpd_error() ) {    glurp_disconnect();    return FALSE;  }  return FALSE;}gboolean on_ui_add_close_clicked(GtkWidget *widget, gpointer data) {  GtkWidget *window_add = glade_xml_get_widget(addxml, "glurp_window_add");  g_object_ref(G_OBJECT(glurp->gui_addtree));  debug("Close pressed, destroying 'add' window...");  gtk_widget_destroy(window_add);  return FALSE;}gboolean on_ui_add_update_clicked(GtkWidget *widget, gpointer data) {  gtk_tree_store_clear(glurp->gui_addtree);  debug("Removing 'Add' treeview model");  gtk_tree_view_set_model(GTK_TREE_VIEW(glade_xml_get_widget(addxml, "treeview_add")), NULL);  statusbar_print("Updating MPD database, please wait...");  debug("Starting to update MPD db...");  if( NONBLOCKING_UPDATE_CAPABLE_MPD ) {    gui_updating_disable_add_controls();    glurp->updating_db = TRUE;  }  mpd_sendUpdateCommand(glurp->conn, "");  mpd_finishCommand(glurp->conn);  if( check_mpd_error() ) {    glurp_disconnect();    return FALSE;  }  if( !NONBLOCKING_UPDATE_CAPABLE_MPD ) {    statusbar_print("Database updated");    debug("MPD db updated");    debug("Setting 'Add' treeview model back");    gtk_tree_view_set_model(GTK_TREE_VIEW(glade_xml_get_widget(addxml, "treeview_add")), GTK_TREE_MODEL(glurp->gui_addtree));    populate_gui_add_tree();  }  return FALSE;}gboolean on_ui_add_add_clicked(GtkWidget *widget, gpointer data) {  GtkTreeView *tv;  GtkTreeModel *tm;  GtkTreeSelection *ts;  if(!CONNECTED) return FALSE;  tv = GTK_TREE_VIEW(glade_xml_get_widget(addxml, "treeview_add"));  tm = gtk_tree_view_get_model(tv);  if( !(ts = gtk_tree_view_get_selection(tv)) ) {    debug("No selection, ignoring");    return FALSE;  }  debug("Starting to add songs...");  gui_load_selected();  mpd_finishCommand(glurp->conn);  if( check_mpd_error() ) {    glurp_disconnect();    return FALSE;  }  debug("Finished adding songs");  return FALSE;}gboolean on_ui_repeat_clicked(GtkWidget *widget, gpointer user_data) {  if( !CONNECTED ) {    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), FALSE);    return FALSE;  }  if( !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ) {    statusbar_print("Repeat Off");    debug("Repeat Off");    mpd_sendRepeatCommand(glurp->conn, 0);    mpd_finishCommand(glurp->conn);    if( check_mpd_error() ) {      glurp_disconnect();      return FALSE;    }  } else {    statusbar_print("Repeat On");    debug("Repeat On");    mpd_sendRepeatCommand(glurp->conn, 1);    mpd_finishCommand(glurp->conn);    if( check_mpd_error() ) {      glurp_disconnect();      return FALSE;    }  }  return FALSE;}gboolean on_ui_random_clicked(GtkWidget *widget, gpointer user_data) {  if( !CONNECTED ) {    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), FALSE);    return FALSE;  }  if( !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ) {    statusbar_print("Random Off");    debug("Random Off");    mpd_sendRandomCommand(glurp->conn, 0);    mpd_finishCommand(glurp->conn);    if( check_mpd_error() ) {      glurp_disconnect();      return FALSE;    }

⌨️ 快捷键说明

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