You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

42 lines
736B

  1. #if!defined EXTENDEDBUTTON_HPP
  2. #define EXTENDEDBUTTON_HPP
  3. #include <type_traits>
  4. #include <dsp/digital.hpp>
  5. #include <functional>
  6. template <class T>
  7. class ExtendedButton : public T
  8. {
  9. static_assert( std::is_base_of<rack::Widget, T>::value, "T must be a rack::Widget" );
  10. public:
  11. using Callback = std::function<void()>;
  12. ExtendedButton()
  13. {
  14. }
  15. explicit ExtendedButton(Callback&& callback) :
  16. m_callback(std::move(callback))
  17. {
  18. }
  19. void setCallback(Callback&& callback)
  20. {
  21. m_callback = std::move(callback);
  22. }
  23. void onChange(rack::EventChange& e) override
  24. {
  25. T::onChange(e);
  26. if (m_trigger.process(T::value) && m_callback)
  27. {
  28. m_callback();
  29. }
  30. }
  31. private:
  32. rack::SchmittTrigger m_trigger;
  33. Callback m_callback;
  34. };
  35. #endif