summaryrefslogtreecommitdiff
path: root/Source/Core/DolphinQt/Config/Mapping/MappingWindow.cpp
diff options
context:
space:
mode:
authorJMC47 <JMC4789@gmail.com>2019-03-26 20:30:30 -0400
committerGitHub <noreply@github.com>2019-03-26 20:30:30 -0400
commita1f53716dc96fa5eccf1702b4f6e91861bdb407d (patch)
tree1edf7c7bcff9e2b3edf1dddd06d6da36044c834a /Source/Core/DolphinQt/Config/Mapping/MappingWindow.cpp
parente222b9195380a6967a101806bbac451a6cb2454f (diff)
parent9cb17b062c763e3e00425c9d324874509bbaf8c6 (diff)
Merge pull request #7893 from jordan-woyak/mapping-ui-cleanup
DolphinQ: Mapping UI cleanups.
Diffstat (limited to 'Source/Core/DolphinQt/Config/Mapping/MappingWindow.cpp')
-rw-r--r--Source/Core/DolphinQt/Config/Mapping/MappingWindow.cpp79
1 files changed, 51 insertions, 28 deletions
diff --git a/Source/Core/DolphinQt/Config/Mapping/MappingWindow.cpp b/Source/Core/DolphinQt/Config/Mapping/MappingWindow.cpp
index 1317613ace..403fbed993 100644
--- a/Source/Core/DolphinQt/Config/Mapping/MappingWindow.cpp
+++ b/Source/Core/DolphinQt/Config/Mapping/MappingWindow.cpp
@@ -13,13 +13,13 @@
#include <QTabWidget>
#include <QVBoxLayout>
+#include "Core/Core.h"
+
#include "Common/FileSearch.h"
#include "Common/FileUtil.h"
#include "Common/IniFile.h"
#include "Common/StringUtil.h"
-#include "Core/Core.h"
-
#include "DolphinQt/Config/Mapping/GCKeyboardEmu.h"
#include "DolphinQt/Config/Mapping/GCMicrophone.h"
#include "DolphinQt/Config/Mapping/GCPadEmu.h"
@@ -58,6 +58,8 @@ MappingWindow::MappingWindow(QWidget* parent, Type type, int port_num)
CreateMainLayout();
ConnectWidgets();
SetMappingType(type);
+
+ emit ConfigChanged();
}
void MappingWindow::CreateDevicesLayout()
@@ -141,17 +143,21 @@ void MappingWindow::ConnectWidgets()
{
connect(&Settings::Instance(), &Settings::DevicesChanged, this,
&MappingWindow::OnGlobalDevicesChanged);
- connect(m_button_box, &QDialogButtonBox::rejected, this, &QDialog::reject);
- connect(m_devices_refresh, &QPushButton::clicked, this, &MappingWindow::RefreshDevices);
+ connect(this, &MappingWindow::ConfigChanged, this, &MappingWindow::OnGlobalDevicesChanged);
connect(m_devices_combo, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
- this, &MappingWindow::OnDeviceChanged);
+ this, &MappingWindow::OnSelectDevice);
+
+ connect(m_devices_refresh, &QPushButton::clicked, this, &MappingWindow::RefreshDevices);
+
connect(m_reset_clear, &QPushButton::clicked, this, &MappingWindow::OnClearFieldsPressed);
connect(m_reset_default, &QPushButton::clicked, this, &MappingWindow::OnDefaultFieldsPressed);
connect(m_profiles_save, &QPushButton::clicked, this, &MappingWindow::OnSaveProfilePressed);
connect(m_profiles_load, &QPushButton::clicked, this, &MappingWindow::OnLoadProfilePressed);
connect(m_profiles_delete, &QPushButton::clicked, this, &MappingWindow::OnDeleteProfilePressed);
+
// We currently use the "Close" button as an "Accept" button so we must save on reject.
connect(this, &QDialog::rejected, [this] { emit Save(); });
+ connect(m_button_box, &QDialogButtonBox::rejected, this, &QDialog::reject);
}
void MappingWindow::OnDeleteProfilePressed()
@@ -206,9 +212,7 @@ void MappingWindow::OnLoadProfilePressed()
m_controller->LoadConfig(ini.GetOrCreateSection("Profile"));
m_controller->UpdateReferences(g_controller_interface);
- emit Update();
-
- RefreshDevices();
+ emit ConfigChanged();
}
void MappingWindow::OnSaveProfilePressed()
@@ -235,13 +239,16 @@ void MappingWindow::OnSaveProfilePressed()
}
}
-void MappingWindow::OnDeviceChanged(int index)
+void MappingWindow::OnSelectDevice(int index)
{
if (IsMappingAllDevices())
return;
- const auto device = m_devices_combo->currentText().toStdString();
+ // Original string is stored in the "user-data".
+ const auto device = m_devices_combo->currentData().toString().toStdString();
+
m_controller->SetDefaultDevice(device);
+ m_controller->UpdateReferences(g_controller_interface);
}
bool MappingWindow::IsMappingAllDevices() const
@@ -256,26 +263,42 @@ void MappingWindow::RefreshDevices()
void MappingWindow::OnGlobalDevicesChanged()
{
+ const auto old_state = m_devices_combo->blockSignals(true);
+
m_devices_combo->clear();
- Core::RunAsCPUThread([&] {
- m_controller->UpdateReferences(g_controller_interface);
+ for (const auto& name : g_controller_interface.GetAllDeviceStrings())
+ {
+ const auto qname = QString::fromStdString(name);
+ m_devices_combo->addItem(qname, qname);
+ }
- const auto default_device = m_controller->GetDefaultDevice().ToString();
+ m_devices_combo->insertSeparator(m_devices_combo->count());
- if (!default_device.empty())
- m_devices_combo->addItem(QString::fromStdString(default_device));
+ const auto default_device = m_controller->GetDefaultDevice().ToString();
- for (const auto& name : g_controller_interface.GetAllDeviceStrings())
+ if (!default_device.empty())
+ {
+ const auto default_device_index =
+ m_devices_combo->findText(QString::fromStdString(default_device));
+
+ if (default_device_index != -1)
+ {
+ m_devices_combo->setCurrentIndex(default_device_index);
+ }
+ else
{
- if (name != default_device)
- m_devices_combo->addItem(QString::fromStdString(name));
+ // Selected device is not currently attached.
+ const auto qname = QString::fromStdString(default_device);
+ m_devices_combo->addItem(
+ QStringLiteral("[") + tr("disconnected") + QStringLiteral("] ") + qname, qname);
+ m_devices_combo->setCurrentIndex(m_devices_combo->count() - 1);
}
+ }
- m_devices_combo->addItem(tr("All devices"));
+ m_devices_combo->addItem(tr("All devices"));
- m_devices_combo->setCurrentIndex(0);
- });
+ m_devices_combo->blockSignals(old_state);
}
void MappingWindow::SetMappingType(MappingWindow::Type type)
@@ -372,16 +395,11 @@ ControllerEmu::EmulatedController* MappingWindow::GetController() const
return m_controller;
}
-std::shared_ptr<ciface::Core::Device> MappingWindow::GetDevice() const
-{
- return g_controller_interface.FindDevice(GetController()->GetDefaultDevice());
-}
-
void MappingWindow::OnDefaultFieldsPressed()
{
m_controller->LoadDefaults(g_controller_interface);
m_controller->UpdateReferences(g_controller_interface);
- emit Update();
+ emit ConfigChanged();
emit Save();
}
@@ -389,9 +407,14 @@ void MappingWindow::OnClearFieldsPressed()
{
// Loading an empty inifile section clears everything.
IniFile::Section sec;
+
+ // Keep the currently selected device.
+ const auto default_device = m_controller->GetDefaultDevice();
m_controller->LoadConfig(&sec);
+ m_controller->SetDefaultDevice(default_device);
+
m_controller->UpdateReferences(g_controller_interface);
- emit Update();
+ emit ConfigChanged();
emit Save();
}