The GUI will now react to clicks, so you can navigate it somewhat. Note that the event callback function provided is mainly a test one; it should eventually be replaced with something better organized

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3267 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
auria
2009-03-16 17:27:05 +00:00
parent c3ad0b9bed
commit 87a726ff74
5 changed files with 92 additions and 7 deletions

View File

@@ -1,11 +1,95 @@
#include "gui/state_manager.hpp"
#include "gui/engine.hpp"
#include "gui/widget.hpp"
#include "gui/screen.hpp"
#include "sdldrv.hpp"
#include "graphics/irr_driver.hpp"
#include <vector>
namespace StateManager
{
void showTrackSelectionScreen()
{
GUIEngine::switchToScreen("tracks.stkgui");
GUIEngine::RibbonGridWidget* w = dynamic_cast<GUIEngine::RibbonGridWidget*>(GUIEngine::getCurrentScreen()->getWidget("tracks"));
assert( w != NULL );
// FIXME - should be called only once, not on every show?
w->addItem("Track 1","t1","track1.png");
w->addItem("Track 2","t2","track2.png");
w->addItem("Track 3","t3","track3.png");
w->addItem("Track 4","t4","track4.png");
w->addItem("Track 5","t5","track5.png");
w->addItem("Track 6","t6","track6.png");
w->addItem("Track 7","t7","track7.png");
w->addItem("Track 8","t8","track8.png");
w->updateItemDisplay();
}
void eventCallback(GUIEngine::Widget* widget, std::string& name)
{
std::cout << "event!! " << name.c_str() << std::endl;
if(name == "menu_toprow")
{
std::string selection = ((GUIEngine::RibbonWidget*)widget)->getSelectionName().c_str();
if(selection == "new") GUIEngine::switchToScreen("racesetup.stkgui");
if(selection == "challenges")
{
GUIEngine::switchToScreen("karts.stkgui");
GUIEngine::RibbonGridWidget* w = dynamic_cast<GUIEngine::RibbonGridWidget*>(GUIEngine::getCurrentScreen()->getWidget("karts"));
assert( w != NULL );
// FIXME - should be called only once, not on every show?
w->addItem("Gnu","k1","gnu.png");
w->addItem("Wilber","k2","gnu.png");
w->addItem("Tux","k3","gnu.png");
w->addItem("Puffy","k4","gnu.png");
w->addItem("Hexley","k5","gnu.png");
w->addItem("Sushi","k6","gnu.png");
w->addItem("Nolok","k7","gnu.png");
w->addItem("Mozilla","k8","gnu.png");
w->updateItemDisplay();
GUIEngine::SpinnerWidget* w2 = dynamic_cast<GUIEngine::SpinnerWidget*>(GUIEngine::getCurrentScreen()->getWidget("player"));
assert( w2 != NULL );
w2->addLabel("Hiker");
w2->addLabel("Auria");
w2->addLabel("Conso");
w2->addLabel("MiniBjorn");
}
}
if(name == "gamemode")
{
GUIEngine::RibbonWidget* w = dynamic_cast<GUIEngine::RibbonWidget*>(widget);
if(w->getSelectionName() == "normal")
{
showTrackSelectionScreen();
}
}
if(name == "tracks")
{
GUIEngine::RibbonGridWidget* w2 = dynamic_cast<GUIEngine::RibbonGridWidget*>(widget);
if(w2 != NULL)
std::cout << "Clicked on track " << w2->getSelectionName().c_str() << std::endl;
}
if(name == "gps")
{
GUIEngine::RibbonWidget* w = dynamic_cast<GUIEngine::RibbonWidget*>(widget);
if(w != NULL)
std::cout << "Clicked on GrandPrix " << w->getSelectionName().c_str() << std::endl;
}
}
void initGUI()
{
IrrlichtDevice* device = irr_driver->getDevice();
video::IVideoDriver* driver = device->getVideoDriver();
GUIEngine::init(device, driver, &eventCallback);
}
std::vector<std::string> g_menu_stack;
static bool g_game_mode = false;

View File

@@ -5,6 +5,8 @@
namespace StateManager
{
void initGUI();
void pushMenu(std::string name);
void popMenu();
void resetAndGoToMenu(std::string name);

View File

@@ -899,15 +899,15 @@ void RibbonGridWidget::updateItemDisplay()
{
std::string track_sshot = file_manager->getGUIDir() + "/" + m_items[trackid].m_sshot_file;
button->setImage( GUIEngine::getDriver()->getTexture( track_sshot.c_str() ));
button->setPressedImage( GUIEngine::getDriver()->getTexture( m_items[trackid].m_sshot_file.c_str()) );
button->setPressedImage( GUIEngine::getDriver()->getTexture( track_sshot.c_str()) );
icon->m_properties[PROP_ID] = m_items[trackid].m_code_name;
// trackid++;
}
else
{
button->setImage( GUIEngine::getDriver()->getTexture( (file_manager->getGUIDir() + "/track_random").c_str() ) );
button->setPressedImage( GUIEngine::getDriver()->getTexture( (file_manager->getGUIDir() + "/track_random").c_str() ) );
icon->m_properties[PROP_ID] = "track_random";
button->setImage( GUIEngine::getDriver()->getTexture( (file_manager->getGUIDir() + "/track_random.png").c_str() ) );
button->setPressedImage( GUIEngine::getDriver()->getTexture( (file_manager->getGUIDir() + "/track_random.png").c_str() ) );
icon->m_properties[PROP_ID] = "track_random.png";
}
} // next column
} // next row

View File

@@ -2,6 +2,7 @@
#define HEADER_WIDGET_HPP
#include <irrlicht.h>
#include <map>
#include "ptr_vector.hpp"
using namespace irr;

View File

@@ -567,9 +567,7 @@ int main(int argc, char *argv[] )
init_fonts();
// prepare main menu
IrrlichtDevice* device = irr_driver->getDevice();
video::IVideoDriver* driver = device->getVideoDriver();
GUIEngine::init(device, driver, &eventCallback);
StateManager::initGUI();
if(!user_config->m_no_start_screen) StateManager::pushMenu("main.stkgui");
else StateManager::enterGameState();