namespace Reclaim { public class ObservableList : Object, ListModel { Gee.ArrayList data = new Gee.ArrayList (); public void add (T item) { var position = data.size; data.add (item); items_changed (position, 0, 1); } public void add_all (Gee.ArrayList items) { var position = data.size; foreach (var item in items) data.add (item); items_changed (position, 0, items.size); } public new T @get (int index) { return data.get (index); } public void remove_all () { var current_size = data.size; data = new Gee.ArrayList (); items_changed (0, current_size, 0); } public bool remove (T item) { var position = data.index_of (item); if (position == -1) return false; data.remove (item); items_changed (position, 1, 0); return true; } Object? get_item (uint position) { return get ((int)position) as Object; } Type get_item_type () { return typeof (T); } uint get_n_items () { return data.size; } } }