ProfileLauncherView.js [plain text]
WebInspector.ProfileLauncherView = function(profilesPanel)
{
WebInspector.View.call(this);
this._panel = profilesPanel;
this.element.addStyleClass("profile-launcher-view");
this.element.addStyleClass("panel-enabler-view");
this._contentElement = this.element.createChild("div", "profile-launcher-view-content");
this._innerContentElement = this._contentElement.createChild("div");
this._controlButton = this._contentElement.createChild("button", "control-profiling");
this._controlButton.addEventListener("click", this._controlButtonClicked.bind(this), false);
}
WebInspector.ProfileLauncherView.prototype = {
addProfileType: function(profileType)
{
var descriptionElement = this._innerContentElement.createChild("h1");
descriptionElement.textContent = profileType.description;
var decorationElement = profileType.decorationElement();
if (decorationElement)
this._innerContentElement.appendChild(decorationElement);
this._isInstantProfile = profileType.isInstantProfile();
},
_controlButtonClicked: function()
{
this._panel.toggleRecordButton();
},
_updateControls: function()
{
if (this._isInstantProfile) {
this._controlButton.removeStyleClass("running");
this._controlButton.textContent = WebInspector.UIString("Take Snapshot");
} else if (this._isProfiling) {
this._controlButton.addStyleClass("running");
this._controlButton.textContent = WebInspector.UIString("Stop");
} else {
this._controlButton.removeStyleClass("running");
this._controlButton.textContent = WebInspector.UIString("Start");
}
},
profileStarted: function()
{
this._isProfiling = true;
this._updateControls();
},
profileFinished: function()
{
this._isProfiling = false;
this._updateControls();
},
__proto__: WebInspector.View.prototype
}
WebInspector.MultiProfileLauncherView = function(profilesPanel)
{
WebInspector.ProfileLauncherView.call(this, profilesPanel);
var header = this._innerContentElement.createChild("h1");
header.textContent = WebInspector.UIString("Select profiling type");
this._profileTypeSelectorForm = this._innerContentElement.createChild("form");
this._innerContentElement.createChild("div", "flexible-space");
}
WebInspector.MultiProfileLauncherView.EventTypes = {
ProfileTypeSelected: "profile-type-selected"
}
WebInspector.MultiProfileLauncherView.prototype = {
addProfileType: function(profileType)
{
var checked = !this._profileTypeSelectorForm.children.length;
var labelElement = this._profileTypeSelectorForm.createChild("label");
labelElement.textContent = profileType.name;
var optionElement = document.createElement("input");
labelElement.insertBefore(optionElement, labelElement.firstChild);
optionElement.type = "radio";
optionElement.name = "profile-type";
optionElement.style.hidden = true;
if (checked) {
optionElement.checked = checked;
this.dispatchEventToListeners(WebInspector.MultiProfileLauncherView.EventTypes.ProfileTypeSelected, profileType);
}
optionElement.addEventListener("change", this._profileTypeChanged.bind(this, profileType), false);
var descriptionElement = labelElement.createChild("p");
descriptionElement.textContent = profileType.description;
var decorationElement = profileType.decorationElement();
if (decorationElement)
labelElement.appendChild(decorationElement);
},
_controlButtonClicked: function()
{
this._panel.toggleRecordButton();
},
_updateControls: function()
{
WebInspector.ProfileLauncherView.prototype._updateControls.call(this);
var items = this._profileTypeSelectorForm.elements;
for (var i = 0; i < items.length; ++i) {
if (items[i].type === "radio")
items[i].disabled = this._isProfiling;
}
},
_profileTypeChanged: function(profileType, event)
{
this.dispatchEventToListeners(WebInspector.MultiProfileLauncherView.EventTypes.ProfileTypeSelected, profileType);
this._isInstantProfile = profileType.isInstantProfile();
this._updateControls();
},
profileStarted: function()
{
this._isProfiling = true;
this._updateControls();
},
profileFinished: function()
{
this._isProfiling = false;
this._updateControls();
},
__proto__: WebInspector.ProfileLauncherView.prototype
}