swift
joystickbutton.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2014 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 SWIFT_DEFINE_VALUEOBJECT_MIXINS(swift::misc::input, CJoystickButton)
7 
8 namespace swift::misc::input
9 {
10  CJoystickButton::CJoystickButton(const QString &deviceName, int index)
11  : m_deviceName(deviceName), m_buttonIndex(index)
12  {}
13 
15  {
16  return QStringLiteral("%1%2 - %3").arg(buttonIndentifier()).arg(m_buttonIndex).arg(m_deviceName);
17  }
18 
19  void CJoystickButton::setButtonIndex(int buttonIndex) { m_buttonIndex = buttonIndex; }
20 
21  bool CJoystickButton::isValid() const { return (!m_deviceName.isEmpty() && m_buttonIndex >= 0); }
22 
24  {
25  m_deviceName = button.m_deviceName;
26  m_buttonIndex = button.m_buttonIndex;
27  }
28 
29  void CJoystickButton::setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
30  {
31  if (index.isMyself())
32  {
33  (*this) = variant.value<CJoystickButton>();
34  return;
35  }
36  const ColumnIndex i = index.frontCasted<ColumnIndex>();
37  switch (i)
38  {
39  case IndexDeviceName: this->setDeviceName(variant.value<QString>()); break;
40  case IndexButton:
41  case IndexButtonAsString: this->setButtonIndex(buttonIndexFromString(variant.value<QString>())); break;
42  case IndexButtonObject: this->setButtonObject(variant.value<swift::misc::input::CJoystickButton>()); break;
43  default: Q_ASSERT_X(false, "CJoystickButton", "index unknown (setter)"); break;
44  }
45  }
46 
48  {
49  if (index.isMyself()) { return QVariant::fromValue(*this); }
50  const ColumnIndex i = index.frontCasted<ColumnIndex>();
51  switch (i)
52  {
53  case IndexDeviceName: return QVariant::fromValue(this->getDeviceName());
54  case IndexButton: return QVariant::fromValue(this->getButtonIndex());
55  case IndexButtonAsString: return QVariant::fromValue(this->getButtonAsString());
56  case IndexButtonObject: return QVariant::fromValue(*this);
57  }
58 
59  Q_ASSERT_X(false, "CJoystickButton", "index unknown");
60  QString m = QString("no property, index ").append(index.toQString());
61  return QVariant::fromValue(m);
62  }
63 
64  QString CJoystickButton::buttonIndexToString(qint32 buttonIndex)
65  {
66  return buttonIndentifier() + QString::number(buttonIndex);
67  }
68 
69  int CJoystickButton::buttonIndexFromString(const QString &buttonName)
70  {
71  if (!buttonName.startsWith(buttonIndentifier())) { return getInvalidIndex(); }
72  QString name(buttonName);
73  name.remove(buttonIndentifier());
74  if (name.contains('-')) { name = name.mid(0, name.indexOf('-')); }
75  return name.trimmed().toInt();
76  }
77 
78  QString CJoystickButton::convertToQString(bool /* i18n */) const { return getButtonAsString().trimmed(); }
79 
80 } // namespace swift::misc::input
Non-owning reference to a CPropertyIndex with a subset of its features.
QString toQString(bool i18n=false) const
Cast as QString.
CastType frontCasted() const
First element casted to given type, usually the PropertIndex enum.
bool isMyself() const
Myself index, used with nesting.
Value object representing a joystick button.
void setPropertyByIndex(swift::misc::CPropertyIndexRef index, const QVariant &variant)
Set property by index.
CJoystickButton()=default
Default constructor.
void setDeviceName(const QString &deviceName)
Set owning device name.
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
int getButtonIndex() const
Get button index.
static int getInvalidIndex()
Invalid button index.
QString getButtonAsStringWithDeviceName() const
Get button as String including its device name.
static QString buttonIndexToString(qint32 buttonIndex)
Button index to string.
void setButtonIndex(int buttonIndex)
Set button index.
QString convertToQString(bool i18n=false) const
Cast as QString.
QString getButtonAsString() const
Get button as String.
void setButtonObject(CJoystickButton button)
Set button object.
static int buttonIndexFromString(const QString &button)
Button index from string.
QString getDeviceName() const
Get device name.
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.
Definition: valueobject.h:67