// // // var locomotives = []; // // update or add a new element // function locomotive_Update(data) { for (var i = 0; i < locomotives.length; i++) { if (data.name == locomotives[i].name) { debug ("Update Locomotive:" + locomotives[i].name + " with Locomotive:" + data.name); locomotives[i].name = data.name; locomotives[i].ifname = data.ifname; locomotives[i].addr = data.addr; locomotives[i].steps = data.steps; locomotives[i].speed = data.speed; locomotives[i].vmin = data.vmin; locomotives[i].vslow = data.vslow; locomotives[i].vmid = data.vmid; locomotives[i].vfast = data.vfast; locomotives[i].vmax = data.vmax; locomotives[i].flags = data.flags; return; } } // not found add element debug ("Add Locomotive:" + data.name); locomotives.push ({ name: data.name, ifname: data.ifname, addr: data.addr, steps: data.steps, vmin: data.vmin, vslow: data.vslow, speed: data.speed, vmid: data.vmid, vfast: data.vfast, vmax: data.vmax, flags: data.flags }); }; // // delete element from the list // in arrays we can not delete just an element, so we create a new one // and replace this one. // function locomotive_Delete(name) { var l = new Array(); for (var i = 0; i < locomotives.length; i++) { if (name != locomotives[i].name) { l.push (locomotives[i]); } } // clear list and replace list with new data. locomotives.lenght = 0; locomotives = l; }; // // send new element to server // function locomotive_server_Add(elm) { var request = { command: "addlocomotive", locomotive: elm }; serverinout (request, serverinout_defaultCallback); }; // // send delete element to server // function locomotive_server_Del(elm) { var request = { command: "dellocomotive", locomotive: elm }; serverinout (request, serverinout_defaultCallback); }; // // send delete element to server // function locomotive_server_Set(elm) { var request = { command: "setlocomotive", locomotive: elm }; serverinout (request, serverinout_defaultCallback); }; function locodetail_show(loconame) { var win = document.getElementById("locodetail"); debug ("locodetail_show"); if (!win) { debug ("loco_showdetail create window"); win = gWindowCreate("locodetail", "Locomotive", 400, 500, " \
\ Name: \
\ \ \


\
\ Interface: \ Adress: \ Flags: \

\
\
\
Speed \ \ \ \ \ \ \
Stop
Vmin:
Vslow:
Vmid:
Vfast:
Vmax:
\ Steps:
\ Speed:
\ \

\
\ \ \ \
\ \ "); gAddEventListener("locodet_btnvstop", 'click', locodetail_cb_btnmove); gAddEventListener("locodet_btnvmin", 'click', locodetail_cb_btnmove); gAddEventListener("locodet_btnvslow", 'click', locodetail_cb_btnmove); gAddEventListener("locodet_btnvmid", 'click', locodetail_cb_btnmove); gAddEventListener("locodet_btnvfast", 'click', locodetail_cb_btnmove); gAddEventListener("locodet_btnvmax", 'click', locodetail_cb_btnmove); gAddEventListener("locodet_reverse", 'click', locodetail_cb_reverse); gAddEventListener("locodet_CLOSE", 'click', locodetail_cb_close); gAddEventListener("locodet_DELETE", 'click', locodetail_cb_delete); gAddEventListener("locodet_SAVE", 'click', locodetail_cb_save); gAddEventListener("locodet_NEXT", 'click', locodetail_cb_next); gAddEventListener("locodet_PREV", 'click', locodetail_cb_prev); } // // load default values var res = { name: "", ifname: "", addr: "", flags: 0, steps: "", vmin: "20", vslow: "40", vmid:"60", vfast:"80", vmax:"100" }; locodetail_setData(res); if (loconame) { for (var i = 0; i < locomotives.length; i++) { if (loconame == locomotives[i].name) locodetail_setData(locomotives[i]); } } }; // // reverse selected, setup flags function locodetail_cb_reverse () { var cbreverse = document.getElementById("locodet_reverse"); var flags = document.getElementById("locodet_flags"); if (cbreverse.checked) { flags.value = Number(flags.value) | 1; } else { flags.value = Number(flags.value) & (0xFFFF-1); } }; function locodetail_cb_btnmove () { var win = document.getElementById("locodetail"); var loco_name = document.getElementById("locodet_name"); var loco_vmin = document.getElementById("locodet_vmin"); var loco_vslow = document.getElementById("locodet_vslow"); var loco_vmid = document.getElementById("locodet_vmid"); var loco_vfast = document.getElementById("locodet_vfast"); var loco_vmax = document.getElementById("locodet_vmax"); var loco_reverse = document.getElementById("locodet_reverse"); var speed = 0; if (this.value == "vmin") speed = Number(loco_vmin.value); if (this.value == "vslow") speed = Number(loco_vslow.value); if (this.value == "vmid") speed = Number(loco_vmid.value); if (this.value == "vfast") speed = Number(loco_vfast.value); if (this.value == "vmax") speed = Number(loco_vmax.value); if (loco_reverse.checked) { speed = 0 - speed; } locomotive_server_Set ({name: loco_name.value, speed: speed}); debug ("Locomotive: '" + loco_name.value +"' Speed: " + speed); }; function locodetail_cb_close () { var win = document.getElementById("locodetail"); if (win) document.body.removeChild(win); }; // // Callback: Delete Button // function locodetail_cb_delete () { var elm = {}; elm = locodetail_getData(); locomotive_Delete(elm.name); locomotive_server_Del(elm); }; // // Callback: Save Button // function locodetail_cb_save () { var elm = {}; elm = locodetail_getData(); locomotive_Update(elm); locomotive_server_Add(elm); }; // // Callback: Next Button // function locodetail_cb_next () { var cursel = -1; var loconame = document.getElementById("locodet_name"); for (var i = 0; i < locomotives.length; i++) { if (loconame.value == locomotives[i].name) cursel = i; } cursel = cursel + 1; if (cursel >= locomotives.length) cursel = 0; if (cursel < 0) cursel = 0; for (var i = 0; i < locomotives.length; i++) { if (i == cursel) locodetail_setData(locomotives[i]); } debug ("Cursel: " + cursel + " locomotives.lenght:" + locomotives.length); }; // // Callback: Prev Button // function locodetail_cb_prev () { var cursel = -1; var loconame = document.getElementById("locodet_name"); for (var i = 0; i < locomotives.length; i++) { if (loconame.value == locomotives[i].name) cursel = i; } cursel = cursel - 1; if (cursel < 0 || cursel >= locomotives.length) cursel = locomotives.length - 1; for (var i = 0; i < locomotives.length; i++) { if (i == cursel) locodetail_setData(locomotives[i]); } debug ("Cursel: " + cursel + " locomotives.lenght:" + locomotives.length); }; // // fill out all the elements on the dialogbox // function locodetail_setData(elm) { var loco_name = document.getElementById("locodet_name"); var loco_ifname = document.getElementById("locodet_ifname"); var loco_addr = document.getElementById("locodet_addr"); var loco_speed = document.getElementById("locodet_speed"); var loco_flags = document.getElementById("locodet_flags"); var loco_steps = document.getElementById("locodet_steps"); var loco_vmin = document.getElementById("locodet_vmin"); var loco_vslow = document.getElementById("locodet_vslow"); var loco_vmid = document.getElementById("locodet_vmid"); var loco_vfast = document.getElementById("locodet_vfast"); var loco_vmax = document.getElementById("locodet_vmax"); var loco_reverse = document.getElementById("locodet_reverse"); if (elm) { if (loco_name) loco_name.value = elm.name; if (loco_ifname) loco_ifname.value = elm.ifname; if (loco_flags) loco_flags.value = elm.flags; if (loco_addr) loco_addr.value = elm.addr; if (loco_speed) loco_speed.value = elm.speed; if (loco_steps) loco_steps.value = elm.steps; if (loco_vmin) loco_vmin.value = elm.vmin; if (loco_vslow) loco_vslow.value = elm.vslow; if (loco_vmid) loco_vmid.value = elm.vmid; if (loco_vfast) loco_vfast.value = elm.vfast; if (loco_vmax) loco_vmax.value = elm.vmax; if (loco_reverse) { if (Number(elm.flags) & 1) loco_reverse.checked = true; else loco_reverse.checked = false; } } }; // // return all elements from the dialogbox // function locodetail_getData() { var res = { name: "", ifname: "", addr: "", flags: 0, steps: "", vmin: "20", vslow: "40", vmid:"60", vfast:"80", vmax:"100" }; var loco_name = document.getElementById("locodet_name"); var loco_ifname = document.getElementById("locodet_ifname"); var loco_flags = document.getElementById("locodet_flags"); var loco_addr = document.getElementById("locodet_addr"); var loco_steps = document.getElementById("locodet_steps"); var loco_vmin = document.getElementById("locodet_vmin"); var loco_vslow = document.getElementById("locodet_vslow"); var loco_vmid = document.getElementById("locodet_vmid"); var loco_vfast = document.getElementById("locodet_vfast"); var loco_vmax = document.getElementById("locodet_vmax"); if (loco_name) res.name = loco_name.value; if (loco_ifname) res.ifname = loco_ifname.value; if (loco_flags) res.flags = loco_flags.value; if (loco_addr) res.addr = loco_addr.value; if (loco_steps) res.steps = loco_steps.value; if (loco_vmin) res.vmin = loco_vmin.value; if (loco_vslow) res.vslow = loco_vslow.value; if (loco_vmid) res.vmid = loco_vmid.value; if (loco_vfast) res.vfast = loco_vfast.value; if (loco_vmax) res.vmax = loco_vmax.value; return res; };