[wxWidgets] wxToolBar->ClearTools(); .. Größe bleibt erhalten



  • Hi,

    da sich die Tools meiner ToolBar verändern sollte ich sie zur Laufzeit neu aufbauen können.

    Ich mache das momentan wie folgt

    bonusToolBar->ClearTools();
    

    Allerdings bleibt die ToolBar in der Größe welche sie nach dem erstmaligen befüllen hatte. Prinzipiell unterscheiden sich das erstmalige befüllen vom wiederbefüllen wie folgt

    bool first_created = false;
    if(!bonusToolBar){
        first_created = true;
        bonusToolBar = new wxToolBar(m_frame, wxID_ANY,	wxDefaultPosition, wxDefaultSize, wxNO_BORDER|wxHORIZONTAL|wxTB_FLAT);
    } else 
        bonusToolBar->ClearTools();	
    
    ...
        int entry = ::wxNewId();
        bonusToolBar->AddTool(entry, g_wxBitmap, wxT(indicator.c_str()));
        m_frame->connect(...);
        bonusToolBar->realize();
    
    if(first_created)
        wxAuiManager->AddPane( bonusToolBar, wxAuiPaneInfo().Name(wxT("tb1")).Caption(wxT("Bonuses")).ToolbarPane().Top().LeftDockable(false).RightDockable(false));
    

    Ich habe versucht auf die ToolBar verschiedene Operationen anzuwenden. Fit(); Sämtliche SetSize, SetMinSize(...); Geschichten etc.

    Auch wenn die ToolBar floated kann ich Sie nicht mit der Maus unterhalb die Grenze verkleiner welche Sie beim erstmaligen befüllen hatte.

    Kann mir jemand nen Rat geben wie ich da weiter vorgehen sollte? Ich steck hier fest.

    P.S: Ich verwende wxWidgets 2.8.8 und Windows XP. Hab gelesen unter 2.8.9 gibts die wxAuiToolBar, wäre es vielleicht sinnvoll deswegen umzusteigen?



  • Mein Fehler scheint wohl darin zu liegen dass die gesamte chose noch über den Manager läuft.

    Habs nun mittlerweile geschafft zumindest irgendeine veränderung hinzubekommen.

    Ca. so

    wxSize s = terrainToolBar->GetSize();
           m_manager->GetPane(bonusToolBar).BestSize(s);
           m_manager->Update();
    

    Zugegeben, dass stimmt vorne und hinten nicht aber es is ein Ansatz. Vielleicht hilft er mal jemanden.

    Bin mir jetzt net so sicher ob das nen Bug is oder ob ich noch nicht richtig geschnallt habe wie das läufst.



  • Versuch mal über wxToolBar::RemoveTool() oder wxToolBar::DeleteTool() einzelne Tools zu entfernen.
    Damit sollte es gehen afaik. Bin auf Arbyte, kann das leider nicht selbst testen hier, da ich hier leider kein COmpiler habe... was mal gar nicht so schlecht wäre, dann wär das lästige warten auf den nächsten Anruf nicht so öde 😛
    rya.



  • Jau ich hab es auch ueber einzelne Aufrufe von DeleteTool probiert. Mit obrigem Code schaff ich es z.b. das angeklickte tool zu entfernen und die Size korrekt anzupassen. Allerdings geht es beim wiederbefüllen dann trotzdem nicht richtig.

    Müsste da wirklich mal nen kleines Szenario baun was nur den Fehler produziert.


Anmelden zum Antworten