summaryrefslogtreecommitdiff
path: root/Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp
diff options
context:
space:
mode:
authorspycrab <spycrab@users.noreply.github.com>2017-06-13 17:16:41 +0200
committerspycrab <spycrab@users.noreply.github.com>2017-06-13 17:16:41 +0200
commit50c13c1902178750ca9c36832e7e8ff7fe391f64 (patch)
tree1c50ff862a2dcc54ddfc1fab6f4ecc7257964d8a /Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp
parent03c1a1e3924d963b100b04e49209d68a73b13814 (diff)
Qt: Implement advanced mapping I/O windows
Diffstat (limited to 'Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp')
-rw-r--r--Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp107
1 files changed, 39 insertions, 68 deletions
diff --git a/Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp b/Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp
index dcb92e6072..02e6917d8c 100644
--- a/Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp
+++ b/Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp
@@ -2,19 +2,23 @@
// Licensed under GPLv2+
// Refer to the license.txt file included.
+#include <thread>
+
#include <QMouseEvent>
#include <QRegExp>
#include <QString>
-#include <thread>
#include "DolphinQt2/Config/Mapping/MappingButton.h"
#include "Common/Thread.h"
+#include "DolphinQt2/Config/Mapping/IOWindow.h"
+#include "DolphinQt2/Config/Mapping/MappingCommon.h"
#include "DolphinQt2/Config/Mapping/MappingWidget.h"
#include "DolphinQt2/Config/Mapping/MappingWindow.h"
#include "InputCommon/ControlReference/ControlReference.h"
#include "InputCommon/ControllerEmu/ControllerEmu.h"
#include "InputCommon/ControllerInterface/ControllerInterface.h"
+#include "InputCommon/ControllerInterface/Device.h"
MappingButton::MappingButton(MappingWidget* widget, ControlReference* ref)
: ElidedButton(QString::fromStdString(ref->expression)), m_parent(widget), m_reference(ref)
@@ -27,81 +31,52 @@ void MappingButton::Connect()
connect(this, &MappingButton::clicked, this, &MappingButton::OnButtonPressed);
}
-static QString
-GetExpressionForControl(const QString& control_name,
- const ciface::Core::DeviceQualifier* control_device = nullptr,
- const ciface::Core::DeviceQualifier* default_device = nullptr)
-{
- QString expr;
-
- // non-default device
- if (control_device && default_device && !(*control_device == *default_device))
- {
- expr += QString::fromStdString(control_device->ToString());
- expr += QStringLiteral(":");
- }
-
- // append the control name
- expr += control_name;
-
- QRegExp reg(QStringLiteral("[a-zA-Z0-9_]*"));
- if (!reg.exactMatch(expr))
- expr = QStringLiteral("`%1`").arg(expr);
-
- return expr;
-}
-
void MappingButton::OnButtonPressed()
{
- if (m_block || m_parent->GetDevice() == nullptr)
+ if (m_block || m_parent->GetDevice() == nullptr || !m_reference->IsInput())
return;
// Make sure that we don't block event handling
std::thread([this] {
- if (m_reference->IsInput())
- {
- const auto dev = m_parent->GetDevice();
+ const auto dev = m_parent->GetDevice();
- setText(QStringLiteral("..."));
+ setText(QStringLiteral("..."));
- Common::SleepCurrentThread(100);
+ Common::SleepCurrentThread(100);
- SetBlockInputs(true);
+ SetBlockInputs(true);
- if (m_parent->GetFirstButtonPress())
- m_reference->Detect(10, dev.get());
+ if (m_parent->GetFirstButtonPress())
+ m_reference->Detect(10, dev.get());
- // Avoid that the button press itself is registered as an event
- Common::SleepCurrentThread(100);
+ // Avoid that the button press itself is registered as an event
+ Common::SleepCurrentThread(100);
- ciface::Core::Device::Control* const ctrl = m_reference->Detect(5000, dev.get());
+ const auto expr = MappingCommon::DetectExpression(m_reference, dev.get(),
+ m_parent->GetParent()->GetDeviceQualifier(),
+ m_parent->GetController()->default_device);
- SetBlockInputs(false);
- if (ctrl)
- {
- m_reference->expression =
- GetExpressionForControl(QString::fromStdString(ctrl->GetName())).toStdString();
- Update();
- }
- else
- {
- OnButtonTimeout();
- }
+ SetBlockInputs(false);
+ if (!expr.isEmpty())
+ {
+ m_reference->expression = expr.toStdString();
+ Update();
}
else
{
- // TODO: Implement Output
+ OnButtonTimeout();
}
}).detach();
}
void MappingButton::OnButtonTimeout()
{
- setText(QStringLiteral(""));
+ setText(QString::fromStdString(m_reference->expression));
}
void MappingButton::Clear()
{
+ m_parent->Update();
m_reference->expression.clear();
Update();
}
@@ -137,25 +112,21 @@ bool MappingButton::event(QEvent* event)
void MappingButton::mouseReleaseEvent(QMouseEvent* event)
{
- if (m_reference->IsInput())
+ switch (event->button())
{
- switch (event->button())
- {
- case Qt::MouseButton::LeftButton:
+ case Qt::MouseButton::LeftButton:
+ if (m_reference->IsInput())
QPushButton::mouseReleaseEvent(event);
- break;
- case Qt::MouseButton::MiddleButton:
- Clear();
- break;
- case Qt::MouseButton::RightButton:
- // TODO Open advanced dialog
- break;
- default:
- break;
- }
- }
- else
- {
- // TODO Open output dialog
+ else
+ emit AdvancedPressed();
+ return;
+ case Qt::MouseButton::MiddleButton:
+ Clear();
+ return;
+ case Qt::MouseButton::RightButton:
+ emit AdvancedPressed();
+ return;
+ default:
+ return;
}
}