AMADEUS html plain
This sketchy text is generated by AMADEUS
* import java.
class ViewFamily
class ViewFamily extends View
static final int hd = 8;
static final int vd = hd;
static final int vstep = 10*vd;
2*vd;
static Color color = Default.sketchLineColor;
static Color colorBr = Default.branchHeadColor;
static Color colorLine = Color.yellow;
ViewFamily(Scheme s)
super(s);
type = View.FAMILY;
public Rectangle getLineArea(Scheme s)
<======new Rectangle(s.view.x, s.view.y, hd, s.view.height)
private Rectangle getPlanRootArea(Sketch skeem, boolean plan, int x0, int y0)
leiab skeemi juurtipu ala,
kui plan, siis ka planeerib nurgakohta (x0, y0)
kui !plan, siis leiab tegelikult vaid kõrguse ja laiuse ning
tagastab olemasoleva nurgakoha (tulem.x, tulem.y)
Dimension sketchHeadWH = getHeadWH(skeem);
int w = hd + sketchHeadWH.width +hd;
int h = sketchHeadWH.height;
? plan
planHead(skeem, x0 + hd, y0);
int xx0, yy0 = skeem.view.y + 2*vd;
int bbh = 0;
harupäiste max kõrgus
int bbw = hd;
harupäiste kogulaius
int bh = 0;
kompil
int esimeseHaruX = Integer.MAX_VALUE;
* int i = 0, n = skeem.body.size(); i < n; i++
Branch b = (Branch)(skeem.member(i));
Dimension branchHeadWH = getHeadWH(b);
int bw = branchHeadWH.width;
? plan
planHead(b, x0+bbw, y0+sketchHeadWH.height + vd);
? i == 0 && b.head.size() != 0
esimeseHaruX = b.primitiveHead(0).text.x;
bbw += bw + hd;
bh = branchHeadWH.height;
h += bbh + vd + vd;
w = Math.max(w, bbw);
xx0 = Math.min(esimeseHaruX, skeem.primitiveHead(0).text.x -hd);
<======new Rectangle(xx0+2, yy0, w, h)
private Rectangle getNodeArea(Scheme s)
<======new Rectangle(s.view.x, s.view.y, s.view.width, s.view.height)
private Dimension getHeadWH(Scheme s)
int w = 0;
int h = 0;
* int i = 0, n = s.head.size(); i < n; i++
PrimitiveHead he = s.primitiveHead(i);
? he.text.width > w
w = he.text.width;
h += he.text.height;
<======new Dimension(w, h)
private Dimension planHead(Scheme s, int x0, int y0)
int w = 0;
int h = 0;
* int i = 0, n = s.head.size(); i < n; i++
PrimitiveHead he = s.primitiveHead(i);
he.text.plan(x0, y0 + h);
? he.text.width > w
w = he.text.width;
h += he.text.height;
<======new Dimension(w, h)
private void drawSkLine(Graphics g, Scheme s)
Rectangle rk = getLineArea(s);
int xx= rk.x, yy=rk.y, korgus=rk.height;
int laius=rk.width;
int xja = xx ;
int yja = yy;
int yjl = yy + korgus;
int xjl = xja;
Color keepColor = g.getColor();
g.setColor(colorLine);
g.drawLine(xja, yja, xjl, yjl);
g.drawLine(xja+1, yja, xja + laius - 2, yja);
g.drawLine(xjl+1, yjl, xjl + laius - 2, yjl);
g.setColor(keepColor);
public void plan(int x0, int y0)
? sk instanceof Branch
x = x0;
y = y0;
int ww = 0;
int hh = 0;
alamharude max kõrgus
* int i = 0, n = sk.body.size(); i < n; i++
Object o = sk.member(i);
? o instanceof Sketch
Sketch ske = (Sketch)o;
ske.view.plan(x0+ww+hd,y0);
ww += ske.view.width + hd;
? ske.view.height > hh
hh = ske.view.height;
height = hh;
width = ww+hd;
<======
? sk.icon
x = x0;
y = y0;// + sk.comment.height +vd;
width = 4*hd;
height = 4*vd;
<======
sk on Sketch
? sk.parent == null
sk on välimine
välimist ei planeeri, planeeritakse selle esimene alamskeem
Branch bvälimine = (Branch)(sk.member(0));
Sketch spea = (Sketch)(bvälimine.member(0));
spea.view.plan(x0 + hd, y0 + vd);
x = x0;
y = y0;
width = spea.view.width + 2*hd;
height = spea.view.height + 2*vd;
bvälimine.view.x = x0 + hd/2;
bvälimine.view.y = y0 + vd/2;
bvälimine.view.width = width + hd;
bvälimine.view.height = height + vd;
<======
päise tekstid on planeerimata (komm laius arvestamata)
planHead(sk, 0, 0);
päiste planeerimiseks
* int i = 0, n = sk.body.size(); i < n; i++
Branch b = (Branch)(sk.member(i));
planHead(b, 0, 0);
päiste planeerimiseks
Rectangle juur = getPlanRootArea((Sketch)sk, false, 0, 0);
int hRoot = juur.height;
int wRoot = juur.width;
int xCurr = x0;
int hBb = 0;
harude max kõrgus
* int i = 0, n = sk.body.size(); i < n; i++
Branch b = (Branch)(sk.member(i));
b.view.plan(xCurr, y0+hRoot+vstep);
xCurr += b.view.width + hd;
uus koht
? b.view.height > hBb
hBb = b.view.height;
int wBb = xCurr - x0 + 1;
harude kogulaius
x = x0;
y = y0;
width = Math.max(wBb, wRoot);
int xNode = x0 + width/2 - wRoot/2;
getPlanRootArea((Sketch)sk, true, xNode, y0 + 2*vd);
? hBb == 0
height = vd + vd + hRoot + hBb + vd;
<======
height = vd + vd + hRoot + vd + vstep + hBb + vd;
public void draw(Graphics g)
Scheme s = super.sk;
Scheme parent = s.parent;
? parent == null
drawSkLine(g,s);
s on välimine
välimist ei joonistata, joonistatakse selle esimene alamskeem
Branch bvälimine = (Branch)(s.member(0));
Sketch spea = (Sketch)(bvälimine.member(0));
spea.view.draw(g);
<======
? s.icon
va"rv (color vo~i colorBr)
? s instanceof Sketch
g.setColor(color);
<======
int luX = x + hd;
int luY = y + vd;
g.drawRect(luX, luY, width - 2*hd, height - 2*vd);
g.drawLine(luX+1, luY+1, luX + width -2*hd - 1, luY + height-2*vd - 1);
//joon u"lemusele
? s instanceof Sketch
? parent != null
parent = parent.parent;
? parent.view.type == View.FAMILY
Rectangle r = getNodeArea(parent);
int xParent = r.x + r.width/2;
int yParent = r.y + r.height;
g.drawLine(luX + iconw/2, luY, xParent, yParent);
<======
skeemijoon
? s instanceof Sketch
? ((Sketch)s).containsSubsketch()
drawSkLine(g,s);
//s.comment.draw(g);
int yy = s.comment.height + vd;
int x1 = x + hd/2;
juurtipu joonis
? s instanceof Sketch
g.setColor(color);
Rectangle rk = getPlanRootArea((Sketch)sk, false, 0, 0);
int round = 10;
int luX = rk.x;
int luY = rk.y -vd;
int lai = rk.width-hd/2;
int kõrg = rk.height+vd;
g.drawRoundRect(luX, luY, lai, kõrg, round, round);
? s.type == Scheme.MODULE
g.drawRoundRect(luX-1, luY-1, lai+2, kõrg+2, round, round);
<======
? s.type == Scheme.LOOP
g.drawRoundRect(luX-2, luY-2, lai+4, kõrg+4, round, round);
Dimension dim = getHeadWH(s);
g.drawLine(rk.x, rk.y + dim.height, rk.x + rk.width-hd/2, rk.y + dim.height );
//joon u"lemusele
? s instanceof Sketch
? parent != null
parent = parent.parent;
? parent.view.type == View.FAMILY
Rectangle r = getNodeArea(parent);
int xParent = r.x + r.width/2;
int yParent = r.y + r.height;
//g.drawLine(rk.x +rk.width/2, rk.y, xParent, yParent);
pa"ise tyyp
* Enumeration e = s.head.elements(); e.hasMoreElements();
päise tüüp p.o. SIMPLE, ei joonista tüüpi
PrimitiveHead he = (PrimitiveHead)(e.nextElement());
he.text.draw(g);
g.setColor(color);
yy += he.text.height;
? s instanceof Sketch
Rectangle rkÜlemus = getPlanRootArea((Sketch)s, false, 0, 0);
Dimension sPäis = getHeadWH(s);
jooned alluvatele
* int i=0, n = s.body.size(); i < n; i++
Rectangle rk = null;
Branch br = (Branch)(s.member(i));
haru br skeeme ühendavad jooned
int esimeseSkeemiKeskkohtX = 0;
int viimaseSkeemiKeskkohtX = 0;
int rky = 0;
kompil, alluva sanga alumise otsa Y
int loeAlluvad = 0;
* int j=0, m = br.body.size(); j < m; j++
Object o = br.member(j);
? o instanceof Sketch
loeAlluvad++;
Sketch ske = (Sketch)o;
? ske.icon
rk = ske.view;
rky = rk.y + vd;
<======
rk = getPlanRootArea((Sketch)ske, false, 0, 0);
rky = rk.y - vd;
sang üles:
g.drawLine(rk.x + rk.width/2, rky, rk.x + rk.width/2, rky- vstep/2 +1 );
g.drawLine(rk.x+1 + rk.width/2, rky, rk.x+1 + rk.width/2, rky - vstep/2 +1 );
? loeAlluvad == 1
esimeseSkeemiKeskkohtX = rk.x + rk.width/2;
viimaseSkeemiKeskkohtX = rk.x + rk.width/2;
haru br esimese päise teksti keskkoht:
int brkeskX=0, brkeskY=0;
? br.head.size() > 0
int päiseTekstiAlgusX = br.primitiveHead(0).text.row(0).x;
brkeskX= päiseTekstiAlgusX +
br.primitiveHead(0).text.row(0).width/2;
brkeskY= rkÜlemus.y + rkÜlemus.height;
joon haru br päise teksti ette:
? i > 0
int dy = rkÜlemus.y + sPäis.height;
g.drawLine(päiseTekstiAlgusX- hd/2, dy ,päiseTekstiAlgusX-hd/2, brkeskY);
? loeAlluvad == 1
joon juurtipust --> alluva sanga otsa
topeltjoon(g, brkeskX, brkeskY,
esimeseSkeemiKeskkohtX, rky - vstep/2 -1,
color, colorBr);
sanga otsa hor-kriipsuke:
g.drawLine(esimeseSkeemiKeskkohtX-hd/2, rky - vstep/2,
esimeseSkeemiKeskkohtX+hd/2, rky - vstep/2);
<======
? loeAlluvad > 1
g.drawLine(esimeseSkeemiKeskkohtX, rky - vstep/2, viimaseSkeemiKeskkohtX+1, rky - vstep/2 );
g.drawLine(esimeseSkeemiKeskkohtX, rky - vstep/2 -1, viimaseSkeemiKeskkohtX+1, rky - vstep/2 -1 );
joon juurtipust alluvaid ühendava joone keskkohta
int keskX = (esimeseSkeemiKeskkohtX + viimaseSkeemiKeskkohtX)/2;
topeltjoon(g, brkeskX, brkeskY,
keskX, rky - vstep/2 -1,
color, colorBr);
alamskeemid
* Enumeration e = s.body.elements(); e.hasMoreElements();
Object o = e.nextElement();
? o instanceof Scheme
Scheme sss = (Scheme)o;
sss.view.draw(g);
? (sss instanceof Sketch) && (sss.view.type != View.FAMILY)
joon u"lemusele:
Rectangle r = getNodeArea(s.parent);
int xParent = r.x + r.width/2;
int yParent = r.y + r.height;
g.drawLine(sss.view.x +sss.view.width/2, sss.view.y, xParent, yParent);
static void topeltjoon(Graphics g, int x1, int y1, int x2, int y2, Color col1, Color col2)
Color keepColor = g.getColor();
int dx = Math.abs(x2 - x1);
dx = Math.max(2, dx/hd/2 + 1);
g.setColor(col1);
g.drawLine(x1, y1, x2, y2 );
g.setColor(col2);
g.drawLine(x1+dx, y1, x2+dx, y2 );
g.setColor(keepColor);
public void pointLocation(Point p, Scheme s)
ekraanipunkti "ümbruse" leidmine*
püütakse leida vähim (alam)osa, kuhu punkt kuulub
erijuhul jääb kursor skeemijoone alale (!inScheme)
globaalne: View.result (eelnevalt == null)
Üks erinevus meetodist View.pointLocation(), kasut kõikjal: View.result
? View.result != null
<======
? !s.view.contains(p)
Teine erinevus meetodist View.pointLocation():
? s instanceof Branch
äkki on siiski haru päistes, mis on eraldi aladel
selle skeemi pa"isel ?
View.result = new Cursor(s);
* Enumeration e = s.head.elements(); e.hasMoreElements();
PrimitiveHead h = (PrimitiveHead)(e.nextElement());
? View.pointLocation(p, h.text)
View.result.primitive = h;
View.moveCursorToPointInRow(View.result, p);
viia kursor reas hiireni
<==============
<======
? s.icon
View.result = new Cursor(s);
<======
otsida skeemi liikmetes:
* int i = 0; i < s.body.size(); i++
Object o = s.member(i);
? o instanceof Scheme
liige on skeem
pointLocation(p, (Scheme)o);
? result != null
leitud mingis alamskeemis
View.result = result;
erinevus meetodist View.pointLocation()
<==============
<------
on mitteskeem
View.result = new Cursor(s);
? View.pointLocation(p, ((PrimitiveMember)o).text)
on liikmel
View.result.primitive = (PrimitiveMember)o;
View.moveCursorToPointInRow(View.result, p);
viia kursor reas hiireni
<==========
alamskeemidel ei olnud, vo~ib olla veel skeemi s aa"rel ?
? getLineArea(s).contains(p)
View.result = new Cursor(s);
<======
selle skeemi kommentaaril ?
View.result = new Cursor(s);
? pointLocation(p, s.comment)
View.result.primitive = null;
View.moveCursorToPointInRow(View.result, p);
viia kursor reas hiireni
<======
View.result = null;
selle skeemi pa"isel ?
View.result = new Cursor(s);
* Enumeration e = s.head.elements(); e.hasMoreElements();
PrimitiveHead h = (PrimitiveHead)(e.nextElement());
? pointLocation(p, h.text)
View.result.primitive = h;
View.moveCursorToPointInRow(View.result, p);
viia kursor reas hiireni
<==========