AMADEUS html plain
import java.util.*;
import java.awt.*;
class ViewLatex
class ViewLatex extends View
realiseerib skeem-vaate
static final int hd = 15;
hor-intervall
static final int vd = 5;
vert-intervall
static final int MAX_ONELINE = 50;
oneline rea pikkus
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;
ViewLatex
maa"ratakse drawSkLine-s, kasut. ka draw-s
ViewLatex(Scheme s)
super(s);
type = View.LATEX;
getLineArea
/*
int type(){
return View.SKETCHY;
}
*/
public Rectangle getLineArea(Scheme s)
<======new Rectangle(s.view.x, s.view.y, hd, s.view.height)
drawSkLine
getLineArea()
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;
AmRow.ROW_ADVANCE;
int yja = yy + (s.comment.height - dd) / 2;
int yjl = yy + korgus - 3;
-1;
if(s.nonBranch())
non-control
silumiseks
g.setColor(Color.cyan);
g.drawRect(xx, yy, laius, korgus);
g.setColor(color);
..if
? (s instanceof Branch)
ylemuse joonte vahe
int vahe1 = laius/4;
..if
..if
? (s.parent.type == Scheme.MODULE)
vahe1 = 1;
..if
? (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
..if
? ((!(((Sketch)(s.parent)).isMono())) ||
(((Sketch)(s.parent)).head.size() > 0) ||
(s.type != Scheme.SIMPLE))
case Scheme.LOOP:
case 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:
System.out.println("ViewLatex: s.parent.type="+s.parent.type);
..if
? (s.parent.type == Scheme.SIMPLE)
g.setFont(Default.font);
System.out.println("ViewLatex: s.type="+s.type);
..if
? (s.type == Scheme.MODULE)
g.drawString("{", xja + vahe, yja + vd);
<======
? (s.type == Scheme.LOOP)
g.drawString("[", xja + vahe, yja + vd);
<======
g.drawString("-", xja + vahe, yja + vd);
<======
g.drawLine(xsa, yva, xva + laius - 2, yva);
g.drawLine(xsa, ysa, xva + laius - 2, ysa);
break;
default: // Scheme.SIMPLE ja ko~ik teised
g.drawLine(xsa, yja, xja + laius - 2 - 1, yja);
g.drawString("-", xja + vahe, yja + vd);
break;
switch
<======
..switch
??s.type
..case
? Scheme.LOOP:
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);
<======;
..case
? Scheme.MODULE:
g.setFont(Default.font);
g.drawString("\\begin", xja, yja + vd);
g.drawString("\\end", xja, yjl + vd);
joonte vahe:
vahe = laius/4;
..if
..if
? (s.type == Scheme.MODULE)
vahe = 1;
xva, yva, xvl, yvl; // valimise pystjoone algus ja lopp
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+2*vd, xvl, yvl-2*vd);
valimine pystjoon
g.drawLine(xva+1, yva, xva + laius - 2, yva);
g.drawLine(xvl+1, yvl, xvl + laius - 2, yvl);
g.drawLine(xsa, ysa+2*vd, xsl, ysl-2*vd);
sisemine pystjoon
<======;
..default
? :
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);
<======;
switch
else
plan
drawSkLine()
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;
<======
boolean isModuleSkecth = (sk instanceof Sketch)
&& (sk.type == Scheme.MODULE);
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/2 + vd;
if(sk.comment.width > ww) ww = sk.comment.width;
..if
? (isModuleSkecth)
ww = sk.comment.width + hd
/*\begin*/
+ hd;
<======
..if
? (sk.head.size() != 0)
planeerida paised
yy += vd;
..for
* 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;
for
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;
..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;
for
enda koht ja moo~tmed:
ww - suurim alamskeemide ja lihtliikmete laiustest
x = x0; y = y0;
width = ww+hd+1;
height = yy-y0+vd+1;
..if
? (sk instanceof Branch)
height -= 2*vd;
haru lo~pus pole kommentaari
<======
sk on skeem
width -= hd; // harud on vasakule nihutatud
kommentaari x
..if
? (isModuleSkecth)
sk.comment.x = sk.view.x + hd + hd + hd;
<======
sk.comment.x = sk.view.x + hd;
draw
plan
public void draw(Graphics g)
joonistada skeem sk
Scheme s = super.sk;
? (s.icon)
..if
? (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);
..if
? (!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);
<======
non-control
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.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 = 2*vd + vd/2; // joonistamise jarg
int yy = s.comment.height + vd;
int x1 = x + hd/2;
pa"ise tunnuse ja primitiivi tunnuse nihe
..for
* Enumeration e = s.head.elements(); e.hasMoreElements();
(((PrimitiveHead)(e.nextElement()))).text.draw(g);
PrimitiveHead he = (PrimitiveHead)(e.nextElement());
g.setColor(Default.sketchHeadColor);
he.text.draw(g);
if(he.text.width > w) w = he.text.width;
g.setColor(color);
paise tunnus
..switch
?? he.type
..case
? 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);
<======;
..case
? PrimitiveHead.SWITCH:
g.setFont(Default.font);
p.o. selle vaate font !!!!!!!!!!!
g.drawString("??", x1, y+yy + he.text.height*3/4);
<======;
..case
? PrimitiveHead.CASE:
? PrimitiveHead.DEFAULT:
g.setFont(Default.font);
p.o. selle vaate font !!!!!!!!!!!
g.drawString("?", x1, y+yy + he.text.height*3/4);
<======;
..case
? 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);
<======;
switch
yy += he.text.height;
for
..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;
..if
? (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;
..if
? (ar.type == Arrow.WEAK)
nork
endx += laius/2;
..for
* 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;
..switch
?? ns.type
..case
? Primitive.CONDITION:
g.setFont(Default.font);
p.o. selle vaate font !!!!!!!!!!!
g.setColor(Default.conditionColor);
(esimese rea ette)
g.drawString("?", x1, ns.text.y + ns.text.height*3/4);
<======;
switch
ns.text.draw(g);
yy += ns.text.height;
for
pointLocation
draw()
/*
public void unpaintSelection(){ kustutab valiku tunnuse
AmSketch s = Am.selected;
Color cx = color;
color = AmDefault.backgroundColor;
repaintSelection();
color = cx;
}
public void repaintSelection(){ kujutab valiku tunnuse
if(Am.selected == null) return;
AmSketch s = Am.selected;
int x0 = s.view.x-2;
int y0 = s.view.y-2;
int w = s.view.width+4;
int h = s.view.height+4;
Am.canvas.repaint(x0, y0, w, 1); ylemine
Am.canvas.repaint(x0, y0+h, w, 1); alumine
Am.canvas.repaint(x0, y0, 1, h); vasak
Am.canvas.repaint(x0+w, y0, 1, h); parem
}repaintSelection
*/
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:
..for
* 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);
..if
? (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();
..for
* i = 1; i < r.elements.size(); i++
<======;
result.noInRow++;
r.getElement(i);
? (r.sy != null)
shift += r.sy.width();
<------
for
<==========
System.out.println("ViewSketchy: punkt pole mitteskeemis");
result = null;
else
for
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();
..for
* int i = 1; i < r.elements.size(); i++
<======;
result.noInRow++;
r.getElement(i);
? (r.sy != null)
shift += r.sy.width();
<------
for
<======
result = null;
selle skeemi pa"isel ?
result = new Cursor(s);
..for
* 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();
..for
* int i = 1; i < r.elements.size(); i++
<======;
result.noInRow++;
r.getElement(i);
? (r.sy != null)
shift += r.sy.width();
<------
for
<==========