// // // var blocks = []; const BLOCK_F_OFF = 0x0001; const BLOCK_F_SHORT = 0x0010; const BLOCK_F_LONG = 0x0020; const BLOCK_F_ENDSTATION = 0x0040; const BLOCK_F_STATION = 0x0080; const BLOCK_F_SPEEDLIMIT = 0x0100; // // 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_pos_1 = blockdata.sensor_pos_1, blocks[i].sensor_center = blockdata.sensor_center, blocks[i].sensor_neg_1 = blockdata.sensor_neg_1 blockdetail_setData(blocks[i]); return; } } // not found add element //debug ("Add Interface:" + intdata.name + "(" + intdata.host + ")"); blocks.push ({ name: blockdata.name, flags: blockdata.flags, lockedby: blockdata.lockedby, sensor_pos_1: blockdata.sensor_pos_1, sensor_center: blockdata.sensor_center, sensor_neg_1: blockdata.sensor_neg_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 = "

"; innerhtml += "
"; innerhtml += "
"; innerhtml += "
"; innerhtml += "
"; innerhtml += "
"; innerhtml += "
"; innerhtml += "
"; 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 }; debug ("send BlockOff:" + blockname); serverinout (request, serverinout_defaultCallback); }; // // if create is set the name should be filled in function blockdetail_show(name, create) { var win = document.getElementById("blockdetail"); let innerHTML = " \
\ Block Name: \
\ \ \


\
\ \
\ \
\
\
\ \
\
\
\
\
\ \
\
Automatic Mode \ \ \ \ \
Lockedby:
Sensor ←↑:
Sensor Center:
Sensor →↓:
\

\
\ \ \ \
\ \ "; debug ("blockdetail_show"); if (!win) { debug ("blockdetail_show create window"); win = gWindowCreate("blockdetail", "Block", 450, 300, 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]); } // debug ("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]); } // debug ("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 flaglong = document.getElementById("blockdet_flaglong"); var flagend = document.getElementById("blockdet_flagend"); var flagstation = document.getElementById("blockdet_flagstation"); var flagspeedlimit = document.getElementById("blockdet_flagspeedlimit"); var sensorLU = document.getElementById("blockdet_sensorLU"); var sensorC = document.getElementById("blockdet_sensorC"); var sensorRD = document.getElementById("blockdet_sensorRD"); 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 (flaglong) flaglong.checked = Number(elm.flags) & BLOCK_F_LONG; if (flagend) flagend.checked = Number(elm.flags) & BLOCK_F_ENDSTATION; if (flagstation) flagstation.checked = Number(elm.flags) & BLOCK_F_STATION; if (flagspeedlimit) flagspeedlimit.checked = Number(elm.flags) & BLOCK_F_SPEEDLIMIT; if (sensorLU) sensorLU.value = elm.sensor_pos_1; if (sensorC) sensorC.value = elm.sensor_center; if (sensorRD) sensorRD.value = elm.sensor_neg_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 flaglong = document.getElementById("blockdet_flaglong"); var flagend = document.getElementById("blockdet_flagend"); var flagstation = document.getElementById("blockdet_flagstation"); var flagspeedlimit = document.getElementById("blockdet_flagspeedlimit"); var sensorLU = document.getElementById("blockdet_sensorLU"); var sensorC = document.getElementById("blockdet_sensorC"); var sensorRD = document.getElementById("blockdet_sensorRD"); 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 (flaglong.checked) res.flags |= BLOCK_F_LONG; else res.flags &= ~BLOCK_F_LONG; if (flagend.checked) res.flags |= BLOCK_F_ENDSTATION; else res.flags &= ~BLOCK_F_ENDSTATION; 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 (sensorLU) res.sensor_pos_1 = sensorLU.value; if (sensorC) res.sensor_center = sensorC.value; if (sensorRD) res.sensor_neg_1 = sensorRD.value; return res; };