diff options
Diffstat (limited to 'StarsEx/NetAddrDlg.cpp')
-rw-r--r-- | StarsEx/NetAddrDlg.cpp | 65 |
1 files changed, 46 insertions, 19 deletions
diff --git a/StarsEx/NetAddrDlg.cpp b/StarsEx/NetAddrDlg.cpp index 627ad5e..b7591e0 100644 --- a/StarsEx/NetAddrDlg.cpp +++ b/StarsEx/NetAddrDlg.cpp @@ -12,19 +12,20 @@ */ #include "NetAddrDlg.h" -#include "MenuScreen.h" -#include "NetClientConfig.h" -#include "Game.h" +#include <Text.h> + #include "Button.h" #include "EditBox.h" -#include "ListBox.h" -#include "Slider.h" -#include "Video.h" +#include "FormatUtil.h" #include "Keyboard.h" +#include "ListBox.h" +#include "MenuScreen.h" #include "Mouse.h" +#include "NetClientConfig.h" +#include "NetLobby.h" #include "ParseUtil.h" -#include "FormatUtil.h" +#include "Slider.h" // +--------------------------------------------------------------------+ // DECLARE MAPPING FUNCTIONS: @@ -34,9 +35,16 @@ DEF_MAP_CLIENT(NetAddrDlg, OnCancel); // +--------------------------------------------------------------------+ -NetAddrDlg::NetAddrDlg(Screen* s, FormDef& def, MenuScreen* mgr) -: FormWindow(s, 0, 0, s->Width(), s->Height()), manager(mgr), -btn_save(0), btn_cancel(0), edt_name(0), edt_addr(0), edt_port(0), edt_pass(0) +NetAddrDlg::NetAddrDlg(Screen* s, FormDef& def, MenuScreen* mgr) : + FormWindow(s, 0, 0, s->Width(), s->Height()), + manager {mgr}, + btn_save {nullptr}, + btn_cancel {nullptr}, + edt_name {nullptr}, + edt_addr {nullptr}, + edt_port {nullptr}, + edt_pass {nullptr}, + selected_config {NEW} { Init(def); } @@ -72,14 +80,22 @@ NetAddrDlg::RegisterControls() void NetAddrDlg::Show() { - if (!IsShown()) { - FormWindow::Show(); - + auto* config = NetClientConfig::GetInstance(); + if (selected_config != NEW && config != nullptr) { + auto* info = config->GetServerInfo(selected_config); + if (edt_name) edt_name->SetText(info->name); + if (edt_addr) edt_addr->SetText(info->hostname); + if (edt_port) edt_port->SetText(Text::format("%d", info->port)); + if (edt_pass) edt_pass->SetText(info->password); + } + else { if (edt_name) edt_name->SetText(""); if (edt_addr) edt_addr->SetText(""); if (edt_port) edt_port->SetText(""); if (edt_pass) edt_pass->SetText(""); - + } + if (!IsShown()) { + FormWindow::Show(); if (edt_name) edt_name->SetFocus(); } } @@ -103,10 +119,7 @@ NetAddrDlg::OnSave(AWEvent* event) { NetClientConfig* config = NetClientConfig::GetInstance(); - if (config && - edt_addr && edt_addr->GetText().length() > 0 && - edt_port && edt_port->GetText().length() > 0) - { + if (config && edt_addr && edt_addr->GetText().length() > 0 && edt_port && edt_port->GetText().length() > 0) { Text name; Text addr; Text pass; @@ -141,7 +154,10 @@ NetAddrDlg::OnSave(AWEvent* event) addr = SafeQuotes(buffer); } - config->AddServer(name, addr, port, pass, true); + if (selected_config == NEW) + config->AddServer(name, addr, port, pass, true); + else + config->UpdateServer(selected_config, name, addr, port, pass); config->Save(); } @@ -155,3 +171,14 @@ NetAddrDlg::OnCancel(AWEvent* event) if (manager) manager->ShowNetClientDlg(); } + + +void +NetAddrDlg::SelectConfig(int index) +{ + if (auto* config = NetClientConfig::GetInstance()) { + const auto list = config->GetServerList(); + const bool exists = (0 <= index && index < list.size()); + selected_config = exists ? index : NEW; + } +} |