Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / devtools / front_end / ui / DockController.js
1 /*
2  * Copyright (C) 2012 Google 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 are
6  * met:
7  *
8  *     * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *     * Redistributions in binary form must reproduce the above
11  * copyright notice, this list of conditions and the following disclaimer
12  * in the documentation and/or other materials provided with the
13  * distribution.
14  *     * Neither the name of Google Inc. nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 /**
32  * @constructor
33  * @extends {WebInspector.Object}
34  * @param {boolean} canDock
35  */
36 WebInspector.DockController = function(canDock)
37 {
38     this._canDock = canDock;
39     if (!canDock) {
40         this._dockSide = WebInspector.DockController.State.Undocked;
41         this._updateUI();
42         return;
43     }
44
45     WebInspector.settings.currentDockState = WebInspector.settings.createSetting("currentDockState", "");
46     WebInspector.settings.lastDockState = WebInspector.settings.createSetting("lastDockState", "");
47     var states = [WebInspector.DockController.State.DockedToBottom, WebInspector.DockController.State.Undocked, WebInspector.DockController.State.DockedToRight];
48     var titles = [WebInspector.UIString("Dock to main window."), WebInspector.UIString("Undock into separate window."), WebInspector.UIString("Dock to main window.")];
49     if (WebInspector.experimentsSettings.dockToLeft.isEnabled()) {
50         states.push(WebInspector.DockController.State.DockedToLeft);
51         titles.push(WebInspector.UIString("Dock to main window."));
52     }
53     this._dockToggleButton = new WebInspector.StatusBarStatesSettingButton(
54         "dock-status-bar-item",
55         states,
56         titles,
57         WebInspector.settings.currentDockState,
58         WebInspector.settings.lastDockState,
59         this._dockSideChanged.bind(this));
60 }
61
62 WebInspector.DockController.State = {
63     DockedToBottom: "bottom",
64     DockedToRight: "right",
65     DockedToLeft: "left",
66     Undocked: "undocked"
67 }
68
69 WebInspector.DockController.Events = {
70     DockSideChanged: "DockSideChanged"
71 }
72
73 WebInspector.DockController.prototype = {
74     /**
75      * @return {?Element}
76      */
77     get element()
78     {
79         return this._canDock ? this._dockToggleButton.element : null;
80     },
81
82     /**
83      * @return {string}
84      */
85     dockSide: function()
86     {
87         return this._dockSide;
88     },
89
90     /**
91      * @return {boolean}
92      */
93     canDock: function()
94     {
95         return this._canDock;
96     },
97
98     /**
99      * @return {boolean}
100      */
101     isVertical: function()
102     {
103         return this._dockSide === WebInspector.DockController.State.DockedToRight || this._dockSide === WebInspector.DockController.State.DockedToLeft;
104     },
105
106     /**
107      * @param {string} dockSide
108      */
109     _dockSideChanged: function(dockSide)
110     {
111         if (this._dockSide === dockSide)
112             return;
113
114         this._dockSide = dockSide;
115         this._updateUI();
116         this.dispatchEventToListeners(WebInspector.DockController.Events.DockSideChanged, this._dockSide);
117
118         if (this._canDock)
119             InspectorFrontendHost.setIsDocked(dockSide !== WebInspector.DockController.State.Undocked);
120     },
121
122     _updateUI: function()
123     {
124         var body = document.body;
125         switch (this._dockSide) {
126         case WebInspector.DockController.State.DockedToBottom:
127             body.classList.remove("undocked");
128             body.classList.remove("dock-to-right");
129             body.classList.remove("dock-to-left");
130             body.classList.add("dock-to-bottom");
131             break;
132         case WebInspector.DockController.State.DockedToRight:
133             body.classList.remove("undocked");
134             body.classList.add("dock-to-right");
135             body.classList.remove("dock-to-left");
136             body.classList.remove("dock-to-bottom");
137             break;
138         case WebInspector.DockController.State.DockedToLeft:
139             body.classList.remove("undocked");
140             body.classList.remove("dock-to-right");
141             body.classList.add("dock-to-left");
142             body.classList.remove("dock-to-bottom");
143             break;
144         case WebInspector.DockController.State.Undocked:
145             body.classList.add("undocked");
146             body.classList.remove("dock-to-right");
147             body.classList.remove("dock-to-left");
148             body.classList.remove("dock-to-bottom");
149             break;
150         }
151     },
152
153     __proto__: WebInspector.Object.prototype
154 }
155
156 /**
157  * @type {!WebInspector.DockController}
158  */
159 WebInspector.dockController;