mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-04-20 03:24:59 +00:00
DolphinQt: Lay out the Controllers window horizontally and dynamically hide the Emulated/Passthrough BT widgets.
This commit is contained in:
parent
0afbeae70c
commit
359ea94b9e
3 changed files with 75 additions and 58 deletions
|
@ -31,16 +31,19 @@ void ControllersWindow::showEvent(QShowEvent* event)
|
|||
|
||||
void ControllersWindow::CreateMainLayout()
|
||||
{
|
||||
auto* layout = new QVBoxLayout();
|
||||
m_button_box = new QDialogButtonBox(QDialogButtonBox::Close);
|
||||
auto* const grid = new QGridLayout;
|
||||
grid->addWidget(m_gamecube_controllers, 0, 0);
|
||||
grid->addWidget(m_wiimote_controllers, 0, 1, 2, 1);
|
||||
grid->addWidget(m_common, 1, 0);
|
||||
|
||||
auto* const layout = new QVBoxLayout;
|
||||
layout->addLayout(grid);
|
||||
|
||||
layout->addWidget(m_gamecube_controllers);
|
||||
layout->addWidget(m_wiimote_controllers);
|
||||
layout->addWidget(m_common);
|
||||
layout->addStretch();
|
||||
m_button_box = new QDialogButtonBox(QDialogButtonBox::Close);
|
||||
layout->addWidget(m_button_box);
|
||||
|
||||
WrapInScrollArea(this, layout);
|
||||
setLayout(layout);
|
||||
}
|
||||
|
||||
void ControllersWindow::ConnectWidgets()
|
||||
|
|
|
@ -14,9 +14,6 @@
|
|||
#include <QScreen>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
#include <map>
|
||||
#include <optional>
|
||||
|
||||
#include "Common/Config/Config.h"
|
||||
|
||||
#include "Core/Config/MainSettings.h"
|
||||
|
@ -26,7 +23,6 @@
|
|||
#include "Core/HW/Wiimote.h"
|
||||
#include "Core/HW/WiimoteReal/WiimoteReal.h"
|
||||
#include "Core/IOS/IOS.h"
|
||||
#include "Core/IOS/USB/Bluetooth/BTReal.h"
|
||||
#include "Core/NetPlayProto.h"
|
||||
#include "Core/System.h"
|
||||
#include "Core/WiiUtils.h"
|
||||
|
@ -38,8 +34,6 @@
|
|||
#include "DolphinQt/QtUtils/SignalBlocking.h"
|
||||
#include "DolphinQt/Settings.h"
|
||||
|
||||
#include "UICommon/UICommon.h"
|
||||
|
||||
WiimoteControllersWidget::WiimoteControllersWidget(QWidget* parent) : QWidget(parent)
|
||||
{
|
||||
CreateLayout();
|
||||
|
@ -107,8 +101,6 @@ void WiimoteControllersWidget::CreateLayout()
|
|||
m_wiimote_sync = new NonDefaultQPushButton(tr("Sync"));
|
||||
m_wiimote_reset = new NonDefaultQPushButton(tr("Reset"));
|
||||
m_wiimote_refresh = new NonDefaultQPushButton(tr("Refresh"));
|
||||
m_wiimote_pt_labels[0] = new QLabel(tr("Sync real Wii Remotes and pair them"));
|
||||
m_wiimote_pt_labels[1] = new QLabel(tr("Reset all saved Wii Remote pairings"));
|
||||
m_wiimote_emu = new QRadioButton(tr("Emulate the Wii's Bluetooth adapter"));
|
||||
m_wiimote_continuous_scanning = new QCheckBox(tr("Continuous Scanning"));
|
||||
m_wiimote_real_balance_board = new QCheckBox(tr("Real Balance Board"));
|
||||
|
@ -120,37 +112,48 @@ void WiimoteControllersWidget::CreateLayout()
|
|||
GetLayoutHorizontalSpacing(m_wiimote_layout));
|
||||
m_wiimote_layout->setColumnStretch(2, 1);
|
||||
|
||||
// Passthrough BT
|
||||
m_wiimote_layout->addWidget(m_wiimote_passthrough, m_wiimote_layout->rowCount(), 0, 1, -1);
|
||||
|
||||
int sync_row = m_wiimote_layout->rowCount();
|
||||
m_wiimote_layout->addWidget(m_wiimote_pt_labels[0], sync_row, 1, 1, 2);
|
||||
m_wiimote_layout->addWidget(m_wiimote_sync, sync_row, 3);
|
||||
|
||||
int reset_row = m_wiimote_layout->rowCount();
|
||||
m_wiimote_layout->addWidget(m_wiimote_pt_labels[1], reset_row, 1, 1, 2);
|
||||
m_wiimote_layout->addWidget(m_wiimote_reset, reset_row, 3);
|
||||
|
||||
// Emulated BT
|
||||
m_wiimote_layout->addWidget(m_wiimote_emu, m_wiimote_layout->rowCount(), 0, 1, -1);
|
||||
|
||||
for (size_t i = 0; i < m_wiimote_groups.size(); i++)
|
||||
// Passthrough BT
|
||||
m_wiimote_layout->addWidget(m_wiimote_passthrough, m_wiimote_layout->rowCount(), 0, 1, -1);
|
||||
|
||||
m_emulated_bt_contents = new QWidget;
|
||||
auto* const emulated_bt_layout = new QGridLayout{m_emulated_bt_contents};
|
||||
m_wiimote_layout->addWidget(m_emulated_bt_contents, m_wiimote_layout->rowCount(), 0, 1, -1);
|
||||
|
||||
for (size_t i = 0; i < MAX_WIIMOTES; i++)
|
||||
{
|
||||
auto* wm_label = m_wiimote_labels[i] = new QLabel(tr("Wii Remote %1").arg(i + 1));
|
||||
auto* wm_label = new QLabel(tr("Wii Remote %1").arg(i + 1));
|
||||
auto* wm_box = m_wiimote_boxes[i] = new QComboBox();
|
||||
auto* wm_button = m_wiimote_buttons[i] = new NonDefaultQPushButton(tr("Configure"));
|
||||
|
||||
for (const auto& item : {tr("None"), tr("Emulated Wii Remote"), tr("Real Wii Remote")})
|
||||
wm_box->addItem(item);
|
||||
|
||||
int wm_row = m_wiimote_layout->rowCount();
|
||||
m_wiimote_layout->addWidget(wm_label, wm_row, 1);
|
||||
m_wiimote_layout->addWidget(wm_box, wm_row, 2);
|
||||
m_wiimote_layout->addWidget(wm_button, wm_row, 3);
|
||||
int wm_row = emulated_bt_layout->rowCount();
|
||||
emulated_bt_layout->addWidget(wm_label, wm_row, 1);
|
||||
emulated_bt_layout->addWidget(wm_box, wm_row, 2);
|
||||
emulated_bt_layout->addWidget(wm_button, wm_row, 3);
|
||||
}
|
||||
|
||||
m_wiimote_layout->addWidget(m_wiimote_real_balance_board, m_wiimote_layout->rowCount(), 1, 1, -1);
|
||||
m_wiimote_layout->addWidget(m_wiimote_speaker_data, m_wiimote_layout->rowCount(), 1, 1, -1);
|
||||
emulated_bt_layout->addWidget(m_wiimote_real_balance_board, emulated_bt_layout->rowCount(), 1, 1,
|
||||
-1);
|
||||
emulated_bt_layout->addWidget(m_wiimote_speaker_data, emulated_bt_layout->rowCount(), 1, 1, -1);
|
||||
|
||||
m_passthru_bt_contents = new QWidget;
|
||||
auto* const passthru_bt_layout = new QGridLayout{m_passthru_bt_contents};
|
||||
m_wiimote_layout->addWidget(m_passthru_bt_contents, m_wiimote_layout->rowCount(), 0, 1, -1);
|
||||
|
||||
int sync_row = passthru_bt_layout->rowCount();
|
||||
passthru_bt_layout->addWidget(new QLabel(tr("Sync real Wii Remotes and pair them")), sync_row, 1,
|
||||
1, 2);
|
||||
passthru_bt_layout->addWidget(m_wiimote_sync, sync_row, 3);
|
||||
|
||||
int reset_row = passthru_bt_layout->rowCount();
|
||||
passthru_bt_layout->addWidget(new QLabel(tr("Reset all saved Wii Remote pairings")), reset_row, 1,
|
||||
1, 2);
|
||||
passthru_bt_layout->addWidget(m_wiimote_reset, reset_row, 3);
|
||||
|
||||
m_wiimote_layout->addWidget(m_wiimote_ciface, m_wiimote_layout->rowCount(), 0, 1, -1);
|
||||
|
||||
|
@ -196,7 +199,7 @@ void WiimoteControllersWidget::ConnectWidgets()
|
|||
connect(m_wiimote_refresh, &QPushButton::clicked, this,
|
||||
&WiimoteControllersWidget::OnWiimoteRefreshPressed);
|
||||
|
||||
for (size_t i = 0; i < m_wiimote_groups.size(); i++)
|
||||
for (size_t i = 0; i < MAX_WIIMOTES; i++)
|
||||
{
|
||||
connect(m_wiimote_boxes[i], &QComboBox::currentIndexChanged, this, [this] {
|
||||
SaveSettings();
|
||||
|
@ -269,7 +272,7 @@ void WiimoteControllersWidget::OnWiimoteConfigure(size_t index)
|
|||
|
||||
void WiimoteControllersWidget::LoadSettings(Core::State state)
|
||||
{
|
||||
for (size_t i = 0; i < m_wiimote_groups.size(); i++)
|
||||
for (size_t i = 0; i < MAX_WIIMOTES; i++)
|
||||
{
|
||||
SignalBlocking(m_wiimote_boxes[i])
|
||||
->setCurrentIndex(int(Config::Get(Config::GetInfoForWiimoteSource(int(i)))));
|
||||
|
@ -293,40 +296,50 @@ void WiimoteControllersWidget::LoadSettings(Core::State state)
|
|||
|
||||
const bool running = state != Core::State::Uninitialized;
|
||||
|
||||
// Disable the radio buttons when running.
|
||||
m_wiimote_emu->setEnabled(!running);
|
||||
m_wiimote_passthrough->setEnabled(!running);
|
||||
|
||||
const bool running_gc = running && !Core::System::GetInstance().IsWii();
|
||||
const bool enable_passthrough = m_wiimote_passthrough->isChecked() && !running_gc;
|
||||
const bool enable_emu_bt = !m_wiimote_passthrough->isChecked() && !running_gc;
|
||||
// First hide both contents.
|
||||
// Otherwise the dialog grows to the total temporary size of both when toggled.
|
||||
m_passthru_bt_contents->hide();
|
||||
m_emulated_bt_contents->hide();
|
||||
m_passthru_bt_contents->setVisible(m_wiimote_passthrough->isChecked());
|
||||
m_emulated_bt_contents->setVisible(m_wiimote_emu->isChecked());
|
||||
|
||||
const bool is_running_gc = running && !Core::System::GetInstance().IsWii();
|
||||
|
||||
// These are not relevant in GC mode.
|
||||
m_passthru_bt_contents->setEnabled(!is_running_gc);
|
||||
m_emulated_bt_contents->setEnabled(!is_running_gc);
|
||||
|
||||
const bool is_netplay = NetPlay::IsNetPlayRunning();
|
||||
const bool running_netplay = running && is_netplay;
|
||||
|
||||
m_wiimote_sync->setEnabled(enable_passthrough);
|
||||
m_wiimote_reset->setEnabled(enable_passthrough);
|
||||
|
||||
for (auto* pt_label : m_wiimote_pt_labels)
|
||||
pt_label->setEnabled(enable_passthrough);
|
||||
const bool is_running_netplay = running && is_netplay;
|
||||
|
||||
// Disable non-local wii remotes during NetPlay.
|
||||
const int num_local_wiimotes = is_netplay ? NetPlay::NumLocalWiimotes() : 4;
|
||||
for (size_t i = 0; i < m_wiimote_groups.size(); i++)
|
||||
int num_real_wiimotes = 0;
|
||||
for (size_t i = 0; i < MAX_WIIMOTES; i++)
|
||||
{
|
||||
m_wiimote_labels[i]->setEnabled(enable_emu_bt);
|
||||
m_wiimote_boxes[i]->setEnabled(enable_emu_bt && !running_netplay);
|
||||
num_real_wiimotes += m_wiimote_boxes[i]->currentIndex() == 2;
|
||||
|
||||
m_wiimote_boxes[i]->setEnabled(!is_running_netplay);
|
||||
|
||||
const bool is_emu_wiimote = m_wiimote_boxes[i]->currentIndex() == 1;
|
||||
m_wiimote_buttons[i]->setEnabled(enable_emu_bt && is_emu_wiimote &&
|
||||
static_cast<int>(i) < num_local_wiimotes);
|
||||
m_wiimote_buttons[i]->setEnabled(is_emu_wiimote && static_cast<int>(i) < num_local_wiimotes);
|
||||
}
|
||||
|
||||
m_wiimote_real_balance_board->setEnabled(enable_emu_bt && !running_netplay);
|
||||
m_wiimote_speaker_data->setEnabled(enable_emu_bt && !running_netplay);
|
||||
num_real_wiimotes += m_wiimote_real_balance_board->isChecked();
|
||||
|
||||
m_wiimote_real_balance_board->setEnabled(!is_running_netplay);
|
||||
m_wiimote_speaker_data->setEnabled(!is_running_netplay);
|
||||
|
||||
const bool is_using_emu_bt = m_wiimote_emu->isChecked() && !is_running_gc;
|
||||
const bool ciface_wiimotes = m_wiimote_ciface->isChecked();
|
||||
|
||||
m_wiimote_refresh->setEnabled((enable_emu_bt || ciface_wiimotes) &&
|
||||
m_wiimote_continuous_scanning->setEnabled(is_using_emu_bt || ciface_wiimotes);
|
||||
m_wiimote_refresh->setEnabled(((is_using_emu_bt && num_real_wiimotes != 0) || ciface_wiimotes) &&
|
||||
!m_wiimote_continuous_scanning->isChecked());
|
||||
m_wiimote_continuous_scanning->setEnabled(enable_emu_bt || ciface_wiimotes);
|
||||
}
|
||||
|
||||
void WiimoteControllersWidget::SaveSettings()
|
||||
|
@ -346,7 +359,7 @@ void WiimoteControllersWidget::SaveSettings()
|
|||
m_wiimote_real_balance_board->isChecked() ? WiimoteSource::Real : WiimoteSource::None;
|
||||
Config::SetBaseOrCurrent(Config::WIIMOTE_BB_SOURCE, bb_source);
|
||||
|
||||
for (size_t i = 0; i < m_wiimote_groups.size(); i++)
|
||||
for (size_t i = 0; i < MAX_WIIMOTES; i++)
|
||||
{
|
||||
const int index = m_wiimote_boxes[i]->currentIndex();
|
||||
Config::SetBaseOrCurrent(Config::GetInfoForWiimoteSource(int(i)), WiimoteSource(index));
|
||||
|
|
|
@ -42,11 +42,12 @@ private:
|
|||
|
||||
QGroupBox* m_wiimote_box;
|
||||
QGridLayout* m_wiimote_layout;
|
||||
std::array<QLabel*, 4> m_wiimote_labels;
|
||||
|
||||
QWidget* m_emulated_bt_contents;
|
||||
QWidget* m_passthru_bt_contents;
|
||||
|
||||
std::array<QComboBox*, 4> m_wiimote_boxes;
|
||||
std::array<QPushButton*, 4> m_wiimote_buttons;
|
||||
std::array<QHBoxLayout*, 4> m_wiimote_groups;
|
||||
std::array<QLabel*, 2> m_wiimote_pt_labels;
|
||||
|
||||
QRadioButton* m_wiimote_emu;
|
||||
QRadioButton* m_wiimote_passthrough;
|
||||
|
|
Loading…
Add table
Reference in a new issue