Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / devtools / front_end / components / Panel.js
1 /*
2  * Copyright (C) 2007, 2008 Apple Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1.  Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer.
10  * 2.  Redistributions in binary form must reproduce the above copyright
11  *     notice, this list of conditions and the following disclaimer in the
12  *     documentation and/or other materials provided with the distribution.
13  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14  *     its contributors may be used to endorse or promote products derived
15  *     from this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28
29 /**
30  * @extends {WebInspector.VBox}
31  * @constructor
32  */
33 WebInspector.Panel = function(name)
34 {
35     WebInspector.VBox.call(this);
36
37     this.element.classList.add("panel");
38     this.element.classList.add(name);
39     this._panelName = name;
40
41     this._shortcuts = /** !Object.<number, function(Event=):boolean> */ ({});
42 }
43
44 // Should by in sync with style declarations.
45 WebInspector.Panel.counterRightMargin = 25;
46
47 WebInspector.Panel.prototype = {
48     get name()
49     {
50         return this._panelName;
51     },
52
53     reset: function()
54     {
55     },
56
57     /**
58      * @return {!Element}
59      */
60     defaultFocusedElement: function()
61     {
62         return this.element;
63     },
64
65     /**
66      * @return {?WebInspector.SearchableView}
67      */
68     searchableView: function()
69     {
70         return null;
71     },
72
73     /**
74      * @param {string} text
75      */
76     replaceSelectionWith: function(text)
77     {
78     },
79
80     /**
81      * @param {string} query
82      * @param {string} text
83      */
84     replaceAllWith: function(query, text)
85     {
86     },
87
88     /**
89      * @return {!Array.<!Element>}
90      */
91     elementsToRestoreScrollPositionsFor: function()
92     {
93         return [];
94     },
95
96     /**
97      * @param {!KeyboardEvent} event
98      */
99     handleShortcut: function(event)
100     {
101         var shortcutKey = WebInspector.KeyboardShortcut.makeKeyFromEvent(event);
102         var handler = this._shortcuts[shortcutKey];
103         if (handler && handler(event)) {
104             event.handled = true;
105             return;
106         }
107
108         var searchableView = this.searchableView();
109         if (!searchableView)
110             return;
111
112         function handleSearchShortcuts(shortcuts, handler)
113         {
114             for (var i = 0; i < shortcuts.length; ++i) {
115                 if (shortcuts[i].key !== shortcutKey)
116                     continue;
117                 return handler.call(searchableView);
118             }
119             return false;
120         }
121
122         if (handleSearchShortcuts(WebInspector.SearchableView.findShortcuts(), searchableView.handleFindShortcut))
123             event.handled = true;
124         else if (handleSearchShortcuts(WebInspector.SearchableView.cancelSearchShortcuts(), searchableView.handleCancelSearchShortcut))
125             event.handled = true;
126     },
127
128     /**
129      * @param {!Array.<!WebInspector.KeyboardShortcut.Descriptor>} keys
130      * @param {function(!Event=):boolean} handler
131      */
132     registerShortcuts: function(keys, handler)
133     {
134         for (var i = 0; i < keys.length; ++i)
135             this._shortcuts[keys[i].key] = handler;
136     },
137
138     __proto__: WebInspector.VBox.prototype
139 }
140
141 /**
142  * @extends {WebInspector.Panel}
143  * @param {string} name
144  * @param {number=} defaultWidth
145  * @constructor
146  */
147 WebInspector.PanelWithSidebarTree = function(name, defaultWidth)
148 {
149     WebInspector.Panel.call(this, name);
150
151     this._panelSplitView = new WebInspector.SplitView(true, false, this._panelName + "PanelSplitViewState", defaultWidth || 200);
152     this._panelSplitView.show(this.element);
153
154     var sidebarView = new WebInspector.VBox();
155     sidebarView.setMinimumSize(100, 25);
156     sidebarView.show(this._panelSplitView.sidebarElement());
157
158     this._sidebarElement = sidebarView.element;
159     this._sidebarElement.classList.add("sidebar");
160     var sidebarTreeElement = this._sidebarElement.createChild("ol", "sidebar-tree");
161     this.sidebarTree = new TreeOutline(sidebarTreeElement);
162 }
163
164 WebInspector.PanelWithSidebarTree.prototype = {
165     /**
166      * @return {!Element}
167      */
168     sidebarElement: function()
169     {
170         return this._sidebarElement;
171     },
172
173     /**
174      * @return {!Element} element
175      */
176     mainElement: function()
177     {
178         return this._panelSplitView.mainElement();
179     },
180
181     /**
182      * @return {!Element}
183      */
184     defaultFocusedElement: function()
185     {
186         return this.sidebarTree.element || this.element;
187     },
188
189     __proto__: WebInspector.Panel.prototype
190 }
191
192 /**
193  * @interface
194  */
195 WebInspector.PanelDescriptor = function()
196 {
197 }
198
199 WebInspector.PanelDescriptor.prototype = {
200     /**
201      * @return {string}
202      */
203     name: function() {},
204
205     /**
206      * @return {string}
207      */
208     title: function() {},
209
210     /**
211      * @return {!WebInspector.Panel}
212      */
213     panel: function() {}
214 }
215
216 /**
217  * @constructor
218  * @param {!Runtime.Extension} extension
219  * @implements {WebInspector.PanelDescriptor}
220  */
221 WebInspector.RuntimeExtensionPanelDescriptor = function(extension)
222 {
223     this._name = extension.descriptor()["name"];
224     this._title = WebInspector.UIString(extension.descriptor()["title"]);
225     this._extension = extension;
226 }
227
228 WebInspector.RuntimeExtensionPanelDescriptor.prototype = {
229     /**
230      * @return {string}
231      */
232     name: function()
233     {
234         return this._name;
235     },
236
237     /**
238      * @return {string}
239      */
240     title: function()
241     {
242         return this._title;
243     },
244
245     /**
246      * @return {!WebInspector.Panel}
247      */
248     panel: function()
249     {
250         return /** @type {!WebInspector.Panel} */ (this._extension.instance());
251     }
252 }