diff --git a/tools/oven/src/ui/ModelBakeWidget.cpp b/tools/oven/src/ui/ModelBakeWidget.cpp index cf21483255..08b5402821 100644 --- a/tools/oven/src/ui/ModelBakeWidget.cpp +++ b/tools/oven/src/ui/ModelBakeWidget.cpp @@ -183,7 +183,7 @@ void ModelBakeWidget::bakeButtonClicked() { } // everything seems to be in place, kick off a bake for this model now - auto baker = QSharedPointer { new FBXBaker(modelToBakeURL, outputDirectory.absolutePath(), false) }; + auto baker = std::unique_ptr { new FBXBaker(modelToBakeURL, outputDirectory.absolutePath(), false) }; // move the baker to the baker thread baker->moveToThread(_bakerThread); @@ -194,10 +194,10 @@ void ModelBakeWidget::bakeButtonClicked() { } // invoke the bake method on the baker thread - QMetaObject::invokeMethod(baker.data(), "bake"); + QMetaObject::invokeMethod(baker.get(), "bake"); // make sure we hear about the results of this baker when it is done - connect(baker.data(), &FBXBaker::finished, this, &ModelBakeWidget::handleFinishedBaker); + connect(baker.get(), &FBXBaker::finished, this, &ModelBakeWidget::handleFinishedBaker); // add a pending row to the results window to show that this bake is in process auto resultsWindow = qApp->getMainWindow()->showResultsWindow(); @@ -205,24 +205,26 @@ void ModelBakeWidget::bakeButtonClicked() { // keep a unique_ptr to this baker // and remember the row that represents it in the results table - _bakers.insert(baker, resultsRow); + _bakers.emplace_back(std::move(baker), resultsRow); } } void ModelBakeWidget::handleFinishedBaker() { if (auto baker = qobject_cast(sender())) { - // turn this baker into a shared pointer - auto sharedBaker = QSharedPointer(baker); - // add the results of this bake to the results window - auto resultRow = _bakers.value(sharedBaker); + auto it = std::remove_if(_bakers.begin(), _bakers.end(), [baker](const BakerRowPair& value) { + return value.first.get() == baker; + }); - auto resultsWindow = qApp->getMainWindow()->showResultsWindow(); + if (it != _bakers.end()) { + auto resultRow = it->second; + auto resultsWindow = qApp->getMainWindow()->showResultsWindow(); - if (sharedBaker->hasErrors()) { - resultsWindow->changeStatusForRow(resultRow, baker->getErrors().join("\n")); - } else { - resultsWindow->changeStatusForRow(resultRow, "Success"); + if (baker->hasErrors()) { + resultsWindow->changeStatusForRow(resultRow, baker->getErrors().join("\n")); + } else { + resultsWindow->changeStatusForRow(resultRow, "Success"); + } } } } diff --git a/tools/oven/src/ui/ModelBakeWidget.h b/tools/oven/src/ui/ModelBakeWidget.h index 3d76ec0d4d..9b7a2fed20 100644 --- a/tools/oven/src/ui/ModelBakeWidget.h +++ b/tools/oven/src/ui/ModelBakeWidget.h @@ -41,7 +41,9 @@ private slots: private: void setupUI(); - QHash, int> _bakers; + using BakerRowPair = std::pair, int>; + using BakerRowPairList = std::list; + BakerRowPairList _bakers; QLineEdit* _modelLineEdit; QLineEdit* _outputDirLineEdit;