improved presentation of audio/video options screen

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3406 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
auria 2009-04-20 15:27:57 +00:00
parent 546816d2d4
commit ccefa05789
6 changed files with 63 additions and 30 deletions

View File

@ -8,11 +8,7 @@
<icon-button id="controls" width="128" height="128" icon="gui/options_input.png" text="Controls"/> <icon-button id="controls" width="128" height="128" icon="gui/options_input.png" text="Controls"/>
</ribbon> </ribbon>
<spacer proportion="1" width="10" proportion="1"/> <spacer height="25" width="10"/>
<label align="center" text="Audio/Video"/>
<spacer proportion="1" width="10" proportion="1"/>
<div width="75%" height="40" layout="horizontal-row" > <div width="75%" height="40" layout="horizontal-row" >
<label proportion="2" height="100%" text="Music"/> <label proportion="2" height="100%" text="Music"/>
@ -25,11 +21,11 @@
<gauge id="music_volume" proportion="1" height="100%"/> <gauge id="music_volume" proportion="1" height="100%"/>
</div> </div>
<spacer proportion="1" width="10" proportion="1"/> <spacer height="25" width="10"/>
<div width="75%" height="40" layout="horizontal-row" > <div width="75%" height="40" layout="horizontal-row" >
<label proportion="2" height="100%" text="Sound Effects"/> <label proportion="2" height="100%" text="Sound Effects"/>
<checkbox id="sfx_enabled" width="40" icon="gui/glasscheckbox.png" height="40"/> <checkbox id="sfx_enabled" width="40" height="40"/>
<spacer width="20" height="100%" /> <spacer width="20" height="100%" />
<label proportion="1" height="100%" text="Enabled"/> <label proportion="1" height="100%" text="Enabled"/>
</div> </div>
@ -39,18 +35,20 @@
</div> </div>
<spacer proportion="2" width="10" proportion="1"/> <spacer height="50" width="10"/>
<label align="center" text="Video"/>
<spacer proportion="1" width="10" proportion="1"/> <div width="75%" height="40" layout="horizontal-row" >
<label proportion="2" height="100%" text="Video"/>
<checkbox id="fullscreen" width="40" height="40"/>
<spacer width="20" height="100%" />
<label proportion="1" height="100%" text="Fullscreen"/>
</div>
<ribbon_grid id="resolutions" proportion="4" text="all" width="100%" square_items="false" align="center" child_width="128" child_height="128" />
<!-- <!--
<ribbon_grid id="resolutions" proportion="4" width="100%" square_items="false" align="center" child_width="128" child_height="128" /> <ribbon id="resolutions" proportion="2" width="100%" align="center">
-->
<ribbon id="resolutions" height="20%" width="100%" align="center">
<icon-button id="1280x1024" text="1280x1024" icon="gui/screen54.png"width="128" height="128" /> <icon-button id="1280x1024" text="1280x1024" icon="gui/screen54.png"width="128" height="128" />
<icon-button id="800x600" text="800x600" icon="gui/screen43.png"width="128" height="128" /> <icon-button id="800x600" text="800x600" icon="gui/screen43.png"width="128" height="128" />
@ -64,5 +62,6 @@
<icon-button id="1920x1200" text="1920x1200" icon="gui/screen1610.png"width="128" height="128" /> <icon-button id="1920x1200" text="1920x1200" icon="gui/screen1610.png"width="128" height="128" />
<icon-button id="1280x768" text="1280x768" icon="gui/screen53.png"width="128" height="128" /> <icon-button id="1280x768" text="1280x768" icon="gui/screen53.png"width="128" height="128" />
</ribbon> </ribbon>
-->
</div> </div>

View File

@ -11,7 +11,7 @@
<label width="100%" height="25" text="All Tracks" align="center" text_align="center" /> <label width="100%" height="25" text="All Tracks" align="center" text_align="center" />
<ribbon_grid id="tracks" proportion="1" width="100%" square_items="true" text="-" align="center" child_width="160" child_height="120" /> <ribbon_grid id="tracks" proportion="1" width="100%" square_items="true" text="bottom" align="center" child_width="160" child_height="120" />
<tabs width="100%" height="25" id="trackgroups"> <tabs width="100%" height="25" id="trackgroups">
<button text="Standard"/> <button text="Standard"/>

View File

@ -55,7 +55,9 @@ affect the type of highlighting used). Supports an optional label at the bottom
PROP_CHILD_WIDTH and PROP_CHILD_HEIGHT are mandatory (so at least aspect ratio of elements that will later be added isk nown) PROP_CHILD_WIDTH and PROP_CHILD_HEIGHT are mandatory (so at least aspect ratio of elements that will later be added isk nown)
An interesting aspect of PROP_CHILD_WIDTH and PROP_CHILD_HEIGHT is that you can use them to show textures to any aspect ratio An interesting aspect of PROP_CHILD_WIDTH and PROP_CHILD_HEIGHT is that you can use them to show textures to any aspect ratio
you want (so you can e.g. save textures to a power-of-two size like 256x256, but then show it in 4:3 ratio). you want (so you can e.g. save textures to a power-of-two size like 256x256, but then show it in 4:3 ratio).
Gives a special meaning to the text parameter. A value of "bottom" means to display the name of the selected icon at the bottom.
A value of "all" means that each icon shall have its name under it.
WTYPE_MODEL_VIEW "model" WTYPE_MODEL_VIEW "model"
Displays a model. Currently incomplete. Contents must be set programmatically. Displays a model. Currently incomplete. Contents must be set programmatically.
@ -76,7 +78,8 @@ used in events callbacks to determine what action occurred. Can be omitted
on components that do not trigger events (e.g. labels) on components that do not trigger events (e.g. labels)
PROP_TEXT "text" PROP_TEXT "text"
gives text (a label) to the widget where supported. gives text (a label) to the widget where supported. Ribbon-grids give a special meaning
to this parameter, see ribbon-grid docs above.
PROP_ICON "icon" PROP_ICON "icon"
give an icon to the widget. Property contents is the path to the file, relative give an icon to the widget. Property contents is the path to the file, relative

View File

@ -67,7 +67,6 @@ namespace StateManager
static bool karts_menu_inited = false; static bool karts_menu_inited = false;
if(name == "init" /*&& !karts_menu_inited*/) if(name == "init" /*&& !karts_menu_inited*/)
{ {
std::cout << "filling kart menu..." << std::endl;
GUIEngine::RibbonGridWidget* w = dynamic_cast<GUIEngine::RibbonGridWidget*>(GUIEngine::getCurrentScreen()->getWidget("karts")); GUIEngine::RibbonGridWidget* w = dynamic_cast<GUIEngine::RibbonGridWidget*>(GUIEngine::getCurrentScreen()->getWidget("karts"));
assert( w != NULL ); assert( w != NULL );
@ -105,9 +104,6 @@ namespace StateManager
//test->setMaterialFlag(EMF_LIGHTING , false); //test->setMaterialFlag(EMF_LIGHTING , false);
w3->setModel(test); w3->setModel(test);
//karts_menu_inited = true;
std::cout << "filled kart menu... done" << std::endl;
} }
// TODO - actually check which kart was selected // TODO - actually check which kart was selected
else if(name == "karts") else if(name == "karts")
@ -303,7 +299,7 @@ namespace StateManager
sfx->setState( user_config->doSFX() ); sfx->setState( user_config->doSFX() );
music->setState( user_config->doMusic() ); music->setState( user_config->doMusic() );
/*
{ {
GUIEngine::RibbonGridWidget* res = dynamic_cast<GUIEngine::RibbonGridWidget*> GUIEngine::RibbonGridWidget* res = dynamic_cast<GUIEngine::RibbonGridWidget*>
(GUIEngine::getCurrentScreen()->getWidget("resolutions")); (GUIEngine::getCurrentScreen()->getWidget("resolutions"));
@ -327,7 +323,7 @@ namespace StateManager
resolutions_inited = true; resolutions_inited = true;
} }
res->updateItemDisplay(); res->updateItemDisplay();
}*/ }
} }
} }
// -- options // -- options

View File

@ -319,6 +319,7 @@ void GaugeWidget::setValue(const float val)
IconButtonWidget::IconButtonWidget(const bool clickable) IconButtonWidget::IconButtonWidget(const bool clickable)
{ {
IconButtonWidget::clickable = clickable; IconButtonWidget::clickable = clickable;
label = NULL;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void IconButtonWidget::add() void IconButtonWidget::add()
@ -360,7 +361,7 @@ void IconButtonWidget::add()
if(message.size() > 0) if(message.size() > 0)
{ {
widget_size += position2d<s32>(0, widget_size.getHeight()); widget_size += position2d<s32>(0, widget_size.getHeight());
IGUIStaticText* label = GUIEngine::getGUIEnv()->addStaticText(message.c_str(), widget_size); label = GUIEngine::getGUIEnv()->addStaticText(message.c_str(), widget_size);
label->setTextAlignment(EGUIA_CENTER, EGUIA_UPPERLEFT); label->setTextAlignment(EGUIA_CENTER, EGUIA_UPPERLEFT);
label->setTabStop(false); label->setTabStop(false);
} }
@ -390,6 +391,17 @@ void IconButtonWidget::add()
*/ */
} }
void IconButtonWidget::setLabel(std::string new_label)
{
std::cout << "trying to set label " << new_label.c_str() << std::endl;
if(label == NULL) return;
std::cout << "set label " << new_label.c_str() << std::endl;
label->setText( stringw(new_label.c_str()).c_str() );
}
#if 0 #if 0
#pragma mark - #pragma mark -
#pragma mark Ribbon #pragma mark Ribbon
@ -502,6 +514,9 @@ bool RibbonWidget::transmitEvent(Widget* w, std::string& originator)
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void RibbonWidget::add() void RibbonWidget::add()
{ {
m_labels.clearWithoutDeleting();
rect<s32> widget_size = rect<s32>(x, y, x + w, y + h); rect<s32> widget_size = rect<s32>(x, y, x + w, y + h);
IGUIButton * btn = GUIEngine::getGUIEnv()->addButton(widget_size, NULL, ++id_counter, L""); IGUIButton * btn = GUIEngine::getGUIEnv()->addButton(widget_size, NULL, ++id_counter, L"");
@ -578,7 +593,7 @@ void RibbonWidget::add()
// ---- label part // ---- label part
if(has_label) if(has_label)
{ {
subsize = rect<s32>(widget_x - one_button_space/2, subsize = rect<s32>(widget_x - one_button_space/2,
(int)((button_y + m_children[i].h)*zoom) + 5 /* leave 5 pixels between button and label */, (int)((button_y + m_children[i].h)*zoom) + 5 /* leave 5 pixels between button and label */,
widget_x + (int)(one_button_space/2.0f), h); widget_x + (int)(one_button_space/2.0f), h);
@ -588,6 +603,9 @@ void RibbonWidget::add()
label->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER); label->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER);
label->setTabStop(false); label->setTabStop(false);
label->setNotClipped(true); label->setNotClipped(true);
m_labels.push_back(label);
const int final_y = subsize.getHeight() + label->getTextHeight(); const int final_y = subsize.getHeight() + label->getTextHeight();
if(final_y > biggest_y) biggest_y = final_y; if(final_y > biggest_y) biggest_y = final_y;
} }
@ -610,6 +628,15 @@ void RibbonWidget::add()
updateSelection(); updateSelection();
} }
void RibbonWidget::setLabel(const int id, std::string new_name)
{
if(m_labels.size() == 0) return; // ignore this call for ribbons without labels
assert(id >= 0);
assert(id < m_labels.size());
m_labels[id].setText( stringw(new_name.c_str()).c_str() );
}
#if 0 #if 0
#pragma mark - #pragma mark -
#pragma mark Spinner #pragma mark Spinner
@ -779,7 +806,7 @@ void RibbonGridWidget::add()
m_children.clearAndDeleteAll(); m_children.clearAndDeleteAll();
m_rows.clearWithoutDeleting(); m_rows.clearWithoutDeleting();
m_has_label = m_properties[PROP_TEXT].size() > 0; m_has_label = m_properties[PROP_TEXT] == "bottom";
const int label_height = m_has_label ? 25 : 0; const int label_height = m_has_label ? 25 : 0;
int child_width, child_height; int child_width, child_height;
@ -825,7 +852,10 @@ void RibbonGridWidget::add()
// set size to get proper ratio (as most textures are saved scaled down to 256x256) // set size to get proper ratio (as most textures are saved scaled down to 256x256)
icon->m_properties[PROP_WIDTH] = m_properties[PROP_CHILD_WIDTH]; icon->m_properties[PROP_WIDTH] = m_properties[PROP_CHILD_WIDTH];
icon->m_properties[PROP_HEIGHT]= m_properties[PROP_CHILD_HEIGHT]; icon->m_properties[PROP_HEIGHT] = m_properties[PROP_CHILD_HEIGHT];
if(m_properties[PROP_TEXT] == "all") icon->m_properties[PROP_TEXT] = "hello";
// std::cout << "ribbon text = " << m_properties[PROP_TEXT].c_str() << std::endl;
icon->m_type = WTYPE_ICON_BUTTON; icon->m_type = WTYPE_ICON_BUTTON;
ribbon->m_children.push_back( icon ); ribbon->m_children.push_back( icon );
@ -1022,7 +1052,7 @@ void RibbonGridWidget::updateItemDisplay()
for(int n=0; n<row_amount; n++) for(int n=0; n<row_amount; n++)
{ {
Widget& row = m_rows[n]; RibbonWidget& row = m_rows[n];
for(int i=0; i<m_col_amount; i++) for(int i=0; i<m_col_amount; i++)
{ {
@ -1039,7 +1069,7 @@ void RibbonGridWidget::updateItemDisplay()
button->setImage( GUIEngine::getDriver()->getTexture( track_sshot.c_str() )); button->setImage( GUIEngine::getDriver()->getTexture( track_sshot.c_str() ));
button->setPressedImage( GUIEngine::getDriver()->getTexture( track_sshot.c_str()) ); button->setPressedImage( GUIEngine::getDriver()->getTexture( track_sshot.c_str()) );
icon->m_properties[PROP_ID] = m_items[trackid].m_code_name; icon->m_properties[PROP_ID] = m_items[trackid].m_code_name;
// trackid++; row.setLabel(i, m_items[trackid].m_user_name);
} }
else else
{ {

View File

@ -202,9 +202,11 @@ namespace GUIEngine
{ {
bool clickable; bool clickable;
void add(); void add();
IGUIStaticText* label;
public: public:
virtual ~IconButtonWidget() {} virtual ~IconButtonWidget() {}
IconButtonWidget(const bool clickable=true); IconButtonWidget(const bool clickable=true);
void setLabel(std::string new_label);
}; };
enum RibbonType enum RibbonType
@ -231,6 +233,8 @@ namespace GUIEngine
void updateSelection(); void updateSelection();
bool transmitEvent(Widget* w, std::string& originator); bool transmitEvent(Widget* w, std::string& originator);
void focused(); void focused();
ptr_vector<IGUIStaticText, REF> m_labels;
public: public:
virtual ~RibbonWidget() {} virtual ~RibbonWidget() {}
@ -240,6 +244,7 @@ namespace GUIEngine
RibbonType getRibbonType() const { return m_ribbon_type; } RibbonType getRibbonType() const { return m_ribbon_type; }
const std::string& getSelectionName() { return m_children[m_selection].m_properties[PROP_ID]; } const std::string& getSelectionName() { return m_children[m_selection].m_properties[PROP_ID]; }
void select(std::string item); void select(std::string item);
void setLabel(const int id, std::string new_name);
RibbonWidget(const RibbonType type=RIBBON_COMBO); RibbonWidget(const RibbonType type=RIBBON_COMBO);
}; };