!7 cmodule TestFlexibleRateTimer > DynPrintLog { transient FlexibleRateTimer timer = new(1); transient SimpleLiveValue lvRate = stringLiveValue(); S formattedFrequency() { ret formatDouble(timer.getFrequency(), 3); } start { timer.verbose = true; lvRate.onChange(rLater(1000, r { S s = trim(lvRate!); if (eq(s, formattedFrequency())) ret; Double hz = parseDoubleOpt(s); if (hz != null) timer.setFrequencyImmediately(hz); })); timer.onFrequencyChanged(runAndReturn(r { lvRate.set(formattedFrequency()) })); timer.setRunnableAndStart(rEnter { print("blubb " + localTimeWithMS()) }); } visualize { ret northAndCenterWithMargins( withLabelLeftAndRight("Rate:", jLiveValueTextField_bothWays(lvRate), "Hz"), super.visualize()); } void cleanMeUp { cleanUp(timer); } }