Implemented 'press esc to cancel' buttons in some modal dialogs
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3663 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
aba5e61935
commit
33899210b2
@ -21,6 +21,7 @@
|
|||||||
#include "gui/options_screen.hpp"
|
#include "gui/options_screen.hpp"
|
||||||
#include "gui/state_manager.hpp"
|
#include "gui/state_manager.hpp"
|
||||||
#include "gui/widget.hpp"
|
#include "gui/widget.hpp"
|
||||||
|
#include "input/input_manager.hpp"
|
||||||
#include "network/network_manager.hpp"
|
#include "network/network_manager.hpp"
|
||||||
#include "race/race_manager.hpp"
|
#include "race/race_manager.hpp"
|
||||||
#include "utils/translation.hpp"
|
#include "utils/translation.hpp"
|
||||||
@ -108,19 +109,30 @@ PressAKeyDialog::PressAKeyDialog(const float w, const float h) :
|
|||||||
widget->add();
|
widget->add();
|
||||||
|
|
||||||
|
|
||||||
|
IGUIFont* font = GUIEngine::getFont();
|
||||||
|
const int textHeight = font->getDimension(L"X").Height;
|
||||||
|
|
||||||
ButtonWidget* widget2 = new ButtonWidget();
|
ButtonWidget* widget2 = new ButtonWidget();
|
||||||
widget2->m_type = WTYPE_BUTTON; // FIXME : shouldn't constructor set type?
|
widget2->m_type = WTYPE_BUTTON; // FIXME : shouldn't constructor set type?
|
||||||
widget2->m_properties[PROP_TEXT] = _("Press ESC to cancel"); // TODO : pressing this button should cancel
|
widget2->m_properties[PROP_ID] = "cancel";
|
||||||
|
widget2->m_properties[PROP_TEXT] = _("Press ESC to cancel");
|
||||||
widget2->x = 15;
|
widget2->x = 15;
|
||||||
widget2->y = m_area.getHeight() - 60;
|
widget2->y = m_area.getHeight() - textHeight - 12;
|
||||||
widget2->w = m_area.getWidth() - 30;
|
widget2->w = m_area.getWidth() - 30;
|
||||||
widget2->h = 50;
|
widget2->h = textHeight + 6;
|
||||||
widget2->setParent(m_irrlicht_window);
|
widget2->setParent(m_irrlicht_window);
|
||||||
|
|
||||||
m_children.push_back(widget2);
|
m_children.push_back(widget2);
|
||||||
widget2->add();
|
widget2->add();
|
||||||
}
|
}
|
||||||
|
void PressAKeyDialog::processEvent(std::string& eventSource)
|
||||||
|
{
|
||||||
|
if(eventSource == "cancel")
|
||||||
|
{
|
||||||
|
input_manager->setMode(InputManager::MENU);
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
}
|
||||||
// ------------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------------
|
||||||
// ------------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -142,7 +154,7 @@ EnterPlayerNameDialog::EnterPlayerNameDialog(const float w, const float h) :
|
|||||||
widget->x = 0;
|
widget->x = 0;
|
||||||
widget->y = 0;
|
widget->y = 0;
|
||||||
widget->w = m_area.getWidth();
|
widget->w = m_area.getWidth();
|
||||||
widget->h = m_area.getHeight()/2;
|
widget->h = m_area.getHeight()/3;
|
||||||
widget->setParent(m_irrlicht_window);
|
widget->setParent(m_irrlicht_window);
|
||||||
|
|
||||||
m_children.push_back(widget);
|
m_children.push_back(widget);
|
||||||
@ -153,10 +165,7 @@ EnterPlayerNameDialog::EnterPlayerNameDialog(const float w, const float h) :
|
|||||||
IGUIFont* font = GUIEngine::getFont();
|
IGUIFont* font = GUIEngine::getFont();
|
||||||
const int textHeight = font->getDimension(L"X").Height;
|
const int textHeight = font->getDimension(L"X").Height;
|
||||||
|
|
||||||
const int bottomYFrom = m_area.getHeight()/2;
|
const int textAreaYFrom = m_area.getHeight()/2 - textHeight/2;
|
||||||
const int bottomYTo = m_area.getHeight();
|
|
||||||
const int bottomHeight = bottomYTo - bottomYFrom;
|
|
||||||
const int textAreaYFrom = bottomYFrom + bottomHeight/2 - textHeight/2;
|
|
||||||
|
|
||||||
textCtrl = new TextBoxWidget();
|
textCtrl = new TextBoxWidget();
|
||||||
textCtrl->m_type = WTYPE_BUTTON;
|
textCtrl->m_type = WTYPE_BUTTON;
|
||||||
@ -169,14 +178,38 @@ EnterPlayerNameDialog::EnterPlayerNameDialog(const float w, const float h) :
|
|||||||
m_children.push_back(textCtrl);
|
m_children.push_back(textCtrl);
|
||||||
textCtrl->add();
|
textCtrl->add();
|
||||||
GUIEngine::getGUIEnv()->setFocus( textCtrl->m_element );
|
GUIEngine::getGUIEnv()->setFocus( textCtrl->m_element );
|
||||||
|
|
||||||
|
ButtonWidget* widget2 = new ButtonWidget();
|
||||||
|
widget2->m_type = WTYPE_BUTTON; // FIXME : shouldn't constructor set type?
|
||||||
|
widget2->m_properties[PROP_ID] = "cancel";
|
||||||
|
widget2->m_properties[PROP_TEXT] = _("Press ESC to cancel");
|
||||||
|
widget2->x = 15;
|
||||||
|
widget2->y = m_area.getHeight() - textHeight - 12;
|
||||||
|
widget2->w = m_area.getWidth() - 30;
|
||||||
|
widget2->h = textHeight + 6;
|
||||||
|
widget2->setParent(m_irrlicht_window);
|
||||||
|
|
||||||
|
m_children.push_back(widget2);
|
||||||
|
widget2->add();
|
||||||
|
|
||||||
|
// don't allow navigating there with keyboard; pressing 'enter' will accept the current name
|
||||||
|
// no matter where focus is
|
||||||
|
widget2->m_element->setTabStop(false);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
EnterPlayerNameDialog::~EnterPlayerNameDialog()
|
EnterPlayerNameDialog::~EnterPlayerNameDialog()
|
||||||
{
|
{
|
||||||
std::cout << "Rmoving text control element\n";
|
|
||||||
textCtrl->m_element->remove();
|
textCtrl->m_element->remove();
|
||||||
}
|
}
|
||||||
|
void EnterPlayerNameDialog::processEvent(std::string& eventSource)
|
||||||
|
{
|
||||||
|
if(eventSource == "cancel")
|
||||||
|
{
|
||||||
|
input_manager->setMode(InputManager::MENU);
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
}
|
||||||
// ------------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
void EnterPlayerNameDialog::onEnterPressedInternal()
|
void EnterPlayerNameDialog::onEnterPressedInternal()
|
||||||
|
@ -48,6 +48,7 @@ public:
|
|||||||
ptr_vector<Widget> m_children;
|
ptr_vector<Widget> m_children;
|
||||||
|
|
||||||
virtual ~ModalDialog();
|
virtual ~ModalDialog();
|
||||||
|
virtual void processEvent(std::string& eventSource){}
|
||||||
|
|
||||||
static void dismiss();
|
static void dismiss();
|
||||||
static void onEnterPressed();
|
static void onEnterPressed();
|
||||||
@ -62,6 +63,7 @@ public:
|
|||||||
* Creates a modal dialog with given percentage of screen width and height
|
* Creates a modal dialog with given percentage of screen width and height
|
||||||
*/
|
*/
|
||||||
PressAKeyDialog(const float percentWidth, const float percentHeight);
|
PressAKeyDialog(const float percentWidth, const float percentHeight);
|
||||||
|
void processEvent(std::string& eventSource);
|
||||||
};
|
};
|
||||||
|
|
||||||
class EnterPlayerNameDialog : public ModalDialog
|
class EnterPlayerNameDialog : public ModalDialog
|
||||||
@ -75,6 +77,7 @@ public:
|
|||||||
~EnterPlayerNameDialog();
|
~EnterPlayerNameDialog();
|
||||||
|
|
||||||
void onEnterPressedInternal();
|
void onEnterPressedInternal();
|
||||||
|
void processEvent(std::string& eventSource);
|
||||||
};
|
};
|
||||||
|
|
||||||
class TrackInfoDialog : public ModalDialog
|
class TrackInfoDialog : public ModalDialog
|
||||||
|
@ -651,6 +651,12 @@ bool Screen::OnEvent(const SEvent& event)
|
|||||||
Widget* w = getWidget(id);
|
Widget* w = getWidget(id);
|
||||||
if(w == NULL) break;
|
if(w == NULL) break;
|
||||||
|
|
||||||
|
if(ModalDialog::isADialogActive())
|
||||||
|
{
|
||||||
|
ModalDialog::getCurrent()->processEvent(w->m_properties[PROP_ID]);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
Widget* parent = w->m_event_handler;
|
Widget* parent = w->m_event_handler;
|
||||||
if(w->m_event_handler != NULL)
|
if(w->m_event_handler != NULL)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user