abstract sclass DynCalculatedList extends DynModule { transient JList list; transient L results; transient bool calculateWhenHidden; visualize { ret list = jlist(calc()); } void unvisualize() { list = null; } void update() { temp enter(); if (list != null || calculateWhenHidden) fillListWithStrings(list, results = calc()); } // Note: This is called on every update, so you should cache // results IN the calc function if they are expensive to make abstract L calc(); void scrollDown { scrollAllTheWayDown(list); } S selected() { ret selectedItem(list); } }