reclaim/src/utils/ObservableList.vala

57 lines
1015 B
Vala
Raw Normal View History

namespace Reclaim {
public class ObservableList<T> : Object, ListModel {
List<T> data = new List<T> ();
public void add (T item) {
var position = data.length ();
data.append (item);
items_changed (position, 0, 1);
}
public void add_all (List<T> items) {
var position = data.length ();
foreach (var item in items)
data.append (item);
items_changed (position, 0, items.length ());
}
public void remove_all () {
var current_size = data.length ();
data = new List<T> ();
items_changed (0, current_size, 0);
}
public new T @get (uint index) {
return data.nth_data (index);
}
public bool remove (T item) {
var position = data.index (item);
if (position == -1)
return false;
data.remove (item);
items_changed (position, 1, 0);
return true;
}
Object? get_item (uint position) {
return this[position] as Object;
}
Type get_item_type () {
return typeof (T);
}
uint get_n_items () {
return data.length ();
}
}
}