1e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)/*
2e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved.
3e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) *
4e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without
5e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * modification, are permitted provided that the following conditions are
6e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * met:
7e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) *
8e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) *     * Redistributions of source code must retain the above copyright
9e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * notice, this list of conditions and the following disclaimer.
10e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) *     * Redistributions in binary form must reproduce the above
11e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer
12e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * in the documentation and/or other materials provided with the
13e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * distribution.
14e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) *     * Neither the name of Google Inc. nor the names of its
15e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * contributors may be used to endorse or promote products derived from
16e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * this software without specific prior written permission.
17e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) *
18e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) */
30e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
31e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)/**
32e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * @constructor
33e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * @extends {WebInspector.Object}
34a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!TreeOutline} treeOutline
35e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) */
36d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)WebInspector.LayerTreeOutline = function(treeOutline)
37e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles){
38e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    WebInspector.Object.call(this);
39e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    this._treeOutline = treeOutline;
40e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    this._treeOutline.childrenListElement.addEventListener("mousemove", this._onMouseMove.bind(this), false);
41e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    this._treeOutline.childrenListElement.addEventListener("mouseout", this._onMouseMove.bind(this), false);
42c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    this._treeOutline.childrenListElement.addEventListener("contextmenu", this._onContextMenu.bind(this), true);
43e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    this._lastHoveredNode = null;
44e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)}
45e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
46e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)/**
47e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * @enum {string}
48e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) */
49d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)WebInspector.LayerTreeOutline.Events = {
50e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    LayerHovered: "LayerHovered",
51e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    LayerSelected: "LayerSelected"
52e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)}
53e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
54d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)WebInspector.LayerTreeOutline.prototype = {
55e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    /**
5610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch     * @param {?WebInspector.Layer} layer
57e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)     */
58e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    selectLayer: function(layer)
59e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    {
60e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        this.hoverLayer(null);
61e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        var node = layer && this._treeOutline.getCachedTreeElement(layer);
62e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        if (node)
63e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)            node.revealAndSelect(true);
64c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        else if (this._treeOutline.selectedTreeElement)
65c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)            this._treeOutline.selectedTreeElement.deselect();
66e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    },
67e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
68e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    /**
69a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {?WebInspector.Layer} layer
70e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)     */
71e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    hoverLayer: function(layer)
72e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    {
73e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        var node = layer && this._treeOutline.getCachedTreeElement(layer);
74e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        if (node === this._lastHoveredNode)
75e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)            return;
76e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        if (this._lastHoveredNode)
77e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)            this._lastHoveredNode.setHovered(false);
78e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        if (node)
79e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)            node.setHovered(true);
80e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        this._lastHoveredNode = node;
81e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    },
82e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
83d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    /**
84d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)     * @param {?WebInspector.LayerTreeBase} layerTree
85d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)     */
86d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    update: function(layerTree)
87e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    {
88d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        var seenLayers = new Map();
89e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
90e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        /**
91a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!WebInspector.Layer} layer
92d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)         * @this {WebInspector.LayerTreeOutline}
93e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)         */
94e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        function updateLayer(layer)
95e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        {
96d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)            if (seenLayers.get(layer))
97d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)                console.assert(false, "Duplicate layer: " + layer.id());
989e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            seenLayers.set(layer, true);
99e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)            var node = this._treeOutline.getCachedTreeElement(layer);
100d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)            var parent = layer === layerTree.contentRoot() ? this._treeOutline : this._treeOutline.getCachedTreeElement(layer.parent());
101e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)            if (!parent)
102e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)                console.assert(false, "Parent is not in the tree");
103e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)            if (!node) {
104e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)                node = new WebInspector.LayerTreeElement(this, layer);
105e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)                parent.appendChild(node);
106e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)            } else {
107d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                if (node.parent !== parent) {
108d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                    node.parent.removeChild(node);
109e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)                    parent.appendChild(node);
110e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)                }
111e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)                node._update();
112e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)            }
113e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        }
114d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        if (layerTree && layerTree.contentRoot())
115d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)            layerTree.forEachLayer(updateLayer.bind(this), layerTree.contentRoot());
1169bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)        // Cleanup layers that don't exist anymore from tree.
117d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        for (var node = /** @type {!TreeElement|!TreeOutline|null} */ (this._treeOutline.children[0]); node && !node.root;) {
118d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)            if (seenLayers.get(node.representedObject)) {
1199bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)                node = node.traverseNextTreeElement(false);
1209bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)            } else {
1219bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)                var nextNode = node.nextSibling || node.parent;
1229bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)                node.parent.removeChild(node);
1239bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)                if (node === this._lastHoveredNode)
1249bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)                    this._lastHoveredNode = null;
1259bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)                node = nextNode;
126e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)            }
127e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        }
128e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    },
129e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
130e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    /**
131197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @param {!Event} event
132e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)     */
133e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    _onMouseMove: function(event)
134e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    {
135e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        var node = this._treeOutline.treeElementFromPoint(event.pageX, event.pageY);
136e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        if (node === this._lastHoveredNode)
137e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)            return;
138d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        this.dispatchEventToListeners(WebInspector.LayerTreeOutline.Events.LayerHovered, node && node.representedObject ? {layer: node.representedObject} : null);
139e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    },
140e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
141e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    /**
142a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.LayerTreeElement} node
143e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)     */
144e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    _selectedNodeChanged: function(node)
145e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    {
146a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        var layer = /** @type {!WebInspector.Layer} */ (node.representedObject);
147d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        this.dispatchEventToListeners(WebInspector.LayerTreeOutline.Events.LayerSelected, {layer: layer});
148e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    },
149e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
150c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    /**
151197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @param {!Event} event
152c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)     */
153c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    _onContextMenu: function(event)
154c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    {
155c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        var node = this._treeOutline.treeElementFromPoint(event.pageX, event.pageY);
156c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        if (!node || !node.representedObject)
157c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)            return;
158a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        var layer = /** @type {!WebInspector.Layer} */ (node.representedObject);
159c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        if (!layer)
160c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)            return;
161a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        var domNode = layer.nodeForSelfOrAncestor();
162c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        if (!domNode)
163c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)            return;
164c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        var contextMenu = new WebInspector.ContextMenu(event);
165c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        contextMenu.appendApplicableItems(domNode);
166c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        contextMenu.show();
167c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    },
168c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
169e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    __proto__: WebInspector.Object.prototype
170e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)}
171e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
172e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)/**
173e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)  * @constructor
174d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)  * @param {!WebInspector.LayerTreeOutline} tree
175a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)  * @param {!WebInspector.Layer} layer
176e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)  * @extends {TreeElement}
177e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)  */
178e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)WebInspector.LayerTreeElement = function(tree, layer)
179e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles){
180e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    TreeElement.call(this, "", layer);
181d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    this._treeOutline = tree;
182e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    this._update();
183e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)}
184e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
185e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)WebInspector.LayerTreeElement.prototype = {
186e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    onattach: function()
187e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    {
188e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        var selection = document.createElement("div");
189e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        selection.className = "selection";
190e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        this.listItemElement.insertBefore(selection, this.listItemElement.firstChild);
191e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    },
192e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
193e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    _update: function()
194e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    {
195a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        var layer = /** @type {!WebInspector.Layer} */ (this.representedObject);
196a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        var node = layer.nodeForSelfOrAncestor();
197e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        var title = document.createDocumentFragment();
198e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        title.createChild("div", "selection");
1997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        title.createTextChild(node ? WebInspector.DOMPresentationUtils.simpleSelector(node) : "#" + layer.id());
200e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        var details = title.createChild("span", "dimmed");
201e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        details.textContent = WebInspector.UIString(" (%d × %d)", layer.width(), layer.height());
202e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        this.title = title;
203e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    },
204e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
205a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    /**
206a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @override
20709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {boolean}
208a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     */
209e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    onselect: function()
210e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    {
211d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        this._treeOutline._selectedNodeChanged(this);
212a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        return false;
213e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    },
214e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
215e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    /**
216e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)     * @param {boolean} hovered
217e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)     */
218e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    setHovered: function(hovered)
219e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    {
220d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this.listItemElement.classList.toggle("hovered", hovered);
221e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    },
222e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
223e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    __proto__: TreeElement.prototype
224e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)}
225