From fad201527906bbacfecdf6928f18b5c05f95c08c Mon Sep 17 00:00:00 2001
From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de>
Date: Tue, 31 Jan 2023 18:30:59 +0100
Subject: [PATCH] MaskContainerItem: use SelectionVector

---
 GUI/Model/Data/ProjectionItems.cpp |  6 +++---
 GUI/Model/Device/MaskItems.cpp     | 32 ++++++++++--------------------
 GUI/Model/Device/MaskItems.h       |  3 +--
 3 files changed, 15 insertions(+), 26 deletions(-)

diff --git a/GUI/Model/Data/ProjectionItems.cpp b/GUI/Model/Data/ProjectionItems.cpp
index c0200d34ff4..7993862f6f6 100644
--- a/GUI/Model/Data/ProjectionItems.cpp
+++ b/GUI/Model/Data/ProjectionItems.cpp
@@ -47,9 +47,9 @@ void ProjectionContainerItem::verifyMask(MaskItem* maskItem) const
 QVector<SessionItem*> ProjectionContainerItem::projectionsOfType(const QString& projectionType)
 {
     QVector<SessionItem*> projections;
-    for (MaskItem* projection : m_maskItems) {
-        if (projection->modelType() == projectionType)
-            projections.push_back(projection);
+    for (const auto& proj : m_maskItems) {
+        if (proj.currentItem()->modelType() == projectionType)
+            projections.push_back(proj.currentItem());
     }
 
     return projections;
diff --git a/GUI/Model/Device/MaskItems.cpp b/GUI/Model/Device/MaskItems.cpp
index 6dc79bad250..1c3ea31438c 100644
--- a/GUI/Model/Device/MaskItems.cpp
+++ b/GUI/Model/Device/MaskItems.cpp
@@ -58,24 +58,13 @@ MaskContainerItem::MaskContainerItem(const QString& modelType)
 
 QVector<MaskItem*> MaskContainerItem::maskItems() const
 {
-    return m_maskItems;
-}
-
-std::vector<SelectionProperty<MaskItemCatalog>> MaskContainerItem::maskItemSelections() const
-{
-    std::vector<SelectionProperty<MaskItemCatalog>> maskSelections;
-    for (MaskItem* maskItem : m_maskItems) {
-        SelectionProperty<MaskItemCatalog> newMaskSelection;
-        newMaskSelection.setCurrentItem(maskItem);
-        maskSelections.push_back(std::move(newMaskSelection));
-    }
-    return maskSelections;
+    return m_maskItems.toQVector();
 }
 
 void MaskContainerItem::insertMask(int row, MaskItem* maskItem)
 {
     maskItem->setParentAndModel(this, SessionItem::model());
-    m_maskItems.insert(row, maskItem);
+    m_maskItems.insert_at(row, maskItem);
 }
 
 void MaskContainerItem::addMask(MaskItem* maskItem)
@@ -91,19 +80,19 @@ void MaskContainerItem::moveMask(int from_row, int to_row)
 
 void MaskContainerItem::removeMaskAt(int row)
 {
-    m_maskItems.removeAt(row);
+    m_maskItems.delete_at(row);
 }
 
 void MaskContainerItem::removeMask(MaskItem* maskItem)
 {
-    m_maskItems.removeOne(maskItem);
+    m_maskItems.delete_element(maskItem);
 }
 
 RegionOfInterestItem* MaskContainerItem::regionOfInterestItem() const
 {
-    for (MaskItem* maskItem : m_maskItems)
-        if (maskItem->modelType() == RegionOfInterestItem::M_TYPE)
-            return dynamic_cast<RegionOfInterestItem*>(maskItem);
+    for (const auto& maskSel: m_maskItems)
+        if (maskSel.currentItem()->modelType() == RegionOfInterestItem::M_TYPE)
+            return dynamic_cast<RegionOfInterestItem*>(maskSel.currentItem());
 
     return nullptr;
 }
@@ -125,12 +114,12 @@ int MaskContainerItem::size() const
 
 MaskItem* MaskContainerItem::at(const int idx)
 {
-    return m_maskItems.at(idx);
+    return m_maskItems.at(idx).currentItem();
 }
 
 int MaskContainerItem::indexOfItem(MaskItem* maskItem) const
 {
-    return m_maskItems.indexOf(maskItem);
+    return m_maskItems.index_of(maskItem);
 }
 
 void MaskContainerItem::copy(const MaskContainerItem* maskContainer)
@@ -156,7 +145,7 @@ void MaskContainerItem::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(1));
 
-    for (const SelectionProperty<MaskItemCatalog>& sel : maskItemSelections()) {
+    for (const auto& sel : m_maskItems) {
         w->writeStartElement(Tag::Mask);
         sel.writeTo(w);
         w->writeEndElement();
@@ -948,6 +937,7 @@ void MaskContainerModel::setParent(QObject* parent)
 
 void MaskContainerModel::insertMask(int row, MaskItem* maskItem)
 {
+    // TODO: unused method. Remove it?
     QAbstractListModel::beginInsertRows(maskContainer->rootIndex, row, row);
     maskContainer->insertMask(row, maskItem);
     // QModelIndex idx = index(row, 0, {});
diff --git a/GUI/Model/Device/MaskItems.h b/GUI/Model/Device/MaskItems.h
index 5c6811ced87..0bf14e00978 100644
--- a/GUI/Model/Device/MaskItems.h
+++ b/GUI/Model/Device/MaskItems.h
@@ -230,7 +230,6 @@ public:
     MaskContainerItem(const QString& modelType);
 
     QVector<MaskItem*> maskItems() const;
-    std::vector<SelectionProperty<MaskItemCatalog>> maskItemSelections() const;
 
     //! Insert mask at given row.
     virtual void insertMask(int row, MaskItem* maskItem);
@@ -280,7 +279,7 @@ public:
     const QModelIndex rootIndex;
 
 protected:
-    QVector<MaskItem*> m_maskItems;
+    SelectionVector<MaskItemCatalog> m_maskItems;
     MaskContainerModel* m_model = nullptr;
 };
 
-- 
GitLab