Functionality for the target package widget is now completely contained within the TargetPackageWidget class (and derivations).
84 lines
2.2 KiB
C++
84 lines
2.2 KiB
C++
#include "TargetPackageWidget.hpp"
|
|
|
|
#include <QEvent>
|
|
|
|
#include "src/Insight/InsightWorker/Tasks/RefreshTargetPinStates.hpp"
|
|
|
|
using namespace Bloom;
|
|
using namespace Bloom::Widgets::InsightTargetWidgets;
|
|
|
|
using Bloom::Targets::TargetState;
|
|
|
|
TargetPackageWidget::TargetPackageWidget(
|
|
Targets::TargetVariant targetVariant,
|
|
InsightWorker& insightWorker,
|
|
QWidget* parent
|
|
): QWidget(parent), targetVariant(std::move(targetVariant)), insightWorker(insightWorker) {
|
|
this->connect(
|
|
&(this->insightWorker),
|
|
&InsightWorker::targetStateUpdated,
|
|
this,
|
|
&TargetPackageWidget::onTargetStateChanged
|
|
);
|
|
|
|
this->connect(
|
|
&(this->insightWorker),
|
|
&InsightWorker::targetIoPortsUpdated,
|
|
this,
|
|
[this] {
|
|
if (this->targetState == TargetState::STOPPED) {
|
|
this->refreshPinStates();
|
|
}
|
|
}
|
|
);
|
|
|
|
this->setDisabled(true);
|
|
}
|
|
|
|
void TargetPackageWidget::refreshPinStates(std::optional<std::function<void(void)>> callback) {
|
|
auto refreshTask = new RefreshTargetPinStates(this->targetVariant.id);
|
|
this->connect(
|
|
refreshTask,
|
|
&RefreshTargetPinStates::targetPinStatesRetrieved,
|
|
this,
|
|
&TargetPackageWidget::updatePinStates
|
|
);
|
|
|
|
if (callback.has_value()) {
|
|
this->connect(
|
|
refreshTask,
|
|
&InsightWorkerTask::completed,
|
|
this,
|
|
callback.value()
|
|
);
|
|
}
|
|
|
|
this->insightWorker.queueTask(refreshTask);
|
|
}
|
|
|
|
void TargetPackageWidget::updatePinStates(const Targets::TargetPinStateMappingType& pinStatesByNumber) {
|
|
for (auto& pinWidget : this->pinWidgets) {
|
|
auto pinNumber = pinWidget->getPinNumber();
|
|
if (pinStatesByNumber.contains(pinNumber)) {
|
|
pinWidget->updatePinState(pinStatesByNumber.at(pinNumber));
|
|
}
|
|
}
|
|
|
|
this->repaint();
|
|
}
|
|
|
|
void TargetPackageWidget::onTargetStateChanged(TargetState newState) {
|
|
this->targetState = newState;
|
|
|
|
if (newState == TargetState::RUNNING) {
|
|
this->setDisabled(true);
|
|
|
|
} else if (newState == TargetState::STOPPED) {
|
|
this->refreshPinStates([this] {
|
|
if (this->targetState == TargetState::STOPPED) {
|
|
this->setDisabled(false);
|
|
}
|
|
});
|
|
}
|
|
}
|