AMADEUS html plain
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Item54Listener
class Item54Listener implements ActionListener
Insert+Branch
AmFrame frame;
Item54Listener(AmFrame fr)
konstruktor
public void actionPerformed(ActionEvent event)
AmCanvas c = frame.viewArea;
Editor editor = frame.contents.editor;
Caret caret = editor.caret;
ALGJAVA
Sketch peremees;
? caret.scheme instanceof Sketch
peremees = (Sketch)(caret.scheme);
<======
peremees = (Sketch)(caret.scheme.parent);
? peremees.type == Scheme.LOOP
Toolkit.getDefaultToolkit().beep();
<======
tsüklile haru ei pane
? peremees.type == Scheme.MODULE
Toolkit.getDefaultToolkit().beep();
<======
meetodile haru ei pane
? peremees.isHeadless() && peremees.body.size() == 1
Toolkit.getDefaultToolkit().beep();
<======
lihtrühmale haru ei pane
On SIMPLE ja (päisega või (päiseta aga mitme haruga))
if,sw,try macro set
teha uus haru br (baaskeel ja vaade ülemuselt):
BaseLanguage bl =
BaseLanguage.newBaseLanguage(caret.scheme.baseLanguage.type);
Branch br = new Branch(Scheme.SIMPLE, bl);
View.set(br, caret.scheme.view.type);
lisada:
insertBranchAtCaret(frame, br);
public static void insertBranchAtCaret(AmFrame frame, Branch br)
päis ja päise tüüp nagu eelmisel harul (või järgmisel,
kui eelmist ei ole)
AmCanvas c = frame.viewArea;
Editor editor = frame.contents.editor;
Caret caret = editor.caret;
Branch naaber = null;
Sketch kuhuLisatud = null;
int mitmendaksLisatud;
lisada, olenevalt kareti asukohast
? caret.scheme instanceof Sketch
lisada esimeseks või teiseks
Sketch caretScheme = (Sketch)(caret.scheme);
int nr = 1;
teiseks
ainult lülitiskeemil võib ka esimeseks panna
? caretScheme.head.size() == 1
? caretScheme.primitiveHead(0).type == PrimitiveHead.SWITCH
nr = 0;
mitmendaksLisatud = nr;
lisada kohale nr
naaber = (caretScheme).branch(0);
kuhuLisatud = (Sketch)(caret.scheme);
haru ei lisata:
? kuhuLisatud.type == Scheme.LOOP || kuhuLisatud.type == Scheme.MODULE
<==============
editor.insertScheme((Scheme)(caret.scheme), nr, br);
<======
int i = caret.scheme.parent.body.indexOf(caret.scheme);
kuhuLisatud = (Sketch)(caret.scheme.parent);
haru ei lisata:
? kuhuLisatud.type == Scheme.LOOP || kuhuLisatud.type == Scheme.MODULE
<==============
mitmendaksLisatud = i+1;
editor.insertScheme(caret.scheme.parent, i+1, br);
naaber = ((Sketch)(caret.scheme.parent)).branch(i);
panna päis
Text t = new Text();
Row r = null;
? kuhuLisatud.head.size() == 1
? kuhuLisatud.primitiveHead(0).type == PrimitiveHead.SWITCH
lisati lüliti haru
r = new Row("case _ :", Default.branchHeadColor);
Row r1 = new Row("break;", Default.foregroundColor);
Text t1 = new Text();
t1.insert(r1, 0);
t1.remove(1);
lisada break; (kui juba ei ole br lõpus -- kleepimisel võib olla)
Object o = br.member(br.body.size() - 1);
? o instanceof Scheme
<======
String lastPm = ((PrimitiveMember)o).text.toString();
? !(lastPm.startsWith("break;") || lastPm.startsWith("break "))
br.add(new PrimitiveMember(Primitive.SIMPLE, t1) );
<======
? kuhuLisatud.head.size() == 1
? kuhuLisatud.primitiveHead(0).type == PrimitiveHead.TRY
lisati try-catch haru
r = new Row("catch (_Exception e)", Default.branchHeadColor);
<======
tõenäoliselt if .. else
? mitmendaksLisatud == kuhuLisatud.body.size()-1
viimaseks
kui eelviimase päis on else, siis ei saa else panna
Branch eelmine = kuhuLisatud.branch(mitmendaksLisatud - 1);
? eelmine.head.size() == 1
? eelmine.primitiveHead(0).text.toString().trim().equals("else")
r = new Row("", Default.branchHeadColor);
<======
r = new Row("else", Default.branchHeadColor);
<======
r = new Row("else if(_)", Default.branchHeadColor);
t.insert(r, 0);
t.remove(1);
et makro harule ei paneks päist
ja et ei paneks veel üht päist, kui juba on (haru kleepimisel)
? ! kuhuLisatud.isHeadless() && br.head.size() == 0
br.insert(new PrimitiveHead(
PrimitiveHead.SIMPLE,
t), 0);
lisatud skeem valikuks
Cursor cursor = new Cursor(br);
c.selection = new Selection(c, cursor, cursor);
viiaKarettKirjutamiskohale(br, editor);
frame.contents.main.view.plan(c.hd, c.vd);
c.caretToScreen();
karett ekraanile
c.own = true; c.repaint();
private static void viiaKarettKirjutamiskohale(Branch b, Editor ed)
lisatud harus liigutada karett
? b.isHeadless()
päiseta haru korral ei tee midagi
<======
ed.caret.moveDown();
haru päise algusse
String päisetekst = b.primitiveHead(0).text.toString().trim();
? päisetekst.indexOf("_") == -1
else või (edaspidi ehk) default
? päisetekst.length() > 0
muidu on tühi (else koht)
ed.caret.moveDown();
päise kommentaarile
ed.caret.moveDown();
else sisu algusse
<======
else if(_) või case _ :
Row r = ed.caret.row;
päise reas kuni tuleb '_'
r.getElement(ed.caret.noInRow);
? r.sy == null
igaks juhuks
<------
<======