Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Suppression de widget sfgui  (Lu 1551 fois)

0 Membres et 1 Invité sur ce sujet

nicooomg

  • Jr. Member
  • **
  • Messages: 66
    • Voir le profil
Suppression de widget sfgui
« le: Juin 14, 2012, 05:55:09 pm »
Bonjour,

Pas sur que ce soit le bon endroit, je tente ma chance quand meme!
Apres avoir fait une petite boite alert (une window, un bouton et un label), j'essaye de la detruire pour liberer la memoire.

J'utilise SFML 2.0 & SFGUI.

Le constructeur, pour voir un peu la bete:
AlertBox::AlertBox(const std::string& errortitle, const std::string& errortext) :
    display(true)
{
    // The window
    dialog = sfg::Window::Create(sfg::Window::Style::TITLEBAR);
    dialog->SetTitle(errortitle);


    // The layouter
    sfg::Box::Ptr box( sfg::Box::Create( sfg::Box::VERTICAL, 5.0f ) );

    // The elements
    text = sfg::Label::Create(errortext);
    btn = sfg::Button::Create("Ok");
    btn->GetSignal(sfg::Widget::OnLeftClick).Connect(&AlertBox::Destroy, this);

    box->Pack(text);
    box->Pack(btn, false);
    dialog->Add(box);
}

La fonction Destroy ne change que la variable membre "display" à false.

Dans ma boucle graphique, j'ai ceci:
        // Boucle sur les boites alert
        for(auto itr = m_window->GetPerennials()->List().begin(); itr != m_window->GetPerennials()->List().end(); ++itr)
        {
                // Si l'objet n'a jamais été dessiné, on l'ajoute au sfg::Desktop
            if(itr->second->Display() && !itr->second->Drawn())
            {
                // La fonction AlertBox::GetDrawable retourne un sfg::Window::Ptr
                desktop.Add(itr->second->GetDrawable());
            }
            else if(!itr->second->Display())
            { // Ceci est quand on vient d'appuyer sur le bouton, et que la fonction Destroy a ete appellee
                        // On supprime le sfg::Window de sfg::Desktop
                desktop.Remove(itr->second->GetDrawable());
            }
        }
        m_window->Clear(); // sf::RenderWindow::Clear();
        desktop.Update( clock.restart().asSeconds() );
        m_window->RenderGUI(sfgui); // sfg::Display(m_window);
        m_window->Render(); // sf::RenderWindow::Display();
 

Et Quand j'appuie sur le bouton, he bien le sfg::Window ne disparait pas. Il reste sur l'ecran ! Neanmoins je ne peux plus interagir.
Il doit y avoir un probleme au niveau de Clear, ou Update.

Quelqu'un saurais me gider? :)
merci, nico