void ui_playlist_widget_update (GtkWidget * widget, gint type, gint at, gint count) { PlaylistWidgetData * data = audgui_list_get_user (widget); g_return_if_fail (data); if (type >= PLAYLIST_UPDATE_STRUCTURE) { gint diff = aud_playlist_entry_count (data->list) - audgui_list_row_count (widget); if (diff > 0) audgui_list_insert_rows (widget, at, diff); else if (diff < 0) audgui_list_delete_rows (widget, at, -diff); ui_playlist_widget_scroll (widget); } if (type >= PLAYLIST_UPDATE_METADATA) audgui_list_update_rows (widget, at, count); audgui_list_update_selection (widget, at, count); audgui_list_set_focus (widget, aud_playlist_get_focus (data->list)); update_queue (widget, data); }
void ui_playlist_widget_update (GtkWidget * widget, int type, int at, int count) { PlaylistWidgetData * data = audgui_list_get_user (widget); g_return_if_fail (data); if (type == PLAYLIST_UPDATE_STRUCTURE) { int old_entries = audgui_list_row_count (widget); int entries = aud_playlist_entry_count (data->list); audgui_list_delete_rows (widget, at, old_entries - (entries - count)); audgui_list_insert_rows (widget, at, count); /* scroll to end of playlist if entries were added there (but not if a newly added entry is playing) */ if (entries > old_entries && at + count == entries && aud_playlist_get_focus (data->list) < old_entries) aud_playlist_set_focus (data->list, entries - 1); ui_playlist_widget_scroll (widget); } else if (type == PLAYLIST_UPDATE_METADATA) audgui_list_update_rows (widget, at, count); audgui_list_update_selection (widget, at, count); audgui_list_set_focus (widget, aud_playlist_get_focus (data->list)); update_queue (widget, data); }
static void update_hook (void * data, void * list) { int rows = aud_playlist_count (); if (GPOINTER_TO_INT (data) == PLAYLIST_UPDATE_STRUCTURE) { int old_rows = audgui_list_row_count (list); if (rows < old_rows) audgui_list_delete_rows (list, rows, old_rows - rows); else if (rows > old_rows) audgui_list_insert_rows (list, old_rows, rows - old_rows); position_changed = TRUE; playlist_activated = TRUE; } if (GPOINTER_TO_INT (data) >= PLAYLIST_UPDATE_METADATA) audgui_list_update_rows (list, 0, rows); if (playlist_activated) { audgui_list_set_focus (list, aud_playlist_get_active ()); audgui_list_update_selection (list, 0, rows); playlist_activated = FALSE; } if (position_changed) { audgui_list_set_highlight (list, aud_playlist_get_playing ()); position_changed = FALSE; } }
static void activate_hook (void * data, void * list) { if (aud_playlist_update_pending ()) playlist_activated = TRUE; else { audgui_list_set_focus (list, aud_playlist_get_active ()); audgui_list_update_selection (list, 0, aud_playlist_count ()); } }
static void shift_rows (void * user, gint row, gint before) { gint rows = index_count (user); g_return_if_fail (row >= 0 && row < rows); g_return_if_fail (before >= 0 && before <= rows); if (before == row) return; Index * move = index_new (); Index * others = index_new (); gint begin, end; if (before < row) { begin = before; end = row + 1; while (end < rows && ((Column *) index_get (user, end))->selected) end ++; } else { begin = row; while (begin > 0 && ((Column *) index_get (user, begin - 1))->selected) begin --; end = before; } for (gint i = begin; i < end; i ++) { Column * c = index_get (user, i); index_append (c->selected ? move : others, c); } if (before < row) { index_merge_append (move, others); index_free (others); } else { index_merge_append (others, move); index_free (move); move = others; } index_copy_set (move, 0, user, begin, end - begin); index_free (move); GtkWidget * list = (user == chosen) ? chosen_list : avail_list; audgui_list_update_rows (list, begin, end - begin); audgui_list_update_selection (list, begin, end - begin); }