aboutsummaryrefslogtreecommitdiff
path: root/advtrains/trainhud.lua
Commit message (Expand)AuthorAge
* Make train HUD check for existing speed restrictionsywang2021-11-07
* Fix manual train controlorwell962021-02-10
* Make anti-LZB-flicker system work after rebase onto hud redesignorwell962021-02-10
* Fix hud and trainlogic to work togetherorwell962021-02-10
* Make cab signalling work with renamed lzb fieldsorwell962021-02-10
* Use graphical indication for more elements; improve 7-segment displayrelease-2.2.1ywang2021-01-20
* Use absolute positioning from the bottom of the screenywang2021-01-19
* Change color of max speed indicationywang2021-01-07
* Remove advtrains_hud_blank.pngywang2021-01-05
* Revert to black background; use "blocks" for the (physical) maximum speedywang2021-01-05
* HUD improvementsywang2021-01-04
* Minor optimizationsywang2020-12-30
* Add demoywang2020-12-27
* Minor improvements for speed indicatorywang2020-12-23
* Minor improvementsywang2020-12-23
* Improve speed indicationywang2020-12-23
* Improved HUD texturesywang2020-12-23
* HUD improvementsywang2020-12-22
* Improved speed indicationywang2020-12-19
* Use PNG textures for the indication of reverser, lever, control mode, shunt m...ywang2020-12-19
* Redesign train HUDywang2020-12-19
* display oncoming lzb speed restrictions in HUDGabriel PĂ©rez-Cerezo2020-06-14
* Restore old door status display behaviororwell962019-03-09
* Shunt signals (not exactly Ks), along with fixes in other components that tho...orwell962018-12-08
* Make "Line" property accessible from OBC and gettable via LATC, change subway...orwell962018-11-20
* Prevent any user control except "Brake" when an ATC override is presentorwell962018-10-17
* Improve ATC-LZB-User control interaction, smoothen LZB control operationsorwell962018-10-17
* Properly handle speed restrictionsorwell962018-10-10
* Remote Routesetting from Onboard Computerorwell962018-10-10
* Add signal safety control override, restructure control systemorwell962018-10-10
* Fix path_dir to actually be an angle, path item deletion and orientation of w...orwell962018-06-14
* Bugfixes part 1orwell962018-06-14
* Occupation System, new train steps, still incompleteorwell962018-06-14
* Change controls for trains (again)orwell962018-01-07
* Merge remote-tracking branch 'lemon-melon-repo/master'orwell962017-10-11
|\
* | Remove zip release files, move mod to root, exclude assets from Makefile (#92)rubenwardy2017-09-20
|/
* Restructure mod directoryorwell962017-01-04
* Add Automatic Train Control systemorwell962017-01-04
* remove train type concept and calculate train's capabilities based on used wa...orwell962016-12-22
* Turning mod into a modpack and separating the trains from the core modorwell962016-12-20
an class="hl kwb">const int ID_newPassword1 = 257; const int ID_newPassword2 = 258; const int ID_change = 259; const int ID_message = 260; const int ID_cancel = 261; GUIPasswordChange::GUIPasswordChange(gui::IGUIEnvironment* env, gui::IGUIElement* parent, s32 id, IMenuManager *menumgr, Client* client, ISimpleTextureSource *tsrc ): GUIModalMenu(env, parent, id, menumgr), m_client(client), m_tsrc(tsrc) { } GUIPasswordChange::~GUIPasswordChange() { removeChildren(); } void GUIPasswordChange::removeChildren() { const core::list<gui::IGUIElement *> &children = getChildren(); core::list<gui::IGUIElement *> children_copy; for (gui::IGUIElement *i : children) { children_copy.push_back(i); } for (gui::IGUIElement *i : children_copy) { i->remove(); } } void GUIPasswordChange::regenerateGui(v2u32 screensize) { /* save current input */ acceptInput(); /* Remove stuff */ removeChildren(); /* Calculate new sizes and positions */ #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 - 580 * s / 2, screensize.Y / 2 - 300 * s / 2, screensize.X / 2 + 580 * s / 2, screensize.Y / 2 + 300 * s / 2 ); recalculateAbsolutePosition(false); v2s32 size = DesiredRect.getSize(); v2s32 topleft_client(40 * s, 0); const wchar_t *text; /* Add stuff */ s32 ypos = 50 * s; { core::rect<s32> rect(0, 0, 150 * s, 20 * s); rect += topleft_client + v2s32(25 * s, ypos + 6 * s); text = wgettext("Old Password"); Environment->addStaticText(text, rect, false, true, this, -1); delete[] text; } { core::rect<s32> rect(0, 0, 230 * s, 30 * s); rect += topleft_client + v2s32(160 * s, ypos); gui::IGUIEditBox *e = Environment->addEditBox( m_oldpass.c_str(), rect, true, this, ID_oldPassword); Environment->setFocus(e); e->setPasswordBox(true); } ypos += 50 * s; { core::rect<s32> rect(0, 0, 150 * s, 20 * s); rect += topleft_client + v2s32(25 * s, ypos + 6 * s); text = wgettext("New Password"); Environment->addStaticText(text, rect, false, true, this, -1); delete[] text; } { core::rect<s32> rect(0, 0, 230 * s, 30 * s); rect += topleft_client + v2s32(160 * s, ypos); gui::IGUIEditBox *e = Environment->addEditBox( m_newpass.c_str(), rect, true, this, ID_newPassword1); e->setPasswordBox(true); } ypos += 50 * s; { core::rect<s32> rect(0, 0, 150 * s, 20 * s); rect += topleft_client + v2s32(25 * s, ypos + 6 * s); text = wgettext("Confirm Password"); Environment->addStaticText(text, rect, false, true, this, -1); delete[] text; } { core::rect<s32> rect(0, 0, 230 * s, 30 * s); rect += topleft_client + v2s32(160 * s, ypos); gui::IGUIEditBox *e = Environment->addEditBox( m_newpass_confirm.c_str(), rect, true, this, ID_newPassword2); e->setPasswordBox(true); } ypos += 50 * s; { core::rect<s32> rect(0, 0, 100 * s, 30 * s); rect = rect + v2s32(size.X / 4 + 56 * s, ypos); text = wgettext("Change"); GUIButton::addButton(Environment, rect, m_tsrc, this, ID_change, text); delete[] text; } { core::rect<s32> rect(0, 0, 100 * s, 30 * s); rect = rect + v2s32(size.X / 4 + 185 * s, ypos); text = wgettext("Cancel"); GUIButton::addButton(Environment, rect, m_tsrc, this, ID_cancel, text); delete[] text; } ypos += 50 * s; { core::rect<s32> rect(0, 0, 300 * s, 20 * s); rect += topleft_client + v2s32(35 * s, ypos); text = wgettext("Passwords do not match!"); IGUIElement *e = Environment->addStaticText( text, rect, false, true, this, ID_message); e->setVisible(false); delete[] text; } } void GUIPasswordChange::drawMenu() { gui::IGUISkin *skin = Environment->getSkin(); if (!skin) return; video::IVideoDriver *driver = Environment->getVideoDriver(); video::SColor bgcolor(140, 0, 0, 0); driver->draw2DRectangle(bgcolor, AbsoluteRect, &AbsoluteClippingRect); gui::IGUIElement::draw(); #ifdef __ANDROID__ getAndroidUIInput(); #endif } void GUIPasswordChange::acceptInput() { gui::IGUIElement *e; e = getElementFromId(ID_oldPassword); if (e != NULL) m_oldpass = e->getText(); e = getElementFromId(ID_newPassword1); if (e != NULL) m_newpass = e->getText(); e = getElementFromId(ID_newPassword2); if (e != NULL) m_newpass_confirm = e->getText(); } bool GUIPasswordChange::processInput() { if (m_newpass != m_newpass_confirm) { gui::IGUIElement *e = getElementFromId(ID_message); if (e != NULL) e->setVisible(true); return false; } m_client->sendChangePassword(wide_to_utf8(m_oldpass), wide_to_utf8(m_newpass)); return true; } bool GUIPasswordChange::OnEvent(const SEvent &event) { if (event.EventType == EET_KEY_INPUT_EVENT) { // clang-format off if ((event.KeyInput.Key == KEY_ESCAPE || event.KeyInput.Key == KEY_CANCEL) && event.KeyInput.PressedDown) { quitMenu(); return true; } // clang-format on if (event.KeyInput.Key == KEY_RETURN && event.KeyInput.PressedDown) { acceptInput(); if (processInput()) quitMenu(); return true; } } if (event.EventType == EET_GUI_EVENT) { if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST && isVisible()) { if (!canTakeFocus(event.GUIEvent.Element)) { infostream << "GUIPasswordChange: Not allowing focus change." << std::endl; // Returning true disables focus change return true; } } if (event.GUIEvent.EventType == gui::EGET_BUTTON_CLICKED) { switch (event.GUIEvent.Caller->getID()) { case ID_change: acceptInput(); if (processInput()) quitMenu(); return true; case ID_cancel: quitMenu(); return true; } } if (event.GUIEvent.EventType == gui::EGET_EDITBOX_ENTER) { switch (event.GUIEvent.Caller->getID()) { case ID_oldPassword: case ID_newPassword1: case ID_newPassword2: acceptInput(); if (processInput()) quitMenu(); return true; } } } return Parent ? Parent->OnEvent(event) : false; } std::string GUIPasswordChange::getNameByID(s32 id) { switch (id) { case ID_oldPassword: return "old_password"; case ID_newPassword1: return "new_password_1"; case ID_newPassword2: return "new_password_2"; } return ""; } #ifdef __ANDROID__ bool GUIPasswordChange::getAndroidUIInput() { if (!hasAndroidUIInput()) return false; // still waiting if (porting::getInputDialogState() == -1) return true; gui::IGUIElement *e = nullptr; if (m_jni_field_name == "old_password") e = getElementFromId(ID_oldPassword); else if (m_jni_field_name == "new_password_1") e = getElementFromId(ID_newPassword1); else if (m_jni_field_name == "new_password_2") e = getElementFromId(ID_newPassword2); m_jni_field_name.clear(); 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