From be7185ef7f17cfdf632cbdd6a5beb2e46666adc6 Mon Sep 17 00:00:00 2001 From: Max Maisel Date: Thu, 14 Apr 2022 17:24:46 +0200 Subject: [PATCH] Connect JoySensorButtons sensor GUI buttons The buttons from the last commit were just dummies. The move forward with adding functionality, add a new JobButton type JoySensorButton which connects the GUI button with the JoySensor object. Add more boilerplate for the scaffold and connect QT signals/slots. The buttons still do nothing yet. --- CMakeLists.txt | 2 + src/gui/joytabwidget.cpp | 40 ++++-- src/gui/joytabwidget.h | 1 + src/joybuttontypes/joysensorbutton.cpp | 173 +++++++++++++++++++++++++ src/joybuttontypes/joysensorbutton.h | 55 ++++++++ src/joysensor.cpp | 89 ++++++++++++- src/joysensor.h | 23 +++- src/joysensorbuttonpushbutton.cpp | 52 ++++++-- src/joysensorbuttonpushbutton.h | 5 +- src/joysensordirection.h | 1 + src/joysensorpushbutton.cpp | 22 +++- src/sensorpushbuttongroup.cpp | 19 +-- 12 files changed, 438 insertions(+), 44 deletions(-) create mode 100644 src/joybuttontypes/joysensorbutton.cpp create mode 100644 src/joybuttontypes/joysensorbutton.h diff --git a/CMakeLists.txt b/CMakeLists.txt index a525fdb10..4e13dc5ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -181,6 +181,7 @@ set(antimicrox_SOURCES src/joybuttontypes/joycontrolstickmodifierbutton.cpp src/joybuttontypes/joydpadbutton.cpp src/joybuttontypes/joygradientbutton.cpp + src/joybuttontypes/joysensorbutton.cpp src/joycontrolstick.cpp src/joycontrolstickbuttonpushbutton.cpp src/joycontrolstickcontextmenu.cpp @@ -297,6 +298,7 @@ set(antimicrox_HEADERS src/joybuttontypes/joycontrolstickmodifierbutton.h src/joybuttontypes/joydpadbutton.h src/joybuttontypes/joygradientbutton.h + src/joybuttontypes/joysensorbutton.h src/joycontrolstick.h src/joycontrolstickbuttonpushbutton.h src/joycontrolstickcontextmenu.h diff --git a/src/gui/joytabwidget.cpp b/src/gui/joytabwidget.cpp index 14b9822ce..3afbdd950 100644 --- a/src/gui/joytabwidget.cpp +++ b/src/gui/joytabwidget.cpp @@ -1822,6 +1822,18 @@ void JoyTabWidget::checkStickEmptyDisplay() } } +void JoyTabWidget::checkSensorEmptyDisplay() +{ + SensorPushButtonGroup *group = qobject_cast(sender()); // static_cast + JoySensor *sensor = group->getSensor(); + if ((sensor != nullptr) && !sensor->hasSlotsAssigned()) + { + SetJoystick *currentSet = m_joystick->getActiveSetJoystick(); + removeSetButtons(currentSet); + fillSetButtons(currentSet); + } +} + void JoyTabWidget::checkDPadButtonEmptyDisplay() { DPadPushButtonGroup *group = qobject_cast(sender()); // static_cast @@ -2008,15 +2020,17 @@ void JoyTabWidget::fillSetButtons(SetJoystick *set) } QWidget *groupContainer = new QWidget(sensorGroup); - SensorPushButtonGroup *sensorButtonGroup = - new SensorPushButtonGroup(sensor, isKeypadUnlocked(), displayingNames, groupContainer); - /*if (hideEmptyButtons) + SensorPushButtonGroup *sensorButtonGroup = new SensorPushButtonGroup( + sensor, isKeypadUnlocked(), displayingNames, groupContainer); + if (hideEmptyButtons) { - connect(stickButtonGroup, &StickPushButtonGroup::buttonSlotChanged, this, - &JoyTabWidget::checkStickEmptyDisplay); + connect(sensorButtonGroup, + &SensorPushButtonGroup::buttonSlotChanged, this, + &JoyTabWidget::checkStickEmptyDisplay); } - connect(namesPushButton, &QPushButton::clicked, stickButtonGroup, &StickPushButtonGroup::toggleNameDisplay);*/ + connect(namesPushButton, &QPushButton::clicked, sensorButtonGroup, + &SensorPushButtonGroup::toggleNameDisplay); if (sensorGridColumn > 1) { @@ -2049,15 +2063,17 @@ void JoyTabWidget::fillSetButtons(SetJoystick *set) } QWidget *groupContainer = new QWidget(sensorGroup); - SensorPushButtonGroup *sensorButtonGroup = - new SensorPushButtonGroup(sensor, isKeypadUnlocked(), displayingNames, groupContainer); - /*if (hideEmptyButtons) + SensorPushButtonGroup *sensorButtonGroup = new SensorPushButtonGroup( + sensor, isKeypadUnlocked(), displayingNames, groupContainer); + if (hideEmptyButtons) { - connect(stickButtonGroup, &StickPushButtonGroup::buttonSlotChanged, this, - &JoyTabWidget::checkStickEmptyDisplay); + connect(sensorButtonGroup, + &SensorPushButtonGroup::buttonSlotChanged, this, + &JoyTabWidget::checkSensorEmptyDisplay); } - connect(namesPushButton, &QPushButton::clicked, stickButtonGroup, &StickPushButtonGroup::toggleNameDisplay);*/ + connect(namesPushButton, &QPushButton::clicked, sensorButtonGroup, + &SensorPushButtonGroup::toggleNameDisplay); if (sensorGridColumn > 1) { diff --git a/src/gui/joytabwidget.h b/src/gui/joytabwidget.h index 17f0793ca..28fbeb85d 100644 --- a/src/gui/joytabwidget.h +++ b/src/gui/joytabwidget.h @@ -136,6 +136,7 @@ class JoyTabWidget : public QWidget void checkButtonDisplay(); void checkStickEmptyDisplay(); + void checkSensorEmptyDisplay(); void checkDPadButtonEmptyDisplay(); void checkAxisButtonEmptyDisplay(); void checkButtonEmptyDisplay(); diff --git a/src/joybuttontypes/joysensorbutton.cpp b/src/joybuttontypes/joysensorbutton.cpp new file mode 100644 index 000000000..b45efaa31 --- /dev/null +++ b/src/joybuttontypes/joysensorbutton.cpp @@ -0,0 +1,173 @@ +/* antimicrox Gamepad to KB+M event mapper + * Copyright (C) 2022 Max Maisel + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "joysensorbutton.h" + +#include "event.h" +#include "globalvariables.h" +#include "joysensor.h" +#include "joybutton.h" +#include "setjoystick.h" +#include "vdpad.h" + +#include + +#include + +JoySensorButton::JoySensorButton(JoySensor *sensor, + int index, int originset, SetJoystick *parentSet, QObject *parent) + : JoyGradientButton(index, originset, parentSet, parent), + m_sensor(sensor) +{ +} + +QString JoySensorButton::getPartialName(bool forceFullFormat, bool displayNames) const +{ + QString temp = QString(m_sensor->getPartialName(forceFullFormat, displayNames)); + temp.append(": "); + +/* if (!buttonName.isEmpty() && displayNames) + { + if (forceFullFormat) + { + temp.append(tr("Button")).append(" "); + } + + temp.append(buttonName); + } else if (!defaultButtonName.isEmpty() && displayNames) + { + if (forceFullFormat) + { + temp.append(tr("Button")).append(" "); + } + + temp.append(defaultButtonName); + } else + { + QString buttontype = QString(); + + switch (m_index) + { + case 0: + buttontype = tr("Negative"); + break; + + case 1: + buttontype = tr("Positive"); + break; + + default: + buttontype = tr("Unknown"); + break; + } + + temp.append(tr("Button")).append(" ").append(buttontype); + }*/ + + return temp; +} + +//QString JoyAxisButton::getXmlName() { return GlobalVariables::JoyAxisButton::xmlName; } + +/*void JoyAxisButton::setChangeSetCondition(SetChangeCondition condition, bool passive, bool updateActiveString) +{ + SetChangeCondition oldCondition = setSelectionCondition; + + if ((condition != setSelectionCondition) && !passive) + { + if ((condition == SetChangeWhileHeld) || (condition == SetChangeTwoWay)) + { + // Set new condition + emit setAssignmentChanged(m_index, m_axis->getIndex(), setSelection, condition); + } else if ((setSelectionCondition == SetChangeWhileHeld) || (setSelectionCondition == SetChangeTwoWay)) + { + // Remove old condition + emit setAssignmentChanged(m_index, m_axis->getIndex(), setSelection, SetChangeDisabled); + } + + setSelectionCondition = condition; + } else if (passive) + { + setSelectionCondition = condition; + } + + if (setSelectionCondition == SetChangeDisabled) + { + setChangeSetSelection(-1); + } + + if (setSelectionCondition != oldCondition) + { + if (updateActiveString) + { + buildActiveZoneSummaryString(); + } + + emit propertyUpdated(); + } +}*/ + +/** + * @brief Get the distance that an element is away from its assigned + * dead zone + * @return Normalized distance away from dead zone + */ +//double JoyAxisButton::getDistanceFromDeadZone() { return m_axis->getDistanceFromDeadZone(); } + +/** + * @brief Get the distance factor that should be used for mouse movement + * @return Distance factor that should be used for mouse movement + */ +//double JoyAxisButton::getMouseDistanceFromDeadZone() { return this->getDistanceFromDeadZone(); } + +/** + * @brief Set the turbo mode that the button should use + * @param Mode that should be used + */ +/*void JoyAxisButton::setTurboMode(TurboMode mode) +{ + if (isPartRealAxis()) + { + currentTurboMode = mode; + } +}*/ + +/** + * @brief Check if button should be considered a part of a real controller + * axis. Needed for some dialogs so the program won't have to resort to + * type checking. + * @return Status of being part of a real controller axis + */ +bool JoySensorButton::isPartRealAxis() { return false; } + +/*double JoyAxisButton::getAccelerationDistance() { return m_axis->getRawDistance(m_axis->getCurrentThrottledValue()); } + +double JoyAxisButton::getLastAccelerationDistance() { return m_axis->getRawDistance(m_axis->getLastKnownThrottleValue()); } + +double JoyAxisButton::getLastMouseDistanceFromDeadZone() +{ + double distance = 0.0; + + if (m_axis->getAxisButtonByValue(m_axis->getLastKnownThrottleValue()) == this) + { + distance = m_axis->getDistanceFromDeadZone(m_axis->getLastKnownThrottleValue()); + } + + return distance; +}*/ + +JoySensor *JoySensorButton::getSensor() const { return m_sensor; } diff --git a/src/joybuttontypes/joysensorbutton.h b/src/joybuttontypes/joysensorbutton.h new file mode 100644 index 000000000..5167ea6fb --- /dev/null +++ b/src/joybuttontypes/joysensorbutton.h @@ -0,0 +1,55 @@ +/* antimicrox Gamepad to KB+M event mapper + * Copyright (C) 2022 Max Maisel + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#pragma once + +#include "joybuttontypes/joygradientbutton.h" +#include "logger.h" + +class VDPad; +class SetJoystick; +class JoySensor; + +class JoySensorButton : public JoyGradientButton +{ + Q_OBJECT + + public: + explicit JoySensorButton(JoySensor *sensor, int index, int originset, SetJoystick *parentSet, QObject *parent); + + virtual QString getPartialName(bool forceFullFormat = false, bool displayNames = false) const; + /*virtual QString getXmlName(); + virtual double getDistanceFromDeadZone(); + + virtual double getMouseDistanceFromDeadZone(); + virtual double getLastMouseDistanceFromDeadZone(); + + virtual void setChangeSetCondition(SetChangeCondition condition, bool passive = false, bool updateActiveString = true); + virtual void setVDPad(VDPad *vdpad); + virtual void setTurboMode(TurboMode mode);*/ + virtual bool isPartRealAxis(); + + /*virtual double getAccelerationDistance(); + virtual double getLastAccelerationDistance();*/ + + JoySensor *getSensor() const; + + signals: + void setAssignmentChanged(int current_button, int axis_index, int associated_set, int mode); + + private: + JoySensor *m_sensor; +}; diff --git a/src/joysensor.cpp b/src/joysensor.cpp index b683c327e..7e78315d1 100644 --- a/src/joysensor.cpp +++ b/src/joysensor.cpp @@ -18,19 +18,22 @@ #include "joysensor.h" #include "setjoystick.h" +#include "joybuttontypes/joysensorbutton.h" #include JoySensor::JoySensor(JoyAxis *axisX, JoyAxis *axisY, JoyAxis *axisZ, - int type, int originset, SetJoystick *parentSet, QObject *parent) + int type, int originset, SetJoystick *parent_set, QObject *parent) : QObject(parent), m_type(type), + m_originset(originset), + m_parent_set(parent_set), m_axisX(axisX), m_axisY(axisY), m_axisZ(axisZ) { - reset(); + populateButtons(); } JoySensor::~JoySensor() @@ -89,12 +92,37 @@ QString JoySensor::getPartialName(bool forceFullFormat, bool displayNames) return label; } +JoySensorDirection JoySensor::getCurrentDirection() +{ + return m_current_direction; +} + int JoySensor::getType() { return m_type; } +QHash *JoySensor::getButtons() { return &m_buttons; } + void JoySensor::setDefaultSensorName(QString tempname) { m_default_sensor_name = tempname; } QString JoySensor::getDefaultSensorName() { return m_default_sensor_name; } +/** + * @brief Get pointer to the set that a sensor belongs to. + * @return Pointer to the set that a sensor belongs to. + */ +SetJoystick *JoySensor::getParentSet() +{ + SetJoystick *temp = nullptr; + + if (m_axisX != nullptr) + temp = m_axisX->getParentSet(); + else if (m_axisY != nullptr) + temp = m_axisY->getParentSet(); + else if (m_axisZ != nullptr) + temp = m_axisZ->getParentSet(); + + return temp; +} + JoyAxis *JoySensor::getAxisX() { return m_axisX; } JoyAxis *JoySensor::getAxisY() { return m_axisY; } @@ -105,6 +133,63 @@ void JoySensor::reset() { } +void JoySensor::populateButtons() +{ + JoySensorButton *button = nullptr; + if (m_type == ACCELEROMETER) + { + button = new JoySensorButton( + this, JoySensorDirection::ACCEL_UP, m_originset, getParentSet(), this); + m_buttons.insert(JoySensorDirection::ACCEL_UP, button); + + button = new JoySensorButton( + this, JoySensorDirection::ACCEL_DOWN, m_originset, getParentSet(), this); + m_buttons.insert(JoySensorDirection::ACCEL_DOWN, button); + + button = new JoySensorButton( + this, JoySensorDirection::ACCEL_LEFT, m_originset, getParentSet(), this); + m_buttons.insert(JoySensorDirection::ACCEL_LEFT, button); + + button = new JoySensorButton( + this, JoySensorDirection::ACCEL_RIGHT, m_originset, getParentSet(), this); + m_buttons.insert(JoySensorDirection::ACCEL_RIGHT, button); + + button = new JoySensorButton( + this, JoySensorDirection::ACCEL_FWD, m_originset, getParentSet(), this); + m_buttons.insert(JoySensorDirection::ACCEL_FWD, button); + + button = new JoySensorButton( + this, JoySensorDirection::ACCEL_BWD, m_originset, getParentSet(), this); + m_buttons.insert(JoySensorDirection::ACCEL_BWD, button); + } + else + { + button = new JoySensorButton( + this, JoySensorDirection::GYRO_NICK_P, m_originset, getParentSet(), this); + m_buttons.insert(JoySensorDirection::GYRO_NICK_P, button); + + button = new JoySensorButton( + this, JoySensorDirection::GYRO_NICK_N, m_originset, getParentSet(), this); + m_buttons.insert(JoySensorDirection::GYRO_NICK_N, button); + + button = new JoySensorButton( + this, JoySensorDirection::GYRO_ROLL_P, m_originset, getParentSet(), this); + m_buttons.insert(JoySensorDirection::GYRO_ROLL_P, button); + + button = new JoySensorButton( + this, JoySensorDirection::GYRO_ROLL_N, m_originset, getParentSet(), this); + m_buttons.insert(JoySensorDirection::GYRO_ROLL_N, button); + + button = new JoySensorButton( + this, JoySensorDirection::GYRO_YAW_P, m_originset, getParentSet(), this); + m_buttons.insert(JoySensorDirection::GYRO_YAW_P, button); + + button = new JoySensorButton( + this, JoySensorDirection::GYRO_YAW_N, m_originset, getParentSet(), this); + m_buttons.insert(JoySensorDirection::GYRO_YAW_N, button); + } +} + QString JoySensor::sensorTypeName() const { if (m_type == ACCELEROMETER) return tr("Accelerometer"); diff --git a/src/joysensor.h b/src/joysensor.h index 29d412169..0c89d0193 100644 --- a/src/joysensor.h +++ b/src/joysensor.h @@ -20,8 +20,10 @@ #include #include "joyaxis.h" +#include "joysensordirection.h" class SetJoystick; +class JoySensorButton; class JoySensor : public QObject { @@ -29,7 +31,7 @@ class JoySensor : public QObject public: explicit JoySensor(JoyAxis *axisX, JoyAxis *axisY, JoyAxis *axisZ, - int type, int originset, SetJoystick *parentSet, QObject *parent); + int type, int originset, SetJoystick *parent_set, QObject *parent); ~JoySensor(); void queuePendingEvent(float* data, bool ignoresets = false, bool updateLastValues = true); @@ -39,11 +41,15 @@ class JoySensor : public QObject virtual QString getName(bool forceFullFormat = false, bool displayNames = false); virtual QString getPartialName(bool forceFullFormat = false, bool displayNames = false); + JoySensorDirection getCurrentDirection(); + int getType(); + QHash *getButtons(); virtual void setDefaultSensorName(QString tempname); virtual QString getDefaultSensorName(); + SetJoystick *getParentSet(); JoyAxis *getAxisX(); JoyAxis *getAxisY(); JoyAxis *getAxisZ(); @@ -53,19 +59,30 @@ class JoySensor : public QObject GYROSCOPE }; + signals: + void active(int value); + void released(int value); + void stickNameChanged(); + void joyModeChanged(); + public slots: void reset(); protected: + void populateButtons(); + QString sensorTypeName() const; + int m_type; + int m_originset; QString m_sensor_name; QString m_default_sensor_name; - QString sensorTypeName() const; - private: + JoySensorDirection m_current_direction; + SetJoystick *m_parent_set; QPointer m_axisX; QPointer m_axisY; QPointer m_axisZ; + QHash m_buttons; }; diff --git a/src/joysensorbuttonpushbutton.cpp b/src/joysensorbuttonpushbutton.cpp index 9099f1063..5ef7435c3 100644 --- a/src/joysensorbuttonpushbutton.cpp +++ b/src/joysensorbuttonpushbutton.cpp @@ -18,8 +18,7 @@ #include "joysensorbuttonpushbutton.h" //#include "joybuttoncontextmenu.h" -//#include "joybuttontypes/joycontrolstickbutton.h" -//#include "joybuttontypes/joycontrolstickmodifierbutton.h" +#include "joybuttontypes/joysensorbutton.h" #include "joysensor.h" #include @@ -27,9 +26,9 @@ #include JoySensorButtonPushButton::JoySensorButtonPushButton( - /*JoySensorButton *button,*/ bool displayNames, QWidget *parent) - : FlashButtonWidget(displayNames, parent)//, - //m_button(button) + JoySensorButton *button, bool displayNames, QWidget *parent) + : FlashButtonWidget(displayNames, parent), + m_button(button) { refreshLabel(); enableFlashes(); @@ -37,21 +36,35 @@ JoySensorButtonPushButton::JoySensorButtonPushButton( tryFlash(); setContextMenuPolicy(Qt::CustomContextMenu); - /*connect(this, &JoySensorButtonPushButton::customContextMenuRequested, this, - &JoySensorButtonPushButton::showContextMenu); - connect(button, &JoySensorButton::propertyUpdated, this, &JoySensorButtonPushButton::refreshLabel); - connect(button, &JoySensorButton::activeZoneChanged, this, &JoySensorButtonPushButton::refreshLabel); - connect(button->getSensor()->getModifierButton(), &JoySensorModifierButton::activeZoneChanged, this, - &JoySensorButtonPushButton::refreshLabel);*/ + connect(this, &JoySensorButtonPushButton::customContextMenuRequested, this, + &JoySensorButtonPushButton::showContextMenu); + connect(m_button, &JoySensorButton::propertyUpdated, this, + &JoySensorButtonPushButton::refreshLabel); + connect(m_button, &JoySensorButton::activeZoneChanged, this, + &JoySensorButtonPushButton::refreshLabel); } void JoySensorButtonPushButton::disableFlashes() { + if (m_button != nullptr) + { + disconnect(m_button, &JoySensorButton::clicked, this, + &JoySensorButtonPushButton::flash); + disconnect(m_button, &JoySensorButton::released, this, + &JoySensorButtonPushButton::unflash); + } unflash(); } void JoySensorButtonPushButton::enableFlashes() { + if (m_button != nullptr) + { + connect(m_button, &JoySensorButton::clicked, this, + &JoySensorButtonPushButton::flash, Qt::QueuedConnection); + connect(m_button, &JoySensorButton::released, this, + &JoySensorButtonPushButton::unflash, Qt::QueuedConnection); + } } /** @@ -60,7 +73,20 @@ void JoySensorButtonPushButton::enableFlashes() */ QString JoySensorButtonPushButton::generateLabel() { - QString temp = QString("[NO KEY]"); + QString temp = QString(); + if (m_button != nullptr) + { + if (!m_button->getActionName().isEmpty() && ifDisplayNames()) + { + qDebug() << "Action name was not empty"; + temp = m_button->getActionName().replace("&", "&&"); + + } else + { + qDebug() << "Action name was empty"; + temp = m_button->getCalculatedActiveZoneSummary().replace("&", "&&"); + } + } qDebug() << "Here is name of action for pushed sensor button: " << temp; @@ -73,4 +99,6 @@ void JoySensorButtonPushButton::showContextMenu(const QPoint &point) void JoySensorButtonPushButton::tryFlash() { + if (m_button->getButtonState()) + flash(); } diff --git a/src/joysensorbuttonpushbutton.h b/src/joysensorbuttonpushbutton.h index 11cc2d0c0..106b9ec81 100644 --- a/src/joysensorbuttonpushbutton.h +++ b/src/joysensorbuttonpushbutton.h @@ -27,7 +27,8 @@ class JoySensorButtonPushButton : public FlashButtonWidget Q_PROPERTY(bool isflashing READ isButtonFlashing) public: - explicit JoySensorButtonPushButton(/*JoySensorButton *button, */bool displayNames, QWidget *parent = nullptr); + explicit JoySensorButtonPushButton( + JoySensorButton *button, bool displayNames, QWidget *parent = nullptr); void tryFlash(); @@ -42,5 +43,5 @@ class JoySensorButtonPushButton : public FlashButtonWidget void showContextMenu(const QPoint &point); private: - //JoySensorButton *m_button; + JoySensorButton *m_button; }; diff --git a/src/joysensordirection.h b/src/joysensordirection.h index e7378d451..008e2f417 100644 --- a/src/joysensordirection.h +++ b/src/joysensordirection.h @@ -19,6 +19,7 @@ enum JoySensorDirection { + CENTERED, GYRO_YAW_P, GYRO_YAW_N, GYRO_NICK_P, diff --git a/src/joysensorpushbutton.cpp b/src/joysensorpushbutton.cpp index 8414c7afd..7650b06b4 100644 --- a/src/joysensorpushbutton.cpp +++ b/src/joysensorpushbutton.cpp @@ -31,11 +31,15 @@ JoySensorPushButton::JoySensorPushButton(JoySensor *sensor, bool displayNames, Q tryFlash(); setContextMenuPolicy(Qt::CustomContextMenu); -/* connect(this, &JoySensorPushButton::customContextMenuRequested, this, &JoySensorPushButton::showContextMenu); - - connect(m_sensor, &JoySensor::active, this, &JoySensorPushButton::flash, Qt::QueuedConnection); - connect(m_sensor, &JoySensor::released, this, &JoySensorPushButton::unflash, Qt::QueuedConnection); - connect(m_sensor, &JoySensor::stickNameChanged, this, &JoySensorPushButton::refreshLabel);*/ + connect(this, &JoySensorPushButton::customContextMenuRequested, this, + &JoySensorPushButton::showContextMenu); + + connect(m_sensor, &JoySensor::active, this, + &JoySensorPushButton::flash, Qt::QueuedConnection); + connect(m_sensor, &JoySensor::released, this, + &JoySensorPushButton::unflash, Qt::QueuedConnection); + connect(m_sensor, &JoySensor::stickNameChanged, this, + &JoySensorPushButton::refreshLabel); } JoySensor *JoySensorPushButton::getSensor() const { return m_sensor; } @@ -59,11 +63,17 @@ QString JoySensorPushButton::generateLabel() void JoySensorPushButton::disableFlashes() { + disconnect(m_sensor, &JoySensor::active, this, &JoySensorPushButton::flash); + disconnect(m_sensor, &JoySensor::released, this, &JoySensorPushButton::unflash); unflash(); } void JoySensorPushButton::enableFlashes() { + connect(m_sensor, &JoySensor::active, this, + &JoySensorPushButton::flash, Qt::QueuedConnection); + connect(m_sensor, &JoySensor::released, this, + &JoySensorPushButton::unflash, Qt::QueuedConnection); } void JoySensorPushButton::showContextMenu(const QPoint &point) @@ -72,4 +82,6 @@ void JoySensorPushButton::showContextMenu(const QPoint &point) void JoySensorPushButton::tryFlash() { + if (m_sensor->getCurrentDirection() != JoySensorDirection::CENTERED) + flash(); } diff --git a/src/sensorpushbuttongroup.cpp b/src/sensorpushbuttongroup.cpp index aff23f870..ce6af6419 100644 --- a/src/sensorpushbuttongroup.cpp +++ b/src/sensorpushbuttongroup.cpp @@ -19,7 +19,7 @@ //#include "buttoneditdialog.h" #include "inputdevice.h" -//#include "joybuttontypes/joycontrolstickbutton.h" +#include "joybuttontypes/joysensorbutton.h" #include "joysensor.h" #include "joysensorbuttonpushbutton.h" //#include "joysensoreditdialog.h" @@ -65,7 +65,8 @@ void SensorPushButtonGroup::generateButtons() QIcon(":/images/actions/games_config_options.png")) ); - //connect(m_sensor_widget, &JoySensorPushButton::clicked, this, &SensorButtonGroup::showSensorDialog); + connect(m_sensor_widget, &JoySensorPushButton::clicked, this, + &SensorPushButtonGroup::showSensorDialog); addWidget(m_sensor_widget, 1, 1); } @@ -74,14 +75,16 @@ JoySensorButtonPushButton * SensorPushButtonGroup::generateBtnToGrid( JoySensorDirection sensorDir, int gridRow, int gridCol) { - //JoySensorButton *button = sensor->getButtons()->value(sensorDir); - pushbutton = new JoySensorButtonPushButton(/*button,*/ m_display_names, parentWidget()); + JoySensorButton *button = m_sensor->getButtons()->value(sensorDir); + JoySensorButtonPushButton *pushbutton = + new JoySensorButtonPushButton(button, m_display_names, parentWidget()); - /*connect(pushbutton, &JoySensorButtonPushButton::clicked, this, - [this, pushbutton] { openSensorButtonDialog(pushbutton); });*/ + connect(pushbutton, &JoySensorButtonPushButton::clicked, this, + [this, pushbutton] { openSensorButtonDialog(pushbutton); }); - //button->establishPropertyUpdatedConnections(); - //connect(button, &JoySensorButton::slotsChanged, this, &SensorPushButtonGroup::propogateSlotsChanged); + button->establishPropertyUpdatedConnections(); + connect(button, &JoySensorButton::slotsChanged, this, + &SensorPushButtonGroup::propogateSlotsChanged); addWidget(pushbutton, gridRow, gridCol); return pushbutton;