function TreeOutline(listNode, nonFocusable)
{
    TreeContainerNode.call(this);

    this.selectedTreeElement = null;
    this._childrenListNode = listNode;
    this.childrenListElement = this._childrenListNode;
    this._childrenListNode.removeChildren();
    this.expandTreeElementsWhenArrowing = false;
    this.root = true;
    this.hasChildren = false;
    this.expanded = true;
    this.selected = false;
    this.treeOutline = this;
    /** @type {?function(!TreeElement, !TreeElement):number} */
    this.comparator = null;

    this.setFocusable(!nonFocusable);
    this._childrenListNode.addEventListener("keydown", this._treeKeyDown.bind(this), true);

    /** @type {!Map.<!Object, !Array.<!TreeElement>>} */
    this._treeElementsMap = new Map();
    /** @type {!Map.<!Object, boolean>} */
    this._expandedStateMap = new Map();
    this.element = listNode;
}
@constructor
@extends {TreeContainerNode}
@param {!Element} listNode
@param {boolean=} nonFocusable