#include "controllersetup.h" #include "ui_controllersetup.h" #include "logcategories.h" controllerSetup::controllerSetup(QWidget* parent) : QDialog(parent), ui(new Ui::controllerSetup) { ui->setupUi(this); scene = new controllerScene(); connect(scene, SIGNAL(mousePressed(QPoint)), this, SLOT(mousePressed(QPoint))); ui->graphicsView->setScene(scene); ui->qkBrightCombo->setVisible(false); ui->qkOrientCombo->setVisible(false); ui->qkSpeedCombo->setVisible(false); ui->qkColorButton->setVisible(false); ui->qkTimeoutSpin->setVisible(false); ui->qkTimeoutLabel->setVisible(false); textItem = scene->addText("No USB controller found"); textItem->setDefaultTextColor(Qt::gray); this->resize(this->sizeHint()); } controllerSetup::~controllerSetup() { /* // Remove any existing button text: for (QGraphicsItem* item : scene->items()) { QGraphicsTextItem* txt = qgraphicsitem_cast(item); if (!txt || txt == textItem) continue; scene->removeItem(txt); delete txt; } if (onEventProxy != Q_NULLPTR) { scene->removeItem(onEventProxy); onEventProxy = Q_NULLPTR; delete onEvent; onEvent = Q_NULLPTR; } if (offEventProxy != Q_NULLPTR) { scene->removeItem(offEventProxy); offEventProxy = Q_NULLPTR; delete offEvent; offEvent = Q_NULLPTR; } if (knobEventProxy != Q_NULLPTR) { scene->removeItem(knobEventProxy); knobEventProxy = Q_NULLPTR; delete knobEvent; knobEvent = Q_NULLPTR; } */ if (bgImage != Q_NULLPTR) { scene->removeItem(bgImage); delete bgImage; bgImage = Q_NULLPTR; } delete textItem; delete scene; delete ui; } void controllerSetup::mousePressed(QPoint p) { // Receive mouse event from the scene qDebug() << "Looking for button Point x=" << p.x() << " y=" << p.y(); if (onEvent == Q_NULLPTR|| offEvent == Q_NULLPTR|| knobEvent == Q_NULLPTR) { qInfo(logUsbControl()) << "Event missing, cannot continue..."; return; } bool found = false; QMutexLocker locker(mutex); for (BUTTON& b : *buttons) { if (b.dev == currentDevice && b.pos.contains(p)) { found = true; currentButton = &b; qDebug() << "Button" << currentButton->num << "On Event" << currentButton->onCommand->text << "Off Event" << currentButton->offCommand->text; onEvent->blockSignals(true); onEvent->move(p); onEvent->setCurrentIndex(onEvent->findData(currentButton->onCommand->index)); onEvent->show(); onEvent->blockSignals(false); p.setY(p.y() + 40); offEvent->blockSignals(true); offEvent->move(p); offEvent->setCurrentIndex(offEvent->findData(currentButton->offCommand->index)); offEvent->show(); offEvent->blockSignals(false); knobEvent->hide(); break; } } if (!found) { for (KNOB& k : *knobs) { if (k.dev == currentDevice && k.pos.contains(p)) { found = true; currentKnob = &k; qDebug() << "Knob" << currentKnob->num << "Event" << currentKnob->command->text; knobEvent->blockSignals(true); knobEvent->move(p); knobEvent->setCurrentIndex(knobEvent->findData(currentKnob->command->index)); knobEvent->show(); knobEvent->blockSignals(false); onEvent->hide(); offEvent->hide(); break; } } } if (!found) { onEvent->hide(); offEvent->hide(); knobEvent->hide(); } } void controllerSetup::onEventIndexChanged(int index) { Q_UNUSED(index); if (currentButton != Q_NULLPTR && onEvent->currentData().toInt() < commands->size()) { QMutexLocker locker(mutex); currentButton->onCommand = &commands->at(onEvent->currentData().toInt()); currentButton->onText->setPlainText(currentButton->onCommand->text); currentButton->onText->setPos(currentButton->pos.center().x() - currentButton->onText->boundingRect().width() / 2, (currentButton->pos.center().y() - currentButton->onText->boundingRect().height() / 2)-6); // Signal that any button programming on the device should be completed. emit programButton(currentButton->num, currentButton->onCommand->text); } } void controllerSetup::offEventIndexChanged(int index) { Q_UNUSED(index); if (currentButton != Q_NULLPTR && offEvent->currentData().toInt() < commands->size()) { QMutexLocker locker(mutex); currentButton->offCommand = &commands->at(offEvent->currentData().toInt()); currentButton->offText->setPlainText(currentButton->offCommand->text); currentButton->offText->setPos(currentButton->pos.center().x() - currentButton->offText->boundingRect().width() / 2, (currentButton->pos.center().y() - currentButton->offText->boundingRect().height() / 2)+6); } } void controllerSetup::knobEventIndexChanged(int index) { Q_UNUSED(index); if (currentKnob != Q_NULLPTR && knobEvent->currentData().toInt() < commands->size()) { QMutexLocker locker(mutex); currentKnob->command = &commands->at(knobEvent->currentData().toInt()); currentKnob->text->setPlainText(currentKnob->command->text); currentKnob->text->setPos(currentKnob->pos.center().x() - currentKnob->text->boundingRect().width() / 2, (currentKnob->pos.center().y() - currentKnob->text->boundingRect().height() / 2)); } } void controllerSetup::newDevice(unsigned char devType, QVector