static void calAddAutoLayoutSwitch(CirclesAndLines cal, final Canvas canvas, O modifyLayout, bool on) { calAddAutoLayoutSwitch(new Var(cal), canvas, modifyLayout, on); } static void calAddAutoLayoutSwitch(final Var cal, final Canvas canvas, final O modifyLayout, final bool on) swing { final new Var timer; Runnable r; addToWindow(canvas, jcenteredline(onChange(jcheckbox("Auto-Layout", on), 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!); callF(modifyLayout, layout); } layout.step(); updateCanvas(canvas); } })); }))); if (on) r.run(); }