diff options
Diffstat (limited to 'devtools/client/debugger/views/options-view.js')
-rw-r--r-- | devtools/client/debugger/views/options-view.js | 215 |
1 files changed, 215 insertions, 0 deletions
diff --git a/devtools/client/debugger/views/options-view.js b/devtools/client/debugger/views/options-view.js new file mode 100644 index 000000000..2fb5b0600 --- /dev/null +++ b/devtools/client/debugger/views/options-view.js @@ -0,0 +1,215 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +/* import-globals-from ../debugger-controller.js */ +/* import-globals-from ../debugger-view.js */ +/* import-globals-from ../utils.js */ +/* globals document, window */ +"use strict"; + +// A time interval sufficient for the options popup panel to finish hiding +// itself. +const POPUP_HIDDEN_DELAY = 100; // ms + +/** + * Functions handling the options UI. + */ +function OptionsView(DebuggerController, DebuggerView) { + dumpn("OptionsView was instantiated"); + + this.DebuggerController = DebuggerController; + this.DebuggerView = DebuggerView; + + this._toggleAutoPrettyPrint = this._toggleAutoPrettyPrint.bind(this); + this._togglePauseOnExceptions = this._togglePauseOnExceptions.bind(this); + this._toggleIgnoreCaughtExceptions = this._toggleIgnoreCaughtExceptions.bind(this); + this._toggleShowPanesOnStartup = this._toggleShowPanesOnStartup.bind(this); + this._toggleShowVariablesOnlyEnum = this._toggleShowVariablesOnlyEnum.bind(this); + this._toggleShowVariablesFilterBox = this._toggleShowVariablesFilterBox.bind(this); + this._toggleShowOriginalSource = this._toggleShowOriginalSource.bind(this); + this._toggleAutoBlackBox = this._toggleAutoBlackBox.bind(this); +} + +OptionsView.prototype = { + /** + * Initialization function, called when the debugger is started. + */ + initialize: function () { + dumpn("Initializing the OptionsView"); + + this._button = document.getElementById("debugger-options"); + this._autoPrettyPrint = document.getElementById("auto-pretty-print"); + this._pauseOnExceptionsItem = document.getElementById("pause-on-exceptions"); + this._ignoreCaughtExceptionsItem = document.getElementById("ignore-caught-exceptions"); + this._showPanesOnStartupItem = document.getElementById("show-panes-on-startup"); + this._showVariablesOnlyEnumItem = document.getElementById("show-vars-only-enum"); + this._showVariablesFilterBoxItem = document.getElementById("show-vars-filter-box"); + this._showOriginalSourceItem = document.getElementById("show-original-source"); + this._autoBlackBoxItem = document.getElementById("auto-black-box"); + + this._autoPrettyPrint.setAttribute("checked", Prefs.autoPrettyPrint); + this._pauseOnExceptionsItem.setAttribute("checked", Prefs.pauseOnExceptions); + this._ignoreCaughtExceptionsItem.setAttribute("checked", Prefs.ignoreCaughtExceptions); + this._showPanesOnStartupItem.setAttribute("checked", Prefs.panesVisibleOnStartup); + this._showVariablesOnlyEnumItem.setAttribute("checked", Prefs.variablesOnlyEnumVisible); + this._showVariablesFilterBoxItem.setAttribute("checked", Prefs.variablesSearchboxVisible); + this._showOriginalSourceItem.setAttribute("checked", Prefs.sourceMapsEnabled); + this._autoBlackBoxItem.setAttribute("checked", Prefs.autoBlackBox); + + this._addCommands(); + }, + + /** + * Destruction function, called when the debugger is closed. + */ + destroy: function () { + dumpn("Destroying the OptionsView"); + // Nothing to do here yet. + }, + + /** + * Add commands that XUL can fire. + */ + _addCommands: function () { + XULUtils.addCommands(document.getElementById("debuggerCommands"), { + toggleAutoPrettyPrint: () => this._toggleAutoPrettyPrint(), + togglePauseOnExceptions: () => this._togglePauseOnExceptions(), + toggleIgnoreCaughtExceptions: () => this._toggleIgnoreCaughtExceptions(), + toggleShowPanesOnStartup: () => this._toggleShowPanesOnStartup(), + toggleShowOnlyEnum: () => this._toggleShowVariablesOnlyEnum(), + toggleShowVariablesFilterBox: () => this._toggleShowVariablesFilterBox(), + toggleShowOriginalSource: () => this._toggleShowOriginalSource(), + toggleAutoBlackBox: () => this._toggleAutoBlackBox() + }); + }, + + /** + * Listener handling the 'gear menu' popup showing event. + */ + _onPopupShowing: function () { + this._button.setAttribute("open", "true"); + window.emit(EVENTS.OPTIONS_POPUP_SHOWING); + }, + + /** + * Listener handling the 'gear menu' popup hiding event. + */ + _onPopupHiding: function () { + this._button.removeAttribute("open"); + }, + + /** + * Listener handling the 'gear menu' popup hidden event. + */ + _onPopupHidden: function () { + window.emit(EVENTS.OPTIONS_POPUP_HIDDEN); + }, + + /** + * Listener handling the 'auto pretty print' menuitem command. + */ + _toggleAutoPrettyPrint: function () { + Prefs.autoPrettyPrint = + this._autoPrettyPrint.getAttribute("checked") == "true"; + }, + + /** + * Listener handling the 'pause on exceptions' menuitem command. + */ + _togglePauseOnExceptions: function () { + Prefs.pauseOnExceptions = + this._pauseOnExceptionsItem.getAttribute("checked") == "true"; + + this.DebuggerController.activeThread.pauseOnExceptions( + Prefs.pauseOnExceptions, + Prefs.ignoreCaughtExceptions); + }, + + _toggleIgnoreCaughtExceptions: function () { + Prefs.ignoreCaughtExceptions = + this._ignoreCaughtExceptionsItem.getAttribute("checked") == "true"; + + this.DebuggerController.activeThread.pauseOnExceptions( + Prefs.pauseOnExceptions, + Prefs.ignoreCaughtExceptions); + }, + + /** + * Listener handling the 'show panes on startup' menuitem command. + */ + _toggleShowPanesOnStartup: function () { + Prefs.panesVisibleOnStartup = + this._showPanesOnStartupItem.getAttribute("checked") == "true"; + }, + + /** + * Listener handling the 'show non-enumerables' menuitem command. + */ + _toggleShowVariablesOnlyEnum: function () { + let pref = Prefs.variablesOnlyEnumVisible = + this._showVariablesOnlyEnumItem.getAttribute("checked") == "true"; + + this.DebuggerView.Variables.onlyEnumVisible = pref; + }, + + /** + * Listener handling the 'show variables searchbox' menuitem command. + */ + _toggleShowVariablesFilterBox: function () { + let pref = Prefs.variablesSearchboxVisible = + this._showVariablesFilterBoxItem.getAttribute("checked") == "true"; + + this.DebuggerView.Variables.searchEnabled = pref; + }, + + /** + * Listener handling the 'show original source' menuitem command. + */ + _toggleShowOriginalSource: function () { + let pref = Prefs.sourceMapsEnabled = + this._showOriginalSourceItem.getAttribute("checked") == "true"; + + // Don't block the UI while reconfiguring the server. + window.once(EVENTS.OPTIONS_POPUP_HIDDEN, () => { + // The popup panel needs more time to hide after triggering onpopuphidden. + window.setTimeout(() => { + this.DebuggerController.reconfigureThread({ + useSourceMaps: pref, + autoBlackBox: Prefs.autoBlackBox + }); + }, POPUP_HIDDEN_DELAY); + }); + }, + + /** + * Listener handling the 'automatically black box minified sources' menuitem + * command. + */ + _toggleAutoBlackBox: function () { + let pref = Prefs.autoBlackBox = + this._autoBlackBoxItem.getAttribute("checked") == "true"; + + // Don't block the UI while reconfiguring the server. + window.once(EVENTS.OPTIONS_POPUP_HIDDEN, () => { + // The popup panel needs more time to hide after triggering onpopuphidden. + window.setTimeout(() => { + this.DebuggerController.reconfigureThread({ + useSourceMaps: Prefs.sourceMapsEnabled, + autoBlackBox: pref + }); + }, POPUP_HIDDEN_DELAY); + }); + }, + + _button: null, + _pauseOnExceptionsItem: null, + _showPanesOnStartupItem: null, + _showVariablesOnlyEnumItem: null, + _showVariablesFilterBoxItem: null, + _showOriginalSourceItem: null, + _autoBlackBoxItem: null +}; + +DebuggerView.Options = new OptionsView(DebuggerController, DebuggerView); |