Skip to content
Snippets Groups Projects
Commit 7cca2c4f authored by Robert Applin's avatar Robert Applin
Browse files

Refs #30686. Use template for updating domain functions.

parent d2ad7bea
No related branches found
No related tags found
No related merge requests found
...@@ -148,13 +148,13 @@ ...@@ -148,13 +148,13 @@
<widget class="QPushButton" name="pbSelectedDomains"> <widget class="QPushButton" name="pbSelectedDomains">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>98</width> <width>100</width>
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>98</width> <width>100</width>
<height>16777215</height> <height>16777215</height>
</size> </size>
</property> </property>
...@@ -170,13 +170,13 @@ ...@@ -170,13 +170,13 @@
<widget class="QPushButton" name="pbAllDomains"> <widget class="QPushButton" name="pbAllDomains">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>98</width> <width>100</width>
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>98</width> <width>100</width>
<height>16777215</height> <height>16777215</height>
</size> </size>
</property> </property>
......
...@@ -58,6 +58,8 @@ public: ...@@ -58,6 +58,8 @@ public:
[[nodiscard]] std::vector<FitDomainIndex> allRows() const; [[nodiscard]] std::vector<FitDomainIndex> allRows() const;
[[nodiscard]] std::vector<FitDomainIndex> selectedRows() const; [[nodiscard]] std::vector<FitDomainIndex> selectedRows() const;
bool hasLoadedData() const;
[[nodiscard]] QString selectedDomainFunctionPrefix() const; [[nodiscard]] QString selectedDomainFunctionPrefix() const;
void removeDomain(std::string const &workspaceName, void removeDomain(std::string const &workspaceName,
......
...@@ -86,14 +86,6 @@ private: ...@@ -86,14 +86,6 @@ private:
void updateEndX(std::string const &workspaceName, void updateEndX(std::string const &workspaceName,
WorkspaceIndex workspaceIndex, double endX); WorkspaceIndex workspaceIndex, double endX);
void
removeFunctionForDomains(std::string const &function,
std::vector<FitDomainIndex> const &domainIndices);
void addFunctionForDomains(std::string const &function,
std::vector<FitDomainIndex> const &domainIndices);
void setFunctionForDomains(std::string const &function,
std::vector<FitDomainIndex> const &domainIndices);
void updateParameterTie(std::string const &workspaceName, void updateParameterTie(std::string const &workspaceName,
WorkspaceIndex workspaceIndex, WorkspaceIndex workspaceIndex,
std::string const &parameter, std::string const &tie); std::string const &parameter, std::string const &tie);
...@@ -102,6 +94,11 @@ private: ...@@ -102,6 +94,11 @@ private:
void checkForWarningMessages(); void checkForWarningMessages();
template <void (IFitScriptGeneratorModel::*func)(
std::string const &workspaceName, WorkspaceIndex workspaceIndex,
std::string const &function)>
void updateDomainFunctions(std::string const &function);
std::vector<std::string> m_warnings; std::vector<std::string> m_warnings;
IFitScriptGeneratorView *m_view; IFitScriptGeneratorView *m_view;
......
...@@ -57,6 +57,8 @@ public: ...@@ -57,6 +57,8 @@ public:
[[nodiscard]] std::vector<FitDomainIndex> allRows() const override; [[nodiscard]] std::vector<FitDomainIndex> allRows() const override;
[[nodiscard]] std::vector<FitDomainIndex> selectedRows() const override; [[nodiscard]] std::vector<FitDomainIndex> selectedRows() const override;
[[nodiscard]] bool hasLoadedData() const override;
[[nodiscard]] double [[nodiscard]] double
parameterValue(std::string const &parameter) const override; parameterValue(std::string const &parameter) const override;
[[nodiscard]] Mantid::API::IFunction::Attribute [[nodiscard]] Mantid::API::IFunction::Attribute
......
...@@ -69,6 +69,8 @@ public: ...@@ -69,6 +69,8 @@ public:
[[nodiscard]] virtual std::vector<FitDomainIndex> allRows() const = 0; [[nodiscard]] virtual std::vector<FitDomainIndex> allRows() const = 0;
[[nodiscard]] virtual std::vector<FitDomainIndex> selectedRows() const = 0; [[nodiscard]] virtual std::vector<FitDomainIndex> selectedRows() const = 0;
[[nodiscard]] virtual bool hasLoadedData() const = 0;
[[nodiscard]] virtual double [[nodiscard]] virtual double
parameterValue(std::string const &parameter) const = 0; parameterValue(std::string const &parameter) const = 0;
[[nodiscard]] virtual Mantid::API::IFunction::Attribute [[nodiscard]] virtual Mantid::API::IFunction::Attribute
......
...@@ -229,6 +229,10 @@ std::vector<FitDomainIndex> FitScriptGeneratorDataTable::selectedRows() const { ...@@ -229,6 +229,10 @@ std::vector<FitDomainIndex> FitScriptGeneratorDataTable::selectedRows() const {
return rowIndices; return rowIndices;
} }
bool FitScriptGeneratorDataTable::hasLoadedData() const {
return this->rowCount() > 0;
}
QString FitScriptGeneratorDataTable::selectedDomainFunctionPrefix() const { QString FitScriptGeneratorDataTable::selectedDomainFunctionPrefix() const {
auto const rows = selectedRows(); auto const rows = selectedRows();
if (rows.empty()) if (rows.empty())
......
...@@ -175,37 +175,30 @@ void FitScriptGeneratorPresenter::handleSelectionChanged() { ...@@ -175,37 +175,30 @@ void FitScriptGeneratorPresenter::handleSelectionChanged() {
void FitScriptGeneratorPresenter::handleFunctionRemoved( void FitScriptGeneratorPresenter::handleFunctionRemoved(
std::string const &function) { std::string const &function) {
auto const rowIndices = getRowIndices(); if (m_view->hasLoadedData()) {
updateDomainFunctions<&IFitScriptGeneratorModel::removeFunction>(function);
if (!rowIndices.empty()) {
removeFunctionForDomains(function, rowIndices);
handleSelectionChanged(); handleSelectionChanged();
} }
} }
void FitScriptGeneratorPresenter::handleFunctionAdded( void FitScriptGeneratorPresenter::handleFunctionAdded(
std::string const &function) { std::string const &function) {
auto const rowIndices = getRowIndices(); if (m_view->hasLoadedData()) {
try {
if (rowIndices.empty()) { updateDomainFunctions<&IFitScriptGeneratorModel::addFunction>(function);
} catch (std::invalid_argument const &ex) {
m_view->displayWarning(ex.what());
}
} else {
m_view->displayWarning("Data needs to be loaded before adding a function."); m_view->displayWarning("Data needs to be loaded before adding a function.");
m_view->clearFunction(); m_view->clearFunction();
return;
}
try {
addFunctionForDomains(function, rowIndices);
} catch (std::invalid_argument const &ex) {
m_view->displayWarning(ex.what());
} }
} }
void FitScriptGeneratorPresenter::handleFunctionReplaced( void FitScriptGeneratorPresenter::handleFunctionReplaced(
std::string const &function) { std::string const &function) {
auto const rowIndices = getRowIndices(); if (m_view->hasLoadedData()) {
updateDomainFunctions<&IFitScriptGeneratorModel::setFunction>(function);
if (!rowIndices.empty()) {
setFunctionForDomains(function, rowIndices);
} else { } else {
m_view->displayWarning("Data needs to be loaded before adding a function."); m_view->displayWarning("Data needs to be loaded before adding a function.");
m_view->clearFunction(); m_view->clearFunction();
...@@ -375,33 +368,15 @@ void FitScriptGeneratorPresenter::updateEndX(std::string const &workspaceName, ...@@ -375,33 +368,15 @@ void FitScriptGeneratorPresenter::updateEndX(std::string const &workspaceName,
} }
} }
void FitScriptGeneratorPresenter::removeFunctionForDomains( template <void (IFitScriptGeneratorModel::*func)(
std::string const &function, std::string const &workspaceName, WorkspaceIndex workspaceIndex,
std::vector<FitDomainIndex> const &domainIndices) { std::string const &function)>
for (auto const &domainIndex : domainIndices) { void FitScriptGeneratorPresenter::updateDomainFunctions(
auto const workspaceName = m_view->workspaceName(domainIndex); std::string const &function) {
auto const workspaceIndex = m_view->workspaceIndex(domainIndex); for (auto const &domainIndex : getRowIndices()) {
m_model->removeFunction(workspaceName, workspaceIndex, function);
}
}
void FitScriptGeneratorPresenter::addFunctionForDomains(
std::string const &function,
std::vector<FitDomainIndex> const &domainIndices) {
for (auto const &domainIndex : domainIndices) {
auto const workspaceName = m_view->workspaceName(domainIndex);
auto const workspaceIndex = m_view->workspaceIndex(domainIndex);
m_model->addFunction(workspaceName, workspaceIndex, function);
}
}
void FitScriptGeneratorPresenter::setFunctionForDomains(
std::string const &function,
std::vector<FitDomainIndex> const &domainIndices) {
for (auto const &domainIndex : domainIndices) {
auto const workspaceName = m_view->workspaceName(domainIndex); auto const workspaceName = m_view->workspaceName(domainIndex);
auto const workspaceIndex = m_view->workspaceIndex(domainIndex); auto const workspaceIndex = m_view->workspaceIndex(domainIndex);
m_model->setFunction(workspaceName, workspaceIndex, function); (m_model->*func)(workspaceName, workspaceIndex, function);
} }
} }
......
...@@ -293,6 +293,10 @@ std::vector<FitDomainIndex> FitScriptGeneratorView::selectedRows() const { ...@@ -293,6 +293,10 @@ std::vector<FitDomainIndex> FitScriptGeneratorView::selectedRows() const {
return m_dataTable->selectedRows(); return m_dataTable->selectedRows();
} }
bool FitScriptGeneratorView::hasLoadedData() const {
return m_dataTable->hasLoadedData();
}
double double
FitScriptGeneratorView::parameterValue(std::string const &parameter) const { FitScriptGeneratorView::parameterValue(std::string const &parameter) const {
return m_functionTreeView->getParameter(QString::fromStdString(parameter)); return m_functionTreeView->getParameter(QString::fromStdString(parameter));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment