57 lines
1021 B
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;
|
|
}
|
|
}
|
|
}
|