Fixed resolution change messing up kart selection screen

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@4378 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
auria 2009-12-30 21:28:59 +00:00
parent 27decfcd2a
commit f58bc8708b
5 changed files with 27 additions and 7 deletions

View File

@ -250,7 +250,7 @@ void IrrDriver::changeResolution()
attachment_manager -> removeTextures();
projectile_manager -> removeTextures();
item_manager -> removeTextures();
kart_properties_manager -> removeTextures();
kart_properties_manager -> unloadAllKarts();
powerup_manager -> removeTextures();
GUIEngine::clear();
GUIEngine::cleanUp();

View File

@ -161,7 +161,8 @@ namespace GUIEngine
'updateItemDisplay' to update the display. */
void clearItems();
/** Register a listener to be notified of selection changes within the ribbon */
/** Register a listener to be notified of selection changes within the ribbon.
* The ribbon takes ownership of this listener and will delete it. */
void registerHoverListener(DynamicRibbonHoverListener* listener);
/** Called when right key is pressed */

View File

@ -68,7 +68,7 @@ void KartPropertiesManager::addKartSearchDir(const std::string &s)
} // addKartSearchDir
//-----------------------------------------------------------------------------
void KartPropertiesManager::removeTextures()
void KartPropertiesManager::unloadAllKarts()
{
for(KartPropertiesVector::iterator i = m_karts_properties.begin();
i != m_karts_properties.end(); ++i)
@ -76,6 +76,11 @@ void KartPropertiesManager::removeTextures()
delete *i;
}
m_karts_properties.clear();
m_selected_karts.clear();
m_kart_available.clear();
m_groups.clear();
m_all_groups.clear();
m_kart_search_path.clear();
} // removeTextures
//-----------------------------------------------------------------------------
@ -145,8 +150,8 @@ bool KartPropertiesManager::loadKart(const std::string &dir)
//-----------------------------------------------------------------------------
const int KartPropertiesManager::getKartId(const std::string &ident) const
{
std::cout << "======\n";
std::cout << "Searching for kart " << ident.c_str() << std::endl;
//std::cout << "======\n";
//std::cout << "Searching for kart " << ident.c_str() << std::endl;
for(KartPropertiesVector::const_iterator i = m_karts_properties.begin();
i != m_karts_properties.end(); ++i)

View File

@ -60,7 +60,10 @@ public:
const KartProperties* getKart (const std::string &ident) const;
const int getKartId (const std::string &ident) const;
int getKartByGroup (const std::string& group, int i) const;
void loadAllKarts ();
void unloadAllKarts ();
const unsigned int getNumberOfKarts () const {return (unsigned int)m_karts_properties.size();}
const std::vector<std::string>&
getAllGroups () const {return m_all_groups; }
@ -77,7 +80,6 @@ public:
void selectKartName(const std::string &kart_name);
bool testAndSetKart(int kartid);
std::vector<std::string> getRandomKartList(int count, RemoteKartInfoList& existing_karts);
void removeTextures ();
/** Returns all directories from which karts were loaded. */
const std::vector<std::string>* getAllKartDirs() const
{ return &m_all_kart_dirs; }

View File

@ -617,14 +617,25 @@ class KartHoverListener : public DynamicRibbonHoverListener
{
KartSelectionScreen* m_parent;
public:
int m_magic_number;
KartHoverListener(KartSelectionScreen* parent)
{
m_magic_number = 0xCAFEC001;
m_parent = parent;
}
virtual ~KartHoverListener()
{
assert(m_magic_number == 0xCAFEC001);
m_magic_number = 0xDEADBEEF;
}
void onSelectionChanged(DynamicRibbonWidget* theWidget, const std::string& selectionID,
const irr::core::stringw& selectionText, const int playerID)
{
assert(m_magic_number == 0xCAFEC001);
// Don't allow changing the selection after confirming it
if (m_parent->m_kart_widgets[playerID].isReady())
{
@ -689,8 +700,9 @@ void KartSelectionScreen::forgetWhatWasLoaded()
{
Screen::forgetWhatWasLoaded();
// this pointer is no more valid
// these pointers is no more valid (have been deleted along other widgets)
g_dispatcher = NULL;
karthoverListener = NULL;
}
// -----------------------------------------------------------------------------
// Return true if event was handled successfully