| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| /** |
| * @implements {Common.App} |
| * @implements {SDK.SDKModelObserver<!SDK.ScreenCaptureModel>} |
| * @unrestricted |
| */ |
| export default class ScreencastApp { |
| constructor() { |
| this._enabledSetting = Common.settings.createSetting('screencastEnabled', true); |
| this._toggleButton = new UI.ToolbarToggle(Common.UIString('Toggle screencast'), 'largeicon-phone'); |
| this._toggleButton.setToggled(this._enabledSetting.get()); |
| this._toggleButton.setEnabled(false); |
| this._toggleButton.addEventListener(UI.ToolbarButton.Events.Click, this._toggleButtonClicked, this); |
| SDK.targetManager.observeModels(SDK.ScreenCaptureModel, this); |
| } |
| |
| /** |
| * @return {!Screencast.ScreencastApp} |
| */ |
| static _instance() { |
| if (!Screencast.ScreencastApp._appInstance) { |
| Screencast.ScreencastApp._appInstance = new Screencast.ScreencastApp(); |
| } |
| return Screencast.ScreencastApp._appInstance; |
| } |
| |
| /** |
| * @override |
| * @param {!Document} document |
| */ |
| presentUI(document) { |
| const rootView = new UI.RootView(); |
| |
| this._rootSplitWidget = new UI.SplitWidget(false, true, 'InspectorView.screencastSplitViewState', 300, 300); |
| this._rootSplitWidget.setVertical(true); |
| this._rootSplitWidget.setSecondIsSidebar(true); |
| this._rootSplitWidget.show(rootView.element); |
| this._rootSplitWidget.hideMain(); |
| |
| this._rootSplitWidget.setSidebarWidget(UI.inspectorView); |
| UI.inspectorView.setOwnerSplit(this._rootSplitWidget); |
| rootView.attachToDocument(document); |
| rootView.focus(); |
| } |
| |
| /** |
| * @override |
| * @param {!SDK.ScreenCaptureModel} screenCaptureModel |
| */ |
| modelAdded(screenCaptureModel) { |
| if (this._screenCaptureModel) { |
| return; |
| } |
| this._screenCaptureModel = screenCaptureModel; |
| this._toggleButton.setEnabled(true); |
| this._screencastView = new Screencast.ScreencastView(screenCaptureModel); |
| this._rootSplitWidget.setMainWidget(this._screencastView); |
| this._screencastView.initialize(); |
| this._onScreencastEnabledChanged(); |
| } |
| |
| /** |
| * @override |
| * @param {!SDK.ScreenCaptureModel} screenCaptureModel |
| */ |
| modelRemoved(screenCaptureModel) { |
| if (this._screenCaptureModel !== screenCaptureModel) { |
| return; |
| } |
| delete this._screenCaptureModel; |
| this._toggleButton.setEnabled(false); |
| this._screencastView.detach(); |
| delete this._screencastView; |
| this._onScreencastEnabledChanged(); |
| } |
| |
| _toggleButtonClicked() { |
| const enabled = !this._toggleButton.toggled(); |
| this._enabledSetting.set(enabled); |
| this._onScreencastEnabledChanged(); |
| } |
| |
| _onScreencastEnabledChanged() { |
| if (!this._rootSplitWidget) { |
| return; |
| } |
| const enabled = this._enabledSetting.get() && this._screencastView; |
| this._toggleButton.setToggled(enabled); |
| if (enabled) { |
| this._rootSplitWidget.showBoth(); |
| } else { |
| this._rootSplitWidget.hideMain(); |
| } |
| } |
| } |
| |
| /** |
| * @implements {UI.ToolbarItem.Provider} |
| * @unrestricted |
| */ |
| export class ToolbarButtonProvider { |
| /** |
| * @override |
| * @return {?UI.ToolbarItem} |
| */ |
| item() { |
| return Screencast.ScreencastApp._instance()._toggleButton; |
| } |
| } |
| |
| /** |
| * @implements {Common.AppProvider} |
| * @unrestricted |
| */ |
| export class ScreencastAppProvider { |
| /** |
| * @override |
| * @return {!Common.App} |
| */ |
| createApp() { |
| return Screencast.ScreencastApp._instance(); |
| } |
| } |
| |
| /* Legacy exported object */ |
| self.Screencast = self.Screencast || {}; |
| |
| /* Legacy exported object */ |
| Screencast = Screencast || {}; |
| |
| /** |
| * @constructor |
| */ |
| Screencast.ScreencastApp = ScreencastApp; |
| |
| /** |
| * @constructor |
| */ |
| Screencast.ScreencastApp.ToolbarButtonProvider = ToolbarButtonProvider; |
| |
| /** @type {!Screencast.ScreencastApp} */ |
| Screencast.ScreencastApp._appInstance; |
| |
| /** |
| * @constructor |
| */ |
| Screencast.ScreencastAppProvider = ScreencastAppProvider; |