Signin in now fully uses asynchronous http requesting. Implemented a nice "loading dots" gimmick for loading.
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/uni@13276 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
3724fc3dae
commit
8ec5adeec0
@ -39,6 +39,7 @@ LoginDialog::LoginDialog(const Message message_type) :
|
|||||||
{
|
{
|
||||||
m_self_destroy = false;
|
m_self_destroy = false;
|
||||||
m_open_registration_dialog = false;
|
m_open_registration_dialog = false;
|
||||||
|
m_load_timer = 0.0f;
|
||||||
m_signin_request = NULL;
|
m_signin_request = NULL;
|
||||||
loadFromFile("online/login_dialog.stkgui");
|
loadFromFile("online/login_dialog.stkgui");
|
||||||
|
|
||||||
@ -94,6 +95,7 @@ LoginDialog::LoginDialog(const Message message_type) :
|
|||||||
|
|
||||||
LoginDialog::~LoginDialog()
|
LoginDialog::~LoginDialog()
|
||||||
{
|
{
|
||||||
|
delete m_signin_request;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -115,6 +117,8 @@ GUIEngine::EventPropagation LoginDialog::processEvent(const std::string& eventSo
|
|||||||
const std::string& selection = m_options_widget->getSelectionIDString(PLAYER_ID_GAME_MASTER);
|
const std::string& selection = m_options_widget->getSelectionIDString(PLAYER_ID_GAME_MASTER);
|
||||||
if (selection == m_cancel_widget->m_properties[PROP_ID])
|
if (selection == m_cancel_widget->m_properties[PROP_ID])
|
||||||
{
|
{
|
||||||
|
if(m_signin_request != NULL)
|
||||||
|
m_signin_request->cancel();
|
||||||
m_self_destroy = true;
|
m_self_destroy = true;
|
||||||
return GUIEngine::EVENT_BLOCK;
|
return GUIEngine::EVENT_BLOCK;
|
||||||
}
|
}
|
||||||
@ -150,13 +154,12 @@ void LoginDialog::onUpdate(float dt)
|
|||||||
{
|
{
|
||||||
if(m_signin_request != NULL)
|
if(m_signin_request != NULL)
|
||||||
{
|
{
|
||||||
// load screen
|
|
||||||
if(m_signin_request->isDone())
|
if(m_signin_request->isDone())
|
||||||
{
|
{
|
||||||
stringw info = "";
|
stringw info = "";
|
||||||
if(online::CurrentUser::get()->signIn(m_signin_request->getResult(), info))
|
if(online::CurrentUser::get()->signIn(m_signin_request->getResult(), info))
|
||||||
{
|
{
|
||||||
m_self_destroy = true;
|
m_self_destroy = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -165,6 +168,13 @@ void LoginDialog::onUpdate(float dt)
|
|||||||
m_message_widget->setColor(irr::video::SColor(255, 255, 0, 0));
|
m_message_widget->setColor(irr::video::SColor(255, 255, 0, 0));
|
||||||
m_message_widget->setText(info, false);
|
m_message_widget->setText(info, false);
|
||||||
}
|
}
|
||||||
|
delete m_signin_request;
|
||||||
|
m_signin_request = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_load_timer += dt;
|
||||||
|
m_message_widget->setText(irr::core::stringw(_("Signing in")) + StringUtils::loadingDots(m_load_timer), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,11 +24,7 @@
|
|||||||
#include "online/current_user.hpp"
|
#include "online/current_user.hpp"
|
||||||
|
|
||||||
#include "guiengine/modaldialog.hpp"
|
#include "guiengine/modaldialog.hpp"
|
||||||
#include "guiengine/widgets/text_box_widget.hpp"
|
#include "guiengine/widgets.hpp"
|
||||||
#include "guiengine/widgets/check_box_widget.hpp"
|
|
||||||
#include "guiengine/widgets/icon_button_widget.hpp"
|
|
||||||
#include "guiengine/widgets/ribbon_widget.hpp"
|
|
||||||
#include "guiengine/widgets/label_widget.hpp"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Dialog that allows a user to sign in
|
* \brief Dialog that allows a user to sign in
|
||||||
@ -58,6 +54,8 @@ private:
|
|||||||
|
|
||||||
void login();
|
void login();
|
||||||
|
|
||||||
|
float m_load_timer;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
enum Message
|
enum Message
|
||||||
|
@ -709,6 +709,14 @@ namespace StringUtils
|
|||||||
printf("Invalid version string '%s'.\n", s.c_str());
|
printf("Invalid version string '%s'.\n", s.c_str());
|
||||||
return version;
|
return version;
|
||||||
} // versionToInt
|
} // versionToInt
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
|
irr::core::stringw loadingDots(float time, bool spaces, float interval, int max_dots)
|
||||||
|
{
|
||||||
|
int nr_dots = int(floor(time * (1 / interval))) % (max_dots+1);
|
||||||
|
return irr::core::stringw((std::string(nr_dots,'.') + std::string(max_dots-nr_dots,' ')).c_str());
|
||||||
|
}
|
||||||
} // namespace StringUtils
|
} // namespace StringUtils
|
||||||
|
|
||||||
|
|
||||||
|
@ -413,6 +413,9 @@ namespace StringUtils
|
|||||||
|
|
||||||
/** Compute a simple hash of a string */
|
/** Compute a simple hash of a string */
|
||||||
unsigned int simpleHash(const char* input);
|
unsigned int simpleHash(const char* input);
|
||||||
|
|
||||||
|
|
||||||
|
irr::core::stringw loadingDots(float time, bool spaces = true, float interval = 0.5f, int max_dots = 3);
|
||||||
} // namespace StringUtils
|
} // namespace StringUtils
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user