/* $Id: optionswindow.cpp,v 1.8 2005/12/12 21:02:29 chfreund Exp $ */ #include "optionswindow.hpp" #include #include "textlabel.h" #include "wopsettings.hpp" #include "playerconfigwindow.hpp" OptionsWindow::OptionsWindow( WopSettings* settings, Uint32 width, Uint32 height ) : m_settings( settings ), m_playerConfigWindow( 0 ) { m_configPlayerButton = new TextButton( "Configure player" ); m_configPlayerButton->setHighlightable( true ); m_configPlayerButton->addActionListener( this ); m_configPlayerButton->setWidth( width ); m_configKeyButton = new TextButton( "Configure keys" ); m_configKeyButton->setHighlightable( true ); m_configKeyButton->addActionListener( this ); m_configKeyButton->setWidth( width ); m_saveButton = new TextButton( "Save configuration" ); m_saveButton->setHighlightable( true ); m_saveButton->addActionListener( this ); m_saveButton->setWidth( width ); m_backButton = new TextButton( "Back to main menu" ); m_backButton->setHighlightable( true ); m_backButton->addActionListener( this ); m_backButton->setWidth( width ); m_content = new WidgetComposite(); VerticalLayout* contentLayout = new VerticalLayout( m_content ); m_content->setLayout( contentLayout ); m_content->add( m_configPlayerButton ); m_content->add( m_configKeyButton ); m_content->add( m_saveButton ); m_content->add( m_backButton ); m_content->setMinHeight( height - 20 ); setTitle( "Options" ); setWidget( m_content ); } void OptionsWindow::actionPerformed( Uint32 cmd, void* source ) { if ( source == m_configPlayerButton && cmd == Button::BUTTON_PRESSED ) { RootContainer* root = getRoot(); m_playerConfigWindow = new PlayerConfigWindow( m_settings->getName(), m_settings->getTeamID(), m_settings->getPlayerColor() ); m_playerConfigWindow->setPosition ( ( root->getWidth() - m_playerConfigWindow->getWidth() ) / 2, ( root->getHeight() - m_playerConfigWindow->getHeight() ) / 2 ); m_playerConfigWindow->addActionListener( this ); root->remove( this ); root->add( m_playerConfigWindow ); } else if ( source == m_configKeyButton && cmd == Button::BUTTON_PRESSED ) { fireAction( CONFIG_KEYS_PRESSED, this ); } else if ( source == m_backButton && cmd == Button::BUTTON_PRESSED ) { fireAction( BACK_PRESSED, this ); } else if ( source == m_saveButton && cmd == Button::BUTTON_PRESSED ) { fireAction( SAVE_PRESSED, this ); } else if ( source == m_playerConfigWindow && cmd == PlayerConfigWindow::OK_PRESSED ) { m_settings->setName( m_playerConfigWindow->getName().c_str() ); m_settings->setTeamID( m_playerConfigWindow->getTeamID() ); Uint32 color = m_playerConfigWindow->getColorR() << 16 | m_playerConfigWindow->getColorG() << 8 | m_playerConfigWindow->getColorB(); m_settings->setPlayerColor( color ); RootContainer* root = getRoot(); root->remove( m_playerConfigWindow ); root->add( this ); delete m_playerConfigWindow; m_playerConfigWindow = 0; } else if ( source == m_playerConfigWindow && cmd == PlayerConfigWindow::CANCEL_PRESSED ) { RootContainer* root = getRoot(); root->remove( m_playerConfigWindow ); root->add( this ); delete m_playerConfigWindow; m_playerConfigWindow = 0; } } bool OptionsWindow::handleEvent( SDL_Event* event ) { if ( event->type == SDL_KEYDOWN ) { if ( event->key.keysym.sym == SDLK_ESCAPE ) { fireAction( BACK_PRESSED, this ); return true; } } return WopWindow::handleEvent( event ); }