From 9451a488a1674254b6d1c9b385bc5877a1da46a3 Mon Sep 17 00:00:00 2001 From: xapantu Date: Sat, 16 Oct 2010 13:05:12 +0000 Subject: [PATCH] Fix a crash when the kart which is focused in the kart selection screen is a deleted addon, it is a bit dirty, maybe there is a cleaner way ? git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@6289 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- .../widgets/dynamic_ribbon_widget.cpp | 61 ++++++++++--------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/src/guiengine/widgets/dynamic_ribbon_widget.cpp b/src/guiengine/widgets/dynamic_ribbon_widget.cpp index cbdd0f91a..b7cb663e4 100644 --- a/src/guiengine/widgets/dynamic_ribbon_widget.cpp +++ b/src/guiengine/widgets/dynamic_ribbon_widget.cpp @@ -871,35 +871,38 @@ void DynamicRibbonWidget::updateItemDisplay() { IconButtonWidget* icon = dynamic_cast(&row.m_children[i]); assert(icon != NULL); - - icon_id = item_placement[n][i]; - - if (icon_id < item_amount && icon_id != -1) - { - std::string item_icon = (m_items[icon_id].m_animated ? - m_items[icon_id].m_all_images[0] : - m_items[icon_id].m_sshot_file); - icon->setImage( item_icon.c_str(), m_items[icon_id].m_image_path_type ); - - icon->m_properties[PROP_ID] = m_items[icon_id].m_code_name; - icon->setLabel(m_items[icon_id].m_user_name); - icon->m_text = m_items[icon_id].m_user_name; - icon->m_badges = m_items[icon_id].m_badges; - - //std::cout << " item " << i << " is " << m_items[icon_id].m_code_name << "\n"; - - //std::wcout << L"Setting widget text '" << icon->m_text.c_str() << L"'\n"; - - // if the ribbon has no "ribbon-wide" label, call will do nothing - row.setLabel(i, m_items[icon_id].m_user_name); - } - else - { - icon->setImage( "textures/transparence.png", IconButtonWidget::ICON_PATH_TYPE_RELATIVE ); - icon->resetAllBadges(); - icon->m_properties[PROP_ID] = RibbonWidget::NO_ITEM_ID; - //std::cout << " item " << i << " is a FILLER\n"; - } + + //FIXME : it is a bit hackish + if(i < item_placement[n].size()) + { + icon_id = item_placement[n][i]; + if (icon_id < item_amount && icon_id != -1) + { + std::string item_icon = (m_items[icon_id].m_animated ? + m_items[icon_id].m_all_images[0] : + m_items[icon_id].m_sshot_file); + icon->setImage( item_icon.c_str(), m_items[icon_id].m_image_path_type ); + + icon->m_properties[PROP_ID] = m_items[icon_id].m_code_name; + icon->setLabel(m_items[icon_id].m_user_name); + icon->m_text = m_items[icon_id].m_user_name; + icon->m_badges = m_items[icon_id].m_badges; + + //std::cout << " item " << i << " is " << m_items[icon_id].m_code_name << "\n"; + + //std::wcout << L"Setting widget text '" << icon->m_text.c_str() << L"'\n"; + + // if the ribbon has no "ribbon-wide" label, call will do nothing + row.setLabel(i, m_items[icon_id].m_user_name); + } + else + { + icon->setImage( "textures/transparence.png", IconButtonWidget::ICON_PATH_TYPE_RELATIVE ); + icon->resetAllBadges(); + icon->m_properties[PROP_ID] = RibbonWidget::NO_ITEM_ID; + //std::cout << " item " << i << " is a FILLER\n"; + } + } } // next column } // next row }