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.

419 lines
13 KiB

//
//
//
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 = "<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 &lArr;&uArr;</button><br>";
innerhtml += "<button id=\"contextbox_AsgnRD\" type=\"button\">Assign &rArr;&dArr;</button><br>";
innerhtml += "<button id=\"contextbox_SetDLU\" type=\"button\">Go &lArr;&uArr;</button><br>";
innerhtml += "<button id=\"contextbox_SetDRD\" type=\"button\">Go &rArr;&dArr;</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 };
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 = " \
<div style=\"float: left\"> \
Block Name: <input id=\"blockdet_name\" style=\"width: 100\"> \
</div> <div style=\"float: right\"> \
<button id=\"blockdet_PREV\">&lt</button> \
<button id=\"blockdet_NEXT\">&gt</button> \
</div><br><hr>\
<div>\
\
<table><tr><td>\
\
<table><tr><td> \
<label><input id=\"blockdet_flagoff\" type=\"checkbox\" value=\"\" disabled>Off Service</label><br> \
<label><input id=\"blockdet_flagshort\" type=\"checkbox\" value=\"\">Short</label><br>\
<label><input id=\"blockdet_flaglong\" type=\"checkbox\" value=\"\">Long</label> \
</td><td> \
<label><input id=\"blockdet_flagend\" type=\"checkbox\" value=\"\">End</label><br> \
<label><input id=\"blockdet_flagstation\" type=\"checkbox\" value=\"\">Station</label><br> \
<label><input id=\"blockdet_flagspeedlimit\" type=\"checkbox\" value=\"\">Speed Limit</label><br> \
</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>\
<tr><td>Sensor &larr;&uarr;:</td><td><label><select id=\"blockdet_sensorLU\">";
innerHTML += "<option value=\"\"></option>";
for (var i = 0; i < sensors.length; i++) {
if (sensors[i].name)
innerHTML += "<option value=\""+sensors[i].name+"\">"+sensors[i].name+"</option>";
}
innerHTML += "</select></label></td></tr>\
<tr><td>Sensor Center:</td><td><label><select id=\"blockdet_sensorC\">";
innerHTML += "<option value=\"\"></option>";
for (var i = 0; i < sensors.length; i++) {
if (sensors[i].name)
innerHTML += "<option value=\""+sensors[i].name+"\">"+sensors[i].name+"</option>";
}
innerHTML += "</select></label></td></tr>\
<tr><td>Sensor &rarr;&darr;:</td><td><label><select id=\"blockdet_sensorRD\">";
innerHTML += "<option value=\"\"></option>";
for (var i = 0; i < sensors.length; i++) {
if (sensors[i].name)
innerHTML += "<option value=\""+sensors[i].name+"\">"+sensors[i].name+"</option>";
}
innerHTML += "</select></label></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> \
\
";
debug ("blockdetail_show");
if (!win) {
debug ("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]);
}
// 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;
};