This repository has been archived on 2024-07-18. You can view files and clone it, but cannot push or open issues or pull requests.
lwb5/misc/Legacy Worlds.wdgt/lib/LWWidget/Menu.js

81 lines
1.6 KiB
JavaScript

LWWidget.Menu = Base.Comp.inherits({
constructor: function () {
this.base();
this.currentMode = null;
this.modes = new Base.Util.Hashtable();
this.addSlot('modeDestroyed');
this.addSlot('draw');
this.addEvent('Click');
this.bindEvent('Click', 'draw');
},
destroy: function () {
var modes = this.modes.values();
for (var i in modes) {
modes[i].destroy();
}
this.base();
},
newMode: function (name) {
if (this.modes.containsKey(name)) {
return null;
}
var mode = new LWWidget.Menu.Mode(name);
this.modes.put(name, mode);
if (!this.currentMode) {
this.currentMode = mode;
}
mode.bindEvent('Destroy', 'modeDestroyed', this);
mode.bindEvent('Click', 'onClick', this);
return mode;
},
setMode: function (name) {
if (!this.modes.containsKey(name) || this.currentMode && this.currentMode.name == name) {
return;
}
this.currentMode = this.modes.get(name);
this.draw();
},
setSelected: function (name) {
if (this.currentMode) {
this.currentMode.setSelected(name);
this.draw();
}
},
modeDestroyed: function (mode) {
if (!(mode && mode._cid && mode.name && this.modes.containsKey(mode.name))) {
return;
}
this.modes.remove(mode.name);
if (this.currentMode && this.currentMode._cid == mode._cid) {
var _v = this.modes.values();
if (_v.length) {
this.currentMode = _v[0];
} else {
this.currentMode = null;
}
}
},
draw: function () {
var e = document.getElementById('mtMenu');
if (!(e && this.currentMode)) {
return;
}
e.innerHTML = this.currentMode.draw();
}
});