AMADEUS html plain
This sketchy text is generated by AMADEUS
import java.util.*;
import java.awt.*;
class ViewSketchyPlus
class ViewSketchyPlus extends View
realiseerib (vana) skeem-vaate + 'onelining', kus saab
boolean isOneline;
maa"ratakse planeerimisel ja loomisel
boolean wasOneline;
maa"ratakse planeerimisel
static final int hd = 15;
hor-intervall
static final int vd = 5;
vert-intervall
static final int MAX_ONELINE = 60;
oneline rea elem. arv
static Color color = Default.sketchLineColor;
joonistamisva"rv
static Color colorBr = Default.branchHeadColor;
joonistamisva"rv
ikooni ala:
static int iconw;
== comment.height
static int iconh;
static int laius;
jooneala laius;
maa"ratakse drawSkLine-s, kasut. ka draw-s
ViewSketchyPlus(Scheme s)
super(s);
type = View.SKETCHY_PLUS;
isOneline = oneline_able(s);
public Rectangle getLineArea(Scheme s)
vasakul aa"rel
<======new Rectangle(s.view.x, s.view.y, hd, s.view.height)
private void drawSkLine(Graphics g, Scheme s)
joonistada skeemijoon
Rectangle rk = getLineArea(s);
int xx= rk.x, yy=rk.y, korgus=rk.height;
laius=rk.width;
lihtskeemi joone algus ja lopp (kommentaaride keskkohal):
int xja = xx + 1;
int xjl = xja;
int dd = (s.comment.width == 0)? 0 : vd;
int yja = yy + (s.comment.height - dd) / 2;
int yjl = yy + korgus - 3;
-1;
g.setColor(color);
? (s instanceof Branch)
ylemuse joonte vahe
int vahe1 = laius/4;
? (s.parent.type == Scheme.MODULE)
vahe1 = 1;
? (s.parent.type == Scheme.SIMPLE)
vahe1 = 0;
int xsa = xja + vahe1;
kust algab haru pa"ise algusjoon
algusjoon:
pa"iseta monoskeemis (ainukese) haru algust pole.
kui see ainuke haru on SIMPLE
? ((!(((Sketch)(s.parent)).isMono())) ||
(((Sketch)(s.parent)).head.size() > 0) ||
(s.type != Scheme.SIMPLE))
lihtharu algusjoon yhekordne
??s.type
? Scheme.LOOP:
? Scheme.MODULE:
haru joonte vahe:
int vahe = laius/4;
..if
..if
? (s.type == Scheme.MODULE)
vahe = 1;
int xva, yva;
ylemuse valimise pystjoone algus ja lopp
int ysa;
ylemuse sisemise pystjoone algus ja lopp
xva = xja; yva = yja-vahe;
xvl = xjl; yvl =yjl+vahe;
ysa = yva + vahe;
xsl = xsa; ysl = yvl - vahe;
haru algusjoon:
g.drawLine(xsa, yva, xva + laius - 2, yva);
g.drawLine(xsa, ysa, xva + laius - 2, ysa);
<======
? :
Scheme.SIMPLE ja ko~ik teised
g.drawLine(xsa, yja, xja + laius - 2 - 1, yja);
<======
<======
??s.type
? Scheme.LOOP:
? Scheme.MODULE:
joonte vahe:
int vahe = laius/4;
..if
..if
? (s.type == Scheme.MODULE)
vahe = 1;
int xva, yva, xvl, yvl;
valimise pystjoone algus ja lopp
int xsa, ysa, xsl, ysl;
sisemise pystjoone algus ja lopp
xva = xja; yva = yja-vahe; xvl = xjl; yvl =yjl+vahe;
xsa = xva + vahe; ysa = yva + vahe; xsl = xsa; ysl = yvl - vahe;
g.drawLine(xva, yva, xvl, yvl);
valimine pystjoon
g.drawLine(xva+1, yva, xva + laius - 2, yva);
g.drawLine(xvl+1, yvl, xvl + laius - 2, yvl);
g.drawLine(xsa, ysa, xsl, ysl);
sisemine pystjoon
g.drawLine(xsa+1, ysa, xva + laius - 2, ysa);
g.drawLine(xsl+1, ysl, xvl + laius - 2, ysl);
<======
? :
Scheme.SIMPLE ja ko~ik teised
g.drawLine(xja, yja, xjl, yjl);
pystjoon
g.drawLine(xja+1, yja, xja + laius - 2, yja);
g.drawLine(xjl+1, yjl, xjl + laius - 2, yjl);
<======
public void plan(int x0, int y0)
planeerib skeemi (sk ja alluvad) alates x0, y0
PrimitiveHead h;
PrimitiveMember nsk;
Arrow ar;
? (sk.icon)
ikooni koht ja moo~tmed:
x = x0; y = y0;
iconw = sk.comment.height;
iconh = iconw;
width = iconw + 8;
height = iconh + 4;
<======
<======
int yy= y0+vd;
jooksev vert. koordinaat
int ww = 0;
jooksev laius
et paneks prev:
sk.comment.plan(sk.comment.x, sk.comment.y);
sk.comment.y = yy - sk.comment.height/2;
yy += sk.comment.height/2 + vd;
? (sk.comment.width > ww)
ww = sk.comment.width;
? (sk.head.size() != 0)
planeerida paised
yy += vd;
* Enumeration e = sk.head.elements(); e.hasMoreElements();
PrimitiveHead he = (PrimitiveHead)(e.nextElement());
he.text.plan(x0+hd, yy-vd);
yy += he.text.height + vd;
? (he.text.width > ww)
ww = he.text.width;
yy -= vd;
keha
* int i = 0; i < sk.body.size(); i++
alluvate planeerimine:
Object o = sk.member(i);
? (o instanceof Scheme)
Scheme ss = (Scheme)o;
..if
? (ss instanceof Sketch)
ss.view.plan(x0+hd, yy);
..if
? (ss.view.width > ww)
ww = ss.view.width;
<======
haru
ss.view.plan(x0+1, yy);
? (ss.view.width-hd > ww)
ww = ss.view.width-hd;
yy += ss.view.height + vd;
..if
? (ss.type != Scheme.SIMPLE)
yy += vd;
3;// paksemate joonte jaoks
<------
o on lihtliige
PrimitiveMember ns = (PrimitiveMember)o;
ns.text.plan(x0+hd, yy);
yy += ns.text.height + vd;
? (ns.text.width > ww)
ww = ns.text.width;
enda koht ja moo~tmed:
ww - suurim alamskeemide ja lihtliikmete laiustest
x = x0; y = y0;
width = ww+hd+1;
height = yy-y0+vd+1;
? (sk instanceof Branch)
height -= 2*vd;
haru lo~pus pole kommentaari
<======
sk on skeem
width -= hd; // harud on vasakule nihutatud
kommentaari x
sk.comment.x = sk.view.x + hd;
private boolean oneline_able(Scheme sk)
<==========false
<==========false
Branch br = ((Sketch)sk).branch(0);
<==========false
int len = sk.comment.elements.size() + br.comment.elements.size();
<==========false
* int i = 0; i < sk.head.size(); i++
PrimitiveHead p = sk.primitiveHead(i);
? (p.text.rows.size() > 1)
<==========false
len += (p.text.toString().length()) +
(p.text.comment.toString().length()) + 2;
? (len > MAX_ONELINE)
<==========false
int n = br.body.size();
* int i=0; i < n; i++
Object o = br.member(i);
? (o instanceof Scheme)
<==========false
praegu nooli ei luba
if(o instanceof Arrow) return false;
PrimitiveMember p = (PrimitiveMember)o;
Primitive p = (Primitive)o;
? (p.text.rows.size() > 1)
<==========false
len += (p.text.toString().length()) +
(p.text.comment.toString().length()) + 2;
? (len > MAX_ONELINE)
<==========false
<======true
branch
int n = sk.body.size();
int len = sk.comment.elements.size();
* int i = 0; i < sk.head.size(); i++
PrimitiveHead p = sk.primitiveHead(i);
? (p.text.rows.size() > 1)
<==========false
len += (p.text.toString().length()) +
(p.text.comment.toString().length()) + 2;
? (len > MAX_ONELINE)
<==========false
* int i=0; i < n; i++
Object o = sk.member(i);
? (o instanceof Scheme)
<==========false
praegu nooli ei luba
Primitive p = (Primitive)o;
? (p.text.rows.size() > 1)
<==========false
len += (p.text.toString().length()) +
(p.text.comment.toString().length()) + 2;
? (len > MAX_ONELINE)
<==========false
<======true
private boolean oneline(Scheme sk, int x0, int y0)
pyyab yherealisena planeerida
wasOneline = isOneline;
isOneline = oneline_able(sk);
? (!isOneline)
<======false
saab teha, planeerime skeemi
int yy= y0;
+vd; // vert. koordinaat
int xx = x0+hd;
jooksev hor. koordinaat
int hh = 0;
jooksev max ko~rgus
et paneks prev:
sk.comment.plan(sk.comment.x, sk.comment.y);
sk.comment.y = yy;
sk.comment.y -= vd/2;
yy += vd;
xx += sk.comment.width;
hh = sk.comment.height
+ sk.comment.height/2;
? (sk.head.size() != 0)
planeerida paised
* Enumeration e = sk.head.elements(); e.hasMoreElements();
PrimitiveHead he = (PrimitiveHead)(e.nextElement());
? (he.type != PrimitiveHead.SIMPLE)
he.text.plan(xx+hd, yy);
xx += he.text.width + hd;
<======
he.text.plan(xx, yy);
xx += he.text.width;
? (he.text.height > hh)
hh = he.text.height;
keha
? (sk instanceof Sketch)
Branch br = ((Sketch)sk).branch(0);
haru pa"is
br.comment.plan(xx+hd, yy);
ruum haru tunnusele
xx += br.comment.width + hd;
..if
? (br.comment.height > hh)
hh = br.comment.height;
..for
* int i = 0; i < br.body.size(); i++
alluvate planeerimine:
Object o = br.member(i);
o on lihtliige
PrimitiveMember ns = (PrimitiveMember)o;
..if
? (ns.type != Primitive.SIMPLE)
ns.text.plan(xx+hd, yy);
xx += ns.text.width + hd;
<======
ns.text.plan(xx, yy);
xx += ns.text.width;
? (ns.text.height > hh)
hh = ns.text.height;
for
haru plaan
br.view.x = br.comment.x - hd;
br.view.y = br.comment.y;
br.view.width = xx - br.comment.x + hd;
br.view.height = hh - hd/2;
<======
haru keha planeerimine yherealiseksd
* int i = 0; i < sk.body.size(); i++
alluvate planeerimine:
Object o = sk.member(i);
o on lihtliige
PrimitiveMember ns = (PrimitiveMember)o;
? (ns.type != Primitive.SIMPLE)
ns.text.plan(xx+hd, yy);
xx += ns.text.width + hd;
<======
ns.text.plan(xx, yy);
xx += ns.text.width;
? (ns.text.height > hh)
hh = ns.text.height;
skeem on planeeritud yherealiseks
enda koht ja moo~tmed:
ww - suurim alamskeemide ja lihtliikmete laiustest
x = x0; y = y0;
height = hh+vd+1;
height = hh+1;
width = xx-x0+hd+1;
width = xx-x0+1;
kommentaari x
sk.comment.x = sk.view.x + hd;
<======true
public void draw(Graphics g)
joonistada skeem sk
Scheme s = super.sk;
? (s.icon)
joone va"rv
? (s instanceof Sketch)
g.setColor(color);
<======
ikoon joonistatakse talle planeeritud ala sisse
int luX = x + 6;
int luY = y + 2;
g.drawRect(luX, luY, iconw, iconh);
g.drawLine(luX, luY,
luX + iconw - 1, luY + iconh - 1);
? (!s.comment.isTrivial())
g.setColor(Default.commentColor);
g.drawString(s.comment.toString(),
x + width + 2, y + iconh);
<======
? (s.head.size() != 0)
..if
? (s instanceof Sketch)
g.setColor(color);
<======
g.drawString(s.primitiveHead(0).text.row(0).toString(),
x + width + 2, y + iconh);
<======
drawSkLine(g,s);
joonistada skeemijoon
s.comment.draw(g);
joonistada kommentaar
? ((s instanceof Sketch)&&
(s.comment.elements.size()>1)&&
!isOneline)
veel loppu:
Row endc = new Row(Default.commentColor);
endc.rowelem = s.comment.rowelem;
endc.elements = s.comment.elements;
endc.x = s.comment.x;
endc.y = s.comment.y + s.view.height- s.comment.height/2;
endc.width = s.comment.width;
endc.height = s.comment.height;
endc.draw(g);
int yy = s.comment.height + vd;
joonistamise jarg
* Enumeration e = s.head.elements(); e.hasMoreElements();
PrimitiveHead he = (PrimitiveHead)(e.nextElement());
he.text.draw(g);
int x1 = he.text.x-hd+2;
int y1 = he.text.y + he.text.height*3/4;
g.setColor(color);
paise tunnus
?? he.type
? PrimitiveHead.LOOP:
g.setFont(Default.font);
p.o. selle vaate font !!!!!!!!!!!
(el-paise esimese rea ette)
g.drawString("*", x1, y1);
y+yy + he.text.height*3/4);
<======
? PrimitiveHead.SWITCH:
g.setFont(Default.font);
p.o. selle vaate font !!!!!!!!!!!
g.drawString("??", x1, y1);
y+yy + he.text.height*3/4);
<======
? PrimitiveHead.CASE:
? PrimitiveHead.DEFAULT:
g.setFont(Default.font);
p.o. selle vaate font !!!!!!!!!!!
paise ette
g.drawString("?", x1, y1);
he.text.y + he.text.height*3/4);
<======
? PrimitiveHead.TRY:
g.setFont(Default.font);
p.o. selle vaate font !!!!!!!!!!!
g.drawString("!!", x1, y1);
y+yy + he.text.height*3/4);
<======
? PrimitiveHead.CATCH:
? PrimitiveHead.FINALLY:
g.setFont(Default.font);
p.o. selle vaate font !!!!!!!!!!!
g.drawString("!", x1, y1);
y+yy + he.text.height*3/4);
<======
yy += he.text.height;
..for
* Enumeration e = s.body.elements(); e.hasMoreElements();
Object o = e.nextElement();
? (o instanceof Scheme)
((Scheme)o).view.draw(g);
<------
? (o instanceof Arrow)
Arrow ar = (Arrow)o;
ar.text.draw(g);
nool ise:
g.setColor(Default.arrowColor);
int length = s.level() - ar.level + 1;
? (isOneline)
int arx = ar.text.x-hd/2-1;
int ary = ar.text.y + ar.text.height*3/4;
String arlen = String.valueOf((char)('0' + length - 1));
? ((length - 1) == 1)
arlen = " ";
g.setFont(Default.font);
p.o. selle vaate font !!!!!!!!!!!
g.drawString("^", arx - hd/2, ary);
g.drawString(arlen, arx, ary);
<======
tavaline
? (ar.type == Arrow.WEAK)
length += 1;
int endx = ar.text.x - length*laius/2;
int yy0 = ar.text.y +
((Row)(ar.text.rows.elementAt(0))).height/2;
? (ar.type == Arrow.WEAK)
nork
endx += laius/2;
* int i = endx; i < ar.text.x; i += laius*2/3
g.drawLine(i, yy0, i + laius/3, yy0);
<======
g.drawLine(ar.text.x, yy0,
endx, yy0);
noole ots
g.drawLine(endx, yy0, endx + 4, yy0 - 2);
g.drawLine(endx, yy0, endx + 4, yy0 + 2);
<------
? (o instanceof PrimitiveMember)
PrimitiveMember ns = (PrimitiveMember)o;
?? ns.type
? Primitive.CONDITION:
g.setFont(Default.font);
p.o. selle vaate font !!!!!!!!!!!
g.setColor(Default.conditionColor);
primitiivi ette
g.drawString("?", ns.text.x-hd/2-1, ns.text.y + ns.text.height*3/4);
<======
ns.text.draw(g);
public void pointLocation(Point p, Scheme s)
pyytakse leida va"him (alam)osa, kuhu punkt kuulub
erijuhul jaa"b kursor skeemijoone alale (!inScheme)
globaalne: Cursor result (eelnevalt == null)
? (result != null)
<======
<======
? (s.icon)
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
Scheme sk = (Scheme)o;
pointLocation(p, sk);
? (result != null)
leitud mingis alamskeemis
result = new Cursor(sk);
<==============
<------
on mitteskeem
result = new Cursor(s);
System.out.println("ViewSketchy: on mitteskeem");
? (pointLocation(p, ((PrimitiveMember)o).text))
on liikmel
System.out.println("ViewSketchy: punkt on mitteskeemis");
result.primitive = (PrimitiveMember)o;
viia kursor reas hiireni
result.noInRow = 1;
Row r = result.row;
int shift = (((Symbol)r.elements.elementAt(0)))
.width();
* i = 1; i < r.elements.size(); i++
<======;
result.noInRow++;
r.getElement(i);
? (r.sy != null)
shift += r.sy.width();
<------
<==========
System.out.println("ViewSketchy: punkt pole mitteskeemis");
result = null;
alamskeemidel ei olnud, vo~ib olla veel skeemi s aa"rel ?
? (getLineArea(s).contains(p))
result = new Cursor(s);
<======
selle skeemi kommentaaril ?
result = new Cursor(s);
? (pointLocation(p, s.comment))
result.primitive = null;
viia kursor reas hiireni
result.noInRow = 1;
Row r = result.row;
int shift = (((Symbol)r.elements.elementAt(0))).width();
* int i = 1; i < r.elements.size(); i++
<======;
result.noInRow++;
r.getElement(i);
? (r.sy != null)
shift += r.sy.width();
<------
<======
result = null;
selle skeemi pa"isel ?
result = new Cursor(s);
* Enumeration e = s.head.elements(); e.hasMoreElements();
PrimitiveHead h = (PrimitiveHead)(e.nextElement());
? (pointLocation(p, h.text))
result.primitive = h;
viia kursor reas hiireni
result.noInRow = 1;
Row r = result.row;
int shift = (((Symbol)r.elements.elementAt(0))).width();
* int i = 1; i < r.elements.size(); i++
<======
result.noInRow++;
r.getElement(i);
? (r.sy != null)
shift += r.sy.width();
<------
<==========
void adjustComment(AmCanvas c, int oldW, int oldH, int caretShift)
arvestada skeemikommentaari muutus
oldW, oldH - reas enne eemaldamist vo~i pa"rast lisamist
ViewSketchyPlus v = (ViewSketchyPlus)(sk.view);
? (oneliningChanged(c))
<======
c.frame.contents.affected = sk;
? (v.isOneline)
c.X = sk.comment.x + caretShift;
? (sk.comment.elements.size() == 1)
rida sai tyhjaks
c.X = sk.comment.x;
et << tekiks
c.W = oldW + 2;
c.W = sk.view.width - (c.X - sk.comment.x);
c.X = c.X + c.start.x;
c.Y = sk.comment.y + c.start.y;
c.H = sk.view.height;
<======
skeemikommentaari korral veel lopukommentaar
? (sk instanceof Sketch)
skeemikommentaar
veel loppu:
sk.invalidate(x + oldW);
sk.comment.width);
c.X = sk.comment.x + c.start.x;
c.Y = y - sk.comment.height/2 + c.start.y;
c.W = oldW + 2;
c.H = height + sk.comment.height;
<======
c.X = sk.comment.x + caretShift;
c.W = oldW - caretShift + 2;
et kursor paistaks
? (sk.comment.elements.size() == 1)
rida sai tyhjaks
c.X = sk.comment.x;
et << tekiks
c.W = oldW + 2;
c.X = c.X + c.start.x;
c.Y = sk.comment.y + c.start.y;
c.H = oldH;
private boolean oneliningChanged(AmCanvas c)
sk - haru (milles muudetud primitiiv)
vo~i skeem (milles muudtud pa"is)
kui muutunud, siis kogu skeem ymberjoonistada
? (sk instanceof Sketch)
ViewSketchyPlus v = (ViewSketchyPlus)(sk.view);
? (v.isOneline != v.wasOneline)
skeemi sk yherealisus on muutunud
c.frame.contents.affected = c.frame.contents.main;
c.prepare(v.y - 2);
<==========true
<======false
sk on haru
? (sk.parent.view instanceof ViewSketchyPlus)
ViewSketchyPlus vParent =
(ViewSketchyPlus)(sk.parent.view);
? (vParent.isOneline != vParent.wasOneline)
ylemuse yherealisus on muutunud
c.frame.contents.affected = c.frame.contents.main;
c.prepare(vParent.y - 2);
<==========true
<======false
haru ylemuse yhrealisus pole muutunud
ViewSketchyPlus v =
(ViewSketchyPlus)(sk.view);
? (v.isOneline != v.wasOneline)
haru sk yherealisus on muutunud
c.frame.contents.affected = c.frame.contents.main;
c.prepare(sk.view.y - 2);
<======true
<======false