mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-24 01:54:22 +00:00
BLOCKS: Make sure midi connection listener is refreshed after revalidating a block
This commit is contained in:
parent
ac8c1a11fb
commit
d2968c6e3f
1 changed files with 51 additions and 8 deletions
|
|
@ -1460,12 +1460,7 @@ struct PhysicalTopologySource::Internal
|
|||
if (modelData.numLEDRowLEDs > 0)
|
||||
ledRow.reset (new LEDRowImplementation (*this));
|
||||
|
||||
listenerToMidiConnection = dynamic_cast<MIDIDeviceConnection*> (detector.getDeviceConnectionFor (*this));
|
||||
|
||||
if (listenerToMidiConnection != nullptr)
|
||||
listenerToMidiConnection->addListener (this);
|
||||
|
||||
config.setDeviceComms (listenerToMidiConnection);
|
||||
updateMidiConnectionListener();
|
||||
}
|
||||
|
||||
~BlockImplementation()
|
||||
|
|
@ -1480,6 +1475,13 @@ struct PhysicalTopologySource::Internal
|
|||
void invalidate()
|
||||
{
|
||||
isStillConnected = false;
|
||||
|
||||
if (auto surface = dynamic_cast<TouchSurfaceImplementation*> (touchSurface.get()))
|
||||
surface->disableTouchSurface();
|
||||
|
||||
for (auto* b : controlButtons)
|
||||
if (auto controlButton = dynamic_cast<ControlButtonImplementation*> (b))
|
||||
controlButton->disableControlButton();
|
||||
}
|
||||
|
||||
void revalidate (BlocksProtocol::VersionNumber newVersion, BlocksProtocol::BlockName newName, bool master)
|
||||
|
|
@ -1488,6 +1490,15 @@ struct PhysicalTopologySource::Internal
|
|||
name = getNameString (newName);
|
||||
isMaster = master;
|
||||
isStillConnected = true;
|
||||
|
||||
if (auto surface = dynamic_cast<TouchSurfaceImplementation*> (touchSurface.get()))
|
||||
surface->activateTouchSurface();
|
||||
|
||||
for (auto* b : controlButtons)
|
||||
if (auto controlButton = dynamic_cast<ControlButtonImplementation*> (b))
|
||||
controlButton->activateControlButton();
|
||||
|
||||
updateMidiConnectionListener();
|
||||
}
|
||||
|
||||
void setToMaster (bool shouldBeMaster)
|
||||
|
|
@ -1495,6 +1506,16 @@ struct PhysicalTopologySource::Internal
|
|||
isMaster = shouldBeMaster;
|
||||
}
|
||||
|
||||
void updateMidiConnectionListener()
|
||||
{
|
||||
listenerToMidiConnection = dynamic_cast<MIDIDeviceConnection*> (detector.getDeviceConnectionFor (*this));
|
||||
|
||||
if (listenerToMidiConnection != nullptr)
|
||||
listenerToMidiConnection->addListener (this);
|
||||
|
||||
config.setDeviceComms (listenerToMidiConnection);
|
||||
}
|
||||
|
||||
Type getType() const override { return modelData.apiType; }
|
||||
juce::String getDeviceDescription() const override { return modelData.description; }
|
||||
int getWidth() const override { return modelData.widthUnits; }
|
||||
|
|
@ -2224,6 +2245,16 @@ struct PhysicalTopologySource::Internal
|
|||
private juce::Timer
|
||||
{
|
||||
TouchSurfaceImplementation (BlockImplementation& b) : TouchSurface (b), blockImpl (b)
|
||||
{
|
||||
activateTouchSurface();
|
||||
}
|
||||
|
||||
~TouchSurfaceImplementation()
|
||||
{
|
||||
disableTouchSurface();
|
||||
}
|
||||
|
||||
void activateTouchSurface()
|
||||
{
|
||||
if (auto det = Detector::getFrom (block))
|
||||
det->activeTouchSurfaces.add (this);
|
||||
|
|
@ -2231,8 +2262,10 @@ struct PhysicalTopologySource::Internal
|
|||
startTimer (500);
|
||||
}
|
||||
|
||||
~TouchSurfaceImplementation()
|
||||
void disableTouchSurface()
|
||||
{
|
||||
stopTimer();
|
||||
|
||||
if (auto det = Detector::getFrom (block))
|
||||
det->activeTouchSurfaces.removeFirstMatchingValue (this);
|
||||
}
|
||||
|
|
@ -2337,12 +2370,22 @@ struct PhysicalTopologySource::Internal
|
|||
{
|
||||
ControlButtonImplementation (BlockImplementation& b, int index, BlocksProtocol::BlockDataSheet::ButtonInfo info)
|
||||
: ControlButton (b), blockImpl (b), buttonInfo (info), buttonIndex (index)
|
||||
{
|
||||
activateControlButton();
|
||||
}
|
||||
|
||||
~ControlButtonImplementation()
|
||||
{
|
||||
disableControlButton();
|
||||
}
|
||||
|
||||
void activateControlButton()
|
||||
{
|
||||
if (auto det = Detector::getFrom (block))
|
||||
det->activeControlButtons.add (this);
|
||||
}
|
||||
|
||||
~ControlButtonImplementation()
|
||||
void disableControlButton()
|
||||
{
|
||||
if (auto det = Detector::getFrom (block))
|
||||
det->activeControlButtons.removeFirstMatchingValue (this);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue