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.
484 lines
17 KiB
484 lines
17 KiB
//
|
|
//
|
|
//
|
|
|
|
var blocks = [];
|
|
const BLOCK_F_OFF = 0x0001;
|
|
const BLOCK_F_SPLIT = 0x0002;
|
|
const BLOCK_F_SPLITPOS = 0x0004;
|
|
const BLOCK_F_SHORT = 0x0010;
|
|
const BLOCK_F_ENDSTATION = 0x0040;
|
|
const BLOCK_F_STATION = 0x0080;
|
|
const BLOCK_F_SPEEDLIMIT = 0x0100;
|
|
const BLOCK_F_ONLYCARGO = 0x0200;
|
|
const BLOCK_F_ONLYPASSENGER = 0x0400;
|
|
|
|
//
|
|
// update or add a new element
|
|
//
|
|
function block_Update(blockdata) {
|
|
for (var i = 0; i < blocks.length; i++) {
|
|
if (blockdata.name == blocks[i].name) {
|
|
blocks[i].name = blockdata.name;
|
|
blocks[i].flags = blockdata.flags;
|
|
blocks[i].lockedby = blockdata.lockedby;
|
|
blocks[i].sensor_stop_0 = blockdata.sensor_stop_0,
|
|
blocks[i].sensor_shortstop_0 = blockdata.sensor_shortstop_0,
|
|
blocks[i].sensor_slow_0 = blockdata.sensor_slow_0,
|
|
blocks[i].sensor_enter_0 = blockdata.sensor_enter_0,
|
|
blocks[i].sensor_stop_1 = blockdata.sensor_stop_1,
|
|
blocks[i].sensor_shortstop_1 = blockdata.sensor_shortstop_1,
|
|
blocks[i].sensor_slow_1 = blockdata.sensor_slow_1,
|
|
blocks[i].sensor_enter_1 = blockdata.sensor_enter_1,
|
|
blockdetail_setData(blocks[i]);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// not found add element
|
|
//console.log ("Add Interface:" + intdata.name + "(" + intdata.host + ")");
|
|
blocks.push ({
|
|
name: blockdata.name,
|
|
flags: blockdata.flags,
|
|
lockedby: blockdata.lockedby,
|
|
sensor_enter_0: blockdata.sensor_enter_0,
|
|
sensor_slow_0: blockdata.sensor_slow_0,
|
|
sensor_stop_0: blockdata.sensor_stop_0,
|
|
sensor_shortstop_0: blockdata.sensor_shortstop_0,
|
|
sensor_enter_1: blockdata.sensor_enter_1,
|
|
sensor_slow_1: blockdata.sensor_slow_1,
|
|
sensor_stop_1: blockdata.sensor_stop_1,
|
|
sensor_shortstop_1: blockdata.sensor_shortstop_1
|
|
});
|
|
};
|
|
|
|
|
|
//
|
|
// 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 block_Delete(name) {
|
|
var l = new Array();
|
|
|
|
for (var i = 0; i < blocks.length; i++) {
|
|
if (name != blocks[i].name) {
|
|
l.push (blocks[i]);
|
|
}
|
|
}
|
|
|
|
// clear list and replace list with new data.
|
|
blocks.lenght = 0;
|
|
blocks = l;
|
|
};
|
|
|
|
|
|
|
|
function block_contextmenu(name) {
|
|
let innerhtml = "";
|
|
|
|
innerhtml = "<center><label><select id=\"contextbox_loc\">";
|
|
innerhtml += "<option value=\"\"></option>";
|
|
for (var i = 0; i < locomotives.length; i++) {
|
|
if (locomotives[i].name)
|
|
innerhtml += "<option value=\""+locomotives[i].name+"\">"+locomotives[i].name+"</option>";
|
|
}
|
|
innerhtml += "</select></label><br>";
|
|
innerhtml += "<button id=\"contextbox_AsgnLU\" type=\"button\">Assign ⇐⇑</button><br>";
|
|
innerhtml += "<button id=\"contextbox_AsgnRD\" type=\"button\">Assign ⇒⇓</button><br>";
|
|
innerhtml += "<button id=\"contextbox_SetDLU\" type=\"button\">Go ⇐⇑</button><br>";
|
|
innerhtml += "<button id=\"contextbox_SetDRD\" type=\"button\">Go ⇒⇓</button><hr>";
|
|
innerhtml += "<button id=\"contextbox_Clear\" type=\"button\">Clear</button><br>";
|
|
innerhtml += "<button id=\"contextbox_Off\" type=\"button\">Off</button><hr>";
|
|
innerhtml += "<button id=\"contextbox_Close\" type=\"button\">Close</button></center>";
|
|
|
|
gContextmenuCreate(name, innerhtml);
|
|
|
|
gAddEventListener("contextbox_AsgnLU", 'click', block_ctxmenu_AssignLU);
|
|
gAddEventListener("contextbox_AsgnRD", 'click', block_ctxmenu_AssignRD);
|
|
gAddEventListener("contextbox_SetDLU", 'click', block_ctxmenu_DestinationLU);
|
|
gAddEventListener("contextbox_SetDRD", 'click', block_ctxmenu_DestinationRD);
|
|
gAddEventListener("contextbox_Clear", 'click', block_ctxmenu_Clear);
|
|
gAddEventListener("contextbox_Off", 'click', block_ctxmenu_Off);
|
|
gAddEventListener("contextbox_Close", 'click', gContextmenuClose);
|
|
};
|
|
|
|
|
|
function block_ctxmenu_DestinationLU (element, value) {
|
|
let loc = document.getElementById("contextbox_loc");
|
|
let name = document.getElementById("ConextMenuHead").innerHTML;
|
|
if (loc) {
|
|
locomotive_server_Dest(loc.value, name, 1);
|
|
}
|
|
gContextmenuClose();
|
|
};
|
|
|
|
|
|
function block_ctxmenu_DestinationRD (element, value) {
|
|
let loc = document.getElementById("contextbox_loc");
|
|
let name = document.getElementById("ConextMenuHead").innerHTML;
|
|
if (loc) {
|
|
locomotive_server_Dest(loc.value, name, 0);
|
|
}
|
|
gContextmenuClose();
|
|
};
|
|
|
|
|
|
function block_ctxmenu_AssignLU (element, value) {
|
|
let loc = document.getElementById("contextbox_loc");
|
|
let name = document.getElementById("ConextMenuHead").innerHTML;
|
|
if (loc) {
|
|
locomotive_server_Assign(loc.value, name, 1);
|
|
}
|
|
gContextmenuClose();
|
|
};
|
|
|
|
|
|
function block_ctxmenu_AssignRD (element, value) {
|
|
let loc = document.getElementById("contextbox_loc");
|
|
let name = document.getElementById("ConextMenuHead").innerHTML;
|
|
if (loc) {
|
|
locomotive_server_Assign(loc.value, name, 0);
|
|
}
|
|
gContextmenuClose();
|
|
};
|
|
|
|
|
|
function block_ctxmenu_Clear (element, value) {
|
|
let name = document.getElementById("ConextMenuHead").innerHTML;
|
|
block_server_Clear(name);
|
|
gContextmenuClose();
|
|
}
|
|
|
|
function block_ctxmenu_Off (element, value) {
|
|
let name = document.getElementById("ConextMenuHead").innerHTML;
|
|
block_server_Off(name);
|
|
gContextmenuClose();
|
|
}
|
|
|
|
|
|
//
|
|
// send new element to server
|
|
//
|
|
function block_server_Add(elm) {
|
|
var request = { command: "addblock", block: elm };
|
|
serverinout (request, serverinout_defaultCallback);
|
|
};
|
|
|
|
|
|
//
|
|
// send delete element to server
|
|
//
|
|
function block_server_Del(elm) {
|
|
var request = { command: "delblock", block: elm };
|
|
serverinout (request, serverinout_defaultCallback);
|
|
};
|
|
|
|
|
|
//
|
|
// send clear block
|
|
//
|
|
function block_server_Clear(blockname) {
|
|
var request = { command: "blockclear", block: blockname };
|
|
serverinout (request, serverinout_defaultCallback);
|
|
};
|
|
|
|
|
|
//
|
|
// send put block off service
|
|
//
|
|
function block_server_Off(blockname) {
|
|
var request = { command: "blockoff", block: blockname };
|
|
console.log ("send BlockOff:" + blockname);
|
|
serverinout (request, serverinout_defaultCallback);
|
|
};
|
|
|
|
|
|
//
|
|
// if create is set the name should be filled in
|
|
function blockdetail_fillsensor() {
|
|
let r = "<option value=\"\"></option>";
|
|
for (var i = 0; i < sensors.length; i++) {
|
|
if (sensors[i].name)
|
|
r += "<option value=\""+sensors[i].name+"\">"+sensors[i].name+"</option>";
|
|
};
|
|
return r;
|
|
}
|
|
|
|
|
|
function blockdetail_show(name, create) {
|
|
var win = document.getElementById("blockdetail");
|
|
let innerHTML = " \
|
|
<div style=\"float: left\"> \
|
|
Block Name: <input id=\"blockdet_name\" style=\"width: 100\"> \
|
|
</div> <div style=\"float: right\"> \
|
|
<button id=\"blockdet_PREV\"><</button> \
|
|
<button id=\"blockdet_NEXT\">></button> \
|
|
</div><br><hr>\
|
|
<div>\
|
|
\
|
|
<table><tr><td>\
|
|
\
|
|
<table><tr> \
|
|
<td><label><input id=\"blockdet_flagoff\" type=\"checkbox\" value=\"\" disabled>Off Service</label></td> \
|
|
<td><label><input id=\"blockdet_flagonlycargo\" type=\"checkbox\" value=\"\">Only Cargo</label></td> \
|
|
<td><label><input id=\"blockdet_flagshort\" type=\"checkbox\" value=\"\">Short</label></td> \
|
|
</tr><tr> \
|
|
<td><label><input id=\"blockdet_flagend\" type=\"checkbox\" value=\"\">End</label></td> \
|
|
<td><label><input id=\"blockdet_flagonlypassenger\" type=\"checkbox\" value=\"\">Only Passenger</label></td> \
|
|
<td><label><input id=\"blockdet_flagsplit\" type=\"checkbox\" value=\"\">Split</label></td> \
|
|
</tr><tr> \
|
|
<td><label><input id=\"blockdet_flagspeedlimit\" type=\"checkbox\" value=\"\">Speed Limit</label></td> \
|
|
<td><label><input id=\"blockdet_flagstation\" type=\"checkbox\" value=\"\">Station</label></td> \
|
|
<td><label><input id=\"blockdet_flagsplitpos\" type=\"checkbox\" value=\"\">Splitpos</label></td> \
|
|
</tr><tr> \
|
|
<td></td> \
|
|
</tr></table> \
|
|
\
|
|
</td><td></td></tr></table> \
|
|
<fieldset><legend>Automatic Mode</legend><table> \
|
|
<tr><td>Lockedby:</td><td><input id=\"blockdet_lockedby\" style=\"width: 100\" disabled></td></tr>"
|
|
|
|
innerHTML += "<table><tr><td></td><td>enter</td><td>slow</td><td>shortstop</td><td>stop</td></tr>";
|
|
innerHTML += "<tr><td>Direction →↓:</td>";
|
|
innerHTML += "<td align=center><label><select id=\"blockdet_sensor_enter_0\">" + blockdetail_fillsensor() + "</select></label></td>";
|
|
innerHTML += "<td align=center><label><select id=\"blockdet_sensor_slow_0\">" + blockdetail_fillsensor() + "</select></label></td>";
|
|
innerHTML += "<td align=center><label><select id=\"blockdet_sensor_shortstop_0\">" + blockdetail_fillsensor() + "</select></label></td>";
|
|
innerHTML += "<td align=center><label><select id=\"blockdet_sensor_stop_0\">" + blockdetail_fillsensor() + "</select></label></td>";
|
|
innerHTML += "</tr>";
|
|
|
|
innerHTML += "<tr><td>Direction ←↑:</td>";
|
|
innerHTML += "<td align=center><label><select id=\"blockdet_sensor_enter_1\">" + blockdetail_fillsensor() + "</select></label></td>";
|
|
innerHTML += "<td align=center><label><select id=\"blockdet_sensor_slow_1\">" + blockdetail_fillsensor() + "</select></label></td>";
|
|
innerHTML += "<td align=center><label><select id=\"blockdet_sensor_shortstop_1\">" + blockdetail_fillsensor() + "</select></label></td>";
|
|
innerHTML += "<td align=center><label><select id=\"blockdet_sensor_stop_1\">" + blockdetail_fillsensor() + "</select></label></td>";
|
|
innerHTML += "</tr></table>";
|
|
|
|
innerHTML += "</td></tr></table></fileset>\
|
|
</div> <hr>\
|
|
<div align=right> \
|
|
<button id=\"blockdet_SAVE\" type=\"button\">Save</button> \
|
|
<button id=\"blockdet_DELETE\" type=\"button\">Delete</button> \
|
|
<button id=\"blockdet_CLOSE\">Close</button> \
|
|
</div> \
|
|
\
|
|
";
|
|
console.log ("blockdetail_show");
|
|
|
|
if (!win) {
|
|
console.log ("blockdetail_show create window");
|
|
win = gWindowCreate("blockdetail", "Block", 500, 400, innerHTML);
|
|
|
|
gAddEventListener("blockdet_CLOSE", 'click', blockdetail_cb_close);
|
|
gAddEventListener("blockdet_DELETE", 'click', blockdetail_cb_delete);
|
|
gAddEventListener("blockdet_SAVE", 'click', blockdetail_cb_save);
|
|
|
|
gAddEventListener("blockdet_NEXT", 'click', blockdetail_cb_next);
|
|
gAddEventListener("blockdet_PREV", 'click', blockdetail_cb_prev);
|
|
}
|
|
|
|
if (name) {
|
|
for (var i = 0; i < blocks.length; i++) {
|
|
if (name == blocks[i].name) blockdetail_setData(blocks[i]);
|
|
}
|
|
}
|
|
|
|
if (create) {
|
|
let rname = document.getElementById("blockdet_name");
|
|
if (rname.value != name) rname.value = name;
|
|
}
|
|
};
|
|
|
|
|
|
function blockdetail_cb_close () {
|
|
var win = document.getElementById("blockdetail");
|
|
|
|
if (win) document.body.removeChild(win);
|
|
};
|
|
|
|
|
|
//
|
|
// Callback: Delete Button
|
|
//
|
|
function blockdetail_cb_delete () {
|
|
var elm = {};
|
|
|
|
elm = blockdetail_getData();
|
|
block_Delete(elm.name);
|
|
block_server_Del(elm);
|
|
};
|
|
|
|
|
|
//
|
|
// Callback: Save Button
|
|
//
|
|
function blockdetail_cb_save () {
|
|
var elm = {};
|
|
|
|
elm = blockdetail_getData();
|
|
block_Update(elm);
|
|
block_server_Add(elm);
|
|
};
|
|
|
|
|
|
//
|
|
// Callback: Next Button
|
|
//
|
|
function blockdetail_cb_next () {
|
|
var cursel = -1;
|
|
var name = document.getElementById("blockdet_name");
|
|
|
|
for (var i = 0; i < blocks.length; i++) {
|
|
if (name.value == blocks[i].name) cursel = i;
|
|
}
|
|
|
|
cursel = cursel + 1;
|
|
if (cursel >= blocks.length) cursel = 0;
|
|
if (cursel < 0) cursel = 0;
|
|
|
|
for (var i = 0; i < blocks.length; i++) {
|
|
if (i == cursel) blockdetail_setData(blocks[i]);
|
|
}
|
|
|
|
// console.log ("Cursel: " + cursel + " interfaces.lenght:" + interfaces.length);
|
|
};
|
|
|
|
|
|
//
|
|
// Callback: Prev Button
|
|
//
|
|
function blockdetail_cb_prev () {
|
|
var cursel = -1;
|
|
var name = document.getElementById("blockdet_name");
|
|
|
|
|
|
for (var i = 0; i < blocks.length; i++) {
|
|
if (name.value == blocks[i].name) cursel = i;
|
|
}
|
|
|
|
cursel = cursel - 1;
|
|
if (cursel < 0 || cursel >= blocks.length) cursel = blocks.length - 1;
|
|
|
|
for (var i = 0; i < blocks.length; i++) {
|
|
if (i == cursel) blockdetail_setData(blocks[i]);
|
|
}
|
|
|
|
// console.log ("Cursel: " + cursel + " interfaces.lenght:" + interfaces.length);
|
|
};
|
|
|
|
|
|
//
|
|
// fill out all the elements on the dialogbox
|
|
//
|
|
function blockdetail_setData(elm) {
|
|
var name = document.getElementById("blockdet_name");
|
|
var flagoff = document.getElementById("blockdet_flagoff");
|
|
var flagshort = document.getElementById("blockdet_flagshort");
|
|
var flagsplit = document.getElementById("blockdet_flagsplit");
|
|
var flagsplitpos = document.getElementById("blockdet_flagsplitpos");
|
|
var flagend = document.getElementById("blockdet_flagend");
|
|
var flagonlycargo = document.getElementById("blockdet_flagonlycargo");
|
|
var flagonlypassenger = document.getElementById("blockdet_flagonlypassenger");
|
|
var flagstation = document.getElementById("blockdet_flagstation");
|
|
var flagspeedlimit = document.getElementById("blockdet_flagspeedlimit");
|
|
var sensor_enter_0 = document.getElementById("blockdet_sensor_enter_0");
|
|
var sensor_slow_0 = document.getElementById("blockdet_sensor_slow_0");
|
|
var sensor_stop_0 = document.getElementById("blockdet_sensor_stop_0");
|
|
var sensor_shortstop_0 = document.getElementById("blockdet_sensor_shortstop_0");
|
|
var sensor_enter_1 = document.getElementById("blockdet_sensor_enter_1");
|
|
var sensor_slow_1 = document.getElementById("blockdet_sensor_slow_1");
|
|
var sensor_stop_1 = document.getElementById("blockdet_sensor_stop_1");
|
|
var sensor_shortstop_1 = document.getElementById("blockdet_sensor_shortstop_1");
|
|
var lockedby = document.getElementById("blockdet_lockedby");
|
|
|
|
if (elm) {
|
|
if (name) name.value = elm.name;
|
|
if (flagoff) flagoff.checked = Number(elm.flags) & BLOCK_F_OFF;
|
|
if (flagshort) flagshort.checked = Number(elm.flags) & BLOCK_F_SHORT;
|
|
if (flagsplit) flagsplit.checked = Number(elm.flags) & BLOCK_F_SPLIT;
|
|
if (flagsplitpos) flagsplitpos.checked = Number(elm.flags) & BLOCK_F_SPLITPOS;
|
|
if (flagend) flagend.checked = Number(elm.flags) & BLOCK_F_ENDSTATION;
|
|
if (flagonlycargo) flagonlycargo.checked = Number(elm.flags) & BLOCK_F_ONLYCARGO;
|
|
if (flagonlypassenger) flagonlypassenger.checked = Number(elm.flags) & BLOCK_F_ONLYPASSENGER;
|
|
if (flagstation) flagstation.checked = Number(elm.flags) & BLOCK_F_STATION;
|
|
if (flagspeedlimit) flagspeedlimit.checked = Number(elm.flags) & BLOCK_F_SPEEDLIMIT;
|
|
if (sensor_enter_0) sensor_enter_0.value = elm.sensor_enter_0;
|
|
if (sensor_slow_0) sensor_slow_0.value = elm.sensor_slow_0;
|
|
if (sensor_stop_0) sensor_stop_0.value = elm.sensor_stop_0;
|
|
if (sensor_shortstop_0) sensor_shortstop_0.value = elm.sensor_shortstop_0;
|
|
if (sensor_enter_1) sensor_enter_1.value = elm.sensor_enter_1;
|
|
if (sensor_slow_1) sensor_slow_1.value = elm.sensor_slow_1;
|
|
if (sensor_stop_1) sensor_stop_1.value = elm.sensor_stop_1;
|
|
if (sensor_shortstop_1) sensor_shortstop_1.value = elm.sensor_shortstop_1;
|
|
if (lockedby) lockedby.value = elm.lockedby;
|
|
}
|
|
};
|
|
|
|
|
|
|
|
//
|
|
// return all elements from the dialogbox
|
|
//
|
|
function blockdetail_getData() {
|
|
var res = { name: "", flags:0 };
|
|
var name = document.getElementById("blockdet_name");
|
|
var flagoff = document.getElementById("blockdet_flagoff");
|
|
var flagshort = document.getElementById("blockdet_flagshort");
|
|
var flagsplit = document.getElementById("blockdet_flagsplit");
|
|
var flagsplitpos = document.getElementById("blockdet_flagsplitpos");
|
|
var flagend = document.getElementById("blockdet_flagend");
|
|
var flagonlycargo = document.getElementById("blockdet_flagonlycargo");
|
|
var flagonlypassenger = document.getElementById("blockdet_flagonlypassenger");
|
|
var flagstation = document.getElementById("blockdet_flagstation");
|
|
var flagspeedlimit = document.getElementById("blockdet_flagspeedlimit");
|
|
var sensor_enter_0 = document.getElementById("blockdet_sensor_enter_0");
|
|
var sensor_slow_0 = document.getElementById("blockdet_sensor_slow_0");
|
|
var sensor_stop_0 = document.getElementById("blockdet_sensor_stop_0");
|
|
var sensor_shortstop_0 = document.getElementById("blockdet_sensor_shortstop_0");
|
|
var sensor_enter_1 = document.getElementById("blockdet_sensor_enter_1");
|
|
var sensor_slow_1 = document.getElementById("blockdet_sensor_slow_1");
|
|
var sensor_stop_1 = document.getElementById("blockdet_sensor_stop_1");
|
|
var sensor_shortstop_1 = document.getElementById("blockdet_sensor_shortstop_1");
|
|
|
|
if (name) res.name = name.value;
|
|
|
|
if (flagoff.checked) res.flags |= BLOCK_F_OFF;
|
|
else res.flags &= ~BLOCK_F_OFF;
|
|
|
|
if (flagshort.checked) res.flags |= BLOCK_F_SHORT;
|
|
else res.flags &= ~BLOCK_F_SHORT;
|
|
|
|
if (flagsplit.checked) res.flags |= BLOCK_F_SPLIT;
|
|
else res.flags &= ~BLOCK_F_SPLIT;
|
|
|
|
if (flagsplitpos.checked) res.flags |= BLOCK_F_SPLITPOS;
|
|
else res.flags &= ~BLOCK_F_SPLITPOS;
|
|
|
|
if (flagend.checked) res.flags |= BLOCK_F_ENDSTATION;
|
|
else res.flags &= ~BLOCK_F_ENDSTATION;
|
|
|
|
if (flagonlycargo.checked) res.flags |= BLOCK_F_ONLYCARGO;
|
|
else res.flags &= ~BLOCK_F_ONLYCARGO;
|
|
|
|
if (flagonlypassenger.checked) res.flags |= BLOCK_F_ONLYPASSENGER;
|
|
else res.flags &= ~BLOCK_F_ONLYPASSENGER;
|
|
|
|
if (flagstation.checked) res.flags |= BLOCK_F_STATION;
|
|
else res.flags &= ~BLOCK_F_STATION;
|
|
|
|
if (flagspeedlimit.checked) res.flags |= BLOCK_F_SPEEDLIMIT;
|
|
else res.flags &= ~BLOCK_F_SPEEDLIMIT;
|
|
|
|
if (sensor_enter_0) res.sensor_enter_0 = sensor_enter_0.value;
|
|
if (sensor_slow_0) res.sensor_slow_0 = sensor_slow_0.value;
|
|
if (sensor_stop_0) res.sensor_stop_0 = sensor_stop_0.value;
|
|
if (sensor_shortstop_0) res.sensor_shortstop_0 = sensor_shortstop_0.value;
|
|
if (sensor_enter_1) res.sensor_enter_1 = sensor_enter_1.value;
|
|
if (sensor_slow_1) res.sensor_slow_1 = sensor_slow_1.value;
|
|
if (sensor_stop_1) res.sensor_stop_1 = sensor_stop_1.value;
|
|
if (sensor_shortstop_1) res.sensor_shortstop_1 = sensor_shortstop_1.value;
|
|
|
|
return res;
|
|
};
|
|
|