From cc5f03a54cce9b9ecfaa7eb5d2a26dbd8e76fea4 Mon Sep 17 00:00:00 2001
From: Gennady Pospelov <g.pospelov@fz-juelich.de>
Date: Thu, 21 Apr 2016 11:42:03 +0200
Subject: [PATCH] Gentle way of clearing JobModel to properly notify dependent
 widgets

---
 GUI/coregui/Models/JobModel.cpp               | 11 ++++++++
 GUI/coregui/Models/JobModel.h                 |  2 ++
 GUI/coregui/Models/SessionModel.h             |  2 +-
 .../IntensityDataWidgets/ColorMapPlot.cpp     | 25 -------------------
 4 files changed, 14 insertions(+), 26 deletions(-)

diff --git a/GUI/coregui/Models/JobModel.cpp b/GUI/coregui/Models/JobModel.cpp
index d855ac967f1..5743f057914 100644
--- a/GUI/coregui/Models/JobModel.cpp
+++ b/GUI/coregui/Models/JobModel.cpp
@@ -110,6 +110,16 @@ bool JobModel::hasUnfinishedJobs()
     return m_queue_data->hasUnfinishedJobs();
 }
 
+void JobModel::clear()
+{
+    QMap<QString, SessionItem *> jobs = getTopItemMap(Constants::JobItemType);
+    for(auto it = jobs.begin(); it!=jobs.end(); ++it) {
+        removeJob(it.value()->index());
+    }
+
+    SessionModel::clear();
+}
+
 void JobModel::runJob(const QModelIndex &index)
 {
     m_queue_data->runJob(getJobItemForIndex(index));
@@ -125,6 +135,7 @@ void JobModel::removeJob(const QModelIndex &index)
 {
     qDebug() << "NJobModel::removeJob(const QModelIndex &index)";
     JobItem *jobItem = getJobItemForIndex(index);
+    Q_ASSERT(jobItem);
     m_queue_data->removeJob(jobItem->getIdentifier());
 
     emit aboutToDeleteJobItem(jobItem);
diff --git a/GUI/coregui/Models/JobModel.h b/GUI/coregui/Models/JobModel.h
index 235466e3596..7dd4002df34 100644
--- a/GUI/coregui/Models/JobModel.h
+++ b/GUI/coregui/Models/JobModel.h
@@ -48,6 +48,8 @@ public:
 
     bool hasUnfinishedJobs();
 
+    void clear();
+
 signals:
     void selectionChanged(JobItem *item);
     void aboutToDeleteJobItem(JobItem *item);
diff --git a/GUI/coregui/Models/SessionModel.h b/GUI/coregui/Models/SessionModel.h
index f417a2df441..7a2a84fab4e 100644
--- a/GUI/coregui/Models/SessionModel.h
+++ b/GUI/coregui/Models/SessionModel.h
@@ -79,7 +79,7 @@ public:
 
     QVector<QString> getAcceptableDefaultItemTypes(const QModelIndex &parent) const;
 
-    void clear();
+    virtual void clear();
     void load(const QString &filename = QString());
     void save(const QString &filename = QString());
 
diff --git a/GUI/coregui/Views/IntensityDataWidgets/ColorMapPlot.cpp b/GUI/coregui/Views/IntensityDataWidgets/ColorMapPlot.cpp
index 2dad456db99..b3fa9936e38 100644
--- a/GUI/coregui/Views/IntensityDataWidgets/ColorMapPlot.cpp
+++ b/GUI/coregui/Views/IntensityDataWidgets/ColorMapPlot.cpp
@@ -74,31 +74,6 @@ void ColorMapPlot::setItem(IntensityDataItem *item)
 
     }
 
-
-//    m_item = item;
-
-//    if (!m_item)
-//        return;
-
-//    plotItem(m_item);
-
-////    connect(m_item, SIGNAL(intensityModified()), this,
-////               SLOT(onIntensityModified()));
-//    m_mapper.reset(new ModelMapper);
-
-//    m_mapper->setItem(item);
-//    m_mapper->setOnPropertyChange(
-//                [this](const QString &name)
-//    {
-//        onPropertyChanged(name);
-//        onIntensityModified();
-//    });
-//    m_mapper->setOnChildPropertyChange(
-//                [this](SessionItem* item, const QString name)
-//    {
-////        if (item->parent() && item->parent()->modelType() == Constants::GroupItemType)
-//            onSubItemPropertyChanged(item->itemName(), name);
-//    });
 }
 
 //! returns string containing bin content information
-- 
GitLab