WebInspector.ContextMenuItem = function(topLevelMenu, type, label, disabled, checked)
{
this._type = type;
this._label = label;
this._disabled = disabled;
this._checked = checked;
this._contextMenu = topLevelMenu;
if (type === "item" || type === "checkbox")
this._id = topLevelMenu.nextId();
}
WebInspector.ContextMenuItem.prototype = {
id: function()
{
return this._id;
},
type: function()
{
return this._type;
},
isEnabled: function()
{
return !this._disabled;
},
setEnabled: function(enabled)
{
this._disabled = !enabled;
},
_buildDescriptor: function()
{
switch (this._type) {
case "item":
return { type: "item", id: this._id, label: this._label, enabled: !this._disabled };
case "separator":
return { type: "separator" };
case "checkbox":
return { type: "checkbox", id: this._id, label: this._label, checked: !!this._checked, enabled: !this._disabled };
}
}
}
WebInspector.ContextSubMenuItem = function(topLevelMenu, label, disabled)
{
WebInspector.ContextMenuItem.call(this, topLevelMenu, "subMenu", label, disabled);
this._items = [];
}
WebInspector.ContextSubMenuItem.prototype = {
appendItem: function(label, handler, disabled)
{
var item = new WebInspector.ContextMenuItem(this._contextMenu, "item", label, disabled);
this._pushItem(item);
this._contextMenu._setHandler(item.id(), handler);
return item;
},
appendSubMenuItem: function(label, disabled)
{
var item = new WebInspector.ContextSubMenuItem(this._contextMenu, label, disabled);
this._pushItem(item);
return item;
},
appendCheckboxItem: function(label, handler, checked, disabled)
{
var item = new WebInspector.ContextMenuItem(this._contextMenu, "checkbox", label, disabled, checked);
this._pushItem(item);
this._contextMenu._setHandler(item.id(), handler);
return item;
},
appendSeparator: function()
{
if (this._items.length)
this._pendingSeparator = true;
},
_pushItem: function(item)
{
if (this._pendingSeparator) {
this._items.push(new WebInspector.ContextMenuItem(this._contextMenu, "separator"));
delete this._pendingSeparator;
}
this._items.push(item);
},
isEmpty: function()
{
return !this._items.length;
},
_buildDescriptor: function()
{
var result = { type: "subMenu", label: this._label, enabled: !this._disabled, subItems: [] };
for (var i = 0; i < this._items.length; ++i)
result.subItems.push(this._items[i]._buildDescriptor());
return result;
},
__proto__: WebInspector.ContextMenuItem.prototype
}
WebInspector.ContextMenu = function(event) {
WebInspector.ContextSubMenuItem.call(this, this, "");
this._event = event;
this._handlers = {};
this._id = 0;
}
WebInspector.ContextMenu.prototype = {
nextId: function()
{
return this._id++;
},
show: function()
{
var menuObject = this._buildDescriptor();
if (menuObject.length) {
WebInspector._contextMenu = this;
InspectorFrontendHost.showContextMenu(this._event, menuObject);
this._event.consume();
}
},
showSoftMenu: function()
{
var menuObject = this._buildDescriptor();
if (menuObject.length) {
WebInspector._contextMenu = this;
var softMenu = new WebInspector.SoftContextMenu(menuObject);
softMenu.show(this._event, true);
}
this._event.consume();
},
_setHandler: function(id, handler)
{
if (handler)
this._handlers[id] = handler;
},
_buildDescriptor: function()
{
var result = [];
for (var i = 0; i < this._items.length; ++i)
result.push(this._items[i]._buildDescriptor());
return result;
},
_itemSelected: function(id)
{
if (this._handlers[id])
this._handlers[id].call(this);
},
appendApplicableItems: function(target)
{
for (var i = 0; i < WebInspector.ContextMenu._providers.length; ++i) {
var provider = WebInspector.ContextMenu._providers[i];
this.appendSeparator();
provider.appendApplicableItems(this._event, this, target);
this.appendSeparator();
}
},
__proto__: WebInspector.ContextSubMenuItem.prototype
}
WebInspector.ContextMenu.Provider = function() {
}
WebInspector.ContextMenu.Provider.prototype = {
appendApplicableItems: function(event, contextMenu, target) { }
}
WebInspector.ContextMenu.registerProvider = function(provider)
{
WebInspector.ContextMenu._providers.push(provider);
}
WebInspector.ContextMenu._providers = [];
WebInspector.contextMenuItemSelected = function(id)
{
if (WebInspector._contextMenu)
WebInspector._contextMenu._itemSelected(id);
}
WebInspector.contextMenuCleared = function()
{
}