LWWidget.Menu.Mode = Base.Comp.inherits({ constructor: function (name) { this.base(); this.name = name; this.items = new Base.Util.Hashtable(); this.selected = null; this.addSlot('itemDestroyed'); this.addSlot('itemClicked'); this.addEvent('Click'); }, destroy: function () { var items = this.items.values(); for (var i in items) { var _i = items[i]; this.items.remove(items[i]._cid); items[i].destroy(); } this.base(); }, draw: function () { var str = '', items = this.items.values(); for (var i=0;i<items.length;i++) { str += items[i].draw(); if (i < items.length - 1 && items[i].separator) { str += items[i].separator; } } return str; }, addItem: function (item) { if (!(item && item._cid) || this.items.containsKey(item._cid)) { return; } this.items.put(item._cid, item); if (item.selectable && !this.selected) { item.selected = true; this.selected = item; } else { item.selected = false; } item.bindEvent('Destroy', 'itemDestroyed', this); item.bindEvent('Click', 'itemClicked', this); }, setSelected: function (name) { var _k = this.items.values(); for (var i in _k) { var item = _k[i]; if (item.selectable && item.name == name) { if (this.selected) { if (this.selected._cid == item._cid) { return; } this.selected.selected = false; } item.selected = true; this.selected = item; return; } else if (item.name == name) { return; } } }, itemClicked: function (item) { if (item.selectable) { if (this.selected) { this.selected.selected = false; } item.selected = true; this.selected = item; } this.onClick(item.name); }, itemDestroyed: function (item) { if (!(item && item._cid && this.items.containsKey(item._cid))) { return; } this.items.remove(item._cid); if (this.selected && this.selected._cid == item._cid) { var _v = this.items.values(), _s = null; for (var i in _v) { var _i = _v[i]; if (_i.selectable) { _s = _i; _i.selected = true; break; } } this.selected = _s; } } });