Kart and track groups tabs are now dynamically determined at runtime instead of being hardcoded

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@4579 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
auria 2010-01-31 18:52:24 +00:00
parent d9e77741a2
commit cd787f9085
5 changed files with 65 additions and 6 deletions

View File

@ -22,11 +22,15 @@
<ribbon_grid id="karts" proportion="1" square_items="true" width="100%" align="center"
child_width="80" child_height="80"/>
</box>
<!-- Groups will be added dynamically at runtime -->
<tabs width="100%" height="25" id="kartgroups">
<!--
<button id="standard" I18N="Kart group" text="Standard"/>
<button id="addons" I18N="Kart group" text="Add-Ons"/>
<button id="special" I18N="Kart group" text="Special"/>
<button id="all" I18N="Kart group" text="All"/>
-->
</tabs>
<spacer height="15" width="25"/>

View File

@ -21,11 +21,8 @@
<spacer width="20" height="13" />
</box>
<tabs width="100%" height="25" id="trackgroups">
<button id="standard" I18N="track group" text="Standard"/>
<button id="addons" I18N="track group" text="Add-Ons"/>
<button id="all" I18N="track group" text="All"/>
</tabs>
<!-- Populated dynamically at runtime -->
<tabs width="100%" height="25" id="trackgroups"> </tabs>
<spacer width="20" height="13" />

View File

@ -101,6 +101,7 @@ void RibbonWidget::add()
const int widget_x = one_button_space*(i+1) - one_button_space/2;
// ---- tab ribbons
if (getRibbonType() == RIBBON_TABS)
{
IGUIButton * subbtn = NULL;
@ -160,7 +161,7 @@ void RibbonWidget::add()
m_children[i].m_element = subbtn;
}
// ---- non-tabs ribbons
// ---- icon ribbons
else if (m_children[i].m_type == WTYPE_ICON_BUTTON)
{
// find how much space to keep for the label under the button.

View File

@ -697,6 +697,24 @@ KartHoverListener* karthoverListener = NULL;
KartSelectionScreen::KartSelectionScreen() : Screen("karts.stkgui")
{
g_dispatcher = new FocusDispatcher(this);
// Dynamically add tabs
// FIXME: it's not very well documented that RibbonWidgets can have dynamically generated contents
RibbonWidget* tabs = this->getWidget<RibbonWidget>("kartgroups");
assert( tabs != NULL );
tabs->m_children.clearAndDeleteAll();
const std::vector<std::string>& groups = kart_properties_manager->getAllGroups();
const int amount = groups.size();
for (int n=0; n<amount; n++)
{
ButtonWidget* item = new ButtonWidget();
item->m_text = groups[n].c_str(); // FIXME: i18n ?
item->m_properties[PROP_ID] = groups[n];
tabs->m_children.push_back(item);
}
}
// -----------------------------------------------------------------------------
void KartSelectionScreen::forgetWhatWasLoaded()

View File

@ -31,6 +31,23 @@ using namespace irr::video;
TracksScreen::TracksScreen() : Screen("tracks.stkgui")
{
// Dynamically add tabs
// FIXME: it's not very well documented that RibbonWidgets can have dynamically generated contents
RibbonWidget* tabs = this->getWidget<RibbonWidget>("trackgroups");
assert( tabs != NULL );
tabs->m_children.clearAndDeleteAll();
const std::vector<std::string>& groups = track_manager->getAllGroups();
const int amount = groups.size();
for (int n=0; n<amount; n++)
{
ButtonWidget* item = new ButtonWidget();
item->m_text = groups[n].c_str(); // FIXME: i18n ?
item->m_properties[PROP_ID] = groups[n];
tabs->m_children.push_back(item);
}
}
@ -79,6 +96,28 @@ void TracksScreen::init()
DynamicRibbonWidget* w = this->getWidget<DynamicRibbonWidget>("tracks");
assert( w != NULL );
RibbonWidget* tabs = this->getWidget<RibbonWidget>("trackgroups");
assert( tabs != NULL );
/*
tracks->m_children.clearAndDeleteAll();
ButtonWidget* item1 = new ButtonWidget();
item1->m_text = _("Standard");
item1->m_proeprties[PROP_ID] = "stdtracks";
tracks->m_children.push_back(item1);
ButtonWidget* item2 = new ButtonWidget();
item2->m_text = _("Add-Ons");
item2->m_proeprties[PROP_ID] = "addontracks";
tracks->m_children.push_back(item2);
*/
//tabs->clearItems();
//tabs->addItem( _("Standard"), "stdtracks", "" /* image */);
//tabs->addItem( _("Add-Ons"), "stdtracks", "" /* image */);
//tabs->addItem( _("Special"), "stdtracks", "" /* image */);
//tabs->updateItemDisplay();
// Re-build track list everytime (accounts for locking changes, etc.)
w->clearItems();