diff --git a/qt/scientific_interfaces/Indirect/IndirectDataTablePresenter.cpp b/qt/scientific_interfaces/Indirect/IndirectDataTablePresenter.cpp index ea77ccb123090e56ca287311fcac8ab0075c9642..c3816e247a0b2c6caf311845c9bdd9983ec3e5e2 100644 --- a/qt/scientific_interfaces/Indirect/IndirectDataTablePresenter.cpp +++ b/qt/scientific_interfaces/Indirect/IndirectDataTablePresenter.cpp @@ -255,8 +255,9 @@ void IndirectDataTablePresenter::addNewData(std::size_t index) { MantidQt::API::SignalBlocker<QObject> blocker(m_dataTable); const auto start = m_dataTable->rowCount(); - const auto addRow = - [&](std::size_t spectrum) { addTableEntry(index, spectrum); }; + const auto addRow = [&](std::size_t spectrum) { + addTableEntry(index, spectrum); + }; m_model->applySpectra(index, addRow); if (m_model->numberOfWorkspaces() > m_dataPositions.size()) @@ -264,6 +265,13 @@ void IndirectDataTablePresenter::addNewData(std::size_t index) { } void IndirectDataTablePresenter::updateData(std::size_t index) { + if (m_dataPositions.size() > index) + updateExistingData(index); + else + addNewData(index); +} + +void IndirectDataTablePresenter::updateExistingData(std::size_t index) { MantidQt::API::SignalBlocker<QObject> blocker(m_dataTable); auto position = m_dataPositions[index]; const auto nextPosition = getNextPosition(index); diff --git a/qt/scientific_interfaces/Indirect/IndirectDataTablePresenter.h b/qt/scientific_interfaces/Indirect/IndirectDataTablePresenter.h index 95014716d6407fc917c8da019182cbb63d935685..6bb7c05cb7fd24f5ea2cc1667e31088c2848ca67 100644 --- a/qt/scientific_interfaces/Indirect/IndirectDataTablePresenter.h +++ b/qt/scientific_interfaces/Indirect/IndirectDataTablePresenter.h @@ -109,6 +109,7 @@ private: void enableGlobalFittingRange(); void disableGlobalFittingRange(); + void updateExistingData(std::size_t index); void addNewData(std::size_t index); void addTableEntry(std::size_t dataIndex, std::size_t spectrum); std::size_t removeTableEntry(int row); diff --git a/qt/scientific_interfaces/Indirect/IndirectFitData.cpp b/qt/scientific_interfaces/Indirect/IndirectFitData.cpp index 4c4a59c71f536f5b5601c42e42f68d67f6db9e0a..c59d39433736b3ea3ebf7342109ed4f8c9dea33d 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFitData.cpp +++ b/qt/scientific_interfaces/Indirect/IndirectFitData.cpp @@ -201,7 +201,7 @@ std::string IndirectFitData::displayName(const std::string &formatString, } Mantid::API::MatrixWorkspace_sptr IndirectFitData::workspace() const { - return m_workspace.lock(); + return m_workspace; } const Spectra &IndirectFitData::spectra() const { return m_spectra; } @@ -223,7 +223,7 @@ IndirectFitData::getRange(std::size_t spectrum) const { const auto range = m_ranges.find(spectrum); if (range != m_ranges.end()) return range->second; - return getBinRange(m_workspace.lock()); + return getBinRange(m_workspace); } std::string IndirectFitData::getExcludeRegion(std::size_t spectrum) const { @@ -268,8 +268,8 @@ void IndirectFitData::setStartX(double startX, std::size_t spectrum) { const auto range = m_ranges.find(spectrum); if (range != m_ranges.end()) range->second.first = startX; - else if (const auto workspace = m_workspace.lock()) - m_ranges[spectrum] = std::make_pair(startX, workspace->x(0).back()); + else if (m_workspace) + m_ranges[spectrum] = std::make_pair(startX, m_workspace->x(0).back()); else throw std::runtime_error( "Unable to set StartX: Workspace no longer exists."); @@ -279,8 +279,8 @@ void IndirectFitData::setEndX(double endX, std::size_t spectrum) { const auto range = m_ranges.find(spectrum); if (range != m_ranges.end()) range->second.second = endX; - else if (const auto workspace = m_workspace.lock()) - m_ranges[spectrum] = std::make_pair(workspace->x(0).front(), endX); + else if (m_workspace) + m_ranges[spectrum] = std::make_pair(m_workspace->x(0).front(), endX); else throw std::runtime_error("Unable to set EndX: Workspace no longer exists."); } diff --git a/qt/scientific_interfaces/Indirect/IndirectFitData.h b/qt/scientific_interfaces/Indirect/IndirectFitData.h index 09369e811f271308ebc3c4913fedbeeb26fc0192..0fe9ae537c9a762faf2ebca29a164863a1872ef5 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFitData.h +++ b/qt/scientific_interfaces/Indirect/IndirectFitData.h @@ -188,7 +188,7 @@ public: private: void validateSpectra(const Spectra &spectra); - boost::weak_ptr<Mantid::API::MatrixWorkspace> m_workspace; + Mantid::API::MatrixWorkspace_sptr m_workspace; Spectra m_spectra; std::unordered_map<std::size_t, std::string> m_excludeRegions; std::unordered_map<std::size_t, std::pair<double, double>> m_ranges; diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp index 651b15ab451f5ab259d5bcd86190c4958f260920..e3b1dbbd35f8ff623e24c811bf229da73d33e1ee 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp +++ b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp @@ -10,8 +10,9 @@ namespace IDA { IndirectFitDataPresenter::IndirectFitDataPresenter(IndirectFittingModel *model, IndirectFitDataView *view) : IndirectFitDataPresenter( - model, view, Mantid::Kernel::make_unique<IndirectDataTablePresenter>( - model, view->getDataTable())) {} + model, view, + Mantid::Kernel::make_unique<IndirectDataTablePresenter>( + model, view->getDataTable())) {} IndirectFitDataPresenter::IndirectFitDataPresenter( IndirectFittingModel *model, IndirectFitDataView *view, @@ -53,8 +54,9 @@ IndirectFitDataPresenter::IndirectFitDataPresenter( connect(m_tablePresenter.get(), SIGNAL(excludeRegionChanged(const std::string &, std::size_t, std::size_t)), - this, SIGNAL(excludeRegionChanged(const std::string &, std::size_t, - std::size_t))); + this, + SIGNAL(excludeRegionChanged(const std::string &, std::size_t, + std::size_t))); } IndirectFitDataView const *IndirectFitDataPresenter::getView() const { @@ -114,6 +116,13 @@ void IndirectFitDataPresenter::updateSpectraInTable(std::size_t dataIndex) { m_tablePresenter->updateData(dataIndex); } +void IndirectFitDataPresenter::updateDataInTable(std::size_t dataIndex) { + if (m_tablePresenter->isTableEmpty()) + m_tablePresenter->addData(dataIndex); + else + m_tablePresenter->updateData(dataIndex); +} + void IndirectFitDataPresenter::setResolutionHidden(bool hide) { m_view->setResolutionHidden(hide); } diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h index 2f2e2fbd9984a726f298458dd4e680cbb7e518d9..dcd98df89c5714e584039118e8901b0501a2f58a 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h +++ b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h @@ -91,6 +91,7 @@ protected: private: virtual std::unique_ptr<IAddWorkspaceDialog> getAddWorkspaceDialog(QWidget *parent) const; + void updateDataInTable(std::size_t dataIndex); IndirectFittingModel *m_model; PrivateFittingData m_singleData;