import javax.swing.event.AncestorListener; import javax.swing.event.AncestorEvent; import javax.swing.Timer; // first delay = delay static Timer installTimer(JComponent component, O r, long delay) { ret installTimer(component, r, delay, delay); } // first delay = delay static Timer installTimer(RootPaneContainer frame, long delay, O r) { ret installTimer(frame.getRootPane(), r, delay, delay); } // first delay = delay static Timer installTimer(JComponent component, long delay, O r) { ret installTimer(component, r, delay, delay); } static Timer installTimer(JComponent component, long delay, long firstDelay, O r) { ret installTimer(component, r, delay, firstDelay); } static Timer installTimer(final JComponent component, final O r, final long delay, final long firstDelay) { ret installTimer(component, r, delay, firstDelay, true); } static Timer installTimer(final JComponent component, final O r, final long delay, final long firstDelay, final bool repeats) { if (component == null) null; ret (Timer) swingAndWait(func { final new Var timer; timer.set(new Timer(toInt(delay), actionListener { temp tempActivity(r); pcall { if (!allPaused()) if (isFalse(callF(r))) cancelTimer(timer!); } })); timer->setInitialDelay(toInt(firstDelay)); timer->setRepeats(repeats); bindTimerToComponent(timer!, component); ret timer!; }); } static Timer installTimer(RootPaneContainer frame, long delay, long firstDelay, O r) { ret installTimer(frame.getRootPane(), delay, firstDelay, r); }