This commit is contained in:
Nav
2023-03-13 00:45:26 +00:00
parent c394ce52df
commit 4895b2c919
11 changed files with 98 additions and 61 deletions

View File

@@ -265,9 +265,9 @@ namespace Bloom
} }
void Insight::onInsightWindowActivated() { void Insight::onInsightWindowActivated() {
auto* getTargetStateTask = new GetTargetState(); const auto getTargetStateTask = QSharedPointer<GetTargetState>(new GetTargetState(), &QObject::deleteLater);
QObject::connect( QObject::connect(
getTargetStateTask, getTargetStateTask.get(),
&GetTargetState::targetState, &GetTargetState::targetState,
this, this,
[this] (Targets::TargetState targetState) { [this] (Targets::TargetState targetState) {
@@ -354,10 +354,13 @@ namespace Bloom
} }
if (event.state == TargetControllerState::ACTIVE) { if (event.state == TargetControllerState::ACTIVE) {
auto* getTargetDescriptorTask = new GetTargetDescriptor(); const auto getTargetDescriptorTask = QSharedPointer<GetTargetDescriptor>(
new GetTargetDescriptor(),
&QObject::deleteLater
);
QObject::connect( QObject::connect(
getTargetDescriptorTask, getTargetDescriptorTask.get(),
&GetTargetDescriptor::targetDescriptor, &GetTargetDescriptor::targetDescriptor,
this, this,
[this] (Targets::TargetDescriptor targetDescriptor) { [this] (Targets::TargetDescriptor targetDescriptor) {

View File

@@ -33,16 +33,15 @@ namespace Bloom
emit this->ready(); emit this->ready();
} }
void InsightWorker::queueTask(InsightWorkerTask* task) { void InsightWorker::queueTask(const QSharedPointer<InsightWorkerTask>& task) {
const auto taskPtr = QSharedPointer<InsightWorkerTask>(task, &QObject::deleteLater); task->moveToThread(nullptr);
taskPtr->moveToThread(nullptr);
{ {
const auto taskQueueLock = InsightWorker::queuedTasksById.acquireLock(); const auto taskQueueLock = InsightWorker::queuedTasksById.acquireLock();
InsightWorker::queuedTasksById.getValue().emplace(taskPtr->id, taskPtr); InsightWorker::queuedTasksById.getValue().emplace(task->id, task);
} }
emit InsightSignals::instance()->taskQueued(taskPtr); emit InsightSignals::instance()->taskQueued(task);
} }
void InsightWorker::executeTasks() { void InsightWorker::executeTasks() {

View File

@@ -29,7 +29,7 @@ namespace Bloom
InsightWorker() = default; InsightWorker() = default;
void startup(); void startup();
static void queueTask(InsightWorkerTask* task); static void queueTask(const QSharedPointer<InsightWorkerTask>& task);
signals: signals:
void ready(); void ready();

View File

@@ -915,10 +915,13 @@ namespace Bloom
} }
void InsightWindow::refreshProgramCounter(std::optional<std::function<void(void)>> callback) { void InsightWindow::refreshProgramCounter(std::optional<std::function<void(void)>> callback) {
auto* readProgramCounterTask = new ReadProgramCounter(); const auto readProgramCounterTask = QSharedPointer<ReadProgramCounter>(
new ReadProgramCounter(),
&QObject::deleteLater
);
QObject::connect( QObject::connect(
readProgramCounterTask, readProgramCounterTask.get(),
&ReadProgramCounter::programCounterRead, &ReadProgramCounter::programCounterRead,
this, this,
[this] (Targets::TargetProgramCounter programCounter) { [this] (Targets::TargetProgramCounter programCounter) {
@@ -930,7 +933,7 @@ namespace Bloom
if (callback.has_value()) { if (callback.has_value()) {
QObject::connect( QObject::connect(
readProgramCounterTask, readProgramCounterTask.get(),
&ReadProgramCounter::finished, &ReadProgramCounter::finished,
this, this,
callback.value() callback.value()

View File

@@ -137,10 +137,13 @@ namespace Bloom::Widgets
} }
void ItemGraphicsScene::init() { void ItemGraphicsScene::init() {
auto* constructHexViewerTopLevelGroupItem = new ConstructHexViewerTopLevelGroupItem(this->focusedMemoryRegions, this->state); const auto constructHexViewerTopLevelGroupItem = QSharedPointer<ConstructHexViewerTopLevelGroupItem>(
new ConstructHexViewerTopLevelGroupItem(this->focusedMemoryRegions, this->state),
&QObject::deleteLater
);
QObject::connect( QObject::connect(
constructHexViewerTopLevelGroupItem, constructHexViewerTopLevelGroupItem.get(),
&ConstructHexViewerTopLevelGroupItem::topLevelGroupItem, &ConstructHexViewerTopLevelGroupItem::topLevelGroupItem,
this, this,
[this] (TopLevelGroupItem* item) { [this] (TopLevelGroupItem* item) {

View File

@@ -92,10 +92,13 @@ namespace Bloom::Widgets
} }
); );
auto* retrieveSnapshotsTask = new RetrieveMemorySnapshots(this->memoryDescriptor.type); const auto retrieveSnapshotsTask = QSharedPointer<RetrieveMemorySnapshots>(
new RetrieveMemorySnapshots(this->memoryDescriptor.type),
&QObject::deleteLater
);
QObject::connect( QObject::connect(
retrieveSnapshotsTask, retrieveSnapshotsTask.get(),
&RetrieveMemorySnapshots::memorySnapshotsRetrieved, &RetrieveMemorySnapshots::memorySnapshotsRetrieved,
this, this,
[this] (std::vector<MemorySnapshot> snapshots) { [this] (std::vector<MemorySnapshot> snapshots) {
@@ -136,17 +139,20 @@ namespace Bloom::Widgets
bool captureFocusedRegions, bool captureFocusedRegions,
bool captureDirectlyFromTarget bool captureDirectlyFromTarget
) { ) {
auto* captureTask = new CaptureMemorySnapshot( const auto captureTask = QSharedPointer<CaptureMemorySnapshot>(
std::move(name), new CaptureMemorySnapshot(
std::move(description), std::move(name),
this->memoryDescriptor.type, std::move(description),
{}, this->memoryDescriptor.type,
{}, {},
captureDirectlyFromTarget ? std::nullopt : this->data {},
captureDirectlyFromTarget ? std::nullopt : this->data
),
&QObject::deleteLater
); );
QObject::connect( QObject::connect(
captureTask, captureTask.get(),
&CaptureMemorySnapshot::memorySnapshotCaptured, &CaptureMemorySnapshot::memorySnapshotCaptured,
this, this,
[this] (MemorySnapshot snapshot) { [this] (MemorySnapshot snapshot) {

View File

@@ -298,15 +298,18 @@ namespace Bloom::Widgets
} }
); );
auto* readMemoryTask = new ReadTargetMemory( const auto readMemoryTask = QSharedPointer<ReadTargetMemory>(
this->targetMemoryDescriptor.type, new ReadTargetMemory(
this->targetMemoryDescriptor.addressRange.startAddress, this->targetMemoryDescriptor.type,
this->targetMemoryDescriptor.size(), this->targetMemoryDescriptor.addressRange.startAddress,
excludedAddressRanges this->targetMemoryDescriptor.size(),
excludedAddressRanges
),
&QObject::deleteLater
); );
QObject::connect( QObject::connect(
readMemoryTask, readMemoryTask.get(),
&ReadTargetMemory::targetMemoryRead, &ReadTargetMemory::targetMemoryRead,
this, this,
[this, callback] (const Targets::TargetMemoryBuffer& data) { [this, callback] (const Targets::TargetMemoryBuffer& data) {
@@ -314,9 +317,13 @@ namespace Bloom::Widgets
// Refresh the stack pointer if this is RAM. // Refresh the stack pointer if this is RAM.
if (this->targetMemoryDescriptor.type == Targets::TargetMemoryType::RAM) { if (this->targetMemoryDescriptor.type == Targets::TargetMemoryType::RAM) {
auto* readStackPointerTask = new ReadStackPointer(); const auto readStackPointerTask = QSharedPointer<ReadStackPointer>(
new ReadStackPointer(),
&QObject::deleteLater
);
QObject::connect( QObject::connect(
readStackPointerTask, readStackPointerTask.get(),
&ReadStackPointer::stackPointerRead, &ReadStackPointer::stackPointerRead,
this, this,
[this] (Targets::TargetStackPointer stackPointer) { [this] (Targets::TargetStackPointer stackPointer) {
@@ -325,7 +332,7 @@ namespace Bloom::Widgets
); );
QObject::connect( QObject::connect(
readStackPointerTask, readStackPointerTask.get(),
&InsightWorkerTask::finished, &InsightWorkerTask::finished,
this, this,
[this] { [this] {
@@ -339,7 +346,7 @@ namespace Bloom::Widgets
if (callback.has_value()) { if (callback.has_value()) {
QObject::connect( QObject::connect(
readStackPointerTask, readStackPointerTask.get(),
&InsightWorkerTask::completed, &InsightWorkerTask::completed,
this, this,
callback.value() callback.value()
@@ -354,7 +361,7 @@ namespace Bloom::Widgets
// If we're refreshing RAM, the UI should only be updated once we've retrieved the current stack pointer. // If we're refreshing RAM, the UI should only be updated once we've retrieved the current stack pointer.
if (this->targetMemoryDescriptor.type != Targets::TargetMemoryType::RAM) { if (this->targetMemoryDescriptor.type != Targets::TargetMemoryType::RAM) {
QObject::connect( QObject::connect(
readMemoryTask, readMemoryTask.get(),
&InsightWorkerTask::finished, &InsightWorkerTask::finished,
this, this,
[this] { [this] {
@@ -368,7 +375,7 @@ namespace Bloom::Widgets
if (callback.has_value()) { if (callback.has_value()) {
QObject::connect( QObject::connect(
readMemoryTask, readMemoryTask.get(),
&InsightWorkerTask::completed, &InsightWorkerTask::completed,
this, this,
callback.value() callback.value()
@@ -377,7 +384,7 @@ namespace Bloom::Widgets
} else { } else {
QObject::connect( QObject::connect(
readMemoryTask, readMemoryTask.get(),
&InsightWorkerTask::failed, &InsightWorkerTask::failed,
this, this,
[this] { [this] {

View File

@@ -317,10 +317,13 @@ namespace Bloom::Widgets
void TargetRegisterInspectorWindow::refreshRegisterValue() { void TargetRegisterInspectorWindow::refreshRegisterValue() {
this->registerValueContainer->setDisabled(true); this->registerValueContainer->setDisabled(true);
auto* readTargetRegisterTask = new ReadTargetRegisters({this->registerDescriptor}); const auto readTargetRegisterTask = QSharedPointer<ReadTargetRegisters>(
new ReadTargetRegisters({this->registerDescriptor}),
&QObject::deleteLater
);
QObject::connect( QObject::connect(
readTargetRegisterTask, readTargetRegisterTask.get(),
&ReadTargetRegisters::targetRegistersRead, &ReadTargetRegisters::targetRegistersRead,
this, this,
[this] (Targets::TargetRegisters targetRegisters) { [this] (Targets::TargetRegisters targetRegisters) {
@@ -335,7 +338,7 @@ namespace Bloom::Widgets
); );
QObject::connect( QObject::connect(
readTargetRegisterTask, readTargetRegisterTask.get(),
&InsightWorkerTask::failed, &InsightWorkerTask::failed,
this, this,
[this] { [this] {
@@ -352,15 +355,18 @@ namespace Bloom::Widgets
this->registerDescriptor, this->registerDescriptor,
this->registerValue this->registerValue
); );
auto* writeRegisterTask = new WriteTargetRegister(targetRegister); const auto writeRegisterTask = QSharedPointer<WriteTargetRegister>(
new WriteTargetRegister(targetRegister),
&QObject::deleteLater
);
QObject::connect(writeRegisterTask, &InsightWorkerTask::completed, this, [this, targetRegister] { QObject::connect(writeRegisterTask.get(), &InsightWorkerTask::completed, this, [this, targetRegister] {
this->registerValueContainer->setDisabled(false); this->registerValueContainer->setDisabled(false);
this->registerHistoryWidget->updateCurrentItemValue(targetRegister.value); this->registerHistoryWidget->updateCurrentItemValue(targetRegister.value);
this->registerHistoryWidget->selectCurrentItem(); this->registerHistoryWidget->selectCurrentItem();
}); });
QObject::connect(writeRegisterTask, &InsightWorkerTask::failed, this, [this] (QString errorMessage) { QObject::connect(writeRegisterTask.get(), &InsightWorkerTask::failed, this, [this] (QString errorMessage) {
this->registerValueContainer->setDisabled(false); this->registerValueContainer->setDisabled(false);
auto* errorDialogue = new ErrorDialogue( auto* errorDialogue = new ErrorDialogue(
"Error", "Error",

View File

@@ -266,14 +266,17 @@ namespace Bloom::Widgets
return; return;
} }
auto* readRegisterTask = new ReadTargetRegisters( const auto readRegisterTask = QSharedPointer<ReadTargetRegisters>(
registerDescriptor.has_value() new ReadTargetRegisters(
? Targets::TargetRegisterDescriptors({*registerDescriptor}) registerDescriptor.has_value()
: this->registerDescriptors ? Targets::TargetRegisterDescriptors({*registerDescriptor})
: this->registerDescriptors
),
&QObject::deleteLater
); );
QObject::connect( QObject::connect(
readRegisterTask, readRegisterTask.get(),
&ReadTargetRegisters::targetRegistersRead, &ReadTargetRegisters::targetRegistersRead,
this, this,
&TargetRegistersPaneWidget::onRegistersRead &TargetRegistersPaneWidget::onRegistersRead
@@ -281,7 +284,7 @@ namespace Bloom::Widgets
if (callback.has_value()) { if (callback.has_value()) {
QObject::connect( QObject::connect(
readRegisterTask, readRegisterTask.get(),
&InsightWorkerTask::completed, &InsightWorkerTask::completed,
this, this,
callback.value() callback.value()

View File

@@ -51,9 +51,13 @@ namespace Bloom::Widgets::InsightTargetWidgets
} }
void TargetPackageWidget::refreshPinStates(std::optional<std::function<void(void)>> callback) { void TargetPackageWidget::refreshPinStates(std::optional<std::function<void(void)>> callback) {
auto* refreshTask = new RefreshTargetPinStates(this->targetVariant.id); const auto refreshTask = QSharedPointer<RefreshTargetPinStates>(
new RefreshTargetPinStates(this->targetVariant.id),
&QObject::deleteLater
);
QObject::connect( QObject::connect(
refreshTask, refreshTask.get(),
&RefreshTargetPinStates::targetPinStatesRetrieved, &RefreshTargetPinStates::targetPinStatesRetrieved,
this, this,
&TargetPackageWidget::updatePinStates &TargetPackageWidget::updatePinStates
@@ -61,7 +65,7 @@ namespace Bloom::Widgets::InsightTargetWidgets
if (callback.has_value()) { if (callback.has_value()) {
QObject::connect( QObject::connect(
refreshTask, refreshTask.get(),
&InsightWorkerTask::completed, &InsightWorkerTask::completed,
this, this,
callback.value() callback.value()

View File

@@ -26,22 +26,25 @@ namespace Bloom::Widgets::InsightTargetWidgets
void TargetPinWidget::onWidgetBodyClicked() { void TargetPinWidget::onWidgetBodyClicked() {
// Currently, we only allow users to toggle the IO state of output pins // Currently, we only allow users to toggle the IO state of output pins
if (this->pinState.has_value() if (this->pinState.has_value() && this->pinState.value().ioDirection == TargetPinState::IoDirection::OUTPUT) {
&& this->pinState.value().ioDirection == TargetPinState::IoDirection::OUTPUT
) {
this->setDisabled(true); this->setDisabled(true);
auto pinState = this->pinState.value(); auto pinState = this->pinState.value();
pinState.ioState = (pinState.ioState == TargetPinState::IoState::HIGH) ? pinState.ioState = (pinState.ioState == TargetPinState::IoState::HIGH)
TargetPinState::IoState::LOW : TargetPinState::IoState::HIGH; ? TargetPinState::IoState::LOW
: TargetPinState::IoState::HIGH;
auto* setPinStateTask = new SetTargetPinState(this->pinDescriptor, pinState); const auto setPinStateTask = QSharedPointer<SetTargetPinState>(
QObject::connect(setPinStateTask, &InsightWorkerTask::completed, this, [this, pinState] { new SetTargetPinState(this->pinDescriptor, pinState),
&QObject::deleteLater
);
QObject::connect(setPinStateTask.get(), &InsightWorkerTask::completed, this, [this, pinState] {
this->updatePinState(pinState); this->updatePinState(pinState);
this->setDisabled(false); this->setDisabled(false);
}); });
QObject::connect(setPinStateTask, &InsightWorkerTask::failed, this, [this] { QObject::connect(setPinStateTask.get(), &InsightWorkerTask::failed, this, [this] {
this->setDisabled(false); this->setDisabled(false);
}); });