From 793a83ea05bce51e056ee84b0ece3202f5be5a15 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Mon, 22 May 2023 22:43:17 +0200
Subject: [PATCH] rename AbstractData -> IData

---
 GUI/Model/Device/RealItem.cpp                 |  8 ++--
 GUI/Model/Device/RealItem.h                   | 10 ++---
 GUI/Model/Model/RealTreeModel.cpp             |  2 +-
 GUI/Support/IO/AbstractDataLoader.cpp         | 42 +++++++++----------
 GUI/Support/IO/AbstractDataLoader.h           | 18 ++++----
 .../IO/AbstractDataLoaderResultModel.cpp      | 40 ++++++++----------
 .../IO/AbstractDataLoaderResultModel.h        |  8 ++--
 GUI/Support/IO/DataLoaders1D.cpp              | 10 ++---
 GUI/Support/IO/DataLoaders1D.h                | 18 ++++----
 GUI/View/Import/ImportDataUtil.cpp            |  4 +-
 GUI/View/Import/ImportDataUtil.h              |  4 +-
 GUI/View/Import/RealDataSelectorWidget.cpp    |  6 +--
 GUI/View/Import/SpecularDataImportWidget.cpp  | 12 +++---
 GUI/View/Import/SpecularDataImportWidget.h    |  2 +-
 GUI/View/Loaders/AutomaticDataLoader1D.cpp    |  4 +-
 GUI/View/Loaders/AutomaticDataLoader1D.h      |  8 ++--
 .../AutomaticDataLoader1DResultModel.h        |  8 ++--
 GUI/View/Loaders/QREDataLoader.cpp            |  4 +-
 GUI/View/Loaders/QREDataLoader.h              |  8 ++--
 GUI/View/Loaders/QREDataLoaderProperties.cpp  |  8 ++--
 GUI/View/Loaders/QREDataLoaderResultModel.h   |  8 ++--
 Tests/Unit/GUI/TestAutosaveController.cpp     |  2 +-
 Tests/Unit/GUI/TestProjectDocument.cpp        |  2 +-
 23 files changed, 116 insertions(+), 120 deletions(-)

diff --git a/GUI/Model/Device/RealItem.cpp b/GUI/Model/Device/RealItem.cpp
index 2e9a62cbc61..18199111fdc 100644
--- a/GUI/Model/Device/RealItem.cpp
+++ b/GUI/Model/Device/RealItem.cpp
@@ -21,8 +21,8 @@
 #include "GUI/Model/Data/ProjectionItems.h"
 #include "GUI/Model/Data/SpecularDataItem.h"
 #include "GUI/Model/Device/InstrumentItems.h"
-#include "GUI/Support/IO/AbstractDataLoader.h"
 #include "GUI/Support/IO/DataLoaders1D.h"
+#include "GUI/Support/IO/IDataLoader.h"
 #include "GUI/Support/IO/ImportDataInfo.h"
 #include "GUI/Support/IO/ItemFileNameUtil.h"
 #include "GUI/Support/XML/Backup.h"
@@ -253,15 +253,15 @@ bool RealItem::hasImportErrors() const
     return (dataLoader() != nullptr) ? dataLoader()->numErrors() > 0 : false;
 }
 
-void RealItem::setDataLoader(AbstractDataLoader* loader)
+void RealItem::setDataLoader(IDataLoader* loader)
 {
     m_dataLoader.reset(loader);
     if (m_dataLoader)
-        connect(m_dataLoader.get(), &AbstractDataLoader::contentsProcessed, this,
+        connect(m_dataLoader.get(), &IDataLoader::contentsProcessed, this,
                 &RealItem::importContentsProcessed);
 }
 
-AbstractDataLoader* RealItem::dataLoader() const
+IDataLoader* RealItem::dataLoader() const
 {
     return m_dataLoader.get();
 }
diff --git a/GUI/Model/Device/RealItem.h b/GUI/Model/Device/RealItem.h
index b232fe62b91..5d556e78e46 100644
--- a/GUI/Model/Device/RealItem.h
+++ b/GUI/Model/Device/RealItem.h
@@ -17,7 +17,7 @@
 
 #include <QObject>
 
-class AbstractDataLoader;
+class IDataLoader;
 class Datafield;
 class DataItem;
 class ImportDataInfo;
@@ -30,7 +30,7 @@ class QXmlStreamReader;
 class QXmlStreamWriter;
 
 //! Provides access to experimental data, for display and fitting.
-//! Owns an AbstractDataLoader.
+//! Owns an IDataLoader.
 
 class RealItem : public QObject {
     Q_OBJECT
@@ -93,8 +93,8 @@ public:
     bool hasImportErrors() const;
 
     //! Takes ownership of loader
-    void setDataLoader(AbstractDataLoader* loader);
-    AbstractDataLoader* dataLoader() const;
+    void setDataLoader(IDataLoader* loader);
+    IDataLoader* dataLoader() const;
 
     //! Returns true, if rotation will affect linked instrument or mask presence.
     bool rotationAffectsSetup() const;
@@ -153,7 +153,7 @@ private:
     */
     std::unique_ptr<DataItem> m_dataItem;
     std::unique_ptr<DataItem> m_nativeDataItem;
-    std::unique_ptr<AbstractDataLoader> m_dataLoader;
+    std::unique_ptr<IDataLoader> m_dataLoader;
 };
 
 #endif // BORNAGAIN_GUI_MODEL_DEVICE_REALITEM_H
diff --git a/GUI/Model/Model/RealTreeModel.cpp b/GUI/Model/Model/RealTreeModel.cpp
index c22db848ca5..fee82ebdf6f 100644
--- a/GUI/Model/Model/RealTreeModel.cpp
+++ b/GUI/Model/Model/RealTreeModel.cpp
@@ -16,7 +16,7 @@
 #include "GUI/Application/ApplicationSettings.h"
 #include "GUI/Model/Device/RealItem.h"
 #include "GUI/Model/Model/RealModel.h"
-#include "GUI/Support/IO/AbstractDataLoader.h"
+#include "GUI/Support/IO/IDataLoader.h"
 #include <QApplication>
 #include <QtGui>
 
diff --git a/GUI/Support/IO/AbstractDataLoader.cpp b/GUI/Support/IO/AbstractDataLoader.cpp
index fb0014cca4e..5cc6743dc3e 100644
--- a/GUI/Support/IO/AbstractDataLoader.cpp
+++ b/GUI/Support/IO/AbstractDataLoader.cpp
@@ -2,8 +2,8 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      GUI/Support/IO/AbstractDataLoader.cpp
-//! @brief     Implements class AbstractDataLoader
+//! @file      GUI/Support/IO/IDataLoader.cpp
+//! @brief     Implements class IDataLoader
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -12,78 +12,78 @@
 //
 //  ************************************************************************************************
 
-#include "GUI/Support/IO/AbstractDataLoader.h"
+#include "GUI/Support/IO/IDataLoader.h"
 #include <QString>
 
-void AbstractDataLoader::populateImportSettingsWidget(QWidget*) {}
+void IDataLoader::populateImportSettingsWidget(QWidget*) {}
 
-void AbstractDataLoader::applyImportSettings() {}
+void IDataLoader::applyImportSettings() {}
 
-void AbstractDataLoader::initWithDefaultImportSettings() {}
+void IDataLoader::initWithDefaultImportSettings() {}
 
-QByteArray AbstractDataLoader::serialize() const
+QByteArray IDataLoader::serialize() const
 {
     return QByteArray();
 }
 
-void AbstractDataLoader::deserialize(const QByteArray&) {}
+void IDataLoader::deserialize(const QByteArray&) {}
 
-QByteArray AbstractDataLoader::defaultImportSettings() const
+QByteArray IDataLoader::defaultImportSettings() const
 {
-    std::unique_ptr<AbstractDataLoader> cloned(clone());
+    std::unique_ptr<IDataLoader> cloned(clone());
     cloned->initWithDefaultImportSettings();
     return cloned->serialize();
 }
 
-void AbstractDataLoader::guessSettings() {}
+void IDataLoader::guessSettings() {}
 
-int AbstractDataLoader::numErrors() const
+int IDataLoader::numErrors() const
 {
     return 0;
 }
 
-int AbstractDataLoader::numLineRelatedErrors() const
+int IDataLoader::numLineRelatedErrors() const
 {
     return 0;
 }
 
-QStringList AbstractDataLoader::lineUnrelatedErrors() const
+QStringList IDataLoader::lineUnrelatedErrors() const
 {
     return {};
 }
 
-AbstractDataLoaderResultModel* AbstractDataLoader::createResultModel() const
+IDataLoaderResultModel* IDataLoader::createResultModel() const
 {
     return nullptr;
 }
 
-QByteArray AbstractDataLoader::fileContent() const
+QByteArray IDataLoader::fileContent() const
 {
     return {};
 }
 
-void AbstractDataLoader::setRealDataItem(RealItem* item)
+void IDataLoader::setRealDataItem(RealItem* item)
 {
     m_item = item;
 }
 
-RealItem* AbstractDataLoader::realItem()
+RealItem* IDataLoader::realItem()
 {
     return m_item;
 }
 
-const RealItem* AbstractDataLoader::realItem() const
+const RealItem* IDataLoader::realItem() const
 {
     return m_item;
 }
 
-QDataStream& operator<<(QDataStream& stream, const AbstractDataLoader& s)
+QDataStream& operator<<(QDataStream& stream, const IDataLoader& s)
 {
     stream << s.serialize();
     return stream;
 }
 
-QDataStream& operator>>(QDataStream& stream, AbstractDataLoader& s)
+QDataStream& operator>>(QDataStream& stream, IDataLoader& s)
 {
     QByteArray b;
     stream >> b;
diff --git a/GUI/Support/IO/AbstractDataLoader.h b/GUI/Support/IO/AbstractDataLoader.h
index b0004f2350b..64011764bbb 100644
--- a/GUI/Support/IO/AbstractDataLoader.h
+++ b/GUI/Support/IO/AbstractDataLoader.h
@@ -2,8 +2,8 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      GUI/Support/IO/AbstractDataLoader.h
-//! @brief     Defines class AbstractDataLoader
+//! @file      GUI/Support/IO/IDataLoader.h
+//! @brief     Defines class IDataLoader
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -18,16 +18,16 @@
 class QString;
 class QByteArray;
 class RealItem;
-class AbstractDataLoaderResultModel;
+class IDataLoaderResultModel;
 
 #include <QObject>
 
 //! Abstract base class for all data loaders (classes to import real data).
 
-class AbstractDataLoader : public QObject {
+class IDataLoader : public QObject {
     Q_OBJECT
 public:
-    ~AbstractDataLoader() override = default;
+    ~IDataLoader() override = default;
 
     //! The name shown in the format selection combo
     virtual QString name() const = 0;
@@ -59,7 +59,7 @@ public:
     virtual QByteArray defaultImportSettings() const;
 
     //! Create a complete clone, including all internal states
-    virtual AbstractDataLoader* clone() const = 0;
+    virtual IDataLoader* clone() const = 0;
 
     //! Returns every internal setting so it can be restored completely
     virtual QByteArray serialize() const;
@@ -108,7 +108,7 @@ public:
     //! original file content, raw content, processed content.
     //! The returned pointer will be owned by the caller.
     //! This base class' implementation does nothing (return nullptr).
-    virtual AbstractDataLoaderResultModel* createResultModel() const;
+    virtual IDataLoaderResultModel* createResultModel() const;
 
 signals:
     //! Emitted whenever an import setting changed
@@ -121,7 +121,7 @@ protected:
     RealItem* m_item; //!< The real-data-item which owns this loader. Never delete this!
 };
 
-QDataStream& operator<<(QDataStream& stream, const AbstractDataLoader& s);
-QDataStream& operator>>(QDataStream& stream, AbstractDataLoader& s);
+QDataStream& operator<<(QDataStream& stream, const IDataLoader& s);
+QDataStream& operator>>(QDataStream& stream, IDataLoader& s);
 
 #endif // BORNAGAIN_GUI_SUPPORT_IO_ABSTRACTDATALOADER_H
diff --git a/GUI/Support/IO/AbstractDataLoaderResultModel.cpp b/GUI/Support/IO/AbstractDataLoaderResultModel.cpp
index 132688777ef..93bb6c05747 100644
--- a/GUI/Support/IO/AbstractDataLoaderResultModel.cpp
+++ b/GUI/Support/IO/AbstractDataLoaderResultModel.cpp
@@ -2,8 +2,8 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      GUI/Support/IO/AbstractDataLoaderResultModel.cpp
-//! @brief     Implements class AbstractDataLoaderResultModel
+//! @file      GUI/Support/IO/IDataLoaderResultModel.cpp
+//! @brief     Implements class IDataLoaderResultModel
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -12,7 +12,7 @@
 //
 //  ************************************************************************************************
 
-#include "GUI/Support/IO/AbstractDataLoaderResultModel.h"
+#include "GUI/Support/IO/IDataLoaderResultModel.h"
 #include <QColor>
 #include <QIcon>
 #include <QVariant>
@@ -29,18 +29,17 @@ QColor Palette::skippedLineTextColor(Qt::lightGray);
 
 } // namespace
 
-AbstractDataLoaderResultModel::AbstractDataLoaderResultModel()
+IDataLoaderResultModel::IDataLoaderResultModel()
 {
     m_warningIcon = QIcon(":/images/warning_16x16.png");
 }
 
-int AbstractDataLoaderResultModel::columnCount(const QModelIndex& parent /*= QModelIndex()*/) const
+int IDataLoaderResultModel::columnCount(const QModelIndex& parent /*= QModelIndex()*/) const
 {
     if (parent.isValid())
         return 0;
 
-    const auto colTypes = {ColumnType::line,
-                           ColumnType::processed};
+    const auto colTypes = {ColumnType::line, ColumnType::processed};
 
     int cols = 0;
     for (ColumnType type : colTypes)
@@ -49,13 +48,13 @@ int AbstractDataLoaderResultModel::columnCount(const QModelIndex& parent /*= QMo
     return cols;
 }
 
-int AbstractDataLoaderResultModel::rowCount(const QModelIndex& parent) const
+int IDataLoaderResultModel::rowCount(const QModelIndex& parent) const
 {
     return parent.isValid() ? 0 : rowCount();
 }
 
-QVariant AbstractDataLoaderResultModel::data(const QModelIndex& index,
-                                             int role /*= Qt::DisplayRole*/) const
+QVariant IDataLoaderResultModel::data(const QModelIndex& index,
+                                      int role /*= Qt::DisplayRole*/) const
 {
     if (!index.isValid())
         return QVariant();
@@ -98,8 +97,8 @@ QVariant AbstractDataLoaderResultModel::data(const QModelIndex& index,
     return QVariant();
 }
 
-QVariant AbstractDataLoaderResultModel::headerData(int section, Qt::Orientation orientation,
-                                                   int role) const
+QVariant IDataLoaderResultModel::headerData(int section, Qt::Orientation orientation,
+                                            int role) const
 {
     if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
         switch (columnType(section)) {
@@ -116,7 +115,7 @@ QVariant AbstractDataLoaderResultModel::headerData(int section, Qt::Orientation
     return QAbstractTableModel::headerData(section, orientation, role);
 }
 
-QVector<int> AbstractDataLoaderResultModel::sectionsOfColumnType(ColumnType type) const
+QVector<int> IDataLoaderResultModel::sectionsOfColumnType(ColumnType type) const
 {
     QVector<int> sections;
     for (int section = firstSectionOfColumnType(type); section <= lastSectionOfColumnType(type);
@@ -127,19 +126,18 @@ QVector<int> AbstractDataLoaderResultModel::sectionsOfColumnType(ColumnType type
     return sections;
 }
 
-AbstractDataLoaderResultModel::ColumnType
-AbstractDataLoaderResultModel::columnType(int section) const
+IDataLoaderResultModel::ColumnType IDataLoaderResultModel::columnType(int section) const
 {
     return section == 0 ? ColumnType::line : ColumnType::processed;
 }
 
-AbstractDataLoaderResultModel::ColumnType
-AbstractDataLoaderResultModel::columnType(const QModelIndex& index) const
+IDataLoaderResultModel::ColumnType
+IDataLoaderResultModel::columnType(const QModelIndex& index) const
 {
     return columnType(index.column());
 }
 
-int AbstractDataLoaderResultModel::firstSectionOfColumnType(ColumnType type) const
+int IDataLoaderResultModel::firstSectionOfColumnType(ColumnType type) const
 {
     const int lineColumnCount = columnCount(ColumnType::line);
 
@@ -148,15 +146,13 @@ int AbstractDataLoaderResultModel::firstSectionOfColumnType(ColumnType type) con
 
     if (type == ColumnType::processed) {
         const bool hasProcessedContent = columnCount(ColumnType::processed) > 0;
-        return hasProcessedContent
-                   ? lineColumnCount
-                   : -1;
+        return hasProcessedContent ? lineColumnCount : -1;
     }
 
     return -1;
 }
 
-int AbstractDataLoaderResultModel::lastSectionOfColumnType(ColumnType type) const
+int IDataLoaderResultModel::lastSectionOfColumnType(ColumnType type) const
 {
     const int firstSection = firstSectionOfColumnType(type);
     if (firstSection == -1)
diff --git a/GUI/Support/IO/AbstractDataLoaderResultModel.h b/GUI/Support/IO/AbstractDataLoaderResultModel.h
index bcd0bdd8509..bde06b936d5 100644
--- a/GUI/Support/IO/AbstractDataLoaderResultModel.h
+++ b/GUI/Support/IO/AbstractDataLoaderResultModel.h
@@ -2,8 +2,8 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      GUI/Support/IO/AbstractDataLoaderResultModel.h
-//! @brief     Defines class AbstractDataLoaderResultModel
+//! @file      GUI/Support/IO/IDataLoaderResultModel.h
+//! @brief     Defines class IDataLoaderResultModel
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -21,12 +21,12 @@
 //! Base class for result tables of data loaders. Derive from this class and return an instance in
 //! YourDataLoader::createResultModel().
 //! The result table is the one on the right side when importing CSV files.
-class AbstractDataLoaderResultModel : public QAbstractTableModel {
+class IDataLoaderResultModel : public QAbstractTableModel {
     Q_OBJECT
 public:
     enum class ColumnType { line, processed };
 
-    AbstractDataLoaderResultModel();
+    IDataLoaderResultModel();
 
     // overrides of QAbstractTableModel
 public:
diff --git a/GUI/Support/IO/DataLoaders1D.cpp b/GUI/Support/IO/DataLoaders1D.cpp
index 3134830c157..b5c630185ec 100644
--- a/GUI/Support/IO/DataLoaders1D.cpp
+++ b/GUI/Support/IO/DataLoaders1D.cpp
@@ -13,7 +13,7 @@
 //  ************************************************************************************************
 
 #include "GUI/Support/IO/DataLoaders1D.h"
-#include "GUI/Support/IO/AbstractDataLoader.h"
+#include "GUI/Support/IO/IDataLoader.h"
 
 DataLoaders1D::~DataLoaders1D()
 {
@@ -28,23 +28,23 @@ DataLoaders1D& DataLoaders1D::instance()
 }
 
 void DataLoaders1D::addBuiltInLoader(const QString& name,
-                                     const std::function<AbstractDataLoader*()>& create)
+                                     const std::function<IDataLoader*()>& create)
 {
     m_createLoaders.emplace(name, create);
     m_builtInLoaders.push_back(create());
 }
 
-QVector<AbstractDataLoader*> DataLoaders1D::loaders() const
+QVector<IDataLoader*> DataLoaders1D::loaders() const
 {
     return m_builtInLoaders;
 }
 
-QVector<AbstractDataLoader*> DataLoaders1D::recentlyUsedLoaders() const
+QVector<IDataLoader*> DataLoaders1D::recentlyUsedLoaders() const
 {
     return m_recentlyUsedLoaders;
 }
 
-AbstractDataLoader* DataLoaders1D::createFromPersistentName(const QString& persistentClassName)
+IDataLoader* DataLoaders1D::createFromPersistentName(const QString& persistentClassName)
 {
     auto it = m_createLoaders.find(persistentClassName);
 
diff --git a/GUI/Support/IO/DataLoaders1D.h b/GUI/Support/IO/DataLoaders1D.h
index 82a5b2b8718..db69de9f8a3 100644
--- a/GUI/Support/IO/DataLoaders1D.h
+++ b/GUI/Support/IO/DataLoaders1D.h
@@ -20,7 +20,7 @@
 #include <functional>
 #include <map>
 
-class AbstractDataLoader;
+class IDataLoader;
 
 //! Collection of all available data loaders for 1D files
 
@@ -33,21 +33,21 @@ public:
 
     //! Register a built-in loader with the given class name and factory function
     void addBuiltInLoader(const QString& persistentClassName,
-                          const std::function<AbstractDataLoader*()>& create);
+                          const std::function<IDataLoader*()>& create);
 
     //! all defined loaders. A null element in the list defines a separator
     //! The returned pointers are the same over the lifetime of the DataLoaders instance, therefore
     //! they can be used for comparison.
-    QVector<AbstractDataLoader*> loaders() const;
+    QVector<IDataLoader*> loaders() const;
 
     //! The last 10 recently used loaders.
-    QVector<AbstractDataLoader*> recentlyUsedLoaders() const;
+    QVector<IDataLoader*> recentlyUsedLoaders() const;
 
     //! Notify loader was recently used
-    // void setRecentlyUsedLoader(const AbstractDataLoader* loader);
+    // void setRecentlyUsedLoader(const IDataLoader* loader);
 
     //! Create loader from the given persistent name
-    AbstractDataLoader* createFromPersistentName(const QString& persistentClassName);
+    IDataLoader* createFromPersistentName(const QString& persistentClassName);
 
 private:
     DataLoaders1D() = default;
@@ -56,9 +56,9 @@ private:
     void initBuiltInLoaders();
 
 private:
-    QVector<AbstractDataLoader*> m_builtInLoaders;
-    QVector<AbstractDataLoader*> m_recentlyUsedLoaders;
-    std::map<QString, std::function<AbstractDataLoader*()>> m_createLoaders;
+    QVector<IDataLoader*> m_builtInLoaders;
+    QVector<IDataLoader*> m_recentlyUsedLoaders;
+    std::map<QString, std::function<IDataLoader*()>> m_createLoaders;
 };
 
 #endif // BORNAGAIN_GUI_SUPPORT_IO_DATALOADERS1D_H
diff --git a/GUI/View/Import/ImportDataUtil.cpp b/GUI/View/Import/ImportDataUtil.cpp
index 3fe8c068cc0..6a4dac8ae5d 100644
--- a/GUI/View/Import/ImportDataUtil.cpp
+++ b/GUI/View/Import/ImportDataUtil.cpp
@@ -58,7 +58,7 @@ std::unique_ptr<Datafield> GUI::View::ImportDataUtil::Import2dData(const QString
 }
 
 QString GUI::View::ImportDataUtil::Import1dData(RealItem* realItem,
-                                                const AbstractDataLoader* selectedLoader)
+                                                const IDataLoader* selectedLoader)
 {
     const QString fileName = realItem->nativeFileName();
     const std::string fileNameStdString = fileName.toStdString();
@@ -98,7 +98,7 @@ QString GUI::View::ImportDataUtil::Import1dData(RealItem* realItem,
         // #baimport implement decompress
     }
 
-    AbstractDataLoader* loader = nullptr;
+    IDataLoader* loader = nullptr;
     if (selectedLoader == nullptr)
         loader = new QREDataLoader();
     else
diff --git a/GUI/View/Import/ImportDataUtil.h b/GUI/View/Import/ImportDataUtil.h
index 95c1cbeedc6..15336a79204 100644
--- a/GUI/View/Import/ImportDataUtil.h
+++ b/GUI/View/Import/ImportDataUtil.h
@@ -22,7 +22,7 @@
 class Datafield;
 class RealItem;
 class InstrumentItem;
-class AbstractDataLoader;
+class IDataLoader;
 
 //! Provides utility methods to import data files.
 
@@ -39,7 +39,7 @@ std::unique_ptr<Datafield> Import2dData(const QString& fileName, IO::Filetype2D
 //! by different import settings or by using a different data loader.
 //! Argument selectedLoader is the one which was selected in the open-file-dialog
 //! (or null if none selected).
-QString Import1dData(RealItem* realItem, const AbstractDataLoader* selectedLoader);
+QString Import1dData(RealItem* realItem, const IDataLoader* selectedLoader);
 
 } // namespace GUI::View::ImportDataUtil
 
diff --git a/GUI/View/Import/RealDataSelectorWidget.cpp b/GUI/View/Import/RealDataSelectorWidget.cpp
index 552dfa5cbdb..f14a617c48f 100644
--- a/GUI/View/Import/RealDataSelectorWidget.cpp
+++ b/GUI/View/Import/RealDataSelectorWidget.cpp
@@ -17,8 +17,8 @@
 #include "GUI/Application/ApplicationSettings.h"
 #include "GUI/Model/Device/RealItem.h"
 #include "GUI/Model/Model/RealTreeModel.h"
-#include "GUI/Support/IO/AbstractDataLoader.h"
 #include "GUI/Support/IO/DataLoaders1D.h"
+#include "GUI/Support/IO/IDataLoader.h"
 #include "GUI/Support/Util/StyleUtil.h"
 #include "GUI/View/Import/ImportDataUtil.h"
 #include "GUI/View/Import/RealDataPropertiesWidget.h"
@@ -229,7 +229,7 @@ void RealDataSelectorWidget::onContextMenuRequest(const QPoint& point)
 
 void RealDataSelectorWidget::importData1D()
 {
-    QMap<QString, AbstractDataLoader*> loaderOfFilter;
+    QMap<QString, IDataLoader*> loaderOfFilter;
     QString filters;
     for (auto* loader : DataLoaders1D::instance().loaders()) {
         const QString filter =
@@ -255,7 +255,7 @@ void RealDataSelectorWidget::importData1D()
     ProjectManager::instance()->setImportDirFromFilePath(fileNames[0]);
     ProjectManager::instance()->setRecentlyUsedImportFilter1D(selectedFilter);
 
-    const AbstractDataLoader* selectedLoader = loaderOfFilter.value(selectedFilter, nullptr);
+    const IDataLoader* selectedLoader = loaderOfFilter.value(selectedFilter, nullptr);
 
     for (const QString& fileName : fileNames) {
         RealItem* realItem = m_treeModel->injectDataItem(1);
diff --git a/GUI/View/Import/SpecularDataImportWidget.cpp b/GUI/View/Import/SpecularDataImportWidget.cpp
index dcd42a44808..da21c5ad9f5 100644
--- a/GUI/View/Import/SpecularDataImportWidget.cpp
+++ b/GUI/View/Import/SpecularDataImportWidget.cpp
@@ -16,7 +16,7 @@
 #include "GUI/Model/Data/SpecularDataItem.h"
 #include "GUI/Model/Device/InstrumentItems.h"
 #include "GUI/Model/Project/ProjectDocument.h"
-#include "GUI/Support/IO/AbstractDataLoaderResultModel.h"
+#include "GUI/Support/IO/IDataLoaderResultModel.h"
 #include "GUI/View/Loaders/DataLoaderUtil.h"
 #include "GUI/View/Loaders/QREDataLoader.h"
 #include "GUI/View/PlotSpecular/SpecularDataCanvas.h"
@@ -102,13 +102,13 @@ void SpecularDataImportWidget::setJobOrRealItem(QObject* real_item)
     ASSERT(realItem());
     m_canvas->setJobOrRealItem(real_item);
 
-    m_loader = dynamic_cast<AbstractDataLoader*>(realItem()->dataLoader());
+    m_loader = dynamic_cast<IDataLoader*>(realItem()->dataLoader());
     ASSERT(m_loader); // only items which have a loader are allowed for this widget. Every other
                       // items do not support this widget
 
     updatePropertiesEdits();
     updatePreview();
-    connect(m_loader, &AbstractDataLoader::importSettingsChanged, this,
+    connect(m_loader, &IDataLoader::importSettingsChanged, this,
             &SpecularDataImportWidget::onPropertiesChanged, Qt::UniqueConnection);
 }
 
@@ -177,14 +177,14 @@ void SpecularDataImportWidget::updatePreview()
                                                          // of QAbstractItemView::setModel
         auto* resultModel = m_loader->createResultModel();
         if (resultModel != nullptr) {
-            const auto processedSections = resultModel->sectionsOfColumnType(
-                AbstractDataLoaderResultModel::ColumnType::processed);
+            const auto processedSections =
+                resultModel->sectionsOfColumnType(IDataLoaderResultModel::ColumnType::processed);
 
             m_data_table->setModel(resultModel);
 
             // if the result model has a line column, then do not show the vertical header view
             const bool hasLinesColumn =
-                !resultModel->sectionsOfColumnType(AbstractDataLoaderResultModel::ColumnType::line)
+                !resultModel->sectionsOfColumnType(IDataLoaderResultModel::ColumnType::line)
                      .isEmpty();
             m_data_table->verticalHeader()->setHidden(hasLinesColumn);
 
diff --git a/GUI/View/Import/SpecularDataImportWidget.h b/GUI/View/Import/SpecularDataImportWidget.h
index 3f27abe2911..6efc16c7ec5 100644
--- a/GUI/View/Import/SpecularDataImportWidget.h
+++ b/GUI/View/Import/SpecularDataImportWidget.h
@@ -45,7 +45,7 @@ private:
     void onPropertiesChanged();
     QString currentFileName() const;
 
-    class AbstractDataLoader* m_loader; // only borrowed from realItem. Do not delete!
+    class IDataLoader* m_loader; // only borrowed from realItem. Do not delete!
 
     class SpecularDataCanvas* m_canvas;
     QWidget* m_properties_widget;
diff --git a/GUI/View/Loaders/AutomaticDataLoader1D.cpp b/GUI/View/Loaders/AutomaticDataLoader1D.cpp
index ec28ffd8cd4..1b98c2537d9 100644
--- a/GUI/View/Loaders/AutomaticDataLoader1D.cpp
+++ b/GUI/View/Loaders/AutomaticDataLoader1D.cpp
@@ -32,7 +32,7 @@ QString AutomaticDataLoader1D::persistentClassName() const
     return "AutomaticDataLoader1D";
 }
 
-AbstractDataLoader* AutomaticDataLoader1D::clone() const
+IDataLoader* AutomaticDataLoader1D::clone() const
 {
     auto* loader = new AutomaticDataLoader1D();
     loader->deserialize(serialize());
@@ -106,7 +106,7 @@ void AutomaticDataLoader1D::processContents()
     emit contentsProcessed();
 }
 
-AbstractDataLoaderResultModel* AutomaticDataLoader1D::createResultModel() const
+IDataLoaderResultModel* AutomaticDataLoader1D::createResultModel() const
 {
     return new AutomaticDataLoader1DResultModel(m_item);
 }
diff --git a/GUI/View/Loaders/AutomaticDataLoader1D.h b/GUI/View/Loaders/AutomaticDataLoader1D.h
index 1c12c2beeb7..bb71f926e21 100644
--- a/GUI/View/Loaders/AutomaticDataLoader1D.h
+++ b/GUI/View/Loaders/AutomaticDataLoader1D.h
@@ -16,21 +16,21 @@
 #define BORNAGAIN_GUI_VIEW_LOADERS_AUTOMATICDATALOADER1D_H
 
 #include "Device/Data/Datafield.h"
-#include "GUI/Support/IO/AbstractDataLoader.h"
+#include "GUI/Support/IO/IDataLoader.h"
 
 //! The legacy importer for reflectometry, with no user interaction.
 
-class AutomaticDataLoader1D : public AbstractDataLoader {
+class AutomaticDataLoader1D : public IDataLoader {
 public:
     QString name() const override;
     QString persistentClassName() const override;
-    AbstractDataLoader* clone() const override;
+    IDataLoader* clone() const override;
     QByteArray serialize() const override;
     void deserialize(const QByteArray& data) override;
     void setFileContents(const QByteArray& fileContent) override;
     QByteArray fileContent() const override;
     void processContents() override;
-    AbstractDataLoaderResultModel* createResultModel() const override;
+    IDataLoaderResultModel* createResultModel() const override;
     int numErrors() const override;
     QStringList lineUnrelatedErrors() const override;
 
diff --git a/GUI/View/Loaders/AutomaticDataLoader1DResultModel.h b/GUI/View/Loaders/AutomaticDataLoader1DResultModel.h
index cfc7c319b6d..1270e3ad592 100644
--- a/GUI/View/Loaders/AutomaticDataLoader1DResultModel.h
+++ b/GUI/View/Loaders/AutomaticDataLoader1DResultModel.h
@@ -15,22 +15,22 @@
 #ifndef BORNAGAIN_GUI_VIEW_LOADERS_AUTOMATICDATALOADER1DRESULTMODEL_H
 #define BORNAGAIN_GUI_VIEW_LOADERS_AUTOMATICDATALOADER1DRESULTMODEL_H
 
-#include "GUI/Support/IO/AbstractDataLoaderResultModel.h"
+#include "GUI/Support/IO/IDataLoaderResultModel.h"
 
 class RealItem;
 
 //! The result model of a AutomaticDataLoader1D (for showing the import results in a table view).
-class AutomaticDataLoader1DResultModel : public AbstractDataLoaderResultModel {
+class AutomaticDataLoader1DResultModel : public IDataLoaderResultModel {
 public:
     AutomaticDataLoader1DResultModel(RealItem* item);
 
 protected:
     QString headerTextOfCalculatedColumn(int column) const override;
     int columnCount(ColumnType type) const override;
-    using AbstractDataLoaderResultModel::columnCount;
+    using IDataLoaderResultModel::columnCount;
     QString cellText(ColumnType type, int row, int col) const override;
     int rowCount() const override;
-    using AbstractDataLoaderResultModel::rowCount;
+    using IDataLoaderResultModel::rowCount;
 
 private:
     RealItem* m_item;
diff --git a/GUI/View/Loaders/QREDataLoader.cpp b/GUI/View/Loaders/QREDataLoader.cpp
index 05185c7350b..873fba3d596 100644
--- a/GUI/View/Loaders/QREDataLoader.cpp
+++ b/GUI/View/Loaders/QREDataLoader.cpp
@@ -211,7 +211,7 @@ void QREDataLoader::deserialize(const QByteArray& data)
         throw DeserializationException::streamError();
 }
 
-AbstractDataLoader* QREDataLoader::clone() const
+IDataLoader* QREDataLoader::clone() const
 {
     auto* loader = new QREDataLoader();
     loader->deserialize(serialize());
@@ -290,7 +290,7 @@ QStringList QREDataLoader::lineUnrelatedErrors() const
     return {};
 }
 
-AbstractDataLoaderResultModel* QREDataLoader::createResultModel() const
+IDataLoaderResultModel* QREDataLoader::createResultModel() const
 {
     return new QREDataLoaderResultModel(&m_importResult);
 }
diff --git a/GUI/View/Loaders/QREDataLoader.h b/GUI/View/Loaders/QREDataLoader.h
index 5286880570d..eaa7a9afd74 100644
--- a/GUI/View/Loaders/QREDataLoader.h
+++ b/GUI/View/Loaders/QREDataLoader.h
@@ -15,7 +15,7 @@
 #ifndef BORNAGAIN_GUI_VIEW_LOADERS_QREDATALOADER_H
 #define BORNAGAIN_GUI_VIEW_LOADERS_QREDATALOADER_H
 
-#include "GUI/Support/IO/AbstractDataLoader.h"
+#include "GUI/Support/IO/IDataLoader.h"
 #include <QMap>
 #include <QPointer>
 #include <QVector>
@@ -28,7 +28,7 @@ class QREDataLoaderProperties;
 //! three columns with Q,R,E, namely
 //! Q = wavenumber, R = reflectivity, E = error of R.
 
-class QREDataLoader : public AbstractDataLoader {
+class QREDataLoader : public IDataLoader {
 public:
     QREDataLoader();
     QString name() const override;
@@ -38,7 +38,7 @@ public:
     void applyImportSettings() override;
     QByteArray serialize() const override;
     void deserialize(const QByteArray& data) override;
-    AbstractDataLoader* clone() const override;
+    IDataLoader* clone() const override;
     QByteArray fileContent() const override;
     void setFileContents(const QByteArray& fileContent) override;
     void guessSettings() override;
@@ -46,7 +46,7 @@ public:
     int numErrors() const override;
     int numLineRelatedErrors() const override;
     QStringList lineUnrelatedErrors() const override;
-    AbstractDataLoaderResultModel* createResultModel() const override;
+    IDataLoaderResultModel* createResultModel() const override;
 
 private:
     void parseFileContent() const;
diff --git a/GUI/View/Loaders/QREDataLoaderProperties.cpp b/GUI/View/Loaders/QREDataLoaderProperties.cpp
index 5d6fd995ed7..71a3e302b08 100644
--- a/GUI/View/Loaders/QREDataLoaderProperties.cpp
+++ b/GUI/View/Loaders/QREDataLoaderProperties.cpp
@@ -14,14 +14,14 @@
 
 #include "GUI/View/Loaders/QREDataLoaderProperties.h"
 #include <QCheckBox>
-#include <QGroupBox>
+#include <QComboBox>
 #include <QFormLayout>
-#include <QLabel>
-#include <QVBoxLayout>
+#include <QGroupBox>
 #include <QHBoxLayout>
+#include <QLabel>
 #include <QLineEdit>
-#include <QComboBox>
 #include <QSpinBox>
+#include <QVBoxLayout>
 #include <QtGui>
 
 QREDataLoaderProperties::QREDataLoaderProperties()
diff --git a/GUI/View/Loaders/QREDataLoaderResultModel.h b/GUI/View/Loaders/QREDataLoaderResultModel.h
index c9fe15f9719..3ffb8147957 100644
--- a/GUI/View/Loaders/QREDataLoaderResultModel.h
+++ b/GUI/View/Loaders/QREDataLoaderResultModel.h
@@ -15,21 +15,21 @@
 #ifndef BORNAGAIN_GUI_VIEW_LOADERS_QREDATALOADERRESULTMODEL_H
 #define BORNAGAIN_GUI_VIEW_LOADERS_QREDATALOADERRESULTMODEL_H
 
-#include "GUI/Support/IO/AbstractDataLoaderResultModel.h"
+#include "GUI/Support/IO/IDataLoaderResultModel.h"
 #include "GUI/View/Loaders/QREDataLoader.h"
 
 //! The result model of a QREDataLoader (for showing the import results in a table view).
-class QREDataLoaderResultModel : public AbstractDataLoaderResultModel {
+class QREDataLoaderResultModel : public IDataLoaderResultModel {
 public:
     QREDataLoaderResultModel(QREDataLoader::ImportResult* importResult);
 
 protected:
     QString headerTextOfCalculatedColumn(int column) const override;
     int columnCount(ColumnType type) const override;
-    using AbstractDataLoaderResultModel::columnCount;
+    using IDataLoaderResultModel::columnCount;
     QString cellText(ColumnType type, int row, int col) const override;
     int rowCount() const override;
-    using AbstractDataLoaderResultModel::rowCount;
+    using IDataLoaderResultModel::rowCount;
 
 private:
     QREDataLoader::ImportResult* m_importResult;
diff --git a/Tests/Unit/GUI/TestAutosaveController.cpp b/Tests/Unit/GUI/TestAutosaveController.cpp
index f3584ddd9b4..a6e85ec27c1 100644
--- a/Tests/Unit/GUI/TestAutosaveController.cpp
+++ b/Tests/Unit/GUI/TestAutosaveController.cpp
@@ -3,7 +3,7 @@
 #include "GUI/Model/Data/IntensityDataItem.h"
 #include "GUI/Model/Device/InstrumentItems.h"
 #include "GUI/Model/Device/RealItem.h"
-#include "GUI/Support/IO/AbstractDataLoader.h"
+#include "GUI/Support/IO/IDataLoader.h"
 #include "GUI/Support/IO/ProjectUtil.h"
 #include "GUI/Support/Util/Path.h"
 #include "GUI/View/Project/AutosaveController.h"
diff --git a/Tests/Unit/GUI/TestProjectDocument.cpp b/Tests/Unit/GUI/TestProjectDocument.cpp
index 9feeced63bd..54b1121f4c5 100644
--- a/Tests/Unit/GUI/TestProjectDocument.cpp
+++ b/Tests/Unit/GUI/TestProjectDocument.cpp
@@ -5,7 +5,7 @@
 #include "GUI/Model/Device/RealItem.h"
 #include "GUI/Model/Model/RealModel.h"
 #include "GUI/Model/Project/ProjectDocument.h"
-#include "GUI/Support/IO/AbstractDataLoader.h"
+#include "GUI/Support/IO/IDataLoader.h"
 #include "GUI/Support/IO/ProjectUtil.h"
 #include "GUI/Support/Util/Path.h"
 #include "Tests/GTestWrapper/google_test.h"
-- 
GitLab