*/
#include "guiConfirmRegistration.h"
-#include "client.h"
+#include "client/client.h"
+#include "guiButton.h"
#include <IGUICheckBox.h>
#include <IGUIButton.h>
#include <IGUIStaticText.h>
#include <IGUIFont.h>
#include "intlGUIEditBox.h"
+#include "porting.h"
#include "gettext.h"
// Continuing from guiPasswordChange.cpp
const int ID_confirmPassword = 262;
const int ID_confirm = 263;
-const int ID_message = 264;
+const int ID_intotext = 264;
const int ID_cancel = 265;
+const int ID_message = 266;
GUIConfirmRegistration::GUIConfirmRegistration(gui::IGUIEnvironment *env,
gui::IGUIElement *parent, s32 id, IMenuManager *menumgr, Client *client,
const std::string &playername, const std::string &password,
- const std::string &address, bool *aborted) :
+ bool *aborted, ISimpleTextureSource *tsrc) :
GUIModalMenu(env, parent, id, menumgr),
m_client(client), m_playername(playername), m_password(password),
- m_address(address), m_aborted(aborted)
+ m_aborted(aborted), m_tsrc(tsrc)
{
+#ifdef __ANDROID__
+ m_touchscreen_visible = false;
+#endif
}
GUIConfirmRegistration::~GUIConfirmRegistration()
for (gui::IGUIElement *i : children_copy)
i->remove();
}
+
void GUIConfirmRegistration::regenerateGui(v2u32 screensize)
{
acceptInput();
/*
Calculate new sizes and positions
*/
- core::rect<s32> rect(screensize.X / 2 - 600 / 2, screensize.Y / 2 - 360 / 2,
- screensize.X / 2 + 600 / 2, screensize.Y / 2 + 360 / 2);
-
- DesiredRect = rect;
+#ifdef __ANDROID__
+ const float s = m_gui_scale * porting::getDisplayDensity() / 2;
+#else
+ const float s = m_gui_scale;
+#endif
+ DesiredRect = core::rect<s32>(
+ screensize.X / 2 - 600 * s / 2,
+ screensize.Y / 2 - 360 * s / 2,
+ screensize.X / 2 + 600 * s / 2,
+ screensize.Y / 2 + 360 * s / 2
+ );
recalculateAbsolutePosition(false);
- v2s32 size = rect.getSize();
+ v2s32 size = DesiredRect.getSize();
v2s32 topleft_client(0, 0);
const wchar_t *text;
/*
Add stuff
*/
- s32 ypos = 30;
+ s32 ypos = 30 * s;
{
- std::string address = m_address;
- if (address.empty())
- address = "localhost";
- core::rect<s32> rect2(0, 0, 540, 180);
- rect2 += topleft_client + v2s32(30, ypos);
+ core::rect<s32> rect2(0, 0, 540 * s, 180 * s);
+ rect2 += topleft_client + v2s32(30 * s, ypos);
static const std::string info_text_template = strgettext(
- "You are about to join the server at %1$s with the "
- "name \"%2$s\" for the first time. If you proceed, a "
- "new account using your credentials will be created "
- "on this server.\n"
- "Please retype your password and click Register and "
- "Join to confirm account creation or click Cancel to "
- "abort.");
+ "You are about to join this server with the name \"%s\" for the "
+ "first time.\n"
+ "If you proceed, a new account using your credentials will be "
+ "created on this server.\n"
+ "Please retype your password and click 'Register and Join' to "
+ "confirm account creation, or click 'Cancel' to abort.");
char info_text_buf[1024];
- snprintf(info_text_buf, sizeof(info_text_buf), info_text_template.c_str(),
- address.c_str(), m_playername.c_str());
+ porting::mt_snprintf(info_text_buf, sizeof(info_text_buf),
+ info_text_template.c_str(), m_playername.c_str());
- gui::IGUIEditBox *e = new gui::intlGUIEditBox(
- utf8_to_wide_c(info_text_buf), true, Environment, this,
- ID_message, rect2, false, true);
+ wchar_t *info_text_buf_wide = utf8_to_wide_c(info_text_buf);
+ gui::IGUIEditBox *e = new gui::intlGUIEditBox(info_text_buf_wide, true,
+ Environment, this, ID_intotext, rect2, false, true);
+ delete[] info_text_buf_wide;
e->drop();
e->setMultiLine(true);
e->setWordWrap(true);
e->setTextAlignment(gui::EGUIA_UPPERLEFT, gui::EGUIA_CENTER);
}
- ypos += 210;
+ ypos += 200 * s;
{
- core::rect<s32> rect2(0, 0, 540, 30);
- rect2 += topleft_client + v2s32(30, ypos);
+ core::rect<s32> rect2(0, 0, 540 * s, 30 * s);
+ rect2 += topleft_client + v2s32(30 * s, ypos);
gui::IGUIEditBox *e = Environment->addEditBox(m_pass_confirm.c_str(),
rect2, true, this, ID_confirmPassword);
e->setPasswordBox(true);
+ Environment->setFocus(e);
}
- ypos += 60;
+ ypos += 50 * s;
{
- core::rect<s32> rect2(0, 0, 230, 35);
- rect2 = rect2 + v2s32(size.X / 2 - 220, ypos);
+ core::rect<s32> rect2(0, 0, 230 * s, 35 * s);
+ rect2 = rect2 + v2s32(size.X / 2 - 220 * s, ypos);
text = wgettext("Register and Join");
- Environment->addButton(rect2, this, ID_confirm, text);
+ GUIButton::addButton(Environment, rect2, m_tsrc, this, ID_confirm, text);
delete[] text;
}
{
- core::rect<s32> rect2(0, 0, 120, 35);
- rect2 = rect2 + v2s32(size.X / 2 + 70, ypos);
+ core::rect<s32> rect2(0, 0, 120 * s, 35 * s);
+ rect2 = rect2 + v2s32(size.X / 2 + 70 * s, ypos);
text = wgettext("Cancel");
- Environment->addButton(rect2, this, ID_cancel, text);
+ GUIButton::addButton(Environment, rect2, m_tsrc, this, ID_cancel, text);
delete[] text;
}
{
- core::rect<s32> rect2(0, 0, 200, 20);
- rect2 += topleft_client + v2s32(30, ypos - 40);
+ core::rect<s32> rect2(0, 0, 500 * s, 40 * s);
+ rect2 += topleft_client + v2s32(30 * s, ypos + 40 * s);
text = wgettext("Passwords do not match!");
IGUIElement *e = Environment->addStaticText(
text, rect2, false, true, this, ID_message);
driver->draw2DRectangle(bgcolor, AbsoluteRect, &AbsoluteClippingRect);
gui::IGUIElement::draw();
+#ifdef __ANDROID__
+ getAndroidUIInput();
+#endif
}
void GUIConfirmRegistration::closeMenu(bool goNext)
bool GUIConfirmRegistration::OnEvent(const SEvent &event)
{
if (event.EventType == EET_KEY_INPUT_EVENT) {
- if (event.KeyInput.Key == KEY_ESCAPE && event.KeyInput.PressedDown) {
+ // clang-format off
+ if ((event.KeyInput.Key == KEY_ESCAPE ||
+ event.KeyInput.Key == KEY_CANCEL) &&
+ event.KeyInput.PressedDown) {
closeMenu(false);
return true;
}
+ // clang-format on
if (event.KeyInput.Key == KEY_RETURN && event.KeyInput.PressedDown) {
acceptInput();
if (processInput())
if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST && isVisible()) {
if (!canTakeFocus(event.GUIEvent.Element)) {
- dstream << "GUIConfirmRegistration: Not allowing focus "
- "change."
+ infostream << "GUIConfirmRegistration: Not allowing focus change."
<< std::endl;
// Returning true disables focus change
return true;
return false;
}
+
+#ifdef __ANDROID__
+bool GUIConfirmRegistration::getAndroidUIInput()
+{
+ if (!hasAndroidUIInput() || m_jni_field_name != "password")
+ return false;
+
+ // still waiting
+ if (porting::getInputDialogState() == -1)
+ return true;
+
+ m_jni_field_name.clear();
+
+ gui::IGUIElement *e = getElementFromId(ID_confirmPassword);
+
+ if (!e || e->getType() != irr::gui::EGUIET_EDIT_BOX)
+ return false;
+
+ std::string text = porting::getInputDialogValue();
+ e->setText(utf8_to_wide(text).c_str());
+ return false;
+}
+#endif