mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
121 lines
4.1 KiB
JavaScript
121 lines
4.1 KiB
JavaScript
/* 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";
|
|
|
|
/**
|
|
* Master view handler for the performance tool.
|
|
*/
|
|
let PerformanceView = {
|
|
/**
|
|
* Sets up the view with event binding and main subviews.
|
|
*/
|
|
initialize: function () {
|
|
this._recordButton = $("#record-button");
|
|
this._importButton = $("#import-button");
|
|
this._exportButton = $("#export-button");
|
|
|
|
this._onRecordButtonClick = this._onRecordButtonClick.bind(this);
|
|
this._onImportButtonClick = this._onImportButtonClick.bind(this);
|
|
this._onExportButtonClick = this._onExportButtonClick.bind(this);
|
|
this._lockRecordButton = this._lockRecordButton.bind(this);
|
|
this._unlockRecordButton = this._unlockRecordButton.bind(this);
|
|
|
|
this._recordButton.addEventListener("click", this._onRecordButtonClick);
|
|
this._importButton.addEventListener("click", this._onImportButtonClick);
|
|
this._exportButton.addEventListener("click", this._onExportButtonClick);
|
|
|
|
// Bind to controller events to unlock the record button
|
|
PerformanceController.on(EVENTS.RECORDING_STARTED, this._unlockRecordButton);
|
|
PerformanceController.on(EVENTS.RECORDING_STOPPED, this._unlockRecordButton);
|
|
|
|
return promise.all([
|
|
OverviewView.initialize(),
|
|
DetailsView.initialize()
|
|
]);
|
|
},
|
|
|
|
/**
|
|
* Unbinds events and destroys subviews.
|
|
*/
|
|
destroy: function () {
|
|
this._recordButton.removeEventListener("click", this._onRecordButtonClick);
|
|
this._importButton.removeEventListener("click", this._onImportButtonClick);
|
|
this._exportButton.removeEventListener("click", this._onExportButtonClick);
|
|
|
|
PerformanceController.off(EVENTS.RECORDING_STARTED, this._unlockRecordButton);
|
|
PerformanceController.off(EVENTS.RECORDING_STOPPED, this._unlockRecordButton);
|
|
|
|
return promise.all([
|
|
OverviewView.destroy(),
|
|
DetailsView.destroy()
|
|
]);
|
|
},
|
|
|
|
/**
|
|
* Adds the `locked` attribute on the record button. This prevents it
|
|
* from being clicked while recording is started or stopped.
|
|
*/
|
|
_lockRecordButton: function () {
|
|
this._recordButton.setAttribute("locked", "true");
|
|
},
|
|
|
|
/**
|
|
* Removes the `locked` attribute on the record button.
|
|
*/
|
|
_unlockRecordButton: function () {
|
|
this._recordButton.removeAttribute("locked");
|
|
},
|
|
|
|
/**
|
|
* Handler for clicking the record button.
|
|
*/
|
|
_onRecordButtonClick: function (e) {
|
|
if (this._recordButton.hasAttribute("checked")) {
|
|
this._recordButton.removeAttribute("checked");
|
|
this._lockRecordButton();
|
|
this.emit(EVENTS.UI_STOP_RECORDING);
|
|
} else {
|
|
this._recordButton.setAttribute("checked", "true");
|
|
this._lockRecordButton();
|
|
this.emit(EVENTS.UI_START_RECORDING);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Handler for clicking the import button.
|
|
*/
|
|
_onImportButtonClick: function(e) {
|
|
let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
|
|
fp.init(window, L10N.getStr("recordingsList.saveDialogTitle"), Ci.nsIFilePicker.modeOpen);
|
|
fp.appendFilter(L10N.getStr("recordingsList.saveDialogJSONFilter"), "*.json");
|
|
fp.appendFilter(L10N.getStr("recordingsList.saveDialogAllFilter"), "*.*");
|
|
|
|
if (fp.show() == Ci.nsIFilePicker.returnOK) {
|
|
this.emit(EVENTS.UI_IMPORT_RECORDING, fp.file);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Handler for clicking the export button.
|
|
*/
|
|
_onExportButtonClick: function(e) {
|
|
let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
|
|
fp.init(window, L10N.getStr("recordingsList.saveDialogTitle"), Ci.nsIFilePicker.modeSave);
|
|
fp.appendFilter(L10N.getStr("recordingsList.saveDialogJSONFilter"), "*.json");
|
|
fp.appendFilter(L10N.getStr("recordingsList.saveDialogAllFilter"), "*.*");
|
|
fp.defaultString = "profile.json";
|
|
|
|
fp.open({ done: result => {
|
|
if (result != Ci.nsIFilePicker.returnCancel) {
|
|
this.emit(EVENTS.UI_EXPORT_RECORDING, fp.file);
|
|
}
|
|
}});
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Convenient way of emitting events from the view.
|
|
*/
|
|
EventEmitter.decorate(PerformanceView);
|