summaryrefslogtreecommitdiff
path: root/Source/Core/DolphinQt/Config/ControllerInterface/DualShockUDPClientWidget.cpp
blob: 68e8a75030aca4b93a315dadfe8c0abd8d4a3272 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// Copyright 2019 Dolphin Emulator Project5~5~5~
// Licensed under GPLv2+
// Refer to the license.txt file included.

#include "DolphinQt/Config/ControllerInterface/DualShockUDPClientWidget.h"

#include <QCheckBox>
#include <QGridLayout>
#include <QGroupBox>
#include <QLabel>
#include <QLineEdit>
#include <QSpinBox>

#include "Common/Config/Config.h"
#include "InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.h"

DualShockUDPClientWidget::DualShockUDPClientWidget()
{
  CreateWidgets();
  ConnectWidgets();
}

void DualShockUDPClientWidget::CreateWidgets()
{
  auto* main_layout = new QGridLayout;

  m_server_enabled = new QCheckBox(tr("Enable"));
  m_server_enabled->setChecked(Config::Get(ciface::DualShockUDPClient::Settings::SERVER_ENABLED));

  m_server_address = new QLineEdit(
      QString::fromStdString(Config::Get(ciface::DualShockUDPClient::Settings::SERVER_ADDRESS)));
  m_server_address->setEnabled(m_server_enabled->isChecked());

  m_server_port = new QSpinBox();
  m_server_port->setMaximum(65535);
  m_server_port->setValue(Config::Get(ciface::DualShockUDPClient::Settings::SERVER_PORT));
  m_server_port->setEnabled(m_server_enabled->isChecked());

  auto* description =
      new QLabel(tr("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\">"
                    "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 DualShockUDPClientWidget::ConnectWidgets()
{
  connect(m_server_enabled, &QCheckBox::toggled, this, [this] {
    bool checked = m_server_enabled->isChecked();
    Config::SetBaseOrCurrent(ciface::DualShockUDPClient::Settings::SERVER_ENABLED, checked);
    m_server_address->setEnabled(checked);
    m_server_port->setEnabled(checked);
  });

  connect(m_server_address, &QLineEdit::editingFinished, this, [this] {
    Config::SetBaseOrCurrent(ciface::DualShockUDPClient::Settings::SERVER_ADDRESS,
                             m_server_address->text().toStdString());
  });

  connect(m_server_port, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,
          [this] {
            Config::SetBaseOrCurrent(ciface::DualShockUDPClient::Settings::SERVER_PORT,
                                     static_cast<u16>(m_server_port->value()));
          });
}