1/*
2 * Copyright (C) 2007 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
29WebInspector.SidebarPane = function(title)
30{
31    this.element = document.createElement("div");
32    this.element.className = "pane";
33
34    this.titleElement = document.createElement("div");
35    this.titleElement.className = "title";
36    this.titleElement.tabIndex = 0;
37    this.titleElement.addEventListener("click", this.toggleExpanded.bind(this), false);
38    this.titleElement.addEventListener("keydown", this._onTitleKeyDown.bind(this), false);
39
40    this.bodyElement = document.createElement("div");
41    this.bodyElement.className = "body";
42
43    this.element.appendChild(this.titleElement);
44    this.element.appendChild(this.bodyElement);
45
46    this.title = title;
47    this.growbarVisible = false;
48    this.expanded = false;
49}
50
51WebInspector.SidebarPane.prototype = {
52    get title()
53    {
54        return this._title;
55    },
56
57    set title(x)
58    {
59        if (this._title === x)
60            return;
61        this._title = x;
62        this.titleElement.textContent = x;
63    },
64
65    get growbarVisible()
66    {
67        return this._growbarVisible;
68    },
69
70    set growbarVisible(x)
71    {
72        if (this._growbarVisible === x)
73            return;
74
75        this._growbarVisible = x;
76
77        if (x && !this._growbarElement) {
78            this._growbarElement = document.createElement("div");
79            this._growbarElement.className = "growbar";
80            this.element.appendChild(this._growbarElement);
81        } else if (!x && this._growbarElement) {
82            if (this._growbarElement.parentNode)
83                this._growbarElement.parentNode(this._growbarElement);
84            delete this._growbarElement;
85        }
86    },
87
88    get expanded()
89    {
90        return this._expanded;
91    },
92
93    set expanded(x)
94    {
95        if (x)
96            this.expand();
97        else
98            this.collapse();
99    },
100
101    expand: function()
102    {
103        if (this._expanded)
104            return;
105        this._expanded = true;
106        this.element.addStyleClass("expanded");
107        if (this.onexpand)
108            this.onexpand(this);
109    },
110
111    collapse: function()
112    {
113        if (!this._expanded)
114            return;
115        this._expanded = false;
116        this.element.removeStyleClass("expanded");
117        if (this.oncollapse)
118            this.oncollapse(this);
119    },
120
121    toggleExpanded: function()
122    {
123        this.expanded = !this.expanded;
124    },
125
126    _onTitleKeyDown: function(event)
127    {
128        if (isEnterKey(event) || event.keyCode === WebInspector.KeyboardShortcut.Keys.Space.code)
129            this.toggleExpanded();
130    }
131}
132
133WebInspector.SidebarPane.prototype.__proto__ = WebInspector.Object.prototype;
134