Disable register access via the inspection window, when then target is not in a STOPPED state
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user