Skip to content

Commit

Permalink
Qt: Implement button mapping dialogs
Browse files Browse the repository at this point in the history
  • Loading branch information
spycrab committed May 20, 2017
1 parent faae898 commit ec29706
Show file tree
Hide file tree
Showing 24 changed files with 1,696 additions and 3 deletions.
9 changes: 9 additions & 0 deletions Source/Core/DolphinQt2/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,15 @@ set(SRCS
Config/ControllersWindow.cpp
Config/FilesystemWidget.cpp
Config/InfoWidget.cpp
Config/Mapping/GCKeyboardEmu.cpp
Config/Mapping/GCPadEmu.cpp
Config/Mapping/GCPadWiiU.cpp
Config/Mapping/MappingButton.cpp
Config/Mapping/MappingWidget.cpp
Config/Mapping/MappingWindow.cpp
Config/Mapping/WiimoteEmuExtension.cpp
Config/Mapping/WiimoteEmuGeneral.cpp
Config/Mapping/WiimoteEmuMotionControl.cpp
Config/PathDialog.cpp
Config/PropertiesDialog.cpp
Config/SettingsWindow.cpp
Expand Down
34 changes: 32 additions & 2 deletions Source/Core/DolphinQt2/Config/ControllersWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "Core/IOS/IOS.h"
#include "Core/IOS/USB/Bluetooth/BTReal.h"
#include "Core/NetPlayProto.h"
#include "DolphinQt2/Config/Mapping/MappingWindow.h"
#include "DolphinQt2/Settings.h"
#include "UICommon/UICommon.h"

Expand Down Expand Up @@ -79,6 +80,12 @@ ControllersWindow::ControllersWindow(QWidget* parent)
CreateMainLayout();
LoadSettings();
ConnectWidgets();

for (size_t i = 0; i < m_gc_mappings.size(); i++)
m_gc_mappings[i] = new MappingWindow(this, static_cast<int>(i));

for (size_t i = 0; i < m_wiimote_mappings.size(); i++)
m_wiimote_mappings[i] = new MappingWindow(this, static_cast<int>(i));
}

void ControllersWindow::CreateGamecubeLayout()
Expand Down Expand Up @@ -388,20 +395,36 @@ void ControllersWindow::OnGCPadConfigure()
break;
}

MappingWindow::Type type;

switch (m_gc_controller_boxes[index]->currentIndex())
{
case 0: // None
case 6: // GBA
return;
case 1: // Standard Controller
type = MappingWindow::Type::MAPPING_GCPAD;
break;
case 2: // GameCube Adapter for Wii U
type = MappingWindow::Type::MAPPING_GCPAD_WIIU;
break;
case 3: // Steering Wheel
type = MappingWindow::Type::MAPPING_GC_STEERINGWHEEL;
break;
case 4: // Dance Mat
type = MappingWindow::Type::MAPPING_GC_DANCEMAT;
break;
case 5: // DK Bongos
type = MappingWindow::Type::MAPPING_GC_BONGOS;
break;
case 7: // Keyboard
UnimplementedButton();
type = MappingWindow::Type::MAPPING_GC_KEYBOARD;
break;
default:
return;
}
m_gc_mappings[index]->ChangeMappingType(type);
m_gc_mappings[index]->exec();
}

void ControllersWindow::OnWiimoteConfigure()
Expand All @@ -413,16 +436,23 @@ void ControllersWindow::OnWiimoteConfigure()
break;
}

MappingWindow::Type type;
switch (m_wiimote_boxes[index]->currentIndex())
{
case 0: // None
case 2: // Real Wii Remote
return;
case 1: // Emulated Wii Remote
type = MappingWindow::Type::MAPPING_WIIMOTE_EMU;
break;
case 3: // Hybrid Wii Remote
UnimplementedButton();
type = MappingWindow::Type::MAPPING_WIIMOTE_HYBRID;
break;
default:
return;
}
m_wiimote_mappings[index]->ChangeMappingType(type);
m_wiimote_mappings[index]->exec();
}

void ControllersWindow::UnimplementedButton()
Expand Down
3 changes: 3 additions & 0 deletions Source/Core/DolphinQt2/Config/ControllersWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

#include <array>

class MappingWindow;
class QDialogButtonBox;
class QCheckBox;
class QComboBox;
Expand Down Expand Up @@ -55,6 +56,7 @@ class ControllersWindow final : public QDialog
QDialogButtonBox* m_button_box;

// Gamecube
std::array<MappingWindow*, 4> m_gc_mappings;
QGroupBox* m_gc_box;
QLabel* m_gc_label;
QFormLayout* m_gc_layout;
Expand All @@ -63,6 +65,7 @@ class ControllersWindow final : public QDialog
std::array<QHBoxLayout*, 4> m_gc_groups;

// Wii Remote
std::array<MappingWindow*, 4> m_wiimote_mappings;
QGroupBox* m_wiimote_box;
QLabel* m_wii_label;
QFormLayout* m_wiimote_layout;
Expand Down
66 changes: 66 additions & 0 deletions Source/Core/DolphinQt2/Config/Mapping/GCKeyboardEmu.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
// Copyright 2017 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.

#include <QFormLayout>
#include <QGroupBox>
#include <QHBoxLayout>
#include <QVBoxLayout>

#include "DolphinQt2/Config/Mapping/GCKeyboardEmu.h"
#include "InputCommon/InputConfig.h"

#include "Core/HW/GCKeyboard.h"
#include "Core/HW/GCKeyboardEmu.h"

GCKeyboardEmu::GCKeyboardEmu(MappingWindow* window) : MappingWidget(window)
{
Keyboard::Initialize();

CreateMainLayout();
}

void GCKeyboardEmu::CreateMainLayout()
{
m_main_layout = new QHBoxLayout();

m_main_layout->addWidget(
CreateGroupBox(QStringLiteral(""), Keyboard::GetGroup(GetPort(), KeyboardGroup::Kb0x)));
m_main_layout->addWidget(
CreateGroupBox(QStringLiteral(""), Keyboard::GetGroup(GetPort(), KeyboardGroup::Kb1x)));
m_main_layout->addWidget(
CreateGroupBox(QStringLiteral(""), Keyboard::GetGroup(GetPort(), KeyboardGroup::Kb2x)));
m_main_layout->addWidget(
CreateGroupBox(QStringLiteral(""), Keyboard::GetGroup(GetPort(), KeyboardGroup::Kb3x)));
m_main_layout->addWidget(
CreateGroupBox(QStringLiteral(""), Keyboard::GetGroup(GetPort(), KeyboardGroup::Kb4x)));

auto* vbox_layout = new QVBoxLayout();
auto* options_box =
CreateGroupBox(tr("Options"), Keyboard::GetGroup(GetPort(), KeyboardGroup::Options));

options_box->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);

vbox_layout->addWidget(
CreateGroupBox(QStringLiteral(""), Keyboard::GetGroup(GetPort(), KeyboardGroup::Kb5x)));
vbox_layout->addWidget(options_box);

m_main_layout->addLayout(vbox_layout);

setLayout(m_main_layout);
}

void GCKeyboardEmu::LoadSettings()
{
Keyboard::LoadConfig();
}

void GCKeyboardEmu::SaveSettings()
{
Keyboard::GetConfig()->SaveConfig();
}

InputConfig* GCKeyboardEmu::GetConfig()
{
return Keyboard::GetConfig();
}
34 changes: 34 additions & 0 deletions Source/Core/DolphinQt2/Config/Mapping/GCKeyboardEmu.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// Copyright 2017 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.

#include "DolphinQt2/Config/Mapping/MappingWidget.h"

class QCheckBox;
class QFormLayout;
class QGroupBox;
class QHBoxLayout;
class QLabel;
class QVBoxLayout;

class GCKeyboardEmu final : public MappingWidget
{
public:
explicit GCKeyboardEmu(MappingWindow* window);

InputConfig* GetConfig() override;

private:
void LoadSettings() override;
void SaveSettings() override;
void CreateButtonsLayout();
void CreateControlstickLayout();
void CreateCStickLayout();
void CreateTriggersLayout();
void CreateDPadLayout();
void CreateMainLayout();
void ConnectWidgets();

// Main
QHBoxLayout* m_main_layout;
};
58 changes: 58 additions & 0 deletions Source/Core/DolphinQt2/Config/Mapping/GCPadEmu.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
// Copyright 2017 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.

#include <QFormLayout>
#include <QGroupBox>
#include <QHBoxLayout>
#include <QVBoxLayout>

#include "DolphinQt2/Config/Mapping/GCPadEmu.h"
#include "InputCommon/InputConfig.h"

#include "Core/HW/GCPad.h"
#include "Core/HW/GCPadEmu.h"

GCPadEmu::GCPadEmu(MappingWindow* window) : MappingWidget(window)
{
Pad::Initialize();

CreateMainLayout();
}

void GCPadEmu::CreateMainLayout()
{
m_main_layout = new QHBoxLayout();

auto* hbox_layout = new QVBoxLayout();

hbox_layout->addWidget(
CreateGroupBox(tr("Triggers"), Pad::GetGroup(GetPort(), PadGroup::Triggers)));
hbox_layout->addWidget(CreateGroupBox(tr("Rumble"), Pad::GetGroup(GetPort(), PadGroup::Rumble)));

m_main_layout->addWidget(
CreateGroupBox(tr("Buttons"), Pad::GetGroup(GetPort(), PadGroup::Buttons)));
m_main_layout->addWidget(
CreateGroupBox(tr("Control Stick"), Pad::GetGroup(GetPort(), PadGroup::MainStick)));
m_main_layout->addWidget(
CreateGroupBox(tr("C-Stick"), Pad::GetGroup(GetPort(), PadGroup::CStick)));
m_main_layout->addWidget(CreateGroupBox(tr("D-Pad"), Pad::GetGroup(GetPort(), PadGroup::DPad)));
m_main_layout->addItem(hbox_layout);

setLayout(m_main_layout);
}

void GCPadEmu::LoadSettings()
{
Pad::LoadConfig();
}

void GCPadEmu::SaveSettings()
{
Pad::GetConfig()->SaveConfig();
}

InputConfig* GCPadEmu::GetConfig()
{
return Pad::GetConfig();
}
57 changes: 57 additions & 0 deletions Source/Core/DolphinQt2/Config/Mapping/GCPadEmu.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
// Copyright 2017 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.

#include "DolphinQt2/Config/Mapping/MappingWidget.h"

class QCheckBox;
class QFormLayout;
class QGroupBox;
class QHBoxLayout;
class QLabel;
class QVBoxLayout;

class GCPadEmu final : public MappingWidget
{
public:
explicit GCPadEmu(MappingWindow* window);

InputConfig* GetConfig() override;

private:
void LoadSettings() override;
void SaveSettings() override;
void CreateButtonsLayout();
void CreateControlstickLayout();
void CreateCStickLayout();
void CreateTriggersLayout();
void CreateDPadLayout();
void CreateMainLayout();
void ConnectWidgets();

// Main
QHBoxLayout* m_main_layout;

// Buttons
QGroupBox* m_buttons_box;
QFormLayout* m_buttons_layout;

// Control Stick
QGroupBox* m_controlstick_box;
QFormLayout* m_controlstick_layout;
// TODO Add missing settings

// C Stick
QGroupBox* m_cstick_box;
QFormLayout* m_cstick_layout;
// TODO Add missing settings

// Triggers
QGroupBox* m_triggers_box;
QFormLayout* m_triggers_layout;
// TODO Add missing settings

// D-Pad
QGroupBox* m_dpad_box;
QFormLayout* m_dpad_layout;
};

0 comments on commit ec29706

Please sign in to comment.