AMADEUS html plain
* import java.
class ViewBraces
class ViewBraces extends View
AlgJava:
tingimuse küsimärgi asemel drawString ">"
break, continue ja return nooled, ka ikoonidest väljuvad
realiseerib skeem-vaate
static final int hd = (int)Math.round(
(AmFont.fm[AmFont.No(Default.font)]).charWidth('X') * 2
* AmView.sizeFactor);
hor-intervall
static final int hdd = 5;
topeltjoonte osa hd-st
static final int vd = 5;
vert-intervall
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 ikooninooleNihe = 0;
static int laius;
jooneala laius;
määratakse drawSkLine-s, kasut. ka draw-s
ViewBraces(Scheme s)
konstruktor
super(s);
type = View.BRACES;
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) / 2;
int yjl = yy + korgus - 3;-1;
int yjl = yy + korgus - 1 - (s.comment.height) / 2;
//g.setColor(color);
//g.setColor(Color.yellow);
g.setColor(Color.lightGray);
? (s instanceof Branch)
ylemuse joonte vahe
int vahe1 = laius/hdd;
? (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
..case
? Scheme.LOOP:
? Scheme.MODULE:
haru joonte vahe:
int vahe = laius/hdd;
? (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:
ALGJAVA -(haru kriipsuke)
//g.drawLine(xsa, yva, xva + laius - 2, yva);
//g.drawLine(xsa, ysa, xva + laius - 2, ysa);
<======;
? :
Scheme.SIMPLE ja ko~ik teised
ALGJAVA -(haru kriipsuke)
//g.drawLine(xsa, yja, xja + laius - 2 - 1, yja);
<======;
<==========
skeemijooned tehakse ainult skeemi korral
??s.type
? Scheme.LOOP:
? Scheme.MODULE:
joonte vahe:
int vahe = laius/hdd;
..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, boolean rowsToo)
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;
? sk instanceof Branch
x += 5; y += 5;
iconw = sk.comment.height;
eelsü"mbol incl.
iconh = iconw;
width = iconw + 4;
height = iconh + 4;
ikon. sees on vaja tekstisuurused ümber planeerida,
kui muudeti kogu mastaapi (Item72/73/74Listener)
? rowsToo
AmView.replanTextAndCommentSize(sk);
<======
? rowsToo
sk.comment.planSize();
int yy= y0;
+vd;jooksev vert. koordinaat
int ww = 0;
jooksev laius
et paneks prev: jama???
//??sk.comment.plan(sk.comment.x, sk.comment.y);
sk.comment.y = yy;
sk.comment.height/2;
yy += sk.comment.height + vd;
sk.comment.height/2 + vd
? (sk.comment.width > ww)
ww = sk.comment.width;
? (sk.head.size() != 0)
planeerida pa"ised
yy += vd;
* Enumeration e = sk.head.elements(); e.hasMoreElements();
PrimitiveHead he = (PrimitiveHead)(e.nextElement());
he.text.plan(x0+hd, yy, rowsToo);
yy-vd);
yy += he.text.height + vd;
? (he.text.width > ww)
ww = he.text.width;
yy -= vd;
keha
..for
* int i = 0; i < sk.body.size(); i++
alluvate planeerimine:
Object o = sk.member(i);
? (o instanceof Scheme)
Scheme ss = (Scheme)o;
? (ss instanceof Sketch)
ss.view.plan(x0+hd, yy, rowsToo);
? (ss.view.width > ww)
ww = ss.view.width;
<======
haru
ss.view.plan(x0+1, yy, rowsToo);
? (ss.view.width-hd > ww)
ww = ss.view.width-hd;
yy += ss.view.height + vd;
? (ss.type != Scheme.SIMPLE)
yy += vd;
3;// paksemate joonte jaoks
<------
o on lihtliige
PrimitiveMember ns = (PrimitiveMember)o;
ns.text.plan(x0+hd, yy, rowsToo);
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 = yy-y0-vd+1;
height -= 2*vd;haru lo~pus pole kommentaari
<======
sk on skeem
height = yy-y0+vd+1 + sk.comment.height;;
width -= hd; // harud on vasakule nihutatud
kommentaari x
sk.comment.x = sk.view.x + hd;
public void draw(Graphics g)
joonistada skeem sk
Scheme s = super.sk;
? s.icon
ikooni va"rv
? s instanceof Sketch
g.setColor(color);
<======
ikoon joonistatakse talle planeeritud ala sisse
int luX = x + 2;
int luY = y + 2;
g.drawRect(luX, luY, iconw, iconh);
g.drawLine(luX, luY, luX + iconw - 1, luY + iconh - 1);
//g.drawImage(Am.pictureBoard.iconImage, luX, luY, null);
orrig. suuruses
g.drawImage(Am.pictureBoard.iconImage, luX, luY, iconw, iconh, null);
ikooni kommentaar
? !s.comment.isTrivial()
g.setColor(Default.commentColor);
g.drawString(s.comment.toString(), x + width + 2, y + iconh);
<======
? s.head.size() != 0
? (s instanceof Sketch)
g.setColor(color);
<======
g.drawString(s.primitiveHead(0).text.row(0).toString(), x + width + 2, y + iconh);
ikooninool
int X = x, Y = y + height/3;
ikooninooleNihe = 0;
et nooled ei XORiks üksteist
? s instanceof Sketch
drawArrowsForIcon(g, (Sketch)s, X, Y, s.level());
<======
haru ikoon
int m = s.body.size();
liikmed
* int j = 0; j < m; j++
Object o = ((Branch)s).member(j);
? o instanceof Sketch
drawArrowsForIcon(g, (Sketch)o, X, Y, s.level());
<------
? o instanceof Arrow
drawIconArrow(g, (Branch)s, (Arrow)o, X, Y, s.level());
<======
skeemijoon ja kommentaar
drawSkLine(g,s);
joonistada skeemijoon
s.comment.draw(g);
joonistada kommentaar
? (s instanceof Sketch)&&
(s.comment.elements.size()>1)
veel loppu:
Row endc = new Row(Default.commentColor);
endc.elements = s.comment.elements;
endc.x = s.comment.x;
endc.y = s.view.y + s.view.height - 1 - s.comment.height;
endc.width = s.comment.width;
endc.height = s.comment.height;
endc.draw(g);
int yy = s.comment.height + vd;
int x1 = x + hd/2;
pa"ise tunnuse ja primitiivi tunnuse nihe
pa"ised
* Enumeration e = s.head.elements(); e.hasMoreElements();
(((PrimitiveHead)(e.nextElement()))).text.draw(g);
PrimitiveHead he = (PrimitiveHead)(e.nextElement());
g.setColor(Default.sketchHeadColor);
? he.text.toString().trim().length() != 0
he.text.draw(g);
if(he.text.width > w) w = he.text.width;
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, y+yy + he.text.height*3/4);
? he.text.toString().trim().length() == 0
kui päis tühi, siis hall for(;;): ??
//g.drawString("*", x1, y+yy + he.text.height*3/4);
g.setColor(Default.selectionColor);
g.drawString("for(;;)", x1+hd, y+yy + he.text.height*3/4);
g.setColor(color);
<======;
? PrimitiveHead.SWITCH:
g.setFont(Default.font);
p.o. selle vaate font !!!!!!!!!!!
//g.drawString("??", x1, y+yy + he.text.height*3/4);
<======;
? PrimitiveHead.CASE:
? PrimitiveHead.DEFAULT:
g.setFont(Default.font);
p.o. selle vaate font !!!!!!!!!!!
//g.drawString("?", x1, y+yy + he.text.height*3/4);
<======;
? PrimitiveHead.TRY:
g.setFont(Default.font);
p.o. selle vaate font !!!!!!!!!!!
//g.drawString("!!", x1, y+yy + he.text.height*3/4);
<======;
..case
? PrimitiveHead.CATCH:
? PrimitiveHead.FINALLY:
g.setFont(Default.font);
p.o. selle vaate font !!!!!!!!!!!
//g.drawString("!", x1, y+yy + he.text.height*3/4);
<======;
yy += he.text.height;
ALGJAVA looksulud
? (s instanceof Branch) && (s.parent.parent != null) && !s.parent.isHeadless()
g.setColor(Default.sketchHeadColor);
g.drawString("{", s.view.x+hd/3, y + yy + 2*vd );
lisaks veel switch-i ekstrasulg:
Sketch ülemus = (Sketch)(s.parent);
? !ülemus.isHeadless()
? ülemus.primitiveHead(0).type == PrimitiveHead.SWITCH
? s == ülemus.branch(0)
g.drawString("{", s.view.x+hd/3 -hd/3, y + yy - 4*vd);
keha
* 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);
Scheme sc = ar.destination((Branch)s);
int endx;
int yy0 = ar.text.y +
((Row)(ar.text.rows.elementAt(0))).height/2;
? (ar.type == Arrow.WEAK)&&
(!(sc.view instanceof ViewBox))&&
(!(sc.view instanceof ViewDTree))
endx = sc.view.x + hd/2;
drawWeakArrow(g, ar.text.x, yy0, endx);
<======
endx = sc.view.x;
drawStrongArrow(g, ar.text.x, yy0, endx);
<------
? o instanceof PrimitiveMember
PrimitiveMember ns = (PrimitiveMember)o;
?? ns.type
? Primitive.BREAKPOINT:
g.setFont(Default.font);
p.o. selle vaate font ?!!!!!!!!!!!
g.setColor(Default.breakpointColor);
g.drawString(">", x1, ns.text.y + ns.text.height*3/4);
g.drawString(">", x1+2, ns.text.y + ns.text.height*3/4);
3/4 on vaja mitmerealise jaoks
//(esimese rea ette) g.drawString(">", x1, ns.text.y + ns.text.height);
//(esimese rea ette) g.drawString(">", x1+2, ns.text.y + ns.text.height);
<======
ns.text.draw(g);
break continue ja returni korral poleks vaja
//ALGJAVA nooled
String pText = ns.text.toString().trim();
? pText.startsWith("break ") || pText.startsWith("break;")
break-nool
Scheme sc = s.parent;
sihtskeem SIL
otsida sihtskeem
<======
? ! sc.isHeadless()
? sc.primitiveHead(0).type == PrimitiveHead.SWITCH
<======
<==============
peameetodis ei tee (nagunii viga)
int endx;
int yy0 = ns.text.y +
((Row)(ns.text.rows.elementAt(0))).height/2;
endx = sc.view.x;
drawStrongArrow(g, ns.text.x, yy0, endx);
<======
? pText.startsWith("return ") || pText.startsWith("return;")
|| pText.startsWith("return(")
return-nool
Scheme sc = s.parent;
sihtskeem SIL
otsida sihtskeem
? sc.type == Scheme.MODULE
? ! sc.isHeadless()
meetod
<======
? sc.parent == null
peameetod
<======
int endx;
int yy0 = ns.text.y +
((Row)(ns.text.rows.elementAt(0))).height/2;
endx = sc.view.x;
drawStrongArrow(g, ns.text.x, yy0, endx);
<======
? pText.startsWith("continue ") || pText.startsWith("continue;")
continue-nool
Scheme sc = s.parent;
sihtskeem SIL
otsida sihtskeem
<======
? ! sc.isHeadless()
? sc.primitiveHead(0).type == PrimitiveHead.SWITCH
<======
<==============
peameetodis ei tee (nagunii viga)
int endx;
int yy0 = ns.text.y +
((Row)(ns.text.rows.elementAt(0))).height/2;
endx = sc.view.x;
drawWeakArrow(g, ns.text.x, yy0, endx);
ALGJAVA looksulud
? (s instanceof Branch) && (s.parent.parent != null) && !s.parent.isHeadless()
g.setColor(Default.sketchHeadColor);
g.drawString("}", s.view.x+hd/3, s.view.y + s.view.height + 2*vd);
lisaks veel switch-i ekstrasulg:
Sketch ülemus = (Sketch)(s.parent);
? !ülemus.isHeadless()
? ülemus.primitiveHead(0).type == PrimitiveHead.SWITCH
? s == ülemus.branch(ülemus.body.size() - 1)
g.drawString("}", s.view.x+hd/3 -hd/3, y + s.view.height + 3*vd);
static void drawStrongArrow(Graphics g,
int startX, int Y, int endX)
g.setColor(Default.arrowColor);
g.drawLine(startX, Y, endX, Y);
noolejoon
noole ots
g.drawLine(endX, Y, endX + 4, Y - 2);
g.drawLine(endX, Y, endX + 4, Y + 2);
static void drawWeakArrow(Graphics g,
int startX, int Y, int endX)
g.setColor(Default.arrowColor);
katkendjoon
* int i = endX; i < startX; i += laius*2/3
g.drawLine(i, Y, i + laius/3, Y);
noole ots
g.drawLine(endX, Y, endX + 4, Y - 2);
g.drawLine(endX, Y, endX + 4, Y + 2);
static void drawArrowsForIcon(Graphics g, Sketch s,
int X, int Y, int iconLevel)
X, Y - noole alguse koordinaadid (ikooni vasakul serval)
int endX;
int n = s.body.size();
harud
* int i = 0; i < n; i++
Branch br = s.branch(i);
int m = br.body.size();
liikmed
* int j = 0; j < m; j++
Object o = br.member(j);
? o instanceof Sketch
drawArrowsForIcon(g, (Sketch)o, X, Y, iconLevel);
<------
originaal
? o instanceof Arrow
drawIconArrow(g, br, (Arrow)o, X, Y, iconLevel);
//
? o instanceof PrimitiveMember
drawIconArrow(g, br, (PrimitiveMember)o, X, Y, iconLevel);
originaal drawIconArrow
static void drawIconArrow(Graphics g,
Branch br, Arrow ar, int X, int Y, int iconLevel)
ar - nool harus br; X, Y - noole algus (ikooni vasakul serval)
int endX;
Scheme sc = ar.destination(br);
mitteva"ljaulatuvat ei tee (destination on ka planeerimata)
? sc.level() >= iconLevel
<==========
Y += (ikooninooleNihe+=3);
seada endX
? sc instanceof Sketch
endX = sc.view.x;
<======
joonistada nool
? ar.type == Arrow.WEAK
drawWeakArrow(g, X, Y, endX);
<======
drawStrongArrow(g, X, Y, endX);
//ALGJAVA drawIconArrow
static void drawIconArrow(Graphics g,
Branch br, PrimitiveMember ns, int X, int Y, int iconLevel)
ar - nool harus br; X, Y - noole algus (ikooni vasakul serval)
int endX;
byte arType = Arrow.STRONG;
kompil
//Scheme sc = ar.destination(br);
Scheme sc = br.parent;
sihtskeem SIL
ALGJAVA nooled
String pText = ns.text.toString().trim();
? pText.startsWith("break ") || pText.startsWith("break;")
break-nool
arType = Arrow.STRONG;
otsida sihtskeem
<======
? ! sc.isHeadless()
? sc.primitiveHead(0).type == PrimitiveHead.SWITCH
<======
<==================
peameetodis ei tee (nagunii viga)
<======
? pText.startsWith("return ") || pText.startsWith("return;")
|| pText.startsWith("return(")
return-nool
arType = Arrow.STRONG;
otsida sihtskeem
? sc.type == Scheme.MODULE
? ! sc.isHeadless()
meetod
<======
? sc.parent == null
peameetod
<======
<======
? pText.startsWith("continue ") || pText.startsWith("continue;")
continue-nool
arType = Arrow.WEAK;
otsida sihtskeem
<======
? ! sc.isHeadless()
? sc.primitiveHead(0).type == PrimitiveHead.SWITCH
<======
<==================
peameetodis ei tee (nagunii viga)
<==============
??? ei tee noolt
mitteva"ljaulatuvat ei tee (destination on ka planeerimata)
? sc.level() >= iconLevel
<==========
Y += (ikooninooleNihe+=3);
seada endX
? sc instanceof Sketch
endX = sc.view.x;
<======
joonistada nool
? arType == Arrow.WEAK
drawWeakArrow(g, X, Y, endX);
<======
drawStrongArrow(g, X, Y, endX);