UDPServer: Add configuration UI.

Accessed through button "Alternate Input Sources" in the "Controller Settings" dialog.
This commit is contained in:
rlnilsen
2019-10-23 01:49:48 +02:00
parent 8aec424191
commit 5ff79499a5
10 changed files with 248 additions and 22 deletions

View File

@ -0,0 +1,75 @@
// Copyright 2019 Dolphin Emulator Project5~5~5~
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "DolphinQt/Config/ControllerInterface/CemuHookUDPServerWidget.h"
#include <QCheckBox>
#include <QGridLayout>
#include <QGroupBox>
#include <QLabel>
#include <QLineEdit>
#include <QSpinBox>
#include "Common/Config/Config.h"
#include "InputCommon/ControllerInterface/CemuHookUDPServer/CemuHookUDPServer.h"
CemuHookUDPServerWidget::CemuHookUDPServerWidget()
{
CreateWidgets();
ConnectWidgets();
}
void CemuHookUDPServerWidget::CreateWidgets()
{
auto* main_layout = new QGridLayout;
m_server_enabled = new QCheckBox(tr("Enable"));
m_server_enabled->setChecked(Config::Get(ciface::CemuHookUDPServer::Settings::SERVER_ENABLED));
m_server_address = new QLineEdit(
QString::fromStdString(Config::Get(ciface::CemuHookUDPServer::Settings::SERVER_ADDRESS)));
m_server_port = new QSpinBox();
m_server_port->setMaximum(65535);
m_server_port->setValue(Config::Get(ciface::CemuHookUDPServer::Settings::SERVER_PORT));
auto* description =
new QLabel(tr("UDPServer 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=UDPServer\">"
"refer to this page</a>."));
description->setTextFormat(Qt::RichText);
description->setWordWrap(true);
description->setTextInteractionFlags(Qt::TextBrowserInteraction);
description->setOpenExternalLinks(true);
main_layout->addWidget(m_server_enabled, 1, 1);
main_layout->addWidget(new QLabel(tr("Server IP Address")), 2, 1);
main_layout->addWidget(m_server_address, 2, 2);
main_layout->addWidget(new QLabel(tr("Server Port")), 3, 1);
main_layout->addWidget(m_server_port, 3, 2);
main_layout->addWidget(description, 4, 1, 1, 2);
setLayout(main_layout);
}
void CemuHookUDPServerWidget::ConnectWidgets()
{
connect(m_server_enabled, &QCheckBox::toggled, this, [this] {
Config::SetBaseOrCurrent(ciface::CemuHookUDPServer::Settings::SERVER_ENABLED,
m_server_enabled->isChecked());
});
connect(m_server_address, &QLineEdit::editingFinished, this, [this] {
Config::SetBaseOrCurrent(ciface::CemuHookUDPServer::Settings::SERVER_ADDRESS,
m_server_address->text().toStdString());
});
connect(m_server_port, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,
[this] {
Config::SetBaseOrCurrent(ciface::CemuHookUDPServer::Settings::SERVER_PORT,
static_cast<u16>(m_server_port->value()));
});
}

View File

@ -0,0 +1,26 @@
// Copyright 2019 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#pragma once
#include <QWidget>
class QCheckBox;
class QLineEdit;
class QSpinBox;
class CemuHookUDPServerWidget final : public QWidget
{
Q_OBJECT
public:
explicit CemuHookUDPServerWidget();
private:
void CreateWidgets();
void ConnectWidgets();
QCheckBox* m_server_enabled;
QLineEdit* m_server_address;
QSpinBox* m_server_port;
};

View File

@ -0,0 +1,47 @@
// Copyright 2019 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "DolphinQt/Config/ControllerInterface/ControllerInterfaceWindow.h"
#include <QDialogButtonBox>
#include <QLabel>
#include <QTabWidget>
#include <QVBoxLayout>
#if defined(CIFACE_USE_CEMUHOOKUDPSERVER)
#include "DolphinQt/Config/ControllerInterface/CemuHookUDPServerWidget.h"
#endif
ControllerInterfaceWindow::ControllerInterfaceWindow(QWidget* parent) : QDialog(parent)
{
CreateMainLayout();
setWindowTitle(tr("Alternate Input Sources"));
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
}
void ControllerInterfaceWindow::CreateMainLayout()
{
m_button_box = new QDialogButtonBox(QDialogButtonBox::Close);
connect(m_button_box, &QDialogButtonBox::rejected, this, &QDialog::reject);
m_tab_widget = new QTabWidget();
#if defined(CIFACE_USE_CEMUHOOKUDPSERVER)
m_udpserver_widget = new CemuHookUDPServerWidget();
m_tab_widget->addTab(m_udpserver_widget, tr("UDPServer")); // TODO: use GetWrappedWidget()?
#endif
auto* main_layout = new QVBoxLayout();
if (m_tab_widget->count() > 0)
{
main_layout->addWidget(m_tab_widget);
}
else
{
main_layout->addWidget(new QLabel(tr("Nothing to configure")), 0,
Qt::AlignVCenter | Qt::AlignHCenter);
}
main_layout->addWidget(m_button_box);
setLayout(main_layout);
}

View File

@ -0,0 +1,32 @@
// Copyright 2019 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#pragma once
#include <QDialog>
#include "InputCommon/ControllerInterface/ControllerInterface.h"
#if defined(CIFACE_USE_CEMUHOOKUDPSERVER)
class CemuHookUDPServerWidget;
#endif
class QTabWidget;
class QDialogButtonBox;
class ControllerInterfaceWindow final : public QDialog
{
Q_OBJECT
public:
explicit ControllerInterfaceWindow(QWidget* parent);
private:
void CreateMainLayout();
QTabWidget* m_tab_widget;
QDialogButtonBox* m_button_box;
#if defined(CIFACE_USE_CEMUHOOKUDPSERVER)
CemuHookUDPServerWidget* m_udpserver_widget;
#endif
};