Search code examples
c++scrollbarwxwidgetsdynamically-generated

wxScrolledWindow add and remove elements


I have a wxScrolledWindow object filled with elements (pictures) (every element add with the class ThumbNail which uses dc.paint). I would like to dynamically change the elements with new once (not the same number) (change of folder by the user).

How can I empty all the items in wxScrolledWindow object and put new once back in? And then reset the scrollbars.

    _ScrolThumbs = new wxScrolledWindow(_pMainPanel);

        wxGridSizer *m_swSizer = new wxGridSizer(1,1,0);
        _ScrolThumbs->SetSizer(m_swSizer);  // Sets the window to have the given layout sizer.
std::vector<ThumbNail*> _Thumbs;
        for(int i=0;i < FilePr::Instance()->GetNumThumbs() ;i++)
        {
            _Thumbs.push_back(new ThumbNail(_ScrolThumbs, PicName[i]));
            _ScrolThumbs ->GetSizer()->Add (_Thumbs[i], 1, wxALL|wxALIGN_CENTER_VERTICAL, 5);
        }

Then I tried to do this (when a button is hit):

    wxWindowList& lst = _ScrolThumbs->GetChildren();
    //if (!lst.empty())
    std::cout << lst.size() << '\n';
    while(!lst.empty()) //for(int i = 0; i < lst.size(); i++) //lst.size()
    {
        wxWindow *wnd = lst.back();
        wnd->Destroy();
    }

But putting new elements back in, like I did above does not work...

Any idea how to do this or were to find help on the web? Thanks!


Solution

  • _ScrolThumbs->GetSizer()->Clear(true);
    // or
    _ScrolThumbs->DestroyChildren();