ControllerInterface: Rename full surface analog inputs to be more visually dissimilar from their underlying inputs. e.g. "Full Axis X+".

This commit is contained in:
Jordan Woyak 2019-03-13 19:47:52 -05:00
parent 241166a1a5
commit be897b41a7
2 changed files with 33 additions and 4 deletions

View File

@ -55,7 +55,7 @@ Device::Input* Device::FindInput(const std::string& name) const
{ {
for (Input* input : m_inputs) for (Input* input : m_inputs)
{ {
if (input->GetName() == name) if (input->IsMatchingName(name))
return input; return input;
} }
@ -66,18 +66,42 @@ Device::Output* Device::FindOutput(const std::string& name) const
{ {
for (Output* output : m_outputs) for (Output* output : m_outputs)
{ {
if (output->GetName() == name) if (output->IsMatchingName(name))
return output; return output;
} }
return nullptr; return nullptr;
} }
bool Device::Control::IsMatchingName(const std::string& name) const
{
return GetName() == name;
}
ControlState Device::FullAnalogSurface::GetState() const ControlState Device::FullAnalogSurface::GetState() const
{ {
return (1 + std::max(0.0, m_high.GetState()) - std::max(0.0, m_low.GetState())) / 2; return (1 + std::max(0.0, m_high.GetState()) - std::max(0.0, m_low.GetState())) / 2;
} }
std::string Device::FullAnalogSurface::GetName() const
{
// E.g. "Full Axis X+"
return "Full " + m_high.GetName();
}
bool Device::FullAnalogSurface::IsMatchingName(const std::string& name) const
{
if (Control::IsMatchingName(name))
return true;
// Old naming scheme was "Axis X-+" which is too visually similar to "Axis X+".
// This has caused countless problems for users with mysterious misconfigurations.
// We match this old name to support old configurations.
const auto old_name = m_low.GetName() + *m_high.GetName().rbegin();
return old_name == name;
}
// //
// DeviceQualifier :: ToString // DeviceQualifier :: ToString
// //

View File

@ -46,6 +46,10 @@ public:
virtual ~Control() {} virtual ~Control() {}
virtual Input* ToInput() { return nullptr; } virtual Input* ToInput() { return nullptr; }
virtual Output* ToOutput() { return nullptr; } virtual Output* ToOutput() { return nullptr; }
// May be overridden to allow multiple valid names.
// Useful for backwards-compatible configurations when names change.
virtual bool IsMatchingName(const std::string& name) const;
}; };
// //
@ -114,12 +118,13 @@ protected:
void AddInput(Input* const i); void AddInput(Input* const i);
void AddOutput(Output* const o); void AddOutput(Output* const o);
class FullAnalogSurface : public Input class FullAnalogSurface final : public Input
{ {
public: public:
FullAnalogSurface(Input* low, Input* high) : m_low(*low), m_high(*high) {} FullAnalogSurface(Input* low, Input* high) : m_low(*low), m_high(*high) {}
ControlState GetState() const override; ControlState GetState() const override;
std::string GetName() const override { return m_low.GetName() + *m_high.GetName().rbegin(); } std::string GetName() const override;
bool IsMatchingName(const std::string& name) const override;
private: private:
Input& m_low; Input& m_low;