Skip to content

Commit

Permalink
Qt/Mapping: Visual GCPad configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
spycrab committed May 1, 2019
1 parent 3f39aaf commit 0ef21c6
Show file tree
Hide file tree
Showing 34 changed files with 2,528 additions and 26 deletions.
12 changes: 11 additions & 1 deletion Source/Core/DolphinQt/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
find_package(Qt5 5.9 REQUIRED COMPONENTS Gui Widgets)
find_package(Qt5 5.9 REQUIRED COMPONENTS Gui Widgets Quick QuickWidgets)

set_property(TARGET Qt5::Core PROPERTY INTERFACE_COMPILE_FEATURES "")
message(STATUS "Found Qt version ${Qt5Core_VERSION}")

set(CMAKE_AUTOMOC ON)

find_package(Qt5QuickCompiler)
qtquick_compiler_add_resources(RCC_SOURCES Resources/Resources.qrc)
set_property(SOURCE ${RCC_SOURCES} PROPERTY SKIP_AUTOMOC ON)

add_executable(dolphin-emu
AboutDialog.cpp
CheatsManager.cpp
Expand Down Expand Up @@ -69,6 +73,7 @@ add_executable(dolphin-emu
Config/Mapping/MappingNumeric.cpp
Config/Mapping/MappingWidget.cpp
Config/Mapping/MappingWindow.cpp
Config/Mapping/Visual/GCMappingWidget.cpp
Config/Mapping/WiimoteEmuExtension.cpp
Config/Mapping/WiimoteEmuGeneral.cpp
Config/Mapping/WiimoteEmuMotionControl.cpp
Expand Down Expand Up @@ -128,6 +133,7 @@ add_executable(dolphin-emu
TAS/StickWidget.cpp
TAS/IRWidget.cpp
Updater.cpp
${RCC_SOURCES}
)

target_compile_definitions(dolphin-emu
Expand All @@ -141,12 +147,16 @@ target_include_directories(dolphin-emu
PRIVATE
${CMAKE_CURRENT_BINARY_DIR}
${Qt5Gui_PRIVATE_INCLUDE_DIRS}
${Qt5Quick_PRIVATE_INCLUDE_DIRS}
${Qt5QuickWidgets_PRIVATE_INCLUDE_DIRS}
)

target_link_libraries(dolphin-emu
PRIVATE
core
Qt5::Widgets
Qt5::Quick
Qt5::QuickWidgets
uicommon
imgui
)
Expand Down
5 changes: 5 additions & 0 deletions Source/Core/DolphinQt/Config/Mapping/MappingButton.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,9 @@ void MappingButton::Detect()

QString expression;

const auto old_text = text();
setText(QStringLiteral("..."));

if (m_parent->GetParent()->IsMappingAllDevices())
{
expression = MappingCommon::DetectExpression(this, g_controller_interface,
Expand All @@ -96,6 +99,8 @@ void MappingButton::Detect()
default_device_qualifier);
}

setText(old_text);

if (expression.isEmpty())
return;

Expand Down
29 changes: 13 additions & 16 deletions Source/Core/DolphinQt/Config/Mapping/MappingCommon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include <QTimer>

#include "DolphinQt/QtUtils/BlockUserInputFilter.h"
#include "DolphinQt/QtUtils/QueueOnObject.h"
#include "InputCommon/ControlReference/ControlReference.h"
#include "InputCommon/ControllerInterface/Device.h"

Expand Down Expand Up @@ -49,18 +50,16 @@ QString GetExpressionForControl(const QString& control_name,
return expr;
}

QString DetectExpression(QPushButton* button, ciface::Core::DeviceContainer& device_container,
QString DetectExpression(QWidget* widget, ciface::Core::DeviceContainer& device_container,
const std::vector<std::string>& device_strings,
const ciface::Core::DeviceQualifier& default_device, Quote quote)
{
const auto filter = new BlockUserInputFilter(button);

button->installEventFilter(filter);
button->grabKeyboard();
button->grabMouse();

const auto old_text = button->text();
button->setText(QStringLiteral("..."));
const auto filter = new BlockUserInputFilter(widget);
QueueOnObject(widget, [widget, filter] {
widget->installEventFilter(filter);
widget->grabKeyboard();
widget->grabMouse();
});

// The button text won't be updated if we don't process events here
QApplication::processEvents();
Expand All @@ -73,19 +72,17 @@ QString DetectExpression(QPushButton* button, ciface::Core::DeviceContainer& dev

std::tie(device, input) = device_container.DetectInput(INPUT_DETECT_TIME, device_strings);

const auto timer = new QTimer(button);
const auto timer = new QTimer(widget);

button->connect(timer, &QTimer::timeout, [button, filter] {
button->releaseMouse();
button->releaseKeyboard();
button->removeEventFilter(filter);
widget->connect(timer, &QTimer::timeout, [widget, filter] {
widget->releaseMouse();
widget->releaseKeyboard();
widget->removeEventFilter(filter);
});

// Prevent mappings of "space", "return", or mouse clicks from re-activating detection.
timer->start(500);

button->setText(old_text);

if (!input)
return {};

Expand Down
7 changes: 5 additions & 2 deletions Source/Core/DolphinQt/Config/Mapping/MappingCommon.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,12 @@
#include <string>
#include <vector>

class QString;
class OutputReference;
class QPushButton;
class QString;
class QWidget;

constexpr int INDICATOR_UPDATE_FREQ = 30;

namespace ciface
{
Expand All @@ -33,7 +36,7 @@ QString GetExpressionForControl(const QString& control_name,
const ciface::Core::DeviceQualifier& default_device,
Quote quote = Quote::On);

QString DetectExpression(QPushButton* button, ciface::Core::DeviceContainer& device_container,
QString DetectExpression(QWidget* widget, ciface::Core::DeviceContainer& device_container,
const std::vector<std::string>& device_strings,
const ciface::Core::DeviceQualifier& default_device,
Quote quote = Quote::On);
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/DolphinQt/Config/Mapping/MappingIndicator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
#include "InputCommon/ControllerEmu/Setting/NumericSetting.h"
#include "InputCommon/ControllerInterface/Device.h"

#include "DolphinQt/Config/Mapping/MappingWidget.h"
#include "DolphinQt/Config/Mapping/MappingCommon.h"
#include "DolphinQt/QtUtils/ModalMessageBox.h"
#include "DolphinQt/Settings.h"

Expand Down
1 change: 1 addition & 0 deletions Source/Core/DolphinQt/Config/Mapping/MappingWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

#include "DolphinQt/Config/Mapping/IOWindow.h"
#include "DolphinQt/Config/Mapping/MappingButton.h"
#include "DolphinQt/Config/Mapping/MappingCommon.h"
#include "DolphinQt/Config/Mapping/MappingIndicator.h"
#include "DolphinQt/Config/Mapping/MappingNumeric.h"
#include "DolphinQt/Config/Mapping/MappingWindow.h"
Expand Down
2 changes: 0 additions & 2 deletions Source/Core/DolphinQt/Config/Mapping/MappingWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ class Device;
}
} // namespace ciface

constexpr int INDICATOR_UPDATE_FREQ = 30;

class MappingWidget : public QWidget
{
Q_OBJECT
Expand Down
5 changes: 5 additions & 0 deletions Source/Core/DolphinQt/Config/Mapping/MappingWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include "DolphinQt/Config/Mapping/HotkeyStatesOther.h"
#include "DolphinQt/Config/Mapping/HotkeyTAS.h"
#include "DolphinQt/Config/Mapping/HotkeyWii.h"
#include "DolphinQt/Config/Mapping/Visual/GCMappingWidget.h"
#include "DolphinQt/Config/Mapping/WiimoteEmuExtension.h"
#include "DolphinQt/Config/Mapping/WiimoteEmuGeneral.h"
#include "DolphinQt/Config/Mapping/WiimoteEmuMotionControl.h"
Expand Down Expand Up @@ -309,10 +310,14 @@ void MappingWindow::SetMappingType(MappingWindow::Type type)
case Type::MAPPING_GC_STEERINGWHEEL:
case Type::MAPPING_GC_DANCEMAT:
case Type::MAPPING_GCPAD:
{
widget = new GCPadEmu(this);
auto* visual = new VisualGCMappingWidget(this, GetPort());
setWindowTitle(tr("GameCube Controller at Port %1").arg(GetPort() + 1));
AddWidget(tr("GameCube Controller"), widget);
AddWidget(tr("Visual Configuration"), visual);
break;
}
case Type::MAPPING_GC_MICROPHONE:
widget = new GCMicrophone(this);
setWindowTitle(tr("GameCube Microphone Slot %1")
Expand Down
Loading

0 comments on commit 0ef21c6

Please sign in to comment.