diff --git a/UI/GameSettingsScreen.cpp b/UI/GameSettingsScreen.cpp index 476c9fdaa2..18e2b70bb2 100644 --- a/UI/GameSettingsScreen.cpp +++ b/UI/GameSettingsScreen.cpp @@ -1203,6 +1203,8 @@ UI::EventReturn GameSettingsScreen::OnChangeNickname(UI::EventParams &e) { } UI::EventReturn GameSettingsScreen::OnChangeproAdhocServerAddress(UI::EventParams &e) { + I18NCategory *sy = GetI18NCategory("System"); + #if PPSSPP_PLATFORM(WINDOWS) || defined(USING_QT_UI) if (!g_Config.bFullScreen) { const size_t name_len = 256; @@ -1214,13 +1216,13 @@ UI::EventReturn GameSettingsScreen::OnChangeproAdhocServerAddress(UI::EventParam std::string stripped = StripSpaces(name); g_Config.proAdhocServer = stripped; } + } else { + screenManager()->push(new HostnameSelectScreen(&g_Config.proAdhocServer, sy->T("proAdhocServer Address:"))); } - else - screenManager()->push(new HostnameSelectScreen(g_Config.proAdhocServer)); #elif defined(__ANDROID__) System_SendMessage("inputbox", ("IP:" + g_Config.proAdhocServer).c_str()); #else - screenManager()->push(new HostnameSelectScreen(g_Config.proAdhocServer)); + screenManager()->push(new HostnameSelectScreen(&g_Config.proAdhocServer, sy->T("proAdhocServer Address:"))); #endif return UI::EVENT_DONE; @@ -1482,130 +1484,66 @@ void DeveloperToolsScreen::update() { canAllowDebugger_ = !WebServerStopping(WebServerFlags::DEBUGGER); } -void HostnameSelectScreen::CreateViews() { +void HostnameSelectScreen::CreatePopupContents(UI::ViewGroup *parent) { using namespace UI; I18NCategory *sy = GetI18NCategory("System"); I18NCategory *di = GetI18NCategory("Dialog"); - tempProAdhocServer = targetConfig; - root_ = new AnchorLayout(new LayoutParams(FILL_PARENT, FILL_PARENT)); - LinearLayout *leftColumn = new LinearLayout(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, FILL_PARENT)); + currentValue_ = *value_; + LinearLayout *valueRow = new LinearLayout(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, FILL_PARENT, Margins(0, 0, 0, 10))); - leftColumn->Add(new ItemHeader(sy->T("proAdhocServer Address:"))); - addrView_ = new TextView(tempProAdhocServer, ALIGN_LEFT, false); - leftColumn->Add(addrView_); - LinearLayout *rightColumn = new LinearLayout(ORIENT_HORIZONTAL, new AnchorLayoutParams(0, 120, 10, NONE, NONE,10)); - rightColumn->Add(new Button("0"))->OnClick.Handle(this, &HostnameSelectScreen::On0Click); - rightColumn->Add(new Button("1"))->OnClick.Handle(this, &HostnameSelectScreen::On1Click); - rightColumn->Add(new Button("2"))->OnClick.Handle(this, &HostnameSelectScreen::On2Click); - rightColumn->Add(new Button("3"))->OnClick.Handle(this, &HostnameSelectScreen::On3Click); - rightColumn->Add(new Button("4"))->OnClick.Handle(this, &HostnameSelectScreen::On4Click); - rightColumn->Add(new Button("5"))->OnClick.Handle(this, &HostnameSelectScreen::On5Click); - rightColumn->Add(new Button("6"))->OnClick.Handle(this, &HostnameSelectScreen::On6Click); - rightColumn->Add(new Button("7"))->OnClick.Handle(this, &HostnameSelectScreen::On7Click); - rightColumn->Add(new Button("8"))->OnClick.Handle(this, &HostnameSelectScreen::On8Click); - rightColumn->Add(new Button("9"))->OnClick.Handle(this, &HostnameSelectScreen::On9Click); - rightColumn->Add(new Button("."))->OnClick.Handle(this, &HostnameSelectScreen::OnPointClick); - rightColumn->Add(new Button(di->T("Delete")))->OnClick.Handle(this, &HostnameSelectScreen::OnDeleteClick); - rightColumn->Add(new Button(di->T("Delete all")))->OnClick.Handle(this, &HostnameSelectScreen::OnDeleteAllClick); - rightColumn->Add(new Button(di->T("OK")))->OnClick.Handle(this, &HostnameSelectScreen::OnOKClick); - rightColumn->Add(new Button(di->T("Cancel")))->OnClick.Handle(this, &HostnameSelectScreen::OnCancelClick); - root_->Add(leftColumn); - root_->Add(rightColumn); + addrView_ = new TextView(currentValue_, ALIGN_LEFT, false); + valueRow->Add(addrView_); + parent->Add(valueRow); + + LinearLayout *buttonsRow1 = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT)); + LinearLayout *buttonsRow2 = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT)); + parent->Add(buttonsRow1); + parent->Add(buttonsRow2); + + for (char c = '0'; c <= '9'; ++c) { + char label[] = { c, '\0' }; + auto button = buttonsRow1->Add(new Button(label)); + button->OnClick.Handle(this, &HostnameSelectScreen::OnNumberClick); + button->SetTag(label); + } + buttonsRow1->Add(new Button("."))->OnClick.Handle(this, &HostnameSelectScreen::OnPointClick); + + buttonsRow2->Add(new Button(di->T("Delete")))->OnClick.Handle(this, &HostnameSelectScreen::OnDeleteClick); + buttonsRow2->Add(new Button(di->T("Delete all")))->OnClick.Handle(this, &HostnameSelectScreen::OnDeleteAllClick); } -UI::EventReturn HostnameSelectScreen::On0Click(UI::EventParams &e) { - if (tempProAdhocServer.length() > 0) - tempProAdhocServer.append("0"); - addrView_->SetText(tempProAdhocServer); +UI::EventReturn HostnameSelectScreen::OnNumberClick(UI::EventParams &e) { + std::string text = e.v ? e.v->Tag() : ""; + if (currentValue_.length() > 0 || text != "0") + currentValue_.append(text); + addrView_->SetText(currentValue_); return UI::EVENT_DONE; } -UI::EventReturn HostnameSelectScreen::On1Click(UI::EventParams &e) { - tempProAdhocServer.append("1"); - addrView_->SetText(tempProAdhocServer); - return UI::EVENT_DONE; -} - -UI::EventReturn HostnameSelectScreen::On2Click(UI::EventParams &e) { - tempProAdhocServer.append("2"); - addrView_->SetText(tempProAdhocServer); - return UI::EVENT_DONE; -} - -UI::EventReturn HostnameSelectScreen::On3Click(UI::EventParams &e) { - tempProAdhocServer.append("3"); - addrView_->SetText(tempProAdhocServer); - return UI::EVENT_DONE; -} - -UI::EventReturn HostnameSelectScreen::On4Click(UI::EventParams &e) { - tempProAdhocServer.append("4"); - addrView_->SetText(tempProAdhocServer); - return UI::EVENT_DONE; -} - -UI::EventReturn HostnameSelectScreen::On5Click(UI::EventParams &e) { - tempProAdhocServer.append("5"); - addrView_->SetText(tempProAdhocServer); - return UI::EVENT_DONE; -} - -UI::EventReturn HostnameSelectScreen::On6Click(UI::EventParams &e) { - tempProAdhocServer.append("6"); - addrView_->SetText(tempProAdhocServer); - return UI::EVENT_DONE; -} - -UI::EventReturn HostnameSelectScreen::On7Click(UI::EventParams &e) { - tempProAdhocServer.append("7"); - addrView_->SetText(tempProAdhocServer); - return UI::EVENT_DONE; -} - -UI::EventReturn HostnameSelectScreen::On8Click(UI::EventParams &e) { - tempProAdhocServer.append("8"); - addrView_->SetText(tempProAdhocServer); - return UI::EVENT_DONE; -} - -UI::EventReturn HostnameSelectScreen::On9Click(UI::EventParams &e) { - tempProAdhocServer.append("9"); - addrView_->SetText(tempProAdhocServer); - return UI::EVENT_DONE; -} - - UI::EventReturn HostnameSelectScreen::OnPointClick(UI::EventParams &e) { - if (tempProAdhocServer.length() > 0 && tempProAdhocServer.at(tempProAdhocServer.length() - 1) != '.') - tempProAdhocServer.append("."); - addrView_->SetText(tempProAdhocServer); + if (currentValue_.length() > 0 && currentValue_.at(currentValue_.length() - 1) != '.') + currentValue_.append("."); + addrView_->SetText(currentValue_); return UI::EVENT_DONE; } UI::EventReturn HostnameSelectScreen::OnDeleteClick(UI::EventParams &e) { - if (tempProAdhocServer.length() > 0) - tempProAdhocServer.erase(tempProAdhocServer.length() -1, 1); - addrView_->SetText(tempProAdhocServer); + if (currentValue_.length() > 0) + currentValue_.erase(currentValue_.length() - 1, 1); + addrView_->SetText(currentValue_); return UI::EVENT_DONE; } UI::EventReturn HostnameSelectScreen::OnDeleteAllClick(UI::EventParams &e) { - tempProAdhocServer = ""; - addrView_->SetText(tempProAdhocServer); + currentValue_ = ""; + addrView_->SetText(currentValue_); return UI::EVENT_DONE; } -UI::EventReturn HostnameSelectScreen::OnOKClick(UI::EventParams &e) { - targetConfig = tempProAdhocServer; - UIScreen::OnBack(e); - return UI::EVENT_DONE; -} - -UI::EventReturn HostnameSelectScreen::OnCancelClick(UI::EventParams &e) { - tempProAdhocServer = targetConfig; - UIScreen::OnBack(e); - return UI::EVENT_DONE; +void HostnameSelectScreen::OnCompleted(DialogResult result) { + if (result == DR_OK) + *value_ = currentValue_; } SettingInfoMessage::SettingInfoMessage(int align, UI::AnchorLayoutParams *lp) @@ -1614,7 +1552,6 @@ SettingInfoMessage::SettingInfoMessage(int align, UI::AnchorLayoutParams *lp) SetSpacing(0.0f); Add(new UI::Spacer(10.0f)); text_ = Add(new UI::TextView("", align, false, new LinearLayoutParams(1.0, Margins(0, 10)))); - text_->SetTag("TEST?"); Add(new UI::Spacer(10.0f)); } diff --git a/UI/GameSettingsScreen.h b/UI/GameSettingsScreen.h index 732e40441a..8c94329066 100644 --- a/UI/GameSettingsScreen.h +++ b/UI/GameSettingsScreen.h @@ -175,30 +175,24 @@ private: bool canAllowDebugger_ = true; }; -class HostnameSelectScreen : public UIDialogScreenWithBackground { +class HostnameSelectScreen : public PopupScreen { public: - HostnameSelectScreen(std::string &target) : targetConfig(target) {} + HostnameSelectScreen(std::string *value, const std::string &title) + : PopupScreen(title, "OK", "Cancel"), value_(value) { + } + + void CreatePopupContents(UI::ViewGroup *parent) override; protected: - void CreateViews() override; + void OnCompleted(DialogResult result) override; private: - std::string &targetConfig; - std::string tempProAdhocServer; - UI::TextView *addrView_; - UI::EventReturn On0Click(UI::EventParams &e); - UI::EventReturn On1Click(UI::EventParams &e); - UI::EventReturn On2Click(UI::EventParams &e); - UI::EventReturn On3Click(UI::EventParams &e); - UI::EventReturn On4Click(UI::EventParams &e); - UI::EventReturn On5Click(UI::EventParams &e); - UI::EventReturn On6Click(UI::EventParams &e); - UI::EventReturn On7Click(UI::EventParams &e); - UI::EventReturn On8Click(UI::EventParams &e); - UI::EventReturn On9Click(UI::EventParams &e); + UI::EventReturn OnNumberClick(UI::EventParams &e); UI::EventReturn OnPointClick(UI::EventParams &e); UI::EventReturn OnDeleteClick(UI::EventParams &e); UI::EventReturn OnDeleteAllClick(UI::EventParams &e); - UI::EventReturn OnOKClick(UI::EventParams &e); - UI::EventReturn OnCancelClick(UI::EventParams &e); + + std::string *value_; + std::string currentValue_; + UI::TextView *addrView_; }; diff --git a/ext/native/ui/ui_screen.h b/ext/native/ui/ui_screen.h index c044e961a0..1d2dfa4399 100644 --- a/ext/native/ui/ui_screen.h +++ b/ext/native/ui/ui_screen.h @@ -225,7 +225,7 @@ private: class TextEditPopupScreen : public PopupScreen { public: - TextEditPopupScreen(std::string *value, std::string &placeholder, const std::string &title, int maxLen) + TextEditPopupScreen(std::string *value, const std::string &placeholder, const std::string &title, int maxLen) : PopupScreen(title, "OK", "Cancel"), value_(value), placeholder_(placeholder), maxLen_(maxLen) {} virtual void CreatePopupContents(ViewGroup *parent) override;