summaryrefslogtreecommitdiffhomepage
path: root/StarsEx/NetAddrDlg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'StarsEx/NetAddrDlg.cpp')
-rw-r--r--StarsEx/NetAddrDlg.cpp65
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;
+ }
+}