You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
810 lines
27 KiB
810 lines
27 KiB
//
|
|
//
|
|
//
|
|
|
|
const LOCO_F_REVERSE = 0x0001;
|
|
const LOCO_F_CARGO = 0x0010;
|
|
const LOCO_F_CANREVERSE = 0x0020;
|
|
const LOCO_F_SHORTTRAIN = 0x0040;
|
|
const LOCO_F_AUTO = 0x0100;
|
|
const LOCO_F_RANDOM = 0x0200;
|
|
const LOCO_F_AUTOSTOP = 0x0400;
|
|
|
|
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].stepcode = data.stepcode;
|
|
if (data.speed) 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;
|
|
if (data.blockassign) locomotives[i].blockassign = data.blockassign;
|
|
if (data.blockprev) locomotives[i].blockprev = data.blockprev;
|
|
if (data.blocknext) locomotives[i].blocknext = data.blocknext;
|
|
if (data.blockdest) locomotives[i].blockdest = data.blockdest;
|
|
if (data.auto_way) locomotives[i].auto_way = data.auto_way;
|
|
locodetail_setData(locomotives[i]);
|
|
lococtrl_setData(data);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// not found add element
|
|
debug ("Add Locomotive:" + data.name);
|
|
locomotives.push ({
|
|
name: data.name,
|
|
ifname: data.ifname,
|
|
addr: data.addr,
|
|
stepcode: data.stepcode,
|
|
vmin: data.vmin,
|
|
vslow: data.vslow,
|
|
speed: data.speed,
|
|
vmid: data.vmid,
|
|
vfast: data.vfast,
|
|
vmax: data.vmax,
|
|
flags: data.flags,
|
|
blockassign: data.blockassign,
|
|
blockdest: data.blockdest,
|
|
blocknext: data.blocknext,
|
|
blockprev: data.blockprev,
|
|
auto_way: data.auto_way
|
|
|
|
});
|
|
};
|
|
|
|
|
|
//
|
|
// 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 locomotive assignment to server (is blockname is empty clear assignment)
|
|
//
|
|
function locomotive_server_Assign(locname, blockname, reverse) {
|
|
var request = { command: "locomotiveassign", locomotive: locname, block: blockname, reverse: reverse };
|
|
serverinout (request, serverinout_defaultCallback);
|
|
};
|
|
|
|
|
|
//
|
|
// set locomotive destination to server (is blockname is empty clear assignment)
|
|
//
|
|
function locomotive_server_Dest(locname, blockname, reverse) {
|
|
var request = { command: "locomotivedestination", locomotive: locname, block: blockname, reverse: reverse };
|
|
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", 450, 500,
|
|
"<div style=\"float: left\"> \
|
|
Name: <input id=\"locodet_name\" style=\"width: 100\"> \
|
|
</div> <div style=\"float: right\"> \
|
|
<button id=\"locodet_PREV\"><</button> \
|
|
<button id=\"locodet_NEXT\">></button> \
|
|
</div> <br> <hr>\
|
|
<div> \
|
|
Interface: <input id=\"locodet_ifname\" style=\"width: 50\"> \
|
|
Adress: <input id=\"locodet_addr\" style=\"width: 50\"> \
|
|
Flags: <input id=\"locodet_flags\" style=\"width: 50\"> \
|
|
</div> <hr>\
|
|
<div> <table><tr><td> \
|
|
<table><tr><td> \
|
|
<label><input id=\"locodet_auto\" type=\"checkbox\" value=\"\" disabled>Auto</label><br> \
|
|
<label><input id=\"locodet_random\" type=\"checkbox\" value=\"\" disabled>Random</label><br> \
|
|
</td><td> \
|
|
<label><input id=\"locodet_cargo\" type=\"checkbox\" value=\"\">Cargo</label><br> \
|
|
<label><input id=\"locodet_short\" type=\"checkbox\" value=\"\">Short Train</label><br> \
|
|
<label><input id=\"locodet_canreverse\" type=\"checkbox\" value=\"\">Can Reverse</label><br> \
|
|
</td></tr></table> \
|
|
\
|
|
<fieldset><legend>Speed</legend> <table>\
|
|
<label><input id=\"locodet_reverse\" type=\"checkbox\" value=\"\">Reverse</label><br> \
|
|
<tr><td></td><td>Stop</td><td><button id=\"locodet_btnvstop\" type=\"button\" value=\"vstop\">X</button> </td></tr>\
|
|
<tr><td>Vmin:</td><td><input id=\"locodet_vmin\" style=\"width: 50\"></td><td><button id=\"locodet_btnvmin\" type=\"button\" value=\"vmin\">X</button> </td></tr>\
|
|
<tr><td>Vslow:</td><td><input id=\"locodet_vslow\" style=\"width: 50\"></td><td><button id=\"locodet_btnvslow\" type=\"button\" value=\"vslow\">X</button> </td></tr> \
|
|
<tr><td>Vmid:</td><td><input id=\"locodet_vmid\" style=\"width: 50\"></td><td><button id=\"locodet_btnvmid\" type=\"button\" value=\"vmid\">X</button> </td></tr> \
|
|
<tr><td>Vfast:</td><td><input id=\"locodet_vfast\" style=\"width: 50\"></td><td><button id=\"locodet_btnvfast\" type=\"button\" value=\"vfast\">X</button> </td></tr> \
|
|
<tr><td>Vmax:</td><td><input id=\"locodet_vmax\" style=\"width: 50\"></td><td><button id=\"locodet_btnvmax\" type=\"button\" value=\"vmax\">X</button> </td></tr> \
|
|
<tr><td>Current:</td><td><input id=\"locodet_speed\" style=\"width: 50\"></td></tr></table> \
|
|
\
|
|
</fieldset></td> \
|
|
<td> \
|
|
<fieldset><legend>Code</legend> \
|
|
<label><input type=\"radio\" id=\"locodet_DCC14\" name=\"STEPCODE\" value=\"1\">DCC14</label><br> \
|
|
<label><input type=\"radio\" id=\"locodet_DCC28\" name=\"STEPCODE\" value=\"2\">DCC28</label><br> \
|
|
<label><input type=\"radio\" id=\"locodet_DCC128\" name=\"STEPCODE\" value=\"3\">DCC128</label><br> \
|
|
</fieldset> \
|
|
\
|
|
<fieldset><legend>Block</legend><table> \
|
|
<tr><td>Assined:</td><td><input id=\"locodet_blockassign\" style=\"width: 50\" disabled></td></tr> \
|
|
<tr><td>Destination:</td><td><input id=\"locodet_blockdest\" style=\"width: 50\" disabled></td></tr> \
|
|
<tr><td>Next:</td><td><input id=\"locodet_blocknext\" style=\"width: 50\" disabled></td></tr> \
|
|
<tr><td>Prev:</td><td><input id=\"locodet_blockprev\" style=\"width: 50\" disabled></td></tr> \
|
|
<tr><td>Auto:</td><td><input id=\"locodet_auto_way\" style=\"width: 50\" disabled></td></tr> \
|
|
</table><button id=\"locodet_RESET\" type=\"button\">Reset</button> \
|
|
<button id=\"locodet_TEST\" type=\"button\">Test</button></fileset>\
|
|
\
|
|
</td></tr></table></div> <hr>\
|
|
<div align=right> \
|
|
<button id=\"locodet_SAVE\" type=\"button\">Save</button> \
|
|
<button id=\"locodet_DELETE\" type=\"button\">Delete</button> \
|
|
<button id=\"locodet_CLOSE\" type=\"button\">Close</button> \
|
|
</div> \
|
|
\
|
|
");
|
|
|
|
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_canreverse", 'click', locodetail_cb_canreverse);
|
|
gAddEventListener("locodet_short", 'click', locodetail_cb_short);
|
|
gAddEventListener("locodet_cargo", 'click', locodetail_cb_cargo);
|
|
gAddEventListener("locodet_RESET", 'click', locodetail_cb_reset);
|
|
gAddEventListener("locodet_TEST", 'click', locodetail_cb_test);
|
|
|
|
// gAddEventListener("locodet_DCC14", 'click', locodetail_cb_stepcode);
|
|
// gAddEventListener("locodet_DCC28", 'click', locodetail_cb_stepcode);
|
|
// gAddEventListener("locodet_DCC128", 'click', locodetail_cb_stepcode);
|
|
|
|
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) | LOCO_F_REVERSE;
|
|
}
|
|
|
|
else {
|
|
flags.value = Number(flags.value) & (0xFFFF-LOCO_F_REVERSE);
|
|
}
|
|
};
|
|
|
|
|
|
//
|
|
// canreverse selected, setup flags
|
|
function locodetail_cb_canreverse () {
|
|
var cbreverse = document.getElementById("locodet_canreverse");
|
|
var flags = document.getElementById("locodet_flags");
|
|
|
|
if (cbreverse.checked) {
|
|
flags.value = Number(flags.value) | LOCO_F_CANREVERSE;
|
|
}
|
|
|
|
else {
|
|
flags.value = Number(flags.value) & (0xFFFF-LOCO_F_CANREVERSE);
|
|
}
|
|
};
|
|
|
|
|
|
function locodetail_cb_reset (element) {
|
|
var loco = document.getElementById("locodet_name");
|
|
|
|
if (loco.value) {
|
|
var request = { command: "locomotivereset", locomotive: loco.value };
|
|
serverinout (request, serverinout_defaultCallback);
|
|
}
|
|
};
|
|
|
|
|
|
function locodetail_cb_test (element) {
|
|
var loco = document.getElementById("locodet_name");
|
|
|
|
if (loco.value) {
|
|
var request = { command: "locomotivetest", locomotive: loco.value };
|
|
serverinout (request, serverinout_defaultCallback);
|
|
}
|
|
};
|
|
|
|
|
|
//
|
|
// canreverse selected, setup flags
|
|
function locodetail_cb_short () {
|
|
var flag = document.getElementById("locodet_short");
|
|
var flags = document.getElementById("locodet_flags");
|
|
|
|
if (flag.checked) {
|
|
flags.value = Number(flags.value) | LOCO_F_SHORTTRAIN;
|
|
}
|
|
|
|
else {
|
|
flags.value = Number(flags.value) & (0xFFFF-LOCO_F_SHORTTRAIN);
|
|
}
|
|
};
|
|
|
|
|
|
//
|
|
// cargo selected, setup flags
|
|
function locodetail_cb_cargo () {
|
|
var cbcargo = document.getElementById("locodet_cargo");
|
|
var flags = document.getElementById("locodet_flags");
|
|
|
|
if (cbcargo .checked) {
|
|
flags.value = Number(flags.value) | LOCO_F_CARGO;
|
|
}
|
|
|
|
else {
|
|
flags.value = Number(flags.value) & (0xFFFF-LOCO_F_CARGO);
|
|
}
|
|
};
|
|
|
|
|
|
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_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 loco_canreverse = document.getElementById("locodet_canreverse");
|
|
var loco_short = document.getElementById("locodet_short");
|
|
var loco_cargo = document.getElementById("locodet_cargo");
|
|
var loco_auto = document.getElementById("locodet_auto");
|
|
var loco_random = document.getElementById("locodet_random");
|
|
var loco_blockassign = document.getElementById("locodet_blockassign");
|
|
var loco_blockdest = document.getElementById("locodet_blockdest");
|
|
var loco_blocknext = document.getElementById("locodet_blocknext");
|
|
var loco_blockprev = document.getElementById("locodet_blockprev");
|
|
var loco_auto_way = document.getElementById("locodet_auto_way");
|
|
|
|
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_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) & LOCO_F_REVERSE) loco_reverse.checked = true;
|
|
else loco_reverse.checked = false;
|
|
}
|
|
if (loco_canreverse) {
|
|
if (Number(elm.flags) & LOCO_F_CANREVERSE) loco_canreverse.checked = true;
|
|
else loco_canreverse.checked = false;
|
|
}
|
|
if (loco_short) {
|
|
if (Number(elm.flags) & LOCO_F_SHORTTRAIN) loco_short.checked = true;
|
|
else loco_short.checked = false;
|
|
}
|
|
if (loco_cargo) {
|
|
if (Number(elm.flags) & LOCO_F_CARGO) loco_cargo.checked = true;
|
|
else loco_cargo.checked = false;
|
|
}
|
|
if (loco_auto) {
|
|
if (Number(elm.flags) & LOCO_F_AUTO) loco_auto.checked = true;
|
|
else loco_auto.checked = false;
|
|
}
|
|
if (loco_random) {
|
|
if (Number(elm.flags) & LOCO_F_RANDOM) loco_random.checked = true;
|
|
else loco_random.checked = false;
|
|
}
|
|
if (loco_blockassign) loco_blockassign.value = elm.blockassign;
|
|
if (loco_blockdest) loco_blockdest.value = elm.blockdest;
|
|
if (loco_blocknext) loco_blocknext.value = elm.blocknext;
|
|
if (loco_blockprev) loco_blockprev.value = elm.blockprev;
|
|
if (loco_auto_way) loco_auto_way.value = elm.auto_way;
|
|
|
|
}
|
|
|
|
var codes = document.getElementsByName('STEPCODE');
|
|
for(var i = 0; i < codes.length; i++) {
|
|
// debug ("STEPCODE: elm.stepcode: " + elm.stepcode + " i:" + i + " codes[i].value: " + codes[i].value + " codes.id: " + codes[i].id);
|
|
if(elm.stepcode == codes[i].value) codes[i].checked = true;
|
|
else codes[i].checked = false;
|
|
}
|
|
};
|
|
|
|
|
|
|
|
//
|
|
// return all elements from the dialogbox
|
|
//
|
|
function locodetail_getData() {
|
|
var res = { name: "", ifname: "", addr: "", flags: 0, stepcode:"0",
|
|
vmin: "20", vslow: "40", vmid:"60", vfast:"80", vmax:"100" };
|
|
|
|
var codes = document.getElementsByName('STEPCODE');
|
|
for(var i = 0; i < codes.length; i++){
|
|
if(codes[i].checked){
|
|
res.stepcode = codes[i].value;
|
|
}
|
|
}
|
|
|
|
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_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_speed = document.getElementById("locodet_speed");
|
|
|
|
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_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;
|
|
if (loco_speed) res.speed = loco_speed.speed;
|
|
|
|
return res;
|
|
};
|
|
|
|
|
|
// ***********************************************************************************************
|
|
// ***********************************************************************************************
|
|
// locolist: show a list of locomotives.
|
|
//
|
|
// ***********************************************************************************************
|
|
// ***********************************************************************************************
|
|
function locolist_show() {
|
|
var win = document.getElementById("locolist");
|
|
|
|
debug ("locolist_show");
|
|
|
|
if (!win) {
|
|
debug ("locolist_show create window");
|
|
win = gWindowCreate("locolist", "Locomotives", 400, 500, " \
|
|
<div id=\"locolist_listdiv\"> \
|
|
<ul id=\"locolist_elements\" style=\"list-style-type:none\"></ul> \
|
|
</div> \
|
|
<div align=right> \
|
|
<button id=\"locolist_CLOSE\" type=\"button\">Close</button> \
|
|
</div> \
|
|
\
|
|
");
|
|
|
|
gAddEventListener("locolist_CLOSE", 'click', locolist_cb_close);
|
|
}
|
|
|
|
var ul = document.getElementById("locolist_elements");
|
|
|
|
//
|
|
// clear list
|
|
|
|
|
|
//
|
|
// append all locomotives
|
|
for (var i = 0; i < locomotives.length; i++) {
|
|
let li = document.createElement("li");
|
|
|
|
li.appendChild(document.createTextNode(locomotives[i].name));
|
|
li.setAttribute("id", "locol_elm_"+locomotives[i].name);
|
|
|
|
ul.appendChild(li);
|
|
|
|
gAddEventListener("locol_elm_"+locomotives[i].name, 'click', locolist_clicked);
|
|
}
|
|
|
|
};
|
|
|
|
|
|
function locolist_clicked() {
|
|
var i;
|
|
|
|
debug ("childnodes: " + this.childNodes[0].textContent);
|
|
lococtrl_show(this.childNodes[0].textContent);
|
|
};
|
|
|
|
|
|
|
|
function locolist_cb_close () {
|
|
var win = document.getElementById("locolist");
|
|
|
|
if (win) document.body.removeChild(win);
|
|
};
|
|
|
|
|
|
|
|
|
|
// ***********************************************************************************************
|
|
// ***********************************************************************************************
|
|
// locoshow: show controls for a loco loco_NAME
|
|
//
|
|
// ***********************************************************************************************
|
|
// ***********************************************************************************************
|
|
function lococtrl_show(name) {
|
|
var win = document.getElementById("lococtrl_"+name);
|
|
var i;
|
|
|
|
debug ("lococtrl_show:" + name);
|
|
|
|
if (!win) {
|
|
debug ("locolist_show create window");
|
|
win = gWindowCreate("lococtrl_"+name, "Loco:"+name, 270, 500, " \
|
|
<table><tr><td> \
|
|
<fieldset><legend>Speed</legend><table><tr><td align=center>\
|
|
\
|
|
<input id=\"lococtrl_"+name+"_RANGE\" name=\""+name+"\" type=\"range\" orient=\"vertical\" \
|
|
style=\"-webkit-appearance: slider-vertical; width: 10px; height: 100px;\"\
|
|
min=\"0\" value=\"0\" max=\"100\" > \
|
|
<br><button id=\"lococtrl_"+name+"_REVBTN\" type=\"button\">REV</button> \
|
|
\
|
|
</td><td><table>\
|
|
<tr><td><button id=\"lococtrl_"+name+"_btnvstop\" type=\"button\" value=\"vstop\">Stop</button> </td></tr>\
|
|
<tr><td><button id=\"lococtrl_"+name+"_btnvmin\" type=\"button\" value=\"vmin\">Min</button></td></tr>\
|
|
<tr><td><button id=\"lococtrl_"+name+"_btnvslow\" type=\"button\" value=\"vslow\">Slow</button></td></tr> \
|
|
<tr><td><button id=\"lococtrl_"+name+"_btnvmid\" type=\"button\" value=\"vmid\">Mid</button></td></tr> \
|
|
<tr><td><button id=\"lococtrl_"+name+"_btnvfast\" type=\"button\" value=\"vfast\">Fast</button></td></tr> \
|
|
<tr><td><button id=\"lococtrl_"+name+"_btnvmax\" type=\"button\" value=\"vmax\">Max</button></td></tr> \
|
|
</table></td></tr></table></fieldset> \
|
|
</td><td>\
|
|
<fieldset><legend>Control</legend><table>\
|
|
<tr> \
|
|
<td></td><td><button id=\"lococtrl_"+name+"_btnman\" type=\"button\" value=\"vstop\">MAN</button></td> \
|
|
</tr><tr> \
|
|
<td align=center><input id=\"lococtrl_"+name+"_cbstopman\" type=\"checkbox\" value=\"\" disabled></td>\
|
|
<td><button id=\"lococtrl_"+name+"_btnstopman\" type=\"button\" value=\"vstop\">A⇐M</button></td> \
|
|
</tr><tr> \
|
|
<td align=center><input id=\"lococtrl_"+name+"_cbauto\" type=\"checkbox\" value=\"\" disabled></td>\
|
|
<td><button id=\"lococtrl_"+name+"_btnauto\" type=\"button\" value=\"vstop\">AUTO</button></td> \
|
|
</tr><tr> \
|
|
<td align=center><input id=\"lococtrl_"+name+"_cbrand\" type=\"checkbox\" value=\"\" disabled></td>\
|
|
<td><button id=\"lococtrl_"+name+"_btnrand\" type=\"button\" value=\"vstop\">RAND</button></td> \
|
|
</tr> \
|
|
</table></fieldset> \
|
|
</td><tr></table>\
|
|
<br><div align=right> \
|
|
<button id=\"lococtrl_"+name+"_CLOSE\" type=\"button\" value=\""+name+"\">Close</button> \
|
|
</div> \
|
|
\
|
|
");
|
|
|
|
gAddEventListener("lococtrl_"+name+"_btnvstop", 'click', lococtrl_cb_btnmove);
|
|
gAddEventListener("lococtrl_"+name+"_btnvmin", 'click', lococtrl_cb_btnmove);
|
|
gAddEventListener("lococtrl_"+name+"_btnvslow", 'click', lococtrl_cb_btnmove);
|
|
gAddEventListener("lococtrl_"+name+"_btnvmid", 'click', lococtrl_cb_btnmove);
|
|
gAddEventListener("lococtrl_"+name+"_btnvfast", 'click', lococtrl_cb_btnmove);
|
|
gAddEventListener("lococtrl_"+name+"_btnvmax", 'click', lococtrl_cb_btnmove);
|
|
|
|
gAddEventListener("lococtrl_"+name+"_btnman", 'click', lococtrl_cb_btnman);
|
|
gAddEventListener("lococtrl_"+name+"_btnstopman", 'click', lococtrl_cb_btnstopman);
|
|
gAddEventListener("lococtrl_"+name+"_btnauto", 'click', lococtrl_cb_btnauto);
|
|
gAddEventListener("lococtrl_"+name+"_btnrand", 'click', lococtrl_cb_btnrand);
|
|
|
|
gAddEventListener("lococtrl_"+name+"_RANGE", 'click', lococtrl_speed);
|
|
gAddEventListener("lococtrl_"+name+"_REVBTN", 'click', lococtrl_reverse);
|
|
gAddEventListener("lococtrl_"+name+"_CLOSE", 'click', lococtrl_close);
|
|
}
|
|
for (var i = 0; i < locomotives.length; i++) {
|
|
if (name == locomotives[i].name) lococtrl_setData(locomotives[i]);
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
function lococtrl_cb_btnman() {
|
|
var name = getTextBetween(this.id, "lococtrl_", "_btnman");
|
|
var request = { command: "locomotivesetman", locomotive: name };
|
|
serverinout (request, serverinout_defaultCallback);
|
|
};
|
|
|
|
|
|
function lococtrl_cb_btnstopman() {
|
|
var name = getTextBetween(this.id, "lococtrl_", "_btnstopman");
|
|
var request = { command: "locomotivesetautoman", locomotive: name };
|
|
serverinout (request, serverinout_defaultCallback);
|
|
};
|
|
|
|
|
|
function lococtrl_cb_btnauto() {
|
|
var name = getTextBetween(this.id, "lococtrl_", "_btnauto");
|
|
var request = { command: "locomotivesetauto", locomotive: name };
|
|
serverinout (request, serverinout_defaultCallback);
|
|
};
|
|
|
|
|
|
function lococtrl_cb_btnrand() {
|
|
var name = getTextBetween(this.id, "lococtrl_", "_btnauto");
|
|
var request = { command: "locomotivesetautorand", locomotive: name };
|
|
serverinout (request, serverinout_defaultCallback);
|
|
};
|
|
|
|
|
|
function lococtrl_reverse() {
|
|
var name = getTextBetween(this.id, "lococtrl_", "_REVBTN");
|
|
var reverse;
|
|
|
|
for (var i = 0; i < locomotives.length; i++) {
|
|
if (name == locomotives[i].name) {
|
|
if (locomotives[i].flags & 1) {
|
|
reverse = 0;
|
|
this.innerHTML = "FWD";
|
|
}
|
|
else {
|
|
reverse = 1;
|
|
this.innerHTML = "REV";
|
|
}
|
|
locomotive_server_Set ({name: name, reverse: reverse});
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
function lococtrl_cb_btnmove () {
|
|
var name = getTextBetween(this.id, "lococtrl_", "_btn" + this.value);
|
|
var reverse = document.getElementById("lococtrl_"+name+"_REVBTN");
|
|
var cursel = -1;
|
|
var speed = 0;
|
|
|
|
for (var i = 0; i < locomotives.length; i++) {
|
|
if (name == locomotives[i].name) cursel = i;
|
|
}
|
|
if (cursel == -1) return;
|
|
|
|
if (this.value == "vmin") speed = Number(locomotives[cursel].vmin);
|
|
if (this.value == "vslow") speed = Number(locomotives[cursel].vslow);
|
|
if (this.value == "vmid") speed = Number(locomotives[cursel].vmid);
|
|
if (this.value == "vfast") speed = Number(locomotives[cursel].vfast);
|
|
if (this.value == "vmax") speed = Number(locomotives[cursel].vmax);
|
|
|
|
if (reverse.innerHTML == "REV") speed = 0 - speed;
|
|
|
|
locomotive_server_Set ({name: name, speed: speed});
|
|
debug ("Locomotive: '" + name +"' Speed: " + speed);
|
|
};
|
|
|
|
|
|
function lococtrl_speed() {
|
|
var name = getTextBetween(this.id, "lococtrl_", "_RANGE");
|
|
var reverse = document.getElementById("lococtrl_"+name+"_REVBTN");
|
|
|
|
let speed = this.value;
|
|
if (reverse.innerHTML == "REV") speed = 0 - speed;
|
|
|
|
debug ("Speed Loco:'"+name+"' Speed:'"+speed+"'");
|
|
for (var i = 0; i < locomotives.length; i++) {
|
|
if (name == locomotives[i].name) {
|
|
locomotive_server_Set ({name: name, speed: speed});
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
function lococtrl_setData(data) {
|
|
var range = document.getElementById("lococtrl_"+data.name+"_RANGE");
|
|
var reverse = document.getElementById("lococtrl_"+data.name+"_REVBTN");
|
|
var cbauto = document.getElementById("lococtrl_"+data.name+"_cbauto");
|
|
var cbrand = document.getElementById("lococtrl_"+data.name+"_cbrand");
|
|
var cbmanstop = document.getElementById("lococtrl_"+data.name+"_cbstopman");
|
|
|
|
if (range && reverse) {
|
|
debug ("lococtrl: " + data.name + " speed:" + data.speed + " vmax:" +
|
|
data.vmax + " flags:" + data.flags);
|
|
if (data.flags & LOCO_F_REVERSE) reverse.innerHTML = "REV";
|
|
else reverse.innerHTML = "FWD";
|
|
|
|
cbauto.checked = (data.flags & LOCO_F_AUTO);
|
|
cbrand.checked = (data.flags & LOCO_F_RANDOM);
|
|
cbmanstop.checked = (data.flags & LOCO_F_AUTOSTOP);
|
|
|
|
range.min = 0;
|
|
if (data.vmax) range.max = data.vmax;
|
|
range.value = Math.abs(Number(data.speed));
|
|
}
|
|
};
|
|
|
|
|
|
function lococtrl_close() {
|
|
debug ("LocoCtrl_close:" + this.value);
|
|
|
|
var win = document.getElementById("lococtrl_"+this.value);
|
|
if (win) document.body.removeChild(win);
|
|
};
|
|
|
|
|