blob: 8544b41eb6b3685e3d79f6372f795d1e651f6ef0 [file] [log] [blame]
part of dlog;
class Tree<E> extends _Display {
List<E> _items = new List<E>();
List _stack = new List();
int _depth = -1;
String title;
Tree([this.title]);
add(E text) {
_stack.last.add(_items.length);
_items.add(text);
}
openGroup() {
if (_stack.length == 0) {
_stack.add(_stack);
}
List group = new List();
_stack.last.add(group);
_stack.add(group);
}
closeGroup() {
_stack.removeLast();
}
_group(List group) {
_depth++;
group.forEach((item){
bool first = group.first == item,
last = group.last == item,
isGroup = item is List;
if (isGroup) {
_group(item);
} else {
_outputBufferWrite(Symbols.singleLineVertical + Symbols.space, _depth);
if (last) {
_outputBufferWrite(Symbols.singleLineAngleBottomLeft);
} else {
_outputBufferWrite(Symbols.singleLineFromRight);
}
_outputBufferWrite(Symbols.space);
_outputBufferWriteLn(_items[item].toString());
}
});
_depth--;
}
_item(E item) {
}
@override
_initBuffer() {
if (title is String) {
_outputBufferWriteLn(title);
}
_group(_stack.sublist(1));
}
}