123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- /* 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/. */
- "use strict";
- var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
- const { loader, require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
- const { XPCOMUtils } = require("resource://gre/modules/XPCOMUtils.jsm");
- const { EventTarget } = require("sdk/event/target");
- const { Task } = require("devtools/shared/task");
- const { Class } = require("sdk/core/heritage");
- const EventEmitter = require("devtools/shared/event-emitter");
- const DevToolsUtils = require("devtools/shared/DevToolsUtils");
- const Services = require("Services");
- const { gDevTools } = require("devtools/client/framework/devtools");
- const { LocalizationHelper } = require("devtools/shared/l10n");
- const { ViewHelpers } = require("devtools/client/shared/widgets/view-helpers");
- const STRINGS_URI = "devtools/client/locales/webaudioeditor.properties";
- const L10N = new LocalizationHelper(STRINGS_URI);
- loader.lazyRequireGetter(this, "LineGraphWidget",
- "devtools/client/shared/widgets/LineGraphWidget");
- // `AUDIO_NODE_DEFINITION` defined in the controller's initialization,
- // which describes all the properties of an AudioNode
- var AUDIO_NODE_DEFINITION;
- // Override DOM promises with Promise.jsm helpers
- const { defer, all } = require("promise");
- /* Events fired on `window` to indicate state or actions*/
- const EVENTS = {
- // Fired when the first AudioNode has been created, signifying
- // that the AudioContext is being used and should be tracked via the editor.
- START_CONTEXT: "WebAudioEditor:StartContext",
- // When the devtools theme changes.
- THEME_CHANGE: "WebAudioEditor:ThemeChange",
- // When the UI is reset from tab navigation.
- UI_RESET: "WebAudioEditor:UIReset",
- // When a param has been changed via the UI and successfully
- // pushed via the actor to the raw audio node.
- UI_SET_PARAM: "WebAudioEditor:UISetParam",
- // When a node is to be set in the InspectorView.
- UI_SELECT_NODE: "WebAudioEditor:UISelectNode",
- // When the inspector is finished setting a new node.
- UI_INSPECTOR_NODE_SET: "WebAudioEditor:UIInspectorNodeSet",
- // When the inspector is finished rendering in or out of view.
- UI_INSPECTOR_TOGGLED: "WebAudioEditor:UIInspectorToggled",
- // When an audio node is finished loading in the Properties tab.
- UI_PROPERTIES_TAB_RENDERED: "WebAudioEditor:UIPropertiesTabRendered",
- // When an audio node is finished loading in the Automation tab.
- UI_AUTOMATION_TAB_RENDERED: "WebAudioEditor:UIAutomationTabRendered",
- // When the Audio Context graph finishes rendering.
- // Is called with two arguments, first representing number of nodes
- // rendered, second being the number of edge connections rendering (not counting
- // param edges), followed by the count of the param edges rendered.
- UI_GRAPH_RENDERED: "WebAudioEditor:UIGraphRendered",
- // Called when the inspector splitter is moved and resized.
- UI_INSPECTOR_RESIZE: "WebAudioEditor:UIInspectorResize"
- };
- XPCOMUtils.defineConstant(this, "EVENTS", EVENTS);
- /**
- * The current target and the Web Audio Editor front, set by this tool's host.
- */
- var gToolbox, gTarget, gFront;
- /**
- * Convenient way of emitting events from the panel window.
- */
- EventEmitter.decorate(this);
- /**
- * DOM query helper.
- */
- function $(selector, target = document) { return target.querySelector(selector); }
- function $$(selector, target = document) { return target.querySelectorAll(selector); }
- /**
- * Takes an iterable collection, and a hash. Return the first
- * object in the collection that matches the values in the hash.
- * From Backbone.Collection#findWhere
- * http://backbonejs.org/#Collection-findWhere
- */
- function findWhere(collection, attrs) {
- let keys = Object.keys(attrs);
- for (let model of collection) {
- if (keys.every(key => model[key] === attrs[key])) {
- return model;
- }
- }
- return void 0;
- }
- function mixin(source, ...args) {
- args.forEach(obj => Object.keys(obj).forEach(prop => source[prop] = obj[prop]));
- return source;
- }
|