📄 gui-callbacks.c
字号:
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 + -