61 lines
1.8 KiB
JavaScript
61 lines
1.8 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
var List = require("./list");
|
||
|
var String = require("./string");
|
||
|
var NavigationPanel = require("./navigationPanel");
|
||
|
var ThemeSelecter = require("./themeSelecter");
|
||
|
var Theme = require("./theme");
|
||
|
|
||
|
var GlobalControls = List.inherit({
|
||
|
"className": "GlobalControls",
|
||
|
"constructor": function(address) {
|
||
|
List.fn.constructor.call(this, address);
|
||
|
},
|
||
|
"addElement": function(vc) {
|
||
|
List.fn.addElement.call(this, vc);
|
||
|
|
||
|
var name = vc.at("name").toString();
|
||
|
var type = vc.at("type").toString();
|
||
|
var addr = vc.at("address");
|
||
|
var ctrl;
|
||
|
var supported = true;
|
||
|
|
||
|
switch (name) {
|
||
|
case "version":
|
||
|
ctrl = new String(addr.clone());
|
||
|
break;
|
||
|
case "navigationPanel":
|
||
|
ctrl = new NavigationPanel(addr.clone());
|
||
|
break;
|
||
|
case "themes":
|
||
|
ctrl = new ThemeSelecter(addr.clone());
|
||
|
ctrl.on("selected", this._onThemeSelected, this);
|
||
|
break;
|
||
|
default:
|
||
|
supported = false;
|
||
|
this.trigger("serviceMessage", "Unsupported global control: " + name + " (" + type + ")", 1);
|
||
|
break;
|
||
|
}
|
||
|
if (supported) {
|
||
|
ctrl.name = name;
|
||
|
this.addController(ctrl);
|
||
|
}
|
||
|
},
|
||
|
"clear": function() {
|
||
|
List.fn.clear.call(this);
|
||
|
this.clearChildren();
|
||
|
},
|
||
|
"_onThemeReady": function(theme) {
|
||
|
this.trigger("themeSelected", theme._data);
|
||
|
this.removeController(theme);
|
||
|
theme.destructor();
|
||
|
},
|
||
|
"_onThemeSelected": function(obj) {
|
||
|
var theme = new Theme(obj.value.clone());
|
||
|
this.addController(theme);
|
||
|
theme.on("ready", this._onThemeReady.bind(this, theme));
|
||
|
}
|
||
|
});
|
||
|
|
||
|
module.exports = GlobalControls;
|