From 25c69fd80fba39b603ce61e53a92c8765ec4d4eb Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Tue, 27 Sep 2022 12:46:52 +0200 Subject: [PATCH] JobModel: jobs are unique pointers --- GUI/Model/Model/JobModel.cpp | 24 ++++++++++-------------- GUI/Model/Model/JobModel.h | 2 +- GUI/View/Job/JobListModel.cpp | 1 - 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/GUI/Model/Model/JobModel.cpp b/GUI/Model/Model/JobModel.cpp index 33d7a38a3ed..71778984d5a 100644 --- a/GUI/Model/Model/JobModel.cpp +++ b/GUI/Model/Model/JobModel.cpp @@ -52,13 +52,6 @@ JobModel::JobModel(QObject* parent) JobModel::~JobModel() { delete m_queue_data; - -#ifdef NEW_JOB_MODEL - // jobs should be deleted explicitly, because they are not in tree anymore - qInfo() << "destruction of JobModel"; - for(auto* jobItem : m_jobItems) - delete jobItem; -#endif } JobItem* JobModel::getJobItemForIdentifier(const QString& identifier) @@ -73,10 +66,10 @@ JobItem* JobModel::getJobItemForIdentifier(const QString& identifier) #ifdef NEW_JOB_MODEL JobItem *JobModel::createJobItem() { - JobItem* jobItem = new JobItem(); + auto jobItem = std::make_unique<JobItem>(); jobItem->setParentAndModel(nullptr, this); - m_jobItems.push_back(jobItem); - return jobItem; + m_jobItems.push_back(std::move(jobItem)); + return m_jobItems.back().get(); } #endif @@ -116,7 +109,11 @@ JobItem* JobModel::addJob(const MultiLayerItem* sampleItem, const InstrumentItem QVector<JobItem*> JobModel::jobItems() const { #ifdef NEW_JOB_MODEL - return m_jobItems; + // QVector representation of unique pointers from m_jobItems + QVector<JobItem*> items(m_jobItems.size()); + for(int i=0; i<items.size(); i++) + items[i] = m_jobItems[i].get(); + return items; #else return topItems<JobItem>(); #endif @@ -207,7 +204,6 @@ void JobModel::readFrom(QXmlStreamReader* reader, MessageService* messageService beginResetModel(); clear(); -// GUI::Session::XML::readItems(reader, m_root_item, QString(), messageService); while (reader->readNextStartElement()) { if (reader->name().toString() == GUI::Session::XML::ItemTag) { @@ -262,8 +258,8 @@ void JobModel::removeJob(JobItem* jobItem) m_queue_data->removeJob(jobItem->getIdentifier()); #ifdef NEW_JOB_MODEL - delete jobItem; - m_jobItems.removeOne(jobItem); + int index = jobItems().indexOf(jobItem); + m_jobItems.erase(m_jobItems.begin() + index); #else removeRows(jobItem->index().row(), 1, QModelIndex()); #endif diff --git a/GUI/Model/Model/JobModel.h b/GUI/Model/Model/JobModel.h index d459c56b15c..e99481475e6 100644 --- a/GUI/Model/Model/JobModel.h +++ b/GUI/Model/Model/JobModel.h @@ -68,7 +68,7 @@ private: QString generateJobName(); JobQueueData* m_queue_data; #ifdef NEW_JOB_MODEL - QList<JobItem*> m_jobItems; + std::vector<std::unique_ptr<JobItem>> m_jobItems; #endif }; diff --git a/GUI/View/Job/JobListModel.cpp b/GUI/View/Job/JobListModel.cpp index 1571e025762..6949cbcc375 100644 --- a/GUI/View/Job/JobListModel.cpp +++ b/GUI/View/Job/JobListModel.cpp @@ -101,7 +101,6 @@ void JobListModel::emitJobListModelChanged(JobItem* job) QModelIndex idx = index(i, 0); emit dataChanged(idx, idx); } -// qInfo() << "emitJobListModelChanged"; } //-------------------------------------------------------------------------------------------------- -- GitLab