diff --git a/Source/Core/Core/HotkeyManager.cpp b/Source/Core/Core/HotkeyManager.cpp index b9dab79224..89c394deb7 100644 --- a/Source/Core/Core/HotkeyManager.cpp +++ b/Source/Core/Core/HotkeyManager.cpp @@ -344,7 +344,7 @@ void HotkeyManager::LoadDefaults(const ControllerInterface& ciface) auto set_key_expression = [this](int index, const std::string& expression) { m_keys[FindGroupByID(index)] ->controls[GetIndexForGroup(FindGroupByID(index), index)] - ->control_ref->expression = expression; + ->control_ref->SetExpression(expression); }; // General hotkeys diff --git a/Source/Core/DolphinQt2/Config/Mapping/IOWindow.cpp b/Source/Core/DolphinQt2/Config/Mapping/IOWindow.cpp index ae40b29c17..294cf5878f 100644 --- a/Source/Core/DolphinQt2/Config/Mapping/IOWindow.cpp +++ b/Source/Core/DolphinQt2/Config/Mapping/IOWindow.cpp @@ -110,7 +110,7 @@ void IOWindow::CreateMainLayout() void IOWindow::Update() { - m_expression_text->setPlainText(QString::fromStdString(m_reference->expression)); + m_expression_text->setPlainText(QString::fromStdString(m_reference->GetExpression())); m_range_spinbox->setValue(m_reference->range * SLIDER_TICK_COUNT); m_range_slider->setValue(m_reference->range * SLIDER_TICK_COUNT); @@ -164,7 +164,7 @@ void IOWindow::OnDialogButtonPressed(QAbstractButton* button) return; } - m_reference->expression = m_expression_text->toPlainText().toStdString(); + m_reference->SetExpression(m_expression_text->toPlainText().toStdString()); if (button != m_apply_button) accept(); diff --git a/Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp b/Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp index 7c01a527a2..d30be53ec5 100644 --- a/Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp +++ b/Source/Core/DolphinQt2/Config/Mapping/MappingButton.cpp @@ -27,7 +27,7 @@ static QString EscapeAmpersand(QString&& string) } MappingButton::MappingButton(MappingWidget* widget, ControlReference* ref) - : ElidedButton(EscapeAmpersand(QString::fromStdString(ref->expression))), m_parent(widget), + : ElidedButton(EscapeAmpersand(QString::fromStdString(ref->GetExpression()))), m_parent(widget), m_reference(ref) { Connect(); @@ -66,7 +66,7 @@ void MappingButton::OnButtonPressed() if (!expr.isEmpty()) { - m_reference->expression = expr.toStdString(); + m_reference->SetExpression(expr.toStdString()); Update(); } else @@ -78,13 +78,13 @@ void MappingButton::OnButtonPressed() void MappingButton::OnButtonTimeout() { - setText(EscapeAmpersand(QString::fromStdString(m_reference->expression))); + setText(EscapeAmpersand(QString::fromStdString(m_reference->GetExpression()))); } void MappingButton::Clear() { m_parent->Update(); - m_reference->expression.clear(); + m_reference->SetExpression(""); Update(); } @@ -92,7 +92,7 @@ void MappingButton::Update() { const auto lock = ControllerEmu::EmulatedController::GetStateLock(); m_reference->UpdateReference(g_controller_interface, m_parent->GetParent()->GetDeviceQualifier()); - setText(EscapeAmpersand(QString::fromStdString(m_reference->expression))); + setText(EscapeAmpersand(QString::fromStdString(m_reference->GetExpression()))); m_parent->SaveSettings(); } diff --git a/Source/Core/DolphinWX/Input/InputConfigDiag.cpp b/Source/Core/DolphinWX/Input/InputConfigDiag.cpp index a8c70c3ee6..1e6cba569d 100644 --- a/Source/Core/DolphinWX/Input/InputConfigDiag.cpp +++ b/Source/Core/DolphinWX/Input/InputConfigDiag.cpp @@ -243,7 +243,7 @@ ControlButton::ControlButton(wxWindow* const parent, ControlReference* const _re m_configured_width(FromDIP(width)) { if (label.empty()) - SetLabelText(StrToWxStr(_ref->expression)); + SetLabelText(StrToWxStr(_ref->GetExpression())); else SetLabel(StrToWxStr(label)); } @@ -336,7 +336,7 @@ void ControlDialog::SelectControl(const std::string& name) void ControlDialog::UpdateGUI() { // update textbox - textctrl->SetValue(StrToWxStr(control_reference->expression)); + textctrl->SetValue(StrToWxStr(control_reference->GetExpression())); // updates the "bound controls:" label m_bound_label->SetLabel( @@ -365,7 +365,7 @@ void InputConfigDialog::UpdateGUI() { for (ControlButton* button : cgBox->control_buttons) { - button->SetLabelText(StrToWxStr(button->control_reference->expression)); + button->SetLabelText(StrToWxStr(button->control_reference->GetExpression())); } for (PadSetting* padSetting : cgBox->options) @@ -400,7 +400,7 @@ void InputConfigDialog::LoadDefaults(wxCommandEvent&) bool ControlDialog::Validate() { - control_reference->expression = WxStrToStr(textctrl->GetValue()); + control_reference->SetExpression(WxStrToStr(textctrl->GetValue())); const auto lock = ControllerEmu::EmulatedController::GetStateLock(); control_reference->UpdateReference(g_controller_interface, @@ -439,7 +439,7 @@ void ControlDialog::SetDevice(wxCommandEvent&) void ControlDialog::ClearControl(wxCommandEvent&) { - control_reference->expression.clear(); + control_reference->SetExpression(""); const auto lock = ControllerEmu::EmulatedController::GetStateLock(); control_reference->UpdateReference(g_controller_interface, @@ -498,7 +498,7 @@ void ControlDialog::SetSelectedControl(wxCommandEvent&) return; textctrl->WriteText(expr); - control_reference->expression = textctrl->GetValue(); + control_reference->SetExpression(WxStrToStr(textctrl->GetValue())); const auto lock = ControllerEmu::EmulatedController::GetStateLock(); control_reference->UpdateReference(g_controller_interface, @@ -534,7 +534,7 @@ void ControlDialog::AppendControl(wxCommandEvent& event) } textctrl->WriteText(expr); - control_reference->expression = textctrl->GetValue(); + control_reference->SetExpression(WxStrToStr(textctrl->GetValue())); const auto lock = ControllerEmu::EmulatedController::GetStateLock(); control_reference->UpdateReference(g_controller_interface, @@ -638,7 +638,7 @@ void InputConfigDialog::ConfigControl(wxEvent& event) void InputConfigDialog::ClearControl(wxEvent& event) { ControlButton* const btn = (ControlButton*)event.GetEventObject(); - btn->control_reference->expression.clear(); + btn->control_reference->SetExpression(""); btn->control_reference->range = 1.0; controller->UpdateReferences(g_controller_interface); @@ -717,7 +717,7 @@ bool InputConfigDialog::DetectButton(ControlButton* button) wxString control_name = ctrl->GetName(); wxString expr; GetExpressionForControl(expr, control_name); - button->control_reference->expression = expr; + button->control_reference->SetExpression(WxStrToStr(expr)); const auto lock = ControllerEmu::EmulatedController::GetStateLock(); button->control_reference->UpdateReference(g_controller_interface, controller->default_device); diff --git a/Source/Core/InputCommon/ControlReference/ControlReference.cpp b/Source/Core/InputCommon/ControlReference/ControlReference.cpp index e53c5c3877..c7d652f15b 100644 --- a/Source/Core/InputCommon/ControlReference/ControlReference.cpp +++ b/Source/Core/InputCommon/ControlReference/ControlReference.cpp @@ -25,13 +25,12 @@ bool ControlReference::InputGateOn() // UpdateReference // // Updates a controlreference's binded devices/controls -// need to call this to re-parse a control reference's expression after changing it +// need to call this to re-bind a control reference after changing its expression // void ControlReference::UpdateReference(const ciface::Core::DeviceContainer& devices, const ciface::Core::DeviceQualifier& default_device) { ControlFinder finder(devices, default_device, IsInput()); - std::tie(m_parse_status, m_parsed_expression) = ParseExpression(expression); if (m_parsed_expression) m_parsed_expression->UpdateReferences(finder); } @@ -49,6 +48,17 @@ ParseStatus ControlReference::GetParseStatus() const return m_parse_status; } +std::string ControlReference::GetExpression() const +{ + return m_expression; +} + +void ControlReference::SetExpression(std::string expr) +{ + m_expression = std::move(expr); + std::tie(m_parse_status, m_parsed_expression) = ParseExpression(m_expression); +} + ControlReference::ControlReference() : range(1), m_parsed_expression(nullptr) { } diff --git a/Source/Core/InputCommon/ControlReference/ControlReference.h b/Source/Core/InputCommon/ControlReference/ControlReference.h index 48ce6434e1..6740ed8be0 100644 --- a/Source/Core/InputCommon/ControlReference/ControlReference.h +++ b/Source/Core/InputCommon/ControlReference/ControlReference.h @@ -34,12 +34,14 @@ public: ciface::ExpressionParser::ParseStatus GetParseStatus() const; void UpdateReference(const ciface::Core::DeviceContainer& devices, const ciface::Core::DeviceQualifier& default_device); + std::string GetExpression() const; + void SetExpression(std::string expr); ControlState range; - std::string expression; protected: ControlReference(); + std::string m_expression; std::unique_ptr m_parsed_expression; ciface::ExpressionParser::ParseStatus m_parse_status; }; diff --git a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp index ce58b0f968..c9cf998ea9 100644 --- a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp +++ b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp @@ -216,7 +216,7 @@ public: // Keep a shared_ptr to the device so the control pointer doesn't become invalid std::shared_ptr m_device; - ControlExpression(ControlQualifier qualifier_) : qualifier(qualifier_) {} + explicit ControlExpression(ControlQualifier qualifier_) : qualifier(qualifier_) {} ControlState GetValue() const override { return control ? control->ToInput()->GetState() : 0.0; } void SetValue(ControlState value) override { diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp b/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp index fd905ccf1e..24d4a4c36e 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp @@ -54,8 +54,12 @@ void ControlGroup::LoadConfig(IniFile::Section* sec, const std::string& defdev, for (auto& c : controls) { - // control expression - sec->Get(group + c->name, &c->control_ref->expression, ""); + { + // control expression + std::string expression; + sec->Get(group + c->name, &expression, ""); + c->control_ref->SetExpression(std::move(expression)); + } // range sec->Get(group + c->name + "/Range", &c->control_ref->range, 100.0); @@ -109,7 +113,7 @@ void ControlGroup::SaveConfig(IniFile::Section* sec, const std::string& defdev, for (auto& c : controls) { // control expression - sec->Set(group + c->name, c->control_ref->expression, ""); + sec->Set(group + c->name, c->control_ref->GetExpression(), ""); // range sec->Set(group + c->name + "/Range", c->control_ref->range * 100.0, 100.0); @@ -128,6 +132,6 @@ void ControlGroup::SaveConfig(IniFile::Section* sec, const std::string& defdev, void ControlGroup::SetControlExpression(int index, const std::string& expression) { - controls.at(index)->control_ref->expression = expression; + controls.at(index)->control_ref->SetExpression(expression); } } // namespace ControllerEmu