Skip to content
Snippets Groups Projects
Commit f9b9dd8d authored by Mikhail Svechnikov's avatar Mikhail Svechnikov
Browse files

FitParameterContainerItem and FitParameterItem: add OwningVector

parent 74b53e74
No related branches found
No related tags found
1 merge request!1120GUI: FitParameterModel and fit items are refactored
......@@ -67,7 +67,7 @@ public:
return;
for(size_t i=0; i<m_v.size(); i++)
if(m_v[i] == e) {
delete m_v(i);
delete m_v[i];
m_v.erase(m_v.begin()+i);
return;
}
......
......@@ -68,9 +68,7 @@ void FitParameterContainerItem::createFitParameter(ParameterItem* parameterItem)
void FitParameterContainerItem::removeFitParameter(FitParameterItem* fitPar)
{
m_fitParameterItems.delete_at();
m_fitParameterItems.removeOne(fitPar);
m_fitParameterItems.delete_element(fitPar);
updateFitParameterNames();
}
......@@ -120,7 +118,7 @@ FitParameterContainerItem::fitParameterItem(const ParameterItem* parameterItem)
QVector<FitParameterItem*> FitParameterContainerItem::fitParameterItems() const
{
return m_fitParameterItems;
return QVector<FitParameterItem*>(m_fitParameterItems.begin(), m_fitParameterItems.end());
}
QStringList FitParameterContainerItem::fitParameterNames() const
......@@ -141,7 +139,7 @@ void FitParameterContainerItem::removeLink(const ParameterItem* parameterItem)
FitParameterItem* FitParameterContainerItem::createBareFitParameter()
{
FitParameterItem* fitPar = new FitParameterItem(this);
m_fitParameterItems.append(fitPar);
m_fitParameterItems.emplace_back(fitPar);
updateFitParameterNames();
return fitPar;
}
......
......@@ -15,6 +15,8 @@
#ifndef BORNAGAIN_GUI_MODEL_JOB_FITPARAMETERCONTAINERITEM_H
#define BORNAGAIN_GUI_MODEL_JOB_FITPARAMETERCONTAINERITEM_H
#include "Base/Types/OwningVector.h"
#include "GUI/Model/Job/FitParameterItem.h"
#include <QObject>
namespace mumufit {
......@@ -22,7 +24,6 @@ namespace mumufit {
class Parameters;
}
class FitParameterItem;
class ParameterItem;
class QXmlStreamReader;
class QXmlStreamWriter;
......@@ -77,7 +78,7 @@ signals:
void fitItemChanged();
private:
QVector<FitParameterItem*> m_fitParameterItems;
OwningVector<FitParameterItem> m_fitParameterItems;
};
#endif // BORNAGAIN_GUI_MODEL_JOB_FITPARAMETERCONTAINERITEM_H
......@@ -356,7 +356,7 @@ QObject* FitParameterItem::maximumItem() const
void FitParameterItem::addLink(const QString& title, const QString& link)
{
FitParameterLinkItem* newLink = new FitParameterLinkItem(this);
m_links.append(newLink);
m_links.emplace_back(newLink);
newLink->setTitle(title);
newLink->setLink(link);
......@@ -364,18 +364,14 @@ void FitParameterItem::addLink(const QString& title, const QString& link)
void FitParameterItem::removeLink(const QString& link)
{
for (FitParameterLinkItem* linkItem : linkItems())
if (linkItem->link() == link) {
if (linkItem)
delete linkItem;
if (m_links.contains(linkItem))
m_links.removeOne(linkItem);
}
for (FitParameterLinkItem* linkItem : m_links)
if (linkItem->link() == link)
m_links.delete_element(linkItem);
}
QVector<FitParameterLinkItem*> FitParameterItem::linkItems() const
{
return m_links;
return QVector<FitParameterLinkItem*>(m_links.begin(), m_links.end());
}
QStringList FitParameterItem::links() const
......
......@@ -15,6 +15,7 @@
#ifndef BORNAGAIN_GUI_MODEL_JOB_FITPARAMETERITEM_H
#define BORNAGAIN_GUI_MODEL_JOB_FITPARAMETERITEM_H
#include "Base/Types/OwningVector.h"
#include "Fit/Param/AttLimits.h"
#include "GUI/Util/ComboProperty.h"
......@@ -128,7 +129,7 @@ private:
std::unique_ptr<FitDoubleItem> m_startValueItem;
std::unique_ptr<FitEditableDoubleItem> m_minItem;
std::unique_ptr<FitEditableDoubleItem> m_maxItem;
QVector<FitParameterLinkItem*> m_links;
OwningVector<FitParameterLinkItem> m_links;
};
#endif // BORNAGAIN_GUI_MODEL_JOB_FITPARAMETERITEM_H
......@@ -19,6 +19,7 @@
#include <QXmlStreamWriter> // used in every including file
#include <heinz/Complex.h>
#include <heinz/Vectors3D.h>
#include "Base/Types/OwningVector.h"
class QXmlStreamReader;
class MessageService;
......@@ -105,27 +106,27 @@ void readVector(QXmlStreamReader* reader, const QString& tag, QVector<T>& vec)
}
}
//! Write vector of classes recursively
//! Write OwningVector of classes
template <typename T>
void writeVectorClass(QXmlStreamWriter* writer, const QString& tag, const QVector<T*>& vec)
void writeVectorClass(QXmlStreamWriter* writer, const QString& tag, const OwningVector<T>& vec)
{
for (int i = 0; i < vec.size(); i++) {
for (T* e : vec) {
writer->writeStartElement(tag);
vec[i]->writeTo(writer);
e->writeTo(writer);
writer->writeEndElement();
}
}
//! Read vector of classes recursively
//! Read OwningVector of classes
template <typename T, typename... Args>
void readVectorClass(QXmlStreamReader* reader, const QString& tag, QVector<T*>& vec,
void readVectorClass(QXmlStreamReader* reader, const QString& tag, OwningVector<T>& vec,
Args... argsForConstructor)
{
vec.clear();
while (reader->readNextStartElement()) {
if (reader->name() == tag) {
vec.push_back(new T(argsForConstructor...));
vec.last()->readFrom(reader);
vec.emplace_back(new T(argsForConstructor...));
vec.back()->readFrom(reader);
GUI::Session::XML::gotoEndElementOfTag(reader, tag);
} else {
reader->skipCurrentElement();
......
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