diff --git a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetRegisterInspector/TargetRegisterInspectorWindow.cpp b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetRegisterInspector/TargetRegisterInspectorWindow.cpp index d3878306..d3b7b373 100644 --- a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetRegisterInspector/TargetRegisterInspectorWindow.cpp +++ b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetRegisterInspector/TargetRegisterInspectorWindow.cpp @@ -21,10 +21,12 @@ using namespace Bloom::Exceptions; using Bloom::Targets::TargetRegisterDescriptor; using Bloom::Targets::TargetRegisterDescriptors; using Bloom::Targets::TargetRegisterType; +using Bloom::Targets::TargetState; TargetRegisterInspectorWindow::TargetRegisterInspectorWindow( const Targets::TargetRegisterDescriptor& registerDescriptor, InsightWorker& insightWorker, + TargetState currentTargetState, std::optional registerValue ): registerDescriptor(registerDescriptor), @@ -192,6 +194,7 @@ registerValue(registerValue.value_or(Targets::TargetMemoryBuffer(registerDescrip ); this->updateRegisterValueInputField(); + this->onTargetStateChanged(currentTargetState); this->show(); } @@ -232,8 +235,20 @@ void TargetRegisterInspectorWindow::onValueTextInputChanged(QString text) { } } -void TargetRegisterInspectorWindow::onTargetStateChanged(Targets::TargetState newState) { - using Targets::TargetState; +void TargetRegisterInspectorWindow::onTargetStateChanged(TargetState newState) { + if (newState != TargetState::STOPPED) { + this->registerValueTextInput->setDisabled(true); + this->registerValueBitsetWidgetContainer->setDisabled(true); + this->applyButton->setDisabled(true); + this->refreshValueButton->setDisabled(true); + + } else if (this->targetState != TargetState::STOPPED && this->registerValueContainer->isEnabled()) { + this->registerValueTextInput->setDisabled(false); + this->registerValueBitsetWidgetContainer->setDisabled(false); + this->applyButton->setDisabled(false); + this->refreshValueButton->setDisabled(false); + } + this->targetState = newState; } @@ -301,16 +316,12 @@ void TargetRegisterInspectorWindow::refreshRegisterValue() { } void TargetRegisterInspectorWindow::applyChanges() { - this->applyButton->setDisabled(true); - this->registerValueBitsetWidgetContainer->setDisabled(true); + this->registerValueContainer->setDisabled(true); const auto targetRegister = Targets::TargetRegister(this->registerDescriptor, this->registerValue); - auto writeRegisterTask = new WriteTargetRegister( - targetRegister - ); + auto writeRegisterTask = new WriteTargetRegister(targetRegister); this->connect(writeRegisterTask, &InsightWorkerTask::completed, this, [this, targetRegister] { - this->registerValueBitsetWidgetContainer->setDisabled(false); - this->applyButton->setDisabled(false); + this->registerValueContainer->setDisabled(false); emit this->insightWorker.targetRegistersWritten( {targetRegister}, DateTime::currentDateTime() @@ -321,8 +332,7 @@ void TargetRegisterInspectorWindow::applyChanges() { this->connect(writeRegisterTask, &InsightWorkerTask::failed, this, [this] { // TODO: Let the user know the write failed. - this->registerValueBitsetWidgetContainer->setDisabled(false); - this->applyButton->setDisabled(false); + this->registerValueContainer->setDisabled(false); }); this->insightWorker.queueTask(writeRegisterTask); diff --git a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetRegisterInspector/TargetRegisterInspectorWindow.hpp b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetRegisterInspector/TargetRegisterInspectorWindow.hpp index 74445c77..0f0f876f 100644 --- a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetRegisterInspector/TargetRegisterInspectorWindow.hpp +++ b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetRegisterInspector/TargetRegisterInspectorWindow.hpp @@ -60,6 +60,7 @@ namespace Bloom::Widgets TargetRegisterInspectorWindow( const Targets::TargetRegisterDescriptor& registerDescriptor, InsightWorker& insightWorker, + Targets::TargetState currentTargetState, std::optional registerValue = std::nullopt ); diff --git a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetRegistersPane/RegisterWidget.cpp b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetRegistersPane/RegisterWidget.cpp index e21dbf35..6f8f22b5 100644 --- a/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetRegistersPane/RegisterWidget.cpp +++ b/src/Insight/UserInterfaces/InsightWindow/Widgets/TargetRegistersPane/RegisterWidget.cpp @@ -101,6 +101,7 @@ void RegisterWidget::openInspectionWindow() { this->inspectWindow = new TargetRegisterInspectorWindow( this->descriptor, this->insightWorker, + this->targetState, this->currentRegister.has_value() ? std::optional(this->currentRegister->value) : std::nullopt );