From 05049dd7f474c9c55666fd466e326a8869daed7a Mon Sep 17 00:00:00 2001
From: Raul Radu <raul.radu@mail.polimi.it>
Date: Wed, 7 Feb 2024 22:32:31 +0100
Subject: [PATCH] [Errors] Using smart pointers in ErrorDisplayer & Error

---
 .../Components/ErrorDisplayer/Error.cpp       |  6 +++---
 .../ErrorDisplayer/ErrorDisplayer.cpp         | 21 +++++++------------
 .../ErrorDisplayer/ErrorDisplayer.h           |  4 +---
 3 files changed, 12 insertions(+), 19 deletions(-)

diff --git a/src/shared/Components/ErrorDisplayer/Error.cpp b/src/shared/Components/ErrorDisplayer/Error.cpp
index 2222d2da..8f6a1df9 100644
--- a/src/shared/Components/ErrorDisplayer/Error.cpp
+++ b/src/shared/Components/ErrorDisplayer/Error.cpp
@@ -77,7 +77,7 @@ Error::Error(ErrorDisplayer* _displayer, QString _title, QString _description,
     adjustSize();
 }
 
-Error::~Error() { displayer->removeError(this); }
+Error::~Error() {}
 
 void Error::incrementCount(int msecDuration)
 {
@@ -86,8 +86,8 @@ void Error::incrementCount(int msecDuration)
     {
         countLabel.setText(QString::number(count));
     }
-    QTimer* timer = new QTimer(this);
-    connect(timer, &QTimer::timeout, this, &Error::decrementCount);
+    std::unique_ptr<QTimer> timer = std::make_unique<QTimer>(this);
+    connect(timer.get(), &QTimer::timeout, this, &Error::decrementCount);
     timer->start(msecDuration);
 }
 
diff --git a/src/shared/Components/ErrorDisplayer/ErrorDisplayer.cpp b/src/shared/Components/ErrorDisplayer/ErrorDisplayer.cpp
index dc8abee0..be8af55d 100644
--- a/src/shared/Components/ErrorDisplayer/ErrorDisplayer.cpp
+++ b/src/shared/Components/ErrorDisplayer/ErrorDisplayer.cpp
@@ -33,10 +33,10 @@ ErrorDisplayer::ErrorDisplayer(QWidget* _parent) : QWidget(_parent)
 
 ErrorDisplayer::~ErrorDisplayer()
 {
-    while (!errors.isEmpty())
+    /*while (!errors.isEmpty())
     {
         delete errors.takeFirst();
-    }
+    }*/
 }
 
 void ErrorDisplayer::createError(QString title, QString description,
@@ -44,27 +44,22 @@ void ErrorDisplayer::createError(QString title, QString description,
 {
     if (!errors.isEmpty())
     {
-        Error* lastError = errors.last();
+        auto& lastError = errors.last();
         if (lastError->compareError(title, description, type))
         {
             lastError->incrementCount(msecDuration);
             return;
         }
     }
-    Error* error = new Error(this, title, description, type, msecDuration);
-    layout.addWidget(error);
-    errors.append(error);
+    auto error =
+        std::make_unique<Error>(this, title, description, type, msecDuration);
+    auto* errorAddr = error.get();
+    layout.addWidget(errorAddr);
+    errors.append(std::move(error));
     error->show();
     reposition();
 }
 
-void ErrorDisplayer::removeError(Error* error)
-{
-    layout.removeWidget(error);
-    errors.removeAll(error);
-    reposition();
-}
-
 void ErrorDisplayer::reposition()
 {
     adjustSize();
diff --git a/src/shared/Components/ErrorDisplayer/ErrorDisplayer.h b/src/shared/Components/ErrorDisplayer/ErrorDisplayer.h
index 38d3c962..9b6940b9 100644
--- a/src/shared/Components/ErrorDisplayer/ErrorDisplayer.h
+++ b/src/shared/Components/ErrorDisplayer/ErrorDisplayer.h
@@ -41,13 +41,11 @@ public:
     void reposition();
 
 protected:
-    void removeError(Error* error);
-
     friend class Error;
 
 private:
     QWidget* parent;
     int index;
     QVBoxLayout layout;
-    QList<Error*> errors;
+    QList<std::unique_ptr<Error>> errors;
 };
-- 
GitLab