How to highlight/select the text in a TextEditor in an AlertWindow?

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

1 Like