Disable register access via the inspection window, when then target is not in a STOPPED state

This commit is contained in:
Nav
2021-09-21 21:18:14 +01:00
parent 073a9e8bb7
commit d66439d1df
3 changed files with 23 additions and 11 deletions

View File

@@ -21,10 +21,12 @@ using namespace Bloom::Exceptions;
using Bloom::Targets::TargetRegisterDescriptor; using Bloom::Targets::TargetRegisterDescriptor;
using Bloom::Targets::TargetRegisterDescriptors; using Bloom::Targets::TargetRegisterDescriptors;
using Bloom::Targets::TargetRegisterType; using Bloom::Targets::TargetRegisterType;
using Bloom::Targets::TargetState;
TargetRegisterInspectorWindow::TargetRegisterInspectorWindow( TargetRegisterInspectorWindow::TargetRegisterInspectorWindow(
const Targets::TargetRegisterDescriptor& registerDescriptor, const Targets::TargetRegisterDescriptor& registerDescriptor,
InsightWorker& insightWorker, InsightWorker& insightWorker,
TargetState currentTargetState,
std::optional<Targets::TargetMemoryBuffer> registerValue std::optional<Targets::TargetMemoryBuffer> registerValue
): ):
registerDescriptor(registerDescriptor), registerDescriptor(registerDescriptor),
@@ -192,6 +194,7 @@ registerValue(registerValue.value_or(Targets::TargetMemoryBuffer(registerDescrip
); );
this->updateRegisterValueInputField(); this->updateRegisterValueInputField();
this->onTargetStateChanged(currentTargetState);
this->show(); this->show();
} }
@@ -232,8 +235,20 @@ void TargetRegisterInspectorWindow::onValueTextInputChanged(QString text) {
} }
} }
void TargetRegisterInspectorWindow::onTargetStateChanged(Targets::TargetState newState) { void TargetRegisterInspectorWindow::onTargetStateChanged(TargetState newState) {
using Targets::TargetState; 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; this->targetState = newState;
} }
@@ -301,16 +316,12 @@ void TargetRegisterInspectorWindow::refreshRegisterValue() {
} }
void TargetRegisterInspectorWindow::applyChanges() { void TargetRegisterInspectorWindow::applyChanges() {
this->applyButton->setDisabled(true); this->registerValueContainer->setDisabled(true);
this->registerValueBitsetWidgetContainer->setDisabled(true);
const auto targetRegister = Targets::TargetRegister(this->registerDescriptor, this->registerValue); const auto targetRegister = Targets::TargetRegister(this->registerDescriptor, this->registerValue);
auto writeRegisterTask = new WriteTargetRegister( auto writeRegisterTask = new WriteTargetRegister(targetRegister);
targetRegister
);
this->connect(writeRegisterTask, &InsightWorkerTask::completed, this, [this, targetRegister] { this->connect(writeRegisterTask, &InsightWorkerTask::completed, this, [this, targetRegister] {
this->registerValueBitsetWidgetContainer->setDisabled(false); this->registerValueContainer->setDisabled(false);
this->applyButton->setDisabled(false);
emit this->insightWorker.targetRegistersWritten( emit this->insightWorker.targetRegistersWritten(
{targetRegister}, {targetRegister},
DateTime::currentDateTime() DateTime::currentDateTime()
@@ -321,8 +332,7 @@ void TargetRegisterInspectorWindow::applyChanges() {
this->connect(writeRegisterTask, &InsightWorkerTask::failed, this, [this] { this->connect(writeRegisterTask, &InsightWorkerTask::failed, this, [this] {
// TODO: Let the user know the write failed. // TODO: Let the user know the write failed.
this->registerValueBitsetWidgetContainer->setDisabled(false); this->registerValueContainer->setDisabled(false);
this->applyButton->setDisabled(false);
}); });
this->insightWorker.queueTask(writeRegisterTask); this->insightWorker.queueTask(writeRegisterTask);

View File

@@ -60,6 +60,7 @@ namespace Bloom::Widgets
TargetRegisterInspectorWindow( TargetRegisterInspectorWindow(
const Targets::TargetRegisterDescriptor& registerDescriptor, const Targets::TargetRegisterDescriptor& registerDescriptor,
InsightWorker& insightWorker, InsightWorker& insightWorker,
Targets::TargetState currentTargetState,
std::optional<Targets::TargetMemoryBuffer> registerValue = std::nullopt std::optional<Targets::TargetMemoryBuffer> registerValue = std::nullopt
); );

View File

@@ -101,6 +101,7 @@ void RegisterWidget::openInspectionWindow() {
this->inspectWindow = new TargetRegisterInspectorWindow( this->inspectWindow = new TargetRegisterInspectorWindow(
this->descriptor, this->descriptor,
this->insightWorker, this->insightWorker,
this->targetState,
this->currentRegister.has_value() ? std::optional(this->currentRegister->value) : std::nullopt this->currentRegister.has_value() ? std::optional(this->currentRegister->value) : std::nullopt
); );