reclaim/src/utils/ObservableList.vala

57 lines
1021 B
Vala

namespace Reclaim {
public class ObservableList<T> : Object, ListModel {
Gee.ArrayList<T> data = new Gee.ArrayList<T> ();
public void add (T item) {
var position = data.size;
data.add (item);
items_changed (position, 0, 1);
}
public void add_all (Gee.ArrayList<T> 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<T> ();
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;
}
}
}