| 17 | } // namespace |
| 18 | |
| 19 | void connectSliderSetting(QSlider* slider, |
| 20 | std::function<void(int)> live, |
| 21 | std::function<void(int)> persist) |
| 22 | { |
| 23 | auto* debounce = new QTimer(slider); |
| 24 | debounce->setSingleShot(true); |
| 25 | debounce->setInterval(kPersistDebounceMs); |
| 26 | |
| 27 | // Reads the slider's current value at fire time so the persisted value |
| 28 | // matches what the user sees, even if valueChanged ran but the timer |
| 29 | // restart somehow didn't re-arm with the final tick. |
| 30 | QObject::connect(debounce, &QTimer::timeout, slider, [slider, persist]() { |
| 31 | persist(slider->value()); |
| 32 | }); |
| 33 | |
| 34 | QObject::connect(slider, &QSlider::valueChanged, slider, |
| 35 | [debounce, live = std::move(live)](int v) { |
| 36 | live(v); |
| 37 | debounce->start(); // restart resets the 500 ms window |
| 38 | }); |
| 39 | |
| 40 | QObject::connect(slider, &QSlider::sliderReleased, slider, |
| 41 | [slider, debounce, persist = std::move(persist)]() { |
| 42 | debounce->stop(); |
| 43 | persist(slider->value()); |
| 44 | }); |
| 45 | } |
| 46 | |
| 47 | } // namespace AetherSDR |
no test coverage detected