15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2007, 2008 Apple Inc.  All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Joseph Pecoraro
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1.  Redistributions of source code must retain the above copyright
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     notice, this list of conditions and the following disclaimer.
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2.  Redistributions in binary form must reproduce the above copyright
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     notice, this list of conditions and the following disclaimer in the
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     documentation and/or other materials provided with the distribution.
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     its contributors may be used to endorse or promote products derived
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     from this software without specific prior written permission.
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
32d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.VBox}
3309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {!WebInspector.SplitView} splitView
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
3509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.Drawer = function(splitView)
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
37d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    WebInspector.VBox.call(this);
3809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    this.element.id = "drawer-contents";
3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
4009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    this._splitView = splitView;
4109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    splitView.hideDefaultResizer();
4209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    this.show(splitView.sidebarElement());
43d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
44bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    this._toggleDrawerButton = new WebInspector.StatusBarButton(WebInspector.UIString("Show drawer."), "console-status-bar-item");
45bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    this._toggleDrawerButton.addEventListener("click", this.toggle, this);
4653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
47bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    this._tabbedPane = new WebInspector.TabbedPane();
48d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    this._tabbedPane.element.id = "drawer-tabbed-pane";
49bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    this._tabbedPane.closeableTabs = false;
50bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    this._tabbedPane.addEventListener(WebInspector.TabbedPane.EventTypes.TabSelected, this._tabSelected, this);
51d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    new WebInspector.ExtensibleTabbedPaneController(this._tabbedPane, "drawer-view");
52d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
5309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    splitView.installResizer(this._tabbedPane.headerElement());
54a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    this._lastSelectedViewSetting = WebInspector.settings.createSetting("WebInspector.Drawer.lastSelectedView", "console");
55c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    this._tabbedPane.show(this.element);
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.Drawer.prototype = {
5909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
60197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @return {!WebInspector.StatusBarButton}
6109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
62197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    toggleButton: function()
63e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    {
64197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        return this._toggleDrawerButton;
65e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    },
66e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
67bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    /**
68bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)     * @param {string} id
69bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)     */
70f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    closeView: function(id)
71bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    {
72f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        this._tabbedPane.closeTab(id);
73f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    },
74f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)
75f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    /**
76f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)     * @param {string} id
7709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {boolean=} immediate
78f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)     */
7909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    showView: function(id, immediate)
80f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    {
8109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        if (!this._tabbedPane.hasTab(id)) {
8209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            // Hidden tab.
8309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            this._innerShow(immediate);
8409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            return;
8509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        }
8609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._innerShow(immediate);
87f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        this._tabbedPane.selectTab(id, true);
8809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        // In case this id is already selected, anyways persist it as the last saved value.
8909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._lastSelectedViewSetting.set(id);
90bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    },
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
92bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    /**
93bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)     * @param {string} id
94bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)     * @param {string} title
95a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.View} view
96bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)     */
97bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    showCloseableView: function(id, title, view)
98bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    {
99f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        if (!this._tabbedPane.hasTab(id)) {
100bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)            this._tabbedPane.appendTab(id, title, view, undefined, false, true);
101f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        } else {
102f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            this._tabbedPane.changeTabView(id, view);
103f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            this._tabbedPane.changeTabTitle(id, title);
104f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        }
105bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)        this._innerShow();
106bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)        this._tabbedPane.selectTab(id, true);
107bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    },
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    showDrawer: function()
110bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    {
11109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this.showView(this._lastSelectedViewSetting.get());
112bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    },
113bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)
114d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    wasShown: function()
115d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
116d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this.showView(this._lastSelectedViewSetting.get());
117d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this._toggleDrawerButton.toggled = true;
118d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this._toggleDrawerButton.title = WebInspector.UIString("Hide drawer.");
119d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
120d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
121d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    willHide: function()
122a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    {
123d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this._toggleDrawerButton.toggled = false;
124d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this._toggleDrawerButton.title = WebInspector.UIString("Show drawer.");
125a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    },
126a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
127bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    /**
12809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {boolean=} immediate
129bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)     */
13009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    _innerShow: function(immediate)
131bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    {
132d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        if (this.isShowing())
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
13409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
13509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._splitView.showBoth(!immediate);
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        if (this._visibleView())
13809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            this._visibleView().focus();
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    closeDrawer: function()
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
143d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        if (!this.isShowing())
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebInspector.restoreFocusFromElement(this.element);
14709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._splitView.hideSidebar(true);
148591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    },
149591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
150591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    /**
15110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch     * @return {?WebInspector.View} view
152bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)     */
153bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    _visibleView: function()
154bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    {
155bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)        return this._tabbedPane.visibleView;
156bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    },
157bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)
15809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
15909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {!WebInspector.Event} event
16009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
16109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    _tabSelected: function(event)
162bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    {
163bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)        var tabId = this._tabbedPane.selectedTabId;
16410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch        if (tabId && event.data["isUserGesture"] && !this._tabbedPane.isTabCloseable(tabId))
165a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            this._lastSelectedViewSetting.set(tabId);
166bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    },
167bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)
168bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    toggle: function()
169bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    {
170bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)        if (this._toggleDrawerButton.toggled)
17109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            this.closeDrawer();
172bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)        else
17309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            this.showDrawer();
174bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    },
175bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)
176bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    /**
177bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)     * @return {boolean}
178bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)     */
179bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    visible: function()
180bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    {
181bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)        return this._toggleDrawerButton.toggled;
18251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    },
18351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)
18451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    /**
18510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch     * @return {?string}
18651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)     */
18751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    selectedViewId: function()
18851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    {
18951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        return this._tabbedPane.selectedTabId;
19009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    },
19109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
192d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    initialPanelShown: function()
193d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
194d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this._initialPanelWasShown = true;
19509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    },
19609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
197d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    __proto__: WebInspector.VBox.prototype
19809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
19909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
20009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)/**
20109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @interface
20209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */
20309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.Drawer.ViewFactory = function()
20409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
20509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
20609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
20709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.Drawer.ViewFactory.prototype = {
20809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
20909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {!WebInspector.View}
21009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
21109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    createView: function() {}
21209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
21309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
21409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)/**
21509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @constructor
21609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @implements {WebInspector.Drawer.ViewFactory}
21709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {function(new:T)} constructor
21809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @template T
21909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */
22009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.Drawer.SingletonViewFactory = function(constructor)
22109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
22209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    this._constructor = constructor;
22309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
22409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
22509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.Drawer.SingletonViewFactory.prototype = {
22609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
22709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {!WebInspector.View}
22809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
22909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    createView: function()
23009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
23109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        if (!this._instance)
23209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            this._instance = /** @type {!WebInspector.View} */(new this._constructor());
23309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return this._instance;
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
236