static void calAddAutoLayoutSwitch(CirclesAndLines cal, final Canvas canvas, O modifyLayout, bool on) { calAddAutoLayoutSwitch(new Var(cal), canvas, modifyLayout, on); } static double calAddAutoLayoutSwitch_scale = 100; static void calAddAutoLayoutSwitch(final Var cal, final Canvas canvas, final O modifyLayout, final bool on) swing { // dummy for getting desiredLength CALSpringLayout _layout = new CALSpringLayout(cal!); callF(modifyLayout, _layout); final JCheckBox cb = jcheckbox("Auto-Layout", on); final JCheckBox cb2 = jcheckbox("Center", false); final JSpinner lineLength = jspinner(iround(_layout.desiredLength*calAddAutoLayoutSwitch_scale), 1, 50); addToWindow(canvas, jcenteredline(cb, cb2, jlabel("Line length:"), lineLength)); awtCalcEvery2(canvas, 100, new Runnable { CALSpringLayout layout; CirclesAndLines lastCAL = cal!; public void run() { bool x = false; if (isChecked(cb)) { if (cal! != lastCAL || layout == null) { lastCAL = cal!; layout = new CALSpringLayout(cal!); layout.center = false; callF(modifyLayout, layout); layout.desiredLength = intFromSpinner(lineLength)/calAddAutoLayoutSwitch_scale; } layout.step(); x = true; } if (isChecked(cb2)) { calCenterStepwise(cal!, 0.1); x = true; } if (x) updateCanvas(canvas); } }); }