BTW - You shouldn’t use any modal windows in a plug-in. Rather create a new Component which covers your complete plugin UI then put a custom Component on that.
I use something like:
class CCoverComponent : public Component
{
public:
CCoverComponent();
void paint (Graphics&) override;
void setChild (Component* pChild);
private:
Component* m_pChild;
////////////////////////////////////////////////////////////
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CCoverComponent)
};
CCoverComponent:: CCoverComponent() : m_pChild (nullptr)
{
}
void CCoverComponent::paint (Graphics& g)
{
g.setColour (Colours::darkgrey);
g.setOpacity (0.50f);
g.fillAll();
/////////////////////////
if (m_pChild != nullptr)
{
DropShadow ds;
ds.colour = Colours::white;
Rectangle<int> workArea;
workArea.setWidth (m_pChild->getWidth() + 6);
workArea.setHeight (m_pChild->getHeight() + 6);
workArea.setCentre (getLocalBounds().getCentre());
ds.drawForRectangle (g, workArea);
}
}
void CCoverComponent::setChild (Component* pChild)
{
m_pChild = pChild;
repaint();
}
I then use it like:
// Init these to nullptr in your class ctor
ScopedPointer< CCoverComponent > m_pCover;
ScopedPointer<COptionsDlg> m_pOptionsDlg; // My dialog
void CParentComp::coverApp()
{
m_pCover = new CCoverComponent();
m_pCover->setBounds (getLocalBounds());
addAndMakeVisible (m_pCover);
}
void CParentComp::uncoverApp()
{
m_pCover = nullptr;
}
void CParentComp::showOptionsDlg()
{
coverApp();
m_pOptionsDlg = new COptionsDlg (this);
Point<int> centerPnt = getLocalBounds().getCentre();
m_pOptionsDlg->setTopLeftPosition (centerPnt.x - m_pOptionsDlg->getWidth() / 2, centerPnt.y - m_pOptionsDlg->getHeight() / 2);
addAndMakeVisible (m_pOptionsDlg);
m_pCover->setChild (m_pOptionsDlg);
}
void CParentComp::closeOptionsDlg (bool bOkay)
{
m_pOptionsDlg = nullptr;
uncoverApp();
if (bOkay)
{
// Do something...
}
}
And in my dialog component class:
void COptionsDlg::buttonClicked (Button* buttonThatWasClicked)
{
:
if (buttonThatWasClicked == &m_OkayButton)
{
m_pParent->closeOptionsDlg (true);
}
if (buttonThatWasClicked == &m_CancelButton)
{
m_pParent->closeOptionsDlg (false);
}
}
Rail
