static void calAddAutoLayoutSwitch(CirclesAndLines cal, final Canvas canvas, bool on) { calAddAutoLayoutSwitch(new Var(cal), canvas, on); } static void calAddAutoLayoutSwitch(final Var cal, final Canvas canvas, bool on) { final new Var timer; Runnable r; addToWindow(canvas, jcenteredline(onChange(jcheckbox("Auto-Layout"), r = r { if (timer.has()) { cancelTimer(timer!); timer.set(null); } else timer.set(awtCalcEvery2(canvas, 100, new Runnable { CALSpringLayout layout = new(cal!); CirclesAndLines lastCAL = cal!; public void run() { if (cal! != lastCAL) { lastCAL = cal!; layout = new CALSpringLayout(cal!); } layout.step(); updateCanvas(canvas); } })); }))); if (on) r.run(); }