implement Pimpl;
include "sys.m";
sys: Sys;
sprint, fprint: import sys;
include "styx.m";
include "styxservers.m";
Styxserver: import Styxservers;
include "daytime.m";
include "dat.m";
dat: Dat;
mnt, evc, Qdir, debug, appl, slash: import dat;
include "string.m";
str: String;
splitl: import str;
include "names.m";
names: Names;
dirname: import names;
include "error.m";
err: Error;
checkload, panic, stderr: import err;
include "tbl.m";
tbl: Tbl;
Table: import tbl;
include "mpanel.m";
Atag, Amax, Panel, Repl, Tappl, Trepl: import Panels;
Aorder, Arow, Aspace: con Amax + iota;
init(d: Dat): list of string
{
dat = d;
sys = dat->sys;
err = dat->err;
str = dat->str;
names = dat->names;
return list of {"row:", "col:"};
}
pinit(p: ref Panel)
{
p.container = 1;
}
rinit(p: ref Panel, r: ref Repl)
{
(t, nil) := splitl(p.name, ":");
rowcol: string;
case t {
"row" =>
rowcol = "row";
* =>
rowcol = "col";
}
r.attrs[Atag] = "tag";
attrs := array[] of { "order", rowcol , "space 0"};
nattrs := array[len r.attrs + len attrs] of string;
nattrs[0:] = r.attrs;
nattrs[len r.attrs:] = attrs;
r.attrs = nattrs;
}
newdata(nil: ref Panels->Panel): string
{
return "not to a container";
}
space(p: ref Panels->Panel, r: ref Panels->Repl, ctl: list of string): (int, string)
{
n := int hd tl ctl;
if (n < 0)
return (0, "negative space");
if (r.id == 0){
r.attrs[Aspace] = sprint("space %d", n);
for (rn := 0; rn < len p.repl; rn++)
if ((pr := p.repl[rn]) != nil)
pr.attrs[Aspace] = r.attrs[Aspace];
return (1, nil);
} else
return (0, "only allowed in application tree");
}
rowcol(p: ref Panels->Panel, r: ref Panels->Repl, ctl: list of string): (int, string)
{
r.attrs[Arow] = hd ctl;
if (r.id == 0){
for (rn := 0; rn < len p.repl; rn++)
if ((pr := p.repl[rn]) != nil)
pr.attrs[Arow] = r.attrs[Arow];
return (1, nil);
} else
return (0, nil);
}
ctl(p: ref Panels->Panel, r: ref Panels->Repl, ctl: list of string): (int, string)
{
case hd ctl {
"space" =>
if (len ctl != 2)
return (0, "1 argument needed");
return space(p, r, ctl);
"row" or "col" =>
if (len ctl != 3)
return (0, "3 arguments needed");
return rowcol(p, r, ctl);
* =>
# order is handled by the tree, not by us.
return (0, "not mine");
}
}
|