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); }
static void import_winamp_file(const gchar * filename) { VFSFile * file = open_vfs_file (filename, "r"); if (! file) return; Index * list = aud_import_winamp_eqf (file); if (! list) goto CLOSE; index_merge_append (equalizer_presets, list); index_free (list); aud_equalizer_write_preset_file(equalizer_presets, "eq.preset"); CLOSE: vfs_fclose(file); }