AMADEUS html plain
This sketchy text is generated by AMADEUS
import java.util.*;
import java.awt.*;
class ViewDTree
class ViewDTree extends View
realiseerib skeem-vaate
vaate parameetrid
static Color color = Default.sketchLineColor;
joonistamisva"rv skeemile
static Color colorBr = Default.branchHeadColor;
joonistamisva"rv harule
ikooni ala:
static Color colorLine = Color.lightGray;
static int iconw;
== comment.height
static int iconh;
static int laius;
jooneala laius
maa"ratakse drawSkLine-s, kasut. ka draw-s
static int fontSize = Default.font.getSize();
static final int vd = fontSize;
vert-intervall
static int h = fontSize-6;
vysota papki
static int w = (3*h)/2;
shirina papki
static int hp = h-2;
static int dp = hp/2+4;
dlina promegutka
static int hd = w;
hor-intervall
ViewDTree(Scheme s)
super(s);
type = View.DTREE;
public Rectangle getLineArea(Scheme s)
<======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);
lihtskeemi joone algus ja lopp (kommentaaride keskkohal):
int xx= rk.x, yy=rk.y, korgus=rk.height;laius=rk.width;
int xja = xx-dp;
int dd = (s.comment.width == 0)? 0 :
vd;
AmRow.ROW_ADVANCE;|| Dlina komentarija shemy
int yja = yy + (s.comment.height - dd) / 2;
v konce komentarii pishem toge ee y koordinata:
int yjl = yy + korgus - 8;
g.setColor(colorLine);
? (s.level()!=0 && (s.parent.view.type == View.DTREE))
Gorizontalnaja soedinjajuchaja liniija:
g.drawLine(xja, yja + dp-4, xja+dp, yja + dp-4);
Vertikalnaja linija:
g.drawLine(xja+dp+1+w/2, yja+h, xja+dp+1+ w/2, yjl);
Vilka
g.drawLine(xja+dp+1-3+w/2,yjl+4,xja+dp+1+w/2,yjl);
g.drawLine(xja+dp+1+w/2,yjl,xja+dp+1+w/2+3,yjl+4);
? (s instanceof Branch)
g.setColor(colorBr);
<======
??s.type
? Scheme.LOOP:
? Scheme.MODULE:
haru joonte vahe:
int vahe;
? (s.type == Scheme.MODULE)
vahe = 1;
<======
Box
g.drawRect(xja+dp+1 ,yja-1, w, h);
g.drawRect(xja+dp+1+vahe , yja-1+vahe ,
w-2*vahe , h-2*vahe);
<======
? :
[Scheme.SIMPLE ja] ko~ik teised
g.drawRect(xja+dp+1 ,yja-1, w , h);
<======
public void plan(int x0, int y0)
? (sk.icon)
ikooni koht ja moo~tmed:
x = x0 + 1;
width = w+3;
height = w+3;
int dd1 = (sk.comment.width == 0)? 0 :
vd;
y = y0 + (sk.comment.height - dd1);
<======
int yy= y0 ;
jooksev vert. koordinaat
int ww = 0;
jooksev laius
sk.comment.y = yy+h-vd+3 ;
sk.comment.x = x0+w+3;
yy += (4*vd)/3;
? (sk.comment.width > ww)
ww = sk.comment.width;
? (sk.head.size() != 0)
planeerida paised
* Enumeration e = sk.head.elements(); e.hasMoreElements();
PrimitiveHead he = (PrimitiveHead)(e.nextElement());
he.text.plan(x0+w+3, yy);
yy += he.text.height+vd/3;
? (he.text.width > ww)
ww = he.text.width;
yy += vd/2;
keha
* int i = 0; i < sk.body.size(); i++
Object o = sk.member(i);
? (o instanceof Scheme)
Scheme ss = (Scheme)o;
ss.view.plan(x0+hd, yy);
? (ss.view.width > ww)
ww = ss.view.width;
yy += ss.view.height + vd/3 ;
<------
PrimitiveMember ns = (PrimitiveMember)o;
ns.text.plan(x0+w+3 , yy);
yy += ns.text.height + vd/3;
? (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;
height = yy-y0;
public void draw(Graphics g)
joonistada skeem sk
Scheme s = super.sk;
? (s.icon)
g.setColor(colorLine);
g.drawLine(x-hp/2-4, y + hp/2, x, y + hp/2);
Gorizontalnaja soedinjajuchaja liniija
? (s instanceof Sketch)
g.setColor(color);
<======
??s.type
? Scheme.LOOP:
? Scheme.MODULE:
joonte vahe:
int vahe;
? (s.type == Scheme.MODULE)
vahe = 1;
<======
g.drawRect(x+1 ,y-1, w, h);
g.drawRect(x+1+vahe , y-1+vahe , w-2*vahe , h-2*vahe);
g.drawLine(x+1, y-1,x+1+w,y-1+h);
<======
? :
g.drawRect(x+1 ,y-1, w , h);
g.drawLine(x+1, y-1,x+1+w,y-1+h);
<======
? (!s.comment.isTrivial())
g.setColor(Default.commentColor);
Pishem okolo ikonki:
g.drawString(s.comment.toString(),x + 2*hd+8,y + h );
<======
? (s.head.size() != 0)
? (s instanceof Sketch)
g.setColor(color);
<======
g.drawString(s.primitiveHead(0).text.row(0).toString(),
x + 2*hd + 8 , y + h);
Pishem pervuju strochku zagolovka
--------------------------------------------------------------------
ikooni nool
--------------------------------------------------------------------
int X=x,Y=y+h/2-1;
? (s instanceof Sketch)
drawArrowsForIcon(g,(Sketch)s,X,Y,s.level());
<======
int m = s.body.size();
* int j=0;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());
<======
drawSkLine(g,s);
joonistada skeemijoon
s.comment.draw(g);
joonistada kommentaar
int yy = s.comment.height + (2*vd)/3-2;
int x1 = x + hd/2 + 2;
pa"ise tunnuse ja primitiivi tunnuse nihe
* Enumeration e = s.head.elements(); e.hasMoreElements();
PrimitiveHead he = (PrimitiveHead)(e.nextElement());
he.text.draw(g);
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);
<======
? 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);
<======
? 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;
* 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:
Scheme sc =ar.destination((Branch)s);
int endx = sc.view.x+w/2+2;
int yy0=ar.text.y+((Row)(ar.text.rows.elementAt(0))).height/2+2;
? (ar.type == Arrow.WEAK)
drawWeakArrow(g,ar.text.x,yy0,endx);
<======
drawStrongArrow(g,ar.text.x,yy0,endx);
<------
? (o instanceof PrimitiveMember)
PrimitiveMember ns = (PrimitiveMember)o;
?? ns.type
? 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);
<======;
ns.text.draw(g);
noolte joonistamised
private void drawStrongArrow(Graphics g, int startX, int Y,int endX)
g.setColor(Default.arrowColor);
g.drawLine(startX, Y, endX,Y);
nooljoon
nooleotsad
g.drawLine(endX,Y,endX+4,Y-2);
g.drawLine(endX,Y,endX+4,Y+2);
private void drawWeakArrow(Graphics g, int startX, int Y,int endX)
g.setColor(Default.arrowColor);
* int i=endX;i
g.drawLine(i,Y,i+laius/3,Y);
g.drawLine(endX,Y,endX+4,Y-2);
g.drawLine(endX,Y,endX+4,Y+2);
private void drawArrowsForIcon(Graphics g, Sketch s,int X,int Y, int iconLevel)
X,Y-noole alguse koordinaatid
int n=s.body.size();
harud
* int i=0 ;i
Branch br=s.branch(i);
int m= br.body.size();
* int j=0;j
Object o=br.member(j);
? (o instanceof Sketch)
drawArrowsForIcon(g,(Sketch)o,X,Y,iconLevel);
? (o instanceof Arrow)
drawIconArrow(g,br,(Arrow)o,X,Y,iconLevel);
private void drawIconArrow(Graphics g, Branch br,Arrow ar,int X,int Y, int iconLevel)
ar nool harus br; X,Y noole algus
int endX;
Scheme sc = ar.destination(br);
? (sc.level()>=iconLevel)
<======
endX = sc.view.x+w/2+2;
? (ar.type ==Arrow.WEAK)
drawWeakArrow(g,X,Y,endX);
<======
drawStrongArrow(g,X,Y,endX);
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
<==============
<------
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();
<------
<==========
ekraani muutusjärgsed kohendamised
void adjustComment(AmCanvas c,
int oldW, int oldH, int caretShift)
arvestada skeemikommentaari muutus
oldW, oldH - reas enne eemaldamist
vo~i pa"rast lisamist
c.frame.contents.affected = sk;
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
..if
? (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;
skeemikommentaar
void adjustTextComment(AmCanvas c, Row comm,
int oldW, int oldH, int caretShift)
arvestada tekstikommentaari muutus
oldW, oldH - reas enne eemaldamist
vo~i pa"rast lisamist
c.frame.contents.affected = sk;
c.X = comm.x + caretShift;
c.W = oldW - caretShift + 2;
et kursor paistaks
? (comm.elements.size() == 1)
rida sai tyhjaks
c.X = comm.x;
et << tekiks
c.W = oldW + 2;
c.X = c.X + c.start.x;
c.Y = comm.y + c.start.y - 2;
c.H = oldH + 4;
void adjustText(AmCanvas c, Text t, Row r,
int oldW, int oldH, int caretShift)
arvestada muutus teksti t reas r
oldW, oldH - reas enne eemaldamist
vo~i pa"rast lisamist
c.frame.contents.affected = sk;
int wadd = 0;
? (t.rows.indexOf(r) == t.rows.size()-1)
wadd = t.comment.width;
c.X = r.x + caretShift;
c.W = oldW - caretShift + wadd + 2;
et kursor paistaks
? (r.elements.size() == 1)
rida sai tyhjaks
c.X = r.x;
et << tekiks
c.W = oldW + wadd + 2;
c.X += c.start.x;
c.Y = r.y + c.start.y;
c.H = oldH;
void adjustText(AmCanvas c, Text t, Row r)
r - rida, millele jrgm yhendati
vo~i rida, mis poolitati
vo~i tyhi rida, mis ja"i peale teksti tyhjendamist
r.invalidate();
vajalik, kui yhendati tyhi rida
c.prepare(r.y-2);
-2, et valiku ülemine joon ka uuesti
void adjustText(AmCanvas c, Text t, Row r1, Row r2,
int oldW, int oldH)
kuskil ridades r1..r2 on muudatus (kuid ridade arv sama)
c.X = r1.x + c.start.x;
c.Y = r1.y + c.start.y - 2;
et valik paistaks
int i = t.rows.indexOf(r1);
int j = t.rows.indexOf(r2);
c.W = t.width(i,j);
int cw = t.comment.width;
? ((j == t.rows.size()-1)
&& ((r2.width + cw) > c.W))
c.W = r2.width + cw;
c.W = Math.max(c.W, oldW);
c.H = r2.y - r1.y + 1 + r2.height;
c.H = Math.max(c.H, oldH);
..for
* int k = i; k < j; k++
void adjustIcon(AmCanvas c)
skeemis ikoniseeritus muudetud
valiku osas
??c.selection.kind()
? Selection.PRIMITIVE2PRIMITIVE:
c.prepare(c.selection.start.primitive.text.y - 4);
<======
? Selection.SCHEME2PRIMITIVE:
c.prepare(c.selection.start.scheme.view.y - 4);
<======
? Selection.PRIMITIVE2SCHEME:
c.prepare(c.selection.start.primitive.text.y - 4);
<======;
..case
? Selection.SCHEME2SCHEME:
c.prepare(c.selection.start.scheme.view.y - 4);
<======
..default
? :
<==========
void adjust(AmCanvas c, Primitive p, boolean cut)
p - lisatud uus vo~i eemaldatud primitiiv
c.prepare(p.text.y - 2);
void adjust(AmCanvas c, Scheme s, boolean cut)
p - lisatud vo~i eemaldatud skeem
c.prepare(s.view.y - 2);
void adjust(AmCanvas c, Primitive p, Scheme affected)
p on togitud primitiiv
affected - erijuhul: noole otsa skeem
Rectangle rec =
affected.view.getLineArea(
affected);
c.X = rec.x;
c.Y = p.text.y;
c.W = p.text.x +
p.text.width - rec.x;
c.H = p.text.height;
p.text.invalidate();
c.frame.contents.affected = affected;
c.X += c.start.x; c.Y += c.start.y;
void adjustArrowMap(AmCanvas c, Arrow ar, boolean prolonged)
selle skeemi noole kujutise osa
? (prolonged)
int len = sk.level() - ar.level;
otsa-skeem:
Scheme x = sk;
* int i = 0; i < len; i++
? (x instanceof Branch)
x = x.parent;
c.frame.contents.affected = x;
c.X = x.view.x + c.start.x;
c.Y = ar.text.y + c.start.y;
c.W = ar.text.x - x.view.x;
c.H = ar.text.height + 2;
<======
int len = sk.level() - ar.level + 1;
otsa-skeem:
Scheme x = sk;
* int i = 0; i < len; i++
? (x instanceof Branch)
x = x.parent;
c.frame.contents.affected = x;
c.X = x.view.x + c.start.x;
c.Y = ar.text.y + c.start.y;
c.W = ar.text.x - x.view.x;
c.H = ar.text.height + 2;
public void adjustSchemeMap(AmCanvas c, Scheme s)
peale ainult skeemi s tyybi muutmist
? (s instanceof Branch)
s = s.parent;
Rectangle rec = getLineArea(s);
c.X = rec.x + c.start.x;
c.Y = rec.y + c.start.y;
c.W = rec.width;
c.H = rec.height+2;
c.frame.contents.affected = s;
void adjustSelection(AmCanvas c, Selection sel)
enamasti:
c.frame.contents.affected = sel.start.scheme;
??sel.kind()
? Selection.PRIMITIVETEXT:
sel.start.primitive.text.invalidate();
<======
? Selection.PRIMITIVECOMMENT:
sel.start.primitive.text.comment.invalidate();
<======
? Selection.SCHEMECOMMENT2SCHEMECOMMENT:
Scheme s = sel.start.scheme;
s.invalidateRest(s.view.y - 4);
Rectangle rec = sel.area();
c.X = rec.x + c.start.x;
c.W = rec.width;
Selection sx = new Selection(
new Cursor(s), new Cursor(s));
rec = sx.area();
c.Y = rec.y + c.start.y;
c.H = rec.height;
<==========
? Selection.PRIMITIVE2PRIMITIVE:
<======
? Selection.SCHEME2PRIMITIVE:
<======
? Selection.PRIMITIVE2SCHEME:
<======
? Selection.SCHEME2SCHEME:
<======
Rectangle rec = sel.area();
c.X = rec.x + c.start.x;
c.Y = rec.y + c.start.y;
c.W = rec.width;
c.H = rec.height;