Control button events are communicated from Lightpad and Control Blocks to your application via ControlButton objects.
You can obtain an array of ControlButton pointers associated with a specific Lightpad or Control Block from its corresponding Block object using the Block::getButtons() method — see the Discovering BLOCKS page for an example of how to obtain Block objects. Each pointer to a ControlButton will be valid for the lifetime of the Block object.
Once you have a ControlButton you must register as a ControlButton::Listener to receive button pressed and button released callbacks. The process for doing this is to have one of your application's classes inherit from ControlButton::Listener and override the pure virtual methods ControlButton::Listener::buttonPressed() and ControlButton::Listener::buttonReleased(). Then, when you register your derived class as a listener to a particular ControlButton, your overriden methods will be called when the corresponding button is pressed and released.
Registering a class derived from ControlButton::Listener with multiple ControlButton objects is done as follows:
When your overriden buttonPressed()
or buttonReleased()
methods are called you have access to two parameters: a reference to the ControlButton that generated this event and timestamp for the event.
To add this functionality to the BlockFinder example project, add ControlButton::Listener as a base class to the BlockFinder class and override the buttonPressed()
and buttonReleased()
functions as follows:
Then in the topologyChanged()
callback, add the BlockFinder class as a listener to all the buttons on connected Blocks in the current topology to receive button pressed and button released callbacks as shown below:
If you run the application now and connect a Lightpad or Control Block, you should see text in the logger whenever buttons are pressed or released.
You can also find multiple examples of control button listeners in the Example JUCE Applications pages.
Learn more about other Block methods from the following pages: