#if!defined EXTENDEDBUTTON_HPP #define EXTENDEDBUTTON_HPP #include #include #include template class ExtendedButton : public T { static_assert( std::is_base_of::value, "T must be a rack::Widget" ); public: using Callback = std::function; ExtendedButton() { } explicit ExtendedButton(Callback&& callback) : m_callback(std::move(callback)) { } void setCallback(Callback&& callback) { m_callback = std::move(callback); } void onChange(rack::EventChange& e) override { T::onChange(e); if (m_trigger.process(T::value) && m_callback) { m_callback(); } } private: rack::SchmittTrigger m_trigger; Callback m_callback; }; #endif