!7 srecord Line ( S type, // 'user, 'suggested, 'bot, 'metaComment S text ) {} concept Interaction { new L lines; bool current; void addLine(Line line) { lines.add(line); change(); } } sS lineToString(Line line) { ret line.type + ": " + line.text; } module TrainInteraction { transient S imageID = #1101205; transient JTextArea taInteraction; transient S log; transient JTextField tfInput, tfToSay; transient JLabel lblOutput; transient Interaction current; start { db(); current = uniq_sync(Interaction, current := true); log = lines(map lineToString(current.lines)); } visualize { onEnter(tfInput = jTextField(), r { current.addLine(logLine(Line('user, gtt(tfInput)))); }); tfToSay = jTextField(); taInteraction = dm_fieldTextArea('log); ret withBottomMargin(20, centerAndSouthWithMargins( westAndCenterWithMargin(jimage(imageID), taInteraction), northAndCenterWithMargin( fontSize(20, lblOutput = jCenteredBoldLabel(" ")), makeForm3( "Your input:", focusOnShow(fontSize(16, tfInput)), "Make me say:", fontSize(16, tfToSay)) ))); } Line logLine(Line line) { setField(log := log + lineToString(l)); ret line; } }