1926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/*
2926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved.
3926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *
4926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without
5926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * modification, are permitted provided that the following conditions are
6926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * met:
7926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *
8926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *     * Redistributions of source code must retain the above copyright
9926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * notice, this list of conditions and the following disclaimer.
10926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *     * Redistributions in binary form must reproduce the above
11926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer
12926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * in the documentation and/or other materials provided with the
13926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * distribution.
14926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *     * Neither the name of Google Inc. nor the names of its
15926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * contributors may be used to endorse or promote products derived from
16926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * this software without specific prior written permission.
17926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *
18926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */
30926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
31926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/**
32926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor
33926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} prefix
34926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */
35926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.OverviewGrid = function(prefix)
36926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
37926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this.element = document.createElement("div");
38926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this.element.id = prefix + "-overview-container";
39926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
40926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._grid = new WebInspector.TimelineGrid();
41926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._grid.element.id = prefix + "-overview-grid";
42926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._grid.setScrollAndDividerTop(0, 0);
43926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
44926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this.element.appendChild(this._grid.element);
45926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
46926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._window = new WebInspector.OverviewGrid.Window(this.element, this._grid.dividersLabelBarElement);
47926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
48926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
49926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.OverviewGrid.prototype = {
50926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
51926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {number}
52926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
53926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    clientWidth: function()
54926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
55926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return this.element.clientWidth;
56926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
57926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
58926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
59926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {!WebInspector.TimelineGrid.Calculator} calculator
60926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
61926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    updateDividers: function(calculator)
62926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
63926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._grid.updateDividers(calculator);
64926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
66926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
67a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<!Element>} dividers
68926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
69926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    addEventDividers: function(dividers)
70926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
71926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._grid.addEventDividers(dividers);
72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
73926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
74926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    removeEventDividers: function()
75926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
76926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._grid.removeEventDividers();
77926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
78926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
79926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
80926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {?number} start
81926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {?number} end
82926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
83926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    setWindowPosition: function(start, end)
84926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
85926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._window._setWindowPosition(start, end);
86926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
87926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
88926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    reset: function()
89926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
90926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._window.reset();
91926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
92926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
93926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
94926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {number}
95926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
96926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    windowLeft: function()
97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
98926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return this._window.windowLeft;
99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
100926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
101926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
102926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {number}
103926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    windowRight: function()
105926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
106926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return this._window.windowRight;
107926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
108926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
109926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
110926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {number} left
111926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {number} right
112926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
113926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    setWindow: function(left, right)
114926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
115926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._window._setWindow(left, right);
116926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
117926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
118926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
119926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {string} eventType
120a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!WebInspector.Event)} listener
121a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Object=} thisObject
122926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
123926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    addEventListener: function(eventType, listener, thisObject)
124926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
125926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._window.addEventListener(eventType, listener, thisObject);
126926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
127926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
128926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
129926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {!number} zoomFactor
130926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {!number} referencePoint
131926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
132926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    zoom: function(zoomFactor, referencePoint)
133926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
134926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._window._zoom(zoomFactor, referencePoint);
13593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    },
13693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
13793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    /**
13893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     * @param {boolean} enabled
13993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     */
14093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    setResizeEnabled: function(enabled)
14193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    {
14293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        this._window._setEnabled(!!enabled);
143926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
144926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
145926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
146926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
147e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben MurdochWebInspector.OverviewGrid.MinSelectableSize = 14;
148926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
149926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.OverviewGrid.WindowScrollSpeedFactor = .3;
150926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
151926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.OverviewGrid.ResizerOffset = 3.5; // half pixel because offset values are not rounded but ceiled
152926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
153926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/**
154926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor
155926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @extends {WebInspector.Object}
156a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Element} parentElement
157c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {!Element=} dividersLabelBarElement
158926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */
159926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.OverviewGrid.Window = function(parentElement, dividersLabelBarElement)
160926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
161926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._parentElement = parentElement;
162926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
16309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    WebInspector.installDragHandle(this._parentElement, this._startWindowSelectorDragging.bind(this), this._windowSelectorDragging.bind(this), this._endWindowSelectorDragging.bind(this), "ew-resize", null);
164c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    if (dividersLabelBarElement)
165c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        WebInspector.installDragHandle(dividersLabelBarElement, this._startWindowDragging.bind(this), this._windowDragging.bind(this), null, "move");
166926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
167926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this.windowLeft = 0.0;
168926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this.windowRight = 1.0;
169926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
170926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._parentElement.addEventListener("mousewheel", this._onMouseWheel.bind(this), true);
171926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._parentElement.addEventListener("dblclick", this._resizeWindowMaximum.bind(this), true);
172926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
17393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    this._overviewWindowElement = parentElement.createChild("div", "overview-grid-window");
1747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    this._overviewWindowElement.appendChild(WebInspector.View.createStyleElement("overviewGrid.css"));
17593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    this._overviewWindowBordersElement = parentElement.createChild("div", "overview-grid-window-rulers");
17693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    parentElement.createChild("div", "overview-grid-dividers-background");
177926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
17893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    this._leftResizeElement = parentElement.createChild("div", "overview-grid-window-resizer");
179926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._leftResizeElement.style.left = 0;
180926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    WebInspector.installDragHandle(this._leftResizeElement, this._resizerElementStartDragging.bind(this), this._leftResizeElementDragging.bind(this), null, "ew-resize");
181926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
18293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    this._rightResizeElement = parentElement.createChild("div", "overview-grid-window-resizer overview-grid-window-resizer-right");
183926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._rightResizeElement.style.right = 0;
184926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    WebInspector.installDragHandle(this._rightResizeElement, this._resizerElementStartDragging.bind(this), this._rightResizeElementDragging.bind(this), null, "ew-resize");
18593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    this._setEnabled(true);
186926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
187926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
188926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.OverviewGrid.Events = {
189926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    WindowChanged: "WindowChanged"
190926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
191926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
192926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.OverviewGrid.Window.prototype = {
193926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    reset: function()
194926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
195926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this.windowLeft = 0.0;
196926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this.windowRight = 1.0;
197926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
198926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._overviewWindowElement.style.left = "0%";
199926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._overviewWindowElement.style.width = "100%";
200926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._overviewWindowBordersElement.style.left = "0%";
201926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._overviewWindowBordersElement.style.right = "0%";
202926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._leftResizeElement.style.left = "0%";
203926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._rightResizeElement.style.left = "100%";
20493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        this._setEnabled(true);
20593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    },
20693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
20793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    /**
20893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     * @param {boolean} enabled
20993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     */
21093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    _setEnabled: function(enabled)
21193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    {
21293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        enabled = !!enabled;
21393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        if (this._enabled === enabled)
21493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)            return;
21593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        this._enabled = enabled;
216926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
217926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
218926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
219a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Event} event
220926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
221926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _resizerElementStartDragging: function(event)
222926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
22393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        if (!this._enabled)
22493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)            return false;
225926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._resizerParentOffsetLeft = event.pageX - event.offsetX - event.target.offsetLeft;
226926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        event.preventDefault();
227926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return true;
228926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
229926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
230926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
231a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Event} event
232926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
233926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _leftResizeElementDragging: function(event)
234926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
235926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._resizeWindowLeft(event.pageX - this._resizerParentOffsetLeft);
236926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        event.preventDefault();
237926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
238926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
239926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
240a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Event} event
241926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
242926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _rightResizeElementDragging: function(event)
243926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
244926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._resizeWindowRight(event.pageX - this._resizerParentOffsetLeft);
245926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        event.preventDefault();
246926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
247926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
248926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
249a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Event} event
250926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {boolean}
251926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
252926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _startWindowSelectorDragging: function(event)
253926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
25493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        if (!this._enabled)
25593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)            return false;
25607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this._offsetLeft = this._parentElement.totalOffsetLeft();
25707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        var position = event.x - this._offsetLeft;
258926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._overviewWindowSelector = new WebInspector.OverviewGrid.WindowSelector(this._parentElement, position);
259926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return true;
260926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
261926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
262926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
263a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Event} event
264926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
265926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _windowSelectorDragging: function(event)
266926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
26707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this._overviewWindowSelector._updatePosition(event.x - this._offsetLeft);
268926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        event.preventDefault();
269926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
270926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
271926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
272a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Event} event
273926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
274926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _endWindowSelectorDragging: function(event)
275926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
27607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        var window = this._overviewWindowSelector._close(event.x - this._offsetLeft);
277926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        delete this._overviewWindowSelector;
278926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (window.end === window.start) { // Click, not drag.
279926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            var middle = window.end;
280926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            window.start = Math.max(0, middle - WebInspector.OverviewGrid.MinSelectableSize / 2);
281926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            window.end = Math.min(this._parentElement.clientWidth, middle + WebInspector.OverviewGrid.MinSelectableSize / 2);
282926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        } else if (window.end - window.start < WebInspector.OverviewGrid.MinSelectableSize) {
283926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            if (this._parentElement.clientWidth - window.end > WebInspector.OverviewGrid.MinSelectableSize)
284926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                window.end = window.start + WebInspector.OverviewGrid.MinSelectableSize;
285926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            else
286926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                window.start = window.end - WebInspector.OverviewGrid.MinSelectableSize;
287926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
288926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._setWindowPosition(window.start, window.end);
289926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
290926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
291926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
292a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Event} event
293926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @return {boolean}
294926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
295926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _startWindowDragging: function(event)
296926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
29753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._dragStartPoint = event.pageX;
29853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._dragStartLeft = this.windowLeft;
29953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._dragStartRight = this.windowRight;
300926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return true;
301926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
302926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
303926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
304a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Event} event
305926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
306926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _windowDragging: function(event)
307926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
308926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        event.preventDefault();
30953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        var delta = (event.pageX - this._dragStartPoint) / this._parentElement.clientWidth;
31053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        if (this._dragStartLeft + delta < 0)
31153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            delta = -this._dragStartLeft;
312926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
31353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        if (this._dragStartRight + delta > 1)
31453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            delta = 1 - this._dragStartRight;
315926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
31653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._setWindow(this._dragStartLeft + delta, this._dragStartRight + delta);
317926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
318926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
319926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
320926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {number} start
321926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
322926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _resizeWindowLeft: function(start)
323926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
324926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        // Glue to edge.
325926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (start < 10)
326926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            start = 0;
327926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        else if (start > this._rightResizeElement.offsetLeft -  4)
328926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            start = this._rightResizeElement.offsetLeft - 4;
329926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._setWindowPosition(start, null);
330926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
331926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
332926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
333926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {number} end
334926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
335926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _resizeWindowRight: function(end)
336926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
337926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        // Glue to edge.
338926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (end > this._parentElement.clientWidth - 10)
339926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            end = this._parentElement.clientWidth;
340926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        else if (end < this._leftResizeElement.offsetLeft + WebInspector.OverviewGrid.MinSelectableSize)
341926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            end = this._leftResizeElement.offsetLeft + WebInspector.OverviewGrid.MinSelectableSize;
342926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._setWindowPosition(null, end);
343926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
344926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
345926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _resizeWindowMaximum: function()
346926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
347926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._setWindowPosition(0, this._parentElement.clientWidth);
348926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
349926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
350926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
35153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     * @param {number} windowLeft
35253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     * @param {number} windowRight
353926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
35453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    _setWindow: function(windowLeft, windowRight)
355926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
356591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        var left = windowLeft;
357591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        var right = windowRight;
358591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        var width = windowRight - windowLeft;
359591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
360591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        // We allow actual time window to be arbitrarily small but don't want the UI window to be too small.
361e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        var widthInPixels = width * this._parentElement.clientWidth;
362591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        var minWidthInPixels = WebInspector.OverviewGrid.MinSelectableSize / 2;
363591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        if (widthInPixels < minWidthInPixels) {
364591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            var factor = minWidthInPixels / widthInPixels;
365591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            left = ((windowRight + windowLeft) - width * factor) / 2;
366591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            right = ((windowRight + windowLeft) + width * factor) / 2;
367591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        }
368591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
36953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this.windowLeft = windowLeft;
370591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        this._leftResizeElement.style.left = left * 100 + "%";
37153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this.windowRight = windowRight;
372591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        this._rightResizeElement.style.left = right * 100 + "%";
37353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
374591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        this._overviewWindowElement.style.left = left * 100 + "%";
375e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        this._overviewWindowBordersElement.style.left = left * 100 + "%";
376e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        this._overviewWindowElement.style.width = (right - left) * 100 + "%";
377e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        this._overviewWindowBordersElement.style.right = (1 - right) * 100 + "%";
37853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
37953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this.dispatchEventToListeners(WebInspector.OverviewGrid.Events.WindowChanged);
380926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
381926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
382926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
383926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {?number} start
384926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {?number} end
385926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
386926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _setWindowPosition: function(start, end)
387926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
388926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var clientWidth = this._parentElement.clientWidth;
38953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        var windowLeft = typeof start === "number" ? start / clientWidth : this.windowLeft;
39053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        var windowRight = typeof end === "number" ? end / clientWidth : this.windowRight;
39153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._setWindow(windowLeft, windowRight);
392926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
393926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
394926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
395197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @param {!Event} event
396926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
397926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _onMouseWheel: function(event)
398926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
399926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (typeof event.wheelDeltaY === "number" && event.wheelDeltaY) {
40053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            const zoomFactor = 1.1;
40153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            const mouseWheelZoomSpeed = 1 / 120;
40253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
40353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            var reference = event.offsetX / event.target.clientWidth;
40453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            this._zoom(Math.pow(zoomFactor, -event.wheelDeltaY * mouseWheelZoomSpeed), reference);
405926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
406926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (typeof event.wheelDeltaX === "number" && event.wheelDeltaX) {
40753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            var offset = Math.round(event.wheelDeltaX * WebInspector.OverviewGrid.WindowScrollSpeedFactor);
408926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            var windowLeft = this._leftResizeElement.offsetLeft + WebInspector.OverviewGrid.ResizerOffset;
40953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            var windowRight = this._rightResizeElement.offsetLeft + WebInspector.OverviewGrid.ResizerOffset;
41053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
41153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            if (windowLeft - offset < 0)
41253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)                offset = windowLeft;
41353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
41453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            if (windowRight - offset > this._parentElement.clientWidth)
41553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)                offset = windowRight - this._parentElement.clientWidth;
41653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
41753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            this._setWindowPosition(windowLeft - offset, windowRight - offset);
41853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
419926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            event.preventDefault();
420926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
421926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
422926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
423926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
424926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {number} factor
42553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     * @param {number} reference
426926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
42753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    _zoom: function(factor, reference)
428926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
42953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        var left = this.windowLeft;
43053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        var right = this.windowRight;
43153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        var windowSize = right - left;
43253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        var newWindowSize = factor * windowSize;
433591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        if (newWindowSize > 1) {
434591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            newWindowSize = 1;
435591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            factor = newWindowSize / windowSize;
436591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        }
43753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        left = reference + (left - reference) * factor;
43853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        left = Number.constrain(left, 0, 1 - newWindowSize);
43953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
44053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        right = reference + (right - reference) * factor;
44153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        right = Number.constrain(right, newWindowSize, 1);
44253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._setWindow(left, right);
443926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
444926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
445926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    __proto__: WebInspector.Object.prototype
446926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
447926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
448926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/**
449926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor
450926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */
451926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.OverviewGrid.WindowSelector = function(parent, position)
452926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
453926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._startPosition = position;
454926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._width = parent.offsetWidth;
455926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._windowSelector = document.createElement("div");
456926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._windowSelector.className = "overview-grid-window-selector";
457926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._windowSelector.style.left = this._startPosition + "px";
458926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this._windowSelector.style.right = this._width - this._startPosition + "px";
459926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    parent.appendChild(this._windowSelector);
460926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
461926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
462926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.OverviewGrid.WindowSelector.prototype = {
463926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _close: function(position)
464926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
465926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        position = Math.max(0, Math.min(position, this._width));
466591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        this._windowSelector.remove();
467926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return this._startPosition < position ? {start: this._startPosition, end: position} : {start: position, end: this._startPosition};
468926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
469926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
470926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    _updatePosition: function(position)
471926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
472926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        position = Math.max(0, Math.min(position, this._width));
473926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (position < this._startPosition) {
474926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this._windowSelector.style.left = position + "px";
475926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this._windowSelector.style.right = this._width - this._startPosition + "px";
476926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        } else {
477926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this._windowSelector.style.left = this._startPosition + "px";
478926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            this._windowSelector.style.right = this._width - position + "px";
479926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
480926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
481926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
482