1
0
Fork 0

- trim/sanitize screen messages, so that tabs aren't displayed as

question marks
- make listeners one-shot (saves a couple of bytes of RAM :-)
This commit is contained in:
mfranz 2007-03-20 16:25:11 +00:00
parent 7319f5e772
commit 6d20159866

View file

@ -1,5 +1,3 @@
# $Id$
#
# screen log window # screen log window
# ================= # =================
# #
@ -32,12 +30,57 @@
# a message falls off; if 0 then don't scroll at all # a message falls off; if 0 then don't scroll at all
# #
dialog_id = 0; var isspace = func(c) { c == ` ` or c == `\t` or c == `\n` or c == `\r` }
theme_font = nil;
##
# trim spaces at the left (lr < 0), at the right (lr > 0), or both (lr = 0)
#
var trim = func(s, lr = 0) {
var l = 0;
if (lr <= 0) {
for (; l < size(s); l += 1) {
if (!isspace(s[l])) {
break;
}
}
}
var r = size(s) - 1;
if (lr >= 0) {
for (; r >= 0; r -= 1) {
if (!isspace(s[r])) {
break;
}
}
}
return r < l ? "" : substr(s, l, r - l + 1);
}
##
# convert string for output (replaces tabs only for now)
#
var sanitize = func(s) {
var r = "";
for (var i = 0; i < size(s); i += 1) {
var c = s[i];
if (c == `\t`) {
r ~= ' ';
} else {
r ~= chr(c);
}
}
return r;
}
var dialog_id = 0;
var theme_font = nil;
window = { window = {
new : func(x = nil, y = nil, maxlines = 10, autoscroll = 10) { new : func(x = nil, y = nil, maxlines = 10, autoscroll = 10) {
m = { parents : [window] }; var m = { parents : [window] };
# #
# "public" # "public"
m.x = x; m.x = x;
@ -67,7 +110,8 @@ window = {
if (g == nil) { g = me.fg[1] } if (g == nil) { g = me.fg[1] }
if (b == nil) { b = me.fg[2] } if (b == nil) { b = me.fg[2] }
if (a == nil) { a = me.fg[3] } if (a == nil) { a = me.fg[3] }
foreach (line; split("\n", msg)) { foreach (var line; split("\n", trim(msg))) {
line = sanitize(trim(line));
append(me.lines, [line, r, g, b, a]); append(me.lines, [line, r, g, b, a]);
if (size(me.lines) > me.maxlines) { if (size(me.lines) > me.maxlines) {
me.lines = subvec(me.lines, 1); me.lines = subvec(me.lines, 1);
@ -100,7 +144,7 @@ window = {
} }
me.dialog.setColor(me.bg[0], me.bg[1], me.bg[2], me.bg[3]); me.dialog.setColor(me.bg[0], me.bg[1], me.bg[2], me.bg[3]);
foreach (line; me.lines) { foreach (var line; me.lines) {
var w = me.dialog.addChild("text"); var w = me.dialog.addChild("text");
w.set("halign", me.align); w.set("halign", me.align);
w.set("label", line[0]); w.set("label", line[0]);
@ -144,9 +188,10 @@ window = {
log = nil; var log = nil;
_setlistener("/sim/signals/nasal-dir-initialized", func { var L = _setlistener("/sim/signals/nasal-dir-initialized", func {
removelistener(L);
setlistener("/sim/gui/current-style", func { setlistener("/sim/gui/current-style", func {
var theme = getprop("/sim/gui/current-style"); var theme = getprop("/sim/gui/current-style");
theme_font = getprop("/sim/gui/style[" ~ theme ~ "]/fonts/message-display/name"); theme_font = getprop("/sim/gui/style[" ~ theme ~ "]/fonts/message-display/name");
@ -199,9 +244,10 @@ msg_repeat = func {
var atc = nil; var atc = nil;
var callsign = nil; var callsign = nil;
var atclast = nil; var atclast = nil;
listener = {}; var listener = {};
_setlistener("/sim/signals/nasal-dir-initialized", func { var M = _setlistener("/sim/signals/nasal-dir-initialized", func {
removelistener(M);
# set /sim/screen/nomap=true to prevent default message mapping # set /sim/screen/nomap=true to prevent default message mapping
var nomap = getprop("/sim/screen/nomap"); var nomap = getprop("/sim/screen/nomap");
if (nomap != nil and nomap) { if (nomap != nil and nomap) {