diff options
Diffstat (limited to 'Source/Core/DolphinQt/Config/ControllerInterface/DualShockUDPClientWidget.cpp')
| -rw-r--r-- | Source/Core/DolphinQt/Config/ControllerInterface/DualShockUDPClientWidget.cpp | 95 |
1 files changed, 40 insertions, 55 deletions
diff --git a/Source/Core/DolphinQt/Config/ControllerInterface/DualShockUDPClientWidget.cpp b/Source/Core/DolphinQt/Config/ControllerInterface/DualShockUDPClientWidget.cpp index 90237057e0..83d7f506c7 100644 --- a/Source/Core/DolphinQt/Config/ControllerInterface/DualShockUDPClientWidget.cpp +++ b/Source/Core/DolphinQt/Config/ControllerInterface/DualShockUDPClientWidget.cpp @@ -11,10 +11,9 @@ #include <QListWidget> #include <QPushButton> -#include "Common/Config/Config.h" -#include "DolphinQt/Config/ControllerInterface/DualShockUDPClientAddServerDialog.h" +#include "DolphinQt/Config/ControllerInterface/DualShockUDPClientEditServerDialog.h" +#include "DolphinQt/Config/ControllerInterface/DualShockUDPSettings.h" #include "DolphinQt/QtUtils/NonDefaultQPushButton.h" -#include "InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.h" DualShockUDPClientWidget::DualShockUDPClientWidget() { @@ -27,27 +26,26 @@ void DualShockUDPClientWidget::CreateWidgets() auto* main_layout = new QVBoxLayout; m_servers_enabled = new QCheckBox(tr("Enable")); - m_servers_enabled->setChecked(Config::Get(ciface::DualShockUDPClient::Settings::SERVERS_ENABLED)); + m_servers_enabled->setChecked(DualShockUDPSettings::IsEnabled()); main_layout->addWidget(m_servers_enabled, 0, {}); m_server_list = new QListWidget(); main_layout->addWidget(m_server_list); m_add_server = new NonDefaultQPushButton(tr("Add...")); - m_add_server->setEnabled(m_servers_enabled->isChecked()); - + m_edit_server = new NonDefaultQPushButton(tr("Edit")); m_remove_server = new NonDefaultQPushButton(tr("Remove")); - m_remove_server->setEnabled(m_servers_enabled->isChecked()); QHBoxLayout* hlayout = new QHBoxLayout; hlayout->addStretch(); hlayout->addWidget(m_add_server); + hlayout->addWidget(m_edit_server); hlayout->addWidget(m_remove_server); main_layout->addItem(hlayout); auto* description = - new QLabel(tr("DSU protocol enables the use of input and motion data from compatible " + new QLabel(tr("The DSU protocol enables the use of input and motion data from compatible " "sources, like PlayStation, Nintendo Switch and Steam controllers.<br><br>" "For setup instructions, " "<a href=\"https://wiki.dolphin-emu.org/index.php?title=DSU_Client\">" @@ -65,82 +63,69 @@ void DualShockUDPClientWidget::CreateWidgets() void DualShockUDPClientWidget::ConnectWidgets() { - connect(m_servers_enabled, &QCheckBox::clicked, this, - &DualShockUDPClientWidget::OnServersToggled); connect(m_add_server, &QPushButton::clicked, this, &DualShockUDPClientWidget::OnServerAdded); + connect(m_edit_server, &QPushButton::clicked, this, &DualShockUDPClientWidget::OnServerEdited); connect(m_remove_server, &QPushButton::clicked, this, &DualShockUDPClientWidget::OnServerRemoved); + connect(m_server_list, &QListWidget::currentRowChanged, this, + &DualShockUDPClientWidget::OnServerSelection); + connect(m_servers_enabled, &QCheckBox::clicked, this, + &DualShockUDPClientWidget::OnServersToggled); +} + +void DualShockUDPClientWidget::SetButtonEnableStates() +{ + const bool has_selection = m_server_list->currentRow() != -1; + m_edit_server->setEnabled(has_selection); + m_remove_server->setEnabled(has_selection); } void DualShockUDPClientWidget::RefreshServerList() { m_server_list->clear(); - const auto server_address_setting = - Config::Get(ciface::DualShockUDPClient::Settings::SERVER_ADDRESS); - const auto server_port_setting = Config::Get(ciface::DualShockUDPClient::Settings::SERVER_PORT); - - // Update our servers setting if the user is using old configuration - if (!server_address_setting.empty() && server_port_setting != 0) + for (const auto& server : DualShockUDPSettings::GetServers()) { - const auto& servers_setting = Config::Get(ciface::DualShockUDPClient::Settings::SERVERS); - Config::SetBaseOrCurrent(ciface::DualShockUDPClient::Settings::SERVERS, - servers_setting + fmt::format("{}:{}:{};", "DS4", - server_address_setting, - server_port_setting)); - Config::SetBase(ciface::DualShockUDPClient::Settings::SERVER_ADDRESS, ""); - Config::SetBase(ciface::DualShockUDPClient::Settings::SERVER_PORT, 0); - } - - const auto& servers_setting = Config::Get(ciface::DualShockUDPClient::Settings::SERVERS); - const auto server_details = SplitString(servers_setting, ';'); - for (const std::string& server_detail : server_details) - { - const auto server_info = SplitString(server_detail, ':'); - if (server_info.size() < 3) - continue; - QListWidgetItem* list_item = new QListWidgetItem(QString::fromStdString( - fmt::format("{}:{} - {}", server_info[1], server_info[2], server_info[0]))); + fmt::format("{}:{} - {}", server.description, server.server_address, server.server_port))); m_server_list->addItem(list_item); } + + SetButtonEnableStates(); + emit ConfigChanged(); } void DualShockUDPClientWidget::OnServerAdded() { - DualShockUDPClientAddServerDialog add_server_dialog(this); - connect(&add_server_dialog, &DualShockUDPClientAddServerDialog::accepted, this, + DualShockUDPClientEditServerDialog add_server_dialog(this, std::nullopt); + connect(&add_server_dialog, &DualShockUDPClientEditServerDialog::accepted, this, &DualShockUDPClientWidget::RefreshServerList); add_server_dialog.exec(); } +void DualShockUDPClientWidget::OnServerEdited() +{ + DualShockUDPClientEditServerDialog edit_server_dialog(this, m_server_list->currentRow()); + connect(&edit_server_dialog, &DualShockUDPClientEditServerDialog::accepted, this, + &DualShockUDPClientWidget::RefreshServerList); + edit_server_dialog.exec(); +} + void DualShockUDPClientWidget::OnServerRemoved() { const int row_to_remove = m_server_list->currentRow(); - const auto& servers_setting = Config::Get(ciface::DualShockUDPClient::Settings::SERVERS); - const auto server_details = SplitString(servers_setting, ';'); - - std::string new_server_setting; - for (int i = 0; i < m_server_list->count(); i++) - { - if (i == row_to_remove) - { - continue; - } - - new_server_setting += server_details[i] + ';'; - } - - Config::SetBaseOrCurrent(ciface::DualShockUDPClient::Settings::SERVERS, new_server_setting); + DualShockUDPSettings::RemoveServer(row_to_remove); RefreshServerList(); } +void DualShockUDPClientWidget::OnServerSelection() +{ + SetButtonEnableStates(); +} + void DualShockUDPClientWidget::OnServersToggled() { - bool checked = m_servers_enabled->isChecked(); - Config::SetBaseOrCurrent(ciface::DualShockUDPClient::Settings::SERVERS_ENABLED, checked); - m_add_server->setEnabled(checked); - m_remove_server->setEnabled(checked); + DualShockUDPSettings::SetEnabled(m_servers_enabled->isChecked()); } |
