namespace StudySystemClient { public class IterableBox : Gtk.Box { private List elements; public IterableBox(Gtk.Orientation orientation, int spacing) { this.orientation = orientation; this.spacing = spacing; elements = new List(); } public new void append(T element) { elements.append(element); base.append(element as Gtk.Widget); } public new void remove(T element) { elements.remove(element); base.remove(element as Gtk.Widget); } public Iterator iterator() { return new Iterator(elements); } public void sort(CompareDataFunc comparison) { elements.sort_with_data(comparison); foreach (var element in elements) reorder_child_after(element as Gtk.Widget, null); } public class Iterator { private unowned List head; private unowned T value; public Iterator(List elements) { head = elements; } public bool next() { if (head.is_empty()) return false; value = head.data; head = head.next; return true; } public unowned T get() { return value; } } } }