// // // 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, " \
\ Position: , \


\
\ \ \ \
Ref.Name:
Dir:
Alt Dir:

\

\
\
Type \ Type:
\
\
\
\
\
\
\
\
\
\
\ \

\ \ \
\ \ \
\ \ "); 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, " \
\ Name: \
\ \ \


\
\ \ \ \
Interface:
Adress:
Flags:
\
\ \ \

\
\ \ \ \
\ \ "); 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; };