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.
525 lines
15 KiB
525 lines
15 KiB
//
|
|
//
|
|
//
|
|
|
|
const TURNOUT_F_INVERSE = 1;
|
|
const TURNOUT_F_MOTORACTIVE = 2;
|
|
const TURNOUT_F_TURNOUT = 4;
|
|
|
|
|
|
function rwdetail_requestcallback(response) {
|
|
debug ("rwdetail_requestcallback");
|
|
};
|
|
|
|
|
|
function rwdetail_request(posx, posy) {
|
|
var request = {locoid: locoID, parameter1: -1, name:"Otto"};
|
|
|
|
debug ("rwdetail_request");
|
|
|
|
serverinout(request, rwdetail_requestcallback);
|
|
};
|
|
|
|
function rwdetail_show(posx, posy) {
|
|
var win = document.getElementById("rwdetail");
|
|
|
|
debug ("rwdetail_show");
|
|
|
|
if (!win) {
|
|
debug ("rwdetail_show create window");
|
|
win = gWindowCreate("rwdetail", "Railway", 400, 500, " \
|
|
<div style=\"float: left\"> \
|
|
Position: <input id=\"rwdet_X\" style=\"width: 50\" value=\"" + posx +"\"> , <input id=\"rwdet_Y\" style=\"width: 50\" value=\"" + posy +"\"> \
|
|
</div> <br> <hr>\
|
|
<div> <table><tr><td><table> \
|
|
<tr><td>Ref.Name:</td><td><input id=\"rwdet_name\" style=\"width: 100\"></td></tr> \
|
|
<tr><td>Dir:</td><td><input id=\"rwdet_dir\" style=\"width: 25\"></td></tr> \
|
|
<tr><td>Alt Dir:</td><td><input id=\"rwdet_altdir\" style=\"width: 25\"></td></tr> \
|
|
</table><br> \
|
|
<center><canvas id=\"rwdet_canvas\" height=\""+track.scale+"\" width=\""+track.scale+"\" style=\"border:1px solid #000000;\"></center> <br>\
|
|
</td><td> \
|
|
<fieldset><legend>Type</legend> \
|
|
Type: <input id=\"rwdet_type\" style=\"width: 25\"><br> \
|
|
<label><input type=\"radio\" id=\"rwdet_typenothing\" name=\"Type\" value=\"0\">Nothing</label><br> \
|
|
<label><input type=\"radio\" id=\"rwdet_typenormal\" name=\"Type\" value=\"1\">Normal</label><br> \
|
|
<label><input type=\"radio\" id=\"rwdet_typecrossing\" name=\"Type\" value=\"2\">Crossing</label><br> \
|
|
<label><input type=\"radio\" id=\"rwdet_typeturnout\" name=\"Type\" value=\"3\">Turnout</label><br> \
|
|
<label><input type=\"radio\" id=\"rwdet_typesensor\" name=\"Type\" value=\"4\">Sensor</label><br> \
|
|
<label><input type=\"radio\" id=\"rwdet_typeconnector\" name=\"Type\" value=\"5\">Connector</label><br> \
|
|
<label><input type=\"radio\" id=\"rwdet_typebutton\" name=\"Type\" value=\"6\">Button</label><br> \
|
|
<label><input type=\"radio\" id=\"rwdet_typetext\" name=\"Type\" value=\"7\">Text</label><br> \
|
|
<label><input type=\"radio\" id=\"rwdet_typeblock\" name=\"Type\" value=\"8\">Block</label><br> \
|
|
</fieldset> \
|
|
\
|
|
</td></tr></table></div> <hr>\ \
|
|
\
|
|
<div align=right> \
|
|
<button id=\"rwdet_SAVE\" type=\"button\">Save</button> \
|
|
<button id=\"rwdet_CLOSE\">Close</button> \
|
|
</div> \
|
|
\
|
|
");
|
|
|
|
gAddEventListener("rwdet_dir", 'change', rwdetail_cb_dirchange);
|
|
gAddEventListener("rwdet_type", 'change', rwdetail_cb_typechange);
|
|
gAddEventListener("rwdet_altdir", 'change', rwdetail_cb_dirchange);
|
|
gAddEventListener("rwdet_typenothing", 'click', rwdetail_cb_typeselector);
|
|
gAddEventListener("rwdet_typenormal", 'click', rwdetail_cb_typeselector);
|
|
gAddEventListener("rwdet_typecrossing", 'click', rwdetail_cb_typeselector);
|
|
gAddEventListener("rwdet_typeturnout", 'click', rwdetail_cb_typeselector);
|
|
gAddEventListener("rwdet_typesensor", 'click', rwdetail_cb_typeselector);
|
|
gAddEventListener("rwdet_typeconnector", 'click', rwdetail_cb_typeselector);
|
|
gAddEventListener("rwdet_typebutton", 'click', rwdetail_cb_typeselector);
|
|
gAddEventListener("rwdet_typetext", 'click', rwdetail_cb_typeselector);
|
|
gAddEventListener("rwdet_typeblock", 'click', rwdetail_cb_typeselector);
|
|
gAddEventListener("rwdet_SAVE", 'click', rwdetail_cb_save);
|
|
gAddEventListener("rwdet_CLOSE", 'click', rwdetail_cb_close);
|
|
|
|
}
|
|
else {
|
|
var x = document.getElementById("rwdet_X");
|
|
var y = document.getElementById("rwdet_Y");
|
|
|
|
x.value = posx;
|
|
y.value = posy;
|
|
}
|
|
|
|
rwdetail_setData({type: 0, x: posx, y: posy, dir: 0, altdir: 0, name: ""});
|
|
if (track.elements[posx + posy * track.size.x]) {
|
|
rwdetail_setData(track.elements[posx + posy * track.size.x]);
|
|
}
|
|
};
|
|
|
|
function rwdetail_cb_dirchange () {
|
|
rwdetail_DrawSample ();
|
|
};
|
|
|
|
|
|
function rwdetail_cb_typechange () {
|
|
var type = document.getElementById("rwdet_type");
|
|
var typenothing = document.getElementById("rwdet_typenothing");
|
|
var typenormal = document.getElementById("rwdet_typenormal");
|
|
var typecrossing = document.getElementById("rwdet_typecrossing");
|
|
var typeturnout = document.getElementById("rwdet_typeturnout");
|
|
var typesensor = document.getElementById("rwdet_typesensor");
|
|
var typeconnector = document.getElementById("rwdet_typeconnector");
|
|
var typebutton = document.getElementById("rwdet_typebutton");
|
|
var typetext = document.getElementById("rwdet_typetext");
|
|
var typeblock = document.getElementById("rwdet_typeblock");
|
|
|
|
switch(Number(type.value)) {
|
|
case 0: typenothing.checked = true; break;
|
|
case 1: typenormal.checked = true; break;
|
|
case 2: typecrossing.checked = true; break;
|
|
case 3: typeturnout.checked = true; break;
|
|
case 4: typesensor.checked = true; break;
|
|
case 5: typeconnector.checked = true; break;
|
|
case 6: typebutton.checked = true; break;
|
|
case 7: typetext.checked = true; break;
|
|
case 8: typeblock.checked = true; break;
|
|
default:
|
|
type.value = 0;
|
|
typenothing.checked = true;
|
|
break;
|
|
}
|
|
rwdetail_DrawSample();
|
|
};
|
|
|
|
|
|
function rwdetail_cb_typeselector () {
|
|
var type = document.getElementById("rwdet_type");
|
|
|
|
type.value = this.value;
|
|
rwdetail_DrawSample ();
|
|
};
|
|
|
|
|
|
function rwdetail_cb_save () {
|
|
var name = document.getElementById("rwdet_name");
|
|
var type = document.getElementById("rwdet_type");
|
|
var dir = document.getElementById("rwdet_dir");
|
|
var altdir = document.getElementById("rwdet_altdir");
|
|
var x = document.getElementById("rwdet_X");
|
|
var y = document.getElementById("rwdet_Y");
|
|
|
|
var rws = new Array();
|
|
|
|
rws.length = 0;
|
|
rws.push({name: name.value, x: Number(x.value), y: Number(y.value), type: type.value,
|
|
dir: dir.value, altdir: altdir.value});
|
|
serverinout_addTrack(rws);
|
|
trackAddElement(rws[0]);
|
|
};
|
|
|
|
|
|
function rwdetail_cb_close () {
|
|
var win = document.getElementById("rwdetail");
|
|
|
|
if (win) document.body.removeChild(win);
|
|
};
|
|
|
|
|
|
function rwdetail_DrawSample() {
|
|
var type = document.getElementById("rwdet_type");
|
|
var dir = document.getElementById("rwdet_dir");
|
|
var altdir = document.getElementById("rwdet_altdir");
|
|
var c = document.getElementById("rwdet_canvas");
|
|
var ctx = c.getContext("2d");
|
|
|
|
ctx.fillRect(0, 0, track.scale, track.scale);
|
|
trackDrawElement(ctx, { type: type.value, x: 0, y: 0,
|
|
dir: dir.value, altdir: altdir.value }, 0);
|
|
};
|
|
|
|
|
|
|
|
function rwdetail_setData(rw) {
|
|
var name = document.getElementById("rwdet_name");
|
|
var type = document.getElementById("rwdet_type");
|
|
var dir = document.getElementById("rwdet_dir");
|
|
var altdir = document.getElementById("rwdet_altdir");
|
|
|
|
if (rw) {
|
|
name.value = rw.name;
|
|
type.value = rw.type;
|
|
dir.value = rw.dir;
|
|
altdir.value = rw.altdir;
|
|
}
|
|
|
|
rwdetail_cb_typechange();
|
|
rwdetail_DrawSample();
|
|
};
|
|
|
|
|
|
function rw_Click(x,y) {
|
|
var idx = x + y * track.size.x;
|
|
if (track.elements[idx]) {
|
|
//
|
|
// Button or Turnout?
|
|
if (track.elements[idx].type == RAILWAY_TURNOUT || track.elements[idx].type == RAILWAY_BUTTON) {
|
|
if (track.elements[idx].name != "") {
|
|
if (turnout_IsActive(track.elements[idx].name)) {
|
|
turnout_server_Activate(track.elements[idx].name, 0);
|
|
}
|
|
else {
|
|
turnout_server_Activate(track.elements[idx].name, 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
//
|
|
// Sensor
|
|
if (track.elements[idx].type == RAILWAY_SENSOR) {
|
|
if (track.elements[idx].name != "") {
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
// *******************************************************************************************************
|
|
// * *
|
|
// * TURNOUTS *
|
|
// * *
|
|
// *******************************************************************************************************
|
|
|
|
|
|
var turnouts = [];
|
|
|
|
//
|
|
// update or add a new element
|
|
//
|
|
function turnout_Update(data) {
|
|
for (var i = 0; i < turnouts.length; i++) {
|
|
if (data.name == turnouts[i].name) {
|
|
debug ("Update turnout:" + turnouts[i].name + " with turnout:" + data.name);
|
|
turnouts[i].name = data.name;
|
|
turnouts[i].ifname = data.ifname;
|
|
turnouts[i].addr = data.addr;
|
|
turnouts[i].flags = data.flags;
|
|
return;
|
|
}
|
|
}
|
|
|
|
// not found add element
|
|
debug ("Add turnout:" + data.name);
|
|
turnouts.push ({
|
|
name: data.name,
|
|
ifname: data.ifname,
|
|
addr: data.addr,
|
|
flags: data.flags
|
|
});
|
|
};
|
|
|
|
|
|
//
|
|
// return if the turnout is active or not
|
|
//
|
|
function turnout_IsActive(name) {
|
|
for (var i = 0; i < turnouts.length; i++) {
|
|
if (name == turnouts[i].name) {
|
|
if (turnouts[i].flags & TURNOUT_F_TURNOUT) return 1
|
|
else return 0;
|
|
}
|
|
}
|
|
return 0;
|
|
};
|
|
|
|
|
|
//
|
|
// 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 turnout_Delete(name) {
|
|
var l = new Array();
|
|
|
|
for (var i = 0; i < turnouts.length; i++) {
|
|
if (name != turnouts[i].name) {
|
|
l.push (turnouts[i]);
|
|
}
|
|
}
|
|
|
|
// clear list and replace list with new data.
|
|
turnouts.lenght = 0;
|
|
turnouts = l;
|
|
};
|
|
|
|
|
|
//
|
|
// send new element to server
|
|
//
|
|
function turnout_server_Add(elm) {
|
|
var request = { command: "addturnout", turnout: elm };
|
|
serverinout (request, serverinout_defaultCallback);
|
|
};
|
|
|
|
|
|
//
|
|
// send delete element to server
|
|
//
|
|
function turnout_server_Del(elm) {
|
|
var request = { command: "delturnout", turnout: elm };
|
|
serverinout (request, serverinout_defaultCallback);
|
|
};
|
|
|
|
//
|
|
// send activate to the server (onoff must be 0 or 1)
|
|
//
|
|
function turnout_server_Activate(name, onoff) {
|
|
var request = { command: "setturnout", name: name, activate: onoff };
|
|
serverinout (request, serverinout_defaultCallback);
|
|
};
|
|
|
|
|
|
|
|
function turndetail_show(turnname) {
|
|
var win = document.getElementById("turndetail");
|
|
|
|
debug ("turndetail_show");
|
|
|
|
if (!win) {
|
|
debug ("turndetail_show create window");
|
|
win = gWindowCreate("turndetail", "Turnout", 400, 500, " \
|
|
<div style=\"float: left\"> \
|
|
Name: <input id=\"turndet_name\" style=\"width: 100\"> \
|
|
</div> <div style=\"float: right\"> \
|
|
<button id=\"turndet_PREV\"><</button> \
|
|
<button id=\"turndet_NEXT\">></button> \
|
|
</div> <br> <hr>\
|
|
<div> <table><tr><td><table> \
|
|
<tr><td>Interface:</td><td><input id=\"turndet_ifname\" style=\"width: 50\"></td></tr> \
|
|
<tr><td>Adress:</td><td><input id=\"turndet_addr\" style=\"width: 50\"></td></tr> \
|
|
<tr><td>Flags:</td><td><input id=\"turndet_flags\" style=\"width: 50\"></td></tr> \
|
|
</table> </td><td> \
|
|
<label><input id=\"turndet_inverse\" type=\"checkbox\" value=\"\"> Inverse</label><br>\
|
|
<label><input id=\"turndet_active\" type=\"checkbox\" value=\"\"><dfn title=\"save first\"> Active</dfn></label>\
|
|
\
|
|
</td></tr></table></div> <hr>\
|
|
<div align=right> \
|
|
<button id=\"turndet_SAVE\" type=\"button\">Save</button> \
|
|
<button id=\"turndet_DELETE\" type=\"button\">Delete</button> \
|
|
<button id=\"turndet_CLOSE\" type=\"button\">Close</button> \
|
|
</div> \
|
|
\
|
|
");
|
|
|
|
gAddEventListener("turndet_inverse", 'click', turndetail_cb_inverse);
|
|
gAddEventListener("turndet_active", 'click', turndetail_cb_active);
|
|
|
|
gAddEventListener("turndet_CLOSE", 'click', turndetail_cb_close);
|
|
gAddEventListener("turndet_DELETE", 'click', turndetail_cb_delete);
|
|
gAddEventListener("turndet_SAVE", 'click', turndetail_cb_save);
|
|
|
|
gAddEventListener("turndet_NEXT", 'click', turndetail_cb_next);
|
|
gAddEventListener("turndet_PREV", 'click', turndetail_cb_prev);
|
|
|
|
}
|
|
|
|
if (turnname) {
|
|
for (var i = 0; i < turnouts.length; i++) {
|
|
if (turnname == turnouts[i].name) turndetail_setData(turnouts[i]);
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
//
|
|
// inverse selected, setup flags
|
|
function turndetail_cb_inverse () {
|
|
var cbinverse = document.getElementById("turndet_inverse");
|
|
var flags = document.getElementById("turndet_flags");
|
|
|
|
if (cbinverse.checked) {
|
|
flags.value = Number(flags.value) | TURNOUT_F_INVERSE;
|
|
}
|
|
|
|
else {
|
|
flags.value = Number(flags.value) & (0xFFFF-TURNOUT_F_INVERSE);
|
|
}
|
|
};
|
|
|
|
|
|
//
|
|
// activate turnout
|
|
function turndetail_cb_active () {
|
|
var cbact = document.getElementById("turndet_active");
|
|
var flags = document.getElementById("turndet_flags");
|
|
var name = document.getElementById("turndet_name");
|
|
|
|
if (cbact.checked) {
|
|
flags.value = Number(flags.value) | TURNOUT_F_TURNOUT;
|
|
turnout_server_Activate(name.value, 1);
|
|
}
|
|
|
|
else {
|
|
flags.value = Number(flags.value) & (0xFFFF-TURNOUT_F_TURNOUT);
|
|
turnout_server_Activate(name.value, 0);
|
|
}
|
|
};
|
|
|
|
|
|
function turndetail_cb_close () {
|
|
var win = document.getElementById("turndetail");
|
|
|
|
if (win) document.body.removeChild(win);
|
|
};
|
|
|
|
|
|
//
|
|
// Callback: Delete Button
|
|
//
|
|
function turndetail_cb_delete () {
|
|
var elm = {};
|
|
|
|
elm = turndetail_getData();
|
|
turnout_Delete(elm.name);
|
|
turnout_server_Del(elm);
|
|
};
|
|
|
|
|
|
//
|
|
// Callback: Save Button
|
|
//
|
|
function turndetail_cb_save () {
|
|
var elm = {};
|
|
|
|
elm = turndetail_getData();
|
|
turnout_Update(elm);
|
|
turnout_server_Add(elm);
|
|
};
|
|
|
|
|
|
//
|
|
// Callback: Next Button
|
|
//
|
|
function turndetail_cb_next () {
|
|
var cursel = -1;
|
|
var turnname = document.getElementById("turndet_name");
|
|
|
|
for (var i = 0; i < turnouts.length; i++) {
|
|
if (turnname.value == turnouts[i].name) cursel = i;
|
|
}
|
|
|
|
cursel = cursel + 1;
|
|
if (cursel >= turnouts.length) cursel = 0;
|
|
if (cursel < 0) cursel = 0;
|
|
|
|
for (var i = 0; i < turnouts.length; i++) {
|
|
if (i == cursel) turndetail_setData(turnouts[i]);
|
|
}
|
|
|
|
// debug ("Cursel: " + cursel + " turnouts.lenght:" + turnouts.length);
|
|
};
|
|
|
|
|
|
//
|
|
// Callback: Prev Button
|
|
//
|
|
function turndetail_cb_prev () {
|
|
var cursel = -1;
|
|
var turnname = document.getElementById("turndet_name");
|
|
|
|
|
|
for (var i = 0; i < turnouts.length; i++) {
|
|
if (turnname.value == turnouts[i].name) cursel = i;
|
|
}
|
|
|
|
cursel = cursel - 1;
|
|
if (cursel < 0 || cursel >= turnouts.length) cursel = turnouts.length - 1;
|
|
|
|
for (var i = 0; i < turnouts.length; i++) {
|
|
if (i == cursel) turndetail_setData(turnouts[i]);
|
|
}
|
|
|
|
// debug ("Cursel: " + cursel + " turnouts.lenght:" + turnouts.length);
|
|
};
|
|
|
|
|
|
//
|
|
// fill out all the elements on the dialogbox
|
|
//
|
|
function turndetail_setData(elm) {
|
|
var turnname = document.getElementById("turndet_name");
|
|
var turnifname = document.getElementById("turndet_ifname");
|
|
var turnaddr = document.getElementById("turndet_addr");
|
|
var turnflags = document.getElementById("turndet_flags");
|
|
var cbinverse = document.getElementById("turndet_inverse");
|
|
var cbactive = document.getElementById("turndet_active");
|
|
|
|
if (elm) {
|
|
if (turnname) turnname.value = elm.name;
|
|
if (turnifname) turnifname.value = elm.ifname;
|
|
if (turnaddr) turnaddr.value = elm.addr;
|
|
if (turnflags) turnflags.value = elm.flags;
|
|
if (cbinverse) {
|
|
if (Number(elm.flags) & 1) cbinverse.checked = true;
|
|
else cbinverse.checked = false;
|
|
}
|
|
if (cbactive) {
|
|
if (Number(elm.flags) & 2) cbactive.checked = true;
|
|
else cbactive.checked = false;
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
|
|
//
|
|
// return all elements from the dialogbox
|
|
//
|
|
function turndetail_getData() {
|
|
var res = { name: "", ifname: "", addr: "", flags: 0 };
|
|
var turnname = document.getElementById("turndet_name");
|
|
var turnifname = document.getElementById("turndet_ifname");
|
|
var turnaddr = document.getElementById("turndet_addr");
|
|
var turnflags = document.getElementById("turndet_flags");
|
|
|
|
if (turnname) res.name = turnname.value;
|
|
if (turnifname) res.ifname = turnifname.value;
|
|
if (turnaddr) res.addr = turnaddr.value;
|
|
if (turnflags) res.flags = turnflags.value;
|
|
|
|
return res;
|
|
};
|